@sparkvault/sdk-mobile 0.1.3

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 (82) hide show
  1. package/README.md +186 -0
  2. package/dist/auth.d.ts +74 -0
  3. package/dist/auth.js +515 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/billing.d.ts +21 -0
  6. package/dist/billing.js +10 -0
  7. package/dist/billing.js.map +1 -0
  8. package/dist/client.d.ts +27 -0
  9. package/dist/client.js +36 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +39 -0
  12. package/dist/config.js +69 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/encoding.d.ts +7 -0
  15. package/dist/encoding.js +113 -0
  16. package/dist/encoding.js.map +1 -0
  17. package/dist/entropy.d.ts +18 -0
  18. package/dist/entropy.js +35 -0
  19. package/dist/entropy.js.map +1 -0
  20. package/dist/errors.d.ts +46 -0
  21. package/dist/errors.js +72 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/folders.d.ts +15 -0
  24. package/dist/folders.js +54 -0
  25. package/dist/folders.js.map +1 -0
  26. package/dist/health.d.ts +19 -0
  27. package/dist/health.js +60 -0
  28. package/dist/health.js.map +1 -0
  29. package/dist/http.d.ts +45 -0
  30. package/dist/http.js +351 -0
  31. package/dist/http.js.map +1 -0
  32. package/dist/identity-dialog.d.ts +19 -0
  33. package/dist/identity-dialog.js +656 -0
  34. package/dist/identity-dialog.js.map +1 -0
  35. package/dist/index.d.ts +24 -0
  36. package/dist/index.js +15 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/ingots.d.ts +99 -0
  39. package/dist/ingots.js +365 -0
  40. package/dist/ingots.js.map +1 -0
  41. package/dist/mutex.d.ts +6 -0
  42. package/dist/mutex.js +20 -0
  43. package/dist/mutex.js.map +1 -0
  44. package/dist/push-tokens.d.ts +12 -0
  45. package/dist/push-tokens.js +15 -0
  46. package/dist/push-tokens.js.map +1 -0
  47. package/dist/sparks.d.ts +39 -0
  48. package/dist/sparks.js +32 -0
  49. package/dist/sparks.js.map +1 -0
  50. package/dist/tus.d.ts +24 -0
  51. package/dist/tus.js +202 -0
  52. package/dist/tus.js.map +1 -0
  53. package/dist/types.d.ts +406 -0
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/validation.d.ts +5 -0
  57. package/dist/validation.js +45 -0
  58. package/dist/validation.js.map +1 -0
  59. package/dist/vaults.d.ts +94 -0
  60. package/dist/vaults.js +106 -0
  61. package/dist/vaults.js.map +1 -0
  62. package/package.json +58 -0
  63. package/src/auth.ts +707 -0
  64. package/src/billing.ts +30 -0
  65. package/src/client.ts +51 -0
  66. package/src/config.ts +123 -0
  67. package/src/encoding.ts +150 -0
  68. package/src/entropy.ts +56 -0
  69. package/src/errors.ts +110 -0
  70. package/src/folders.ts +76 -0
  71. package/src/health.ts +81 -0
  72. package/src/http.ts +429 -0
  73. package/src/identity-dialog.tsx +955 -0
  74. package/src/index.ts +103 -0
  75. package/src/ingots.ts +593 -0
  76. package/src/mutex.ts +26 -0
  77. package/src/push-tokens.ts +26 -0
  78. package/src/sparks.ts +73 -0
  79. package/src/tus.ts +280 -0
  80. package/src/types.ts +487 -0
  81. package/src/validation.ts +49 -0
  82. package/src/vaults.ts +271 -0
