@oneblink/storage 3.4.1-beta.1 → 4.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/OneBlinkDownloader.d.ts +1 -1
  2. package/dist/OneBlinkDownloader.js +8 -11
  3. package/dist/OneBlinkDownloader.js.map +1 -1
  4. package/dist/OneBlinkRequestHandler.d.ts +1 -1
  5. package/dist/OneBlinkRequestHandler.js +7 -10
  6. package/dist/OneBlinkRequestHandler.js.map +1 -1
  7. package/dist/OneBlinkStorageError.js +5 -4
  8. package/dist/OneBlinkStorageError.js.map +1 -1
  9. package/dist/OneBlinkUploader.d.ts +13 -13
  10. package/dist/OneBlinkUploader.js +18 -21
  11. package/dist/OneBlinkUploader.js.map +1 -1
  12. package/dist/downloadJsonFromS3.d.ts +1 -1
  13. package/dist/downloadJsonFromS3.js +7 -13
  14. package/dist/downloadJsonFromS3.js.map +1 -1
  15. package/dist/generateFormSubmissionTags.js +1 -4
  16. package/dist/generateFormSubmissionTags.js.map +1 -1
  17. package/dist/generateS3Client.d.ts +3 -3
  18. package/dist/generateS3Client.js +7 -11
  19. package/dist/generateS3Client.js.map +1 -1
  20. package/dist/http-handlers/FetchHandler.d.ts +1 -1
  21. package/dist/http-handlers/FetchHandler.js +1 -5
  22. package/dist/http-handlers/FetchHandler.js.map +1 -1
  23. package/dist/http-handlers/NodeJsHandler.d.ts +1 -1
  24. package/dist/http-handlers/NodeJsHandler.js +1 -5
  25. package/dist/http-handlers/NodeJsHandler.js.map +1 -1
  26. package/dist/http-handlers/index.d.ts +2 -2
  27. package/dist/http-handlers/index.js +8 -12
  28. package/dist/http-handlers/index.js.map +1 -1
  29. package/dist/http-handlers/types.js +1 -2
  30. package/dist/index.d.ts +4 -4
  31. package/dist/index.js +4 -27
  32. package/dist/index.js.map +1 -1
  33. package/dist/typedoc.d.ts +1 -1
  34. package/dist/typedoc.js +2 -18
  35. package/dist/typedoc.js.map +1 -1
  36. package/dist/types.js +1 -2
  37. package/dist/uploadToS3.d.ts +4 -4
  38. package/dist/uploadToS3.js +8 -12
  39. package/dist/uploadToS3.js.map +1 -1
  40. package/package.json +26 -23
@@ -1,4 +1,4 @@
1
- import { DownloadOptions, StorageConstructorOptions } from './types';
1
+ import { DownloadOptions, StorageConstructorOptions } from './types.js';
2
2
  import { SubmissionTypes } from '@oneblink/types';
3
3
  /**
4
4
  * Used to create an instance of the OneBlinkDownloader, exposing methods to
@@ -1,14 +1,12 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const downloadJsonFromS3_1 = __importDefault(require("./downloadJsonFromS3"));
1
+ import downloadJsonFromS3 from './downloadJsonFromS3.js';
7
2
  /**
8
3
  * Used to create an instance of the OneBlinkDownloader, exposing methods to
9
4
  * download submissions and other types of files
10
5
  */
