@kaiz11/stack-client 0.0.14

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 (263) hide show
  1. package/LICENSE +32 -0
  2. package/README.md +586 -0
  3. package/dist/accounts/accounts-client.d.ts +188 -0
  4. package/dist/accounts/accounts-client.d.ts.map +1 -0
  5. package/dist/accounts/accounts-client.js +264 -0
  6. package/dist/accounts/accounts-client.js.map +1 -0
  7. package/dist/accounts/index.d.ts +8 -0
  8. package/dist/accounts/index.d.ts.map +1 -0
  9. package/dist/accounts/index.js +8 -0
  10. package/dist/accounts/index.js.map +1 -0
  11. package/dist/accounts/mock-accounts.d.ts +90 -0
  12. package/dist/accounts/mock-accounts.d.ts.map +1 -0
  13. package/dist/accounts/mock-accounts.js +434 -0
  14. package/dist/accounts/mock-accounts.js.map +1 -0
  15. package/dist/accounts/types.d.ts +180 -0
  16. package/dist/accounts/types.d.ts.map +1 -0
  17. package/dist/accounts/types.js +59 -0
  18. package/dist/accounts/types.js.map +1 -0
  19. package/dist/auth/auth-client.d.ts +224 -0
  20. package/dist/auth/auth-client.d.ts.map +1 -0
  21. package/dist/auth/auth-client.js +230 -0
  22. package/dist/auth/auth-client.js.map +1 -0
  23. package/dist/auth/base-auth.d.ts +44 -0
  24. package/dist/auth/base-auth.d.ts.map +1 -0
  25. package/dist/auth/base-auth.js +55 -0
  26. package/dist/auth/base-auth.js.map +1 -0
  27. package/dist/auth/index.d.ts +11 -0
  28. package/dist/auth/index.d.ts.map +1 -0
  29. package/dist/auth/index.js +11 -0
  30. package/dist/auth/index.js.map +1 -0
  31. package/dist/auth/methods/admin.d.ts +59 -0
  32. package/dist/auth/methods/admin.d.ts.map +1 -0
  33. package/dist/auth/methods/admin.js +55 -0
  34. package/dist/auth/methods/admin.js.map +1 -0
  35. package/dist/auth/methods/index.d.ts +9 -0
  36. package/dist/auth/methods/index.d.ts.map +1 -0
  37. package/dist/auth/methods/index.js +8 -0
  38. package/dist/auth/methods/index.js.map +1 -0
  39. package/dist/auth/methods/magic-link.d.ts +27 -0
  40. package/dist/auth/methods/magic-link.d.ts.map +1 -0
  41. package/dist/auth/methods/magic-link.js +37 -0
  42. package/dist/auth/methods/magic-link.js.map +1 -0
  43. package/dist/auth/methods/mfa.d.ts +92 -0
  44. package/dist/auth/methods/mfa.d.ts.map +1 -0
  45. package/dist/auth/methods/mfa.js +153 -0
  46. package/dist/auth/methods/mfa.js.map +1 -0
  47. package/dist/auth/methods/oauth.d.ts +62 -0
  48. package/dist/auth/methods/oauth.d.ts.map +1 -0
  49. package/dist/auth/methods/oauth.js +165 -0
  50. package/dist/auth/methods/oauth.js.map +1 -0
  51. package/dist/auth/methods/otp.d.ts +43 -0
  52. package/dist/auth/methods/otp.d.ts.map +1 -0
  53. package/dist/auth/methods/otp.js +66 -0
  54. package/dist/auth/methods/otp.js.map +1 -0
  55. package/dist/auth/methods/password.d.ts +64 -0
  56. package/dist/auth/methods/password.d.ts.map +1 -0
  57. package/dist/auth/methods/password.js +116 -0
  58. package/dist/auth/methods/password.js.map +1 -0
  59. package/dist/auth/methods/recovery.d.ts +62 -0
  60. package/dist/auth/methods/recovery.d.ts.map +1 -0
  61. package/dist/auth/methods/recovery.js +100 -0
  62. package/dist/auth/methods/recovery.js.map +1 -0
  63. package/dist/auth/mock-auth.d.ts +135 -0
  64. package/dist/auth/mock-auth.d.ts.map +1 -0
  65. package/dist/auth/mock-auth.js +417 -0
  66. package/dist/auth/mock-auth.js.map +1 -0
  67. package/dist/auth/server/helpers.d.ts +215 -0
  68. package/dist/auth/server/helpers.d.ts.map +1 -0
  69. package/dist/auth/server/helpers.js +241 -0
  70. package/dist/auth/server/helpers.js.map +1 -0
  71. package/dist/auth/server/index.d.ts +24 -0
  72. package/dist/auth/server/index.d.ts.map +1 -0
  73. package/dist/auth/server/index.js +40 -0
  74. package/dist/auth/server/index.js.map +1 -0
  75. package/dist/auth/server/middleware.d.ts +305 -0
  76. package/dist/auth/server/middleware.d.ts.map +1 -0
  77. package/dist/auth/server/middleware.js +405 -0
  78. package/dist/auth/server/middleware.js.map +1 -0
  79. package/dist/auth/server/verify.d.ts +184 -0
  80. package/dist/auth/server/verify.d.ts.map +1 -0
  81. package/dist/auth/server/verify.js +222 -0
  82. package/dist/auth/server/verify.js.map +1 -0
  83. package/dist/auth/token-manager.d.ts +94 -0
  84. package/dist/auth/token-manager.d.ts.map +1 -0
  85. package/dist/auth/token-manager.js +231 -0
  86. package/dist/auth/token-manager.js.map +1 -0
  87. package/dist/auth/types.d.ts +412 -0
  88. package/dist/auth/types.d.ts.map +1 -0
  89. package/dist/auth/types.js +66 -0
  90. package/dist/auth/types.js.map +1 -0
  91. package/dist/auth/user/identities.d.ts +62 -0
  92. package/dist/auth/user/identities.d.ts.map +1 -0
  93. package/dist/auth/user/identities.js +88 -0
  94. package/dist/auth/user/identities.js.map +1 -0
  95. package/dist/auth/user/index.d.ts +4 -0
  96. package/dist/auth/user/index.d.ts.map +1 -0
  97. package/dist/auth/user/index.js +4 -0
  98. package/dist/auth/user/index.js.map +1 -0
  99. package/dist/auth/user/user.d.ts +64 -0
  100. package/dist/auth/user/user.d.ts.map +1 -0
  101. package/dist/auth/user/user.js +105 -0
  102. package/dist/auth/user/user.js.map +1 -0
  103. package/dist/auth/user/verification.d.ts +49 -0
  104. package/dist/auth/user/verification.d.ts.map +1 -0
  105. package/dist/auth/user/verification.js +71 -0
  106. package/dist/auth/user/verification.js.map +1 -0
  107. package/dist/cli/browser.d.ts +11 -0
  108. package/dist/cli/browser.d.ts.map +1 -0
  109. package/dist/cli/browser.js +35 -0
  110. package/dist/cli/browser.js.map +1 -0
  111. package/dist/cli/callback-server.d.ts +30 -0
  112. package/dist/cli/callback-server.d.ts.map +1 -0
  113. package/dist/cli/callback-server.js +100 -0
  114. package/dist/cli/callback-server.js.map +1 -0
  115. package/dist/cli/file-token-store.d.ts +79 -0
  116. package/dist/cli/file-token-store.d.ts.map +1 -0
  117. package/dist/cli/file-token-store.js +138 -0
  118. package/dist/cli/file-token-store.js.map +1 -0
  119. package/dist/cli/index.d.ts +33 -0
  120. package/dist/cli/index.d.ts.map +1 -0
  121. package/dist/cli/index.js +38 -0
  122. package/dist/cli/index.js.map +1 -0
  123. package/dist/cli/oauth.d.ts +67 -0
  124. package/dist/cli/oauth.d.ts.map +1 -0
  125. package/dist/cli/oauth.js +101 -0
  126. package/dist/cli/oauth.js.map +1 -0
  127. package/dist/cli/pkce.d.ts +35 -0
  128. package/dist/cli/pkce.d.ts.map +1 -0
  129. package/dist/cli/pkce.js +43 -0
  130. package/dist/cli/pkce.js.map +1 -0
  131. package/dist/client.d.ts +22 -0
  132. package/dist/client.d.ts.map +1 -0
  133. package/dist/client.js +99 -0
  134. package/dist/client.js.map +1 -0
  135. package/dist/db/client.d.ts +9 -0
  136. package/dist/db/client.d.ts.map +1 -0
  137. package/dist/db/client.js +19 -0
  138. package/dist/db/client.js.map +1 -0
  139. package/dist/db/errors.d.ts +19 -0
  140. package/dist/db/errors.d.ts.map +1 -0
  141. package/dist/db/errors.js +57 -0
  142. package/dist/db/errors.js.map +1 -0
  143. package/dist/db/index.d.ts +7 -0
  144. package/dist/db/index.d.ts.map +1 -0
  145. package/dist/db/index.js +5 -0
  146. package/dist/db/index.js.map +1 -0
  147. package/dist/db/mock.d.ts +28 -0
  148. package/dist/db/mock.d.ts.map +1 -0
  149. package/dist/db/mock.js +459 -0
  150. package/dist/db/mock.js.map +1 -0
  151. package/dist/db/types.d.ts +73 -0
  152. package/dist/db/types.d.ts.map +1 -0
  153. package/dist/db/types.js +2 -0
  154. package/dist/db/types.js.map +1 -0
  155. package/dist/index.d.ts +21 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +20 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/lib/errors.d.ts +33 -0
  160. package/dist/lib/errors.d.ts.map +1 -0
  161. package/dist/lib/errors.js +76 -0
  162. package/dist/lib/errors.js.map +1 -0
  163. package/dist/lib/http.d.ts +81 -0
  164. package/dist/lib/http.d.ts.map +1 -0
  165. package/dist/lib/http.js +163 -0
  166. package/dist/lib/http.js.map +1 -0
  167. package/dist/lib/keys.d.ts +87 -0
  168. package/dist/lib/keys.d.ts.map +1 -0
  169. package/dist/lib/keys.js +147 -0
  170. package/dist/lib/keys.js.map +1 -0
  171. package/dist/lib/paths.d.ts +37 -0
  172. package/dist/lib/paths.d.ts.map +1 -0
  173. package/dist/lib/paths.js +49 -0
  174. package/dist/lib/paths.js.map +1 -0
  175. package/dist/lib/token-store.d.ts +42 -0
  176. package/dist/lib/token-store.d.ts.map +1 -0
  177. package/dist/lib/token-store.js +75 -0
  178. package/dist/lib/token-store.js.map +1 -0
  179. package/dist/mocks/handlers.d.ts +29 -0
  180. package/dist/mocks/handlers.d.ts.map +1 -0
  181. package/dist/mocks/handlers.js +79 -0
  182. package/dist/mocks/handlers.js.map +1 -0
  183. package/dist/mocks/index.d.ts +5 -0
  184. package/dist/mocks/index.d.ts.map +1 -0
  185. package/dist/mocks/index.js +9 -0
  186. package/dist/mocks/index.js.map +1 -0
  187. package/dist/mocks/responses.d.ts +76 -0
  188. package/dist/mocks/responses.d.ts.map +1 -0
  189. package/dist/mocks/responses.js +91 -0
  190. package/dist/mocks/responses.js.map +1 -0
  191. package/dist/mocks/server.d.ts +7 -0
  192. package/dist/mocks/server.d.ts.map +1 -0
  193. package/dist/mocks/server.js +9 -0
  194. package/dist/mocks/server.js.map +1 -0
  195. package/dist/mocks/state.d.ts +86 -0
  196. package/dist/mocks/state.d.ts.map +1 -0
  197. package/dist/mocks/state.js +77 -0
  198. package/dist/mocks/state.js.map +1 -0
  199. package/dist/storage/bucket-ref.d.ts +183 -0
  200. package/dist/storage/bucket-ref.d.ts.map +1 -0
  201. package/dist/storage/bucket-ref.js +529 -0
  202. package/dist/storage/bucket-ref.js.map +1 -0
  203. package/dist/storage/errors.d.ts +27 -0
  204. package/dist/storage/errors.d.ts.map +1 -0
  205. package/dist/storage/errors.js +89 -0
  206. package/dist/storage/errors.js.map +1 -0
  207. package/dist/storage/index.d.ts +13 -0
  208. package/dist/storage/index.d.ts.map +1 -0
  209. package/dist/storage/index.js +11 -0
  210. package/dist/storage/index.js.map +1 -0
  211. package/dist/storage/interface.d.ts +245 -0
  212. package/dist/storage/interface.d.ts.map +1 -0
  213. package/dist/storage/interface.js +2 -0
  214. package/dist/storage/interface.js.map +1 -0
  215. package/dist/storage/mock-storage.d.ts +67 -0
  216. package/dist/storage/mock-storage.d.ts.map +1 -0
  217. package/dist/storage/mock-storage.js +478 -0
  218. package/dist/storage/mock-storage.js.map +1 -0
  219. package/dist/storage/policies-client.d.ts +77 -0
  220. package/dist/storage/policies-client.d.ts.map +1 -0
  221. package/dist/storage/policies-client.js +115 -0
  222. package/dist/storage/policies-client.js.map +1 -0
  223. package/dist/storage/policy-templates.d.ts +6 -0
  224. package/dist/storage/policy-templates.d.ts.map +1 -0
  225. package/dist/storage/policy-templates.js +290 -0
  226. package/dist/storage/policy-templates.js.map +1 -0
  227. package/dist/storage/policy-types.d.ts +98 -0
  228. package/dist/storage/policy-types.d.ts.map +1 -0
  229. package/dist/storage/policy-types.js +20 -0
  230. package/dist/storage/policy-types.js.map +1 -0
  231. package/dist/storage/storage-client.d.ts +32 -0
  232. package/dist/storage/storage-client.d.ts.map +1 -0
  233. package/dist/storage/storage-client.js +94 -0
  234. package/dist/storage/storage-client.js.map +1 -0
  235. package/dist/storage/tus-upload.d.ts +56 -0
  236. package/dist/storage/tus-upload.d.ts.map +1 -0
  237. package/dist/storage/tus-upload.js +236 -0
  238. package/dist/storage/tus-upload.js.map +1 -0
  239. package/dist/storage/types.d.ts +335 -0
  240. package/dist/storage/types.d.ts.map +1 -0
  241. package/dist/storage/types.js +39 -0
  242. package/dist/storage/types.js.map +1 -0
  243. package/dist/test/auth/helpers.d.ts +33 -0
  244. package/dist/test/auth/helpers.d.ts.map +1 -0
  245. package/dist/test/auth/helpers.js +80 -0
  246. package/dist/test/auth/helpers.js.map +1 -0
  247. package/dist/test/helpers/jwt.d.ts +61 -0
  248. package/dist/test/helpers/jwt.d.ts.map +1 -0
  249. package/dist/test/helpers/jwt.js +132 -0
  250. package/dist/test/helpers/jwt.js.map +1 -0
  251. package/dist/test/helpers/mailpit.d.ts +61 -0
  252. package/dist/test/helpers/mailpit.d.ts.map +1 -0
  253. package/dist/test/helpers/mailpit.js +107 -0
  254. package/dist/test/helpers/mailpit.js.map +1 -0
  255. package/dist/test/setup.d.ts +2 -0
  256. package/dist/test/setup.d.ts.map +1 -0
  257. package/dist/test/setup.js +17 -0
  258. package/dist/test/setup.js.map +1 -0
  259. package/dist/types.d.ts +96 -0
  260. package/dist/types.d.ts.map +1 -0
  261. package/dist/types.js +5 -0
  262. package/dist/types.js.map +1 -0
  263. package/package.json +78 -0
