@sparkvault/sdk-mobile 6.0.2 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +5 -5
  2. package/dist/account.d.ts +4 -3
  3. package/dist/account.js +16 -11
  4. package/dist/account.js.map +1 -1
  5. package/dist/app-sdk/email-address.d.ts +37 -0
  6. package/dist/app-sdk/email-address.js +91 -0
  7. package/dist/app-sdk/email-address.js.map +1 -0
  8. package/dist/app-sdk/encoding.d.ts +64 -0
  9. package/dist/app-sdk/encoding.js +245 -0
  10. package/dist/app-sdk/encoding.js.map +1 -0
  11. package/dist/app-sdk/entropy-contract.d.ts +33 -0
  12. package/dist/app-sdk/entropy-contract.js +51 -0
  13. package/dist/app-sdk/entropy-contract.js.map +1 -0
  14. package/dist/app-sdk/filename.d.ts +93 -0
  15. package/dist/app-sdk/filename.js +161 -0
  16. package/dist/app-sdk/filename.js.map +1 -0
  17. package/dist/app-sdk/forge-url.d.ts +107 -0
  18. package/dist/app-sdk/forge-url.js +222 -0
  19. package/dist/app-sdk/forge-url.js.map +1 -0
  20. package/dist/app-sdk/ids.d.ts +48 -0
  21. package/dist/app-sdk/ids.js +65 -0
  22. package/dist/app-sdk/ids.js.map +1 -0
  23. package/dist/app-sdk/ingot-access-log.d.ts +29 -0
  24. package/dist/app-sdk/ingot-access-log.js +49 -0
  25. package/dist/app-sdk/ingot-access-log.js.map +1 -0
  26. package/dist/app-sdk/phone.d.ts +37 -0
  27. package/dist/app-sdk/phone.js +134 -0
  28. package/dist/app-sdk/phone.js.map +1 -0
  29. package/dist/app-sdk/platform-domains.d.ts +41 -0
  30. package/dist/app-sdk/platform-domains.js +82 -0
  31. package/dist/app-sdk/platform-domains.js.map +1 -0
  32. package/dist/app-sdk/request-path.d.ts +49 -0
  33. package/dist/app-sdk/request-path.js +81 -0
  34. package/dist/app-sdk/request-path.js.map +1 -0
  35. package/dist/app-sdk/transient.d.ts +23 -0
  36. package/dist/app-sdk/transient.js +29 -0
  37. package/dist/app-sdk/transient.js.map +1 -0
  38. package/dist/app-sdk/vat-refusal.d.ts +66 -0
  39. package/dist/app-sdk/vat-refusal.js +69 -0
  40. package/dist/app-sdk/vat-refusal.js.map +1 -0
  41. package/dist/billing.d.ts +9 -17
  42. package/dist/billing.js +14 -17
  43. package/dist/billing.js.map +1 -1
  44. package/dist/config.d.ts +7 -1
  45. package/dist/config.js +10 -17
  46. package/dist/config.js.map +1 -1
  47. package/dist/encoding.d.ts +30 -4
  48. package/dist/encoding.js +89 -83
  49. package/dist/encoding.js.map +1 -1
  50. package/dist/entropy.d.ts +25 -4
  51. package/dist/entropy.js +62 -15
  52. package/dist/entropy.js.map +1 -1
  53. package/dist/entropy.test-d.d.ts +40 -0
  54. package/dist/entropy.test-d.js +12 -0
  55. package/dist/entropy.test-d.js.map +1 -0
  56. package/dist/errors.d.ts +67 -17
  57. package/dist/errors.js +70 -27
  58. package/dist/errors.js.map +1 -1
  59. package/dist/folders.js +8 -7
  60. package/dist/folders.js.map +1 -1
  61. package/dist/http.d.ts +57 -15
  62. package/dist/http.js +125 -138
  63. package/dist/http.js.map +1 -1
  64. package/dist/identity-dialog.js +4 -30
  65. package/dist/identity-dialog.js.map +1 -1
  66. package/dist/identity-input.d.ts +39 -0
  67. package/dist/identity-input.js +59 -0
  68. package/dist/identity-input.js.map +1 -0
  69. package/dist/index.d.ts +6 -5
  70. package/dist/index.js +4 -3
  71. package/dist/index.js.map +1 -1
  72. package/dist/ingots.d.ts +51 -18
  73. package/dist/ingots.js +132 -122
  74. package/dist/ingots.js.map +1 -1
  75. package/dist/mutex.d.ts +1 -2
  76. package/dist/mutex.js +0 -6
  77. package/dist/mutex.js.map +1 -1
  78. package/dist/notify.d.ts +7 -2
  79. package/dist/notify.js +12 -15
  80. package/dist/notify.js.map +1 -1
  81. package/dist/notify.test-d.d.ts +3 -2
  82. package/dist/notify.test-d.js +1 -1
  83. package/dist/products/identity.d.ts +5 -0
  84. package/dist/products/identity.js +40 -35
  85. package/dist/products/identity.js.map +1 -1
  86. package/dist/request-path.d.ts +32 -0
  87. package/dist/request-path.js +35 -0
  88. package/dist/request-path.js.map +1 -0
  89. package/dist/sparks.js +16 -15
  90. package/dist/sparks.js.map +1 -1
  91. package/dist/tus.d.ts +19 -2
  92. package/dist/tus.js +86 -35
  93. package/dist/tus.js.map +1 -1
  94. package/dist/types.d.ts +167 -15
  95. package/dist/users.d.ts +12 -5
  96. package/dist/users.js +27 -19
  97. package/dist/users.js.map +1 -1
  98. package/dist/validation.d.ts +20 -5
  99. package/dist/validation.js +29 -27
  100. package/dist/validation.js.map +1 -1
  101. package/dist/vaults.d.ts +34 -83
  102. package/dist/vaults.js +64 -44
  103. package/dist/vaults.js.map +1 -1
  104. package/dist/vaults.test-d.d.ts +22 -0
  105. package/dist/vaults.test-d.js +14 -0
  106. package/dist/vaults.test-d.js.map +1 -0
  107. package/package.json +4 -2
  108. package/src/account.ts +16 -11
  109. package/src/app-sdk/email-address.js +94 -0
  110. package/src/app-sdk/encoding.js +250 -0
  111. package/src/app-sdk/entropy-contract.js +56 -0
  112. package/src/app-sdk/filename.js +174 -0
  113. package/src/app-sdk/forge-url.js +224 -0
  114. package/src/app-sdk/ids.js +71 -0
  115. package/src/app-sdk/ingot-access-log.js +51 -0
  116. package/src/app-sdk/phone.js +139 -0
  117. package/src/app-sdk/platform-domains.js +99 -0
  118. package/src/app-sdk/request-path.js +81 -0
  119. package/src/app-sdk/transient.js +30 -0
  120. package/src/app-sdk/vat-refusal.js +74 -0
  121. package/src/billing.ts +16 -25
  122. package/src/config.ts +16 -23
  123. package/src/encoding.ts +91 -103
  124. package/src/entropy.test-d.ts +47 -0
  125. package/src/entropy.ts +86 -20
  126. package/src/errors.ts +93 -33
  127. package/src/folders.ts +8 -7
  128. package/src/http.ts +145 -150
  129. package/src/identity-dialog.tsx +4 -37
  130. package/src/identity-input.ts +70 -0
  131. package/src/index.ts +11 -3
  132. package/src/ingots.ts +173 -159
  133. package/src/mutex.ts +1 -8
  134. package/src/notify.test-d.ts +3 -1
  135. package/src/notify.ts +19 -17
  136. package/src/products/identity.ts +45 -39
  137. package/src/request-path.ts +45 -0
  138. package/src/sparks.ts +16 -13
  139. package/src/tus.ts +90 -37
  140. package/src/types.ts +165 -15
  141. package/src/users.ts +27 -17
  142. package/src/validation.ts +30 -24
  143. package/src/vaults.test-d.ts +29 -0
  144. package/src/vaults.ts +87 -153
  145. package/dist/platform-domains.generated.d.ts +0 -2
  146. package/dist/platform-domains.generated.js +0 -16
  147. package/dist/platform-domains.generated.js.map +0 -1
  148. package/src/platform-domains.generated.ts +0 -17
