secure-upload-fastify-sdk 1.0.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.
Files changed (74) hide show
  1. package/README.md +467 -0
  2. package/dist/index.d.ts +14 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2069 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.mjs +2023 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/dist/server/adapters/secure-crypto.d.ts +28 -0
  9. package/dist/server/adapters/secure-crypto.d.ts.map +1 -0
  10. package/dist/server/errors.d.ts +48 -0
  11. package/dist/server/errors.d.ts.map +1 -0
  12. package/dist/server/errors.js +112 -0
  13. package/dist/server/errors.js.map +1 -0
  14. package/dist/server/errors.mjs +85 -0
  15. package/dist/server/errors.mjs.map +1 -0
  16. package/dist/server/fastify-plugin.d.ts +38 -0
  17. package/dist/server/fastify-plugin.d.ts.map +1 -0
  18. package/dist/server/index.d.ts +17 -0
  19. package/dist/server/index.d.ts.map +1 -0
  20. package/dist/server/index.js +2070 -0
  21. package/dist/server/index.js.map +1 -0
  22. package/dist/server/index.mjs +2024 -0
  23. package/dist/server/index.mjs.map +1 -0
  24. package/dist/server/routes/_internal.d.ts +42 -0
  25. package/dist/server/routes/_internal.d.ts.map +1 -0
  26. package/dist/server/routes/multipart.d.ts +22 -0
  27. package/dist/server/routes/multipart.d.ts.map +1 -0
  28. package/dist/server/routes/smart.d.ts +16 -0
  29. package/dist/server/routes/smart.d.ts.map +1 -0
  30. package/dist/server/session.d.ts +19 -0
  31. package/dist/server/session.d.ts.map +1 -0
  32. package/dist/server/types.d.ts +233 -0
  33. package/dist/server/types.d.ts.map +1 -0
  34. package/dist/server/utils/cleaner.d.ts +20 -0
  35. package/dist/server/utils/cleaner.d.ts.map +1 -0
  36. package/dist/server/utils/memory-rate-limit.d.ts +29 -0
  37. package/dist/server/utils/memory-rate-limit.d.ts.map +1 -0
  38. package/dist/server/utils/orphan-scanner.d.ts +34 -0
  39. package/dist/server/utils/orphan-scanner.d.ts.map +1 -0
  40. package/dist/server/utils/redis-helpers.d.ts +25 -0
  41. package/dist/server/utils/redis-helpers.d.ts.map +1 -0
  42. package/dist/server/utils/repository/index.d.ts +27 -0
  43. package/dist/server/utils/repository/index.d.ts.map +1 -0
  44. package/dist/server/utils/repository/index.js +501 -0
  45. package/dist/server/utils/repository/index.js.map +1 -0
  46. package/dist/server/utils/repository/index.mjs +469 -0
  47. package/dist/server/utils/repository/index.mjs.map +1 -0
  48. package/dist/server/utils/repository/memory.d.ts +33 -0
  49. package/dist/server/utils/repository/memory.d.ts.map +1 -0
  50. package/dist/server/utils/repository/prisma.d.ts +49 -0
  51. package/dist/server/utils/repository/prisma.d.ts.map +1 -0
  52. package/dist/server/utils/repository/types-extra.d.ts +9 -0
  53. package/dist/server/utils/repository/types-extra.d.ts.map +1 -0
  54. package/dist/server/utils/repository/types.d.ts +128 -0
  55. package/dist/server/utils/repository/types.d.ts.map +1 -0
  56. package/dist/server/utils/storage/index.d.ts +115 -0
  57. package/dist/server/utils/storage/index.d.ts.map +1 -0
  58. package/dist/server/utils/storage/index.js +285 -0
  59. package/dist/server/utils/storage/index.js.map +1 -0
  60. package/dist/server/utils/storage/index.mjs +247 -0
  61. package/dist/server/utils/storage/index.mjs.map +1 -0
  62. package/dist/server/utils/storage/local.d.ts +46 -0
  63. package/dist/server/utils/storage/local.d.ts.map +1 -0
  64. package/dist/server/utils/storage/memory.d.ts +34 -0
  65. package/dist/server/utils/storage/memory.d.ts.map +1 -0
  66. package/dist/server/utils/storage/types.d.ts +78 -0
  67. package/dist/server/utils/storage/types.d.ts.map +1 -0
  68. package/dist/server/utils/strategy.d.ts +64 -0
  69. package/dist/server/utils/strategy.d.ts.map +1 -0
  70. package/dist/server/utils/strategy.js +130 -0
  71. package/dist/server/utils/strategy.js.map +1 -0
  72. package/dist/server/utils/strategy.mjs +103 -0
  73. package/dist/server/utils/strategy.mjs.map +1 -0
  74. package/package.json +97 -0