@@ -0,0 +1,94 @@
1
+ import { storagePath } from "../lib/paths.js";
2
+ import { BucketRef } from "./bucket-ref.js";
3
+ import { normalizeBucket, } from "./types.js";
4
+ import { StoragePoliciesClient, } from "./policies-client.js";
5
+ /**
6
+ * Storage client for bucket and object operations
7
+ */
8
+ export class StorageClient {
9
+ http;
10
+ tenantId;
11
+ /** Policies client (null if accountId not provided) */
12
+ policies;
13
+ constructor(config) {
14
+ this.http = config.http;
15
+ this.tenantId = config.tenantId;
16
+ // Initialize policies client only if accountId is provided
17
+ if (config.accountId) {
18
+ this.policies = new StoragePoliciesClient({
19
+ http: config.http,
20
+ tenantId: config.tenantId,
21
+ accountId: config.accountId,
22
+ });
23
+ }
24
+ else {
25
+ this.policies = null;
26
+ }
27
+ }
28
+ path(endpoint) {
29
+ return storagePath(this.tenantId, endpoint);
30
+ }
31
+ async listBuckets() {
32
+ const response = await this.http.rawRequest(this.path("/bucket"), {
33
+ method: "GET",
34
+ });
35
+ const data = (await response.json());
36
+ return data.map(normalizeBucket);
37
+ }
38
+ async getBucket(id) {
39
+ const response = await this.http.rawRequest(this.path(`/bucket/${id}`), {
40
+ method: "GET",
41
+ });
42
+ const data = (await response.json());
43
+ return normalizeBucket(data);
44
+ }
45
+ async createBucket(options) {
46
+ await this.http.rawRequest(this.path("/bucket"), {
47
+ method: "POST",
48
+ headers: {
49
+ "Content-Type": "application/json",
50
+ },
51
+ body: JSON.stringify({
52
+ name: options.name,
53
+ id: options.id ?? options.name,
54
+ public: options.public ?? false,
55
+ file_size_limit: options.fileSizeLimit,
56
+ allowed_mime_types: options.allowedMimeTypes,
57
+ }),
58
+ });
59
+ // Fetch the created bucket to return full details
60
+ return this.getBucket(options.id ?? options.name);
61
+ }
62
+ async updateBucket(id, options) {
63
+ await this.http.rawRequest(this.path(`/bucket/${id}`), {
64
+ method: "PUT",
65
+ headers: {
66
+ "Content-Type": "application/json",
67
+ },
68
+ body: JSON.stringify({
69
+ public: options.public,
70
+ file_size_limit: options.fileSizeLimit,
71
+ allowed_mime_types: options.allowedMimeTypes,
72
+ }),
73
+ });
74
+ return this.getBucket(id);
75
+ }
76
+ async deleteBucket(id) {
77
+ await this.http.rawRequest(this.path(`/bucket/${id}`), {
78
+ method: "DELETE",
79
+ });
80
+ }
81
+ async emptyBucket(id) {
82
+ await this.http.rawRequest(this.path(`/bucket/${id}/empty`), {
83
+ method: "POST",
84
+ headers: {
85
+ "Content-Type": "application/json",
86
+ },
87
+ body: JSON.stringify({}),
88
+ });
89
+ }
90
+ from(bucketId) {
91
+ return new BucketRef(this.http, this.tenantId, bucketId);
92
+ }
93
+ }
94
+ //# sourceMappingURL=storage-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-client.js","sourceRoot":"","sources":["../../src/storage/storage-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { HttpClient } from "../lib/http.js";
2
+ import type { FileBody, TusUpload, TusUploadOptions, UploadResult } from "./types.js";
3
+ /**
4
+ * TUS resumable upload implementation
5
+ */
6
+ export declare class TusUploadImpl implements TusUpload {
7
+ private readonly http;
8
+ private readonly tenantId;
9
+ private readonly bucketId;
10
+ private readonly path;
11
+ private readonly file;
12
+ private readonly options;
13
+ private uploadUrl;
14
+ private offset;
15
+ private isPaused;
16
+ private isAborted;
17
+ private chunkSize;
18
+ constructor(http: HttpClient, tenantId: string, bucketId: string, path: string, file: FileBody, options?: TusUploadOptions);
19
+ private toBlob;
20
+ private buildPath;
21
+ private encodeMetadata;
22
+ private reportProgress;
23
+ /**
24
+ * Create the TUS upload and get the upload URL
25
+ */
26
+ private createUpload;
27
+ /**
28
+ * Upload a chunk to the server
29
+ */
30
+ private uploadChunk;
31
+ /**
32
+ * Get the current offset from the server (for resuming)
33
+ */
34
+ private getOffset;
35
+ /**
36
+ * Start the upload
37
+ */
38
+ start(): Promise<UploadResult>;
39
+ /**
40
+ * Pause the upload
41
+ */
42
+ pause(): void;
43
+ /**
44
+ * Resume a paused upload
45
+ */
46
+ resume(): Promise<UploadResult>;
47
+ /**
48
+ * Abort the upload
49
+ */
50
+ abort(): Promise<void>;
51
+ }
52
+ /**
53
+ * Create a TUS upload controller
54
+ */
55
+ export declare function createTusUpload(http: HttpClient, tenantId: string, bucketId: string, path: string, file: FileBody, options?: TusUploadOptions): TusUpload;
56
+ //# sourceMappingURL=tus-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tus-upload.d.ts","sourceRoot":"","sources":["../../src/storage/tus-upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,gBAAgB,EAEhB,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB;;GAEG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAS;gBAGxB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,gBAAqB;IAahC,OAAO,CAAC,MAAM;IAkBd,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;IAWtB;;OAEG;YACW,YAAY;IAqC1B;;OAEG;YACW,WAAW;IA4BzB;;OAEG;YACW,SAAS;IAgBvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;IAgDpC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAoBrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,SAAS,CAEX"}
@@ -0,0 +1,236 @@
1
+ import { storagePath } from "../lib/paths.js";
2
+ import { StorageError } from "./errors.js";
3
+ const TUS_RESUMABLE_VERSION = "1.0.0";
4
+ const DEFAULT_CHUNK_SIZE = 6 * 1024 * 1024; // 6MB
5
+ /**
6
+ * TUS resumable upload implementation
7
+ */
8
+ export class TusUploadImpl {
9
+ http;
10
+ tenantId;
11
+ bucketId;
12
+ path;
13
+ file;
14
+ options;
15
+ uploadUrl = null;
16
+ offset = 0;
17
+ isPaused = false;
18
+ isAborted = false;
19
+ chunkSize;
20
+ constructor(http, tenantId, bucketId, path, file, options = {}) {
21
+ this.http = http;
22
+ this.tenantId = tenantId;
23
+ this.bucketId = bucketId;
24
+ this.path = path;
25
+ this.options = options;
26
+ this.chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE;
27
+ // Convert FileBody to Blob
28
+ this.file = this.toBlob(file);
29
+ }
30
+ toBlob(file) {
31
+ if (file instanceof Blob) {
32
+ return file;
33
+ }
34
+ if (file instanceof ArrayBuffer) {
35
+ return new Blob([file]);
36
+ }
37
+ if (typeof file === "string") {
38
+ return new Blob([file], { type: "text/plain" });
39
+ }
40
+ // ReadableStream - not directly supported for TUS, would need to buffer
41
+ throw new StorageError("ReadableStream is not supported for resumable uploads. Use a Blob or File instead.", "invalid_file_type", 400);
42
+ }
43
+ buildPath(endpoint) {
44
+ return storagePath(this.tenantId, endpoint);
45
+ }
46
+ encodeMetadata(metadata) {
47
+ return Object.entries(metadata)
48
+ .map(([key, value]) => `${key} ${btoa(value)}`)
49
+ .join(",");
50
+ }
51
+ reportProgress() {
52
+ if (this.options.onProgress) {
53
+ const progress = {
54
+ bytesUploaded: this.offset,
55
+ bytesTotal: this.file.size,
56
+ percentage: Math.round((this.offset / this.file.size) * 100),
57
+ };
58
+ this.options.onProgress(progress);
59
+ }
60
+ }
61
+ /**
62
+ * Create the TUS upload and get the upload URL
63
+ */
64
+ async createUpload() {
65
+ const metadata = {
66
+ bucketName: this.bucketId,
67
+ objectName: this.path,
68
+ contentType: this.file.type || "application/octet-stream",
69
+ ...this.options.metadata,
70
+ };
71
+ const response = await this.http.rawRequest(this.buildPath(`/upload/resumable`), {
72
+ method: "POST",
73
+ headers: {
74
+ "Tus-Resumable": TUS_RESUMABLE_VERSION,
75
+ "Upload-Length": String(this.file.size),
76
+ "Upload-Metadata": this.encodeMetadata(metadata),
77
+ },
78
+ });
79
+ const location = response.headers.get("Location");
80
+ if (!location) {
81
+ throw StorageError.uploadFailed("No upload location returned");
82
+ }
83
+ // Handle both relative and absolute URLs
84
+ // If absolute, extract path and use our base URL (fixes internal hostname issue)
85
+ if (location.startsWith("http")) {
86
+ const url = new URL(location);
87
+ // Location header returns /upload/resumable/{id}, but we need /storage/{tenantId}/upload/resumable/{id}
88
+ // Extract the upload ID and rebuild the full path
89
+ const uploadId = url.pathname.split("/upload/resumable/")[1];
90
+ return this.buildPath(`/upload/resumable/${uploadId}${url.search}`);
91
+ }
92
+ return location;
93
+ }
94
+ /**
95
+ * Upload a chunk to the server
96
+ */
97
+ async uploadChunk() {
98
+ if (!this.uploadUrl) {
99
+ throw StorageError.uploadFailed("No upload URL available");
100
+ }
101
+ const end = Math.min(this.offset + this.chunkSize, this.file.size);
102
+ const chunk = this.file.slice(this.offset, end);
103
+ const response = await this.http.rawRequest(this.uploadUrl, {
104
+ method: "PATCH",
105
+ headers: {
106
+ "Tus-Resumable": TUS_RESUMABLE_VERSION,
107
+ "Upload-Offset": String(this.offset),
108
+ "Content-Type": "application/offset+octet-stream",
109
+ },
110
+ body: chunk,
111
+ });
112
+ const newOffset = response.headers.get("Upload-Offset");
113
+ if (newOffset) {
114
+ this.offset = parseInt(newOffset, 10);
115
+ }
116
+ else {
117
+ this.offset = end;
118
+ }
119
+ this.reportProgress();
120
+ }
121
+ /**
122
+ * Get the current offset from the server (for resuming)
123
+ */
124
+ async getOffset() {
125
+ if (!this.uploadUrl) {
126
+ throw StorageError.uploadFailed("No upload URL available");
127
+ }
128
+ const response = await this.http.rawRequest(this.uploadUrl, {
129
+ method: "HEAD",
130
+ headers: {
131
+ "Tus-Resumable": TUS_RESUMABLE_VERSION,
132
+ },
133
+ });
134
+ const offset = response.headers.get("Upload-Offset");
135
+ return offset ? parseInt(offset, 10) : 0;
136
+ }
137
+ /**
138
+ * Start the upload
139
+ */
140
+ async start() {
141
+ try {
142
+ this.isAborted = false;
143
+ this.isPaused = false;
144
+ // Create the upload if we don't have a URL
145
+ if (!this.uploadUrl) {
146
+ this.uploadUrl = await this.createUpload();
147
+ this.offset = 0;
148
+ }
149
+ // Upload chunks until complete or paused
150
+ while (this.offset < this.file.size &&
151
+ !this.isPaused &&
152
+ !this.isAborted) {
153
+ await this.uploadChunk();
154
+ }
155
+ if (this.isAborted) {
156
+ throw StorageError.uploadAborted();
157
+ }
158
+ if (this.isPaused) {
159
+ // Return a placeholder - actual result comes from resume()
160
+ throw new Error("Upload paused");
161
+ }
162
+ const result = {
163
+ id: "", // TUS doesn't return an ID directly
164
+ path: this.path,
165
+ fullPath: `${this.bucketId}/${this.path}`,
166
+ };
167
+ if (this.options.onSuccess) {
168
+ this.options.onSuccess(result);
169
+ }
170
+ return result;
171
+ }
172
+ catch (error) {
173
+ if (this.options.onError && error instanceof Error) {
174
+ this.options.onError(error);
175
+ }
176
+ throw error;
177
+ }
178
+ }
179
+ /**
180
+ * Pause the upload
181
+ */
182
+ pause() {
183
+ this.isPaused = true;
184
+ }
185
+ /**
186
+ * Resume a paused upload
187
+ */
188
+ async resume() {
189
+ try {
190
+ this.isPaused = false;
191
+ this.isAborted = false;
192
+ // Get current offset from server
193
+ if (this.uploadUrl) {
194
+ this.offset = await this.getOffset();
195
+ }
196
+ // Continue uploading
197
+ return await this.start();
198
+ }
199
+ catch (error) {
200
+ if (this.options.onError && error instanceof Error) {
201
+ this.options.onError(error);
202
+ }
203
+ throw error;
204
+ }
205
+ }
206
+ /**
207
+ * Abort the upload
208
+ */
209
+ async abort() {
210
+ this.isAborted = true;
211
+ this.isPaused = false;
212
+ // Try to delete the upload on the server
213
+ if (this.uploadUrl) {
214
+ try {
215
+ await this.http.rawRequest(this.uploadUrl, {
216
+ method: "DELETE",
217
+ headers: {
218
+ "Tus-Resumable": TUS_RESUMABLE_VERSION,
219
+ },
220
+ });
221
+ }
222
+ catch {
223
+ // Ignore errors during abort - the upload may already be gone
224
+ }
225
+ }
226
+ this.uploadUrl = null;
227
+ this.offset = 0;
228
+ }
229
+ }
230
+ /**
231
+ * Create a TUS upload controller
232
+ */
233
+ export function createTusUpload(http, tenantId, bucketId, path, file, options) {
234
+ return new TusUploadImpl(http, tenantId, bucketId, path, file, options);
235
+ }
236
+ //# sourceMappingURL=tus-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tus-upload.js","sourceRoot":"","sources":["../../src/storage/tus-upload.ts"],"names":[],"mappings":"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"}