11
- class OneBlinkDownloader {
6
+ export default class OneBlinkDownloader {
7
+ apiOrigin;
8
+ region;
9
+ getBearerToken;
12
10
  /**
13
11
  * #### Example
14
12
  *
@@ -44,7 +42,7 @@ class OneBlinkDownloader {
44
42
  * @returns The submission
45
43
  */
46
44
  async downloadSubmission({ submissionId, formId, abortSignal, }) {
47
- return await (0, downloadJsonFromS3_1.default)({
45
+ return await downloadJsonFromS3({
48
46
  ...this,
49
47
  key: `forms/${formId}/submissions/${submissionId}`,
50
48
  abortSignal,
@@ -67,7 +65,7 @@ class OneBlinkDownloader {
67
65
  * @returns The submission
68
66
  */
69
67
  async downloadDraftSubmission({ formSubmissionDraftVersionId, abortSignal, }) {
70
- return await (0, downloadJsonFromS3_1.default)({
68
+ return await downloadJsonFromS3({
71
69
  ...this,
72
70
  key: `form-submission-draft-versions/${formSubmissionDraftVersionId}`,
73
71
  abortSignal,
@@ -90,12 +88,11 @@ class OneBlinkDownloader {
90
88
  * @returns The submission
91
89
  */
92
90
  async downloadPrefillData({ preFillFormDataId, formId, abortSignal, }) {
93
- return await (0, downloadJsonFromS3_1.default)({
91
+ return await downloadJsonFromS3({
94
92
  ...this,
95
93
  key: `forms/${formId}/pre-fill/${preFillFormDataId}`,
96
94
  abortSignal,
97
95
  });
98
96
  }
99
97
  }
100
- exports.default = OneBlinkDownloader;
101
98
  //# sourceMappingURL=OneBlinkDownloader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkDownloader.js","sourceRoot":"","sources":["../src/OneBlinkDownloader.ts"],"names":[],"mappings":";;;;;AACA,8EAAqD;AAErD;;;GAGG;AACH,MAAqB,kBAAkB;IAKrC;;;;;;;;;;;;OAYG;IACH,YAAY,KAAgC;QAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAA;IAC5C,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,kBAAkB,CAAC,EACvB,YAAY,EACZ,MAAM,EACN,WAAW,GAMZ;QACC,OAAO,MAAM,IAAA,4BAAkB,EAAmC;YAChE,GAAG,IAAI;YACP,GAAG,EAAE,SAAS,MAAM,gBAAgB,YAAY,EAAE;YAClD,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,uBAAuB,CAAC,EAC5B,4BAA4B,EAC5B,WAAW,GAIZ;QACC,OAAO,MAAM,IAAA,4BAAkB,EAAmC;YAChE,GAAG,IAAI;YACP,GAAG,EAAE,kCAAkC,4BAA4B,EAAE;YACrE,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,mBAAmB,CAAoC,EAC3D,iBAAiB,EACjB,MAAM,EACN,WAAW,GAMZ;QACC,OAAO,MAAM,IAAA,4BAAkB,EAAI;YACjC,GAAG,IAAI;YACP,GAAG,EAAE,SAAS,MAAM,aAAa,iBAAiB,EAAE;YACpD,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC;CACF;AAvHD,qCAuHC","sourcesContent":["import { DownloadOptions, StorageConstructorOptions } from './types'\nimport downloadJsonFromS3 from './downloadJsonFromS3'\nimport { SubmissionTypes } from '@oneblink/types'\n/**\n * Used to create an instance of the OneBlinkDownloader, exposing methods to\n * download submissions and other types of files\n */\nexport default class OneBlinkDownloader {\n apiOrigin: StorageConstructorOptions['apiOrigin']\n region: StorageConstructorOptions['region']\n getBearerToken: StorageConstructorOptions['getBearerToken']\n\n /**\n * #### Example\n *\n * ```typescript\n * import { OneBlinkDownloader } from '@oneblink/storage'\n *\n * const downloader = new OneBlinkDownloader({\n * apiOrigin: 'https://auth-api.blinkm.io',\n * region: 'ap-southeast-2',\n * getBearerToken: () => getAccessToken(),\n * })\n * ```\n */\n constructor(props: StorageConstructorOptions) {\n this.apiOrigin = props.apiOrigin\n this.region = props.region\n this.getBearerToken = props.getBearerToken\n }\n\n /**\n * Download a form submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await downloader.downloadSubmission({\n * submissionId: '5ad46e62-f466-451c-8cd6-29ba23ac50b7',\n * formId: 1,\n * abortSignal: new AbortController().signal,\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The submission\n */\n async downloadSubmission({\n submissionId,\n formId,\n abortSignal,\n }: DownloadOptions & {\n /** The identifier of the submission. */\n submissionId: string\n /** The identifier of the form associated with the submission. */\n formId: number\n }) {\n return await downloadJsonFromS3<SubmissionTypes.S3SubmissionData>({\n ...this,\n key: `forms/${formId}/submissions/${submissionId}`,\n abortSignal,\n })\n }\n\n /**\n * Download a draft form submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await downloader.downloadDraftSubmission({\n * formSubmissionDraftVersionId: '5ad46e62-f466-451c-8cd6-29ba23ac50b7',\n * formId: 1,\n * abortSignal: new AbortController().signal,\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The submission\n */\n async downloadDraftSubmission({\n formSubmissionDraftVersionId,\n abortSignal,\n }: DownloadOptions & {\n /** The identifier of the draft form submission version. */\n formSubmissionDraftVersionId: string\n }) {\n return await downloadJsonFromS3<SubmissionTypes.S3SubmissionData>({\n ...this,\n key: `form-submission-draft-versions/${formSubmissionDraftVersionId}`,\n abortSignal,\n })\n }\n\n /**\n * Download pre-fill form submission data.\n *\n * #### Example\n *\n * ```ts\n * const result = await downloader.downloadPrefillData({\n * preFillFormDataId: '5ad46e62-f466-451c-8cd6-29ba23ac50b7',\n * formId: 1,\n * abortSignal: new AbortController().signal,\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The submission\n */\n async downloadPrefillData<T extends Record<string, unknown>>({\n preFillFormDataId,\n formId,\n abortSignal,\n }: DownloadOptions & {\n /** The identifier of the pre-fill data. */\n preFillFormDataId: string\n /** The identifier of the form associated with the pre-fill data. */\n formId: number\n }) {\n return await downloadJsonFromS3<T>({\n ...this,\n key: `forms/${formId}/pre-fill/${preFillFormDataId}`,\n abortSignal,\n })\n }\n}\n"]}
1
+ {"version":3,"file":"OneBlinkDownloader.js","sourceRoot":"","sources":["../src/OneBlinkDownloader.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,yBAAyB,CAAA;AAExD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACrC,SAAS,CAAwC;IACjD,MAAM,CAAqC;IAC3C,cAAc,CAA6C;IAE3D;;;;;;;;;;;;OAYG;IACH,YAAY,KAAgC;QAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAA;IAC5C,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,kBAAkB,CAAC,EACvB,YAAY,EACZ,MAAM,EACN,WAAW,GAMZ;QACC,OAAO,MAAM,kBAAkB,CAAmC;YAChE,GAAG,IAAI;YACP,GAAG,EAAE,SAAS,MAAM,gBAAgB,YAAY,EAAE;YAClD,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,uBAAuB,CAAC,EAC5B,4BAA4B,EAC5B,WAAW,GAIZ;QACC,OAAO,MAAM,kBAAkB,CAAmC;YAChE,GAAG,IAAI;YACP,GAAG,EAAE,kCAAkC,4BAA4B,EAAE;YACrE,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,mBAAmB,CAAoC,EAC3D,iBAAiB,EACjB,MAAM,EACN,WAAW,GAMZ;QACC,OAAO,MAAM,kBAAkB,CAAI;YACjC,GAAG,IAAI;YACP,GAAG,EAAE,SAAS,MAAM,aAAa,iBAAiB,EAAE;YACpD,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC;CACF","sourcesContent":["import { DownloadOptions, StorageConstructorOptions } from './types.js'\nimport downloadJsonFromS3 from './downloadJsonFromS3.js'\nimport { SubmissionTypes } from '@oneblink/types'\n/**\n * Used to create an instance of the OneBlinkDownloader, exposing methods to\n * download submissions and other types of files\n */\nexport default class OneBlinkDownloader {\n apiOrigin: StorageConstructorOptions['apiOrigin']\n region: StorageConstructorOptions['region']\n getBearerToken: StorageConstructorOptions['getBearerToken']\n\n /**\n * #### Example\n *\n * ```typescript\n * import { OneBlinkDownloader } from '@oneblink/storage'\n *\n * const downloader = new OneBlinkDownloader({\n * apiOrigin: 'https://auth-api.blinkm.io',\n * region: 'ap-southeast-2',\n * getBearerToken: () => getAccessToken(),\n * })\n * ```\n */\n constructor(props: StorageConstructorOptions) {\n this.apiOrigin = props.apiOrigin\n this.region = props.region\n this.getBearerToken = props.getBearerToken\n }\n\n /**\n * Download a form submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await downloader.downloadSubmission({\n * submissionId: '5ad46e62-f466-451c-8cd6-29ba23ac50b7',\n * formId: 1,\n * abortSignal: new AbortController().signal,\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The submission\n */\n async downloadSubmission({\n submissionId,\n formId,\n abortSignal,\n }: DownloadOptions & {\n /** The identifier of the submission. */\n submissionId: string\n /** The identifier of the form associated with the submission. */\n formId: number\n }) {\n return await downloadJsonFromS3<SubmissionTypes.S3SubmissionData>({\n ...this,\n key: `forms/${formId}/submissions/${submissionId}`,\n abortSignal,\n })\n }\n\n /**\n * Download a draft form submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await downloader.downloadDraftSubmission({\n * formSubmissionDraftVersionId: '5ad46e62-f466-451c-8cd6-29ba23ac50b7',\n * formId: 1,\n * abortSignal: new AbortController().signal,\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The submission\n */\n async downloadDraftSubmission({\n formSubmissionDraftVersionId,\n abortSignal,\n }: DownloadOptions & {\n /** The identifier of the draft form submission version. */\n formSubmissionDraftVersionId: string\n }) {\n return await downloadJsonFromS3<SubmissionTypes.S3SubmissionData>({\n ...this,\n key: `form-submission-draft-versions/${formSubmissionDraftVersionId}`,\n abortSignal,\n })\n }\n\n /**\n * Download pre-fill form submission data.\n *\n * #### Example\n *\n * ```ts\n * const result = await downloader.downloadPrefillData({\n * preFillFormDataId: '5ad46e62-f466-451c-8cd6-29ba23ac50b7',\n * formId: 1,\n * abortSignal: new AbortController().signal,\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The submission\n */\n async downloadPrefillData<T extends Record<string, unknown>>({\n preFillFormDataId,\n formId,\n abortSignal,\n }: DownloadOptions & {\n /** The identifier of the pre-fill data. */\n preFillFormDataId: string\n /** The identifier of the form associated with the pre-fill data. */\n formId: number\n }) {\n return await downloadJsonFromS3<T>({\n ...this,\n key: `forms/${formId}/pre-fill/${preFillFormDataId}`,\n abortSignal,\n })\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { HttpRequest, HttpResponse } from '@smithy/protocol-http';
2
2
  import { RequestHandler } from '@smithy/types';
3
- import { RequestBodyHeader, IOneBlinkHttpHandler, OneBlinkResponse, FailResponse } from './http-handlers/types';
3
+ import { RequestBodyHeader, IOneBlinkHttpHandler, OneBlinkResponse, FailResponse } from './http-handlers/types.js';
4
4
  /**
5
5
  * Our own custom request handler to allow the response header which includes
6
6
  * dynamic data from the lambda at edge to be retrieved and held for later when
@@ -1,16 +1,14 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OneBlinkRequestHandler = void 0;
7
- const OneBlinkStorageError_1 = __importDefault(require("./OneBlinkStorageError"));
1
+ import OneBlinkStorageError from './OneBlinkStorageError.js';
8
2
  /**
9
3
  * Our own custom request handler to allow the response header which includes
10
4
  * dynamic data from the lambda at edge to be retrieved and held for later when
11
5
  * the upload has completed.
12
6
  */
13
- class OneBlinkRequestHandler {
7
+ export class OneBlinkRequestHandler {
8
+ requestBodyHeader;
9
+ oneBlinkHttpHandler;
10
+ oneblinkResponse;
11
+ failResponse;
14
12
  constructor(oneBlinkHttpHandler, requestBodyHeader) {
15
13
  this.oneBlinkHttpHandler = oneBlinkHttpHandler;
16
14
  this.requestBodyHeader = requestBodyHeader;
@@ -44,7 +42,7 @@ class OneBlinkRequestHandler {
44
42
  }
45
43
  catch (error) {
46
44
  if (this.failResponse) {
47
- throw new OneBlinkStorageError_1.default(this.failResponse.message, {
45
+ throw new OneBlinkStorageError(this.failResponse.message, {
48
46
  httpStatusCode: this.failResponse.statusCode,
49
47
  originalError: error instanceof Error ? error : undefined,
50
48
  });
@@ -53,5 +51,4 @@ class OneBlinkRequestHandler {
53
51
  }
54
52
  }
55
53
  }
56
- exports.OneBlinkRequestHandler = OneBlinkRequestHandler;
57
54
  //# sourceMappingURL=OneBlinkRequestHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkRequestHandler.js","sourceRoot":"","sources":["../src/OneBlinkRequestHandler.ts"],"names":[],"mappings":";;;;;;AAQA,kFAAyD;AAEzD;;;;GAIG;AACH,MAAa,sBAAsB;IAQjC,YACE,mBAAyC,EACzC,iBAAqC;QAErC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;QAC9C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAoB;QAC/B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,SAAS,CACzD,IAAI,CAAC,iBAAiB,CACvB,CAAA;QACH,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAA;QACrD,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,KAA+B,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAA;QACzK,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACtE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAA;QAEnD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAChE,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACtD,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY;gBACf,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC/D,CAAC;QAED,OAAO;YACL,QAAQ;SACT,CAAA;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAI,MAAwB;QAC7C,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,EAAE,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,8BAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;oBACxD,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;oBAC5C,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBAC1D,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;CACF;AA5DD,wDA4DC","sourcesContent":["import { HttpRequest, HttpResponse } from '@smithy/protocol-http'\nimport { RequestHandler } from '@smithy/types'\nimport {\n RequestBodyHeader,\n IOneBlinkHttpHandler,\n OneBlinkResponse,\n FailResponse,\n} from './http-handlers/types'\nimport OneBlinkStorageError from './OneBlinkStorageError'\n\n/**\n * Our own custom request handler to allow the response header which includes\n * dynamic data from the lambda at edge to be retrieved and held for later when\n * the upload has completed.\n */\nexport class OneBlinkRequestHandler<T>\n implements RequestHandler<HttpRequest, HttpResponse>\n{\n requestBodyHeader?: RequestBodyHeader\n oneBlinkHttpHandler: IOneBlinkHttpHandler\n oneblinkResponse?: OneBlinkResponse<T>\n failResponse?: FailResponse\n\n constructor(\n oneBlinkHttpHandler: IOneBlinkHttpHandler,\n requestBodyHeader?: RequestBodyHeader,\n ) {\n this.oneBlinkHttpHandler = oneBlinkHttpHandler\n this.requestBodyHeader = requestBodyHeader\n }\n\n async handle(request: HttpRequest) {\n if (this.requestBodyHeader) {\n request.headers['x-oneblink-request-body'] = JSON.stringify(\n this.requestBodyHeader,\n )\n }\n\n if (this.oneblinkResponse) {\n request.query['key'] = this.oneblinkResponse.s3.key\n }\n\n const requestUrl = `${request.method} ${request.protocol}//${request.hostname}${request.path}?${new URLSearchParams(request.query as Record<string, string>).toString()}`\n console.log('Starting storage request', requestUrl)\n const response = await this.oneBlinkHttpHandler.handleRequest(request)\n console.log('Finished storage request', requestUrl)\n\n const oneblinkResponse = response.headers['x-oneblink-response']\n if (typeof oneblinkResponse === 'string') {\n this.oneblinkResponse = JSON.parse(oneblinkResponse)\n }\n\n if (response.statusCode >= 400) {\n this.failResponse =\n await this.oneBlinkHttpHandler.handleFailResponse(response)\n }\n\n return {\n response,\n }\n }\n\n async sendS3Command<O>(sender: () => Promise<O>): Promise<O> {\n try {\n return await sender()\n } catch (error) {\n if (this.failResponse) {\n throw new OneBlinkStorageError(this.failResponse.message, {\n httpStatusCode: this.failResponse.statusCode,\n originalError: error instanceof Error ? error : undefined,\n })\n }\n throw error\n }\n }\n}\n"]}
1
+ {"version":3,"file":"OneBlinkRequestHandler.js","sourceRoot":"","sources":["../src/OneBlinkRequestHandler.ts"],"names":[],"mappings":"AAQA,OAAO,oBAAoB,MAAM,2BAA2B,CAAA;AAE5D;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAGjC,iBAAiB,CAAoB;IACrC,mBAAmB,CAAsB;IACzC,gBAAgB,CAAsB;IACtC,YAAY,CAAe;IAE3B,YACE,mBAAyC,EACzC,iBAAqC;QAErC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;QAC9C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAoB;QAC/B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,SAAS,CACzD,IAAI,CAAC,iBAAiB,CACvB,CAAA;QACH,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAA;QACrD,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,KAA+B,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAA;QACzK,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACtE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAA;QAEnD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAChE,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACtD,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY;gBACf,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC/D,CAAC;QAED,OAAO;YACL,QAAQ;SACT,CAAA;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAI,MAAwB;QAC7C,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,EAAE,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;oBACxD,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;oBAC5C,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBAC1D,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;CACF","sourcesContent":["import { HttpRequest, HttpResponse } from '@smithy/protocol-http'\nimport { RequestHandler } from '@smithy/types'\nimport {\n RequestBodyHeader,\n IOneBlinkHttpHandler,\n OneBlinkResponse,\n FailResponse,\n} from './http-handlers/types.js'\nimport OneBlinkStorageError from './OneBlinkStorageError.js'\n\n/**\n * Our own custom request handler to allow the response header which includes\n * dynamic data from the lambda at edge to be retrieved and held for later when\n * the upload has completed.\n */\nexport class OneBlinkRequestHandler<T>\n implements RequestHandler<HttpRequest, HttpResponse>\n{\n requestBodyHeader?: RequestBodyHeader\n oneBlinkHttpHandler: IOneBlinkHttpHandler\n oneblinkResponse?: OneBlinkResponse<T>\n failResponse?: FailResponse\n\n constructor(\n oneBlinkHttpHandler: IOneBlinkHttpHandler,\n requestBodyHeader?: RequestBodyHeader,\n ) {\n this.oneBlinkHttpHandler = oneBlinkHttpHandler\n this.requestBodyHeader = requestBodyHeader\n }\n\n async handle(request: HttpRequest) {\n if (this.requestBodyHeader) {\n request.headers['x-oneblink-request-body'] = JSON.stringify(\n this.requestBodyHeader,\n )\n }\n\n if (this.oneblinkResponse) {\n request.query['key'] = this.oneblinkResponse.s3.key\n }\n\n const requestUrl = `${request.method} ${request.protocol}//${request.hostname}${request.path}?${new URLSearchParams(request.query as Record<string, string>).toString()}`\n console.log('Starting storage request', requestUrl)\n const response = await this.oneBlinkHttpHandler.handleRequest(request)\n console.log('Finished storage request', requestUrl)\n\n const oneblinkResponse = response.headers['x-oneblink-response']\n if (typeof oneblinkResponse === 'string') {\n this.oneblinkResponse = JSON.parse(oneblinkResponse)\n }\n\n if (response.statusCode >= 400) {\n this.failResponse =\n await this.oneBlinkHttpHandler.handleFailResponse(response)\n }\n\n return {\n response,\n }\n }\n\n async sendS3Command<O>(sender: () => Promise<O>): Promise<O> {\n try {\n return await sender()\n } catch (error) {\n if (this.failResponse) {\n throw new OneBlinkStorageError(this.failResponse.message, {\n httpStatusCode: this.failResponse.statusCode,\n originalError: error instanceof Error ? error : undefined,\n })\n }\n throw error\n }\n }\n}\n"]}
@@ -1,7 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
1
  /** An error class that extends `Error` */
4
- class OneBlinkStorageError extends Error {
2
+ export default class OneBlinkStorageError extends Error {
3
+ /** The http status code associated with the error */
4
+ httpStatusCode;
5
+ /** The original error that was thrown */
6
+ originalError;
5
7
  /**
6
8
  * Used to create an instance of the `OneBlinkStorageError` class.
7
9
  *
@@ -15,5 +17,4 @@ class OneBlinkStorageError extends Error {
15
17
  this.originalError = options.originalError;
16
18
  }
17
19
  }
18
- exports.default = OneBlinkStorageError;
19
20
  //# sourceMappingURL=OneBlinkStorageError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkStorageError.js","sourceRoot":"","sources":["../src/OneBlinkStorageError.ts"],"names":[],"mappings":";;AAAA,0CAA0C;AAC1C,MAAqB,oBAAqB,SAAQ,KAAK;IAMrD;;;;;OAKG;IACH,YACE,OAAe,EACf,OAKC;QAED,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;QAElC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;IAC5C,CAAC;CACF;AA3BD,uCA2BC","sourcesContent":["/** An error class that extends `Error` */\nexport default class OneBlinkStorageError extends Error {\n /** The http status code associated with the error */\n httpStatusCode: number\n /** The original error that was thrown */\n originalError?: Error\n\n /**\n * Used to create an instance of the `OneBlinkStorageError` class.\n *\n * @param message The message associated with the error\n * @param options The options associated with the error\n */\n constructor(\n message: string,\n options: {\n /** The http status code associated with the error */\n httpStatusCode: number\n /** The original error that was thrown */\n originalError?: Error\n },\n ) {\n super(message)\n this.name = 'OneBlinkStorageError'\n\n this.httpStatusCode = options.httpStatusCode\n this.originalError = options.originalError\n }\n}\n"]}
1
+ {"version":3,"file":"OneBlinkStorageError.js","sourceRoot":"","sources":["../src/OneBlinkStorageError.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,KAAK;IACrD,qDAAqD;IACrD,cAAc,CAAQ;IACtB,yCAAyC;IACzC,aAAa,CAAQ;IAErB;;;;;OAKG;IACH,YACE,OAAe,EACf,OAKC;QAED,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;QAElC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;IAC5C,CAAC;CACF","sourcesContent":["/** An error class that extends `Error` */\nexport default class OneBlinkStorageError extends Error {\n /** The http status code associated with the error */\n httpStatusCode: number\n /** The original error that was thrown */\n originalError?: Error\n\n /**\n * Used to create an instance of the `OneBlinkStorageError` class.\n *\n * @param message The message associated with the error\n * @param options The options associated with the error\n */\n constructor(\n message: string,\n options: {\n /** The http status code associated with the error */\n httpStatusCode: number\n /** The original error that was thrown */\n originalError?: Error\n },\n ) {\n super(message)\n this.name = 'OneBlinkStorageError'\n\n this.httpStatusCode = options.httpStatusCode\n this.originalError = options.originalError\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { AttachmentUploadData, StorageConstructorOptions, UploadAssetOptions, UploadFormSubmissionOptions, UploadOptions, UploadEmailAttachmentOptions, UploadPDFConversionOptions, UploadAiBuilderAttachmentOptions } from './types';
1
+ import { AttachmentUploadData, StorageConstructorOptions, UploadAssetOptions, UploadFormSubmissionOptions, UploadOptions, UploadEmailAttachmentOptions, UploadPDFConversionOptions, UploadAiBuilderAttachmentOptions } from './types.js';
2
2
  import { SubmissionTypes } from '@oneblink/types';
3
3
  /**
4
4
  * Used to create an instance of the OneBlinkUploader, exposing methods to
@@ -60,11 +60,11 @@ export default class OneBlinkUploader {
60
60
  }[];
61
61
  /** The identifier of the draft to mark as submitted. */
62
62
  formSubmissionDraftId?: string;
63
- }): Promise<import("./http-handlers/types").OneBlinkResponse<{
63
+ }): Promise<import("./http-handlers/types.js").OneBlinkResponse<{
64
64
  submissionTimestamp: string;
65
65
  submissionId: string;
66
- pdfAccessToken?: string | undefined;
67
- attachmentsAccessToken?: string | undefined;
66
+ pdfAccessToken?: string;
67
+ attachmentsAccessToken?: string;
68
68
  preventPayment: boolean;
69
69
  }>>;
70
70
  /**
@@ -102,7 +102,7 @@ export default class OneBlinkUploader {
102
102
  data: AttachmentUploadData;
103
103
  /** A username to allow a single user to download the attachment file */
104
104
  username?: string;
105
- }): Promise<import("./http-handlers/types").OneBlinkResponse<{
105
+ }): Promise<import("./http-handlers/types.js").OneBlinkResponse<{
106
106
  url: string;
107
107
  attachmentDataId: string;
108
108
  uploadedAt: string;
@@ -149,7 +149,7 @@ export default class OneBlinkUploader {
149
149
  sectionState?: SubmissionTypes.NewS3SubmissionData['sectionState'];
150
150
  /** The previously elapsed duration in seconds before saving draft */
151
151
  previousElapsedDurationSeconds?: SubmissionTypes.NewS3SubmissionData['previousElapsedDurationSeconds'];
152
- }): Promise<import("./http-handlers/types").OneBlinkResponse<SubmissionTypes.FormSubmissionDraftVersion>>;
152
+ }): Promise<import("./http-handlers/types.js").OneBlinkResponse<SubmissionTypes.FormSubmissionDraftVersion>>;
153
153
  /**
154
154
  * Upload an asset file. Asset files are always public.
155
155
  *
@@ -177,7 +177,7 @@ export default class OneBlinkUploader {
177
177
  uploadAsset({ onProgress, abortSignal, data, contentType, fileName, organisationId, }: UploadOptions & UploadAssetOptions & {
178
178
  /** The identifier for the organisation that owns the asset */
179
179
  organisationId: string;
180
- }): Promise<import("./http-handlers/types").OneBlinkResponse<{
180
+ }): Promise<import("./http-handlers/types.js").OneBlinkResponse<{
181
181
  url: string;
182
182
  }>>;
183
183
  /**
@@ -204,7 +204,7 @@ export default class OneBlinkUploader {
204
204
  * @param data The asset upload data and options
205
205
  * @returns The upload result
206
206
  */
207
- uploadProductAsset({ onProgress, abortSignal, data, contentType, fileName, }: UploadOptions & UploadAssetOptions): Promise<import("./http-handlers/types").OneBlinkResponse<{
207
+ uploadProductAsset({ onProgress, abortSignal, data, contentType, fileName, }: UploadOptions & UploadAssetOptions): Promise<import("./http-handlers/types.js").OneBlinkResponse<{
208
208
  url: string;
209
209
  }>>;
210
210
  /**
@@ -235,7 +235,7 @@ export default class OneBlinkUploader {
235
235
  formId: number;
236
236
  /** The prefill data to upload */
237
237
  prefillData: SubmissionTypes.NewS3SubmissionData['submission'];
238
- }): Promise<import("./http-handlers/types").OneBlinkResponse<{
238
+ }): Promise<import("./http-handlers/types.js").OneBlinkResponse<{
239
239
  preFillFormDataId: string;
240
240
  }>>;
241
241
  /**
@@ -262,7 +262,7 @@ export default class OneBlinkUploader {
262
262
  * @returns The upload result
263
263
  */
264
264
  uploadEmailAttachment({ onProgress, abortSignal, data, contentType, fileName, }: UploadOptions & UploadEmailAttachmentOptions): Promise<{
265
- s3: import("@oneblink/types/typescript/aws").S3Configuration;
265
+ s3: import("@oneblink/types/typescript/aws.js").S3Configuration;
266
266
  }>;
267
267
  /**
268
268
  * Upload a PDF for conversion. PDF Conversions are always private.
@@ -285,7 +285,7 @@ export default class OneBlinkUploader {
285
285
  * @returns The upload result
286
286
  */
287
287
  uploadPDFConversion({ onProgress, abortSignal, data, formId, }: UploadPDFConversionOptions): Promise<{
288
- s3: import("@oneblink/types/typescript/aws").S3Configuration;
288
+ s3: import("@oneblink/types/typescript/aws.js").S3Configuration;
289
289
  }>;
290
290
  /**
291
291
  * Upload an attachment for use with the AI builder.
@@ -308,7 +308,7 @@ export default class OneBlinkUploader {
308
308
  * @returns The upload result
309
309
  */
310
310
  uploadAiBuilderAttachment({ onProgress, abortSignal, data, formId, contentType, fileName, }: UploadAiBuilderAttachmentOptions): Promise<{
311
- s3: import("@oneblink/types/typescript/aws").S3Configuration;
311
+ s3: import("@oneblink/types/typescript/aws.js").S3Configuration;
312
312
  }>;
313
313
  /**
314
314
  * Upload a volunteer asset file. Asset files are always public.
@@ -337,7 +337,7 @@ export default class OneBlinkUploader {
337
337
  uploadVolunteersAsset({ onProgress, abortSignal, data, contentType, fileName, formsAppId, }: UploadOptions & UploadAssetOptions & {
338
338
  /** The identifier for the volunteers app that owns the asset */
339
339
  formsAppId: number;
340
- }): Promise<import("./http-handlers/types").OneBlinkResponse<{
340
+ }): Promise<import("./http-handlers/types.js").OneBlinkResponse<{
341
341
  url: string;
342
342
  }>>;
343
343
  }
@@ -1,15 +1,13 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const uploadToS3_1 = __importDefault(require("./uploadToS3"));
7
- const generateFormSubmissionTags_1 = __importDefault(require("./generateFormSubmissionTags"));
1
+ import uploadToS3 from './uploadToS3.js';
2
+ import generateFormSubmissionTags from './generateFormSubmissionTags.js';
8
3
  /**
9
4
  * Used to create an instance of the OneBlinkUploader, exposing methods to
10
5
  * upload submissions and other types of files
11
6
  */
12
- class OneBlinkUploader {
7
+ export default class OneBlinkUploader {
8
+ apiOrigin;
9
+ region;
10
+ getBearerToken;
13
11
  /**
14
12
  * #### Example
15
13
  *
@@ -58,12 +56,12 @@ class OneBlinkUploader {
58
56
  device,
59
57
  completionTimestamp,
60
58
  };
61
- const tags = (0, generateFormSubmissionTags_1.default)({
59
+ const tags = generateFormSubmissionTags({
62
60
  userToken,
63
61
  previousFormSubmissionApprovalId,
64
62
  jobId,
65
63
  });
66
- return await (0, uploadToS3_1.default)({
64
+ return await uploadToS3({
67
65
  ...this,
68
66
  contentType: 'application/json',
69
67
  body: JSON.stringify(newS3SubmissionData),
@@ -107,7 +105,7 @@ class OneBlinkUploader {
107
105
  * @returns The upload result
108
106
  */
109
107
  async uploadAttachment({ formId, fileName, contentType, isPrivate, data, username, onProgress, abortSignal, }) {
110
- return await (0, uploadToS3_1.default)({
108
+ return await uploadToS3({
111
109
  ...this,
112
110
  contentType,
113
111
  body: data,
@@ -157,13 +155,13 @@ class OneBlinkUploader {
157
155
  sectionState,
158
156
  previousElapsedDurationSeconds,
159
157
  };
160
- const tags = (0, generateFormSubmissionTags_1.default)({
158
+ const tags = generateFormSubmissionTags({
161
159
  userToken,
162
160
  previousFormSubmissionApprovalId,
163
161
  jobId,
164
162
  });
165
163
  tags.append('formSubmissionDraftId', formSubmissionDraftId);
166
- return await (0, uploadToS3_1.default)({
164
+ return await uploadToS3({
167
165
  ...this,
168
166
  contentType: 'application/json',
169
167
  body: JSON.stringify(newS3SubmissionData),
@@ -211,7 +209,7 @@ class OneBlinkUploader {
211
209
  * @returns The upload result
212
210
  */
213
211
  async uploadAsset({ onProgress, abortSignal, data, contentType, fileName, organisationId, }) {
214
- return await (0, uploadToS3_1.default)({
212
+ return await uploadToS3({
215
213
  ...this,
216
214
  contentType,
217
215
  body: data,
@@ -249,7 +247,7 @@ class OneBlinkUploader {
249
247
  * @returns The upload result
250
248
  */
251
249
  async uploadProductAsset({ onProgress, abortSignal, data, contentType, fileName, }) {
252
- return await (0, uploadToS3_1.default)({
250
+ return await uploadToS3({
253
251
  ...this,
254
252
  contentType,
255
253
  body: data,
@@ -286,7 +284,7 @@ class OneBlinkUploader {
286
284
  * @returns The upload result
287
285
  */
288
286
  async uploadPrefillData({ formId, prefillData, onProgress, abortSignal, }) {
289
- return await (0, uploadToS3_1.default)({
287
+ return await uploadToS3({
290
288
  ...this,
291
289
  contentType: 'application/json',
292
290
  body: JSON.stringify(prefillData),
@@ -319,7 +317,7 @@ class OneBlinkUploader {
319
317
  * @returns The upload result
320
318
  */
321
319
  async uploadEmailAttachment({ onProgress, abortSignal, data, contentType, fileName, }) {
322
- return await (0, uploadToS3_1.default)({
320
+ return await uploadToS3({
323
321
  ...this,
324
322
  contentType,
325
323
  body: data,
@@ -353,7 +351,7 @@ class OneBlinkUploader {
353
351
  * @returns The upload result
354
352
  */
355
353
  async uploadPDFConversion({ onProgress, abortSignal, data, formId, }) {
356
- return await (0, uploadToS3_1.default)({
354
+ return await uploadToS3({
357
355
  ...this,
358
356
  contentType: 'application/pdf',
359
357
  body: data,
@@ -383,7 +381,7 @@ class OneBlinkUploader {
383
381
  * @returns The upload result
384
382
  */
385
383
  async uploadAiBuilderAttachment({ onProgress, abortSignal, data, formId, contentType, fileName, }) {
386
- return await (0, uploadToS3_1.default)({
384
+ return await uploadToS3({
387
385
  ...this,
388
386
  contentType,
389
387
  body: data,
@@ -420,7 +418,7 @@ class OneBlinkUploader {
420
418
  * @returns The upload result
421
419
  */
422
420
  async uploadVolunteersAsset({ onProgress, abortSignal, data, contentType, fileName, formsAppId, }) {
423
- return await (0, uploadToS3_1.default)({
421
+ return await uploadToS3({
424
422
  ...this,
425
423
  contentType,
426
424
  body: data,
@@ -435,5 +433,4 @@ class OneBlinkUploader {
435
433
  });
436
434
  }
437
435
  }
438
- exports.default = OneBlinkUploader;
439
436
  //# sourceMappingURL=OneBlinkUploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkUploader.js","sourceRoot":"","sources":["../src/OneBlinkUploader.ts"],"names":[],"mappings":"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","sourcesContent":["import uploadToS3 from './uploadToS3'\nimport {\n AttachmentUploadData,\n StorageConstructorOptions,\n UploadAssetOptions,\n UploadFormSubmissionOptions,\n UploadOptions,\n UploadEmailAttachmentOptions,\n UploadPDFConversionOptions,\n UploadAiBuilderAttachmentOptions,\n} from './types'\nimport { SubmissionTypes } from '@oneblink/types'\nimport generateFormSubmissionTags from './generateFormSubmissionTags'\n/**\n * Used to create an instance of the OneBlinkUploader, exposing methods to\n * upload submissions and other types of files\n */\nexport default class OneBlinkUploader {\n apiOrigin: StorageConstructorOptions['apiOrigin']\n region: StorageConstructorOptions['region']\n getBearerToken: StorageConstructorOptions['getBearerToken']\n\n /**\n * #### Example\n *\n * ```typescript\n * import { OneBlinkUploader } from '@oneblink/uploads'\n *\n * const uploader = new OneBlinkUploader({\n * apiOrigin: 'https://auth-api.blinkm.io',\n * region: 'ap-southeast-2',\n * getBearerToken: () => getAccessToken(),\n * })\n * ```\n */\n constructor(props: StorageConstructorOptions) {\n this.apiOrigin = props.apiOrigin\n this.region = props.region\n this.getBearerToken = props.getBearerToken\n }\n\n /**\n * Upload a submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await uploader.uploadSubmission({\n * submission: {\n * // ...\n * },\n * definition: {\n * // ...\n * },\n * formsAppId: 1,\n * onProgress: (progress) => {\n * // ...\n * },\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The upload result\n */\n async uploadSubmission({\n submission,\n definition,\n device,\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n formsAppId,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n formSubmissionDraftId,\n completionTimestamp,\n recaptchas = [],\n onProgress,\n abortSignal,\n }: UploadFormSubmissionOptions & {\n /**\n * The date and time (in ISO format) the form was completed I.e. when the\n * user clicked the submit button\n */\n completionTimestamp?: string\n /** The reCAPTCHA tokens to validate the submission */\n recaptchas?: {\n /** The site key that was used to generate the reCAPTCHA token */\n siteKey: string\n /** A reCAPTCHA token */\n token: string\n }[]\n /** The identifier of the draft to mark as submitted. */\n formSubmissionDraftId?: string\n }) {\n const newS3SubmissionData: SubmissionTypes.NewS3SubmissionData = {\n submission,\n definition,\n device,\n completionTimestamp,\n }\n const tags = generateFormSubmissionTags({\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n })\n\n return await uploadToS3<{\n submissionTimestamp: string\n submissionId: string\n pdfAccessToken?: string\n attachmentsAccessToken?: string\n preventPayment: boolean\n }>({\n ...this,\n contentType: 'application/json',\n body: JSON.stringify(newS3SubmissionData),\n key: `forms/${definition.id}/submissions`,\n tags,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n formsAppId,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n jobId,\n previousFormSubmissionApprovalId,\n recaptchas,\n formSubmissionDraftId,\n },\n })\n }\n\n /**\n * Upload an form submission attachment.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAttachment({\n * formId: 1,\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * isPrivate: true,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The attachment upload data and options\n * @returns The upload result\n */\n async uploadAttachment({\n formId,\n fileName,\n contentType,\n isPrivate,\n data,\n username,\n onProgress,\n abortSignal,\n }: UploadOptions & {\n /** The identifier for the form that is being completed */\n formId: number\n /** The name of the file being uploaded */\n fileName: string\n /** A standard MIME type describing the format of the contents */\n contentType: string\n /** Set to `true` to prevent the file from being downloaded publicly */\n isPrivate: boolean\n /** The file data to upload */\n data: AttachmentUploadData\n /** A username to allow a single user to download the attachment file */\n username?: string\n }) {\n return await uploadToS3<{\n url: string\n attachmentDataId: string\n uploadedAt: string\n }>({\n ...this,\n contentType,\n body: data,\n key: `forms/${formId}/attachments`,\n abortSignal,\n onProgress,\n isPublic: !isPrivate,\n contentDisposition: `attachment; filename*=UTF-8''${encodeURIComponent(fileName)}`,\n requestBodyHeader: {\n username: username ? encodeURIComponent(username) : undefined,\n fileName: encodeURIComponent(fileName),\n },\n })\n }\n\n /**\n * Upload a draft submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await uploader.uploadDraftSubmission({\n * submission: {\n * // ...\n * },\n * definition: {\n * // ...\n * },\n * formsAppId: 1,\n * formSubmissionDraftId: '',\n * createdAt: new Date().toISOString(),\n * title: '',\n * onProgress: (progress) => {\n * // ...\n * },\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The upload result\n */\n async uploadFormSubmissionDraft({\n submission,\n definition,\n device,\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n formsAppId,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n formSubmissionDraftId,\n createdAt,\n title,\n lastElementUpdated,\n sectionState,\n previousElapsedDurationSeconds,\n onProgress,\n abortSignal,\n }: UploadFormSubmissionOptions & {\n /** The identifier of the draft that a new version should be created for. */\n formSubmissionDraftId: string\n /**\n * The date and time (in ISO format) when the draft data was saved by a\n * user.\n */\n createdAt: string\n /** The title input by a user to identify the draft. */\n title: string\n /** The identifier for the last element that was used before saving draft */\n lastElementUpdated?: SubmissionTypes.NewS3SubmissionData['lastElementUpdated']\n /** The open/closed state of collapsible sections before saving draft */\n sectionState?: SubmissionTypes.NewS3SubmissionData['sectionState']\n /** The previously elapsed duration in seconds before saving draft */\n previousElapsedDurationSeconds?: SubmissionTypes.NewS3SubmissionData['previousElapsedDurationSeconds']\n }) {\n const newS3SubmissionData: SubmissionTypes.NewS3SubmissionData = {\n submission,\n definition,\n device,\n lastElementUpdated,\n sectionState,\n previousElapsedDurationSeconds,\n }\n const tags = generateFormSubmissionTags({\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n })\n\n tags.append('formSubmissionDraftId', formSubmissionDraftId)\n\n return await uploadToS3<SubmissionTypes.FormSubmissionDraftVersion>({\n ...this,\n contentType: 'application/json',\n body: JSON.stringify(newS3SubmissionData),\n key: 'form-submission-draft-versions',\n tags,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n formsAppId,\n formId: definition.id,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n jobId,\n previousFormSubmissionApprovalId,\n createdAt,\n title,\n formSubmissionDraftId,\n },\n })\n }\n\n /**\n * Upload an asset file. Asset files are always public.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAsset({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * organisationId: 'abc123',\n * })\n * ```\n *\n * @param data The asset upload data and options\n * @returns The upload result\n */\n async uploadAsset({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n organisationId,\n }: UploadOptions &\n UploadAssetOptions & {\n /** The identifier for the organisation that owns the asset */\n organisationId: string\n }) {\n return await uploadToS3<{\n url: string\n }>({\n ...this,\n contentType,\n body: data,\n key: `organisations/${organisationId}/assets`,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n },\n isPublic: true,\n })\n }\n\n /**\n * Upload an asset file for a product service such as Product Notifications.\n * Asset files are always public.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAttachment({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The asset upload data and options\n * @returns The upload result\n */\n async uploadProductAsset({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n }: UploadOptions & UploadAssetOptions) {\n return await uploadToS3<{\n url: string\n }>({\n ...this,\n contentType,\n body: data,\n key: `administration/assets`,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n },\n isPublic: true,\n })\n }\n\n /**\n * Upload form prefill data.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadPrefillData({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: {\n * field1: 'abc',\n * field2: 123,\n * },\n * formId: 12,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The prefill upload data and options\n * @returns The upload result\n */\n async uploadPrefillData({\n formId,\n prefillData,\n onProgress,\n abortSignal,\n }: UploadOptions & {\n /** The identifier for the form that the prefill data is associated with */\n formId: number\n /** The prefill data to upload */\n prefillData: SubmissionTypes.NewS3SubmissionData['submission']\n }) {\n return await uploadToS3<{\n preFillFormDataId: string\n }>({\n ...this,\n contentType: 'application/json',\n body: JSON.stringify(prefillData),\n key: `forms/${formId}/pre-fill`,\n abortSignal,\n onProgress,\n })\n }\n\n /**\n * Upload an email attachment. Email attachments are always private.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadEmailAttachment({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The email attachment data and options\n * @returns The upload result\n */\n async uploadEmailAttachment({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n }: UploadOptions & UploadEmailAttachmentOptions) {\n return await uploadToS3({\n ...this,\n contentType,\n body: data,\n key: 'email-attachments',\n abortSignal,\n onProgress,\n requestBodyHeader: {\n filename: encodeURIComponent(fileName),\n },\n isPublic: false,\n })\n }\n\n /**\n * Upload a PDF for conversion. PDF Conversions are always private.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadPDFConversion({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: pdfData,\n * formId: 1,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The PDF data and options\n * @returns The upload result\n */\n async uploadPDFConversion({\n onProgress,\n abortSignal,\n data,\n formId,\n }: UploadPDFConversionOptions) {\n return await uploadToS3({\n ...this,\n contentType: 'application/pdf',\n body: data,\n key: `forms/${formId}/pdf-conversion`,\n abortSignal,\n onProgress,\n })\n }\n\n /**\n * Upload an attachment for use with the AI builder.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAiBuilderAttachment({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: attachmentData,\n * formId: 1,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The attachment data and options\n * @returns The upload result\n */\n async uploadAiBuilderAttachment({\n onProgress,\n abortSignal,\n data,\n formId,\n contentType,\n fileName,\n }: UploadAiBuilderAttachmentOptions) {\n return await uploadToS3({\n ...this,\n contentType,\n body: data,\n key: `forms/${formId}/ai-builder/attachments`,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n },\n abortSignal,\n onProgress,\n })\n }\n\n /**\n * Upload a volunteer asset file. Asset files are always public.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadVolunteersAsset({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * formsAppId: 1,\n * })\n * ```\n *\n * @param data The asset upload data and options\n * @returns The upload result\n */\n async uploadVolunteersAsset({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n formsAppId,\n }: UploadOptions &\n UploadAssetOptions & {\n /** The identifier for the volunteers app that owns the asset */\n formsAppId: number\n }) {\n return await uploadToS3<{\n url: string\n }>({\n ...this,\n contentType,\n body: data,\n key: 'volunteers/assets',\n abortSignal,\n onProgress,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n formsAppId,\n },\n isPublic: true,\n })\n }\n}\n"]}
1
+ {"version":3,"file":"OneBlinkUploader.js","sourceRoot":"","sources":["../src/OneBlinkUploader.ts"],"names":[],"mappings":"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","sourcesContent":["import uploadToS3 from './uploadToS3.js'\nimport {\n AttachmentUploadData,\n StorageConstructorOptions,\n UploadAssetOptions,\n UploadFormSubmissionOptions,\n UploadOptions,\n UploadEmailAttachmentOptions,\n UploadPDFConversionOptions,\n UploadAiBuilderAttachmentOptions,\n} from './types.js'\nimport { SubmissionTypes } from '@oneblink/types'\nimport generateFormSubmissionTags from './generateFormSubmissionTags.js'\n/**\n * Used to create an instance of the OneBlinkUploader, exposing methods to\n * upload submissions and other types of files\n */\nexport default class OneBlinkUploader {\n apiOrigin: StorageConstructorOptions['apiOrigin']\n region: StorageConstructorOptions['region']\n getBearerToken: StorageConstructorOptions['getBearerToken']\n\n /**\n * #### Example\n *\n * ```typescript\n * import { OneBlinkUploader } from '@oneblink/uploads'\n *\n * const uploader = new OneBlinkUploader({\n * apiOrigin: 'https://auth-api.blinkm.io',\n * region: 'ap-southeast-2',\n * getBearerToken: () => getAccessToken(),\n * })\n * ```\n */\n constructor(props: StorageConstructorOptions) {\n this.apiOrigin = props.apiOrigin\n this.region = props.region\n this.getBearerToken = props.getBearerToken\n }\n\n /**\n * Upload a submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await uploader.uploadSubmission({\n * submission: {\n * // ...\n * },\n * definition: {\n * // ...\n * },\n * formsAppId: 1,\n * onProgress: (progress) => {\n * // ...\n * },\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The upload result\n */\n async uploadSubmission({\n submission,\n definition,\n device,\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n formsAppId,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n formSubmissionDraftId,\n completionTimestamp,\n recaptchas = [],\n onProgress,\n abortSignal,\n }: UploadFormSubmissionOptions & {\n /**\n * The date and time (in ISO format) the form was completed I.e. when the\n * user clicked the submit button\n */\n completionTimestamp?: string\n /** The reCAPTCHA tokens to validate the submission */\n recaptchas?: {\n /** The site key that was used to generate the reCAPTCHA token */\n siteKey: string\n /** A reCAPTCHA token */\n token: string\n }[]\n /** The identifier of the draft to mark as submitted. */\n formSubmissionDraftId?: string\n }) {\n const newS3SubmissionData: SubmissionTypes.NewS3SubmissionData = {\n submission,\n definition,\n device,\n completionTimestamp,\n }\n const tags = generateFormSubmissionTags({\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n })\n\n return await uploadToS3<{\n submissionTimestamp: string\n submissionId: string\n pdfAccessToken?: string\n attachmentsAccessToken?: string\n preventPayment: boolean\n }>({\n ...this,\n contentType: 'application/json',\n body: JSON.stringify(newS3SubmissionData),\n key: `forms/${definition.id}/submissions`,\n tags,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n formsAppId,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n jobId,\n previousFormSubmissionApprovalId,\n recaptchas,\n formSubmissionDraftId,\n },\n })\n }\n\n /**\n * Upload an form submission attachment.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAttachment({\n * formId: 1,\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * isPrivate: true,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The attachment upload data and options\n * @returns The upload result\n */\n async uploadAttachment({\n formId,\n fileName,\n contentType,\n isPrivate,\n data,\n username,\n onProgress,\n abortSignal,\n }: UploadOptions & {\n /** The identifier for the form that is being completed */\n formId: number\n /** The name of the file being uploaded */\n fileName: string\n /** A standard MIME type describing the format of the contents */\n contentType: string\n /** Set to `true` to prevent the file from being downloaded publicly */\n isPrivate: boolean\n /** The file data to upload */\n data: AttachmentUploadData\n /** A username to allow a single user to download the attachment file */\n username?: string\n }) {\n return await uploadToS3<{\n url: string\n attachmentDataId: string\n uploadedAt: string\n }>({\n ...this,\n contentType,\n body: data,\n key: `forms/${formId}/attachments`,\n abortSignal,\n onProgress,\n isPublic: !isPrivate,\n contentDisposition: `attachment; filename*=UTF-8''${encodeURIComponent(fileName)}`,\n requestBodyHeader: {\n username: username ? encodeURIComponent(username) : undefined,\n fileName: encodeURIComponent(fileName),\n },\n })\n }\n\n /**\n * Upload a draft submission.\n *\n * #### Example\n *\n * ```ts\n * const result = await uploader.uploadDraftSubmission({\n * submission: {\n * // ...\n * },\n * definition: {\n * // ...\n * },\n * formsAppId: 1,\n * formSubmissionDraftId: '',\n * createdAt: new Date().toISOString(),\n * title: '',\n * onProgress: (progress) => {\n * // ...\n * },\n * })\n * ```\n *\n * @param data The submission upload data and options\n * @returns The upload result\n */\n async uploadFormSubmissionDraft({\n submission,\n definition,\n device,\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n formsAppId,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n formSubmissionDraftId,\n createdAt,\n title,\n lastElementUpdated,\n sectionState,\n previousElapsedDurationSeconds,\n onProgress,\n abortSignal,\n }: UploadFormSubmissionOptions & {\n /** The identifier of the draft that a new version should be created for. */\n formSubmissionDraftId: string\n /**\n * The date and time (in ISO format) when the draft data was saved by a\n * user.\n */\n createdAt: string\n /** The title input by a user to identify the draft. */\n title: string\n /** The identifier for the last element that was used before saving draft */\n lastElementUpdated?: SubmissionTypes.NewS3SubmissionData['lastElementUpdated']\n /** The open/closed state of collapsible sections before saving draft */\n sectionState?: SubmissionTypes.NewS3SubmissionData['sectionState']\n /** The previously elapsed duration in seconds before saving draft */\n previousElapsedDurationSeconds?: SubmissionTypes.NewS3SubmissionData['previousElapsedDurationSeconds']\n }) {\n const newS3SubmissionData: SubmissionTypes.NewS3SubmissionData = {\n submission,\n definition,\n device,\n lastElementUpdated,\n sectionState,\n previousElapsedDurationSeconds,\n }\n const tags = generateFormSubmissionTags({\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n })\n\n tags.append('formSubmissionDraftId', formSubmissionDraftId)\n\n return await uploadToS3<SubmissionTypes.FormSubmissionDraftVersion>({\n ...this,\n contentType: 'application/json',\n body: JSON.stringify(newS3SubmissionData),\n key: 'form-submission-draft-versions',\n tags,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n formsAppId,\n formId: definition.id,\n externalId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n jobId,\n previousFormSubmissionApprovalId,\n createdAt,\n title,\n formSubmissionDraftId,\n },\n })\n }\n\n /**\n * Upload an asset file. Asset files are always public.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAsset({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * organisationId: 'abc123',\n * })\n * ```\n *\n * @param data The asset upload data and options\n * @returns The upload result\n */\n async uploadAsset({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n organisationId,\n }: UploadOptions &\n UploadAssetOptions & {\n /** The identifier for the organisation that owns the asset */\n organisationId: string\n }) {\n return await uploadToS3<{\n url: string\n }>({\n ...this,\n contentType,\n body: data,\n key: `organisations/${organisationId}/assets`,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n },\n isPublic: true,\n })\n }\n\n /**\n * Upload an asset file for a product service such as Product Notifications.\n * Asset files are always public.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAttachment({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The asset upload data and options\n * @returns The upload result\n */\n async uploadProductAsset({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n }: UploadOptions & UploadAssetOptions) {\n return await uploadToS3<{\n url: string\n }>({\n ...this,\n contentType,\n body: data,\n key: `administration/assets`,\n abortSignal,\n onProgress,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n },\n isPublic: true,\n })\n }\n\n /**\n * Upload form prefill data.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadPrefillData({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: {\n * field1: 'abc',\n * field2: 123,\n * },\n * formId: 12,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The prefill upload data and options\n * @returns The upload result\n */\n async uploadPrefillData({\n formId,\n prefillData,\n onProgress,\n abortSignal,\n }: UploadOptions & {\n /** The identifier for the form that the prefill data is associated with */\n formId: number\n /** The prefill data to upload */\n prefillData: SubmissionTypes.NewS3SubmissionData['submission']\n }) {\n return await uploadToS3<{\n preFillFormDataId: string\n }>({\n ...this,\n contentType: 'application/json',\n body: JSON.stringify(prefillData),\n key: `forms/${formId}/pre-fill`,\n abortSignal,\n onProgress,\n })\n }\n\n /**\n * Upload an email attachment. Email attachments are always private.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadEmailAttachment({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The email attachment data and options\n * @returns The upload result\n */\n async uploadEmailAttachment({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n }: UploadOptions & UploadEmailAttachmentOptions) {\n return await uploadToS3({\n ...this,\n contentType,\n body: data,\n key: 'email-attachments',\n abortSignal,\n onProgress,\n requestBodyHeader: {\n filename: encodeURIComponent(fileName),\n },\n isPublic: false,\n })\n }\n\n /**\n * Upload a PDF for conversion. PDF Conversions are always private.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadPDFConversion({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: pdfData,\n * formId: 1,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The PDF data and options\n * @returns The upload result\n */\n async uploadPDFConversion({\n onProgress,\n abortSignal,\n data,\n formId,\n }: UploadPDFConversionOptions) {\n return await uploadToS3({\n ...this,\n contentType: 'application/pdf',\n body: data,\n key: `forms/${formId}/pdf-conversion`,\n abortSignal,\n onProgress,\n })\n }\n\n /**\n * Upload an attachment for use with the AI builder.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadAiBuilderAttachment({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: attachmentData,\n * formId: 1,\n * abortSignal: abortController.signal,\n * })\n * ```\n *\n * @param data The attachment data and options\n * @returns The upload result\n */\n async uploadAiBuilderAttachment({\n onProgress,\n abortSignal,\n data,\n formId,\n contentType,\n fileName,\n }: UploadAiBuilderAttachmentOptions) {\n return await uploadToS3({\n ...this,\n contentType,\n body: data,\n key: `forms/${formId}/ai-builder/attachments`,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n },\n abortSignal,\n onProgress,\n })\n }\n\n /**\n * Upload a volunteer asset file. Asset files are always public.\n *\n * #### Example\n *\n * ```ts\n * const abortController = new AbortController()\n * const result = await uploader.uploadVolunteersAsset({\n * onProgress: (progress) => {\n * // ...\n * },\n * data: new Blob(['a string of data'], {\n * type: 'text/plain',\n * }),\n * fileName: 'file.txt',\n * contentType: 'text/plain',\n * abortSignal: abortController.signal,\n * formsAppId: 1,\n * })\n * ```\n *\n * @param data The asset upload data and options\n * @returns The upload result\n */\n async uploadVolunteersAsset({\n onProgress,\n abortSignal,\n data,\n contentType,\n fileName,\n formsAppId,\n }: UploadOptions &\n UploadAssetOptions & {\n /** The identifier for the volunteers app that owns the asset */\n formsAppId: number\n }) {\n return await uploadToS3<{\n url: string\n }>({\n ...this,\n contentType,\n body: data,\n key: 'volunteers/assets',\n abortSignal,\n onProgress,\n requestBodyHeader: {\n fileName: encodeURIComponent(fileName),\n formsAppId,\n },\n isPublic: true,\n })\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { DownloadOptions, StorageConstructorOptions } from './types';
1
+ import { DownloadOptions, StorageConstructorOptions } from './types.js';
2
2
  export default function downloadJsonFromS3<T>({ key, abortSignal, ...storageConstructorOptions }: DownloadOptions & StorageConstructorOptions & {
3
3
  key: string;
4
4
  }): Promise<T | undefined>;
@@ -1,18 +1,13 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const client_s3_1 = require("@aws-sdk/client-s3");
7
- const generateS3Client_1 = require("./generateS3Client");
8
- const OneBlinkStorageError_1 = __importDefault(require("./OneBlinkStorageError"));
9
- async function downloadJsonFromS3({ key, abortSignal, ...storageConstructorOptions }) {
10
- const { s3Client, bucket, oneBlinkRequestHandler } = (0, generateS3Client_1.generateS3Client)({
1
+ import { GetObjectCommand } from '@aws-sdk/client-s3';
2
+ import { generateS3Client } from './generateS3Client.js';
3
+ import OneBlinkStorageError from './OneBlinkStorageError.js';
4
+ export default async function downloadJsonFromS3({ key, abortSignal, ...storageConstructorOptions }) {
5
+ const { s3Client, bucket, oneBlinkRequestHandler } = generateS3Client({
11
6
  ...storageConstructorOptions,
12
7
  requestBodyHeader: undefined,
13
8
  });
14
9
  try {
15
- const getObjectCommandOutput = await oneBlinkRequestHandler.sendS3Command(async () => await s3Client.send(new client_s3_1.GetObjectCommand({
10
+ const getObjectCommandOutput = await oneBlinkRequestHandler.sendS3Command(async () => await s3Client.send(new GetObjectCommand({
16
11
  Bucket: bucket,
17
12
  Key: key,
18
13
  }), {
@@ -21,7 +16,7 @@ async function downloadJsonFromS3({ key, abortSignal, ...storageConstructorOptio
21
16
  return oneBlinkRequestHandler.oneBlinkHttpHandler.parseGetObjectCommandOutputAsJson(getObjectCommandOutput);
22
17
  }
23
18
  catch (error) {
24
- if (error instanceof OneBlinkStorageError_1.default && error.httpStatusCode === 403) {
19
+ if (error instanceof OneBlinkStorageError && error.httpStatusCode === 403) {
25
20
  return;
26
21
  }
27
22
  else {
@@ -29,5 +24,4 @@ async function downloadJsonFromS3({ key, abortSignal, ...storageConstructorOptio
29
24
  }
30
25
  }
31
26
  }
32
- exports.default = downloadJsonFromS3;
33
27
  //# sourceMappingURL=downloadJsonFromS3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"downloadJsonFromS3.js","sourceRoot":"","sources":["../src/downloadJsonFromS3.ts"],"names":[],"mappings":";;;;;AAAA,kDAA6E;AAE7E,yDAAqD;AACrD,kFAAyD;AAE1C,KAAK,UAAU,kBAAkB,CAAI,EAClD,GAAG,EACH,WAAW,EACX,GAAG,yBAAyB,EAI3B;IACD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAA,mCAAgB,EAAC;QACpE,GAAG,yBAAyB;QAC5B,iBAAiB,EAAE,SAAS;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,sBAAsB,GAC1B,MAAM,sBAAsB,CAAC,aAAa,CACxC,KAAK,IAAI,EAAE,CACT,MAAM,QAAQ,CAAC,IAAI,CACjB,IAAI,4BAAgB,CAAC;YACnB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;SACT,CAAC,EACF;YACE,WAAW;SACZ,CACF,CACJ,CAAA;QAEH,OAAO,sBAAsB,CAAC,mBAAmB,CAAC,iCAAiC,CACjF,sBAAsB,CACvB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,8BAAoB,IAAI,KAAK,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;YAC1E,OAAM;QACR,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAtCD,qCAsCC","sourcesContent":["import { GetObjectCommand, GetObjectCommandOutput } from '@aws-sdk/client-s3'\nimport { DownloadOptions, StorageConstructorOptions } from './types'\nimport { generateS3Client } from './generateS3Client'\nimport OneBlinkStorageError from './OneBlinkStorageError'\n\nexport default async function downloadJsonFromS3<T>({\n key,\n abortSignal,\n ...storageConstructorOptions\n}: DownloadOptions &\n StorageConstructorOptions & {\n key: string\n }): Promise<T | undefined> {\n const { s3Client, bucket, oneBlinkRequestHandler } = generateS3Client({\n ...storageConstructorOptions,\n requestBodyHeader: undefined,\n })\n\n try {\n const getObjectCommandOutput =\n await oneBlinkRequestHandler.sendS3Command<GetObjectCommandOutput>(\n async () =>\n await s3Client.send(\n new GetObjectCommand({\n Bucket: bucket,\n Key: key,\n }),\n {\n abortSignal,\n },\n ),\n )\n\n return oneBlinkRequestHandler.oneBlinkHttpHandler.parseGetObjectCommandOutputAsJson<T>(\n getObjectCommandOutput,\n )\n } catch (error) {\n if (error instanceof OneBlinkStorageError && error.httpStatusCode === 403) {\n return\n } else {\n throw error\n }\n }\n}\n"]}
1
+ {"version":3,"file":"downloadJsonFromS3.js","sourceRoot":"","sources":["../src/downloadJsonFromS3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,oBAAoB,CAAA;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,oBAAoB,MAAM,2BAA2B,CAAA;AAE5D,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,kBAAkB,CAAI,EAClD,GAAG,EACH,WAAW,EACX,GAAG,yBAAyB,EAI3B;IACD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,gBAAgB,CAAC;QACpE,GAAG,yBAAyB;QAC5B,iBAAiB,EAAE,SAAS;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,sBAAsB,GAC1B,MAAM,sBAAsB,CAAC,aAAa,CACxC,KAAK,IAAI,EAAE,CACT,MAAM,QAAQ,CAAC,IAAI,CACjB,IAAI,gBAAgB,CAAC;YACnB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;SACT,CAAC,EACF;YACE,WAAW;SACZ,CACF,CACJ,CAAA;QAEH,OAAO,sBAAsB,CAAC,mBAAmB,CAAC,iCAAiC,CACjF,sBAAsB,CACvB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB,IAAI,KAAK,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;YAC1E,OAAM;QACR,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { GetObjectCommand, GetObjectCommandOutput } from '@aws-sdk/client-s3'\nimport { DownloadOptions, StorageConstructorOptions } from './types.js'\nimport { generateS3Client } from './generateS3Client.js'\nimport OneBlinkStorageError from './OneBlinkStorageError.js'\n\nexport default async function downloadJsonFromS3<T>({\n key,\n abortSignal,\n ...storageConstructorOptions\n}: DownloadOptions &\n StorageConstructorOptions & {\n key: string\n }): Promise<T | undefined> {\n const { s3Client, bucket, oneBlinkRequestHandler } = generateS3Client({\n ...storageConstructorOptions,\n requestBodyHeader: undefined,\n })\n\n try {\n const getObjectCommandOutput =\n await oneBlinkRequestHandler.sendS3Command<GetObjectCommandOutput>(\n async () =>\n await s3Client.send(\n new GetObjectCommand({\n Bucket: bucket,\n Key: key,\n }),\n {\n abortSignal,\n },\n ),\n )\n\n return oneBlinkRequestHandler.oneBlinkHttpHandler.parseGetObjectCommandOutputAsJson<T>(\n getObjectCommandOutput,\n )\n } catch (error) {\n if (error instanceof OneBlinkStorageError && error.httpStatusCode === 403) {\n return\n } else {\n throw error\n }\n }\n}\n"]}
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function generateFormSubmissionTags({ userToken, previousFormSubmissionApprovalId, jobId, }) {
1
+ export default function generateFormSubmissionTags({ userToken, previousFormSubmissionApprovalId, jobId, }) {
4
2
  const tags = new URLSearchParams();
5
3
  if (userToken) {
6
4
  tags.append('userToken', userToken);
@@ -13,5 +11,4 @@ function generateFormSubmissionTags({ userToken, previousFormSubmissionApprovalI
13
11
  }
14
12
  return tags;
15
13
  }
16
- exports.default = generateFormSubmissionTags;
17
14
  //# sourceMappingURL=generateFormSubmissionTags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateFormSubmissionTags.js","sourceRoot":"","sources":["../src/generateFormSubmissionTags.ts"],"names":[],"mappings":";;AAAA,SAAwB,0BAA0B,CAAC,EACjD,SAAS,EACT,gCAAgC,EAChC,KAAK,GAKN;IACC,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAA;IAClC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,gCAAgC,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CACT,kCAAkC,EAClC,gCAAgC,CACjC,CAAA;IACH,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAvBD,6CAuBC","sourcesContent":["export default function generateFormSubmissionTags({\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n}: {\n userToken: string | undefined\n previousFormSubmissionApprovalId: string | undefined\n jobId: string | undefined\n}) {\n const tags = new URLSearchParams()\n if (userToken) {\n tags.append('userToken', userToken)\n }\n if (previousFormSubmissionApprovalId) {\n tags.append(\n 'previousFormSubmissionApprovalId',\n previousFormSubmissionApprovalId,\n )\n }\n if (jobId) {\n tags.append('jobId', jobId)\n }\n return tags\n}\n"]}
1
+ {"version":3,"file":"generateFormSubmissionTags.js","sourceRoot":"","sources":["../src/generateFormSubmissionTags.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAAC,EACjD,SAAS,EACT,gCAAgC,EAChC,KAAK,GAKN;IACC,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAA;IAClC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,gCAAgC,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CACT,kCAAkC,EAClC,gCAAgC,CACjC,CAAA;IACH,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["export default function generateFormSubmissionTags({\n userToken,\n previousFormSubmissionApprovalId,\n jobId,\n}: {\n userToken: string | undefined\n previousFormSubmissionApprovalId: string | undefined\n jobId: string | undefined\n}) {\n const tags = new URLSearchParams()\n if (userToken) {\n tags.append('userToken', userToken)\n }\n if (previousFormSubmissionApprovalId) {\n tags.append(\n 'previousFormSubmissionApprovalId',\n previousFormSubmissionApprovalId,\n )\n }\n if (jobId) {\n tags.append('jobId', jobId)\n }\n return tags\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { S3Client } from '@aws-sdk/client-s3';
2
- import { StorageConstructorOptions } from './types';
3
- import { OneBlinkRequestHandler } from './OneBlinkRequestHandler';
4
- import { RequestBodyHeader } from './http-handlers/types';
2
+ import { StorageConstructorOptions } from './types.js';
3
+ import { OneBlinkRequestHandler } from './OneBlinkRequestHandler.js';
4
+ import { RequestBodyHeader } from './http-handlers/types.js';
5
5
  export declare function generateS3Client<T>({ region, apiOrigin, getBearerToken, requestBodyHeader, }: StorageConstructorOptions & {
6
6
  requestBodyHeader?: RequestBodyHeader;
7
7
  }): {
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateS3Client = void 0;
4
- const client_s3_1 = require("@aws-sdk/client-s3");
5
- const http_handlers_1 = require("./http-handlers");
6
- const OneBlinkRequestHandler_1 = require("./OneBlinkRequestHandler");
1
+ import { S3Client } from '@aws-sdk/client-s3';
2
+ import { getOneBlinkHttpHandler } from './http-handlers/index.js';
3
+ import { OneBlinkRequestHandler } from './OneBlinkRequestHandler.js';
7
4
  const RETRY_ATTEMPTS = 3;
8
- function generateS3Client({ region, apiOrigin, getBearerToken, requestBodyHeader, }) {
9
- const oneBlinkHttpHandler = (0, http_handlers_1.getOneBlinkHttpHandler)();
10
- const oneBlinkRequestHandler = new OneBlinkRequestHandler_1.OneBlinkRequestHandler(oneBlinkHttpHandler, requestBodyHeader);
5
+ export function generateS3Client({ region, apiOrigin, getBearerToken, requestBodyHeader, }) {
6
+ const oneBlinkHttpHandler = getOneBlinkHttpHandler();
7
+ const oneBlinkRequestHandler = new OneBlinkRequestHandler(oneBlinkHttpHandler, requestBodyHeader);
11
8
  // The endpoint we use instead of the the AWS S3 endpoint is
12
9
  // formatted internally by the AWS S3 SDK. It will add the Bucket
13
10
  // parameter below as the subdomain to the URL (as long as the
@@ -22,7 +19,7 @@ function generateS3Client({ region, apiOrigin, getBearerToken, requestBodyHeader
22
19
  return {
23
20
  bucket,
24
21
  oneBlinkRequestHandler,
25
- s3Client: new client_s3_1.S3Client({
22
+ s3Client: new S3Client({
26
23
  endpoint: url.href,
27
24
  region,
28
25
  maxAttempts: RETRY_ATTEMPTS,
@@ -42,5 +39,4 @@ function generateS3Client({ region, apiOrigin, getBearerToken, requestBodyHeader
42
39
  }),
43
40
  };
44
41
  }
45
- exports.generateS3Client = generateS3Client;
46
42
  //# sourceMappingURL=generateS3Client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateS3Client.js","sourceRoot":"","sources":["../src/generateS3Client.ts"],"names":[],"mappings":";;;AAAA,kDAA6C;AAG7C,mDAAwD;AACxD,qEAAiE;AAGjE,MAAM,cAAc,GAAG,CAAC,CAAA;AAExB,SAAgB,gBAAgB,CAAI,EAClC,MAAM,EACN,SAAS,EACT,cAAc,EACd,iBAAiB,GAGlB;IACC,MAAM,mBAAmB,GAAG,IAAA,sCAAsB,GAAE,CAAA;IACpD,MAAM,sBAAsB,GAAG,IAAI,+CAAsB,CACvD,mBAAmB,EACnB,iBAAiB,CAClB,CAAA;IAED,4DAA4D;IAC5D,iEAAiE;IACjE,8DAA8D;IAC9D,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,gEAAgE;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;IAC9B,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAA;IACzB,MAAM,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxD,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEpC,OAAO;QACL,MAAM;QACN,sBAAsB;QACtB,QAAQ,EAAE,IAAI,oBAAQ,CAAC;YACrB,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,MAAM;YACN,WAAW,EAAE,cAAc;YAC3B,cAAc,EAAE,sBAAsB;YACtC,WAAW,EAAE,EAA2B;YACxC,0DAA0D;YAC1D,qDAAqD;YACrD,MAAM,EAAE;gBACN,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBACtB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAA;oBACpC,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,KAAK,CAAA;oBACtD,CAAC;oBAED,OAAO,OAAO,CAAA;gBAChB,CAAC;aACF;SACF,CAAC;KACH,CAAA;AACH,CAAC;AAjDD,4CAiDC","sourcesContent":["import { S3Client } from '@aws-sdk/client-s3'\nimport { AwsCredentialIdentity } from '@smithy/types'\nimport { StorageConstructorOptions } from './types'\nimport { getOneBlinkHttpHandler } from './http-handlers'\nimport { OneBlinkRequestHandler } from './OneBlinkRequestHandler'\nimport { RequestBodyHeader } from './http-handlers/types'\n\nconst RETRY_ATTEMPTS = 3\n\nexport function generateS3Client<T>({\n region,\n apiOrigin,\n getBearerToken,\n requestBodyHeader,\n}: StorageConstructorOptions & {\n requestBodyHeader?: RequestBodyHeader\n}) {\n const oneBlinkHttpHandler = getOneBlinkHttpHandler()\n const oneBlinkRequestHandler = new OneBlinkRequestHandler<T>(\n oneBlinkHttpHandler,\n requestBodyHeader,\n )\n\n // The endpoint we use instead of the the AWS S3 endpoint is\n // formatted internally by the AWS S3 SDK. It will add the Bucket\n // parameter below as the subdomain to the URL (as long as the\n // bucket does not contain a `.`). The logic below allows the final\n // URL used to upload the object to be the origin that is passed in.\n // The suffix on the end is important as it will allow us to route\n // traffic to S3 via lambda at edge instead of going to our API.\n const url = new URL(apiOrigin)\n url.pathname = '/storage'\n const [bucket, ...domainParts] = url.hostname.split('.')\n url.hostname = domainParts.join('.')\n\n return {\n bucket,\n oneBlinkRequestHandler,\n s3Client: new S3Client({\n endpoint: url.href,\n region,\n maxAttempts: RETRY_ATTEMPTS,\n requestHandler: oneBlinkRequestHandler,\n credentials: {} as AwsCredentialIdentity,\n // Sign requests with our own Authorization header instead\n // of letting AWS SDK attempt to generate credentials\n signer: {\n sign: async (request) => {\n const token = await getBearerToken()\n if (token) {\n request.headers['authorization'] = 'Bearer ' + token\n }\n\n return request\n },\n },\n }),\n }\n}\n"]}
1
+ {"version":3,"file":"generateS3Client.js","sourceRoot":"","sources":["../src/generateS3Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,cAAc,GAAG,CAAC,CAAA;AAExB,MAAM,UAAU,gBAAgB,CAAI,EAClC,MAAM,EACN,SAAS,EACT,cAAc,EACd,iBAAiB,GAGlB;IACC,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAA;IACpD,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CACvD,mBAAmB,EACnB,iBAAiB,CAClB,CAAA;IAED,4DAA4D;IAC5D,iEAAiE;IACjE,8DAA8D;IAC9D,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,gEAAgE;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;IAC9B,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAA;IACzB,MAAM,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxD,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEpC,OAAO;QACL,MAAM;QACN,sBAAsB;QACtB,QAAQ,EAAE,IAAI,QAAQ,CAAC;YACrB,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,MAAM;YACN,WAAW,EAAE,cAAc;YAC3B,cAAc,EAAE,sBAAsB;YACtC,WAAW,EAAE,EAA2B;YACxC,0DAA0D;YAC1D,qDAAqD;YACrD,MAAM,EAAE;gBACN,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBACtB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAA;oBACpC,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,KAAK,CAAA;oBACtD,CAAC;oBAED,OAAO,OAAO,CAAA;gBAChB,CAAC;aACF;SACF,CAAC;KACH,CAAA;AACH,CAAC","sourcesContent":["import { S3Client } from '@aws-sdk/client-s3'\nimport { AwsCredentialIdentity } from '@smithy/types'\nimport { StorageConstructorOptions } from './types.js'\nimport { getOneBlinkHttpHandler } from './http-handlers/index.js'\nimport { OneBlinkRequestHandler } from './OneBlinkRequestHandler.js'\nimport { RequestBodyHeader } from './http-handlers/types.js'\n\nconst RETRY_ATTEMPTS = 3\n\nexport function generateS3Client<T>({\n region,\n apiOrigin,\n getBearerToken,\n requestBodyHeader,\n}: StorageConstructorOptions & {\n requestBodyHeader?: RequestBodyHeader\n}) {\n const oneBlinkHttpHandler = getOneBlinkHttpHandler()\n const oneBlinkRequestHandler = new OneBlinkRequestHandler<T>(\n oneBlinkHttpHandler,\n requestBodyHeader,\n )\n\n // The endpoint we use instead of the the AWS S3 endpoint is\n // formatted internally by the AWS S3 SDK. It will add the Bucket\n // parameter below as the subdomain to the URL (as long as the\n // bucket does not contain a `.`). The logic below allows the final\n // URL used to upload the object to be the origin that is passed in.\n // The suffix on the end is important as it will allow us to route\n // traffic to S3 via lambda at edge instead of going to our API.\n const url = new URL(apiOrigin)\n url.pathname = '/storage'\n const [bucket, ...domainParts] = url.hostname.split('.')\n url.hostname = domainParts.join('.')\n\n return {\n bucket,\n oneBlinkRequestHandler,\n s3Client: new S3Client({\n endpoint: url.href,\n region,\n maxAttempts: RETRY_ATTEMPTS,\n requestHandler: oneBlinkRequestHandler,\n credentials: {} as AwsCredentialIdentity,\n // Sign requests with our own Authorization header instead\n // of letting AWS SDK attempt to generate credentials\n signer: {\n sign: async (request) => {\n const token = await getBearerToken()\n if (token) {\n request.headers['authorization'] = 'Bearer ' + token\n }\n\n return request\n },\n },\n }),\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { HttpRequest, HttpResponse } from '@smithy/protocol-http';
2
2
  import { HttpHandlerOptions } from '@smithy/types';
3
- import { IOneBlinkHttpHandler } from './types';
3
+ import { IOneBlinkHttpHandler } from './types.js';
4
4
  import { GetObjectCommandOutput } from '@aws-sdk/client-s3';
5
5
  export declare class OneBlinkFetchHandler implements IOneBlinkHttpHandler {
6
6
  handleRequest(request: HttpRequest, options?: HttpHandlerOptions): Promise<HttpResponse>;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OneBlinkFetchHandler = void 0;
4
- class OneBlinkFetchHandler {
1
+ export class OneBlinkFetchHandler {
5
2
  async handleRequest(request, options) {
6
3
  const { FetchHttpHandler } = await import('@smithy/fetch-http-handler');
7
4
  const fetchHttpHandler = new FetchHttpHandler();
@@ -54,5 +51,4 @@ class OneBlinkFetchHandler {
54
51
  }
55
52
  }
56
53
  }
57
- exports.OneBlinkFetchHandler = OneBlinkFetchHandler;
58
54
  //# sourceMappingURL=FetchHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FetchHandler.js","sourceRoot":"","sources":["../../src/http-handlers/FetchHandler.ts"],"names":[],"mappings":";;;AAKA,MAAa,oBAAoB;IAC/B,KAAK,CAAC,aAAa,CAAC,OAAoB,EAAE,OAA4B;QACpE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAA;QACvE,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAA;QAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAsB;QAC7C,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEjD,QAAQ,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,KAAK,iCAAiC,CAAC;YACvC,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,OAAO;oBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO;iBAC9C,CAAA;YACH,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO;oBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,MAAM,aAAa,CAAC,IAAI,EAAE;iBACpC,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iCAAiC,CACrC,sBAA8C;QAE9C,IACE,sBAAsB,CAAC,IAAI,YAAY,IAAI;YAC3C,CAAC,MAAM,CAAC,cAAc;gBACpB,sBAAsB,CAAC,IAAI,YAAY,MAAM,CAAC,cAAc,CAAC,EAC/D,CAAC;YACD,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAM,CAAA;QACtE,CAAC;IACH,CAAC;IAED,wBAAwB;QACtB,MAAM,aAAa,GACjB,MAAM,CAAC,SAAS;YAChB,YAAY,IAAI,MAAM,CAAC,SAAS;YAChC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU;YAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,KAAK,QAAQ;YAC/C,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU;YAC5C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa;YAC3C,CAAC,CAAC,SAAS,CAAA;QACf,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,IAAI;gBACP,OAAO,EAAE,CAAA;YACX,KAAK,IAAI;gBACP,OAAO,CAAC,CAAA;YACV,KAAK,SAAS,CAAC;YACf,KAAK,IAAI,CAAC;YACV,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA7DD,oDA6DC","sourcesContent":["import { HttpRequest, HttpResponse } from '@smithy/protocol-http'\nimport { HttpHandlerOptions } from '@smithy/types'\nimport { IOneBlinkHttpHandler } from './types'\nimport { GetObjectCommandOutput } from '@aws-sdk/client-s3'\n\nexport class OneBlinkFetchHandler implements IOneBlinkHttpHandler {\n async handleRequest(request: HttpRequest, options?: HttpHandlerOptions) {\n const { FetchHttpHandler } = await import('@smithy/fetch-http-handler')\n const fetchHttpHandler = new FetchHttpHandler()\n const { response } = await fetchHttpHandler.handle(request, options)\n return response\n }\n\n async handleFailResponse(response: HttpResponse) {\n const fetchResponse = new Response(response.body)\n\n switch (response.headers['content-type']) {\n case 'application/json; charset=utf-8':\n case 'application/json': {\n return {\n statusCode: response.statusCode,\n message: (await fetchResponse.json()).message,\n }\n }\n default: {\n return {\n statusCode: response.statusCode,\n message: await fetchResponse.text(),\n }\n }\n }\n }\n\n async parseGetObjectCommandOutputAsJson<T>(\n getObjectCommandOutput: GetObjectCommandOutput,\n ): Promise<T | undefined> {\n if (\n getObjectCommandOutput.Body instanceof Blob ||\n (window.ReadableStream &&\n getObjectCommandOutput.Body instanceof window.ReadableStream)\n ) {\n return (await new Response(getObjectCommandOutput.Body).json()) as T\n }\n }\n\n determineUploadQueueSize() {\n const effectiveType =\n window.navigator &&\n 'connection' in window.navigator &&\n !!window.navigator.connection &&\n typeof window.navigator.connection === 'object' &&\n 'effectiveType' in window.navigator.connection\n ? window.navigator.connection.effectiveType\n : undefined\n switch (effectiveType) {\n case '4g':\n return 10\n case '3g':\n return 2\n case 'slow-2g':\n case '2g':\n default: {\n return 1\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"FetchHandler.js","sourceRoot":"","sources":["../../src/http-handlers/FetchHandler.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,oBAAoB;IAC/B,KAAK,CAAC,aAAa,CAAC,OAAoB,EAAE,OAA4B;QACpE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAA;QACvE,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAA;QAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAsB;QAC7C,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEjD,QAAQ,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,KAAK,iCAAiC,CAAC;YACvC,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,OAAO;oBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO;iBAC9C,CAAA;YACH,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO;oBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,MAAM,aAAa,CAAC,IAAI,EAAE;iBACpC,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iCAAiC,CACrC,sBAA8C;QAE9C,IACE,sBAAsB,CAAC,IAAI,YAAY,IAAI;YAC3C,CAAC,MAAM,CAAC,cAAc;gBACpB,sBAAsB,CAAC,IAAI,YAAY,MAAM,CAAC,cAAc,CAAC,EAC/D,CAAC;YACD,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAM,CAAA;QACtE,CAAC;IACH,CAAC;IAED,wBAAwB;QACtB,MAAM,aAAa,GACjB,MAAM,CAAC,SAAS;YAChB,YAAY,IAAI,MAAM,CAAC,SAAS;YAChC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU;YAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,KAAK,QAAQ;YAC/C,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU;YAC5C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa;YAC3C,CAAC,CAAC,SAAS,CAAA;QACf,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,IAAI;gBACP,OAAO,EAAE,CAAA;YACX,KAAK,IAAI;gBACP,OAAO,CAAC,CAAA;YACV,KAAK,SAAS,CAAC;YACf,KAAK,IAAI,CAAC;YACV,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["import { HttpRequest, HttpResponse } from '@smithy/protocol-http'\nimport { HttpHandlerOptions } from '@smithy/types'\nimport { IOneBlinkHttpHandler } from './types.js'\nimport { GetObjectCommandOutput } from '@aws-sdk/client-s3'\n\nexport class OneBlinkFetchHandler implements IOneBlinkHttpHandler {\n async handleRequest(request: HttpRequest, options?: HttpHandlerOptions) {\n const { FetchHttpHandler } = await import('@smithy/fetch-http-handler')\n const fetchHttpHandler = new FetchHttpHandler()\n const { response } = await fetchHttpHandler.handle(request, options)\n return response\n }\n\n async handleFailResponse(response: HttpResponse) {\n const fetchResponse = new Response(response.body)\n\n switch (response.headers['content-type']) {\n case 'application/json; charset=utf-8':\n case 'application/json': {\n return {\n statusCode: response.statusCode,\n message: (await fetchResponse.json()).message,\n }\n }\n default: {\n return {\n statusCode: response.statusCode,\n message: await fetchResponse.text(),\n }\n }\n }\n }\n\n async parseGetObjectCommandOutputAsJson<T>(\n getObjectCommandOutput: GetObjectCommandOutput,\n ): Promise<T | undefined> {\n if (\n getObjectCommandOutput.Body instanceof Blob ||\n (window.ReadableStream &&\n getObjectCommandOutput.Body instanceof window.ReadableStream)\n ) {\n return (await new Response(getObjectCommandOutput.Body).json()) as T\n }\n }\n\n determineUploadQueueSize() {\n const effectiveType =\n window.navigator &&\n 'connection' in window.navigator &&\n !!window.navigator.connection &&\n typeof window.navigator.connection === 'object' &&\n 'effectiveType' in window.navigator.connection\n ? window.navigator.connection.effectiveType\n : undefined\n switch (effectiveType) {\n case '4g':\n return 10\n case '3g':\n return 2\n case 'slow-2g':\n case '2g':\n default: {\n return 1\n }\n }\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { HttpRequest, HttpResponse } from '@smithy/protocol-http';
2
2
  import { HttpHandlerOptions } from '@smithy/types';
3
- import { IOneBlinkHttpHandler } from './types';
3
+ import { IOneBlinkHttpHandler } from './types.js';
4
4
  import { GetObjectCommandOutput } from '@aws-sdk/client-s3';
5
5
  export declare class OneBlinkNodeJsHandler implements IOneBlinkHttpHandler {
6
6
  handleRequest(request: HttpRequest, options?: HttpHandlerOptions | undefined): Promise<HttpResponse>;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OneBlinkNodeJsHandler = void 0;
4
- class OneBlinkNodeJsHandler {
1
+ export class OneBlinkNodeJsHandler {
5
2
  async handleRequest(request, options) {
6
3
  const { NodeHttpHandler } = await import('@smithy/node-http-handler');
7
4
  const nodeHttpHandler = new NodeHttpHandler();
@@ -59,5 +56,4 @@ class OneBlinkNodeJsHandler {
59
56
  return 10;
60
57
  }
61
58
  }
62
- exports.OneBlinkNodeJsHandler = OneBlinkNodeJsHandler;
63
59
  //# sourceMappingURL=NodeJsHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeJsHandler.js","sourceRoot":"","sources":["../../src/http-handlers/NodeJsHandler.ts"],"names":[],"mappings":";;;AAKA,MAAa,qBAAqB;IAChC,KAAK,CAAC,aAAa,CACjB,OAAoB,EACpB,OAAwC;QAExC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;QACrE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACnE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAsB;QAC7C,QAAQ,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,KAAK,iCAAiC,CAAC;YACvC,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC3C,IAAI,QAAQ,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;oBAClD,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAkB;6BAC7D,OAAO;qBACX,CAAA;gBACH,CAAC;gBAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO;qBAC3C,CAAA;gBACH,CAAC;gBACD,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC3C,IAAI,QAAQ,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;oBAClD,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;qBAC7C,CAAA;gBACH,CAAC;gBAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,QAAQ,CAAC,IAAI;qBACvB,CAAA;gBACH,CAAC;gBACD,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iCAAiC,CACrC,sBAA8C;QAE9C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,sBAAsB,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;YAClD,OAAO,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAM,CAAA;QACjE,CAAC;IACH,CAAC;IAED,wBAAwB;QACtB,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AAnED,sDAmEC","sourcesContent":["import { HttpRequest, HttpResponse } from '@smithy/protocol-http'\nimport { HttpHandlerOptions } from '@smithy/types'\nimport { IOneBlinkHttpHandler, FailResponse } from './types'\nimport { GetObjectCommandOutput } from '@aws-sdk/client-s3'\n\nexport class OneBlinkNodeJsHandler implements IOneBlinkHttpHandler {\n async handleRequest(\n request: HttpRequest,\n options?: HttpHandlerOptions | undefined,\n ) {\n const { NodeHttpHandler } = await import('@smithy/node-http-handler')\n const nodeHttpHandler = new NodeHttpHandler()\n const { response } = await nodeHttpHandler.handle(request, options)\n return response\n }\n\n async handleFailResponse(response: HttpResponse) {\n switch (response.headers['content-type']) {\n case 'application/json; charset=utf-8':\n case 'application/json': {\n const { Readable } = await import('stream')\n if (response.body instanceof Readable) {\n const consumers = await import('stream/consumers')\n return {\n statusCode: response.statusCode,\n message: ((await consumers.json(response.body)) as FailResponse)\n .message,\n }\n }\n\n if (typeof response.body === 'string') {\n return {\n statusCode: response.statusCode,\n message: JSON.parse(response.body).message,\n }\n }\n break\n }\n default: {\n const { Readable } = await import('stream')\n if (response.body instanceof Readable) {\n const consumers = await import('stream/consumers')\n return {\n statusCode: response.statusCode,\n message: await consumers.text(response.body),\n }\n }\n\n if (typeof response.body === 'string') {\n return {\n statusCode: response.statusCode,\n message: response.body,\n }\n }\n break\n }\n }\n }\n\n async parseGetObjectCommandOutputAsJson<T>(\n getObjectCommandOutput: GetObjectCommandOutput,\n ): Promise<T | undefined> {\n const { Readable } = await import('stream')\n if (getObjectCommandOutput.Body instanceof Readable) {\n const consumers = await import('stream/consumers')\n return (await consumers.json(getObjectCommandOutput.Body)) as T\n }\n }\n\n determineUploadQueueSize() {\n return 10\n }\n}\n"]}
1
+ {"version":3,"file":"NodeJsHandler.js","sourceRoot":"","sources":["../../src/http-handlers/NodeJsHandler.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,qBAAqB;IAChC,KAAK,CAAC,aAAa,CACjB,OAAoB,EACpB,OAAwC;QAExC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;QACrE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACnE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAsB;QAC7C,QAAQ,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,KAAK,iCAAiC,CAAC;YACvC,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC3C,IAAI,QAAQ,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;oBAClD,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAkB;6BAC7D,OAAO;qBACX,CAAA;gBACH,CAAC;gBAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO;qBAC3C,CAAA;gBACH,CAAC;gBACD,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC3C,IAAI,QAAQ,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;oBAClD,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;qBAC7C,CAAA;gBACH,CAAC;gBAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,QAAQ,CAAC,IAAI;qBACvB,CAAA;gBACH,CAAC;gBACD,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iCAAiC,CACrC,sBAA8C;QAE9C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,sBAAsB,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;YAClD,OAAO,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAM,CAAA;QACjE,CAAC;IACH,CAAC;IAED,wBAAwB;QACtB,OAAO,EAAE,CAAA;IACX,CAAC;CACF","sourcesContent":["import { HttpRequest, HttpResponse } from '@smithy/protocol-http'\nimport { HttpHandlerOptions } from '@smithy/types'\nimport { IOneBlinkHttpHandler, FailResponse } from './types.js'\nimport { GetObjectCommandOutput } from '@aws-sdk/client-s3'\n\nexport class OneBlinkNodeJsHandler implements IOneBlinkHttpHandler {\n async handleRequest(\n request: HttpRequest,\n options?: HttpHandlerOptions | undefined,\n ) {\n const { NodeHttpHandler } = await import('@smithy/node-http-handler')\n const nodeHttpHandler = new NodeHttpHandler()\n const { response } = await nodeHttpHandler.handle(request, options)\n return response\n }\n\n async handleFailResponse(response: HttpResponse) {\n switch (response.headers['content-type']) {\n case 'application/json; charset=utf-8':\n case 'application/json': {\n const { Readable } = await import('stream')\n if (response.body instanceof Readable) {\n const consumers = await import('stream/consumers')\n return {\n statusCode: response.statusCode,\n message: ((await consumers.json(response.body)) as FailResponse)\n .message,\n }\n }\n\n if (typeof response.body === 'string') {\n return {\n statusCode: response.statusCode,\n message: JSON.parse(response.body).message,\n }\n }\n break\n }\n default: {\n const { Readable } = await import('stream')\n if (response.body instanceof Readable) {\n const consumers = await import('stream/consumers')\n return {\n statusCode: response.statusCode,\n message: await consumers.text(response.body),\n }\n }\n\n if (typeof response.body === 'string') {\n return {\n statusCode: response.statusCode,\n message: response.body,\n }\n }\n break\n }\n }\n }\n\n async parseGetObjectCommandOutputAsJson<T>(\n getObjectCommandOutput: GetObjectCommandOutput,\n ): Promise<T | undefined> {\n const { Readable } = await import('stream')\n if (getObjectCommandOutput.Body instanceof Readable) {\n const consumers = await import('stream/consumers')\n return (await consumers.json(getObjectCommandOutput.Body)) as T\n }\n }\n\n determineUploadQueueSize() {\n return 10\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
- import { OneBlinkNodeJsHandler } from './NodeJsHandler';
2
- import { OneBlinkFetchHandler } from './FetchHandler';
1
+ import { OneBlinkNodeJsHandler } from './NodeJsHandler.js';
2
+ import { OneBlinkFetchHandler } from './FetchHandler.js';
3
3
  export declare function getOneBlinkHttpHandler(): OneBlinkNodeJsHandler | OneBlinkFetchHandler;
@@ -1,17 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOneBlinkHttpHandler = void 0;
4
- const browser_or_node_1 = require("browser-or-node");
5
- const NodeJsHandler_1 = require("./NodeJsHandler");
6
- const FetchHandler_1 = require("./FetchHandler");
7
- function getOneBlinkHttpHandler() {
8
- if (browser_or_node_1.isBrowser) {
9
- return new FetchHandler_1.OneBlinkFetchHandler();
1
+ import { isBrowser, isNode } from 'browser-or-node';
2
+ import { OneBlinkNodeJsHandler } from './NodeJsHandler.js';
3
+ import { OneBlinkFetchHandler } from './FetchHandler.js';
4
+ export function getOneBlinkHttpHandler() {
5
+ if (isBrowser) {
6
+ return new OneBlinkFetchHandler();
10
7
  }
11
- if (browser_or_node_1.isNode) {
12
- return new NodeJsHandler_1.OneBlinkNodeJsHandler();
8
+ if (isNode) {
9
+ return new OneBlinkNodeJsHandler();
13
10
  }
14
11
  throw new Error('Could not find http handler matching current environment');
15
12
  }
16
- exports.getOneBlinkHttpHandler = getOneBlinkHttpHandler;
17
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http-handlers/index.ts"],"names":[],"mappings":";;;AAAA,qDAAmD;AACnD,mDAAuD;AACvD,iDAAqD;AAErD,SAAgB,sBAAsB;IACpC,IAAI,2BAAS,EAAE,CAAC;QACd,OAAO,IAAI,mCAAoB,EAAE,CAAA;IACnC,CAAC;IACD,IAAI,wBAAM,EAAE,CAAC;QACX,OAAO,IAAI,qCAAqB,EAAE,CAAA;IACpC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;AAC7E,CAAC;AATD,wDASC","sourcesContent":["import { isBrowser, isNode } from 'browser-or-node'\nimport { OneBlinkNodeJsHandler } from './NodeJsHandler'\nimport { OneBlinkFetchHandler } from './FetchHandler'\n\nexport function getOneBlinkHttpHandler() {\n if (isBrowser) {\n return new OneBlinkFetchHandler()\n }\n if (isNode) {\n return new OneBlinkNodeJsHandler()\n }\n\n throw new Error('Could not find http handler matching current environment')\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAExD,MAAM,UAAU,sBAAsB;IACpC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,oBAAoB,EAAE,CAAA;IACnC,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,qBAAqB,EAAE,CAAA;IACpC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;AAC7E,CAAC","sourcesContent":["import { isBrowser, isNode } from 'browser-or-node'\nimport { OneBlinkNodeJsHandler } from './NodeJsHandler.js'\nimport { OneBlinkFetchHandler } from './FetchHandler.js'\n\nexport function getOneBlinkHttpHandler() {\n if (isBrowser) {\n return new OneBlinkFetchHandler()\n }\n if (isNode) {\n return new OneBlinkNodeJsHandler()\n }\n\n throw new Error('Could not find http handler matching current environment')\n}\n"]}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=types.js.map
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { default as OneBlinkStorageError } from './OneBlinkStorageError';
2
- export { default as OneBlinkUploader } from './OneBlinkUploader';
3
- export { default as OneBlinkDownloader } from './OneBlinkDownloader';
4
- export * from './types';
1
+ export { default as OneBlinkStorageError } from './OneBlinkStorageError.js';
2
+ export { default as OneBlinkUploader } from './OneBlinkUploader.js';
3
+ export { default as OneBlinkDownloader } from './OneBlinkDownloader.js';
4
+ export * from './types.js';
package/dist/index.js CHANGED
@@ -1,28 +1,5 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.OneBlinkDownloader = exports.OneBlinkUploader = exports.OneBlinkStorageError = void 0;
21
- var OneBlinkStorageError_1 = require("./OneBlinkStorageError");
22
- Object.defineProperty(exports, "OneBlinkStorageError", { enumerable: true, get: function () { return __importDefault(OneBlinkStorageError_1).default; } });
23
- var OneBlinkUploader_1 = require("./OneBlinkUploader");
24
- Object.defineProperty(exports, "OneBlinkUploader", { enumerable: true, get: function () { return __importDefault(OneBlinkUploader_1).default; } });
25
- var OneBlinkDownloader_1 = require("./OneBlinkDownloader");
26
- Object.defineProperty(exports, "OneBlinkDownloader", { enumerable: true, get: function () { return __importDefault(OneBlinkDownloader_1).default; } });
27
- __exportStar(require("./types"), exports);
1
+ export { default as OneBlinkStorageError } from './OneBlinkStorageError.js';
2
+ export { default as OneBlinkUploader } from './OneBlinkUploader.js';
3
+ export { default as OneBlinkDownloader } from './OneBlinkDownloader.js';
4
+ export * from './types.js';
28
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,+DAAwE;AAA/D,6IAAA,OAAO,OAAwB;AACxC,uDAAgE;AAAvD,qIAAA,OAAO,OAAoB;AACpC,2DAAoE;AAA3D,yIAAA,OAAO,OAAsB;AACtC,0CAAuB","sourcesContent":["export { default as OneBlinkStorageError } from './OneBlinkStorageError'\nexport { default as OneBlinkUploader } from './OneBlinkUploader'\nexport { default as OneBlinkDownloader } from './OneBlinkDownloader'\nexport * from './types'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACvE,cAAc,YAAY,CAAA","sourcesContent":["export { default as OneBlinkStorageError } from './OneBlinkStorageError.js'\nexport { default as OneBlinkUploader } from './OneBlinkUploader.js'\nexport { default as OneBlinkDownloader } from './OneBlinkDownloader.js'\nexport * from './types.js'\n"]}
package/dist/typedoc.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './index';
1
+ export * from './index.js';
2
2
  export * from '@oneblink/types';
package/dist/typedoc.js CHANGED
@@ -1,19 +1,3 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./index"), exports);
18
- __exportStar(require("@oneblink/types"), exports);
1
+ export * from './index.js';
2
+ export * from '@oneblink/types';
19
3
  //# sourceMappingURL=typedoc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typedoc.js","sourceRoot":"","sources":["../src/typedoc.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,kDAA+B","sourcesContent":["export * from './index'\nexport * from '@oneblink/types'\n"]}
1
+ {"version":3,"file":"typedoc.js","sourceRoot":"","sources":["../src/typedoc.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA","sourcesContent":["export * from './index.js'\nexport * from '@oneblink/types'\n"]}
package/dist/types.js CHANGED
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=types.js.map
@@ -1,7 +1,7 @@
1
1
  import { PutObjectCommandInput } from '@aws-sdk/client-s3';
2
2
  import { Progress } from '@aws-sdk/lib-storage';
3
- import { StorageConstructorOptions, UploadOptions } from './types';
4
- import { RequestBodyHeader } from './http-handlers/types';
3
+ import { StorageConstructorOptions, UploadOptions } from './types.js';
4
+ import { RequestBodyHeader } from './http-handlers/types.js';
5
5
  /** The properties to be passed to the uploadToS3 function */
6
6
  interface UploadToS3Props extends UploadOptions, StorageConstructorOptions {
7
7
  /** The key of the file that is being uploaded. */
@@ -20,6 +20,6 @@ interface UploadToS3Props extends UploadOptions, StorageConstructorOptions {
20
20
  /** Set to `true` to make the upload available to download publicly */
21
21
  isPublic?: boolean;
22
22
  }
23
- declare function uploadToS3<T>({ key, body, tags, onProgress, abortSignal, contentType, isPublic, ...storageConstructorOptions }: UploadToS3Props): Promise<import("./http-handlers/types").OneBlinkResponse<T>>;
23
+ declare function uploadToS3<T>({ key, body, tags, onProgress, abortSignal, contentType, isPublic, ...storageConstructorOptions }: UploadToS3Props): Promise<import("./http-handlers/types.js").OneBlinkResponse<T>>;
24
24
  export default uploadToS3;
25
- export declare const determineUploadProgressAsPercentage: (progress: Required<Pick<Progress, 'total'>> & Omit<Progress, 'total'>) => number;
25
+ export declare const determineUploadProgressAsPercentage: (progress: Required<Pick<Progress, "total">> & Omit<Progress, "total">) => number;
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.determineUploadProgressAsPercentage = void 0;
4
- const lib_storage_1 = require("@aws-sdk/lib-storage");
5
- const generateS3Client_1 = require("./generateS3Client");
1
+ import { Upload } from '@aws-sdk/lib-storage';
2
+ import { generateS3Client } from './generateS3Client.js';
6
3
  async function uploadToS3({ key, body, tags = new URLSearchParams(), onProgress, abortSignal, contentType, isPublic, ...storageConstructorOptions }) {
7
- const { s3Client, bucket, oneBlinkRequestHandler } = (0, generateS3Client_1.generateS3Client)(storageConstructorOptions);
4
+ const { s3Client, bucket, oneBlinkRequestHandler } = generateS3Client(storageConstructorOptions);
8
5
  if (isPublic) {
9
6
  tags.append('public-read', 'yes');
10
7
  }
11
- const managedUpload = new lib_storage_1.Upload({
8
+ const managedUpload = new Upload({
12
9
  client: s3Client,
13
10
  partSize: 5 * 1024 * 1024,
14
11
  queueSize: oneBlinkRequestHandler.oneBlinkHttpHandler.determineUploadQueueSize(),
@@ -27,14 +24,14 @@ async function uploadToS3({ key, body, tags = new URLSearchParams(), onProgress,
27
24
  });
28
25
  managedUpload.on('httpUploadProgress', (progress) => {
29
26
  if (onProgress && progress.total) {
30
- const percent = (0, exports.determineUploadProgressAsPercentage)({
27
+ const percent = determineUploadProgressAsPercentage({
31
28
  ...progress,
32
29
  total: progress.total,
33
30
  });
34
31
  onProgress({ progress: percent, total: 100 });
35
32
  }
36
33
  });
37
- abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', () => {
34
+ abortSignal?.addEventListener('abort', () => {
38
35
  managedUpload.abort();
39
36
  });
40
37
  await oneBlinkRequestHandler.sendS3Command(async () => await managedUpload.done());
@@ -43,10 +40,9 @@ async function uploadToS3({ key, body, tags = new URLSearchParams(), onProgress,
43
40
  }
44
41
  return oneBlinkRequestHandler.oneblinkResponse;
45
42
  }
46
- exports.default = uploadToS3;
47
- const determineUploadProgressAsPercentage = (progress) => {
43
+ export default uploadToS3;
44
+ export const determineUploadProgressAsPercentage = (progress) => {
48
45
  const percent = ((progress.loaded || 0) / progress.total) * 100;
49
46
  return Math.floor(percent);
50
47
  };
51
- exports.determineUploadProgressAsPercentage = determineUploadProgressAsPercentage;
52
48
  //# sourceMappingURL=uploadToS3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploadToS3.js","sourceRoot":"","sources":["../src/uploadToS3.ts"],"names":[],"mappings":";;;AACA,sDAAuD;AAGvD,yDAAqD;AAqBrD,KAAK,UAAU,UAAU,CAAI,EAC3B,GAAG,EACH,IAAI,EACJ,IAAI,GAAG,IAAI,eAAe,EAAE,EAC5B,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,GAAG,yBAAyB,EACZ;IAChB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAA,mCAAgB,EACnE,yBAAyB,CAC1B,CAAA;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,oBAAM,CAAC;QAC/B,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;QACzB,SAAS,EACP,sBAAsB,CAAC,mBAAmB,CAAC,wBAAwB,EAAE;QACvE,yEAAyE;QACzE,yEAAyE;QACzE,qEAAqE;QACrE,gFAAgF;QAChF,iBAAiB,EAAE,IAAI;QACvB,MAAM,EAAE;YACN,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE;SACzB;KACF,CAAC,CAAA;IAEF,aAAa,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAClD,IAAI,UAAU,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAA,2CAAmC,EAAC;gBAClD,GAAG,QAAQ;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAA;YACF,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAC1C,aAAa,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,MAAM,sBAAsB,CAAC,aAAa,CACxC,KAAK,IAAI,EAAE,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CACvC,CAAA;IAED,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAA;IACH,CAAC;IACD,OAAO,sBAAsB,CAAC,gBAAgB,CAAA;AAChD,CAAC;AAED,kBAAe,UAAU,CAAA;AAElB,MAAM,mCAAmC,GAAG,CACjD,QAAqE,EACrE,EAAE;IACF,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC,CAAA;AALY,QAAA,mCAAmC,uCAK/C","sourcesContent":["import { PutObjectCommandInput } from '@aws-sdk/client-s3'\nimport { Upload, Progress } from '@aws-sdk/lib-storage'\nimport { StorageConstructorOptions, UploadOptions } from './types'\nimport { RequestBodyHeader } from './http-handlers/types'\nimport { generateS3Client } from './generateS3Client'\n\n/** The properties to be passed to the uploadToS3 function */\ninterface UploadToS3Props extends UploadOptions, StorageConstructorOptions {\n /** The key of the file that is being uploaded. */\n key: string\n /**\n * The body of the request. This can be a string, a Buffer, a Blob, a\n * ReadableStream, or a Readable.\n */\n body: PutObjectCommandInput['Body']\n /** Optional header to be included in the request to the OneBlink API */\n requestBodyHeader?: RequestBodyHeader\n /** An optional set of tags that will be applied to the uploaded file */\n tags?: URLSearchParams\n /** A standard MIME type describing the format of the contents */\n contentType: PutObjectCommandInput['ContentType']\n /** Set to `true` to make the upload available to download publicly */\n isPublic?: boolean\n}\n\nasync function uploadToS3<T>({\n key,\n body,\n tags = new URLSearchParams(),\n onProgress,\n abortSignal,\n contentType,\n isPublic,\n ...storageConstructorOptions\n}: UploadToS3Props) {\n const { s3Client, bucket, oneBlinkRequestHandler } = generateS3Client<T>(\n storageConstructorOptions,\n )\n\n if (isPublic) {\n tags.append('public-read', 'yes')\n }\n\n const managedUpload = new Upload({\n client: s3Client,\n partSize: 5 * 1024 * 1024,\n queueSize:\n oneBlinkRequestHandler.oneBlinkHttpHandler.determineUploadQueueSize(),\n // Related github issue: https://github.com/aws/aws-sdk-js-v3/issues/2311\n // This is a variable that is set to false by default, setting it to true\n // means that it will force the upload to fail when one part fails on\n // an upload. The S3 client has built in retry logic to retry uploads by default\n leavePartsOnError: true,\n params: {\n Bucket: bucket,\n Key: key,\n Body: body,\n ContentType: contentType,\n Tagging: tags.toString(),\n },\n })\n\n managedUpload.on('httpUploadProgress', (progress) => {\n if (onProgress && progress.total) {\n const percent = determineUploadProgressAsPercentage({\n ...progress,\n total: progress.total,\n })\n onProgress({ progress: percent, total: 100 })\n }\n })\n\n abortSignal?.addEventListener('abort', () => {\n managedUpload.abort()\n })\n\n await oneBlinkRequestHandler.sendS3Command(\n async () => await managedUpload.done(),\n )\n\n if (!oneBlinkRequestHandler.oneblinkResponse) {\n throw new Error(\n 'No response from server. Something went wrong in \"@oneblink/storage\".',\n )\n }\n return oneBlinkRequestHandler.oneblinkResponse\n}\n\nexport default uploadToS3\n\nexport const determineUploadProgressAsPercentage = (\n progress: Required<Pick<Progress, 'total'>> & Omit<Progress, 'total'>,\n) => {\n const percent = ((progress.loaded || 0) / progress.total) * 100\n return Math.floor(percent)\n}\n"]}
1
+ {"version":3,"file":"uploadToS3.js","sourceRoot":"","sources":["../src/uploadToS3.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAqBxD,KAAK,UAAU,UAAU,CAAI,EAC3B,GAAG,EACH,IAAI,EACJ,IAAI,GAAG,IAAI,eAAe,EAAE,EAC5B,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,GAAG,yBAAyB,EACZ;IAChB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,gBAAgB,CACnE,yBAAyB,CAC1B,CAAA;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC;QAC/B,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;QACzB,SAAS,EACP,sBAAsB,CAAC,mBAAmB,CAAC,wBAAwB,EAAE;QACvE,yEAAyE;QACzE,yEAAyE;QACzE,qEAAqE;QACrE,gFAAgF;QAChF,iBAAiB,EAAE,IAAI;QACvB,MAAM,EAAE;YACN,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE;SACzB;KACF,CAAC,CAAA;IAEF,aAAa,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAClD,IAAI,UAAU,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,mCAAmC,CAAC;gBAClD,GAAG,QAAQ;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAA;YACF,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAC1C,aAAa,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,MAAM,sBAAsB,CAAC,aAAa,CACxC,KAAK,IAAI,EAAE,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CACvC,CAAA;IAED,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAA;IACH,CAAC;IACD,OAAO,sBAAsB,CAAC,gBAAgB,CAAA;AAChD,CAAC;AAED,eAAe,UAAU,CAAA;AAEzB,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,QAAqE,EACrE,EAAE;IACF,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC,CAAA","sourcesContent":["import { PutObjectCommandInput } from '@aws-sdk/client-s3'\nimport { Upload, Progress } from '@aws-sdk/lib-storage'\nimport { StorageConstructorOptions, UploadOptions } from './types.js'\nimport { RequestBodyHeader } from './http-handlers/types.js'\nimport { generateS3Client } from './generateS3Client.js'\n\n/** The properties to be passed to the uploadToS3 function */\ninterface UploadToS3Props extends UploadOptions, StorageConstructorOptions {\n /** The key of the file that is being uploaded. */\n key: string\n /**\n * The body of the request. This can be a string, a Buffer, a Blob, a\n * ReadableStream, or a Readable.\n */\n body: PutObjectCommandInput['Body']\n /** Optional header to be included in the request to the OneBlink API */\n requestBodyHeader?: RequestBodyHeader\n /** An optional set of tags that will be applied to the uploaded file */\n tags?: URLSearchParams\n /** A standard MIME type describing the format of the contents */\n contentType: PutObjectCommandInput['ContentType']\n /** Set to `true` to make the upload available to download publicly */\n isPublic?: boolean\n}\n\nasync function uploadToS3<T>({\n key,\n body,\n tags = new URLSearchParams(),\n onProgress,\n abortSignal,\n contentType,\n isPublic,\n ...storageConstructorOptions\n}: UploadToS3Props) {\n const { s3Client, bucket, oneBlinkRequestHandler } = generateS3Client<T>(\n storageConstructorOptions,\n )\n\n if (isPublic) {\n tags.append('public-read', 'yes')\n }\n\n const managedUpload = new Upload({\n client: s3Client,\n partSize: 5 * 1024 * 1024,\n queueSize:\n oneBlinkRequestHandler.oneBlinkHttpHandler.determineUploadQueueSize(),\n // Related github issue: https://github.com/aws/aws-sdk-js-v3/issues/2311\n // This is a variable that is set to false by default, setting it to true\n // means that it will force the upload to fail when one part fails on\n // an upload. The S3 client has built in retry logic to retry uploads by default\n leavePartsOnError: true,\n params: {\n Bucket: bucket,\n Key: key,\n Body: body,\n ContentType: contentType,\n Tagging: tags.toString(),\n },\n })\n\n managedUpload.on('httpUploadProgress', (progress) => {\n if (onProgress && progress.total) {\n const percent = determineUploadProgressAsPercentage({\n ...progress,\n total: progress.total,\n })\n onProgress({ progress: percent, total: 100 })\n }\n })\n\n abortSignal?.addEventListener('abort', () => {\n managedUpload.abort()\n })\n\n await oneBlinkRequestHandler.sendS3Command(\n async () => await managedUpload.done(),\n )\n\n if (!oneBlinkRequestHandler.oneblinkResponse) {\n throw new Error(\n 'No response from server. Something went wrong in \"@oneblink/storage\".',\n )\n }\n return oneBlinkRequestHandler.oneblinkResponse\n}\n\nexport default uploadToS3\n\nexport const determineUploadProgressAsPercentage = (\n progress: Required<Pick<Progress, 'total'>> & Omit<Progress, 'total'>,\n) => {\n const percent = ((progress.loaded || 0) / progress.total) * 100\n return Math.floor(percent)\n}\n"]}
package/package.json CHANGED
@@ -1,42 +1,44 @@
1
1
  {
2
2
  "name": "@oneblink/storage",
3
3
  "description": "SDK for managing storage files in the OneBlink ecosystem",
4
- "version": "3.4.1-beta.1",
4
+ "version": "4.0.0-beta.1",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/storage/issues"
8
8
  },
9
9
  "dependencies": {
10
- "@aws-sdk/client-s3": "3.965.0",
11
- "@aws-sdk/lib-storage": "3.965.0",
10
+ "@aws-sdk/client-s3": "3.969.0",
11
+ "@aws-sdk/lib-storage": "3.969.0",
12
12
  "browser-or-node": "^3.0.0"
13
13
  },
14
14
  "devDependencies": {
15
- "@microsoft/eslint-plugin-sdl": "^0.2.2",
15
+ "@eslint/eslintrc": "^3.3.3",
16
+ "@eslint/js": "^9.39.2",
17
+ "@microsoft/eslint-plugin-sdl": "^1.1.0",
16
18
  "@oneblink/release-cli": "^3.4.0",
17
19
  "@oneblink/types": "github:oneblink/types",
18
- "@types/jest": "^29.5.12",
19
- "@typescript-eslint/eslint-plugin": "^7.8.0",
20
- "@typescript-eslint/parser": "^7.8.0",
21
- "eslint": "^8.57.0",
22
- "eslint-config-prettier": "^9.1.0",
23
- "eslint-plugin-prettier": "^5.1.3",
20
+ "@types/node": "^24.10.8",
21
+ "@typescript-eslint/eslint-plugin": "^8.53.0",
22
+ "@typescript-eslint/parser": "^8.53.0",
23
+ "eslint": "^9.39.2",
24
+ "eslint-config-prettier": "^10.1.8",
25
+ "eslint-plugin-prettier": "^5.5.5",
24
26
  "fixpack": "^4.0.0",
25
- "jest": "^29.7.0",
26
- "jest-environment-jsdom": "^29.7.0",
27
- "prettier": "^3.2.5",
28
- "prettier-plugin-jsdoc": "^1.3.0",
29
- "ts-jest": "^29.1.2",
30
- "tsc-watch": "^6.2.0",
31
- "typedoc": "^0.25.13",
32
- "typescript": "^5.4.5"
27
+ "globals": "^17.0.0",
28
+ "jsdom": "^27.4.0",
29
+ "prettier": "^3.8.0",
30
+ "prettier-plugin-jsdoc": "^1.8.0",
31
+ "tsc-watch": "^7.2.0",
32
+ "typedoc": "^0.28.16",
33
+ "typescript": "^5.9.3",
34
+ "vitest": "^4.0.17"
33
35
  },
34
36
  "directories": {
35
37
  "doc": "docs"
36
38
  },
37
39
  "engines": {
38
- "node": ">=20",
39
- "npm": ">=10"
40
+ "node": ">=24",
41
+ "npm": ">=11"
40
42
  },
41
43
  "files": [
42
44
  "dist"
@@ -55,16 +57,17 @@
55
57
  "scripts": {
56
58
  "build": "tsc",
57
59
  "docs": "typedoc",
58
- "eslint": "eslint src/**/*.ts --fix --cache",
60
+ "eslint": "eslint --fix --cache .",
59
61
  "fixpack": "fixpack",
60
62
  "format": "prettier --write .",
61
63
  "prepare": "npm run build",
62
64
  "pretest": "npm run fixpack && npm run eslint && npm run typescript",
63
65
  "release": "oneblink-release repository --no-name",
64
66
  "start": "tsc-watch",
65
- "test": "jest",
67
+ "test": "vitest run",
66
68
  "types": "npm i -D github:oneblink/types",
67
69
  "typescript": "tsc --noEmit",
68
70
  "update-dependents": "oneblink-release update-dependents --force"
69
- }
71
+ },
72
+ "type": "module"
70
73
  }