From fb7af1daab08fca896314c462e2f07bd342a2ab3 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Wed, 3 Jul 2024 06:13:35 -0700 Subject: [PATCH 1/5] test: Improve term of service test reliability (box/box-codegen#522) --- .codegen.json | 2 +- docs/termsOfServices.md | 2 +- package-lock.json | 36 +++++++++++----------- src/test/termsOfServices.generated.test.ts | 12 ++++---- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.codegen.json b/.codegen.json index 2855d76c..04071b88 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "62a25a4", "specHash": "e95d6fa", "version": "1.1.0" } +{ "engineHash": "5a07c4a", "specHash": "e95d6fa", "version": "1.1.0" } diff --git a/docs/termsOfServices.md b/docs/termsOfServices.md index 2abb92da..ef427495 100644 --- a/docs/termsOfServices.md +++ b/docs/termsOfServices.md @@ -108,7 +108,7 @@ See the endpoint docs at ```ts await client.termsOfServices.updateTermsOfServiceById(tos.id, { status: 'disabled' as UpdateTermsOfServiceByIdRequestBodyStatusField, - text: 'Disabled TOS', + text: 'Updated TOS', } satisfies UpdateTermsOfServiceByIdRequestBody); ``` diff --git a/package-lock.json b/package-lock.json index 308dbb7d..4d94cd1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1871,9 +1871,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001639", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz", - "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true, "funding": [ { @@ -3438,9 +3438,9 @@ } }, "node_modules/jose": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.2.tgz", - "integrity": "sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", + "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -4538,9 +4538,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -6063,9 +6063,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001639", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz", - "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true }, "chalk": { @@ -7209,9 +7209,9 @@ } }, "jose": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.2.tgz", - "integrity": "sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==" + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", + "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==" }, "js-tokens": { "version": "4.0.0", @@ -7999,9 +7999,9 @@ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" }, "update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "requires": { "escalade": "^3.1.2", diff --git a/src/test/termsOfServices.generated.test.ts b/src/test/termsOfServices.generated.test.ts index 139fbab8..8f474b21 100644 --- a/src/test/termsOfServices.generated.test.ts +++ b/src/test/termsOfServices.generated.test.ts @@ -27,24 +27,24 @@ test('testGetTermsOfServices', async function testGetTermsOfServices(): Promise< const tos: TermsOfService = await getOrCreateTermsOfServices(); const updatedTos1: TermsOfService = await client.termsOfServices.updateTermsOfServiceById(tos.id, { - status: 'enabled' as UpdateTermsOfServiceByIdRequestBodyStatusField, - text: 'Enabled TOS', + status: 'disabled' as UpdateTermsOfServiceByIdRequestBodyStatusField, + text: 'TOS', } satisfies UpdateTermsOfServiceByIdRequestBody); - if (!((toString(updatedTos1.status) as string) == 'enabled')) { + if (!((toString(updatedTos1.status) as string) == 'disabled')) { throw new Error('Assertion failed'); } - if (!(updatedTos1.text == 'Enabled TOS')) { + if (!(updatedTos1.text == 'TOS')) { throw new Error('Assertion failed'); } const updatedTos2: TermsOfService = await client.termsOfServices.updateTermsOfServiceById(tos.id, { status: 'disabled' as UpdateTermsOfServiceByIdRequestBodyStatusField, - text: 'Disabled TOS', + text: 'Updated TOS', } satisfies UpdateTermsOfServiceByIdRequestBody); if (!((toString(updatedTos2.status) as string) == 'disabled')) { throw new Error('Assertion failed'); } - if (!(updatedTos2.text == 'Disabled TOS')) { + if (!(updatedTos2.text == 'Updated TOS')) { throw new Error('Assertion failed'); } const listTos: TermsOfServices = From b9a543d6467e1110029fdd1f1673971a0fe64e35 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Thu, 4 Jul 2024 07:31:59 -0700 Subject: [PATCH 2/5] feat: Support extensible enum types in Typescript (box/box-codegen#520) --- .codegen.json | 2 +- src/managers/events.generated.ts | 6 +++++- src/schemas/event.generated.ts | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.codegen.json b/.codegen.json index 04071b88..7986f731 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "5a07c4a", "specHash": "e95d6fa", "version": "1.1.0" } +{ "engineHash": "ef31179", "specHash": "e95d6fa", "version": "1.1.0" } diff --git a/src/managers/events.generated.ts b/src/managers/events.generated.ts index e86ee5e5..6480b130 100644 --- a/src/managers/events.generated.ts +++ b/src/managers/events.generated.ts @@ -147,7 +147,8 @@ export type GetEventsQueryParamsEventTypeField = | 'UPLOAD' | 'USER_AUTHENTICATE_OAUTH2_ACCESS_TOKEN_CREATE' | 'WATERMARK_LABEL_CREATE' - | 'WATERMARK_LABEL_DELETE'; + | 'WATERMARK_LABEL_DELETE' + | string; export interface GetEventsQueryParams { readonly streamType?: GetEventsQueryParamsStreamTypeField; readonly streamPosition?: string; @@ -659,6 +660,9 @@ export function deserializeGetEventsQueryParamsEventTypeField( if (val == 'WATERMARK_LABEL_DELETE') { return val; } + if (sdIsString(val)) { + return val; + } throw new BoxSdkError({ message: "Can't deserialize GetEventsQueryParamsEventTypeField", }); diff --git a/src/schemas/event.generated.ts b/src/schemas/event.generated.ts index b70543ec..1695beaa 100644 --- a/src/schemas/event.generated.ts +++ b/src/schemas/event.generated.ts @@ -150,7 +150,8 @@ export type EventEventTypeField = | 'UPLOAD' | 'USER_AUTHENTICATE_OAUTH2_ACCESS_TOKEN_CREATE' | 'WATERMARK_LABEL_CREATE' - | 'WATERMARK_LABEL_DELETE'; + | 'WATERMARK_LABEL_DELETE' + | string; export interface EventAdditionalDetailsField {} export interface Event { readonly type?: string; @@ -576,6 +577,9 @@ export function deserializeEventEventTypeField( if (val == 'WATERMARK_LABEL_DELETE') { return val; } + if (sdIsString(val)) { + return val; + } throw new BoxSdkError({ message: "Can't deserialize EventEventTypeField" }); } export function serializeEventAdditionalDetailsField( From 3491a8b85148f40e8d42f73e53771cb7d9996894 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Thu, 4 Jul 2024 11:42:47 -0700 Subject: [PATCH 3/5] chore: Update .codegen.json with commit hash of codegen and openapi spec --- .codegen.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codegen.json b/.codegen.json index 7986f731..953a0f1b 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "ef31179", "specHash": "e95d6fa", "version": "1.1.0" } +{ "engineHash": "f9e3f29", "specHash": "e95d6fa", "version": "1.1.0" } From 5eaf31fa869b290f4f6bcfdad246982f5d313922 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Fri, 5 Jul 2024 03:13:17 -0700 Subject: [PATCH 4/5] chore: Update .codegen.json with commit hash of codegen and openapi spec --- .codegen.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codegen.json b/.codegen.json index 953a0f1b..3a060a63 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "f9e3f29", "specHash": "e95d6fa", "version": "1.1.0" } +{ "engineHash": "ae7e03e", "specHash": "e95d6fa", "version": "1.1.0" } From 4ff81369a5bd75d4a3dc29321050161e14acc324 Mon Sep 17 00:00:00 2001 From: box-sdk-build Date: Mon, 8 Jul 2024 02:42:36 -0700 Subject: [PATCH 5/5] fix: Update chunked upload (box/box-codegen#523) --- .codegen.json | 2 +- package-lock.json | 24 ++++++------ src/internal/utils.ts | 50 ++++++++++++++---------- src/managers/chunkedUploads.generated.ts | 2 +- src/networking/fetch.ts | 3 +- 5 files changed, 46 insertions(+), 35 deletions(-) diff --git a/.codegen.json b/.codegen.json index 3a060a63..29c21a7b 100644 --- a/.codegen.json +++ b/.codegen.json @@ -1 +1 @@ -{ "engineHash": "ae7e03e", "specHash": "e95d6fa", "version": "1.1.0" } +{ "engineHash": "89557a9", "specHash": "e95d6fa", "version": "1.1.0" } diff --git a/package-lock.json b/package-lock.json index 4d94cd1f..d170597c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1444,9 +1444,9 @@ } }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2135,9 +2135,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.4.818", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz", + "integrity": "sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA==", "dev": true }, "node_modules/emittery": { @@ -5752,9 +5752,9 @@ } }, "@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -6240,9 +6240,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.4.818", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz", + "integrity": "sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA==", "dev": true }, "emittery": { diff --git a/src/internal/utils.ts b/src/internal/utils.ts index dff2417e..a9c343ef 100644 --- a/src/internal/utils.ts +++ b/src/internal/utils.ts @@ -196,35 +196,45 @@ export async function readByteStream(byteStream: Readable) { export async function* iterateChunks( stream: Readable, - chunkSize: number + chunkSize: number, + fileSize: number ): Iterator { let buffers: Buffer[] = []; let totalSize = 0; - for await (const data of stream) { - if (!Buffer.isBuffer(data)) { - throw new Error('Expecting a chunk of stream to be a Buffer'); - } - buffers.push(data); - totalSize += data.length; + let consumedSize = 0; + while (consumedSize < fileSize && !stream.readableEnded) { + for await (const data of stream) { + if (!Buffer.isBuffer(data)) { + throw new Error('Expecting a chunk of stream to be a Buffer'); + } + consumedSize += data.length; + buffers.push(data); + totalSize += data.length; - if (totalSize < chunkSize) { - continue; - } + if (totalSize < chunkSize) { + continue; + } - const buffer = Buffer.concat(buffers); + const buffer = Buffer.concat(buffers); - let start = 0; - while (totalSize >= chunkSize) { - yield generateByteStreamFromBuffer( - buffer.subarray(start, start + chunkSize) - ); - start += chunkSize; - totalSize -= chunkSize; - } + let start = 0; + while (totalSize >= chunkSize) { + yield generateByteStreamFromBuffer( + buffer.subarray(start, start + chunkSize) + ); + start += chunkSize; + totalSize -= chunkSize; + } - buffers = totalSize > 0 ? [buffer.subarray(start)] : []; + buffers = totalSize > 0 ? [buffer.subarray(start)] : []; + } } + if (consumedSize !== fileSize) { + throw new Error( + `Stream size ${consumedSize} does not match expected file size ${fileSize}` + ); + } if (totalSize > 0) { yield generateByteStreamFromBuffer(Buffer.concat(buffers)); } diff --git a/src/managers/chunkedUploads.generated.ts b/src/managers/chunkedUploads.generated.ts index e9114f36..0f557030 100644 --- a/src/managers/chunkedUploads.generated.ts +++ b/src/managers/chunkedUploads.generated.ts @@ -775,7 +775,7 @@ export class ChunkedUploadsManager { throw new Error('Assertion failed'); } const fileHash: Hash = new Hash({ algorithm: 'sha1' as HashName }); - const chunksIterator: Iterator = iterateChunks(file, partSize); + const chunksIterator: Iterator = iterateChunks(file, partSize, fileSize); const results: PartAccumulator = await reduceIterator( chunksIterator, this.reducer.bind(this), diff --git a/src/networking/fetch.ts b/src/networking/fetch.ts index a359edec..d1a85b6e 100644 --- a/src/networking/fetch.ts +++ b/src/networking/fetch.ts @@ -319,7 +319,8 @@ export async function fetch( url: resource, queryParams: params, headers: (requestInit.headers as { [key: string]: string }) ?? {}, - body: requestInit.body, + body: + typeof requestInit.body === 'string' ? requestInit.body : undefined, }, responseInfo: { statusCode: fetchResponse.status,