@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,91 @@
1
+ /**
2
+ * Generate a valid JWT for testing
3
+ *
4
+ * Creates a properly structured JWT that can be decoded by the SDK.
5
+ * The signature is fake but the payload is valid.
6
+ */
7
+ export function generateTestJwt(options) {
8
+ const now = Math.floor(Date.now() / 1000);
9
+ const header = { alg: "ES256", typ: "JWT" };
10
+ const payload = {
11
+ sub: options.sub,
12
+ email: options.email,
13
+ exp: options.exp ?? now + 3600, // 1 hour
14
+ iat: options.iat ?? now,
15
+ aud: "authenticated",
16
+ role: "authenticated",
17
+ app_metadata: { provider: "email", providers: ["email"] },
18
+ user_metadata: { email: options.email },
19
+ };
20
+ const encode = (obj) => btoa(JSON.stringify(obj))
21
+ .replace(/=/g, "")
22
+ .replace(/\+/g, "-")
23
+ .replace(/\//g, "_");
24
+ // Fake signature (not verified in tests)
25
+ return `${encode(header)}.${encode(payload)}.fake-signature`;
26
+ }
27
+ /**
28
+ * Generate a user ID from an email address
29
+ */
30
+ export function generateUserId(email) {
31
+ return "user-" + email.replace("@", "-at-");
32
+ }
33
+ /**
34
+ * Create a GoTrue token response
35
+ *
36
+ * This is the single source of truth for mock token responses.
37
+ * Used by both MSW handlers (for SDK tests) and mock auth client (for developer tests).
38
+ */
39
+ export function createTokenResponse(options) {
40
+ const userId = generateUserId(options.email);
41
+ const now = Math.floor(Date.now() / 1000);
42
+ const expiresIn = options.expiresIn ?? 3600;
43
+ return {
44
+ access_token: generateTestJwt({ sub: userId, email: options.email }),
45
+ refresh_token: options.refreshToken ?? `refresh-token-${Date.now()}`,
46
+ expires_in: expiresIn,
47
+ expires_at: now + expiresIn,
48
+ token_type: "bearer",
49
+ user: {
50
+ id: userId,
51
+ aud: "authenticated",
52
+ email: options.email,
53
+ email_confirmed_at: new Date().toISOString(),
54
+ created_at: new Date().toISOString(),
55
+ updated_at: new Date().toISOString(),
56
+ app_metadata: { provider: "email", providers: ["email"] },
57
+ user_metadata: options.userMetadata ?? { email: options.email },
58
+ },
59
+ };
60
+ }
61
+ /**
62
+ * Standard error responses (GoTrue format)
63
+ */
64
+ export const errors = {
65
+ invalidCredentials: {
66
+ code: 401,
67
+ error_code: "invalid_credentials",
68
+ msg: "Invalid email or password",
69
+ },
70
+ userAlreadyExists: {
71
+ code: 422,
72
+ error_code: "user_already_exists",
73
+ msg: "User already registered",
74
+ },
75
+ invalidRefreshToken: {
76
+ code: 401,
77
+ error_code: "invalid_grant",
78
+ msg: "Invalid refresh token",
79
+ },
80
+ unauthorized: {
81
+ code: 401,
82
+ error_code: "unauthorized",
83
+ msg: "Missing or invalid authorization",
84
+ },
85
+ unsupportedGrantType: {
86
+ code: 400,
87
+ error_code: "unsupported_grant_type",
88
+ msg: "Unsupported grant type",
89
+ },
90
+ };
91
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/mocks/responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MSW server for Node.js tests
3
+ *
4
+ * Pre-configured with default handlers. For SDK internal tests only.
5
+ */
6
+ export declare const server: import("msw/node").SetupServerApi;
7
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mocks/server.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,MAAM,mCAA2B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { setupServer } from "msw/node";
2
+ import { handlers } from "./handlers.js";
3
+ /**
4
+ * MSW server for Node.js tests
5
+ *
6
+ * Pre-configured with default handlers. For SDK internal tests only.
7
+ */
8
+ export const server = setupServer(...handlers);
9
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mocks/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { type MockErrorResponse } from "./responses.js";
2
+ /**
3
+ * Mock configuration options
4
+ */
5
+ export interface MockOptions {
6
+ /** Artificial latency in milliseconds (default: 0) */
7
+ latency?: number;
8
+ }
9
+ /**
10
+ * Mock state for controlling behavior
11
+ *
12
+ * This state is shared between MSW handlers and mock auth client,
13
+ * ensuring consistent behavior across all mock implementations.
14
+ */
15
+ export interface MockState {
16
+ /** Whether signIn should fail */
17
+ shouldFailSignIn: boolean;
18
+ /** Whether signUp should fail */
19
+ shouldFailSignUp: boolean;
20
+ /** Whether refresh should fail */
21
+ shouldFailRefresh: boolean;
22
+ /** Error to return when signIn fails */
23
+ signInError: MockErrorResponse;
24
+ /** Error to return when signUp fails */
25
+ signUpError: MockErrorResponse;
26
+ /** Error to return when refresh fails */
27
+ refreshError: MockErrorResponse;
28
+ /** Artificial latency in milliseconds */
29
+ latency: number;
30
+ /** Reset all state to defaults */
31
+ reset(): void;
32
+ }
33
+ /**
34
+ * Request tracking for test assertions
35
+ */
36
+ export interface RequestCounts {
37
+ signIn: number;
38
+ signUp: number;
39
+ signOut: number;
40
+ refresh: number;
41
+ reset(): void;
42
+ }
43
+ /**
44
+ * Global mock state instance
45
+ *
46
+ * Use this to control mock behavior in tests:
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * import { mockState } from "@kaiz11/stack-client/mocks";
51
+ *
52
+ * // Make signIn fail
53
+ * mockState.shouldFailSignIn = true;
54
+ *
55
+ * // Custom error message
56
+ * mockState.signInError = {
57
+ * code: 429,
58
+ * error_code: "too_many_attempts",
59
+ * msg: "Too many login attempts",
60
+ * };
61
+ *
62
+ * // Reset after test
63
+ * mockState.reset();
64
+ * ```
65
+ */
66
+ export declare const mockState: MockState;
67
+ /**
68
+ * Request counts for test assertions
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * import { requestCounts } from "@kaiz11/stack-client/mocks";
73
+ *
74
+ * // Check how many requests were made
75
+ * expect(requestCounts.signIn).toBe(1);
76
+ *
77
+ * // Reset after test
78
+ * requestCounts.reset();
79
+ * ```
80
+ */
81
+ export declare const requestCounts: RequestCounts;
82
+ /**
83
+ * Apply artificial latency
84
+ */
85
+ export declare function delay(ms: number): Promise<void>;
86
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/mocks/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iCAAiC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,wCAAwC;IACxC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,yCAAyC;IACzC,YAAY,EAAE,iBAAiB,CAAC;IAChC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS,EAAE,SAiBvB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,EAAE,aAW3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/C"}
@@ -0,0 +1,77 @@
1
+ import { errors } from "./responses.js";
2
+ /**
3
+ * Global mock state instance
4
+ *
5
+ * Use this to control mock behavior in tests:
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { mockState } from "@kaiz11/stack-client/mocks";
10
+ *
11
+ * // Make signIn fail
12
+ * mockState.shouldFailSignIn = true;
13
+ *
14
+ * // Custom error message
15
+ * mockState.signInError = {
16
+ * code: 429,
17
+ * error_code: "too_many_attempts",
18
+ * msg: "Too many login attempts",
19
+ * };
20
+ *
21
+ * // Reset after test
22
+ * mockState.reset();
23
+ * ```
24
+ */
25
+ export const mockState = {
26
+ shouldFailSignIn: false,
27
+ shouldFailSignUp: false,
28
+ shouldFailRefresh: false,
29
+ signInError: { ...errors.invalidCredentials },
30
+ signUpError: { ...errors.userAlreadyExists },
31
+ refreshError: { ...errors.invalidRefreshToken },
32
+ latency: 0,
33
+ reset() {
34
+ this.shouldFailSignIn = false;
35
+ this.shouldFailSignUp = false;
36
+ this.shouldFailRefresh = false;
37
+ this.signInError = { ...errors.invalidCredentials };
38
+ this.signUpError = { ...errors.userAlreadyExists };
39
+ this.refreshError = { ...errors.invalidRefreshToken };
40
+ this.latency = 0;
41
+ },
42
+ };
43
+ /**
44
+ * Request counts for test assertions
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { requestCounts } from "@kaiz11/stack-client/mocks";
49
+ *
50
+ * // Check how many requests were made
51
+ * expect(requestCounts.signIn).toBe(1);
52
+ *
53
+ * // Reset after test
54
+ * requestCounts.reset();
55
+ * ```
56
+ */
57
+ export const requestCounts = {
58
+ signIn: 0,
59
+ signUp: 0,
60
+ signOut: 0,
61
+ refresh: 0,
62
+ reset() {
63
+ this.signIn = 0;
64
+ this.signUp = 0;
65
+ this.signOut = 0;
66
+ this.refresh = 0;
67
+ },
68
+ };
69
+ /**
70
+ * Apply artificial latency
71
+ */
72
+ export function delay(ms) {
73
+ if (ms <= 0)
74
+ return Promise.resolve();
75
+ return new Promise((resolve) => setTimeout(resolve, ms));
76
+ }
77
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/mocks/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA0B,MAAM,gBAAgB,CAAC;AA8ChE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,KAAK;IACxB,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE;IAC7C,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE;IAC5C,YAAY,EAAE,EAAE,GAAG,MAAM,CAAC,mBAAmB,EAAE;IAC/C,OAAO,EAAE,CAAC;IACV,KAAK;QACH,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,183 @@
1
+ import type { HttpClient } from "../lib/http.js";
2
+ import type { IBucketRef } from "./interface.js";
3
+ import { type CopyOptions, type CopyResult, type DownloadOptions, type FileBody, type ListOptions, type ListV2Options, type ListV2Result, type MoveOptions, type PublicUrlOptions, type SignedUrl, type SignedUploadUrl, type SignedUploadUrlOptions, type SignedUrlOptions, type StorageObject, type TusUpload, type TusUploadOptions, type UploadOptions, type UploadResult } from "./types.js";
4
+ /**
5
+ * Bucket reference for fluent object operations
6
+ */
7
+ export declare class BucketRef implements IBucketRef {
8
+ private readonly http;
9
+ private readonly tenantId;
10
+ private readonly bucketId;
11
+ constructor(http: HttpClient, tenantId: string, bucketId: string);
12
+ private path;
13
+ /**
14
+ * Upload a file to the bucket
15
+ *
16
+ * Accepts string, Blob, ArrayBuffer, or ReadableStream.
17
+ * By default, throws if file already exists. Use `upsert: true` to overwrite.
18
+ *
19
+ * @example
20
+ * await client.storage.from("docs").upload("report.pdf", file);
21
+ * await client.storage.from("docs").upload("report.pdf", file, { upsert: true });
22
+ */
23
+ upload(path: string, file: FileBody, options?: UploadOptions): Promise<UploadResult>;
24
+ /**
25
+ * Download a file from the bucket
26
+ *
27
+ * Returns the file as a Blob. Supports image transforms for on-the-fly resizing.
28
+ *
29
+ * @example
30
+ * const blob = await client.storage.from("docs").download("report.pdf");
31
+ * const thumbnail = await client.storage.from("images").download("photo.jpg", {
32
+ * transform: { width: 200, height: 200 }
33
+ * });
34
+ */
35
+ download(path: string, options?: DownloadOptions): Promise<Blob>;
36
+ /**
37
+ * Get the public URL for an object
38
+ *
39
+ * Constructs the URL locally (no API call). The URL only works if
40
+ * the bucket is set to `public: true`. Does not validate if the
41
+ * file exists.
42
+ *
43
+ * @example
44
+ * const url = client.storage.from("avatars").getPublicUrl("user123.jpg");
45
+ */
46
+ getPublicUrl(path: string, options?: PublicUrlOptions): string;
47
+ /**
48
+ * Create a signed URL for temporary access to a private file
49
+ *
50
+ * The URL expires after the specified time. Use for private buckets
51
+ * when you need to share a file temporarily.
52
+ *
53
+ * @example
54
+ * const { signedUrl } = await client.storage.from("private").createSignedUrl("doc.pdf", {
55
+ * expiresIn: 3600 // 1 hour
56
+ * });
57
+ */
58
+ createSignedUrl(path: string, options: SignedUrlOptions): Promise<SignedUrl>;
59
+ /**
60
+ * Create signed URLs for multiple files in a single request
61
+ *
62
+ * More efficient than calling createSignedUrl multiple times.
63
+ *
64
+ * @example
65
+ * const urls = await client.storage.from("private").createSignedUrls(
66
+ * ["doc1.pdf", "doc2.pdf"],
67
+ * { expiresIn: 3600 }
68
+ * );
69
+ */
70
+ createSignedUrls(paths: string[], options: SignedUrlOptions): Promise<SignedUrl[]>;
71
+ /**
72
+ * Create a signed URL for uploading a file
73
+ *
74
+ * Useful for client-side uploads without exposing credentials.
75
+ * The returned token is used with uploadToSignedUrl.
76
+ *
77
+ * @example
78
+ * const { signedUrl, token } = await client.storage.from("uploads").createSignedUploadUrl("file.pdf");
79
+ * await client.storage.from("uploads").uploadToSignedUrl(signedUrl, token, file);
80
+ */
81
+ createSignedUploadUrl(path: string, options?: SignedUploadUrlOptions): Promise<SignedUploadUrl>;
82
+ /**
83
+ * Upload a file using a signed upload URL
84
+ *
85
+ * Use with createSignedUploadUrl for client-side uploads.
86
+ * The signedUrl may point to a different domain (e.g., R2/S3).
87
+ *
88
+ * @example
89
+ * const { signedUrl, token } = await client.storage.from("uploads").createSignedUploadUrl("file.pdf");
90
+ * await client.storage.from("uploads").uploadToSignedUrl(signedUrl, token, file);
91
+ */
92
+ uploadToSignedUrl(signedUrl: string, token: string, file: FileBody, options?: UploadOptions): Promise<UploadResult>;
93
+ private uploadWithXhr;
94
+ /**
95
+ * Create a resumable upload using the TUS protocol
96
+ *
97
+ * For large files that may need to resume after interruption.
98
+ * Returns a TusUpload object with start(), abort(), and progress callbacks.
99
+ *
100
+ * @example
101
+ * const upload = client.storage.from("videos").createResumableUpload("large.mp4", file, {
102
+ * onProgress: ({ percentage }) => console.log(`${percentage}%`)
103
+ * });
104
+ * await upload.start();
105
+ */
106
+ createResumableUpload(path: string, file: FileBody, options?: TusUploadOptions): TusUpload;
107
+ /**
108
+ * List objects in the bucket
109
+ *
110
+ * Supports prefix filtering, pagination, and search.
111
+ *
112
+ * @example
113
+ * const files = await client.storage.from("docs").list();
114
+ * const pdfs = await client.storage.from("docs").list({ prefix: "reports/", search: ".pdf" });
115
+ */
116
+ list(options?: ListOptions): Promise<StorageObject[]>;
117
+ /**
118
+ * List objects with cursor-based pagination
119
+ *
120
+ * Better for large buckets. Returns prefixes (folders) separately
121
+ * and provides a cursor for fetching the next page.
122
+ *
123
+ * @example
124
+ * let cursor: string | null = null;
125
+ * do {
126
+ * const result = await client.storage.from("docs").listV2({ cursor, limit: 100 });
127
+ * console.log(result.objects);
128
+ * cursor = result.nextCursor;
129
+ * } while (cursor);
130
+ */
131
+ listV2(options?: ListV2Options): Promise<ListV2Result>;
132
+ /**
133
+ * Delete objects from the bucket
134
+ *
135
+ * Accepts an array of paths. Returns the deleted objects.
136
+ *
137
+ * @example
138
+ * await client.storage.from("docs").remove(["old.pdf", "draft.pdf"]);
139
+ */
140
+ remove(paths: string[]): Promise<StorageObject[]>;
141
+ /**
142
+ * Move or rename an object
143
+ *
144
+ * Can move to a different bucket using destinationBucket option.
145
+ *
146
+ * @example
147
+ * await client.storage.from("docs").move("draft.pdf", "final.pdf");
148
+ * await client.storage.from("docs").move("file.pdf", "file.pdf", { destinationBucket: "archive" });
149
+ */
150
+ move(fromPath: string, toPath: string, options?: MoveOptions): Promise<void>;
151
+ /**
152
+ * Copy an object to a new location
153
+ *
154
+ * By default copies metadata. Can copy to a different bucket.
155
+ *
156
+ * @example
157
+ * await client.storage.from("docs").copy("template.pdf", "copy.pdf");
158
+ * await client.storage.from("docs").copy("file.pdf", "file.pdf", { destinationBucket: "backup" });
159
+ */
160
+ copy(fromPath: string, toPath: string, options?: CopyOptions): Promise<CopyResult>;
161
+ /**
162
+ * Get metadata for an object
163
+ *
164
+ * Returns size, content type, last modified, and custom metadata.
165
+ *
166
+ * @example
167
+ * const info = await client.storage.from("docs").getInfo("report.pdf");
168
+ * console.log(info.metadata.size, info.metadata.mimetype);
169
+ */
170
+ getInfo(path: string): Promise<StorageObject>;
171
+ /**
172
+ * Check if an object exists in the bucket
173
+ *
174
+ * Uses a HEAD request to check existence without downloading content.
175
+ *
176
+ * @example
177
+ * if (await client.storage.from("docs").exists("report.pdf")) {
178
+ * console.log("File exists");
179
+ * }
180
+ */
181
+ exists(path: string): Promise<boolean>;
182
+ }
183
+ //# sourceMappingURL=bucket-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-ref.d.ts","sourceRoot":"","sources":["../../src/storage/bucket-ref.ts"],"names":[],"mappings":"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"}