@dimah-s3/server 1.0.2 → 1.1.0
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.
- package/README.md +7 -3
- package/dist/adapters/express.js +16 -9
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/fastify.js +16 -9
- package/dist/adapters/fastify.js.map +1 -1
- package/dist/adapters/hono.d.ts +1 -1
- package/dist/adapters/hono.js.map +1 -1
- package/dist/adapters/node.d.ts +1 -1
- package/dist/adapters/node.js +16 -9
- package/dist/adapters/node.js.map +1 -1
- package/dist/api/index.js +742 -388
- package/dist/api/index.js.map +1 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/routes/catalog.d.ts +9 -0
- package/dist/api/routes/catalog.d.ts.map +1 -0
- package/dist/api/routes/confirm.d.ts +3 -4
- package/dist/api/routes/confirm.d.ts.map +1 -1
- package/dist/api/routes/delete-batch.d.ts +14 -0
- package/dist/api/routes/delete-batch.d.ts.map +1 -0
- package/dist/api/routes/delete.d.ts +2 -2
- package/dist/api/routes/delete.d.ts.map +1 -1
- package/dist/api/routes/download.d.ts +8 -8
- package/dist/api/routes/download.d.ts.map +1 -1
- package/dist/api/routes/file.d.ts +20 -0
- package/dist/api/routes/file.d.ts.map +1 -0
- package/dist/api/routes/index.d.ts +76 -50
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/multipart/abort.d.ts +2 -2
- package/dist/api/routes/multipart/abort.d.ts.map +1 -1
- package/dist/api/routes/multipart/complete.d.ts +2 -2
- package/dist/api/routes/multipart/complete.d.ts.map +1 -1
- package/dist/api/routes/multipart/init.d.ts +10 -12
- package/dist/api/routes/multipart/init.d.ts.map +1 -1
- package/dist/api/routes/multipart/list-parts.d.ts +2 -2
- package/dist/api/routes/multipart/list-parts.d.ts.map +1 -1
- package/dist/api/routes/multipart/part.d.ts +4 -6
- package/dist/api/routes/multipart/part.d.ts.map +1 -1
- package/dist/api/routes/upload.d.ts +10 -14
- package/dist/api/routes/upload.d.ts.map +1 -1
- package/dist/dimah-s3.d.ts +19 -8
- package/dist/dimah-s3.d.ts.map +1 -1
- package/dist/errors.d.ts +5 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/helpers/best-effort.d.ts +6 -0
- package/dist/helpers/best-effort.d.ts.map +1 -0
- package/dist/helpers/constraints.d.ts +16 -0
- package/dist/helpers/constraints.d.ts.map +1 -0
- package/dist/helpers/expires.d.ts +2 -2
- package/dist/helpers/features.d.ts +12 -29
- package/dist/helpers/features.d.ts.map +1 -1
- package/dist/helpers/finalize-confirmed.d.ts +19 -0
- package/dist/helpers/finalize-confirmed.d.ts.map +1 -0
- package/dist/helpers/head-object.d.ts.map +1 -1
- package/dist/helpers/hooks.d.ts +7 -1
- package/dist/helpers/hooks.d.ts.map +1 -1
- package/dist/helpers/index.d.ts +12 -9
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/list-parts.d.ts +5 -0
- package/dist/helpers/list-parts.d.ts.map +1 -1
- package/dist/helpers/logger.d.ts +4 -0
- package/dist/helpers/logger.d.ts.map +1 -0
- package/dist/helpers/previous-key.d.ts +5 -0
- package/dist/helpers/previous-key.d.ts.map +1 -0
- package/dist/helpers/resolve-route.d.ts +36 -0
- package/dist/helpers/resolve-route.d.ts.map +1 -0
- package/dist/helpers/resolve-target.d.ts +25 -14
- package/dist/helpers/resolve-target.d.ts.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1017 -477
- package/dist/index.js.map +1 -1
- package/dist/plugin/apply-plugins.d.ts +9 -4
- package/dist/plugin/apply-plugins.d.ts.map +1 -1
- package/dist/plugin/hook-registry.d.ts +13 -4
- package/dist/plugin/hook-registry.d.ts.map +1 -1
- package/dist/plugin/index.d.ts +1 -2
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/types.d.ts +12 -7
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugins.d.ts +5 -3
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +951 -475
- package/dist/plugins.js.map +1 -1
- package/dist/put.d.ts +15 -0
- package/dist/put.d.ts.map +1 -0
- package/dist/route.d.ts +13 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/types/config.d.ts +190 -95
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/hook-contexts.d.ts +124 -87
- package/dist/types/hook-contexts.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +11 -11
- package/dist/api/assert-feature-enabled.d.ts +0 -5
- package/dist/api/assert-feature-enabled.d.ts.map +0 -1
- package/dist/helpers/resolve-object-acl.d.ts +0 -10
- package/dist/helpers/resolve-object-acl.d.ts.map +0 -1
- package/dist/helpers/resolve-request-acl.d.ts +0 -10
- package/dist/helpers/resolve-request-acl.d.ts.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ConfirmedObjectResponse, S3ObjectAcl } from "@dimah-s3/core";
|
|
2
|
+
import type { HeadObjectCommandOutput, S3Client } from "@aws-sdk/client-s3";
|
|
3
|
+
import type { OpenedRoute, ResolvedDimahS3Config, StoredObjectContext } from "../types";
|
|
4
|
+
export type FinalizeConfirmedInput = {
|
|
5
|
+
config: ResolvedDimahS3Config;
|
|
6
|
+
route: OpenedRoute<"upload" | "multipart">;
|
|
7
|
+
stored: StoredObjectContext;
|
|
8
|
+
head: HeadObjectCommandOutput;
|
|
9
|
+
uploadId?: string;
|
|
10
|
+
/** ACL from the upload policy, not GetObjectAcl. */
|
|
11
|
+
acl?: S3ObjectAcl;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* HeadObject constraints, `onConfirmed`, then compensating `DeleteObject`
|
|
15
|
+
* (and `previousKey` cleanup) so a thrown lifecycle hook cannot leave an
|
|
16
|
+
* orphan object.
|
|
17
|
+
*/
|
|
18
|
+
export declare function finalizeConfirmedObject(client: S3Client, bucket: string, key: string, input: FinalizeConfirmedInput): Promise<ConfirmedObjectResponse>;
|
|
19
|
+
//# sourceMappingURL=finalize-confirmed.d.ts.map
|
|
@@ -0,0 +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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"head-object.d.ts","sourceRoot":"","sources":["../../src/helpers/head-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAI5B,+DAA+D;AAC/D,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,uBAAuB,CAAC,CAIlC;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"head-object.d.ts","sourceRoot":"","sources":["../../src/helpers/head-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAI5B,+DAA+D;AAC/D,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,uBAAuB,CAAC,CAIlC;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,uBAAuB,CAAC,CAgBlC;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,CAK1E"}
|
package/dist/helpers/hooks.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ResolvedDimahS3Config, UploadConfig, UploadObjectContext, UploadObjectInfo } from "../types";
|
|
1
2
|
/**
|
|
2
3
|
* Run a guard hook. {@link isAPIError} values are preserved; plain Errors keep
|
|
3
4
|
* their English message without a library `code` so client
|
|
@@ -6,11 +7,16 @@
|
|
|
6
7
|
export declare function runHook<T extends {
|
|
7
8
|
request: Request;
|
|
8
9
|
}>(hook: ((context: T) => Promise<void> | void) | undefined, context: T): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Run `upload.object`. Same rejection mapping as {@link runHook}
|
|
12
|
+
* (plain `Error` → 403) so auth throws in `object` match `guard`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function runObjectHook(hook: UploadConfig["object"], context: UploadObjectContext): Promise<UploadObjectInfo | void>;
|
|
9
15
|
/**
|
|
10
16
|
* Run a lifecycle `on*` hook. Failures become {@link errors.internalError}
|
|
11
17
|
* (or preserve an existing APIError).
|
|
12
18
|
*/
|
|
13
19
|
export declare function runLifecycleHook<T extends {
|
|
14
20
|
request: Request;
|
|
15
|
-
}>(hook: ((context: T) => Promise<void> | void) | undefined, context: T): Promise<void>;
|
|
21
|
+
}>(hook: ((context: T) => Promise<void> | void) | undefined, context: T, config?: Pick<ResolvedDimahS3Config, "logger" | "onError">): Promise<void>;
|
|
16
22
|
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/helpers/hooks.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAC1D,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EACxD,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/helpers/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAajB;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAC1D,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EACxD,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAOlC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EACnE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EACxD,OAAO,EAAE,CAAC,EACV,MAAM,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,SAAS,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
package/dist/helpers/index.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
export { abortMultipartBestEffort, deleteObjectBestEffort, } from "./best-effort";
|
|
1
2
|
export { isAwsNotFound, sendOrObjectNotFound } from "./is-aws-not-found";
|
|
2
|
-
export { resolveObjectAcl } from "./resolve-object-acl";
|
|
3
|
-
export { resolveRequestAcl } from "./resolve-request-acl";
|
|
4
|
-
export type { AclPolicy } from "./resolve-request-acl";
|
|
5
3
|
export { normalizeExpiresIn } from "./expires";
|
|
6
|
-
export { runHook, runLifecycleHook } from "./hooks";
|
|
4
|
+
export { runHook, runLifecycleHook, runObjectHook } from "./hooks";
|
|
5
|
+
export { isEnabled, isFeatureOn, normalizeFeature, normalizeRoute, normalizeRoutes, } from "./features";
|
|
7
6
|
export { requestFromHeaders } from "./request";
|
|
8
|
-
export { assertSafeObjectKey,
|
|
9
|
-
export type {
|
|
7
|
+
export { assertSafeObjectKey, assertStoredKey, generateObjectKey, nestKeyUnderPrefix, normalizeObjectKey, resolveStoredTarget, resolveUploadTarget, } from "./resolve-target";
|
|
8
|
+
export type { ResolvedObject } from "./resolve-target";
|
|
9
|
+
export { assertFeatureEnabled, getResolvedRoute, openRoute, openStoredTarget, openUploadTarget, storedObjectContext, } from "./resolve-route";
|
|
10
|
+
export type { OpenedTarget, OpenedUploadTarget, OpenUploadInput, } from "./resolve-route";
|
|
11
|
+
export { assertDeclaredConstraints, assertVerifiedConstraints, assertWithinMaxFileSize, } from "./constraints";
|
|
10
12
|
export { headObjectAfterMultipartComplete, headObjectOrNotFound, requireContentLength, } from "./head-object";
|
|
11
|
-
export { listAllParts } from "./list-parts";
|
|
12
|
-
export {
|
|
13
|
-
export
|
|
13
|
+
export { listAllParts, listedPartsByteSize } from "./list-parts";
|
|
14
|
+
export { resolveLogger, defaultLogger } from "./logger";
|
|
15
|
+
export { finalizeConfirmedObject } from "./finalize-confirmed";
|
|
16
|
+
export { DIMAH_PREVIOUS_KEY_META, previousKeyFromMetadata, stripPreviousKeyMeta, } from "./previous-key";
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EACL,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gCAAgC,EAChC,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
|
|
@@ -5,4 +5,9 @@ export declare function listAllParts(client: S3Client, input: {
|
|
|
5
5
|
key: string;
|
|
6
6
|
uploadId: string;
|
|
7
7
|
}): Promise<Part[]>;
|
|
8
|
+
/** Sum `Size` on listed parts. Pass `excludePartNumber` when replacing a part. */
|
|
9
|
+
export declare function listedPartsByteSize(parts: readonly {
|
|
10
|
+
PartNumber?: number;
|
|
11
|
+
Size?: number;
|
|
12
|
+
}[], excludePartNumber?: number): number;
|
|
8
13
|
//# sourceMappingURL=list-parts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-parts.d.ts","sourceRoot":"","sources":["../../src/helpers/list-parts.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"list-parts.d.ts","sourceRoot":"","sources":["../../src/helpers/list-parts.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAG5B,6DAA6D;AAC7D,wBAAsB,YAAY,CAChC,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC,IAAI,EAAE,CAAC,CAsBjB;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACxD,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAYR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,aAO3B,CAAC;AAEF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,GAAG,KAAK,GAAG,SAAS,GACxC,aAAa,CAIf"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** S3 user-metadata key for `upload.object().previousKey`. */
|
|
2
|
+
export declare const DIMAH_PREVIOUS_KEY_META = "dimah-previous-key";
|
|
3
|
+
export declare function stripPreviousKeyMeta(metadata: Record<string, string> | undefined): Record<string, string>;
|
|
4
|
+
export declare function previousKeyFromMetadata(metadata: Record<string, string> | undefined): string | undefined;
|
|
5
|
+
//# sourceMappingURL=previous-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previous-key.d.ts","sourceRoot":"","sources":["../../src/helpers/previous-key.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAE5D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC3C,MAAM,GAAG,SAAS,CAGpB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { S3ObjectAcl } from "@dimah-s3/core";
|
|
2
|
+
import type { OpenedRoute, ResolvedDimahS3Config, ResolvedRoute, RouteOperation, StoredObjectContext } from "../types";
|
|
3
|
+
export type OpenedTarget<F extends RouteOperation> = {
|
|
4
|
+
route: OpenedRoute<F>;
|
|
5
|
+
key: string;
|
|
6
|
+
bucket: string;
|
|
7
|
+
stored: StoredObjectContext;
|
|
8
|
+
};
|
|
9
|
+
export type OpenedUploadTarget<F extends "upload" | "multipart"> = OpenedTarget<F> & {
|
|
10
|
+
metadata?: Record<string, string>;
|
|
11
|
+
acl: S3ObjectAcl;
|
|
12
|
+
};
|
|
13
|
+
export type OpenUploadInput = {
|
|
14
|
+
route: string;
|
|
15
|
+
fileName: string;
|
|
16
|
+
fileSize: number;
|
|
17
|
+
contentType?: string;
|
|
18
|
+
metadata?: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
export declare function getResolvedRoute(config: ResolvedDimahS3Config, name: string): ResolvedRoute;
|
|
21
|
+
/** Disabled features respond 404 (`FEATURE_DISABLED`) from both HTTP and `s3.api`. */
|
|
22
|
+
export declare function assertFeatureEnabled<F extends RouteOperation>(route: ResolvedRoute, feature: F): asserts route is OpenedRoute<F>;
|
|
23
|
+
/** Lookup the named route, reject a disabled feature, run the route `guard`. */
|
|
24
|
+
export declare function openRoute<F extends RouteOperation>(config: ResolvedDimahS3Config, name: string, request: Request, feature: F): Promise<OpenedRoute<F>>;
|
|
25
|
+
export declare function storedObjectContext(request: Request, route: Pick<ResolvedRoute, "name" | "bucket">, key: string): StoredObjectContext;
|
|
26
|
+
/**
|
|
27
|
+
* {@link openRoute} plus file constraints and server-owned key generation.
|
|
28
|
+
* Used by upload presign and multipart init.
|
|
29
|
+
*/
|
|
30
|
+
export declare function openUploadTarget<F extends "upload" | "multipart">(config: ResolvedDimahS3Config, input: OpenUploadInput, request: Request, feature: F): Promise<OpenedUploadTarget<F>>;
|
|
31
|
+
/** {@link openRoute} plus the stored-key namespace check. */
|
|
32
|
+
export declare function openStoredTarget<F extends RouteOperation>(config: ResolvedDimahS3Config, input: {
|
|
33
|
+
route: string;
|
|
34
|
+
key: string;
|
|
35
|
+
}, request: Request, feature: F): Promise<OpenedTarget<F>>;
|
|
36
|
+
//# sourceMappingURL=resolve-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-route.d.ts","sourceRoot":"","sources":["../../src/helpers/resolve-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQlD,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,IAAI;IACnD,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,QAAQ,GAAG,WAAW,IAC7D,YAAY,CAAC,CAAC,CAAC,GAAG;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEJ,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,MAAM,GACX,aAAa,CAMf;AAUD,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,cAAc,EAC3D,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAIjC;AAED,gFAAgF;AAChF,wBAAsB,SAAS,CAAC,CAAC,SAAS,cAAc,EACtD,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAKzB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,EAC7C,GAAG,EAAE,MAAM,GACV,mBAAmB,CAErB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,GAAG,WAAW,EACrE,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAwBhC;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,cAAc,EAC7D,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAQ1B"}
|
|
@@ -1,20 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { normalizeObjectKey, type S3ObjectAcl } from "@dimah-s3/core";
|
|
2
|
+
import type { OpenedRoute, ResolvedRoute, UploadObjectContext } from "../types";
|
|
3
|
+
export type ResolvedObject = {
|
|
4
|
+
key: string;
|
|
5
|
+
bucket: string;
|
|
6
|
+
metadata?: Record<string, string>;
|
|
7
|
+
acl: S3ObjectAcl;
|
|
8
|
+
};
|
|
9
|
+
type RouteKeyPrefix = ResolvedRoute["keyPrefix"];
|
|
3
10
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
11
|
+
* Strip leading/trailing slashes and reject `.` / `..` / empty segments,
|
|
12
|
+
* NUL, and backslashes. Returns `null` when the key is unsafe.
|
|
13
|
+
*/
|
|
14
|
+
export { normalizeObjectKey };
|
|
15
|
+
/**
|
|
16
|
+
* Normalize an object key: strip leading slashes, reject `.` / `..` segments,
|
|
17
|
+
* NUL, and backslashes.
|
|
6
18
|
*/
|
|
7
19
|
export declare function assertSafeObjectKey(key: string): string;
|
|
8
|
-
|
|
9
|
-
export declare function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}): Promise<{
|
|
20
|
+
/** Nest `key` under `keyPrefix`. `false` leaves a safe key unchanged. */
|
|
21
|
+
export declare function nestKeyUnderPrefix(keyPrefix: RouteKeyPrefix, key: string): string;
|
|
22
|
+
/** Confirm / download / delete / multipart follow-ups: stored key + namespace. */
|
|
23
|
+
export declare function assertStoredKey(key: string, keyPrefix: RouteKeyPrefix): string;
|
|
24
|
+
/** `{folder}/{uuid}/{sanitizedName}` — omit `folder` (`false`) for `{uuid}/{name}`. */
|
|
25
|
+
export declare function generateObjectKey(folder: string | false, fileName: string): string;
|
|
26
|
+
export declare function resolveUploadTarget(route: OpenedRoute<"upload" | "multipart">, context: Omit<UploadObjectContext, "bucket" | "keyPrefix">): Promise<ResolvedObject>;
|
|
27
|
+
export declare function resolveStoredTarget(route: ResolvedRoute, key: string): {
|
|
17
28
|
key: string;
|
|
18
29
|
bucket: string;
|
|
19
|
-
}
|
|
30
|
+
};
|
|
20
31
|
//# sourceMappingURL=resolve-target.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-target.d.ts","sourceRoot":"","sources":["../../src/helpers/resolve-target.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-target.d.ts","sourceRoot":"","sources":["../../src/helpers/resolve-target.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAElB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,KAAK,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;AAEjD;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIvD;AAUD,yEAAyE;AACzE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,cAAc,EACzB,GAAG,EAAE,MAAM,GACV,MAAM,CAIR;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,cAAc,GACxB,MAAM,CAMR;AAgBD,uFAAuF;AACvF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GAAG,KAAK,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR;AASD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,EAC1C,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,WAAW,CAAC,GACzD,OAAO,CAAC,cAAc,CAAC,CAgCzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,MAAM,GACV;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKjC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
export { dimahS3 } from "./dimah-s3";
|
|
2
|
+
export { putObject } from "./put";
|
|
3
|
+
export type { PutObjectInput } from "./put";
|
|
2
4
|
export type { DimahS3, DimahS3Api, MultipartAliasApi } from "./dimah-s3";
|
|
5
|
+
export { route } from "./route";
|
|
3
6
|
export { DimahS3Error, errors, isAPIError, isDimahS3Error, isS3ErrorCode, S3_ERROR_CODES, } from "./errors";
|
|
4
7
|
export type { ServerErrors } from "./errors";
|
|
5
8
|
export { createS3Endpoint, createS3Middleware } from "./api";
|
|
6
9
|
export type { S3EndpointContext } from "./api";
|
|
7
|
-
export { definePlugin } from "./plugin";
|
|
10
|
+
export { chainHooks, definePlugin } from "./plugin";
|
|
8
11
|
export type { DimahS3Plugin, DimahS3PluginHooks, PluginContextMap, PluginEndpointMap, PluginInitEnv, } from "./plugin";
|
|
9
|
-
export
|
|
12
|
+
export { ROUTE_FEATURES, ROUTE_OPERATIONS } from "./types";
|
|
13
|
+
export { isFeatureOn } from "./helpers";
|
|
14
|
+
export type { DeleteConfig, DeleteGuardContext, DeleteOnDeletedContext, DimahS3Config, DimahS3Logger, DimahS3RouteConfig, DisabledFeature, DownloadConfig, DownloadGuardContext, DownloadOnPresignedContext, DownloadResolveInfo, EnabledFeature, EnabledUploadConfig, FeatureToggle, GuardContext, MultipartConfig, MultipartOnAbortContext, MultipartOnInitContext, MultipartOnListContext, MultipartGuardContext, MultipartUploadContext, ObjectFile, OpenedRoute, ResolvedDimahS3Config, ResolvedFeature, ResolvedRoute, ResolvedUploadConfig, RouteFeature, RouteGuardContext, RouteOperation, StoredObjectContext, UploadConfig, UploadConfirmGuardContext, UploadGuardContext, UploadObjectContext, UploadObjectInfo, UploadOnConfirmedContext, UploadOnPresignedContext, } from "./types";
|
|
10
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,MAAM,EACN,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,MAAM,EACN,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpD,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,SAAS,CAAC"}
|