@@ -0,0 +1,406 @@
1
+ export interface ApiMeta {
2
+ request_id: string;
3
+ response_ms: number;
4
+ timestamp: number;
5
+ api_version: string;
6
+ balance?: string;
7
+ quota?: {
8
+ limit: number;
9
+ used: number;
10
+ remaining: number;
11
+ resets_at: number;
12
+ };
13
+ }
14
+ export interface ApiResponse<T> {
15
+ data: T;
16
+ meta: ApiMeta;
17
+ }
18
+ export interface ApiErrorBody {
19
+ error?: {
20
+ code?: number | string;
21
+ message?: string;
22
+ details?: Record<string, unknown>;
23
+ };
24
+ message?: string;
25
+ data?: unknown;
26
+ meta?: ApiMeta;
27
+ }
28
+ export interface RateLimitInfo {
29
+ limit: number;
30
+ remaining: number;
31
+ reset: number;
32
+ }
33
+ export interface SparkVaultUser {
34
+ user_id: string;
35
+ email: string;
36
+ name?: string;
37
+ role: 'admin' | 'engineer' | 'viewer';
38
+ has_passkey?: boolean;
39
+ created_at: number;
40
+ }
41
+ export interface SparkVaultAccount {
42
+ account_id: string;
43
+ organization_name: string;
44
+ email: string;
45
+ status: 'active' | 'suspended';
46
+ balance: string;
47
+ logo_url?: string;
48
+ logo_dark_url?: string;
49
+ created_at: number;
50
+ }
51
+ export type IdentityType = 'email' | 'phone';
52
+ export type IdentityMethodId = 'totp_email' | 'totp_sms' | 'totp_voice' | 'passkey' | 'sparklink' | 'social_google' | 'social_apple' | 'social_microsoft' | 'social_github' | 'social_facebook' | 'social_linkedin' | 'enterprise_okta' | 'enterprise_entra' | 'enterprise_onelogin' | 'enterprise_ping' | 'enterprise_jumpcloud';
53
+ export interface IdentityBranding {
54
+ companyName: string | null;
55
+ logoLight: string | null;
56
+ logoDark: string | null;
57
+ backdrop_blur?: boolean;
58
+ themeMode?: 'light' | 'dark';
59
+ }
60
+ export interface IdentityConfig {
61
+ accountId: string;
62
+ branding?: IdentityBranding;
63
+ allowedIdentityTypes?: IdentityType[];
64
+ methods: IdentityMethodId[];
65
+ wsDomain?: string;
66
+ }
67
+ export interface IdentityJwk {
68
+ kty: 'OKP';
69
+ crv: 'Ed25519';
70
+ x: string;
71
+ kid?: string;
72
+ alg?: 'EdDSA' | string;
73
+ use?: string;
74
+ }
75
+ export interface IdentityJwks {
76
+ keys: IdentityJwk[];
77
+ }
78
+ export interface IdentityTokenClaims {
79
+ iss: string;
80
+ sub: string;
81
+ aud: string;
82
+ exp: number;
83
+ iat: number;
84
+ nbf?: number;
85
+ jti?: string;
86
+ identity: string;
87
+ identity_type: IdentityType;
88
+ verified_at: number;
89
+ method: string;
90
+ }
91
+ export interface IdentityVerifyResult {
92
+ token: string;
93
+ identity: string;
94
+ identityType: IdentityType;
95
+ method?: string;
96
+ redirect?: string;
97
+ jwksUri: string;
98
+ jwks?: IdentityJwks;
99
+ }
100
+ export interface SendTotpRequest {
101
+ identity: string;
102
+ identityType: IdentityType;
103
+ method: 'email' | 'sms' | 'voice';
104
+ }
105
+ export interface VerifyTotpRequest {
106
+ kindling: string;
107
+ pin: string;
108
+ recipient: string;
109
+ }
110
+ export interface RequestPinRequest {
111
+ email: string;
112
+ organization_name?: string;
113
+ }
114
+ export interface RequestPinResponse {
115
+ kindling: string;
116
+ expires_at: number;
117
+ retry_after?: number;
118
+ is_signup: boolean;
119
+ }
120
+ export interface PinVerifyRequest {
121
+ kindling: string;
122
+ pin: string;
123
+ recipient: string;
124
+ organization_name?: string;
125
+ }
126
+ export interface PinVerifyLoginResponse {
127
+ access_token: string;
128
+ refresh_token: string;
129
+ token_type: 'Bearer';
130
+ expires_in: number;
131
+ user: SparkVaultUser;
132
+ }
133
+ export interface PinVerifySignupPendingResponse {
134
+ verified: true;
135
+ needs_signup_info: true;
136
+ signup_token: string;
137
+ expires_at: number;
138
+ }
139
+ export type PinVerifyResponse = PinVerifyLoginResponse | PinVerifySignupPendingResponse;
140
+ export interface CompleteSignupRequest {
141
+ organization_name: string;
142
+ full_name?: string;
143
+ }
144
+ export interface CompleteSignupResponse {
145
+ access_token: string;
146
+ refresh_token: string;
147
+ token_type?: 'Bearer';
148
+ expires_in?: number;
149
+ user: SparkVaultUser;
150
+ account: SparkVaultAccount;
151
+ }
152
+ export type PasskeySession = Record<string, unknown>;
153
+ export interface PasskeyAuthOptions {
154
+ challenge: string;
155
+ timeout: number;
156
+ rpId: string;
157
+ allowCredentials?: {
158
+ id: string;
159
+ type: 'public-key';
160
+ }[];
161
+ userVerification: 'required' | 'preferred' | 'discouraged';
162
+ }
163
+ export interface PasskeyAuthChallenge {
164
+ options: PasskeyAuthOptions;
165
+ session: PasskeySession;
166
+ }
167
+ export interface PasskeyRegisterOptions {
168
+ challenge: string;
169
+ rp: {
170
+ name: string;
171
+ id: string;
172
+ };
173
+ user: {
174
+ id: string;
175
+ name: string;
176
+ displayName: string;
177
+ };
178
+ pubKeyCredParams: {
179
+ type: 'public-key';
180
+ alg: number;
181
+ }[];
182
+ timeout: number;
183
+ authenticatorSelection: {
184
+ userVerification: 'required' | 'preferred' | 'discouraged';
185
+ residentKey: 'required' | 'preferred' | 'discouraged';
186
+ };
187
+ }
188
+ export interface PasskeyRegisterChallenge {
189
+ options: PasskeyRegisterOptions;
190
+ session: PasskeySession;
191
+ }
192
+ export interface PasskeyCredential {
193
+ id: string;
194
+ rawId: string;
195
+ response: {
196
+ clientDataJSON: string;
197
+ authenticatorData?: string;
198
+ signature?: string;
199
+ attestationObject?: string;
200
+ };
201
+ type: 'public-key';
202
+ }
203
+ export interface PasskeyStatus {
204
+ has_passkey: boolean;
205
+ registered_at?: number;
206
+ last_used_at?: number;
207
+ }
208
+ export interface IdentitySessionResponse {
209
+ access_token: string;
210
+ refresh_token: string;
211
+ token_type?: 'Bearer';
212
+ expires_in?: number;
213
+ user: SparkVaultUser | null;
214
+ account: SparkVaultAccount | null;
215
+ }
216
+ export interface Vault {
217
+ vault_id: string;
218
+ name: string;
219
+ description?: string;
220
+ status: 'sealed' | 'unsealed';
221
+ ingot_count: number;
222
+ storage_bytes: number;
223
+ created_at: number;
224
+ created_by_user_id?: string;
225
+ last_unsealed_at?: number;
226
+ unseal_count?: number;
227
+ }
228
+ export interface CreateVaultRequest {
229
+ name: string;
230
+ description?: string;
231
+ }
232
+ export interface CreateVaultResponse {
233
+ vault_id: string;
234
+ name: string;
235
+ description?: string;
236
+ vmk: string;
237
+ vmk_warning: string;
238
+ status: 'sealed';
239
+ created_at: number;
240
+ }
241
+ export interface UpdateVaultRequest {
242
+ name?: string;
243
+ description?: string;
244
+ }
245
+ export interface UpdateVaultResponse {
246
+ vault_id: string;
247
+ name: string;
248
+ description?: string;
249
+ updated_at: number;
250
+ }
251
+ export interface UnsealVaultRequest {
252
+ vmk: string;
253
+ ttl_seconds?: number;
254
+ }
255
+ export interface UnsealVaultResponse {
256
+ vat: string;
257
+ vault_id: string;
258
+ issued_at: number;
259
+ expires_at: number;
260
+ ttl_seconds: number;
261
+ }
262
+ export interface ListVaultsResponse {
263
+ vaults: Vault[];
264
+ total: number;
265
+ }
266
+ export interface Ingot {
267
+ ingot_id: string;
268
+ name: string;
269
+ content_type: string;
270
+ size_bytes: number;
271
+ storage_location: 'dynamodb' | 's3';
272
+ status?: 'uploading' | 'encrypting' | 'active' | 'failed';
273
+ folder_id?: string | null;
274
+ created_at: number;
275
+ accessed_at?: number;
276
+ access_count?: number;
277
+ expires_at?: number;
278
+ }
279
+ export interface ListIngotsResponse {
280
+ ingots: Ingot[];
281
+ total: number;
282
+ next_cursor?: string;
283
+ }
284
+ export interface UploadResult {
285
+ ingot_id: string;
286
+ name: string;
287
+ size_bytes: number;
288
+ storage_location: 's3';
289
+ }
290
+ export interface IngotSharingConfig {
291
+ shared: boolean;
292
+ visibility?: 'invite_only' | 'authenticated' | 'public';
293
+ share_code?: string;
294
+ share_url?: string;
295
+ invites?: IngotInvite[];
296
+ }
297
+ export interface IngotInvite {
298
+ invite_id: string;
299
+ identity: string;
300
+ identity_type: 'email';
301
+ created_at: number;
302
+ }
303
+ export interface IngotAccessLog {
304
+ log_id: string;
305
+ action: 'download' | 'view';
306
+ identity: string;
307
+ ip_address: string;
308
+ user_agent: string;
309
+ timestamp: number;
310
+ }
311
+ export interface IngotAccessStats {
312
+ total_downloads: number;
313
+ unique_visitors: number;
314
+ last_accessed_at?: number;
315
+ }
316
+ export interface Folder {
317
+ folder_id: string;
318
+ vault_id: string;
319
+ name: string;
320
+ parent_id: string | null;
321
+ is_system: boolean;
322
+ pinned: boolean;
323
+ created_at: number;
324
+ updated_at?: number;
325
+ path?: string;
326
+ depth?: number;
327
+ ingot_count?: number;
328
+ }
329
+ export interface CreateFolderRequest {
330
+ name: string;
331
+ parent_id?: string | null;
332
+ }
333
+ export interface UpdateFolderRequest {
334
+ name?: string;
335
+ parent_id?: string | null;
336
+ pinned?: boolean;
337
+ }
338
+ export interface ListFoldersResponse {
339
+ folders: Folder[];
340
+ total: number;
341
+ }
342
+ export interface FolderBreadcrumbItem {
343
+ folder_id: string | null;
344
+ name: string;
345
+ }
346
+ export interface TokenStorageAdapter {
347
+ getAccessToken(): Promise<string | null>;
348
+ setAccessToken(token: string): Promise<void>;
349
+ getRefreshToken(): Promise<string | null>;
350
+ setRefreshToken(token: string): Promise<void>;
351
+ setTokens?(accessToken: string, refreshToken: string): Promise<void>;
352
+ clearTokens(): Promise<void>;
353
+ getUser?<T = SparkVaultUser>(): Promise<T | null>;
354
+ setUser?<T = SparkVaultUser>(user: T): Promise<void>;
355
+ getAccount?<T = SparkVaultAccount>(): Promise<T | null>;
356
+ setAccount?<T = SparkVaultAccount>(account: T): Promise<void>;
357
+ clearAll?(): Promise<void>;
358
+ }
359
+ export type FetchLike = (url: string, options?: RequestInit & {
360
+ timeoutMs?: number;
361
+ responseType?: XMLHttpRequestResponseType;
362
+ }) => Promise<Response>;
363
+ export interface SparkVaultLogger {
364
+ debug(message: string, context?: Record<string, unknown>): void;
365
+ info(message: string, context?: Record<string, unknown>): void;
366
+ warn(message: string, context?: Record<string, unknown>): void;
367
+ error(message: string, context?: Record<string, unknown>): void;
368
+ }
369
+ export interface MobileFileReader {
370
+ readAsBase64(fileUri: string, options: {
371
+ position: number;
372
+ length: number;
373
+ }): Promise<string>;
374
+ }
375
+ export interface MobileDownloadProgress {
376
+ bytesWritten: number;
377
+ bytesTotal?: number;
378
+ }
379
+ export interface MobileDownloadedFile {
380
+ uri: string;
381
+ status?: number;
382
+ headers?: Record<string, string>;
383
+ sizeBytes?: number;
384
+ }
385
+ export interface MobileFileInfo {
386
+ exists: boolean;
387
+ sizeBytes?: number;
388
+ }
389
+ export interface MobileFileDownloader {
390
+ download(url: string, fileUri: string, options?: {
391
+ timeoutMs?: number;
392
+ abortSignal?: AbortSignal;
393
+ onProgress?: (progress: MobileDownloadProgress) => void;
394
+ }): Promise<MobileDownloadedFile | null>;
395
+ getInfo(fileUri: string): Promise<MobileFileInfo>;
396
+ delete(fileUri: string): Promise<void>;
397
+ }
398
+ export interface DebugLogger {
399
+ log(message: string): void;
400
+ warn(message: string): void;
401
+ error(message: string): void;
402
+ success(message: string): void;
403
+ }
404
+ export interface UploadProgressCallback {
405
+ (bytesUploaded: number, bytesTotal: number): void;
406
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare function isSafeId(id: string): boolean;
2
+ export declare function validateVaultId(vaultId: string): void;
3
+ export declare function validateIngotId(ingotId: string): void;
4
+ export declare function validateFolderId(folderId: string): void;
5
+ export declare function sanitizeFilename(filename: string): string;
@@ -0,0 +1,45 @@
1
+ import { SparkVaultValidationError } from './errors.js';
2
+ export function isSafeId(id) {
3
+ if (!id || typeof id !== 'string')
4
+ return false;
5
+ if (id.includes('/') || id.includes('\\') || id.includes('..') || id.includes('\0'))
6
+ return false;
7
+ if (id.length < 8 || id.length > 128)
8
+ return false;
9
+ return /^[a-zA-Z0-9_-]+$/.test(id);
10
+ }
11
+ export function validateVaultId(vaultId) {
12
+ if (!isSafeId(vaultId)) {
13
+ throw new SparkVaultValidationError('Invalid vault ID format', { vaultId });
14
+ }
15
+ }
16
+ export function validateIngotId(ingotId) {
17
+ if (!isSafeId(ingotId)) {
18
+ throw new SparkVaultValidationError('Invalid ingot ID format', { ingotId });
19
+ }
20
+ }
21
+ export function validateFolderId(folderId) {
22
+ if (!folderId || typeof folderId !== 'string' || !folderId.startsWith('fld_') || !isSafeId(folderId)) {
23
+ throw new SparkVaultValidationError('Invalid folder ID format', { folderId });
24
+ }
25
+ }
26
+ export function sanitizeFilename(filename) {
27
+ const reservedNames = new Set([
28
+ 'CON', 'PRN', 'AUX', 'NUL',
29
+ 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
30
+ 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9',
31
+ ]);
32
+ let sanitized = filename
33
+ .replace(/\0/g, '')
34
+ .replace(/[\x00-\x1f\x7f]/g, '')
35
+ .replace(/\.\./g, '')
36
+ .replace(/[\/\\]/g, '_')
37
+ .replace(/^\.+/, '')
38
+ .trim();
39
+ const baseName = sanitized.split('.')[0].toUpperCase();
40
+ if (reservedNames.has(baseName)) {
41
+ sanitized = `_${sanitized}`;
42
+ }
43
+ return sanitized || 'file';
44
+ }
45
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClG,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,yBAAyB,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,yBAAyB,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrG,MAAM,IAAI,yBAAyB,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC5B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;KACvE,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,QAAQ;SACrB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,IAAI,EAAE,CAAC;IAEV,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,SAAS,IAAI,MAAM,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,94 @@
1
+ import type { MobileHttpClient } from './http.js';
2
+ import type { CreateVaultRequest, CreateVaultResponse, ListVaultsResponse, UnsealVaultRequest, UnsealVaultResponse, UpdateVaultRequest, UpdateVaultResponse, Vault } from './types.js';
3
+ export interface SharingConfig {
4
+ vault_id: string;
5
+ public_sharing_enabled: boolean;
6
+ all_ingots_public: boolean;
7
+ session_length_seconds: number | null;
8
+ enabled_at: number | null;
9
+ }
10
+ export declare class MobileVaultsClient {
11
+ private readonly http;
12
+ constructor(http: MobileHttpClient);
13
+ create(request: CreateVaultRequest): Promise<CreateVaultResponse>;
14
+ list(options?: {
15
+ status?: 'sealed' | 'unsealed';
16
+ limit?: number;
17
+ cursor?: string;
18
+ }): Promise<ListVaultsResponse>;
19
+ get(vaultId: string): Promise<Vault>;
20
+ update(vaultId: string, request: UpdateVaultRequest): Promise<UpdateVaultResponse>;
21
+ delete(vaultId: string): Promise<void>;
22
+ unseal(vaultId: string, request: UnsealVaultRequest): Promise<UnsealVaultResponse>;
23
+ seal(vaultId: string): Promise<void>;
24
+ getSharingConfig(vaultId: string): Promise<SharingConfig>;
25
+ enableSharing(vaultId: string, vmk: string, options?: {
26
+ all_ingots_public?: boolean;
27
+ session_length_seconds?: number;
28
+ }): Promise<{
29
+ vault_id: string;
30
+ public_sharing_enabled: boolean;
31
+ all_ingots_public: boolean;
32
+ session_length_seconds: number;
33
+ enabled_at: number;
34
+ }>;
35
+ disableSharing(vaultId: string): Promise<{
36
+ vault_id: string;
37
+ public_sharing_enabled: false;
38
+ disabled_at: number;
39
+ shares_revoked: number;
40
+ }>;
41
+ updateSharingConfig(vaultId: string, config: {
42
+ all_ingots_public?: boolean;
43
+ session_length_seconds?: number;
44
+ }): Promise<{
45
+ vault_id: string;
46
+ public_sharing_enabled: boolean;
47
+ all_ingots_public: boolean;
48
+ session_length_seconds: number;
49
+ updated_at: number;
50
+ }>;
51
+ getAccessLogRetention(vaultId: string): Promise<{
52
+ vault_id: string;
53
+ access_log_retention_seconds: number;
54
+ }>;
55
+ updateAccessLogRetention(vaultId: string, retentionSeconds: number): Promise<{
56
+ vault_id: string;
57
+ access_log_retention_seconds: number;
58
+ updated_at: number;
59
+ }>;
60
+ getUploadConfig(vaultId: string): Promise<{
61
+ vault_id: string;
62
+ public_upload_enabled: boolean;
63
+ upload_url: string | null;
64
+ max_size_bytes: number | null;
65
+ notification_email: string | null;
66
+ enabled_at: number | null;
67
+ }>;
68
+ enableUpload(vaultId: string, vmk: string | null, options?: {
69
+ max_size_bytes?: number;
70
+ notification_email?: string;
71
+ }): Promise<{
72
+ vault_id: string;
73
+ public_upload_enabled: boolean;
74
+ upload_url: string;
75
+ max_size_bytes: number;
76
+ notification_email: string | null;
77
+ enabled_at: number;
78
+ }>;
79
+ disableUpload(vaultId: string): Promise<{
80
+ vault_id: string;
81
+ public_upload_enabled: false;
82
+ disabled_at: number;
83
+ }>;
84
+ updateUploadConfig(vaultId: string, config: {
85
+ max_size_bytes?: number;
86
+ notification_email?: string | null;
87
+ }): Promise<{
88
+ vault_id: string;
89
+ public_upload_enabled: boolean;
90
+ max_size_bytes: number;
91
+ notification_email: string | null;
92
+ updated_at: number;
93
+ }>;
94
+ }
package/dist/vaults.js ADDED
@@ -0,0 +1,106 @@
1
+ import { validateVaultId } from './validation.js';
2
+ export class MobileVaultsClient {
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ async create(request) {
7
+ const response = await this.http.post('/vaults', request);
8
+ return response.data;
9
+ }
10
+ async list(options) {
11
+ const params = new URLSearchParams();
12
+ if (options?.status)
13
+ params.append('status', options.status);
14
+ if (options?.limit)
15
+ params.append('limit', options.limit.toString());
16
+ if (options?.cursor)
17
+ params.append('cursor', options.cursor);
18
+ const query = params.toString();
19
+ const response = await this.http.get(query ? `/vaults?${query}` : '/vaults');
20
+ return response.data;
21
+ }
22
+ async get(vaultId) {
23
+ validateVaultId(vaultId);
24
+ const response = await this.http.get(`/vaults/${vaultId}`);
25
+ return response.data;
26
+ }
27
+ async update(vaultId, request) {
28
+ validateVaultId(vaultId);
29
+ const response = await this.http.put(`/vaults/${vaultId}`, request);
30
+ return response.data;
31
+ }
32
+ async delete(vaultId) {
33
+ validateVaultId(vaultId);
34
+ await this.http.delete(`/vaults/${vaultId}`);
35
+ }
36
+ async unseal(vaultId, request) {
37
+ validateVaultId(vaultId);
38
+ const response = await this.http.post(`/vaults/${vaultId}/unseal`, request);
39
+ return response.data;
40
+ }
41
+ async seal(vaultId) {
42
+ validateVaultId(vaultId);
43
+ await this.http.post(`/vaults/${vaultId}/seal`);
44
+ }
45
+ async getSharingConfig(vaultId) {
46
+ validateVaultId(vaultId);
47
+ const response = await this.http.get(`/vaults/${vaultId}/sharing`);
48
+ return response.data;
49
+ }
50
+ async enableSharing(vaultId, vmk, options) {
51
+ validateVaultId(vaultId);
52
+ const response = await this.http.post(`/vaults/${vaultId}/sharing/enable`, {
53
+ vmk,
54
+ all_ingots_public: options?.all_ingots_public,
55
+ session_length_seconds: options?.session_length_seconds,
56
+ });
57
+ return response.data;
58
+ }
59
+ async disableSharing(vaultId) {
60
+ validateVaultId(vaultId);
61
+ const response = await this.http.post(`/vaults/${vaultId}/sharing/disable`);
62
+ return response.data;
63
+ }
64
+ async updateSharingConfig(vaultId, config) {
65
+ validateVaultId(vaultId);
66
+ const response = await this.http.put(`/vaults/${vaultId}/sharing`, config);
67
+ return response.data;
68
+ }
69
+ async getAccessLogRetention(vaultId) {
70
+ validateVaultId(vaultId);
71
+ const response = await this.http.get(`/vaults/${vaultId}/access-log-retention`);
72
+ return response.data;
73
+ }
74
+ async updateAccessLogRetention(vaultId, retentionSeconds) {
75
+ validateVaultId(vaultId);
76
+ const response = await this.http.put(`/vaults/${vaultId}/access-log-retention`, {
77
+ access_log_retention_seconds: retentionSeconds,
78
+ });
79
+ return response.data;
80
+ }
81
+ async getUploadConfig(vaultId) {
82
+ validateVaultId(vaultId);
83
+ const response = await this.http.get(`/vaults/${vaultId}/upload`);
84
+ return response.data;
85
+ }
86
+ async enableUpload(vaultId, vmk, options) {
87
+ validateVaultId(vaultId);
88
+ const response = await this.http.post(`/vaults/${vaultId}/upload/enable`, {
89
+ vmk,
90
+ max_size_bytes: options?.max_size_bytes ?? null,
91
+ notification_email: options?.notification_email ?? null,
92
+ });
93
+ return response.data;
94
+ }
95
+ async disableUpload(vaultId) {
96
+ validateVaultId(vaultId);
97
+ const response = await this.http.post(`/vaults/${vaultId}/upload/disable`);
98
+ return response.data;
99
+ }
100
+ async updateUploadConfig(vaultId, config) {
101
+ validateVaultId(vaultId);
102
+ const response = await this.http.put(`/vaults/${vaultId}/upload`, config);
103
+ return response.data;
104
+ }
105
+ }
106
+ //# sourceMappingURL=vaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaults.js","sourceRoot":"","sources":["../src/vaults.ts"],"names":[],"mappings":"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"}