@sparkvault/sdk-mobile 6.0.2 → 7.0.1
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.
- package/README.md +5 -5
- package/dist/account.d.ts +4 -3
- package/dist/account.js +16 -11
- package/dist/account.js.map +1 -1
- package/dist/app-sdk/email-address.d.ts +37 -0
- package/dist/app-sdk/email-address.js +91 -0
- package/dist/app-sdk/email-address.js.map +1 -0
- package/dist/app-sdk/encoding.d.ts +64 -0
- package/dist/app-sdk/encoding.js +245 -0
- package/dist/app-sdk/encoding.js.map +1 -0
- package/dist/app-sdk/entropy-contract.d.ts +33 -0
- package/dist/app-sdk/entropy-contract.js +51 -0
- package/dist/app-sdk/entropy-contract.js.map +1 -0
- package/dist/app-sdk/filename.d.ts +93 -0
- package/dist/app-sdk/filename.js +161 -0
- package/dist/app-sdk/filename.js.map +1 -0
- package/dist/app-sdk/forge-url.d.ts +107 -0
- package/dist/app-sdk/forge-url.js +222 -0
- package/dist/app-sdk/forge-url.js.map +1 -0
- package/dist/app-sdk/ids.d.ts +48 -0
- package/dist/app-sdk/ids.js +65 -0
- package/dist/app-sdk/ids.js.map +1 -0
- package/dist/app-sdk/ingot-access-log.d.ts +29 -0
- package/dist/app-sdk/ingot-access-log.js +49 -0
- package/dist/app-sdk/ingot-access-log.js.map +1 -0
- package/dist/app-sdk/phone.d.ts +37 -0
- package/dist/app-sdk/phone.js +134 -0
- package/dist/app-sdk/phone.js.map +1 -0
- package/dist/app-sdk/platform-domains.d.ts +41 -0
- package/dist/app-sdk/platform-domains.js +82 -0
- package/dist/app-sdk/platform-domains.js.map +1 -0
- package/dist/app-sdk/request-path.d.ts +49 -0
- package/dist/app-sdk/request-path.js +81 -0
- package/dist/app-sdk/request-path.js.map +1 -0
- package/dist/app-sdk/transfer-retry.d.ts +298 -0
- package/dist/app-sdk/transfer-retry.js +535 -0
- package/dist/app-sdk/transfer-retry.js.map +1 -0
- package/dist/app-sdk/transient.d.ts +23 -0
- package/dist/app-sdk/transient.js +29 -0
- package/dist/app-sdk/transient.js.map +1 -0
- package/dist/app-sdk/upload-publication.d.ts +81 -0
- package/dist/app-sdk/upload-publication.js +93 -0
- package/dist/app-sdk/upload-publication.js.map +1 -0
- package/dist/app-sdk/vat-refusal.d.ts +66 -0
- package/dist/app-sdk/vat-refusal.js +69 -0
- package/dist/app-sdk/vat-refusal.js.map +1 -0
- package/dist/billing.d.ts +9 -17
- package/dist/billing.js +14 -17
- package/dist/billing.js.map +1 -1
- package/dist/config.d.ts +33 -1
- package/dist/config.js +23 -17
- package/dist/config.js.map +1 -1
- package/dist/encoding.d.ts +30 -4
- package/dist/encoding.js +89 -83
- package/dist/encoding.js.map +1 -1
- package/dist/entropy.d.ts +25 -4
- package/dist/entropy.js +62 -15
- package/dist/entropy.js.map +1 -1
- package/dist/entropy.test-d.d.ts +40 -0
- package/dist/entropy.test-d.js +12 -0
- package/dist/entropy.test-d.js.map +1 -0
- package/dist/errors.d.ts +105 -21
- package/dist/errors.js +74 -28
- package/dist/errors.js.map +1 -1
- package/dist/folders.js +8 -7
- package/dist/folders.js.map +1 -1
- package/dist/http.d.ts +57 -15
- package/dist/http.js +125 -138
- package/dist/http.js.map +1 -1
- package/dist/identity-dialog.js +4 -30
- package/dist/identity-dialog.js.map +1 -1
- package/dist/identity-input.d.ts +39 -0
- package/dist/identity-input.js +59 -0
- package/dist/identity-input.js.map +1 -0
- package/dist/index.d.ts +8 -7
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/ingots.d.ts +77 -32
- package/dist/ingots.js +152 -136
- package/dist/ingots.js.map +1 -1
- package/dist/mutex.d.ts +1 -2
- package/dist/mutex.js +0 -6
- package/dist/mutex.js.map +1 -1
- package/dist/notify.d.ts +7 -2
- package/dist/notify.js +12 -15
- package/dist/notify.js.map +1 -1
- package/dist/notify.test-d.d.ts +3 -2
- package/dist/notify.test-d.js +1 -1
- package/dist/products/identity.d.ts +5 -0
- package/dist/products/identity.js +40 -35
- package/dist/products/identity.js.map +1 -1
- package/dist/request-path.d.ts +32 -0
- package/dist/request-path.js +35 -0
- package/dist/request-path.js.map +1 -0
- package/dist/sparks.js +16 -15
- package/dist/sparks.js.map +1 -1
- package/dist/tus.d.ts +198 -16
- package/dist/tus.js +816 -327
- package/dist/tus.js.map +1 -1
- package/dist/types.d.ts +183 -23
- package/dist/users.d.ts +12 -5
- package/dist/users.js +27 -19
- package/dist/users.js.map +1 -1
- package/dist/validation.d.ts +20 -5
- package/dist/validation.js +29 -27
- package/dist/validation.js.map +1 -1
- package/dist/vaults.d.ts +34 -83
- package/dist/vaults.js +64 -44
- package/dist/vaults.js.map +1 -1
- package/dist/vaults.test-d.d.ts +22 -0
- package/dist/vaults.test-d.js +14 -0
- package/dist/vaults.test-d.js.map +1 -0
- package/package.json +4 -2
- package/src/account.ts +16 -11
- package/src/app-sdk/email-address.js +94 -0
- package/src/app-sdk/encoding.js +250 -0
- package/src/app-sdk/entropy-contract.js +56 -0
- package/src/app-sdk/filename.js +174 -0
- package/src/app-sdk/forge-url.js +224 -0
- package/src/app-sdk/ids.js +71 -0
- package/src/app-sdk/ingot-access-log.js +51 -0
- package/src/app-sdk/phone.js +139 -0
- package/src/app-sdk/platform-domains.js +99 -0
- package/src/app-sdk/request-path.js +81 -0
- package/src/app-sdk/transfer-retry.js +563 -0
- package/src/app-sdk/transient.js +30 -0
- package/src/app-sdk/upload-publication.js +102 -0
- package/src/app-sdk/vat-refusal.js +74 -0
- package/src/billing.ts +16 -25
- package/src/config.ts +56 -23
- package/src/encoding.ts +91 -103
- package/src/entropy.test-d.ts +47 -0
- package/src/entropy.ts +86 -20
- package/src/errors.ts +135 -38
- package/src/folders.ts +8 -7
- package/src/http.ts +145 -150
- package/src/identity-dialog.tsx +4 -37
- package/src/identity-input.ts +70 -0
- package/src/index.ts +13 -3
- package/src/ingots.ts +225 -180
- package/src/mutex.ts +1 -8
- package/src/notify.test-d.ts +3 -1
- package/src/notify.ts +19 -17
- package/src/products/identity.ts +45 -39
- package/src/request-path.ts +45 -0
- package/src/sparks.ts +16 -13
- package/src/tus.ts +1054 -408
- package/src/types.ts +181 -23
- package/src/users.ts +27 -17
- package/src/validation.ts +30 -24
- package/src/vaults.test-d.ts +29 -0
- package/src/vaults.ts +87 -153
- package/dist/platform-domains.generated.d.ts +0 -2
- package/dist/platform-domains.generated.js +0 -16
- package/dist/platform-domains.generated.js.map +0 -1
- package/src/platform-domains.generated.ts +0 -17
package/dist/errors.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { isTransientHttpStatus } from './app-sdk/transient.js';
|
|
2
|
+
import { VAT_REFUSAL_REASONS, vatRefusalReason as readVatRefusalReason } from './app-sdk/vat-refusal.js';
|
|
1
3
|
function isQuotaResource(value) {
|
|
2
4
|
return value === 'storage' || value === 'bandwidth';
|
|
3
5
|
}
|
|
@@ -78,10 +80,10 @@ export class SparkVaultTimeoutError extends SparkVaultMobileError {
|
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
/**
|
|
81
|
-
* Thrown when a download is requested against an ingot
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
83
|
+
* Thrown when a download is requested against an ingot whose upload Forge has
|
|
84
|
+
* not activated yet (status `uploading`). Transient by nature, but retrying
|
|
85
|
+
* immediately will not help — callers should back off until the ingot becomes
|
|
86
|
+
* active.
|
|
85
87
|
*/
|
|
86
88
|
export class IngotNotReadyError extends SparkVaultMobileError {
|
|
87
89
|
constructor(message = 'Ingot is not ready for download yet', options = {}) {
|
|
@@ -96,10 +98,27 @@ export class IngotNotReadyError extends SparkVaultMobileError {
|
|
|
96
98
|
Object.setPrototypeOf(this, IngotNotReadyError.prototype);
|
|
97
99
|
}
|
|
98
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Thrown when a create is refused because an ingot already holds the name in
|
|
103
|
+
* the target folder (409 `details.reason === 'NAME_HELD'`): with
|
|
104
|
+
* `onNameConflict: 'complete_pending'` a published holder, with `'refuse'` any
|
|
105
|
+
* holder. The server decided before writing anything, so the holder is
|
|
106
|
+
* untouched; `holder` is the row it read, which lets the caller act on it
|
|
107
|
+
* (send its bytes into its own row by id, adopt it, or try another name)
|
|
108
|
+
* without a second read.
|
|
109
|
+
*/
|
|
110
|
+
export class IngotNameHeldError extends SparkVaultMobileError {
|
|
111
|
+
constructor(message, options) {
|
|
112
|
+
super(message, { code: 'CONFLICT', statusCode: 409, details: options.details, meta: options.meta });
|
|
113
|
+
this.name = 'IngotNameHeldError';
|
|
114
|
+
this.holder = options.holder;
|
|
115
|
+
Object.setPrototypeOf(this, IngotNameHeldError.prototype);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
99
118
|
export class TusUploadError extends SparkVaultMobileError {
|
|
100
119
|
constructor(message, options = {}) {
|
|
101
120
|
super(message, {
|
|
102
|
-
code: options.httpStatus ?? 'tus_upload_error',
|
|
121
|
+
code: options.code ?? options.httpStatus ?? 'tus_upload_error',
|
|
103
122
|
statusCode: options.httpStatus ?? undefined,
|
|
104
123
|
});
|
|
105
124
|
this.name = 'TusUploadError';
|
|
@@ -108,6 +127,9 @@ export class TusUploadError extends SparkVaultMobileError {
|
|
|
108
127
|
this.fileSize = options.fileSize ?? null;
|
|
109
128
|
this.phase = options.phase ?? 'unknown';
|
|
110
129
|
this.sessionLost = options.sessionLost ?? false;
|
|
130
|
+
this.retryAfterMs = options.retryAfterMs ?? null;
|
|
131
|
+
this.retryLater = options.retryLater ?? false;
|
|
132
|
+
this.coreCode = options.coreCode ?? null;
|
|
111
133
|
Object.setPrototypeOf(this, TusUploadError.prototype);
|
|
112
134
|
}
|
|
113
135
|
/**
|
|
@@ -171,8 +193,7 @@ export function isNetworkError(err) {
|
|
|
171
193
|
* per-upload token minted with the ingot (expired, consumed, or bound to a
|
|
172
194
|
* different session) — not the vault session. Re-unsealing the vault cannot
|
|
173
195
|
* fix it; the caller creates a new upload session (`POST /ingots`) instead.
|
|
174
|
-
* Use `
|
|
175
|
-
* rejections apart.
|
|
196
|
+
* Use `vatRefusalReason` to tell the API's VAT refusals apart.
|
|
176
197
|
*/
|
|
177
198
|
export function isAuthError(err) {
|
|
178
199
|
return (err instanceof SparkVaultMobileError &&
|
|
@@ -180,26 +201,48 @@ export function isAuthError(err) {
|
|
|
180
201
|
(err.statusCode === 401 || err.statusCode === 403));
|
|
181
202
|
}
|
|
182
203
|
/**
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
204
|
+
* The reason the API refused the vault access token, or null when the error
|
|
205
|
+
* is not a VAT refusal:
|
|
206
|
+
* - `VAT_INVALID` (401): no, a malformed, unknown or swept token, or one a
|
|
207
|
+
* since-revoked DVAK minted — unseal again. Never the login.
|
|
208
|
+
* - `VAT_EXPIRED` (403): the token outlived its TTL — unseal again and
|
|
209
|
+
* retry the same request as-is.
|
|
210
|
+
* - `VAT_READ_ONLY` (403): a View Only token on a write — no unseal fixes it.
|
|
211
|
+
* A 403 with no reason is a token for another vault or account; a 401 with no
|
|
212
|
+
* reason is the login itself.
|
|
213
|
+
*/
|
|
214
|
+
export function vatRefusalReason(err) {
|
|
215
|
+
if (!(err instanceof SparkVaultMobileError) || err instanceof TusUploadError) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
return readVatRefusalReason(err);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* True when the API refused the vault access token because it has expired
|
|
222
|
+
* (403 `VAT_EXPIRED`). Re-unsealing the vault mints a fresh VAT and the same
|
|
223
|
+
* request can be retried as-is.
|
|
187
224
|
*/
|
|
188
225
|
export function isVatExpiredError(err) {
|
|
189
|
-
return (err
|
|
190
|
-
(err.statusCode === 401 || err.statusCode === 403) &&
|
|
191
|
-
err.details?.reason === 'VAT_EXPIRED');
|
|
226
|
+
return vatRefusalReason(err) === VAT_REFUSAL_REASONS.EXPIRED;
|
|
192
227
|
}
|
|
193
228
|
/**
|
|
194
|
-
* True when the vault access token is valid but read-only
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
229
|
+
* True when the vault access token is valid but read-only (403
|
|
230
|
+
* `VAT_READ_ONLY`): the session was unsealed with a read-only access level, so
|
|
231
|
+
* a write cannot succeed by retrying or by re-unsealing the same way — the
|
|
232
|
+
* caller needs write access to the vault.
|
|
198
233
|
*/
|
|
199
234
|
export function isReadOnlyVaultError(err) {
|
|
200
|
-
return (err
|
|
201
|
-
|
|
202
|
-
|
|
235
|
+
return vatRefusalReason(err) === VAT_REFUSAL_REASONS.READ_ONLY;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* True for the API's 404 not-found answer: the resource it names does not
|
|
239
|
+
* exist (or is not this caller's to see). The only answer that says a vault,
|
|
240
|
+
* an ingot or a key's vault is missing; a rate limit, an outage or a refused
|
|
241
|
+
* session says nothing about it. Never true for a `TusUploadError`: Forge's
|
|
242
|
+
* 404 is an upload session that is gone, not a missing resource.
|
|
243
|
+
*/
|
|
244
|
+
export function isNotFoundError(err) {
|
|
245
|
+
return err instanceof SparkVaultMobileError && !(err instanceof TusUploadError) && err.statusCode === 404;
|
|
203
246
|
}
|
|
204
247
|
/** True for a 429 rate-limit response — retry after a cooldown, never immediately. */
|
|
205
248
|
export function isRateLimitError(err) {
|
|
@@ -210,19 +253,22 @@ export function isRateLimitError(err) {
|
|
|
210
253
|
export function isIngotNotReadyError(err) {
|
|
211
254
|
return err instanceof IngotNotReadyError;
|
|
212
255
|
}
|
|
256
|
+
/** Type guard for a create refused over the same-name ingot holding its name. */
|
|
257
|
+
export function isIngotNameHeldError(err) {
|
|
258
|
+
return err instanceof IngotNameHeldError;
|
|
259
|
+
}
|
|
213
260
|
/**
|
|
214
|
-
* True when retrying a failed download can succeed.
|
|
215
|
-
*
|
|
216
|
-
*
|
|
261
|
+
* True when retrying a failed download can succeed. A validation failure always
|
|
262
|
+
* fails the same way again, and an HTTP refusal is retried only when the
|
|
263
|
+
* platform's retry rule (`isTransientHttpStatus`, mirrored from
|
|
264
|
+
* `@sparkvault/app-sdk/transient`) calls it transient; every other failure
|
|
265
|
+
* (connectivity, an answer that could not be read) is worth another attempt.
|
|
217
266
|
*/
|
|
218
267
|
export function isRetryableDownloadError(err) {
|
|
219
268
|
if (err instanceof SparkVaultValidationError)
|
|
220
269
|
return false;
|
|
221
270
|
const status = err instanceof SparkVaultMobileError ? err.statusCode : undefined;
|
|
222
|
-
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
return true;
|
|
271
|
+
return typeof status !== 'number' || status < 400 || isTransientHttpStatus(status);
|
|
226
272
|
}
|
|
227
273
|
/**
|
|
228
274
|
* Single source of truth for turning a 402 response into a typed gate error.
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/folders.js
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
1
|
import { validateFolderId, validateIngotId, validateVaultId } from './validation.js';
|
|
2
|
+
import { apiPath } from './request-path.js';
|
|
2
3
|
export class MobileFoldersClient {
|
|
3
4
|
constructor(http) {
|
|
4
5
|
this.http = http;
|
|
5
6
|
}
|
|
6
7
|
async list(vaultId, vat) {
|
|
7
8
|
validateVaultId(vaultId);
|
|
8
|
-
const response = await this.http.get(`/vaults/${vaultId}/folders`, { vat });
|
|
9
|
+
const response = await this.http.get(apiPath `/vaults/${vaultId}/folders`, { vat });
|
|
9
10
|
return response.data;
|
|
10
11
|
}
|
|
11
12
|
async get(vaultId, folderId, vat) {
|
|
12
13
|
validateVaultId(vaultId);
|
|
13
14
|
validateFolderId(folderId);
|
|
14
|
-
const response = await this.http.get(`/vaults/${vaultId}/folders/${folderId}`, { vat });
|
|
15
|
+
const response = await this.http.get(apiPath `/vaults/${vaultId}/folders/${folderId}`, { vat });
|
|
15
16
|
return response.data;
|
|
16
17
|
}
|
|
17
18
|
async getBreadcrumb(vaultId, folderId, vat) {
|
|
18
19
|
validateVaultId(vaultId);
|
|
19
20
|
validateFolderId(folderId);
|
|
20
|
-
const response = await this.http.get(`/vaults/${vaultId}/folders/${folderId}`, { vat });
|
|
21
|
+
const response = await this.http.get(apiPath `/vaults/${vaultId}/folders/${folderId}`, { vat });
|
|
21
22
|
return response.data.breadcrumb ?? [];
|
|
22
23
|
}
|
|
23
24
|
async create(vaultId, vat, data) {
|
|
24
25
|
validateVaultId(vaultId);
|
|
25
|
-
const response = await this.http.post(`/vaults/${vaultId}/folders`, data, { vat });
|
|
26
|
+
const response = await this.http.post(apiPath `/vaults/${vaultId}/folders`, data, { vat });
|
|
26
27
|
return response.data;
|
|
27
28
|
}
|
|
28
29
|
async update(vaultId, folderId, vat, data) {
|
|
29
30
|
validateVaultId(vaultId);
|
|
30
31
|
validateFolderId(folderId);
|
|
31
|
-
const response = await this.http.put(`/vaults/${vaultId}/folders/${folderId}`, data, { vat });
|
|
32
|
+
const response = await this.http.put(apiPath `/vaults/${vaultId}/folders/${folderId}`, data, { vat });
|
|
32
33
|
return response.data;
|
|
33
34
|
}
|
|
34
35
|
async move(vaultId, folderId, vat, newParentId) {
|
|
@@ -40,7 +41,7 @@ export class MobileFoldersClient {
|
|
|
40
41
|
async delete(vaultId, folderId, vat) {
|
|
41
42
|
validateVaultId(vaultId);
|
|
42
43
|
validateFolderId(folderId);
|
|
43
|
-
await this.http.delete(`/vaults/${vaultId}/folders/${folderId}`, { vat });
|
|
44
|
+
await this.http.delete(apiPath `/vaults/${vaultId}/folders/${folderId}`, { vat });
|
|
44
45
|
}
|
|
45
46
|
async moveIngot(vaultId, ingotId, vat, folderId) {
|
|
46
47
|
validateVaultId(vaultId);
|
|
@@ -48,7 +49,7 @@ export class MobileFoldersClient {
|
|
|
48
49
|
if (folderId !== null) {
|
|
49
50
|
validateFolderId(folderId);
|
|
50
51
|
}
|
|
51
|
-
await this.http.patch(`/vaults/${vaultId}/ingots/${ingotId}`, { folder_id: folderId }, { vat });
|
|
52
|
+
await this.http.patch(apiPath `/vaults/${vaultId}/ingots/${ingotId}`, { folder_id: folderId }, { vat });
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
//# sourceMappingURL=folders.js.map
|
package/dist/folders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../src/folders.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../src/folders.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,OAAO,mBAAmB;IAG9B,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,GAAW;QACrC,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsB,OAAO,CAAA,WAAW,OAAO,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACxG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW;QACtD,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,OAAO,CAAA,WAAW,OAAO,YAAY,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW;QAChE,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAClC,OAAO,CAAA,WAAW,OAAO,YAAY,QAAQ,EAAE,EAC/C,EAAE,GAAG,EAAE,CACR,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAW,EAAE,IAAyB;QAClE,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAS,OAAO,CAAA,WAAW,OAAO,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAClG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW,EAAE,IAAyB;QACpF,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,OAAO,CAAA,WAAW,OAAO,YAAY,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7G,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW,EAAE,WAA0B;QACnF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW,EAAE,MAAe;QAC7E,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW;QACzD,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA,WAAW,OAAO,YAAY,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,OAAe,EAAE,GAAW,EAAE,QAAuB;QACpF,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA,WAAW,OAAO,WAAW,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzG,CAAC;CACF"}
|
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
|
-
|
|
54
|
+
/** The SDK error for a request the fetch adapter rejected (no HTTP response). */
|
|
55
|
+
private transportError;
|
|
34
56
|
/**
|
|
35
|
-
* Single
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
}
|