@dimah-s3/server 0.7.4 → 0.8.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 +8 -9
- package/dist/adapters/express.js +36 -49
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/fastify.js +36 -49
- package/dist/adapters/fastify.js.map +1 -1
- package/dist/adapters/next.d.ts +3 -1
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +2 -0
- package/dist/adapters/next.js.map +1 -1
- package/dist/adapters/node.d.ts +1 -1
- package/dist/adapters/node.d.ts.map +1 -1
- package/dist/adapters/node.js +36 -49
- package/dist/adapters/node.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/api/assert-feature-enabled.d.ts +5 -0
- package/dist/api/assert-feature-enabled.d.ts.map +1 -0
- package/dist/api/bind-endpoints.d.ts +8 -0
- package/dist/api/bind-endpoints.d.ts.map +1 -0
- package/dist/api/context.d.ts +10 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/create-s3-endpoint.d.ts +141 -0
- package/dist/api/create-s3-endpoint.d.ts.map +1 -0
- package/dist/api/create-s3-middleware.d.ts +23 -0
- package/dist/api/create-s3-middleware.d.ts.map +1 -0
- package/dist/api/index.d.ts +6 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +758 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/routes/confirm.d.ts +14 -0
- package/dist/api/routes/confirm.d.ts.map +1 -0
- package/dist/api/routes/delete.d.ts +16 -0
- package/dist/api/routes/delete.d.ts.map +1 -0
- package/dist/api/routes/download.d.ts +19 -0
- package/dist/api/routes/download.d.ts.map +1 -0
- package/dist/api/routes/index.d.ts +170 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/multipart/abort.d.ts +20 -0
- package/dist/api/routes/multipart/abort.d.ts.map +1 -0
- package/dist/api/routes/multipart/complete.d.ts +22 -0
- package/dist/api/routes/multipart/complete.d.ts.map +1 -0
- package/dist/api/routes/multipart/init.d.ts +26 -0
- package/dist/api/routes/multipart/init.d.ts.map +1 -0
- package/dist/api/routes/multipart/list-parts.d.ts +17 -0
- package/dist/api/routes/multipart/list-parts.d.ts.map +1 -0
- package/dist/api/routes/multipart/part.d.ts +22 -0
- package/dist/api/routes/multipart/part.d.ts.map +1 -0
- package/dist/api/routes/upload.d.ts +26 -0
- package/dist/api/routes/upload.d.ts.map +1 -0
- package/dist/dimah-s3.d.ts +41 -12
- package/dist/dimah-s3.d.ts.map +1 -1
- package/dist/errors.d.ts +8 -22
- package/dist/errors.d.ts.map +1 -1
- package/dist/helpers/resolve-target.d.ts +51 -0
- package/dist/helpers/resolve-target.d.ts.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +521 -483
- package/dist/index.js.map +1 -1
- package/dist/internal-helpers.d.ts +4 -8
- package/dist/internal-helpers.d.ts.map +1 -1
- package/dist/plugin/apply-plugins.d.ts.map +1 -1
- package/dist/plugin/chain-hooks.d.ts +1 -1
- package/dist/plugin/define-plugin.d.ts +4 -13
- package/dist/plugin/define-plugin.d.ts.map +1 -1
- package/dist/plugin/hook-registry.d.ts +2 -2
- 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 +21 -41
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugins.d.ts +7 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +984 -0
- package/dist/plugins.js.map +1 -0
- package/dist/router.d.ts +12 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/types/config.d.ts +61 -22
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/hook-contexts.d.ts +11 -6
- package/dist/types/hook-contexts.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +16 -6
- package/dist/adapters/adapters.test.d.ts +0 -2
- package/dist/adapters/adapters.test.d.ts.map +0 -1
- package/dist/api.d.ts +0 -5
- package/dist/api.d.ts.map +0 -1
- package/dist/handler.d.ts +0 -5
- package/dist/handler.d.ts.map +0 -1
- package/dist/helpers/is-aws-not-found.test.d.ts +0 -2
- package/dist/helpers/is-aws-not-found.test.d.ts.map +0 -1
- package/dist/internal-helpers.test.d.ts +0 -2
- package/dist/internal-helpers.test.d.ts.map +0 -1
- package/dist/plugin/apply-plugins.test.d.ts +0 -2
- package/dist/plugin/apply-plugins.test.d.ts.map +0 -1
- package/dist/plugin/create-endpoint.d.ts +0 -20
- package/dist/plugin/create-endpoint.d.ts.map +0 -1
- package/dist/procedures/confirm.d.ts +0 -8
- package/dist/procedures/confirm.d.ts.map +0 -1
- package/dist/procedures/delete.d.ts +0 -8
- package/dist/procedures/delete.d.ts.map +0 -1
- package/dist/procedures/download.d.ts +0 -10
- package/dist/procedures/download.d.ts.map +0 -1
- package/dist/procedures/multipart/abort.d.ts +0 -13
- package/dist/procedures/multipart/abort.d.ts.map +0 -1
- package/dist/procedures/multipart/complete.d.ts +0 -12
- package/dist/procedures/multipart/complete.d.ts.map +0 -1
- package/dist/procedures/multipart/init.d.ts +0 -13
- package/dist/procedures/multipart/init.d.ts.map +0 -1
- package/dist/procedures/multipart/list-parts.d.ts +0 -9
- package/dist/procedures/multipart/list-parts.d.ts.map +0 -1
- package/dist/procedures/multipart/part.d.ts +0 -12
- package/dist/procedures/multipart/part.d.ts.map +0 -1
- package/dist/procedures/registry.d.ts +0 -78
- package/dist/procedures/registry.d.ts.map +0 -1
- package/dist/procedures/upload.d.ts +0 -14
- package/dist/procedures/upload.d.ts.map +0 -1
package/dist/plugin/types.d.ts
CHANGED
|
@@ -1,43 +1,16 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { DeleteConfig, DownloadConfig, MultipartConfig, UploadConfig, DimahS3Config } from "../types/config";
|
|
3
|
-
export type { ServerErrors };
|
|
1
|
+
import type { Endpoint } from "better-call";
|
|
2
|
+
import type { DeleteConfig, DownloadConfig, MultipartConfig, UploadConfig, DimahS3Config, ResolvedDimahS3Config } from "../types/config";
|
|
4
3
|
/**
|
|
5
4
|
* Hook fields a plugin may contribute. Scalars like `enabled` / `method`
|
|
6
5
|
* stay user-owned on {@link DimahS3Config}.
|
|
7
6
|
*/
|
|
8
7
|
export type DimahS3PluginHooks = {
|
|
9
8
|
guard?: DimahS3Config["guard"];
|
|
10
|
-
upload?: Pick<UploadConfig, "
|
|
11
|
-
download?: Pick<DownloadConfig, "
|
|
12
|
-
delete?: Pick<DeleteConfig, "guard" | "onDeleted">;
|
|
9
|
+
upload?: Pick<UploadConfig, "guard" | "onPresigned" | "confirmGuard" | "onConfirmed" | "prefix" | "resolveKey">;
|
|
10
|
+
download?: Pick<DownloadConfig, "guard" | "onPresigned" | "prefix" | "resolveKey">;
|
|
11
|
+
delete?: Pick<DeleteConfig, "guard" | "onDeleted" | "prefix" | "resolveKey">;
|
|
13
12
|
multipart?: Pick<MultipartConfig, "initGuard" | "partGuard" | "completeGuard" | "abortGuard" | "listGuard" | "onInit" | "onComplete" | "onAbort" | "onList">;
|
|
14
13
|
};
|
|
15
|
-
/**
|
|
16
|
-
* Context passed to a plugin endpoint handler.
|
|
17
|
-
* Global `config.guard` already ran before this is invoked.
|
|
18
|
-
*/
|
|
19
|
-
export type PluginEndpointContext = {
|
|
20
|
-
request: Request;
|
|
21
|
-
url: URL;
|
|
22
|
-
config: Readonly<DimahS3Config>;
|
|
23
|
-
/** English error factories with stable `code` for client localization. */
|
|
24
|
-
errors: ServerErrors;
|
|
25
|
-
/** Parse the request JSON body (returns `null` when missing/invalid). */
|
|
26
|
-
json: <T extends Record<string, unknown>>() => Promise<T | null>;
|
|
27
|
-
};
|
|
28
|
-
/** HTTP endpoint contributed by a server plugin. */
|
|
29
|
-
export type PluginEndpoint = {
|
|
30
|
-
/** Relative path under `plugins/{id}/` (e.g. `"objects"` → `plugins/db/objects`). */
|
|
31
|
-
path: string;
|
|
32
|
-
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
33
|
-
/** Optional HTTP status for successful JSON responses. */
|
|
34
|
-
status?: number;
|
|
35
|
-
handler: (ctx: PluginEndpointContext) => Promise<unknown>;
|
|
36
|
-
};
|
|
37
|
-
/** Endpoint after plugin id is attached for mounting. */
|
|
38
|
-
export type ResolvedPluginEndpoint = PluginEndpoint & {
|
|
39
|
-
pluginId: string;
|
|
40
|
-
};
|
|
41
14
|
/**
|
|
42
15
|
* Environment passed to {@link DimahS3Plugin.init}.
|
|
43
16
|
* Config is pre-merge (user config only) — use for feature-flag checks.
|
|
@@ -56,8 +29,9 @@ export type PluginInitEnv = {
|
|
|
56
29
|
* flattened instance (`s3[id]`).
|
|
57
30
|
* @typeParam TContext — exposed on `s3.context[id]` and `s3[id]` after
|
|
58
31
|
* `dimahS3()`.
|
|
32
|
+
* @typeParam TEndpoints — better-call endpoints merged onto `s3.api`.
|
|
59
33
|
*/
|
|
60
|
-
export type DimahS3Plugin<Id extends string = string, TContext extends Record<string, unknown> = Record<string, unknown>> = {
|
|
34
|
+
export type DimahS3Plugin<Id extends string = string, TContext extends Record<string, unknown> = Record<string, unknown>, TEndpoints extends Record<string, Endpoint> = Record<string, Endpoint>> = {
|
|
61
35
|
/** Unique id — duplicate ids throw at init. */
|
|
62
36
|
id: Id;
|
|
63
37
|
/**
|
|
@@ -75,27 +49,33 @@ export type DimahS3Plugin<Id extends string = string, TContext extends Record<st
|
|
|
75
49
|
/** Lifecycle / guard hooks merged ahead of user config hooks. */
|
|
76
50
|
hooks?: DimahS3PluginHooks;
|
|
77
51
|
/**
|
|
78
|
-
* Extra HTTP routes
|
|
79
|
-
*
|
|
52
|
+
* Extra HTTP routes on the shared handler. Use {@link createS3Endpoint}.
|
|
53
|
+
* Paths are absolute under `basePath` (e.g. `/db/objects`).
|
|
80
54
|
*/
|
|
81
|
-
endpoints?:
|
|
55
|
+
endpoints?: TEndpoints;
|
|
82
56
|
/** Opaque context keyed by `id` on the dimahS3 instance. */
|
|
83
57
|
context?: TContext;
|
|
84
58
|
};
|
|
85
|
-
export type AppliedPlugins<C extends Record<string, unknown> = Record<string, unknown>> = {
|
|
59
|
+
export type AppliedPlugins<C extends Record<string, unknown> = Record<string, unknown>, E extends Record<string, Endpoint> = Record<string, Endpoint>> = {
|
|
86
60
|
/** Config with plugin hooks chained ahead of user hooks. */
|
|
87
|
-
config:
|
|
61
|
+
config: ResolvedDimahS3Config;
|
|
88
62
|
/** Plugin contexts keyed by plugin id. */
|
|
89
63
|
context: C;
|
|
90
64
|
getPlugin: (id: string) => DimahS3Plugin | undefined;
|
|
91
|
-
/** Plugin HTTP endpoints
|
|
92
|
-
endpoints:
|
|
65
|
+
/** Plugin HTTP endpoints merged onto `s3.api` and the router. */
|
|
66
|
+
endpoints: E;
|
|
93
67
|
};
|
|
94
68
|
/** Map plugin ids → their `context` types. */
|
|
95
69
|
export type PluginContextMap<P extends readonly DimahS3Plugin[]> = {
|
|
96
70
|
[K in P[number] as K["id"]]: K extends DimahS3Plugin<string, infer Ctx> ? Ctx : never;
|
|
97
71
|
};
|
|
72
|
+
/** Map plugin endpoint names → better-call endpoints. */
|
|
73
|
+
export type PluginEndpointMap<P extends readonly DimahS3Plugin[]> = P extends readonly [] ? Record<string, never> : UnionToIntersection<P[number] extends {
|
|
74
|
+
endpoints?: infer E;
|
|
75
|
+
} ? E extends Record<string, Endpoint> ? E : Record<string, never> : Record<string, never>>;
|
|
76
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : Record<string, never>;
|
|
98
77
|
/** Keys reserved on the dimahS3 instance — plugins may not use these as ids. */
|
|
99
|
-
export declare const RESERVED_PLUGIN_IDS: readonly ["handler", "api", "context", "getPlugin"];
|
|
78
|
+
export declare const RESERVED_PLUGIN_IDS: readonly ["handler", "api", "context", "getPlugin", "$ERROR_CODES", "$Infer"];
|
|
100
79
|
export type ReservedPluginId = (typeof RESERVED_PLUGIN_IDS)[number];
|
|
80
|
+
export {};
|
|
101
81
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugin/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { applyPlugins, chainHooks, definePlugin, FEATURE_HOOK_KEYS, RESERVED_PLUGIN_IDS, } from "./plugin";
|
|
2
|
+
export type { AppliedPlugins, DimahS3Plugin, DimahS3PluginHooks, FeatureName, PluginContextMap, PluginEndpointMap, PluginInitEnv, ReservedPluginId, } from "./plugin";
|
|
3
|
+
export { createS3Endpoint, createS3Middleware } from "./api";
|
|
4
|
+
export type { CoreEndpoints, S3EndpointContext } from "./api";
|
|
5
|
+
export { CORE_ENDPOINT_NAMES } from "./api";
|
|
6
|
+
export type { DeleteGuardContext, DeleteOnDeletedContext, DimahS3Config, DownloadConfig, DownloadOnPresignedContext, DownloadPresignGuardContext, FeatureToggle, GuardContext, KeyPrefix, MultipartAbortGuardContext, MultipartCompleteGuardContext, MultipartConfig, MultipartInitGuardContext, MultipartListGuardContext, MultipartOnAbortContext, MultipartOnCompleteContext, MultipartOnInitContext, MultipartOnListContext, MultipartPartGuardContext, MultipartUploadContext, ResolveKeyContext, ResolvedDimahS3Config, UploadConfig, UploadConfirmGuardContext, UploadOnConfirmedContext, UploadOnPresignedContext, UploadPresignGuardContext, } from "./types";
|
|
7
|
+
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,SAAS,EACT,0BAA0B,EAC1B,6BAA6B,EAC7B,eAAe,EACf,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,SAAS,CAAC"}
|