@@ -0,0 +1,85 @@
1
+ // src/server/errors.ts
2
+ var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
3
+ ErrorCode2[ErrorCode2["INVALID_REQUEST"] = 1001] = "INVALID_REQUEST";
4
+ ErrorCode2[ErrorCode2["INTERNAL_ERROR"] = 1500] = "INTERNAL_ERROR";
5
+ ErrorCode2[ErrorCode2["NOT_FOUND"] = 1400] = "NOT_FOUND";
6
+ ErrorCode2[ErrorCode2["FORBIDDEN"] = 1403] = "FORBIDDEN";
7
+ ErrorCode2[ErrorCode2["RATE_LIMITED"] = 1402] = "RATE_LIMITED";
8
+ ErrorCode2[ErrorCode2["BINARY_PAYLOAD_EMPTY"] = 1501] = "BINARY_PAYLOAD_EMPTY";
9
+ ErrorCode2[ErrorCode2["BINARY_PAYLOAD_TOO_LARGE"] = 1502] = "BINARY_PAYLOAD_TOO_LARGE";
10
+ ErrorCode2[ErrorCode2["BINARY_AUTH_REQUIRED"] = 1503] = "BINARY_AUTH_REQUIRED";
11
+ ErrorCode2[ErrorCode2["BINARY_AUTH_FAILED"] = 1504] = "BINARY_AUTH_FAILED";
12
+ ErrorCode2[ErrorCode2["BATCH_EMPTY"] = 1510] = "BATCH_EMPTY";
13
+ ErrorCode2[ErrorCode2["BATCH_TOO_MANY_FILES"] = 1511] = "BATCH_TOO_MANY_FILES";
14
+ ErrorCode2[ErrorCode2["BATCH_TOTAL_TOO_LARGE"] = 1512] = "BATCH_TOTAL_TOO_LARGE";
15
+ ErrorCode2[ErrorCode2["BATCH_FILE_INVALID"] = 1513] = "BATCH_FILE_INVALID";
16
+ ErrorCode2[ErrorCode2["MULTIPART_NOT_FOUND"] = 1520] = "MULTIPART_NOT_FOUND";
17
+ ErrorCode2[ErrorCode2["MULTIPART_ALREADY_COMPLETED"] = 1521] = "MULTIPART_ALREADY_COMPLETED";
18
+ ErrorCode2[ErrorCode2["MULTIPART_ALREADY_ABORTED"] = 1522] = "MULTIPART_ALREADY_ABORTED";
19
+ ErrorCode2[ErrorCode2["MULTIPART_EXPIRED"] = 1523] = "MULTIPART_EXPIRED";
20
+ ErrorCode2[ErrorCode2["MULTIPART_STATUS_INVALID"] = 1524] = "MULTIPART_STATUS_INVALID";
21
+ ErrorCode2[ErrorCode2["MULTIPART_TOTAL_TOO_LARGE"] = 1530] = "MULTIPART_TOTAL_TOO_LARGE";
22
+ ErrorCode2[ErrorCode2["MULTIPART_PART_TOO_LARGE"] = 1531] = "MULTIPART_PART_TOO_LARGE";
23
+ ErrorCode2[ErrorCode2["MULTIPART_PART_TOO_SMALL"] = 1532] = "MULTIPART_PART_TOO_SMALL";
24
+ ErrorCode2[ErrorCode2["MULTIPART_INVALID_PART_NUMBER"] = 1533] = "MULTIPART_INVALID_PART_NUMBER";
25
+ ErrorCode2[ErrorCode2["MULTIPART_DUPLICATE_PART"] = 1534] = "MULTIPART_DUPLICATE_PART";
26
+ ErrorCode2[ErrorCode2["MULTIPART_PART_HASH_MISMATCH"] = 1535] = "MULTIPART_PART_HASH_MISMATCH";
27
+ ErrorCode2[ErrorCode2["MULTIPART_FINAL_HASH_MISMATCH"] = 1536] = "MULTIPART_FINAL_HASH_MISMATCH";
28
+ ErrorCode2[ErrorCode2["MULTIPART_INCOMPLETE_PARTS"] = 1537] = "MULTIPART_INCOMPLETE_PARTS";
29
+ ErrorCode2[ErrorCode2["MULTIPART_AUTH_REQUIRED"] = 1538] = "MULTIPART_AUTH_REQUIRED";
30
+ ErrorCode2[ErrorCode2["MULTIPART_INVALID_ARG"] = 1539] = "MULTIPART_INVALID_ARG";
31
+ return ErrorCode2;
32
+ })(ErrorCode || {});
33
+ var HTTP = {
34
+ [1001 /* INVALID_REQUEST */]: 400,
35
+ [1500 /* INTERNAL_ERROR */]: 500,
36
+ [1400 /* NOT_FOUND */]: 404,
37
+ [1403 /* FORBIDDEN */]: 403,
38
+ [1402 /* RATE_LIMITED */]: 429,
39
+ // binary
40
+ [1501 /* BINARY_PAYLOAD_EMPTY */]: 400,
41
+ [1502 /* BINARY_PAYLOAD_TOO_LARGE */]: 413,
42
+ [1503 /* BINARY_AUTH_REQUIRED */]: 401,
43
+ [1504 /* BINARY_AUTH_FAILED */]: 401,
44
+ // batch
45
+ [1510 /* BATCH_EMPTY */]: 400,
46
+ [1511 /* BATCH_TOO_MANY_FILES */]: 413,
47
+ [1512 /* BATCH_TOTAL_TOO_LARGE */]: 413,
48
+ [1513 /* BATCH_FILE_INVALID */]: 400,
49
+ // multipart
50
+ [1520 /* MULTIPART_NOT_FOUND */]: 404,
51
+ [1521 /* MULTIPART_ALREADY_COMPLETED */]: 409,
52
+ [1522 /* MULTIPART_ALREADY_ABORTED */]: 409,
53
+ [1523 /* MULTIPART_EXPIRED */]: 410,
54
+ [1524 /* MULTIPART_STATUS_INVALID */]: 409,
55
+ [1530 /* MULTIPART_TOTAL_TOO_LARGE */]: 413,
56
+ [1531 /* MULTIPART_PART_TOO_LARGE */]: 413,
57
+ [1532 /* MULTIPART_PART_TOO_SMALL */]: 400,
58
+ [1533 /* MULTIPART_INVALID_PART_NUMBER */]: 400,
59
+ [1534 /* MULTIPART_DUPLICATE_PART */]: 409,
60
+ [1535 /* MULTIPART_PART_HASH_MISMATCH */]: 400,
61
+ [1536 /* MULTIPART_FINAL_HASH_MISMATCH */]: 400,
62
+ [1537 /* MULTIPART_INCOMPLETE_PARTS */]: 409,
63
+ [1538 /* MULTIPART_AUTH_REQUIRED */]: 401,
64
+ [1539 /* MULTIPART_INVALID_ARG */]: 400
65
+ };
66
+ var SecureError = class extends Error {
67
+ constructor(code, message) {
68
+ super(message ?? ErrorCode[code]);
69
+ this.code = code;
70
+ this.name = "SecureError";
71
+ }
72
+ code;
73
+ get statusCode() {
74
+ return HTTP[this.code];
75
+ }
76
+ };
77
+ function getHttpStatus(code) {
78
+ return HTTP[code];
79
+ }
80
+ export {
81
+ ErrorCode,
82
+ SecureError,
83
+ getHttpStatus
84
+ };
85
+ //# sourceMappingURL=errors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/errors.ts"],"sourcesContent":["/**\r\n * 错误码 + SecureError\r\n *\r\n * 设计:\r\n * - 1000-1099: 通用请求错误(INVALID_REQUEST 等)\r\n * - 1400-1499: HTTP 语义错误(NOT_FOUND / FORBIDDEN / RATE_LIMITED 等)\r\n * - 1500-1599: 上传相关(BINARY / BATCH / MULTIPART)\r\n *\r\n * 独立于 secure-crypto-top-zod-sdk 的错误码空间,\r\n * 即使用户不引入加密 SDK,这套码也能独立用。\r\n */\r\n\r\nexport enum ErrorCode {\r\n // 通用\r\n INVALID_REQUEST = 1001,\r\n INTERNAL_ERROR = 1500,\r\n NOT_FOUND = 1400,\r\n FORBIDDEN = 1403,\r\n RATE_LIMITED = 1402,\r\n\r\n // binary 协议(网关透传场景)\r\n BINARY_PAYLOAD_EMPTY = 1501,\r\n BINARY_PAYLOAD_TOO_LARGE = 1502,\r\n BINARY_AUTH_REQUIRED = 1503,\r\n BINARY_AUTH_FAILED = 1504,\r\n\r\n // 批量上传\r\n BATCH_EMPTY = 1510,\r\n BATCH_TOO_MANY_FILES = 1511,\r\n BATCH_TOTAL_TOO_LARGE = 1512,\r\n BATCH_FILE_INVALID = 1513,\r\n\r\n // 分片上传(1520-1539)\r\n MULTIPART_NOT_FOUND = 1520,\r\n MULTIPART_ALREADY_COMPLETED = 1521,\r\n MULTIPART_ALREADY_ABORTED = 1522,\r\n MULTIPART_EXPIRED = 1523,\r\n MULTIPART_STATUS_INVALID = 1524,\r\n MULTIPART_TOTAL_TOO_LARGE = 1530,\r\n MULTIPART_PART_TOO_LARGE = 1531,\r\n MULTIPART_PART_TOO_SMALL = 1532,\r\n MULTIPART_INVALID_PART_NUMBER = 1533,\r\n MULTIPART_DUPLICATE_PART = 1534,\r\n MULTIPART_PART_HASH_MISMATCH = 1535,\r\n MULTIPART_FINAL_HASH_MISMATCH = 1536,\r\n MULTIPART_INCOMPLETE_PARTS = 1537,\r\n MULTIPART_AUTH_REQUIRED = 1538,\r\n MULTIPART_INVALID_ARG = 1539,\r\n}\r\n\r\nconst HTTP: Record<ErrorCode, number> = {\r\n [ErrorCode.INVALID_REQUEST]: 400,\r\n [ErrorCode.INTERNAL_ERROR]: 500,\r\n [ErrorCode.NOT_FOUND]: 404,\r\n [ErrorCode.FORBIDDEN]: 403,\r\n [ErrorCode.RATE_LIMITED]: 429,\r\n // binary\r\n [ErrorCode.BINARY_PAYLOAD_EMPTY]: 400,\r\n [ErrorCode.BINARY_PAYLOAD_TOO_LARGE]: 413,\r\n [ErrorCode.BINARY_AUTH_REQUIRED]: 401,\r\n [ErrorCode.BINARY_AUTH_FAILED]: 401,\r\n // batch\r\n [ErrorCode.BATCH_EMPTY]: 400,\r\n [ErrorCode.BATCH_TOO_MANY_FILES]: 413,\r\n [ErrorCode.BATCH_TOTAL_TOO_LARGE]: 413,\r\n [ErrorCode.BATCH_FILE_INVALID]: 400,\r\n // multipart\r\n [ErrorCode.MULTIPART_NOT_FOUND]: 404,\r\n [ErrorCode.MULTIPART_ALREADY_COMPLETED]: 409,\r\n [ErrorCode.MULTIPART_ALREADY_ABORTED]: 409,\r\n [ErrorCode.MULTIPART_EXPIRED]: 410,\r\n [ErrorCode.MULTIPART_STATUS_INVALID]: 409,\r\n [ErrorCode.MULTIPART_TOTAL_TOO_LARGE]: 413,\r\n [ErrorCode.MULTIPART_PART_TOO_LARGE]: 413,\r\n [ErrorCode.MULTIPART_PART_TOO_SMALL]: 400,\r\n [ErrorCode.MULTIPART_INVALID_PART_NUMBER]: 400,\r\n [ErrorCode.MULTIPART_DUPLICATE_PART]: 409,\r\n [ErrorCode.MULTIPART_PART_HASH_MISMATCH]: 400,\r\n [ErrorCode.MULTIPART_FINAL_HASH_MISMATCH]: 400,\r\n [ErrorCode.MULTIPART_INCOMPLETE_PARTS]: 409,\r\n [ErrorCode.MULTIPART_AUTH_REQUIRED]: 401,\r\n [ErrorCode.MULTIPART_INVALID_ARG]: 400,\r\n};\r\n\r\nexport class SecureError extends Error {\r\n constructor(public code: ErrorCode, message?: string) {\r\n super(message ?? ErrorCode[code]);\r\n this.name = 'SecureError';\r\n }\r\n get statusCode(): number {\r\n return HTTP[this.code];\r\n }\r\n}\r\n\r\nexport function getHttpStatus(code: ErrorCode): number {\r\n return HTTP[code];\r\n}\r\n"],"mappings":";AAYO,IAAK,YAAL,kBAAKA,eAAL;AAEL,EAAAA,sBAAA,qBAAqB,QAArB;AACA,EAAAA,sBAAA,oBAAqB,QAArB;AACA,EAAAA,sBAAA,eAAqB,QAArB;AACA,EAAAA,sBAAA,eAAqB,QAArB;AACA,EAAAA,sBAAA,kBAAqB,QAArB;AAGA,EAAAA,sBAAA,0BAA2B,QAA3B;AACA,EAAAA,sBAAA,8BAA2B,QAA3B;AACA,EAAAA,sBAAA,0BAA2B,QAA3B;AACA,EAAAA,sBAAA,wBAA2B,QAA3B;AAGA,EAAAA,sBAAA,iBAA2B,QAA3B;AACA,EAAAA,sBAAA,0BAA2B,QAA3B;AACA,EAAAA,sBAAA,2BAA2B,QAA3B;AACA,EAAAA,sBAAA,wBAA2B,QAA3B;AAGA,EAAAA,sBAAA,yBAAmC,QAAnC;AACA,EAAAA,sBAAA,iCAAmC,QAAnC;AACA,EAAAA,sBAAA,+BAAmC,QAAnC;AACA,EAAAA,sBAAA,uBAAmC,QAAnC;AACA,EAAAA,sBAAA,8BAAmC,QAAnC;AACA,EAAAA,sBAAA,+BAAmC,QAAnC;AACA,EAAAA,sBAAA,8BAAmC,QAAnC;AACA,EAAAA,sBAAA,8BAAmC,QAAnC;AACA,EAAAA,sBAAA,mCAAmC,QAAnC;AACA,EAAAA,sBAAA,8BAAmC,QAAnC;AACA,EAAAA,sBAAA,kCAAmC,QAAnC;AACA,EAAAA,sBAAA,mCAAmC,QAAnC;AACA,EAAAA,sBAAA,gCAAmC,QAAnC;AACA,EAAAA,sBAAA,6BAAmC,QAAnC;AACA,EAAAA,sBAAA,2BAAmC,QAAnC;AAnCU,SAAAA;AAAA,GAAA;AAsCZ,IAAM,OAAkC;AAAA,EACtC,CAAC,0BAAyB,GAAG;AAAA,EAC7B,CAAC,yBAAwB,GAAG;AAAA,EAC5B,CAAC,oBAAmB,GAAG;AAAA,EACvB,CAAC,oBAAmB,GAAG;AAAA,EACvB,CAAC,uBAAsB,GAAG;AAAA;AAAA,EAE1B,CAAC,+BAA8B,GAAG;AAAA,EAClC,CAAC,mCAAkC,GAAG;AAAA,EACtC,CAAC,+BAA8B,GAAG;AAAA,EAClC,CAAC,6BAA4B,GAAG;AAAA;AAAA,EAEhC,CAAC,sBAAqB,GAAG;AAAA,EACzB,CAAC,+BAA8B,GAAG;AAAA,EAClC,CAAC,gCAA+B,GAAG;AAAA,EACnC,CAAC,6BAA4B,GAAG;AAAA;AAAA,EAEhC,CAAC,8BAA6B,GAAG;AAAA,EACjC,CAAC,sCAAqC,GAAG;AAAA,EACzC,CAAC,oCAAmC,GAAG;AAAA,EACvC,CAAC,4BAA2B,GAAG;AAAA,EAC/B,CAAC,mCAAkC,GAAG;AAAA,EACtC,CAAC,oCAAmC,GAAG;AAAA,EACvC,CAAC,mCAAkC,GAAG;AAAA,EACtC,CAAC,mCAAkC,GAAG;AAAA,EACtC,CAAC,wCAAuC,GAAG;AAAA,EAC3C,CAAC,mCAAkC,GAAG;AAAA,EACtC,CAAC,uCAAsC,GAAG;AAAA,EAC1C,CAAC,wCAAuC,GAAG;AAAA,EAC3C,CAAC,qCAAoC,GAAG;AAAA,EACxC,CAAC,kCAAiC,GAAG;AAAA,EACrC,CAAC,gCAA+B,GAAG;AACrC;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC,YAAmB,MAAiB,SAAkB;AACpD,UAAM,WAAW,UAAU,IAAI,CAAC;AADf;AAEjB,SAAK,OAAO;AAAA,EACd;AAAA,EAHmB;AAAA,EAInB,IAAI,aAAqB;AACvB,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AACF;AAEO,SAAS,cAAc,MAAyB;AACrD,SAAO,KAAK,IAAI;AAClB;","names":["ErrorCode"]}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Fastify 主插件
3
+ *
4
+ * 注册 5 + 1 端点:
5
+ * - {pathPrefix.multipart}/init
6
+ * - {pathPrefix.multipart}/part
7
+ * - {pathPrefix.multipart}/complete
8
+ * - {pathPrefix.multipart}/abort
9
+ * - {pathPrefix.multipart}/status
10
+ * - {pathPrefix.smart}/init
11
+ *
12
+ * 用法(详见 README):
13
+ *
14
+ * import Fastify from 'fastify';
15
+ * import uploadPlugin from 'secure-upload-fastify-sdk/server';
16
+ * import { LocalStorage } from 'secure-upload-fastify-sdk/storage';
17
+ * import { PrismaMultipartRepository, PrismaFileRepository } from 'secure-upload-fastify-sdk/repository';
18
+ *
19
+ * const app = Fastify({ logger: true });
20
+ * await app.register(uploadPlugin, {
21
+ * storage: { adapter: 'local', options: { baseDir: '/var/upload' } },
22
+ * repository: { kind: 'prisma', prisma },
23
+ * redis,
24
+ * pathPrefix: { multipart: '/api/v1/upload/multipart', smart: '/api/v1/upload/smart' },
25
+ * fileUrlPrefix: '/api/v1/upload/files',
26
+ * });
27
+ */
28
+ import type { FastifyInstance } from 'fastify';
29
+ import { LocalStorage } from './utils/storage/local';
30
+ import { InMemoryStorage } from './utils/storage/memory';
31
+ import { PrismaMultipartRepository, PrismaFileRepository } from './utils/repository/prisma';
32
+ import { InMemoryMultipartRepository, InMemoryFileRepository } from './utils/repository/memory';
33
+ import type { SecureUploadOptions } from './types';
34
+ declare function secureUploadPluginImpl(app: FastifyInstance, options: SecureUploadOptions): Promise<void>;
35
+ declare const _default: typeof secureUploadPluginImpl;
36
+ export default _default;
37
+ export { LocalStorage, InMemoryStorage, PrismaMultipartRepository, PrismaFileRepository, InMemoryMultipartRepository, InMemoryFileRepository, };
38
+ //# sourceMappingURL=fastify-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify-plugin.d.ts","sourceRoot":"","sources":["../../src/server/fastify-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAQhG,OAAO,KAAK,EACV,mBAAmB,EAIpB,MAAM,SAAS,CAAC;AAmDjB,iBAAe,sBAAsB,CACnC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAqHf;;AAED,wBAGG;AAKH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Server 公开 API
3
+ *
4
+ * 主入口:
5
+ * import secureUploadPlugin, { type SecureUploadOptions } from 'secure-upload-fastify-sdk/server';
6
+ * await app.register(secureUploadPlugin, { ... });
7
+ *
8
+ * 工具类:
9
+ * import { LocalStorage, InMemoryStorage } from 'secure-upload-fastify-sdk/storage';
10
+ * import { PrismaMultipartRepository, PrismaFileRepository } from 'secure-upload-fastify-sdk/repository';
11
+ * import { ErrorCode, SecureError } from 'secure-upload-fastify-sdk/errors';
12
+ * import { chooseStrategy, suggestConcurrency, DEFAULT_STRATEGY_CONFIG } from 'secure-upload-fastify-sdk/strategy';
13
+ */
14
+ export { default, default as secureUploadPlugin, LocalStorage, InMemoryStorage, PrismaMultipartRepository, PrismaFileRepository, InMemoryMultipartRepository, InMemoryFileRepository, } from './fastify-plugin';
15
+ export type { SecureUploadOptions, SecureUploadRuntime, SecureMode, RepositoryConfig, StorageConfig, PathPrefixConfig, SessionValidator, InitResponse, PartResponse, CompleteResponse, AbortResponse, StatusResponse, MultipartRecord, FileRecord, } from './types';
16
+ export { ErrorCode, SecureError, getHttpStatus, } from './errors';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,OAAO,EACP,OAAO,IAAI,kBAAkB,EAC7B,YAAY,EACZ,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAC"}