@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,335 @@
1
+ /**
2
+ * Normalized bucket metadata (camelCase)
3
+ */
4
+ export interface Bucket {
5
+ id: string;
6
+ name: string;
7
+ owner: string | null;
8
+ public: boolean;
9
+ fileSizeLimit: number | null;
10
+ allowedMimeTypes: string[] | null;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ }
14
+ /**
15
+ * Options for creating a bucket
16
+ */
17
+ export interface CreateBucketOptions {
18
+ /** Bucket name (also used as ID if id not specified) */
19
+ name: string;
20
+ /** Optional bucket ID (defaults to name) */
21
+ id?: string;
22
+ /** Whether the bucket is public (default: false) */
23
+ public?: boolean;
24
+ /** Max file size in bytes (null = no limit) */
25
+ fileSizeLimit?: number | null;
26
+ /** Allowed MIME types (null = all types) */
27
+ allowedMimeTypes?: string[] | null;
28
+ }
29
+ /**
30
+ * Options for updating a bucket
31
+ */
32
+ export interface UpdateBucketOptions {
33
+ /** Whether the bucket is public */
34
+ public?: boolean;
35
+ /** Max file size in bytes */
36
+ fileSizeLimit?: number | null;
37
+ /** Allowed MIME types */
38
+ allowedMimeTypes?: string[] | null;
39
+ }
40
+ /**
41
+ * Raw bucket response from API (snake_case)
42
+ */
43
+ export interface ApiBucket {
44
+ id: string;
45
+ name: string;
46
+ owner: string | null;
47
+ owner_id: string | null;
48
+ public: boolean;
49
+ file_size_limit: number | null;
50
+ allowed_mime_types: string[] | null;
51
+ created_at: string;
52
+ updated_at: string;
53
+ }
54
+ /**
55
+ * Normalized storage object metadata (camelCase)
56
+ */
57
+ export interface StorageObject {
58
+ id: string | null;
59
+ name: string;
60
+ bucketId: string;
61
+ owner: string | null;
62
+ version: string | null;
63
+ createdAt: string | null;
64
+ updatedAt: string | null;
65
+ lastAccessedAt: string | null;
66
+ metadata: ObjectMetadata | null;
67
+ userMetadata: Record<string, string> | null;
68
+ }
69
+ /**
70
+ * Object metadata (size, mimetype, etc.)
71
+ */
72
+ export interface ObjectMetadata {
73
+ size?: number;
74
+ mimetype?: string;
75
+ cacheControl?: string;
76
+ eTag?: string;
77
+ contentLength?: number;
78
+ httpStatusCode?: number;
79
+ lastModified?: string;
80
+ }
81
+ /**
82
+ * Raw object response from API (snake_case)
83
+ */
84
+ export interface ApiObject {
85
+ id: string | null;
86
+ name: string;
87
+ bucket_id: string;
88
+ owner: string | null;
89
+ owner_id: string | null;
90
+ version: string | null;
91
+ created_at: string | null;
92
+ updated_at: string | null;
93
+ last_accessed_at: string | null;
94
+ metadata: Record<string, unknown> | null;
95
+ user_metadata: Record<string, string> | null;
96
+ }
97
+ /**
98
+ * Supported file body types for upload
99
+ */
100
+ export type FileBody = Blob | File | ArrayBuffer | ReadableStream<Uint8Array> | string;
101
+ /**
102
+ * Progress callback data for uploads
103
+ */
104
+ export interface UploadProgress {
105
+ /** Bytes uploaded so far */
106
+ bytesUploaded: number;
107
+ /** Total bytes to upload */
108
+ bytesTotal: number;
109
+ /** Progress percentage (0-100) */
110
+ percentage: number;
111
+ }
112
+ /**
113
+ * Options for uploading a file
114
+ */
115
+ export interface UploadOptions {
116
+ /** Cache-Control header */
117
+ cacheControl?: string;
118
+ /** Content-Type (auto-detected if not provided) */
119
+ contentType?: string;
120
+ /** Whether to upsert if file exists (default: false) */
121
+ upsert?: boolean;
122
+ /** Custom user metadata */
123
+ metadata?: Record<string, string>;
124
+ /** Progress callback (uses XHR instead of fetch when provided) */
125
+ onProgress?: (progress: UploadProgress) => void;
126
+ }
127
+ /**
128
+ * Result of a successful upload
129
+ */
130
+ export interface UploadResult {
131
+ /** Object UUID */
132
+ id: string;
133
+ /** Object path within bucket */
134
+ path: string;
135
+ /** Full path including bucket */
136
+ fullPath: string;
137
+ }
138
+ /**
139
+ * Options for downloading a file
140
+ */
141
+ export interface DownloadOptions {
142
+ /** Transform image on download */
143
+ transform?: ImageTransformOptions;
144
+ }
145
+ /**
146
+ * Image transformation options
147
+ */
148
+ export interface ImageTransformOptions {
149
+ /** Target width in pixels */
150
+ width?: number;
151
+ /** Target height in pixels */
152
+ height?: number;
153
+ /** Resize mode */
154
+ resize?: "cover" | "contain" | "fill";
155
+ /** Output format */
156
+ format?: "origin" | "avif" | "webp";
157
+ /** Quality (1-100) */
158
+ quality?: number;
159
+ }
160
+ /**
161
+ * Options for listing objects (v1 - offset pagination)
162
+ */
163
+ export interface ListOptions {
164
+ /** Folder prefix to filter by */
165
+ prefix?: string;
166
+ /** Max number of results (default: 100) */
167
+ limit?: number;
168
+ /** Offset for pagination */
169
+ offset?: number;
170
+ /** Sort configuration */
171
+ sortBy?: {
172
+ column: "name" | "updated_at" | "created_at" | "last_accessed_at";
173
+ order?: "asc" | "desc";
174
+ };
175
+ /** Search term */
176
+ search?: string;
177
+ }
178
+ /**
179
+ * Options for listing objects (v2 - cursor pagination)
180
+ */
181
+ export interface ListV2Options {
182
+ /** Folder prefix to filter by */
183
+ prefix?: string;
184
+ /** Max number of results (default: 100) */
185
+ limit?: number;
186
+ /** Cursor for pagination (from previous response) */
187
+ cursor?: string;
188
+ /** Whether to use delimiter for folder-like listing */
189
+ delimiter?: boolean;
190
+ /** Sort configuration */
191
+ sortBy?: {
192
+ column: "name" | "updated_at" | "created_at";
193
+ order?: "asc" | "desc";
194
+ };
195
+ }
196
+ /**
197
+ * Result of listing objects (v2)
198
+ */
199
+ export interface ListV2Result {
200
+ /** Objects in the result */
201
+ objects: StorageObject[];
202
+ /** Folders/prefixes (when delimiter is true) */
203
+ prefixes: string[];
204
+ /** Cursor for next page (null if no more results) */
205
+ nextCursor: string | null;
206
+ }
207
+ /**
208
+ * Options for creating a signed download URL
209
+ */
210
+ export interface SignedUrlOptions {
211
+ /** URL expiration in seconds */
212
+ expiresIn: number;
213
+ /** Image transformation options */
214
+ transform?: ImageTransformOptions;
215
+ /** Force download with filename (true = use original name) */
216
+ download?: string | boolean;
217
+ }
218
+ /**
219
+ * Options for creating a signed upload URL
220
+ */
221
+ export interface SignedUploadUrlOptions {
222
+ /** Whether to upsert if file exists */
223
+ upsert?: boolean;
224
+ }
225
+ /**
226
+ * Signed URL result
227
+ */
228
+ export interface SignedUrl {
229
+ /** Full signed URL */
230
+ signedUrl: string;
231
+ /** Token component of the URL */
232
+ token?: string;
233
+ /** Object path */
234
+ path: string;
235
+ }
236
+ /**
237
+ * Signed upload URL result
238
+ */
239
+ export interface SignedUploadUrl {
240
+ /** Full signed URL for upload */
241
+ signedUrl: string;
242
+ /** Token to use for upload */
243
+ token: string;
244
+ /** Object path */
245
+ path: string;
246
+ }
247
+ /**
248
+ * Options for moving an object
249
+ */
250
+ export interface MoveOptions {
251
+ /** Destination bucket (defaults to source bucket) */
252
+ destinationBucket?: string;
253
+ }
254
+ /**
255
+ * Options for copying an object
256
+ */
257
+ export interface CopyOptions {
258
+ /** Destination bucket (defaults to source bucket) */
259
+ destinationBucket?: string;
260
+ /** Whether to copy source metadata (default: true) */
261
+ copyMetadata?: boolean;
262
+ /** Override metadata */
263
+ metadata?: {
264
+ cacheControl?: string;
265
+ contentType?: string;
266
+ };
267
+ /** Whether to upsert if destination exists */
268
+ upsert?: boolean;
269
+ }
270
+ /**
271
+ * Result of copying an object
272
+ */
273
+ export interface CopyResult {
274
+ /** Object UUID */
275
+ id: string;
276
+ /** Full path of the copied object */
277
+ path: string;
278
+ }
279
+ /**
280
+ * Progress callback data for TUS uploads
281
+ */
282
+ export interface TusProgress {
283
+ /** Bytes uploaded so far */
284
+ bytesUploaded: number;
285
+ /** Total bytes to upload */
286
+ bytesTotal: number;
287
+ /** Progress percentage (0-100) */
288
+ percentage: number;
289
+ }
290
+ /**
291
+ * Options for creating a TUS resumable upload
292
+ */
293
+ export interface TusUploadOptions {
294
+ /** Chunk size in bytes (default: 6MB) */
295
+ chunkSize?: number;
296
+ /** Custom metadata to include */
297
+ metadata?: Record<string, string>;
298
+ /** Progress callback */
299
+ onProgress?: (progress: TusProgress) => void;
300
+ /** Error callback */
301
+ onError?: (error: Error) => void;
302
+ /** Success callback */
303
+ onSuccess?: (result: UploadResult) => void;
304
+ }
305
+ /**
306
+ * TUS upload controller
307
+ */
308
+ export interface TusUpload {
309
+ /** Start the upload */
310
+ start(): Promise<UploadResult>;
311
+ /** Pause the upload */
312
+ pause(): void;
313
+ /** Resume a paused upload */
314
+ resume(): Promise<UploadResult>;
315
+ /** Abort the upload */
316
+ abort(): Promise<void>;
317
+ }
318
+ /**
319
+ * Options for getting a public URL
320
+ */
321
+ export interface PublicUrlOptions {
322
+ /** Image transformation options */
323
+ transform?: ImageTransformOptions;
324
+ /** Force download with filename */
325
+ download?: string | boolean;
326
+ }
327
+ /**
328
+ * Normalize API bucket response to SDK format
329
+ */
330
+ export declare function normalizeBucket(bucket: ApiBucket): Bucket;
331
+ /**
332
+ * Normalize API object response to SDK format
333
+ */
334
+ export declare function normalizeObject(obj: ApiObject): StorageObject;
335
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ // ============================================
2
+ // Bucket Types
3
+ // ============================================
4
+ // ============================================
5
+ // Normalizers
6
+ // ============================================
7
+ /**
8
+ * Normalize API bucket response to SDK format
9
+ */
10
+ export function normalizeBucket(bucket) {
11
+ return {
12
+ id: bucket.id,
13
+ name: bucket.name,
14
+ owner: bucket.owner,
15
+ public: bucket.public,
16
+ fileSizeLimit: bucket.file_size_limit,
17
+ allowedMimeTypes: bucket.allowed_mime_types,
18
+ createdAt: bucket.created_at,
19
+ updatedAt: bucket.updated_at,
20
+ };
21
+ }
22
+ /**
23
+ * Normalize API object response to SDK format
24
+ */
25
+ export function normalizeObject(obj) {
26
+ return {
27
+ id: obj.id,
28
+ name: obj.name,
29
+ bucketId: obj.bucket_id,
30
+ owner: obj.owner,
31
+ version: obj.version,
32
+ createdAt: obj.created_at,
33
+ updatedAt: obj.updated_at,
34
+ lastAccessedAt: obj.last_accessed_at,
35
+ metadata: obj.metadata,
36
+ userMetadata: obj.user_metadata,
37
+ };
38
+ }
39
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAwY/C,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,eAAe;QACrC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB;QAC3C,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,SAAS,EAAE,MAAM,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAc;IAC5C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,cAAc,EAAE,GAAG,CAAC,gBAAgB;QACpC,QAAQ,EAAE,GAAG,CAAC,QAAiC;QAC/C,YAAY,EAAE,GAAG,CAAC,aAAa;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { isMailpitAvailable, skipWithoutMailpit } from "../helpers/mailpit.js";
2
+ export declare const BASE_URL = "https://stack.test";
3
+ export declare const TEST_EMAIL = "test@example.com";
4
+ export declare const TEST_PASSWORD = "password123";
5
+ export declare const INTEGRATION_BASE_URL: string;
6
+ export declare const INTEGRATION_TENANT_ID: string;
7
+ export { isMailpitAvailable, skipWithoutMailpit };
8
+ /**
9
+ * Create a mock platform client for unit tests
10
+ */
11
+ export declare function createMockClient(): import("../../client.js").StackClient<Record<string, unknown>>;
12
+ /**
13
+ * Create a mock tenant client for unit tests
14
+ */
15
+ export declare function createMockTenantClient(tenantId?: string): import("../../client.js").StackClient<Record<string, unknown>>;
16
+ /**
17
+ * Create a real client for integration tests
18
+ */
19
+ export declare function createIntegrationClient(): import("../../client.js").StackClient<Record<string, unknown>>;
20
+ /**
21
+ * Generate unique email for integration tests
22
+ */
23
+ export declare function uniqueEmail(prefix?: string): string;
24
+ /**
25
+ * Skip condition for integration tests
26
+ */
27
+ export declare const skipIntegration: boolean;
28
+ /**
29
+ * Sign up a user and confirm their email via Mailpit OTP
30
+ * Requires MAILPIT_URL to be set
31
+ */
32
+ export declare function signUpAndConfirm(client: ReturnType<typeof createIntegrationClient>, email: string, password?: string): Promise<import("../../index.js").Session>;
33
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/test/auth/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,QAAQ,uBAAmB,CAAC;AACzC,eAAO,MAAM,UAAU,qBAAqB,CAAC;AAC7C,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAG3C,eAAO,MAAM,oBAAoB,QACiB,CAAC;AACnD,eAAO,MAAM,qBAAqB,QAAmC,CAAC;AAGtE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAElD;;GAEG;AACH,wBAAgB,gBAAgB,mEAM/B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,SAAgB,kEAO9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,mEAMtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,UAE1C;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,SAAyB,CAAC;AAEtD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,EAClD,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAsB,6CAyBjC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Shared test helpers for auth tests
3
+ */
4
+ import { createClient } from "../../index.js";
5
+ import { DEFAULT_BASE_URL } from "../../mocks/index.js";
6
+ import { waitForEmail, extractOtp, isMailpitAvailable, skipWithoutMailpit, } from "../helpers/mailpit.js";
7
+ export const BASE_URL = DEFAULT_BASE_URL;
8
+ export const TEST_EMAIL = "test@example.com";
9
+ export const TEST_PASSWORD = "password123";
10
+ // For integration tests - set via environment
11
+ export const INTEGRATION_BASE_URL = process.env.STACK_URL ?? "http://localhost:7300";
12
+ export const INTEGRATION_TENANT_ID = process.env.TENANT_ID ?? "alpha";
13
+ // Re-export mailpit helpers
14
+ export { isMailpitAvailable, skipWithoutMailpit };
15
+ /**
16
+ * Create a mock platform client for unit tests
17
+ */
18
+ export function createMockClient() {
19
+ return createClient({
20
+ baseUrl: BASE_URL,
21
+ tokenStore: "memory",
22
+ mock: true,
23
+ });
24
+ }
25
+ /**
26
+ * Create a mock tenant client for unit tests
27
+ */
28
+ export function createMockTenantClient(tenantId = "test-tenant") {
29
+ return createClient({
30
+ baseUrl: BASE_URL,
31
+ tenantId,
32
+ tokenStore: "memory",
33
+ mock: true,
34
+ });
35
+ }
36
+ /**
37
+ * Create a real client for integration tests
38
+ */
39
+ export function createIntegrationClient() {
40
+ return createClient({
41
+ baseUrl: INTEGRATION_BASE_URL,
42
+ tenantId: INTEGRATION_TENANT_ID,
43
+ tokenStore: "memory",
44
+ });
45
+ }
46
+ /**
47
+ * Generate unique email for integration tests
48
+ */
49
+ export function uniqueEmail(prefix = "test") {
50
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}@example.com`;
51
+ }
52
+ /**
53
+ * Skip condition for integration tests
54
+ */
55
+ export const skipIntegration = !process.env.STACK_URL;
56
+ /**
57
+ * Sign up a user and confirm their email via Mailpit OTP
58
+ * Requires MAILPIT_URL to be set
59
+ */
60
+ export async function signUpAndConfirm(client, email, password = TEST_PASSWORD) {
61
+ if (!isMailpitAvailable()) {
62
+ throw new Error("Mailpit not available - cannot confirm email");
63
+ }
64
+ // Sign up (will send confirmation email)
65
+ await client.auth.signUp({ email, password });
66
+ // Wait for confirmation email
67
+ const confirmEmail = await waitForEmail(email, { subject: "Confirm" });
68
+ const otp = extractOtp(confirmEmail);
69
+ if (!otp) {
70
+ throw new Error("Could not extract OTP from confirmation email");
71
+ }
72
+ // Verify with OTP
73
+ const session = await client.auth.verification.verify({
74
+ email,
75
+ token: otp,
76
+ type: "signup",
77
+ });
78
+ return session;
79
+ }
80
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/test/auth/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAE3C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,uBAAuB,CAAC;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;AAEtE,4BAA4B;AAC5B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAQ,GAAG,aAAa;IAC7D,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,QAAQ;QACjB,QAAQ;QACR,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,oBAAoB;QAC7B,QAAQ,EAAE,qBAAqB;QAC/B,UAAU,EAAE,QAAQ;KACrB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAM,GAAG,MAAM;IACzC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAkD,EAClD,KAAa,EACb,WAAmB,aAAa;IAEhC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,yCAAyC;IACzC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9C,8BAA8B;IAC9B,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAErC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACpD,KAAK;QACL,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * JWT generation helpers for tests (ES256)
3
+ *
4
+ * Uses ES256 (ECDSA P-256) to match production GoTrue configuration.
5
+ */
6
+ import * as jose from "jose";
7
+ export type JwtRole = "anon" | "authenticated" | "service_role";
8
+ /**
9
+ * Generate or retrieve the test ES256 keypair
10
+ */
11
+ export declare function getTestKeyPair(): Promise<jose.GenerateKeyPairResult>;
12
+ /**
13
+ * Get the test JWKS (for createLocalJWKS)
14
+ */
15
+ export declare function getTestJWKS(): Promise<jose.JSONWebKeySet>;
16
+ /**
17
+ * Reset test keys (for isolation between test suites if needed)
18
+ */
19
+ export declare function resetTestKeys(): void;
20
+ /**
21
+ * Generate an ES256 JWT token for testing
22
+ *
23
+ * @param role - The role (anon, authenticated, service_role)
24
+ * @param sub - Optional user ID for the sub claim
25
+ * @param options - Additional options (email, phone, aal)
26
+ * @returns Signed JWT token
27
+ */
28
+ export declare function generateJwt(role: JwtRole, sub?: string, options?: {
29
+ email?: string;
30
+ phone?: string;
31
+ aal?: "aal1" | "aal2";
32
+ }): Promise<string>;
33
+ /**
34
+ * Generate an expired ES256 JWT for testing expiration handling
35
+ */
36
+ export declare function generateExpiredJwt(role: JwtRole, sub?: string): Promise<string>;
37
+ /**
38
+ * Generate a JWT with custom audience
39
+ */
40
+ export declare function generateJwtWithAudience(role: JwtRole, sub: string, audience: string): Promise<string>;
41
+ /**
42
+ * Generate a JWT missing the sub claim (for testing validation)
43
+ */
44
+ export declare function generateJwtWithoutSub(role: JwtRole): Promise<string>;
45
+ /**
46
+ * Generate an anon JWT
47
+ */
48
+ export declare function generateAnonJwt(): Promise<string>;
49
+ /**
50
+ * Generate a service_role JWT (bypasses RLS)
51
+ */
52
+ export declare function generateServiceRoleJwt(): Promise<string>;
53
+ /**
54
+ * Generate an authenticated JWT for a specific user
55
+ */
56
+ export declare function generateAuthenticatedJwt(userId: string, options?: {
57
+ email?: string;
58
+ phone?: string;
59
+ aal?: "aal1" | "aal2";
60
+ }): Promise<string>;
61
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/test/helpers/jwt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,cAAc,CAAC;AAShE;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAM1E;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAU/D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,OAAO,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,EACb,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1E;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,MAAM,CAAC,CAEjB"}