Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions packages/linejs/base/e2ee/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1034,21 +1034,26 @@ export class E2EE {
nonce: Buffer,
data: Buffer,
): Promise<Buffer> {
// Convert ArrayBufferLike to ArrayBuffer
const nonceArrayBuffer = nonce.buffer.slice(nonce.byteOffset, nonce.byteOffset + nonce.byteLength);
const aesKeyArrayBuffer = aesKey.buffer.slice(aesKey.byteOffset, aesKey.byteOffset + aesKey.byteLength);
const dataArrayBuffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);

return Buffer.from(
await globalThis.crypto.subtle.encrypt(
{
name: "AES-CTR",
counter: nonce,
counter: new Uint8Array(nonceArrayBuffer as ArrayBuffer),
length: 64,
},
await globalThis.crypto.subtle.importKey(
"raw",
aesKey,
new Uint8Array(aesKeyArrayBuffer as ArrayBuffer),
"AES-CTR",
false,
["encrypt", "decrypt"],
),
data,
new Uint8Array(dataArrayBuffer as ArrayBuffer),
),
);
}
Expand Down
21 changes: 12 additions & 9 deletions packages/linejs/base/obs/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ export class LineObs {
...oid ? { oid: oid } : {
oid: "reqseq",
tomid: to,
reqseq: this.client.getReqseq("talk").toString(),
reqseq: (await this.client.getReqseq("talk")).toString(),
},
};
if (type === "image") {
Expand All @@ -202,7 +202,7 @@ export class LineObs {
return await this.uploadObjectForService({
data,
oType: type,
obsPath: toType + "/m/" + oid || "reqseq",
obsPath: `${toType}/m/${oid ?? "reqseq"}`,
filename: param.name,
params: param,
});
Expand Down Expand Up @@ -241,13 +241,13 @@ export class LineObs {
};

params = { ...baseParams, ...(params || {}) };

if (!data || data.size === 0) {
throw new InternalError("ObsError", "No data to send.");
}
let headers: Record<string, string> = this.client.request
.getHeader("POST");
headers["Content-Type"] = "application/octet-stream";
headers["content-type"] = "application/octet-stream";
headers["X-Obs-Params"] = Buffer.from(JSON.stringify(params)).toString(
"base64",
);
Expand Down Expand Up @@ -331,7 +331,8 @@ export class LineObs {
Buffer.from(await data.arrayBuffer()),
);
const tempId = "reqid-" + crypto.randomUUID();
const edata = new Blob([encryptedData]);
const encryptedArrayBuffer = encryptedData.buffer.slice(encryptedData.byteOffset, encryptedData.byteOffset + encryptedData.byteLength);
const edata = new Blob([new Uint8Array(encryptedArrayBuffer as ArrayBuffer)]);
const { objId } = await this.uploadObjectForService({
data: edata,
oType: "file",
Expand Down Expand Up @@ -407,11 +408,13 @@ export class LineObs {
obsPath: "talk/" + contentMetadata.SID,
addHeaders: { "X-Talk-Meta": talkMeta },
});
const decryptedBuffer = await this.client.e2ee.decryptByKeyMaterial(
Buffer.from(await data.arrayBuffer()),
keyMaterial,
);
const decryptedArrayBuffer = decryptedBuffer.buffer.slice(decryptedBuffer.byteOffset, decryptedBuffer.byteOffset + decryptedBuffer.byteLength);
const fileData = new File([
await this.client.e2ee.decryptByKeyMaterial(
Buffer.from(await data.arrayBuffer()),
keyMaterial,
),
new Uint8Array(decryptedArrayBuffer as ArrayBuffer),
], fileName);
return fileData;
}
Expand Down
3 changes: 2 additions & 1 deletion packages/linejs/base/request/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,14 @@ export class RequestClient {
body: Trequest,
});

const requestArrayBuffer = Trequest.buffer.slice(Trequest.byteOffset, Trequest.byteOffset + Trequest.byteLength);
const response = await this.client.fetch(
`https://${this.endpoint}${path}`,
{
method: overrideMethod,
headers,
signal: AbortSignal.timeout(timeout),
body: Trequest,
body: new Uint8Array(requestArrayBuffer as ArrayBuffer),
},
);
const nextToken = response.headers.get("x-line-next-access");
Expand Down