From 1337a1a6f0bb59eb1456cb2f0fd0cb60773b8006 Mon Sep 17 00:00:00 2001 From: kizaonline Date: Wed, 18 Sep 2024 16:11:41 +1000 Subject: [PATCH 1/2] ON-43615 # Setting of `contentType` to use detection when content type is not provided --- CHANGELOG.md | 4 ++++ package-lock.json | 11 +++++++++++ package.json | 1 + src/approvals-service.ts | 4 +++- src/services/uploadAttachment.ts | 12 ++++++++++-- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23db40d4..8b006d2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed +- Setting of `contentType` to use detection when content type is not provided + +### Changed + - **[BREAKING]** updated `FormSubmissionApprovalsResponse` type ## [15.0.0] - 2024-09-03 diff --git a/package-lock.json b/package-lock.json index 2b22b9e6..0bf92ad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@sentry/tracing": "^7.77.0", "date-fns": "^2.30.0", "file-saver": "^2.0.5", + "file-type-checker": "^1.1.2", "jwt-decode": "^4.0.0", "localforage": "^1.10.0", "lodash.clonedeep": "^4.5.0", @@ -7226,6 +7227,11 @@ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, + "node_modules/file-type-checker": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/file-type-checker/-/file-type-checker-1.1.2.tgz", + "integrity": "sha512-HodBNiinBQNHQfXhXzAuHkU2udHF3LFS6PAOEZqxW+BjotZVCaMR7ckpTTnvLi718dbzRavnjRX0kbSb5pJG3g==" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -18390,6 +18396,11 @@ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, + "file-type-checker": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/file-type-checker/-/file-type-checker-1.1.2.tgz", + "integrity": "sha512-HodBNiinBQNHQfXhXzAuHkU2udHF3LFS6PAOEZqxW+BjotZVCaMR7ckpTTnvLi718dbzRavnjRX0kbSb5pJG3g==" + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", diff --git a/package.json b/package.json index 076428e6..dbcd729d 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@sentry/tracing": "^7.77.0", "date-fns": "^2.30.0", "file-saver": "^2.0.5", + "file-type-checker": "^1.1.2", "jwt-decode": "^4.0.0", "localforage": "^1.10.0", "lodash.clonedeep": "^4.5.0", diff --git a/src/approvals-service.ts b/src/approvals-service.ts index 1e906db7..5cbd7207 100644 --- a/src/approvals-service.ts +++ b/src/approvals-service.ts @@ -17,7 +17,9 @@ export type FormSubmissionApprovalsResponse = { formSubmissionApproval: ApprovalTypes.FormSubmissionApproval formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance formSubmissionMeta: SubmissionTypes.FormSubmissionMeta - latestSuccessfulFormSubmissionPayment: SubmissionTypes.FormSubmissionPayment | undefined + latestSuccessfulFormSubmissionPayment: + | SubmissionTypes.FormSubmissionPayment + | undefined }> } diff --git a/src/services/uploadAttachment.ts b/src/services/uploadAttachment.ts index 81e64b62..c1f06d6e 100644 --- a/src/services/uploadAttachment.ts +++ b/src/services/uploadAttachment.ts @@ -1,6 +1,7 @@ import { SubmissionTypes } from '@oneblink/types' import { ProgressListener } from '../types/submissions' import generateOneBlinkUploader from './generateOneBlinkUploader' +import fileTypeChecker from 'file-type-checker' export type UploadAttachmentConfiguration = { fileName: string @@ -64,8 +65,15 @@ export default async function uploadAttachment( abortSignal?: AbortSignal, ): Promise { const oneblinkUploader = generateOneBlinkUploader() - // S3 defaults unknown file types to the following, do the same here for our submission model - const _contentType = contentType || 'application/octet-stream' + + let _contentType = contentType || 'application/octet-stream' // S3 default for unknown content type + if (!contentType) { + const buffer = await data.arrayBuffer() + const detectedType = fileTypeChecker.detectFile(buffer) + if (detectedType) { + _contentType = detectedType.mimeType + } + } const result = await oneblinkUploader.uploadAttachment({ formId, fileName, From ce87385646053d5bd13c92a7a5b0652e8d4cc3db Mon Sep 17 00:00:00 2001 From: kizaonline Date: Wed, 25 Sep 2024 13:24:20 +1000 Subject: [PATCH 2/2] ON-43615 # Merge changelog --- CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e21370..54725bd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Changed + +- Setting of `contentType` to use detection when content type is not provided + ## [16.0.0] - 2024-09-25 ### Added @@ -16,10 +20,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed -- Setting of `contentType` to use detection when content type is not provided - -### Changed - - **[BREAKING]** updated `FormSubmissionApprovalsResponse` type ### Dependencies