@dimah-s3/server 1.4.0 → 1.4.2

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.
@@ -12,8 +12,8 @@ export type FinalizeConfirmedInput = {
12
12
  };
13
13
  /**
14
14
  * HeadObject constraints, `onConfirmed`, then compensating `DeleteObject`
15
- * (and `previousKey` cleanup) so a thrown lifecycle hook cannot leave an
16
- * orphan object.
15
+ * (and `previousKey` cleanup) so a thrown check or lifecycle hook cannot
16
+ * leave an orphan object.
17
17
  */
18
18
  export declare function finalizeConfirmedObject(client: S3Client, bucket: string, key: string, input: FinalizeConfirmedInput): Promise<ConfirmedObjectResponse>;
19
19
  //# sourceMappingURL=finalize-confirmed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finalize-confirmed.d.ts","sourceRoot":"","sources":["../../src/helpers/finalize-confirmed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAU5E,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;IAC3C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA4DlC"}
1
+ {"version":3,"file":"finalize-confirmed.d.ts","sourceRoot":"","sources":["../../src/helpers/finalize-confirmed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAU5E,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;IAC3C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAwDlC"}
package/dist/index.js CHANGED
@@ -516,33 +516,29 @@ function listedPartsByteSize(parts, excludePartNumber) {
516
516
  }
517
517
  async function finalizeConfirmedObject(client, bucket, key, input) {
518
518
  const { config, route: route2, stored, head, uploadId, acl } = input;
519
- const contentLength = requireContentLength(head);
520
- const fileName = resolveStoredFileName(head.ContentDisposition, key);
521
519
  const rawMetadata = head.Metadata ?? {};
520
+ const fileName = resolveStoredFileName(head.ContentDisposition, key);
521
+ let context;
522
522
  try {
523
+ const contentLength = requireContentLength(head);
523
524
  assertVerifiedConstraints(route2.upload, {
524
525
  fileName,
525
526
  contentType: head.ContentType,
526
527
  contentLength
527
528
  });
528
- } catch (err) {
529
- await deleteObjectBestEffort(client, bucket, key);
530
- throw err;
531
- }
532
- const metadata = stripPreviousKeyMeta(rawMetadata);
533
- const context = {
534
- ...stored,
535
- contentType: head.ContentType,
536
- contentLength,
537
- eTag: head.ETag?.replace(/"/g, ""),
538
- metadata,
539
- acl,
540
- fileName,
541
- versionId: head.VersionId,
542
- lastModified: head.LastModified?.toISOString(),
543
- uploadId
544
- };
545
- try {
529
+ const metadata = stripPreviousKeyMeta(rawMetadata);
530
+ context = {
531
+ ...stored,
532
+ contentType: head.ContentType,
533
+ contentLength,
534
+ eTag: head.ETag?.replace(/"/g, ""),
535
+ metadata,
536
+ acl,
537
+ fileName,
538
+ versionId: head.VersionId,
539
+ lastModified: head.LastModified?.toISOString(),
540
+ uploadId
541
+ };
546
542
  await runLifecycleHook(route2.upload.onConfirmed, context, config);
547
543
  } catch (err) {
548
544
  await deleteObjectBestEffort(client, bucket, key);
@@ -1084,23 +1080,39 @@ async function handleMultipartInit(config, input, request) {
1084
1080
  if (!UploadId) {
1085
1081
  throw errors.internalError();
1086
1082
  }
1087
- await runLifecycleHook(
1088
- route2.upload.multipart.onInit,
1089
- {
1090
- ...stored,
1091
- uploadId: UploadId,
1092
- file: {
1093
- name: fileName,
1094
- size: fileSize,
1095
- type: input.contentType
1083
+ try {
1084
+ await runLifecycleHook(
1085
+ route2.upload.multipart.onInit,
1086
+ {
1087
+ ...stored,
1088
+ uploadId: UploadId,
1089
+ file: {
1090
+ name: fileName,
1091
+ size: fileSize,
1092
+ type: input.contentType
1093
+ },
1094
+ metadata,
1095
+ clientMetadata: input.metadata,
1096
+ acl,
1097
+ replace: route2.upload.replace
1096
1098
  },
1097
- metadata,
1098
- clientMetadata: input.metadata,
1099
- acl,
1100
- replace: route2.upload.replace
1101
- },
1102
- config
1103
- );
1099
+ config
1100
+ );
1101
+ } catch (err) {
1102
+ await abortMultipartBestEffort(route2.client, bucket, key, UploadId);
1103
+ try {
1104
+ await runLifecycleHook(
1105
+ route2.upload.multipart.onAbort,
1106
+ {
1107
+ ...stored,
1108
+ uploadId: UploadId
1109
+ },
1110
+ config
1111
+ );
1112
+ } catch {
1113
+ }
1114
+ throw err;
1115
+ }
1104
1116
  return { bucket, key, uploadId: UploadId };
1105
1117
  }
1106
1118
  var multipartInit = createS3Endpoint(