@siafoundation/sia-storage 0.0.14 → 0.1.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.
@@ -17,19 +17,6 @@ export interface DownloadOptions {
17
17
 
18
18
 
19
19
 
20
- export interface SealedObject {
21
- encryptedDataKey: string;
22
- slabs: Slab[];
23
- dataSignature: string;
24
- encryptedMetadataKey?: string;
25
- encryptedMetadata?: string;
26
- metadataSignature: string;
27
- createdAt: string;
28
- updatedAt: string;
29
- }
30
-
31
-
32
-
33
20
  export interface Sector {
34
21
  root: string;
35
22
  hostKey: string;
@@ -87,6 +74,12 @@ interface Sdk {
87
74
  }
88
75
 
89
76
 
77
+
78
+ interface SharedSdk {
79
+ download(object: PinnedObject, options?: DownloadOptions): ReadableStream;
80
+ }
81
+
82
+
90
83
  /**
91
84
  * Application info registered with the indexer.
92
85
  */
@@ -99,7 +92,7 @@ export interface App {
99
92
  }
100
93
 
101
94
  /**
102
- * Information about the user\'s account on the indexer.
95
+ * Information about the user's account on the indexer.
103
96
  */
104
97
  export interface Account {
105
98
  accountKey: string;
@@ -136,7 +129,7 @@ export interface HostQuery {
136
129
  }
137
130
 
138
131
  /**
139
- * TS interface for `Builder::new`\'s `app` parameter. Field names must
132
+ * TS interface for `Builder::new`'s `app` parameter. Field names must
140
133
  * match the Reflect reads in `helpers::make_app_metadata`.
141
134
  */
142
135
  export interface AppMetadata {
@@ -149,7 +142,7 @@ export interface AppMetadata {
149
142
  }
150
143
 
151
144
  /**
152
- * TS interface for `Sdk::objectEvents`\'s `cursor` parameter. Field
145
+ * TS interface for `Sdk::objectEvents`'s `cursor` parameter. Field
153
146
  * names must match the Reflect reads in `sdk.rs`.
154
147
  */
155
148
  export interface ObjectsCursor {
@@ -157,7 +150,30 @@ export interface ObjectsCursor {
157
150
  after: Date;
158
151
  }
159
152
 
160
- export type SealedObject = SealedObject;
153
+ /**
154
+ * What a recipient can see about the sharing key they hold. The counts are a
155
+ * snapshot, not a live view.
156
+ */
157
+ export interface KeyStats {
158
+ objectCount: number;
159
+ objectSize: number;
160
+ pinnedData: number;
161
+ pinnedSize: number;
162
+ expiresAt: Date | undefined;
163
+ createdAt: Date;
164
+ updatedAt: Date;
165
+ }
166
+
167
+ export type SealedObject = {
168
+ encryptedDataKey: string;
169
+ slabs: Slab[];
170
+ dataSignature: string;
171
+ encryptedMetadataKey?: string;
172
+ encryptedMetadata?: string;
173
+ metadataSignature: string;
174
+ createdAt: string;
175
+ updatedAt: string;
176
+ };
161
177
 
162
178
 
163
179
  /**
@@ -200,14 +216,38 @@ export class AppKey {
200
216
  export class Builder {
201
217
  free(): void;
202
218
  [Symbol.dispose](): void;
219
+ /**
220
+ * Connects using a pre-authorized key, bypassing the interactive approval
221
+ * flow, and returns a Sdk. `preAuthorizedKeySeed` is the 32-byte
222
+ * pre-authorized private key (Uint8Array); `mnemonic` derives the app key.
223
+ */
224
+ connectPreAuthorized(pre_authorized_key_seed: Uint8Array, mnemonic: string): Promise<Sdk>;
203
225
  /**
204
226
  * Attempts to connect using an existing AppKey.
205
227
  * Returns a Sdk if the key is valid, or undefined if not registered.
206
228
  */
207
229
  connected(app_key: AppKey): Promise<Sdk | undefined>;
230
+ /**
231
+ * Returns whether `mnemonic` derives an application key that is already
232
+ * registered with the indexer. Unlike `register`, the builder remains
233
+ * usable. Only valid after `waitForApproval` has resolved.
234
+ */
235
+ matchesExistingAppKey(mnemonic: string): Promise<boolean>;
208
236
  constructor(indexer_url: string, app: AppMetadata);
237
+ /**
238
+ * Returns whether the connect key the user approved with already has an
239
+ * account for this application. Only valid after `waitForApproval` has
240
+ * resolved.
241
+ *
242
+ * The connect key may have accounts under more than one recovery phrase.
243
+ * Use `matchesExistingAppKey` to check a particular phrase.
244
+ */
245
+ reconnecting(): boolean;
209
246
  /**
210
247
  * Completes registration and returns a Sdk instance.
248
+ *
249
+ * A different recovery phrase registers a new application key even when
250
+ * `reconnecting()` is true.
211
251
  */
212
252
  register(mnemonic: string): Promise<Sdk>;
213
253
  /**
@@ -252,6 +292,27 @@ export class IntoUnderlyingSource {
252
292
  pull(controller: ReadableStreamDefaultController): Promise<any>;
253
293
  }
254
294
 
295
+ /**
296
+ * The indexer's record for a sharing key, including how many objects it grants
297
+ * access to and how much space they use. The counts are a snapshot, not a live
298
+ * view.
299
+ */
300
+ export class KeyRecord {
301
+ private constructor();
302
+ free(): void;
303
+ [Symbol.dispose](): void;
304
+ readonly description: string;
305
+ /**
306
+ * The key this record describes.
307
+ */
308
+ readonly key: SharingKey;
309
+ /**
310
+ * A snapshot of how many objects the key grants access to and how much
311
+ * space they use.
312
+ */
313
+ readonly stats: KeyStats;
314
+ }
315
+
255
316
  /**
256
317
  * An object event from the indexer.
257
318
  */
@@ -381,6 +442,10 @@ export class PinnedObject {
381
442
  * Returns the slabs that make up the object.
382
443
  */
383
444
  slabs(): Slab[];
445
+ /**
446
+ * Returns a new object truncated to the requested length.
447
+ */
448
+ truncate(length: bigint): PinnedObject;
384
449
  /**
385
450
  * Updates the object's metadata.
386
451
  */
@@ -407,6 +472,10 @@ export class Sdk {
407
472
  * Returns the AppKey used by this SDK instance.
408
473
  */
409
474
  appKey(): AppKey;
475
+ /**
476
+ * Creates a sharing key. Attach objects to it with `Sdk.shareObject`.
477
+ */
478
+ createSharingKey(description: string, expires_at?: Date | null): Promise<SharingKey>;
410
479
  /**
411
480
  * Deletes an object from the indexer by its hex ID.
412
481
  */
@@ -439,6 +508,17 @@ export class Sdk {
439
508
  * Returns object events for syncing local state with the indexer.
440
509
  */
441
510
  objectEvents(cursor: ObjectsCursor | null | undefined, limit: number): Promise<ObjectEvent[]>;
511
+ /**
512
+ * Resolves a share URL (sia://...) and returns the shared object.
513
+ * The encryption key is extracted from the URL fragment (never sent
514
+ * to the indexer).
515
+ */
516
+ objectFromShareUrl(share_url: string): Promise<PinnedObject>;
517
+ /**
518
+ * Generates a signed share URL for an object. Anyone with the URL can
519
+ * download and decrypt the object until `validUntil`.
520
+ */
521
+ objectShareUrl(object: PinnedObject, valid_until: Date): string;
442
522
  /**
443
523
  * Pins an object to the indexer so it persists beyond temporary storage.
444
524
  */
@@ -448,20 +528,38 @@ export class Sdk {
448
528
  */
449
529
  pruneSlabs(): Promise<void>;
450
530
  /**
451
- * Generates a signed share URL for an object. Anyone with the URL can
452
- * download and decrypt the object until `validUntil`.
531
+ * Deletes a sharing key along with all of its attachments, revoking
532
+ * recipients' access. Account tokens already issued stay valid until they
533
+ * expire, so a download in flight can keep reading for up to five minutes.
453
534
  */
454
- shareObject(object: PinnedObject, valid_until: Date): string;
535
+ revokeSharingKey(key: SharingKey): Promise<void>;
455
536
  /**
456
- * Resolves a share URL (sia://...) and returns the shared object.
457
- * The encryption key is extracted from the URL fragment (never sent
458
- * to the indexer).
537
+ * Attaches an object to a sharing key, re-sealing its encryption keys under
538
+ * the key so recipients can decrypt it. Attaching an already-attached
539
+ * object replaces its re-sealed keys, so a failed call can be retried.
540
+ */
541
+ shareObject(key: SharingKey, object: PinnedObject): Promise<void>;
542
+ /**
543
+ * Lists and decrypts a page of the objects a sharing key grants access to.
544
+ */
545
+ sharedObjects(key: SharingKey, offset: number, limit: number): Promise<PinnedObject[]>;
546
+ /**
547
+ * Fetches the indexer's record for a key, including its counts.
459
548
  */
460
- sharedObject(share_url: string): Promise<PinnedObject>;
549
+ sharingKey(key: SharingKey): Promise<KeyRecord>;
550
+ /**
551
+ * Lists the account's sharing keys, most recently created first.
552
+ */
553
+ sharingKeys(offset: number, limit: number): Promise<KeyRecord[]>;
461
554
  /**
462
555
  * Retrieves a pinned slab from the indexer by its hex ID.
463
556
  */
464
557
  slab(slab_id: string): Promise<PinnedSlab>;
558
+ /**
559
+ * Detaches an object from a sharing key, leaving the key and its other
560
+ * attachments in place.
561
+ */
562
+ unshareObject(key: SharingKey, object: PinnedObject): Promise<void>;
465
563
  /**
466
564
  * Updates an object's metadata on the indexer.
467
565
  */
@@ -488,6 +586,73 @@ export class Sdk {
488
586
  uploadPacked(options?: any | null): PackedUpload;
489
587
  }
490
588
 
589
+ /**
590
+ * A read-only SDK for the objects a sharing key grants access to.
591
+ *
592
+ * Unlike `Sdk`, it authenticates with a sharing key rather than an app key and
593
+ * cannot upload, pin, or delete. Downloads are paid for by the key's owner.
594
+ */
595
+ export class SharedSdk {
596
+ private constructor();
597
+ free(): void;
598
+ [Symbol.dispose](): void;
599
+ /**
600
+ * Connects to `indexerUrl` as the recipient of the sharing key derived
601
+ * from `seed`, which is the hex string the key's owner handed out.
602
+ */
603
+ static connect(indexer_url: string, seed: string): Promise<SharedSdk>;
604
+ /**
605
+ * Streams a shared object's data.
606
+ */
607
+ download(object: PinnedObject, options?: any | null): ReadableStream;
608
+ /**
609
+ * Returns the hosts serving this key's objects, optionally filtered by a
610
+ * HostQuery. Mirrors `Sdk.hosts()` but is scoped to the sharing key, so the
611
+ * set is already limited to hosts holding its objects.
612
+ */
613
+ hosts(query?: HostQuery | null): Promise<Host[]>;
614
+ /**
615
+ * Fetches and decrypts one object the key grants access to.
616
+ */
617
+ object(id: string): Promise<PinnedObject>;
618
+ /**
619
+ * Lists and decrypts a page of the objects the key grants access to.
620
+ */
621
+ objects(offset: number, limit: number): Promise<PinnedObject[]>;
622
+ /**
623
+ * Fetches the sharing key's stats from the indexer.
624
+ */
625
+ stats(): Promise<KeyStats>;
626
+ }
627
+
628
+ /**
629
+ * A sharing key, granting read-only access to the objects attached to it.
630
+ *
631
+ * It is just the credential; the operations that use it live on `Sdk`.
632
+ */
633
+ export class SharingKey {
634
+ private constructor();
635
+ free(): void;
636
+ [Symbol.dispose](): void;
637
+ /**
638
+ * Imports a sharing key from the hex seed its owner handed out.
639
+ *
640
+ * Pass the string returned by [seed](Self::seed).
641
+ */
642
+ static fromSeed(seed: string): SharingKey;
643
+ /**
644
+ * Returns the seed a recipient needs to read the key's objects, as hex.
645
+ *
646
+ * It is the whole credential. Pair it with the indexer's url in
647
+ * `SharedSdk.connect`.
648
+ */
649
+ seed(): string;
650
+ /**
651
+ * The key's public half, which identifies it.
652
+ */
653
+ readonly publicKey: string;
654
+ }
655
+
491
656
  /**
492
657
  * Calculates the encoded size of data after erasure coding.
493
658
  */
@@ -524,17 +689,22 @@ export interface InitOutput {
524
689
  readonly memory: WebAssembly.Memory;
525
690
  readonly __wbg_appkey_free: (a: number, b: number) => void;
526
691
  readonly __wbg_builder_free: (a: number, b: number) => void;
692
+ readonly __wbg_keyrecord_free: (a: number, b: number) => void;
527
693
  readonly __wbg_objectevent_free: (a: number, b: number) => void;
528
694
  readonly __wbg_packedupload_free: (a: number, b: number) => void;
529
695
  readonly __wbg_pinnedobject_free: (a: number, b: number) => void;
530
696
  readonly __wbg_sdk_free: (a: number, b: number) => void;
697
+ readonly __wbg_sharedsdk_free: (a: number, b: number) => void;
531
698
  readonly appkey_export: (a: number) => [number, number];
532
699
  readonly appkey_new: (a: number, b: number) => [number, number, number];
533
700
  readonly appkey_publicKey: (a: number) => [number, number];
534
701
  readonly appkey_sign: (a: number, b: number, c: number) => [number, number];
535
702
  readonly appkey_verifySignature: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
703
+ readonly builder_connectPreAuthorized: (a: number, b: number, c: number, d: number, e: number) => any;
536
704
  readonly builder_connected: (a: number, b: number) => any;
705
+ readonly builder_matchesExistingAppKey: (a: number, b: number, c: number) => any;
537
706
  readonly builder_new: (a: number, b: number, c: any) => [number, number, number];
707
+ readonly builder_reconnecting: (a: number) => [number, number, number];
538
708
  readonly builder_register: (a: number, b: number, c: number) => any;
539
709
  readonly builder_requestConnection: (a: number) => any;
540
710
  readonly builder_responseUrl: (a: number) => [number, number, number, number];
@@ -542,6 +712,9 @@ export interface InitOutput {
542
712
  readonly encodedSize: (a: number, b: number, c: number) => number;
543
713
  readonly generateRecoveryPhrase: () => [number, number];
544
714
  readonly init: () => void;
715
+ readonly keyrecord_description: (a: number) => [number, number];
716
+ readonly keyrecord_key: (a: number) => number;
717
+ readonly keyrecord_stats: (a: number) => [number, number, number];
545
718
  readonly objectevent_deleted: (a: number) => number;
546
719
  readonly objectevent_id: (a: number) => [number, number];
547
720
  readonly objectevent_object: (a: number) => number;
@@ -559,28 +732,46 @@ export interface InitOutput {
559
732
  readonly pinnedobject_metadata: (a: number) => [number, number];
560
733
  readonly pinnedobject_new: () => number;
561
734
  readonly pinnedobject_open: (a: number, b: any) => [number, number, number];
562
- readonly pinnedobject_seal: (a: number, b: number) => any;
735
+ readonly pinnedobject_seal: (a: number, b: number) => [number, number, number];
563
736
  readonly pinnedobject_size: (a: number) => number;
564
737
  readonly pinnedobject_slabs: (a: number) => [number, number, number];
738
+ readonly pinnedobject_truncate: (a: number, b: bigint) => number;
565
739
  readonly pinnedobject_updateMetadata: (a: number, b: number, c: number) => void;
566
740
  readonly pinnedobject_updatedAt: (a: number) => any;
567
741
  readonly sdk_account: (a: number) => any;
568
742
  readonly sdk_appKey: (a: number) => number;
743
+ readonly sdk_createSharingKey: (a: number, b: number, c: number, d: number) => any;
569
744
  readonly sdk_deleteObject: (a: number, b: number, c: number) => any;
570
745
  readonly sdk_download: (a: number, b: number, c: number) => [number, number, number];
571
746
  readonly sdk_hosts: (a: number, b: number) => any;
572
747
  readonly sdk_object: (a: number, b: number, c: number) => any;
573
748
  readonly sdk_objectEvents: (a: number, b: any, c: number) => any;
749
+ readonly sdk_objectFromShareUrl: (a: number, b: number, c: number) => any;
750
+ readonly sdk_objectShareUrl: (a: number, b: number, c: any) => [number, number, number, number];
574
751
  readonly sdk_pinObject: (a: number, b: number) => any;
575
752
  readonly sdk_pruneSlabs: (a: number) => any;
576
- readonly sdk_shareObject: (a: number, b: number, c: any) => [number, number, number, number];
577
- readonly sdk_sharedObject: (a: number, b: number, c: number) => any;
753
+ readonly sdk_revokeSharingKey: (a: number, b: number) => any;
754
+ readonly sdk_shareObject: (a: number, b: number, c: number) => any;
755
+ readonly sdk_sharedObjects: (a: number, b: number, c: number, d: number) => any;
756
+ readonly sdk_sharingKey: (a: number, b: number) => any;
757
+ readonly sdk_sharingKeys: (a: number, b: number, c: number) => any;
578
758
  readonly sdk_slab: (a: number, b: number, c: number) => any;
759
+ readonly sdk_unshareObject: (a: number, b: number, c: number) => any;
579
760
  readonly sdk_updateObjectMetadata: (a: number, b: number) => any;
580
761
  readonly sdk_upload: (a: number, b: number, c: any, d: number) => any;
581
762
  readonly sdk_uploadPacked: (a: number, b: number) => [number, number, number];
582
763
  readonly setLogger: (a: any, b: any) => void;
764
+ readonly sharedsdk_connect: (a: number, b: number, c: number, d: number) => any;
765
+ readonly sharedsdk_download: (a: number, b: number, c: number) => [number, number, number];
766
+ readonly sharedsdk_hosts: (a: number, b: number) => any;
767
+ readonly sharedsdk_object: (a: number, b: number, c: number) => any;
768
+ readonly sharedsdk_objects: (a: number, b: number, c: number) => any;
769
+ readonly sharedsdk_stats: (a: number) => any;
770
+ readonly sharingkey_fromSeed: (a: number, b: number) => [number, number, number];
771
+ readonly sharingkey_publicKey: (a: number) => [number, number];
772
+ readonly sharingkey_seed: (a: number) => [number, number];
583
773
  readonly validateRecoveryPhrase: (a: number, b: number) => [number, number];
774
+ readonly __wbg_sharingkey_free: (a: number, b: number) => void;
584
775
  readonly __wbg_intounderlyingbytesource_free: (a: number, b: number) => void;
585
776
  readonly __wbg_intounderlyingsink_free: (a: number, b: number) => void;
586
777
  readonly __wbg_intounderlyingsource_free: (a: number, b: number) => void;
@@ -594,13 +785,13 @@ export interface InitOutput {
594
785
  readonly intounderlyingsink_write: (a: number, b: any) => any;
595
786
  readonly intounderlyingsource_cancel: (a: number) => void;
596
787
  readonly intounderlyingsource_pull: (a: number, b: any) => any;
597
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke___wasm_bindgen_94d9ab53edc6bea3___sys__Undefined__core_9b3796e30d99ddb7___result__Result_____wasm_bindgen_94d9ab53edc6bea3___JsError___true_: (a: number, b: number, c: any) => [number, number];
598
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke___wasm_bindgen_94d9ab53edc6bea3___JsValue__core_9b3796e30d99ddb7___result__Result_____wasm_bindgen_94d9ab53edc6bea3___JsError___true_: (a: number, b: number, c: any) => [number, number];
599
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke___wasm_bindgen_94d9ab53edc6bea3___sys__Undefined__core_9b3796e30d99ddb7___result__Result_____wasm_bindgen_94d9ab53edc6bea3___JsError___true__3: (a: number, b: number, c: any) => [number, number];
600
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke___wasm_bindgen_94d9ab53edc6bea3___sys__Undefined__core_9b3796e30d99ddb7___result__Result_____wasm_bindgen_94d9ab53edc6bea3___JsError___true__4: (a: number, b: number, c: any) => [number, number];
601
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke___js_sys_2b0a4a9337300fde___Function_fn_wasm_bindgen_94d9ab53edc6bea3___JsValue_____wasm_bindgen_94d9ab53edc6bea3___sys__Undefined___js_sys_2b0a4a9337300fde___Function_fn_wasm_bindgen_94d9ab53edc6bea3___JsValue_____wasm_bindgen_94d9ab53edc6bea3___sys__Undefined_______true_: (a: number, b: number, c: any, d: any) => void;
602
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke___wasm_bindgen_94d9ab53edc6bea3___JsValue______true_: (a: number, b: number, c: any) => void;
603
- readonly wasm_bindgen_94d9ab53edc6bea3___convert__closures_____invoke_______true_: (a: number, b: number) => void;
788
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke___wasm_bindgen_baa1b51bcdcd1a91___JsValue__core_ed718c3d60ebd546___result__Result_____wasm_bindgen_baa1b51bcdcd1a91___JsError___true_: (a: number, b: number, c: any) => [number, number];
789
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke___wasm_bindgen_baa1b51bcdcd1a91___sys__Undefined__core_ed718c3d60ebd546___result__Result_____wasm_bindgen_baa1b51bcdcd1a91___JsError___true_: (a: number, b: number, c: any) => [number, number];
790
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke___wasm_bindgen_baa1b51bcdcd1a91___sys__Undefined__core_ed718c3d60ebd546___result__Result_____wasm_bindgen_baa1b51bcdcd1a91___JsError___true__3: (a: number, b: number, c: any) => [number, number];
791
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke___wasm_bindgen_baa1b51bcdcd1a91___sys__Undefined__core_ed718c3d60ebd546___result__Result_____wasm_bindgen_baa1b51bcdcd1a91___JsError___true__4: (a: number, b: number, c: any) => [number, number];
792
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke___js_sys_bdd470c3fe1f6d69___Function_fn_wasm_bindgen_baa1b51bcdcd1a91___JsValue_____wasm_bindgen_baa1b51bcdcd1a91___sys__Undefined___js_sys_bdd470c3fe1f6d69___Function_fn_wasm_bindgen_baa1b51bcdcd1a91___JsValue_____wasm_bindgen_baa1b51bcdcd1a91___sys__Undefined_______true_: (a: number, b: number, c: any, d: any) => void;
793
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke___wasm_bindgen_baa1b51bcdcd1a91___JsValue______true_: (a: number, b: number, c: any) => void;
794
+ readonly wasm_bindgen_baa1b51bcdcd1a91___convert__closures_____invoke_______true_: (a: number, b: number) => void;
604
795
  readonly __wbindgen_malloc: (a: number, b: number) => number;
605
796
  readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
606
797
  readonly __wbindgen_exn_store: (a: number) => void;