package/dist/http.d.ts CHANGED
@@ -1,15 +1,36 @@
1
1
  import type { ResolvedMobileConfig } from './config.js';
2
+ import { type ApiPath, type QueryParams } from './request-path.js';
2
3
  import type { ApiMeta, ApiResponse, RateLimitInfo } from './types.js';
3
4
  export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
4
5
  export interface RequestOptions {
5
6
  body?: unknown;
6
7
  headers?: Record<string, string>;
8
+ /** Query parameters appended to the path; empty values are left out. */
9
+ query?: QueryParams;
7
10
  skipAuth?: boolean;
8
11
  vat?: string;
9
12
  timeoutMs?: number;
10
13
  }
11
14
  export type AuthEvent = 'logout' | 'token_refreshed';
12
15
  export type AuthEventListener = (event: AuthEvent) => void;
16
+ /**
17
+ * How a token refresh ended.
18
+ * - `refreshed`: a new access token is stored.
19
+ * - `rejected`: the session is over - no refresh token is stored, or the
20
+ * server refused it (the stored pair is then cleared and 'logout' emitted).
21
+ * - `transient`: the refresh could not complete (connectivity, timeout, a
22
+ * 408/429/5xx answer, a token-store failure). The session stands, and
23
+ * `error` is what the caller surfaces: it must never read as an
24
+ * authentication failure, which callers treat as a rejected credential.
25
+ */
26
+ export type RefreshOutcome = {
27
+ status: 'refreshed';
28
+ } | {
29
+ status: 'rejected';
30
+ } | {
31
+ status: 'transient';
32
+ error: unknown;
33
+ };
13
34
  export declare class MobileHttpClient {
14
35
  private readonly config;
15
36
  private readonly authListeners;
@@ -30,29 +51,50 @@ export declare class MobileHttpClient {
30
51
  private emitAuthEvent;
31
52
  private getHeaders;
32
53
  private parseRateLimitHeaders;
33
- private normalizeError;
54
+ /** The SDK error for a request the fetch adapter rejected (no HTTP response). */
55
+ private transportError;
34
56
  /**
35
- * Single exit for non-OK responses: 402s become typed gate errors
57
+ * Single mapping for non-OK responses: 402s become typed gate errors
36
58
  * (PlanRequiredError / QuotaExceededError) so the subscribe / add-on UX keys
37
59
  * off one set of types; everything else becomes a SparkVaultMobileError
38
60
  * carrying the server code, status, details, and meta.
39
61
  */
40
- private throwHttpError;
62
+ /** An error response's JSON body, or an empty one when it has none. */
63
+ private readErrorBody;
64
+ /**
65
+ * A 401 that names a refused vault access token is not a dead login: no
66
+ * refresh revives a VAT, so it is thrown as it is instead of spending the
67
+ * one-time refresh token.
68
+ */
69
+ private throwIfVatRefused;
70
+ private httpError;
41
71
  private makeUrl;
42
72
  private serializeBody;
43
- refreshAccessToken(): Promise<boolean>;
73
+ /**
74
+ * Refresh the access token once; concurrent callers share the one attempt
75
+ * (refresh tokens rotate and are one-time-use). Never throws: every failure
76
+ * is an outcome.
77
+ */
78
+ refreshAccessToken(): Promise<RefreshOutcome>;
44
79
  private doRefreshOnce;
45
80
  private doRefresh;
46
- request<T>(method: HttpMethod, endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>>;
47
- requestRaw(endpoint: string, options?: RequestOptions & {
48
- method?: HttpMethod;
49
- responseType?: XMLHttpRequestResponseType;
50
- }): Promise<Response>;
51
- get<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>>;
52
- post<T>(endpoint: string, body?: unknown, options?: RequestOptions): Promise<ApiResponse<T>>;
53
- put<T>(endpoint: string, body?: unknown, options?: RequestOptions): Promise<ApiResponse<T>>;
54
- patch<T>(endpoint: string, body?: unknown, options?: RequestOptions): Promise<ApiResponse<T>>;
55
- delete<T>(endpoint: string, options?: RequestOptions): Promise<ApiResponse<T>>;
56
- uploadFile<T>(endpoint: string, formData: FormData, options?: Omit<RequestOptions, 'body'>): Promise<ApiResponse<T>>;
81
+ /**
82
+ * The server refused the session: drop the stored pair and end it. The
83
+ * session is over whether or not the local clear lands, so 'logout' always
84
+ * fires and the app's teardown runs.
85
+ */
86
+ private endRefusedSession;
87
+ /**
88
+ * Renew the session after a 401, or throw what the caller should see:
89
+ * SparkVaultAuthenticationError only when the session is over, otherwise
90
+ * the transient failure that kept the refresh from completing.
91
+ */
92
+ private renewSession;
93
+ request<T>(method: HttpMethod, path: ApiPath, options?: RequestOptions): Promise<ApiResponse<T>>;
94
+ get<T>(path: ApiPath, options?: RequestOptions): Promise<ApiResponse<T>>;
95
+ post<T>(path: ApiPath, body?: unknown, options?: RequestOptions): Promise<ApiResponse<T>>;
96
+ put<T>(path: ApiPath, body?: unknown, options?: RequestOptions): Promise<ApiResponse<T>>;
97
+ patch<T>(path: ApiPath, body?: unknown, options?: RequestOptions): Promise<ApiResponse<T>>;
98
+ delete<T>(path: ApiPath, options?: RequestOptions): Promise<ApiResponse<T>>;
57
99
  private defaultErrorMessage;
58
100
  }
package/dist/http.js CHANGED
@@ -1,5 +1,7 @@
1
- import { gateErrorFromBody, SparkVaultAuthenticationError, SparkVaultMobileError, SparkVaultNetworkError, SparkVaultTimeoutError, } from './errors.js';
1
+ import { gateErrorFromBody, SparkVaultAuthenticationError, SparkVaultMobileError, SparkVaultNetworkError, SparkVaultTimeoutError, vatRefusalReason, } from './errors.js';
2
+ import { isTransientHttpStatus } from './app-sdk/transient.js';
2
3
  import { createDedupMutex } from './mutex.js';
4
+ import { queryString } from './request-path.js';
3
5
  function parseRetryAfter(headers) {
4
6
  const retryAfter = headers.get('Retry-After');
5
7
  if (!retryAfter)
@@ -99,14 +101,13 @@ export class MobileHttpClient {
99
101
  this.config.logger.warn('Malformed rate limit headers', { limit, remaining, reset });
100
102
  }
101
103
  }
102
- normalizeError(err, isUpload = false) {
104
+ /** The SDK error for a request the fetch adapter rejected (no HTTP response). */
105
+ transportError(err) {
103
106
  if (err instanceof SparkVaultMobileError) {
104
- throw err;
107
+ return err;
105
108
  }
106
109
  if (err instanceof Error && (err.name === 'AbortError' || err.name === 'TimeoutError')) {
107
- throw new SparkVaultTimeoutError(isUpload
108
- ? 'Upload timed out. Please check your connection and try again.'
109
- : 'Request timed out. Please check your connection and try again.');
110
+ return new SparkVaultTimeoutError('Request timed out. Please check your connection and try again.');
110
111
  }
111
112
  // Connectivity failures arrive in two shapes depending on the injected
112
113
  // fetch adapter: the WHATWG fetch spec rejects with a TypeError, while
@@ -114,91 +115,110 @@ export class MobileHttpClient {
114
115
  // normalize to SparkVaultNetworkError or consumers misclassify an offline
115
116
  // failure as a generic (non-retryable) error.
116
117
  if (err instanceof TypeError || (err instanceof Error && err.name === 'NetworkError')) {
117
- throw new SparkVaultNetworkError('Network request failed. Please check your connection.');
118
+ return new SparkVaultNetworkError('Network request failed. Please check your connection.');
118
119
  }
119
- throw new SparkVaultMobileError(err instanceof Error ? err.message : 'Unknown request error');
120
+ return new SparkVaultMobileError(err instanceof Error ? err.message : 'Unknown request error');
120
121
  }
121
122
  /**
122
- * Single exit for non-OK responses: 402s become typed gate errors
123
+ * Single mapping for non-OK responses: 402s become typed gate errors
123
124
  * (PlanRequiredError / QuotaExceededError) so the subscribe / add-on UX keys
124
125
  * off one set of types; everything else becomes a SparkVaultMobileError
125
126
  * carrying the server code, status, details, and meta.
126
127
  */
127
- throwHttpError(status, errorBody) {
128
+ /** An error response's JSON body, or an empty one when it has none. */
129
+ async readErrorBody(response) {
130
+ try {
131
+ return await response.json();
132
+ }
133
+ catch {
134
+ this.config.logger.debug('Failed to parse error response body', { status: response.status });
135
+ return {};
136
+ }
137
+ }
138
+ /**
139
+ * A 401 that names a refused vault access token is not a dead login: no
140
+ * refresh revives a VAT, so it is thrown as it is instead of spending the
141
+ * one-time refresh token.
142
+ */
143
+ async throwIfVatRefused(response) {
144
+ const error = this.httpError(response.status, await this.readErrorBody(response));
145
+ if (vatRefusalReason(error) !== null) {
146
+ throw error;
147
+ }
148
+ }
149
+ httpError(status, errorBody) {
128
150
  if (errorBody.meta) {
129
151
  this.lastMeta = errorBody.meta;
130
152
  }
131
- const gateError = gateErrorFromBody(status, errorBody);
132
- if (gateError) {
133
- throw gateError;
134
- }
135
- throw new SparkVaultMobileError(errorBody.error?.message ?? errorBody.message ?? this.defaultErrorMessage(status), {
153
+ return gateErrorFromBody(status, errorBody) ?? new SparkVaultMobileError(errorBody.error?.message ?? errorBody.message ?? this.defaultErrorMessage(status), {
136
154
  code: errorBody.error?.code ?? status,
137
155
  statusCode: status,
138
156
  details: errorBody.error?.details,
139
157
  meta: errorBody.meta,
140
158
  });
141
159
  }
142
- makeUrl(endpoint) {
143
- if (/^https?:\/\//i.test(endpoint)) {
144
- return endpoint;
145
- }
146
- return `${this.config.apiBaseUrl}${endpoint}`;
160
+ makeUrl(path, query) {
161
+ return `${this.config.apiBaseUrl}${path}${queryString(query)}`;
147
162
  }
148
163
  serializeBody(body) {
149
164
  if (body === undefined || body === null)
150
165
  return undefined;
151
166
  return isJsonBody(body) ? JSON.stringify(body) : body;
152
167
  }
153
- async refreshAccessToken() {
154
- try {
155
- return await this.refreshMutex.dedupe(() => this.doRefreshOnce());
156
- }
157
- catch {
158
- this.refreshMutex.reset();
159
- return false;
160
- }
168
+ /**
169
+ * Refresh the access token once; concurrent callers share the one attempt
170
+ * (refresh tokens rotate and are one-time-use). Never throws: every failure
171
+ * is an outcome.
172
+ */
173
+ refreshAccessToken() {
174
+ return this.refreshMutex.dedupe(() => this.doRefreshOnce());
161
175
  }
162
176
  async doRefreshOnce() {
163
- const refreshToken = await this.config.tokenStorage.getRefreshToken();
164
- if (!refreshToken)
165
- return false;
166
177
  try {
178
+ const refreshToken = await this.config.tokenStorage.getRefreshToken();
179
+ if (!refreshToken)
180
+ return { status: 'rejected' };
167
181
  return await this.doRefresh(refreshToken);
168
182
  }
169
183
  catch (err) {
170
- const error = err instanceof Error ? err : new Error(String(err));
171
- this.config.logger.warn('Token refresh failed without retry', { error: error.message });
172
- return false;
184
+ // A token store that could not be read or written: the session was not
185
+ // refused, so it stands, and the store's own error is what the caller
186
+ // sees (as it is when the store fails before any request).
187
+ this.config.logger.warn('Token refresh could not use the token store', {
188
+ error: err instanceof Error ? err.message : String(err),
189
+ });
190
+ return { status: 'transient', error: err };
173
191
  }
174
192
  }
175
193
  async doRefresh(refreshToken) {
176
- const response = await this.config.fetch(`${this.config.apiBaseUrl}/auth/refresh`, {
177
- method: 'POST',
178
- headers: {
179
- 'Content-Type': 'application/json',
180
- Accept: 'application/json',
181
- 'User-Agent': this.config.userAgent,
182
- },
183
- body: JSON.stringify({ refresh_token: refreshToken }),
184
- timeoutMs: this.config.timeoutMs,
185
- });
194
+ let response;
195
+ try {
196
+ response = await this.config.fetch(`${this.config.apiBaseUrl}/auth/refresh`, {
197
+ method: 'POST',
198
+ headers: {
199
+ 'Content-Type': 'application/json',
200
+ Accept: 'application/json',
201
+ 'User-Agent': this.config.userAgent,
202
+ },
203
+ body: JSON.stringify({ refresh_token: refreshToken }),
204
+ timeoutMs: this.config.timeoutMs,
205
+ });
206
+ }
207
+ catch (err) {
208
+ const error = this.transportError(err);
209
+ this.config.logger.warn('Token refresh did not reach the API', { error: error.message });
210
+ return { status: 'transient', error };
211
+ }
186
212
  if (!response.ok) {
187
- if (response.status === 429) {
188
- this.config.logger.warn('Token refresh rate limited', {
189
- retryAfterMs: parseRetryAfter(response.headers),
190
- });
191
- return false;
192
- }
193
- if (response.status >= 500 || response.status === 408) {
213
+ if (isTransientHttpStatus(response.status)) {
194
214
  this.config.logger.warn('Token refresh failed with transient HTTP status', {
195
215
  status: response.status,
216
+ retryAfterMs: parseRetryAfter(response.headers),
196
217
  });
197
- return false;
218
+ const errorBody = await response.json().catch(() => ({}));
219
+ return { status: 'transient', error: this.httpError(response.status, errorBody) };
198
220
  }
199
- await this.config.tokenStorage.clearTokens();
200
- this.emitAuthEvent('logout');
201
- return false;
221
+ return this.endRefusedSession();
202
222
  }
203
223
  const body = await response.json().catch(() => ({}));
204
224
  const data = body?.data;
@@ -207,9 +227,7 @@ export class MobileHttpClient {
207
227
  hasData: Boolean(data),
208
228
  accessTokenType: typeof data?.access_token,
209
229
  });
210
- await this.config.tokenStorage.clearTokens();
211
- this.emitAuthEvent('logout');
212
- return false;
230
+ return this.endRefusedSession();
213
231
  }
214
232
  // Refresh tokens rotate and are one-time-use: persist the pair through a
215
233
  // single adapter call when the adapter supports it, so the write can be
@@ -229,10 +247,41 @@ export class MobileHttpClient {
229
247
  await this.config.tokenStorage.setAccessToken(data.access_token);
230
248
  }
231
249
  this.emitAuthEvent('token_refreshed');
232
- return true;
250
+ return { status: 'refreshed' };
251
+ }
252
+ /**
253
+ * The server refused the session: drop the stored pair and end it. The
254
+ * session is over whether or not the local clear lands, so 'logout' always
255
+ * fires and the app's teardown runs.
256
+ */
257
+ async endRefusedSession() {
258
+ try {
259
+ await this.config.tokenStorage.clearTokens();
260
+ }
261
+ catch (err) {
262
+ this.config.logger.warn('Could not clear the refused session tokens', {
263
+ error: err instanceof Error ? err.message : String(err),
264
+ });
265
+ }
266
+ this.emitAuthEvent('logout');
267
+ return { status: 'rejected' };
268
+ }
269
+ /**
270
+ * Renew the session after a 401, or throw what the caller should see:
271
+ * SparkVaultAuthenticationError only when the session is over, otherwise
272
+ * the transient failure that kept the refresh from completing.
273
+ */
274
+ async renewSession() {
275
+ const outcome = await this.refreshAccessToken();
276
+ if (outcome.status === 'rejected') {
277
+ throw new SparkVaultAuthenticationError('Session expired. Please log in again.');
278
+ }
279
+ if (outcome.status === 'transient') {
280
+ throw outcome.error;
281
+ }
233
282
  }
234
- async request(method, endpoint, options = {}) {
235
- const url = this.makeUrl(endpoint);
283
+ async request(method, path, options = {}) {
284
+ const url = this.makeUrl(path, options.query);
236
285
  const timeoutMs = options.timeoutMs ?? this.config.timeoutMs;
237
286
  const body = method === 'GET' ? undefined : this.serializeBody(options.body);
238
287
  let headers = await this.getHeaders({ ...options, body: options.body });
@@ -241,20 +290,18 @@ export class MobileHttpClient {
241
290
  response = await this.config.fetch(url, { method, headers, body, timeoutMs });
242
291
  }
243
292
  catch (err) {
244
- this.normalizeError(err);
293
+ throw this.transportError(err);
245
294
  }
246
295
  this.parseRateLimitHeaders(response.headers);
247
296
  if (response.status === 401 && !options.skipAuth) {
248
- const refreshed = await this.refreshAccessToken();
249
- if (!refreshed) {
250
- throw new SparkVaultAuthenticationError('Session expired. Please log in again.');
251
- }
297
+ await this.throwIfVatRefused(response);
298
+ await this.renewSession();
252
299
  headers = await this.getHeaders({ ...options, body: options.body });
253
300
  try {
254
301
  response = await this.config.fetch(url, { method, headers, body, timeoutMs });
255
302
  }
256
303
  catch (err) {
257
- this.normalizeError(err);
304
+ throw this.transportError(err);
258
305
  }
259
306
  this.parseRateLimitHeaders(response.headers);
260
307
  }
@@ -268,14 +315,7 @@ export class MobileHttpClient {
268
315
  return { data: {}, meta: this.lastMeta ?? fallbackMeta };
269
316
  }
270
317
  if (!response.ok) {
271
- let errorBody = {};
272
- try {
273
- errorBody = await response.json();
274
- }
275
- catch {
276
- this.config.logger.debug('Failed to parse error response body', { status: response.status });
277
- }
278
- this.throwHttpError(response.status, errorBody);
318
+ throw this.httpError(response.status, await this.readErrorBody(response));
279
319
  }
280
320
  const result = await response.json();
281
321
  if (result.meta) {
@@ -283,73 +323,20 @@ export class MobileHttpClient {
283
323
  }
284
324
  return result;
285
325
  }
286
- async requestRaw(endpoint, options = {}) {
287
- const method = options.method ?? 'GET';
288
- const url = this.makeUrl(endpoint);
289
- const timeoutMs = options.timeoutMs ?? this.config.fileTransferTimeoutMs;
290
- const body = method === 'GET' ? undefined : this.serializeBody(options.body);
291
- let headers = await this.getHeaders({ ...options, body: options.body });
292
- let response;
293
- try {
294
- response = await this.config.fetch(url, {
295
- method,
296
- headers,
297
- body,
298
- timeoutMs,
299
- responseType: options.responseType,
300
- });
301
- }
302
- catch (err) {
303
- this.normalizeError(err, true);
304
- }
305
- if (response.status === 401 && !options.skipAuth) {
306
- const refreshed = await this.refreshAccessToken();
307
- if (!refreshed) {
308
- throw new SparkVaultAuthenticationError('Session expired. Please log in again.');
309
- }
310
- headers = await this.getHeaders({ ...options, body: options.body });
311
- try {
312
- response = await this.config.fetch(url, {
313
- method,
314
- headers,
315
- body,
316
- timeoutMs,
317
- responseType: options.responseType,
318
- });
319
- }
320
- catch (err) {
321
- this.normalizeError(err, true);
322
- }
323
- }
324
- if (!response.ok) {
325
- let errorBody = {};
326
- try {
327
- errorBody = await response.json();
328
- }
329
- catch {
330
- this.config.logger.debug('Failed to parse raw error response body', { status: response.status });
331
- }
332
- this.throwHttpError(response.status, errorBody);
333
- }
334
- return response;
335
- }
336
- get(endpoint, options) {
337
- return this.request('GET', endpoint, options);
338
- }
339
- post(endpoint, body, options) {
340
- return this.request('POST', endpoint, { ...options, body });
326
+ get(path, options) {
327
+ return this.request('GET', path, options);
341
328
  }
342
- put(endpoint, body, options) {
343
- return this.request('PUT', endpoint, { ...options, body });
329
+ post(path, body, options) {
330
+ return this.request('POST', path, { ...options, body });
344
331
  }
345
- patch(endpoint, body, options) {
346
- return this.request('PATCH', endpoint, { ...options, body });
332
+ put(path, body, options) {
333
+ return this.request('PUT', path, { ...options, body });
347
334
  }
348
- delete(endpoint, options) {
349
- return this.request('DELETE', endpoint, options);
335
+ patch(path, body, options) {
336
+ return this.request('PATCH', path, { ...options, body });
350
337
  }
351
- async uploadFile(endpoint, formData, options = {}) {
352
- return this.request('POST', endpoint, { ...options, body: formData, timeoutMs: options.timeoutMs ?? this.config.fileTransferTimeoutMs });
338
+ delete(path, options) {
339
+ return this.request('DELETE', path, options);
353
340
  }
354
341
  defaultErrorMessage(status) {
355
342
  switch (status) {
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { ActivityIndicator, Image, KeyboardAvoidingView, Modal, Platform, Pressable, ScrollView, StyleSheet, Text, TextInput, View, } from 'react-native';
4
+ import { identityKeyboardType, inferIdentityType, parseIdentity } from './identity-input.js';
4
5
  /**
5
6
  * Sign-in here is one-time code only. Passkeys are an Identity Product method
6
7
  * on the web, but the native ceremony does not work in the mobile app, so the
@@ -9,8 +10,6 @@ import { ActivityIndicator, Image, KeyboardAvoidingView, Modal, Platform, Pressa
9
10
  * for a host that drives the ceremony itself.
10
11
  */
11
12
  const SUPPORTED_METHODS = new Set(['otp_email', 'otp_sms', 'otp_voice']);
12
- const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
13
- const E164_PHONE_REGEX = /^\+[1-9]\d{7,14}$/;
14
13
  export function SparkVaultIdentityDialog({ client, visible, initialIdentity, initialIdentityType, onSuccess, onCancel, onError, }) {
15
14
  const [step, setStep] = useState('loading');
16
15
  const [config, setConfig] = useState(null);
@@ -263,9 +262,9 @@ export function SparkVaultIdentityDialog({ client, visible, initialIdentity, ini
263
262
  setIdentity(value);
264
263
  setError('');
265
264
  if (allowedTypes.length > 1) {
266
- setIdentityType(value.trim().startsWith('+') || /^\d/.test(value.trim()) ? 'phone' : 'email');
265
+ setIdentityType(inferIdentityType(value));
267
266
  }
268
- }, placeholder: identityPlaceholder(allowedTypes), placeholderTextColor: colors.placeholder, autoCapitalize: "none", autoCorrect: false, autoComplete: identityType === 'phone' ? 'tel' : 'email', keyboardType: identityType === 'phone' ? 'phone-pad' : 'email-address', editable: !isBusy, style: [
267
+ }, placeholder: identityPlaceholder(allowedTypes), placeholderTextColor: colors.placeholder, autoCapitalize: "none", autoCorrect: false, autoComplete: identityType === 'phone' ? 'tel' : 'email', keyboardType: identityKeyboardType(allowedTypes), editable: !isBusy, style: [
269
268
  styles.input,
270
269
  {
271
270
  borderColor: error ? colors.error : colors.border,
@@ -316,7 +315,7 @@ function normalizeAllowedTypes(config) {
316
315
  function resolveInitialIdentityType(identity, explicitType, allowedTypes) {
317
316
  if (explicitType && allowedTypes.includes(explicitType))
318
317
  return explicitType;
319
- if (identity?.trim().startsWith('+') && allowedTypes.includes('phone'))
318
+ if (inferIdentityType(identity ?? '') === 'phone' && allowedTypes.includes('phone'))
320
319
  return 'phone';
321
320
  return allowedTypes.includes('email') ? 'email' : 'phone';
322
321
  }
@@ -330,31 +329,6 @@ function getMethodsForIdentity(config, identityType) {
330
329
  return identityType === 'phone';
331
330
  });
332
331
  }
333
- function parseIdentity(value, allowedTypes) {
334
- const trimmed = value.trim();
335
- if (!trimmed) {
336
- return { ok: false, error: 'Enter an identity to continue.' };
337
- }
338
- const inferredType = trimmed.startsWith('+') || /^\d/.test(trimmed) ? 'phone' : 'email';
339
- if (!allowedTypes.includes(inferredType)) {
340
- return {
341
- ok: false,
342
- error: inferredType === 'phone' ? 'Phone sign-in is not enabled for this app.' : 'Email sign-in is not enabled for this app.',
343
- };
344
- }
345
- if (inferredType === 'email') {
346
- const email = trimmed.toLowerCase();
347
- if (!EMAIL_REGEX.test(email) || email.length > 254) {
348
- return { ok: false, error: 'Enter a valid email address.' };
349
- }
350
- return { ok: true, identity: email, identityType: 'email' };
351
- }
352
- const phone = trimmed.startsWith('+') ? trimmed.replace(/[^\d+]/g, '') : `+${trimmed.replace(/\D/g, '')}`;
353
- if (!E164_PHONE_REGEX.test(phone)) {
354
- return { ok: false, error: 'Enter a valid phone number in international format.' };
355
- }
356
- return { ok: true, identity: phone, identityType: 'phone' };
357
- }
358
332
  function toOtpMethod(method) {
359
333
  if (method === 'otp_sms')
360
334
  return 'sms';