@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.
Files changed (156) 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/transfer-retry.d.ts +298 -0
  36. package/dist/app-sdk/transfer-retry.js +535 -0
  37. package/dist/app-sdk/transfer-retry.js.map +1 -0
  38. package/dist/app-sdk/transient.d.ts +23 -0
  39. package/dist/app-sdk/transient.js +29 -0
  40. package/dist/app-sdk/transient.js.map +1 -0
  41. package/dist/app-sdk/upload-publication.d.ts +81 -0
  42. package/dist/app-sdk/upload-publication.js +93 -0
  43. package/dist/app-sdk/upload-publication.js.map +1 -0
  44. package/dist/app-sdk/vat-refusal.d.ts +66 -0
  45. package/dist/app-sdk/vat-refusal.js +69 -0
  46. package/dist/app-sdk/vat-refusal.js.map +1 -0
  47. package/dist/billing.d.ts +9 -17
  48. package/dist/billing.js +14 -17
  49. package/dist/billing.js.map +1 -1
  50. package/dist/config.d.ts +33 -1
  51. package/dist/config.js +23 -17
  52. package/dist/config.js.map +1 -1
  53. package/dist/encoding.d.ts +30 -4
  54. package/dist/encoding.js +89 -83
  55. package/dist/encoding.js.map +1 -1
  56. package/dist/entropy.d.ts +25 -4
  57. package/dist/entropy.js +62 -15
  58. package/dist/entropy.js.map +1 -1
  59. package/dist/entropy.test-d.d.ts +40 -0
  60. package/dist/entropy.test-d.js +12 -0
  61. package/dist/entropy.test-d.js.map +1 -0
  62. package/dist/errors.d.ts +105 -21
  63. package/dist/errors.js +74 -28
  64. package/dist/errors.js.map +1 -1
  65. package/dist/folders.js +8 -7
  66. package/dist/folders.js.map +1 -1
  67. package/dist/http.d.ts +57 -15
  68. package/dist/http.js +125 -138
  69. package/dist/http.js.map +1 -1
  70. package/dist/identity-dialog.js +4 -30
  71. package/dist/identity-dialog.js.map +1 -1
  72. package/dist/identity-input.d.ts +39 -0
  73. package/dist/identity-input.js +59 -0
  74. package/dist/identity-input.js.map +1 -0
  75. package/dist/index.d.ts +8 -7
  76. package/dist/index.js +5 -4
  77. package/dist/index.js.map +1 -1
  78. package/dist/ingots.d.ts +77 -32
  79. package/dist/ingots.js +152 -136
  80. package/dist/ingots.js.map +1 -1
  81. package/dist/mutex.d.ts +1 -2
  82. package/dist/mutex.js +0 -6
  83. package/dist/mutex.js.map +1 -1
  84. package/dist/notify.d.ts +7 -2
  85. package/dist/notify.js +12 -15
  86. package/dist/notify.js.map +1 -1
  87. package/dist/notify.test-d.d.ts +3 -2
  88. package/dist/notify.test-d.js +1 -1
  89. package/dist/products/identity.d.ts +5 -0
  90. package/dist/products/identity.js +40 -35
  91. package/dist/products/identity.js.map +1 -1
  92. package/dist/request-path.d.ts +32 -0
  93. package/dist/request-path.js +35 -0
  94. package/dist/request-path.js.map +1 -0
  95. package/dist/sparks.js +16 -15
  96. package/dist/sparks.js.map +1 -1
  97. package/dist/tus.d.ts +198 -16
  98. package/dist/tus.js +816 -327
  99. package/dist/tus.js.map +1 -1
  100. package/dist/types.d.ts +183 -23
  101. package/dist/users.d.ts +12 -5
  102. package/dist/users.js +27 -19
  103. package/dist/users.js.map +1 -1
  104. package/dist/validation.d.ts +20 -5
  105. package/dist/validation.js +29 -27
  106. package/dist/validation.js.map +1 -1
  107. package/dist/vaults.d.ts +34 -83
  108. package/dist/vaults.js +64 -44
  109. package/dist/vaults.js.map +1 -1
  110. package/dist/vaults.test-d.d.ts +22 -0
  111. package/dist/vaults.test-d.js +14 -0
  112. package/dist/vaults.test-d.js.map +1 -0
  113. package/package.json +4 -2
  114. package/src/account.ts +16 -11
  115. package/src/app-sdk/email-address.js +94 -0
  116. package/src/app-sdk/encoding.js +250 -0
  117. package/src/app-sdk/entropy-contract.js +56 -0
  118. package/src/app-sdk/filename.js +174 -0
  119. package/src/app-sdk/forge-url.js +224 -0
  120. package/src/app-sdk/ids.js +71 -0
  121. package/src/app-sdk/ingot-access-log.js +51 -0
  122. package/src/app-sdk/phone.js +139 -0
  123. package/src/app-sdk/platform-domains.js +99 -0
  124. package/src/app-sdk/request-path.js +81 -0
  125. package/src/app-sdk/transfer-retry.js +563 -0
  126. package/src/app-sdk/transient.js +30 -0
  127. package/src/app-sdk/upload-publication.js +102 -0
  128. package/src/app-sdk/vat-refusal.js +74 -0
  129. package/src/billing.ts +16 -25
  130. package/src/config.ts +56 -23
  131. package/src/encoding.ts +91 -103
  132. package/src/entropy.test-d.ts +47 -0
  133. package/src/entropy.ts +86 -20
  134. package/src/errors.ts +135 -38
  135. package/src/folders.ts +8 -7
  136. package/src/http.ts +145 -150
  137. package/src/identity-dialog.tsx +4 -37
  138. package/src/identity-input.ts +70 -0
  139. package/src/index.ts +13 -3
  140. package/src/ingots.ts +225 -180
  141. package/src/mutex.ts +1 -8
  142. package/src/notify.test-d.ts +3 -1
  143. package/src/notify.ts +19 -17
  144. package/src/products/identity.ts +45 -39
  145. package/src/request-path.ts +45 -0
  146. package/src/sparks.ts +16 -13
  147. package/src/tus.ts +1054 -408
  148. package/src/types.ts +181 -23
  149. package/src/users.ts +27 -17
  150. package/src/validation.ts +30 -24
  151. package/src/vaults.test-d.ts +29 -0
  152. package/src/vaults.ts +87 -153
  153. package/dist/platform-domains.generated.d.ts +0 -2
  154. package/dist/platform-domains.generated.js +0 -16
  155. package/dist/platform-domains.generated.js.map +0 -1
  156. package/src/platform-domains.generated.ts +0 -17
package/dist/ingots.js CHANGED
@@ -1,6 +1,24 @@
1
- import { IngotNotReadyError, isRetryableDownloadError, SparkVaultMobileError, SparkVaultValidationError, } from './errors.js';
2
- import { MobileTusUploader } from './tus.js';
3
- import { validateIngotId, validateVaultId } from './validation.js';
1
+ import { readForgeTransferUrl } from './app-sdk/forge-url.js';
2
+ import { INGOT_ACCESS_EVENT_TYPES, readIngotAccess } from './app-sdk/ingot-access-log.js';
3
+ import { IngotNameHeldError, IngotNotReadyError, isRetryableDownloadError, SparkVaultMobileError, SparkVaultValidationError, TusUploadError, } from './errors.js';
4
+ import { allowsHost, MobileTusUploader } from './tus.js';
5
+ import { validateIngotId, validateResourceId, validateVaultId } from './validation.js';
6
+ import { apiPath } from './request-path.js';
7
+ /**
8
+ * What the server does when a create's name is already held in the target
9
+ * folder (case-insensitive). The server decides on the holder it read before
10
+ * writing anything, so a caller that must not replace content says so here:
11
+ * - `upsert` (the server default): the upload replaces the holder's content.
12
+ * - `complete_pending`: a holder whose own upload never finalized is completed
13
+ * (`created: false`); a published holder is refused with
14
+ * `IngotNameHeldError`, untouched.
15
+ * - `refuse`: any holder, its upload finished or not, is refused with
16
+ * `IngotNameHeldError`, untouched; the create only ever mints.
17
+ * - `new_name`: the holder is never touched; the ingot is minted under the
18
+ * first free numbered name the server picks ("report (2).pdf"), returned
19
+ * as the result's `name`.
20
+ */
21
+ export const NAME_CONFLICT_POLICIES = ['upsert', 'complete_pending', 'refuse', 'new_name'];
4
22
  /**
5
23
  * The API reports a download against a still-processing ingot as a generic
6
24
  * VALIDATION_ERROR whose message is the only stable signal
@@ -19,6 +37,27 @@ function toTypedDownloadError(err) {
19
37
  }
20
38
  return err;
21
39
  }
40
+ /**
41
+ * A create refused over its holder (`complete_pending` over a published one,
42
+ * `refuse` over any) answers 409 CONFLICT with `details.reason === 'NAME_HELD'`
43
+ * and the holder the server read. Every other 409 on the create (a folder
44
+ * being deleted, a cross-manager name) carries no holder and stays a plain
45
+ * `SparkVaultMobileError`.
46
+ */
47
+ function toTypedCreateError(err) {
48
+ if (!(err instanceof SparkVaultMobileError) || err.statusCode !== 409 || err.details?.reason !== 'NAME_HELD') {
49
+ return err;
50
+ }
51
+ const { ingot_id: ingotId, status, size_bytes: sizeBytes } = err.details;
52
+ if (typeof ingotId !== 'string' || typeof status !== 'string' || typeof sizeBytes !== 'number') {
53
+ return err;
54
+ }
55
+ return new IngotNameHeldError(err.message, {
56
+ holder: { ingotId, status, sizeBytes },
57
+ details: err.details,
58
+ meta: err.meta,
59
+ });
60
+ }
22
61
  export class MobileIngotsClient {
23
62
  constructor(config, http) {
24
63
  this.config = config;
@@ -39,19 +78,21 @@ export class MobileIngotsClient {
39
78
  folder: options.folder,
40
79
  folderId: options.folderId,
41
80
  contentHmac: options.contentHmac,
81
+ onNameConflict: options.onNameConflict,
42
82
  });
43
83
  const created = init.created ?? true;
44
- // The ingot row exists but no Forge session does: a caller that refuses
45
- // to replace an existing ingot (created: false) aborts here, before a
46
- // byte moves, and its error reaches it untouched.
47
- options.onIngotCreated?.({ ingotId: init.ingotId, created });
84
+ const name = init.name ?? options.name;
85
+ // The placement is written but no Forge session exists yet: a throw from
86
+ // the hook stops the upload before a byte moves and reaches the caller
87
+ // untouched.
88
+ options.onIngotCreated?.({ ingotId: init.ingotId, created, name });
48
89
  await this.tus.uploadFromUri({
49
90
  fileUri: options.fileUri,
50
91
  fileSize: options.fileSize,
51
- filename: options.name,
52
- contentType: options.contentType,
92
+ filename: name,
53
93
  forgeUrl: init.forgeUrl,
54
94
  onSessionCreated: session => options.onSessionCreated?.({ ...session, ingotId: init.ingotId, created }),
95
+ onSessionExpiry: options.onSessionExpiry,
55
96
  transport: options.transport,
56
97
  transferPolicy: options.transferPolicy,
57
98
  onProgress: options.onProgress,
@@ -59,10 +100,10 @@ export class MobileIngotsClient {
59
100
  abortBehavior: options.abortBehavior,
60
101
  debug: options.debug,
61
102
  });
62
- const ingot = await this.verifyIngotActive(options.vaultId, init.ingotId, options.vat, options.debug);
103
+ const ingot = await this.verifyIngotActive({ vaultId: options.vaultId, ingotId: init.ingotId, vat: options.vat }, { filename: name, fileSize: options.fileSize }, options.debug);
63
104
  return {
64
105
  ingot_id: init.ingotId,
65
- name: init.name ?? options.name,
106
+ name,
66
107
  size_bytes: init.sizeBytes ?? options.fileSize,
67
108
  storage_location: 's3',
68
109
  // A server that does not report it minted the row (the upsert is the
@@ -79,8 +120,10 @@ export class MobileIngotsClient {
79
120
  * sent, then the ingot is verified active exactly as a fresh upload is.
80
121
  *
81
122
  * A `TusUploadError` with `sessionLost` means Forge no longer has the
82
- * session (expired or terminated); the caller drops it and starts over
83
- * with `uploadFromUri`.
123
+ * session (its expiry passed, or it was terminated); the caller drops it
124
+ * and starts over with `uploadFromUri`. A session `uploadUrl` that is not
125
+ * an upload session on an allowed transfer host is refused
126
+ * (SparkVaultValidationError) before the ISTK or a byte is sent anywhere.
84
127
  */
85
128
  async resumeUpload(options) {
86
129
  validateVaultId(options.vaultId);
@@ -92,8 +135,8 @@ export class MobileIngotsClient {
92
135
  fileUri: options.fileUri,
93
136
  fileSize: options.fileSize,
94
137
  filename: options.name,
95
- contentType: options.contentType,
96
138
  resume: options.session,
139
+ onSessionExpiry: options.onSessionExpiry,
97
140
  transport: options.transport,
98
141
  transferPolicy: options.transferPolicy,
99
142
  onProgress: options.onProgress,
@@ -101,7 +144,7 @@ export class MobileIngotsClient {
101
144
  abortBehavior: options.abortBehavior,
102
145
  debug: options.debug,
103
146
  });
104
- const ingot = await this.verifyIngotActive(options.vaultId, options.ingotId, options.vat, options.debug);
147
+ const ingot = await this.verifyIngotActive({ vaultId: options.vaultId, ingotId: options.ingotId, vat: options.vat }, { filename: options.name, fileSize: options.fileSize }, options.debug);
105
148
  return {
106
149
  ingot_id: options.ingotId,
107
150
  name: options.name,
@@ -116,6 +159,8 @@ export class MobileIngotsClient {
116
159
  * longer has it. Lets a caller reconcile sessions on relaunch — a session
117
160
  * at `offset === length` only needs its ingot verified, a lost one needs a
118
161
  * fresh `uploadFromUri` — without spending an upload slot to find out.
162
+ * An `uploadUrl` that is not an upload session on an allowed transfer host
163
+ * is refused (SparkVaultValidationError) before the ISTK is sent anywhere.
119
164
  */
120
165
  probeUploadSession(session) {
121
166
  return this.tus.probeSession(session);
@@ -126,6 +171,8 @@ export class MobileIngotsClient {
126
171
  * the partial transfer's billing instead of waiting for expiry. Resolves
127
172
  * once the session is gone, including when Forge no longer had it
128
173
  * (404/410); any other failure rejects so the caller can retry later.
174
+ * An `uploadUrl` that is not an upload session on an allowed transfer host
175
+ * is refused (SparkVaultValidationError) before the ISTK is sent anywhere.
129
176
  */
130
177
  terminateUploadSession(session) {
131
178
  return this.tus.terminateSession(session);
@@ -153,7 +200,14 @@ export class MobileIngotsClient {
153
200
  if (options.contentHmac) {
154
201
  body.content_hmac = options.contentHmac;
155
202
  }
156
- const response = await this.http.post(`/vaults/${options.vaultId}/ingots`, body, { vat: options.vat });
203
+ if (options.onNameConflict) {
204
+ body.on_name_conflict = options.onNameConflict;
205
+ }
206
+ const response = await this.http
207
+ .post(apiPath `/vaults/${options.vaultId}/ingots`, body, { vat: options.vat })
208
+ .catch((err) => {
209
+ throw toTypedCreateError(err);
210
+ });
157
211
  if (!response.data.ingot_id || !response.data.forge_url) {
158
212
  throw new SparkVaultMobileError('Server returned invalid response for ingot creation');
159
213
  }
@@ -172,7 +226,7 @@ export class MobileIngotsClient {
172
226
  if (abortSignal?.aborted) {
173
227
  throw new SparkVaultMobileError('Upload cancelled', { code: 'upload_cancelled' });
174
228
  }
175
- const response = await this.http.put(`/vaults/${vaultId}/ingots/${ingotId}`, {
229
+ const response = await this.http.put(apiPath `/vaults/${vaultId}/ingots/${ingotId}`, {
176
230
  name,
177
231
  content_type: contentType,
178
232
  size_bytes: fileSize,
@@ -185,10 +239,10 @@ export class MobileIngotsClient {
185
239
  fileUri,
186
240
  fileSize,
187
241
  filename: name,
188
- contentType,
189
242
  forgeUrl: response.data.forge_url,
190
243
  // A replace never mints an ingot: the row is the caller's existing one.
191
244
  onSessionCreated: session => options.onSessionCreated?.({ ...session, ingotId, created: false }),
245
+ onSessionExpiry: options.onSessionExpiry,
192
246
  transport: options.transport,
193
247
  transferPolicy: options.transferPolicy,
194
248
  onProgress,
@@ -196,7 +250,7 @@ export class MobileIngotsClient {
196
250
  abortBehavior: options.abortBehavior,
197
251
  debug,
198
252
  });
199
- const ingot = await this.verifyIngotActive(vaultId, response.data.ingot_id, vat, debug);
253
+ const ingot = await this.verifyIngotActive({ vaultId, ingotId: response.data.ingot_id, vat }, { filename: name, fileSize }, debug);
200
254
  return {
201
255
  ingot_id: response.data.ingot_id,
202
256
  name,
@@ -214,78 +268,69 @@ export class MobileIngotsClient {
214
268
  */
215
269
  async checkContentHmacs(vaultId, vat, hashes) {
216
270
  validateVaultId(vaultId);
217
- const response = await this.http.post(`/vaults/${vaultId}/ingots/hash-check`, { hashes }, { vat });
271
+ const response = await this.http.post(apiPath `/vaults/${vaultId}/ingots/hash-check`, { hashes }, { vat });
218
272
  return response.data;
219
273
  }
220
274
  async rename(vaultId, ingotId, vat, name) {
221
275
  validateVaultId(vaultId);
222
276
  validateIngotId(ingotId);
223
- const response = await this.http.patch(`/vaults/${vaultId}/ingots/${ingotId}`, { name }, { vat });
277
+ const response = await this.http.patch(apiPath `/vaults/${vaultId}/ingots/${ingotId}`, { name }, { vat });
224
278
  return response.data;
225
279
  }
226
280
  async list(vaultId, vat, options) {
227
281
  validateVaultId(vaultId);
228
- const params = new URLSearchParams();
229
- if (options?.limit)
230
- params.append('limit', options.limit.toString());
231
- if (options?.cursor)
232
- params.append('cursor', options.cursor);
233
- const query = params.toString();
234
- const response = await this.http.get(query ? `/vaults/${vaultId}/ingots?${query}` : `/vaults/${vaultId}/ingots`, { vat });
282
+ const response = await this.http.get(apiPath `/vaults/${vaultId}/ingots`, {
283
+ vat,
284
+ query: { limit: options?.limit || undefined, cursor: options?.cursor },
285
+ });
235
286
  return response.data;
236
287
  }
288
+ /**
289
+ * List a folder, or the vault root, whole: the folder, its breadcrumb, its
290
+ * direct subfolders and every ingot directly in it, in one response.
291
+ */
237
292
  async listContents(vaultId, vat, options) {
238
293
  validateVaultId(vaultId);
239
- const params = new URLSearchParams();
240
- if (options?.folder_id)
241
- params.append('folder_id', options.folder_id);
242
- if (options?.cursor)
243
- params.append('cursor', options.cursor);
244
- if (options?.limit)
245
- params.append('limit', options.limit.toString());
246
- if (options?.sort_by)
247
- params.append('sort_by', options.sort_by);
248
- if (options?.sort_order)
249
- params.append('sort_order', options.sort_order);
250
- if (options?.type && options.type !== 'all')
251
- params.append('type', options.type);
252
- const query = params.toString();
253
- const response = await this.http.get(query ? `/vaults/${vaultId}/contents?${query}` : `/vaults/${vaultId}/contents`, { vat });
294
+ const response = await this.http.get(apiPath `/vaults/${vaultId}/contents`, {
295
+ vat,
296
+ query: {
297
+ folder_id: options?.folder_id,
298
+ sort_by: options?.sort_by,
299
+ sort_order: options?.sort_order,
300
+ },
301
+ });
254
302
  return response.data;
255
303
  }
256
304
  async search(vaultId, vat, options) {
257
305
  validateVaultId(vaultId);
258
- const params = new URLSearchParams();
259
- if (options?.q)
260
- params.append('q', options.q);
261
- if (options?.file_type && options.file_type !== 'all')
262
- params.append('file_type', options.file_type);
263
- if (options?.folder_id)
264
- params.append('folder_id', options.folder_id);
265
- if (options?.min_size !== undefined)
266
- params.append('min_size', options.min_size.toString());
267
- if (options?.max_size !== undefined)
268
- params.append('max_size', options.max_size.toString());
269
- if (options?.limit)
270
- params.append('limit', options.limit.toString());
271
- if (options?.cursor)
272
- params.append('cursor', options.cursor);
273
- if (options?.sort_order)
274
- params.append('sort_order', options.sort_order);
275
- const query = params.toString();
276
- const response = await this.http.get(query ? `/vaults/${vaultId}/ingots/search?${query}` : `/vaults/${vaultId}/ingots/search`, { vat });
306
+ const response = await this.http.get(apiPath `/vaults/${vaultId}/ingots/search`, {
307
+ vat,
308
+ query: {
309
+ q: options?.q,
310
+ file_type: options?.file_type === 'all' ? undefined : options?.file_type,
311
+ folder_id: options?.folder_id,
312
+ min_size: options?.min_size,
313
+ max_size: options?.max_size,
314
+ limit: options?.limit || undefined,
315
+ cursor: options?.cursor,
316
+ sort_order: options?.sort_order,
317
+ },
318
+ });
277
319
  return response.data;
278
320
  }
279
321
  async get(vaultId, ingotId, vat, options) {
280
322
  validateVaultId(vaultId);
281
323
  validateIngotId(ingotId);
282
- const response = await this.http.get(`/vaults/${vaultId}/ingots/${ingotId}${options?.consistent ? "?consistent=true" : ""}`, { vat });
324
+ const response = await this.http.get(apiPath `/vaults/${vaultId}/ingots/${ingotId}`, {
325
+ vat,
326
+ query: { consistent: options?.consistent ? 'true' : undefined },
327
+ });
283
328
  return response.data;
284
329
  }
285
330
  async delete(vaultId, ingotId, vat) {
286
331
  validateVaultId(vaultId);
287
332
  validateIngotId(ingotId);
288
- await this.http.delete(`/vaults/${vaultId}/ingots/${ingotId}`, { vat });
333
+ await this.http.delete(apiPath `/vaults/${vaultId}/ingots/${ingotId}`, { vat });
289
334
  }
290
335
  /**
291
336
  * Mint a fresh signed download URL for an ingot, validated against the
@@ -298,7 +343,7 @@ export class MobileIngotsClient {
298
343
  validateVaultId(vaultId);
299
344
  validateIngotId(ingotId);
300
345
  const response = await this.http
301
- .post(`/vaults/${vaultId}/ingots/${ingotId}/download`, undefined, { vat })
346
+ .post(apiPath `/vaults/${vaultId}/ingots/${ingotId}/download`, undefined, { vat })
302
347
  .catch((err) => {
303
348
  throw toTypedDownloadError(err);
304
349
  });
@@ -374,43 +419,46 @@ export class MobileIngotsClient {
374
419
  async getSharingConfig(vaultId, ingotId, vat) {
375
420
  validateVaultId(vaultId);
376
421
  validateIngotId(ingotId);
377
- const response = await this.http.get(`/vaults/${vaultId}/ingots/${ingotId}/sharing`, { vat });
422
+ const response = await this.http.get(apiPath `/vaults/${vaultId}/ingots/${ingotId}/sharing`, { vat });
378
423
  return response.data;
379
424
  }
380
425
  async updateSharingConfig(vaultId, ingotId, vat, config) {
381
426
  validateVaultId(vaultId);
382
427
  validateIngotId(ingotId);
383
- const response = await this.http.put(`/vaults/${vaultId}/ingots/${ingotId}/sharing`, config, { vat });
428
+ const response = await this.http.put(apiPath `/vaults/${vaultId}/ingots/${ingotId}/sharing`, config, { vat });
384
429
  return response.data;
385
430
  }
386
431
  async addInvite(vaultId, ingotId, vat, identity, options = {}) {
387
432
  validateVaultId(vaultId);
388
433
  validateIngotId(ingotId);
389
- const response = await this.http.post(`/vaults/${vaultId}/ingots/${ingotId}/sharing/invite`, { identity, expires_in_seconds: options.expiresInSeconds }, { vat });
434
+ const response = await this.http.post(apiPath `/vaults/${vaultId}/ingots/${ingotId}/sharing/invite`, { identity, expires_in_seconds: options.expiresInSeconds }, { vat });
390
435
  return response.data;
391
436
  }
392
437
  async revokeInvite(vaultId, ingotId, vat, inviteId) {
393
438
  validateVaultId(vaultId);
394
439
  validateIngotId(ingotId);
395
- await this.http.delete(`/vaults/${vaultId}/ingots/${ingotId}/sharing/invite/${inviteId}`, { vat });
440
+ validateResourceId(inviteId, 'invite ID', 'inviteId');
441
+ await this.http.delete(apiPath `/vaults/${vaultId}/ingots/${ingotId}/sharing/invite/${inviteId}`, { vat });
396
442
  }
397
443
  async getAccessLogs(vaultId, ingotId, vat, options) {
398
444
  validateVaultId(vaultId);
399
445
  validateIngotId(ingotId);
400
- const params = new URLSearchParams();
401
- if (options?.limit)
402
- params.append('limit', options.limit.toString());
403
- if (options?.cursor)
404
- params.append('cursor', options.cursor);
405
- const query = params.toString();
406
- const response = await this.http.get(query
407
- ? `/vaults/${vaultId}/ingots/${ingotId}/audit-logs?${query}`
408
- : `/vaults/${vaultId}/ingots/${ingotId}/audit-logs`, { vat });
409
- const entries = response.data.entries ?? [];
410
- return {
411
- logs: entries.map(entry => this.toAccessLog(entry)),
412
- next_cursor: response.data.next_cursor,
413
- };
446
+ const response = await this.http.get(apiPath `/vaults/${vaultId}/ingots/${ingotId}/audit-logs`, {
447
+ vat,
448
+ query: {
449
+ limit: options?.limit || undefined,
450
+ cursor: options?.cursor,
451
+ event_types: INGOT_ACCESS_EVENT_TYPES.join(','),
452
+ },
453
+ });
454
+ const logs = [];
455
+ for (const entry of response.data.entries ?? []) {
456
+ const access = readIngotAccess(entry);
457
+ if (access) {
458
+ logs.push({ log_id: String(access.timestamp), ...access });
459
+ }
460
+ }
461
+ return { logs, next_cursor: response.data.next_cursor };
414
462
  }
415
463
  async getAccessStats(vaultId, ingotId, vat) {
416
464
  validateVaultId(vaultId);
@@ -428,30 +476,29 @@ export class MobileIngotsClient {
428
476
  throw new SparkVaultValidationError('Ingot audit logs are read-only. Configure vault access-log retention to expire old entries.');
429
477
  }
430
478
  /**
431
- * Wait for a just-uploaded ingot to finish server-side finalization.
479
+ * Read a just-uploaded ingot until the server reports it `active`.
432
480
  *
433
- * The bytes are already fully uploaded and the ingot record exists before
434
- * this runs, so this NEVER re-creates or re-uploads anything - it only polls
435
- * status. A `failed` status throws (a genuine server encryption error the
436
- * caller should surface). A still-`processing` ingot after the poll budget
437
- * is returned as success, not thrown: the transport completed and the ingot
438
- * exists, so treating it as a failure would make the caller re-run the whole
439
- * upload and mint a DUPLICATE ingot (re-streaming the entire file and
440
- * double-billing storage). Finalization completes asynchronously server-side.
481
+ * The upload resolved on Forge's receipt (a 2xx to the PATCH at the final
482
+ * offset, which Forge answers only once the ingot is published), so a read
483
+ * that is not `active` yet is a read lagging that publication, which the
484
+ * poll waits out. It never re-creates or re-uploads anything. A row still
485
+ * not `active` past the poll budget is never reported as a success: it
486
+ * throws a `TusUploadError` whose `retryLater` is set (every byte is
487
+ * received, publication is unconfirmed), so the caller resumes the session
488
+ * it persisted later, which asks Forge for the receipt again and sends no
489
+ * bytes, rather than recording a backup the vault may not hold.
441
490
  */
442
- async verifyIngotActive(vaultId, ingotId, vat, debug) {
491
+ async verifyIngotActive(ingotRef, upload, debug) {
492
+ const { vaultId, ingotId, vat } = ingotRef;
443
493
  const deadline = Date.now() + MobileIngotsClient.INGOT_STATUS_POLL_BUDGET_MS;
444
494
  let delay = MobileIngotsClient.INGOT_STATUS_POLL_INITIAL_MS;
445
495
  let ingot = await this.get(vaultId, ingotId, vat);
446
496
  while (ingot.status !== 'active') {
447
- if (ingot.status === 'failed') {
448
- throw new SparkVaultMobileError('Upload failed: server encryption error');
449
- }
450
497
  const remaining = deadline - Date.now();
451
498
  if (remaining <= 0) {
452
499
  debug?.log(`Ingot ${ingotId} still '${ingot.status}' after ${MobileIngotsClient.INGOT_STATUS_POLL_BUDGET_MS}ms; ` +
453
- 'upload transport is complete, finalizing asynchronously');
454
- return ingot;
500
+ 'the upload is received and will be confirmed on a later attempt');
501
+ throw new TusUploadError(`Upload received; the vault has not confirmed ingot ${ingotId} published yet (status ${ingot.status ?? 'unknown'})`, { ...upload, phase: 'finalize', retryLater: true });
455
502
  }
456
503
  await new Promise(resolve => setTimeout(resolve, Math.min(delay, remaining)));
457
504
  delay = Math.min(delay * 2, MobileIngotsClient.INGOT_STATUS_POLL_MAX_MS);
@@ -459,26 +506,6 @@ export class MobileIngotsClient {
459
506
  }
460
507
  return ingot;
461
508
  }
462
- toAccessLog(entry) {
463
- const eventType = entry.event_type ?? entry.action ?? '';
464
- const action = eventType.includes('download') ? 'download' : 'view';
465
- const actor = entry.actor;
466
- return {
467
- log_id: entry.log_id ?? entry.event_id ?? entry.id ?? String(entry.timestamp ?? entry.created_at ?? ''),
468
- action,
469
- identity: actor?.email ??
470
- entry.actor_email ??
471
- entry.identity ??
472
- actor?.id ??
473
- actor?.user_id ??
474
- actor?.api_key_id ??
475
- entry.actor_id ??
476
- 'Unknown',
477
- ip_address: entry.ip_address ?? '',
478
- user_agent: entry.user_agent ?? '',
479
- timestamp: entry.timestamp ?? entry.created_at ?? 0,
480
- };
481
- }
482
509
  async verifyDownloadedFile(fileDownloader, preferredUri, expectedUri, knownSizeBytes, expectedSizeBytes) {
483
510
  const filePath = preferredUri || expectedUri;
484
511
  const info = await fileDownloader.getInfo(filePath);
@@ -538,25 +565,14 @@ export class MobileIngotsClient {
538
565
  signal?.addEventListener('abort', onAbort, { once: true });
539
566
  });
540
567
  }
568
+ /** Refuse a download link that is not a Forge decrypt URL on a trusted host (forge-url's rule). */
541
569
  validateDownloadUrl(downloadUrl) {
542
- let url;
543
- try {
544
- url = new URL(downloadUrl);
545
- }
546
- catch {
547
- throw new SparkVaultValidationError('Invalid download URL from server');
548
- }
549
- if (url.protocol !== 'https:') {
550
- throw new SparkVaultValidationError('Invalid download URL from server', {
551
- reason: 'non_https_download_url',
552
- });
553
- }
554
- const allowed = this.config.allowedDownloadHostPatterns.some(pattern => pattern.test(url.hostname));
555
- if (!allowed) {
556
- throw new SparkVaultValidationError('Invalid download URL from server', {
557
- reason: 'download_host_not_allowed',
558
- hostname: url.hostname,
559
- });
570
+ const read = readForgeTransferUrl(downloadUrl, {
571
+ operation: 'decrypt',
572
+ isAllowedHost: allowsHost(this.config.allowedDownloadHostPatterns),
573
+ });
574
+ if (!read.ok) {
575
+ throw new SparkVaultValidationError('Invalid download URL from server', { reason: read.reason });
560
576
  }
561
577
  }
562
578
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ingots.js","sourceRoot":"","sources":["../src/ingots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingots.js","sourceRoot":"","sources":["../src/ingots.ts"],"names":[],"mappings":"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"}
package/dist/mutex.d.ts CHANGED
@@ -1,6 +1,5 @@
1
+ /** Runs one operation at a time; callers arriving while it runs share its result. */
1
2
  export interface DedupMutex<T> {
2
3
  dedupe(fn: () => Promise<T>): Promise<T>;
3
- isRunning(): boolean;
4
- reset(): void;
5
4
  }
6
5
  export declare function createDedupMutex<T>(): DedupMutex<T>;
package/dist/mutex.js CHANGED
@@ -9,12 +9,6 @@ export function createDedupMutex() {
9
9
  }
10
10
  return current;
11
11
  },
12
- isRunning() {
13
- return current !== null;
14
- },
15
- reset() {
16
- current = null;
17
- },
18
12
  };
19
13
  }
20
14
  //# sourceMappingURL=mutex.js.map
package/dist/mutex.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../src/mutex.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,GAAsB,IAAI,CAAC;IAEtC,OAAO;QACL,MAAM,CAAC,EAAoB;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;oBAC1B,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,SAAS;YACP,OAAO,OAAO,KAAK,IAAI,CAAC;QAC1B,CAAC;QACD,KAAK;YACH,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../src/mutex.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,GAAsB,IAAI,CAAC;IAEtC,OAAO;QACL,MAAM,CAAC,EAAoB;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;oBAC1B,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/notify.d.ts CHANGED
@@ -31,10 +31,15 @@ export interface NotificationRow {
31
31
  * The grant to open. Present only while a live reveal stands behind it — a
32
32
  * SEALED (secure) send that has not been recalled. A cleartext send delivers its
33
33
  * content inline in the channel and mints no grant; a recalled row's grant is
34
- * revoked and the pointer is withheld rather than echoed. Guard before building
35
- * a URL from it.
34
+ * revoked and the pointer is withheld rather than echoed.
36
35
  */
37
36
  sparklink_code?: string;
37
+ /**
38
+ * Where the grant opens: the URL every Notify channel carries for it, built by
39
+ * the server. Present exactly when `sparklink_code` is; open this rather than
40
+ * building a URL from the code.
41
+ */
42
+ pointer_url?: string;
38
43
  /**
39
44
  * True only when there is a secure part left to reveal — exactly when
40
45
  * `sparklink_code` is present. `false` does NOT mean "cleartext row": a recalled