selfstore 1.8.20 → 1.8.21

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 (89) hide show
  1. package/README.md +107 -12
  2. package/dist/advanced.d.ts +23 -8
  3. package/dist/advanced.js +23 -12
  4. package/dist/advanced.js.map +1 -1
  5. package/dist/backups.d.ts +4 -4
  6. package/dist/backups.js +8 -6
  7. package/dist/{cache-lock-KWJUORTS.js → cache-lock-5RNG6CIK.js} +4 -3
  8. package/dist/cache-lock-5RNG6CIK.js.map +1 -0
  9. package/dist/{chunk-SKWHKM25.js → chunk-23UAUYSW.js} +40 -4
  10. package/dist/chunk-23UAUYSW.js.map +1 -0
  11. package/dist/chunk-3BWBBGFW.js +29 -0
  12. package/dist/chunk-3BWBBGFW.js.map +1 -0
  13. package/dist/{chunk-W22V5CRM.js → chunk-3KAAPYPO.js} +3 -3
  14. package/dist/{chunk-W22V5CRM.js.map → chunk-3KAAPYPO.js.map} +1 -1
  15. package/dist/chunk-757ZOSUI.js +27 -0
  16. package/dist/chunk-757ZOSUI.js.map +1 -0
  17. package/dist/{chunk-DCEXWSM6.js → chunk-AUH35AAQ.js} +3 -3
  18. package/dist/{chunk-DCEXWSM6.js.map → chunk-AUH35AAQ.js.map} +1 -1
  19. package/dist/{chunk-ULPGGZ6L.js → chunk-DJZ5S3FI.js} +11 -10
  20. package/dist/chunk-DJZ5S3FI.js.map +1 -0
  21. package/dist/{chunk-HOG2IKEP.js → chunk-EBCQ7ZG7.js} +4 -4
  22. package/dist/{chunk-HOG2IKEP.js.map → chunk-EBCQ7ZG7.js.map} +1 -1
  23. package/dist/chunk-FJGWTBAL.js +6 -0
  24. package/dist/chunk-FJGWTBAL.js.map +1 -0
  25. package/dist/chunk-GW5CYP4C.js +212 -0
  26. package/dist/chunk-GW5CYP4C.js.map +1 -0
  27. package/dist/{chunk-MGDXR3RB.js → chunk-HHPJPEEG.js} +6 -5
  28. package/dist/chunk-HHPJPEEG.js.map +1 -0
  29. package/dist/{chunk-J5MFXJU6.js → chunk-JTNFZV2B.js} +78 -26
  30. package/dist/chunk-JTNFZV2B.js.map +1 -0
  31. package/dist/chunk-JZHWAX34.js +178 -0
  32. package/dist/chunk-JZHWAX34.js.map +1 -0
  33. package/dist/chunk-LUNYYH6D.js +223 -0
  34. package/dist/chunk-LUNYYH6D.js.map +1 -0
  35. package/dist/{chunk-LKIRWVXM.js → chunk-LYO36VYB.js} +12 -11
  36. package/dist/chunk-LYO36VYB.js.map +1 -0
  37. package/dist/{chunk-O3Y6FORN.js → chunk-OY2A5DCB.js} +4 -3
  38. package/dist/chunk-OY2A5DCB.js.map +1 -0
  39. package/dist/chunk-QSLHEE2L.js +13 -0
  40. package/dist/chunk-QSLHEE2L.js.map +1 -0
  41. package/dist/{chunk-3OBJOMQ2.js → chunk-RREJ2MFN.js} +4 -28
  42. package/dist/chunk-RREJ2MFN.js.map +1 -0
  43. package/dist/chunk-XMC67RNM.js +29 -0
  44. package/dist/chunk-XMC67RNM.js.map +1 -0
  45. package/dist/{connect-GY1R9c6Q.d.ts → connect-Bob2mofK.d.ts} +3 -3
  46. package/dist/{drive-BLRsK32w.d.ts → drive-86CHuTij.d.ts} +63 -2
  47. package/dist/flows.d.ts +5 -5
  48. package/dist/flows.js +17 -15
  49. package/dist/flows.js.map +1 -1
  50. package/dist/groups.js +4 -3
  51. package/dist/groups.js.map +1 -1
  52. package/dist/households.d.ts +1 -1
  53. package/dist/index.d.ts +50 -8
  54. package/dist/index.js +72 -17
  55. package/dist/index.js.map +1 -1
  56. package/dist/kdf-worker.js +7 -2
  57. package/dist/kdf-worker.js.map +1 -1
  58. package/dist/{local-DrziuI_t.d.ts → local-8H61XxbL.d.ts} +2 -2
  59. package/dist/local-XET4G32B.js +7 -0
  60. package/dist/{local-DPS35F5C.js.map → local-XET4G32B.js.map} +1 -1
  61. package/dist/{manager-BlSs6Q5S.d.ts → manager-Di6lNE4E.d.ts} +1 -1
  62. package/dist/manager-drive-YLSLQ63O.js +10 -0
  63. package/dist/{manager-drive-4WLKOOXO.js.map → manager-drive-YLSLQ63O.js.map} +1 -1
  64. package/dist/s3-43RWNCV3.js +11 -0
  65. package/dist/s3-43RWNCV3.js.map +1 -0
  66. package/dist/{s3-BLgf6hqR.d.ts → s3-BsbVn3fw.d.ts} +1 -1
  67. package/dist/{store-DhrWMYg_.d.ts → store-CIbiNoiE.d.ts} +1 -1
  68. package/dist/sync.d.ts +7 -6
  69. package/dist/sync.js +3 -1
  70. package/dist/webdav-EEQKX5TZ.js +9 -0
  71. package/dist/webdav-EEQKX5TZ.js.map +1 -0
  72. package/dist/widgets.d.ts +19 -5
  73. package/dist/widgets.js +17 -10
  74. package/dist/widgets.js.map +1 -1
  75. package/llms.txt +51 -4
  76. package/package.json +12 -5
  77. package/skills/selfstore/SKILL.md +115 -0
  78. package/dist/cache-lock-KWJUORTS.js.map +0 -1
  79. package/dist/chunk-3OBJOMQ2.js.map +0 -1
  80. package/dist/chunk-J5MFXJU6.js.map +0 -1
  81. package/dist/chunk-LKIRWVXM.js.map +0 -1
  82. package/dist/chunk-MGDXR3RB.js.map +0 -1
  83. package/dist/chunk-O3Y6FORN.js.map +0 -1
  84. package/dist/chunk-SKWHKM25.js.map +0 -1
  85. package/dist/chunk-TKWU52LK.js +0 -607
  86. package/dist/chunk-TKWU52LK.js.map +0 -1
  87. package/dist/chunk-ULPGGZ6L.js.map +0 -1
  88. package/dist/local-DPS35F5C.js +0 -6
  89. package/dist/manager-drive-4WLKOOXO.js +0 -8
@@ -1,5 +1,5 @@
1
- import { o as Snapshot, E as EncodeOptions, H as Header } from './store-DhrWMYg_.js';
2
- import { a as DriveAuth } from './drive-BLRsK32w.js';
1
+ import { o as Snapshot, E as EncodeOptions, H as Header } from './store-CIbiNoiE.js';
2
+ import { a as DriveAuth } from './drive-86CHuTij.js';
3
3
 
4
4
  /** Serialize a snapshot to a portable backup blob (compressed; encrypted if a password is given). */
5
5
  declare function exportSnapshot(snapshot: Snapshot, opts: EncodeOptions): Promise<Blob>;
@@ -0,0 +1,7 @@
1
+ export { datedName, downloadBlob, pickFromDisk, pickSaveHandle, saveToDisk, writeToHandle } from './chunk-AUH35AAQ.js';
2
+ import './chunk-HHPJPEEG.js';
3
+ import './chunk-OY2A5DCB.js';
4
+ import './chunk-RREJ2MFN.js';
5
+ import './chunk-XMC67RNM.js';
6
+ //# sourceMappingURL=local-XET4G32B.js.map
7
+ //# sourceMappingURL=local-XET4G32B.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"local-DPS35F5C.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"local-XET4G32B.js"}
@@ -1,5 +1,5 @@
1
1
  import { K as KV } from './cache-ilsK3Tki.js';
2
- import { B as BackupTarget, L as LocalStore } from './store-DhrWMYg_.js';
2
+ import { B as BackupTarget, L as LocalStore } from './store-CIbiNoiE.js';
3
3
  import { F as FlowStore } from './machine-ALMkT3mk.js';
4
4
 
5
5
  /** What the destination reports about a listed file (one cheap metadata call). */
@@ -0,0 +1,10 @@
1
+ export { createBackupsManager, driveBackupsHost } from './chunk-EBCQ7ZG7.js';
2
+ import './chunk-3KAAPYPO.js';
3
+ import './chunk-JTNFZV2B.js';
4
+ import './chunk-757ZOSUI.js';
5
+ import './chunk-HHPJPEEG.js';
6
+ import './chunk-OY2A5DCB.js';
7
+ import './chunk-RREJ2MFN.js';
8
+ import './chunk-XMC67RNM.js';
9
+ //# sourceMappingURL=manager-drive-YLSLQ63O.js.map
10
+ //# sourceMappingURL=manager-drive-YLSLQ63O.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"manager-drive-4WLKOOXO.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"manager-drive-YLSLQ63O.js"}
@@ -0,0 +1,11 @@
1
+ export { connect, fromSession } from './chunk-LUNYYH6D.js';
2
+ import './chunk-QSLHEE2L.js';
3
+ import './chunk-757ZOSUI.js';
4
+ import './chunk-HHPJPEEG.js';
5
+ import './chunk-QBCU7OOP.js';
6
+ import './chunk-OY2A5DCB.js';
7
+ import './chunk-RREJ2MFN.js';
8
+ import './chunk-FJGWTBAL.js';
9
+ import './chunk-XMC67RNM.js';
10
+ //# sourceMappingURL=s3-43RWNCV3.js.map
11
+ //# sourceMappingURL=s3-43RWNCV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"s3-43RWNCV3.js"}
@@ -1,4 +1,4 @@
1
- import { B as BackupTarget, P as PeerSource } from './store-DhrWMYg_.js';
1
+ import { B as BackupTarget, P as PeerSource } from './store-CIbiNoiE.js';
2
2
  import { K as KV } from './cache-ilsK3Tki.js';
3
3
 
4
4
  /**
@@ -149,7 +149,7 @@ interface EncodeOptions {
149
149
  extraSecrets?: string[];
150
150
  }
151
151
 
152
- type SelfstoreErrorCode = 'BAD_FORMAT' | 'UNSUPPORTED_VERSION' | 'PASSWORD_REQUIRED' | 'DECRYPT_FAILED' | 'TOO_LARGE' | 'VERIFY_FAILED' | 'FOREIGN_BACKUP' | 'AUTH_EXPIRED' | 'TARGET_UNAVAILABLE' | 'TARGET_WRITE_FAILED' | 'TARGET_GONE' | 'NOT_CONNECTED' | 'WEAK_PASSWORD' | 'ENCRYPTION_REQUIRED' | 'UNEXPECTEDLY_UNENCRYPTED' | 'SCHEMA_TOO_NEW' | 'IDENTITY_REQUIRED' | 'SIGNATURE_INVALID' | 'NOT_A_RECIPIENT' | 'MANIFEST_ROLLBACK';
152
+ type SelfstoreErrorCode = 'BAD_FORMAT' | 'UNSUPPORTED_VERSION' | 'PASSWORD_REQUIRED' | 'DECRYPT_FAILED' | 'TOO_LARGE' | 'VERIFY_FAILED' | 'FOREIGN_BACKUP' | 'AUTH_EXPIRED' | 'TARGET_UNAVAILABLE' | 'TARGET_WRITE_FAILED' | 'TARGET_GONE' | 'NOT_CONNECTED' | 'WEAK_PASSWORD' | 'ENCRYPTION_REQUIRED' | 'UNEXPECTEDLY_UNENCRYPTED' | 'SCHEMA_TOO_NEW' | 'IDENTITY_REQUIRED' | 'SIGNATURE_INVALID' | 'NOT_A_RECIPIENT' | 'MANIFEST_ROLLBACK' | 'CLOCK_DRIFT';
153
153
  /**
154
154
  * i18n key for an error code: lower-camel-cased under `error.`, e.g.
155
155
  * 'error.authExpired'. The library ships the key, the app owns the copy;
package/dist/sync.d.ts CHANGED
@@ -4,7 +4,13 @@
4
4
  * string so a plain string comparison equals causal order.
5
5
  */
6
6
  type Hlc = string;
7
- /** A fresh random replica id (one per device). */
7
+ /**
8
+ * A fresh random replica id (one per device). Not a secret - but two replicas
9
+ * sharing an id lose the tiebreak that makes the order total, so it comes from
10
+ * the same source as everything else here. `randomUUID` is exposed only in a
11
+ * secure context; `getRandomValues` is not, which is why the fallback is that
12
+ * one and never `Math.random`.
13
+ */
8
14
  declare function createNode(): string;
9
15
 
10
16
  /**
@@ -79,11 +85,6 @@ interface ReplicaState {
79
85
  meta: SyncMeta;
80
86
  }
81
87
  type State = ReplicaState;
82
- /**
83
- * Merge replica `b` into `a` (commutative for the convergent strategies). The
84
- * optional `base` lets 'manual' tell a true concurrent conflict from a one-sided
85
- * change; without it, 'manual' errs toward surfacing.
86
- */
87
88
  declare function merge(a: State, b: State, config: SyncConfig, base?: SyncMeta): MergeResult;
88
89
  /**
89
90
  * Concurrent same-id edits that a convergent strategy resolves silently by keeping
package/dist/sync.js CHANGED
@@ -1,3 +1,5 @@
1
- export { changes, createMeta, createNode, detectConflicts, merge, stamp } from './chunk-SKWHKM25.js';
1
+ export { changes, createMeta, createNode, detectConflicts, merge, stamp } from './chunk-23UAUYSW.js';
2
+ import './chunk-FJGWTBAL.js';
3
+ import './chunk-XMC67RNM.js';
2
4
  //# sourceMappingURL=sync.js.map
3
5
  //# sourceMappingURL=sync.js.map
@@ -0,0 +1,9 @@
1
+ export { connect, fromSession, peer } from './chunk-JZHWAX34.js';
2
+ import './chunk-757ZOSUI.js';
3
+ import './chunk-HHPJPEEG.js';
4
+ import './chunk-QBCU7OOP.js';
5
+ import './chunk-OY2A5DCB.js';
6
+ import './chunk-RREJ2MFN.js';
7
+ import './chunk-XMC67RNM.js';
8
+ //# sourceMappingURL=webdav-EEQKX5TZ.js.map
9
+ //# sourceMappingURL=webdav-EEQKX5TZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"webdav-EEQKX5TZ.js"}
package/dist/widgets.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { S as StoreLike, F as FlowHost, C as ConnectTargets, a as ConnectFlowOptions, b as ConnectKind, c as ConnectFlow } from './connect-GY1R9c6Q.js';
1
+ import { S as StoreLike, F as FlowHost, C as ConnectTargets, a as ConnectFlowOptions, b as ConnectKind, c as ConnectFlow } from './connect-Bob2mofK.js';
2
2
  import { ShareEngine, ShareLevel, ShareFlow, JoinEngine, JoinFlow, ReplicaFlow } from './flows.js';
3
- import { f as BackupsManager } from './manager-BlSs6Q5S.js';
4
- import './store-DhrWMYg_.js';
3
+ import { f as BackupsManager } from './manager-Di6lNE4E.js';
4
+ import './store-CIbiNoiE.js';
5
5
  import './cache-ilsK3Tki.js';
6
6
  import './sync.js';
7
- import './drive-BLRsK32w.js';
8
- import './s3-BLgf6hqR.js';
7
+ import './drive-86CHuTij.js';
8
+ import './s3-BsbVn3fw.js';
9
9
  import './machine-ALMkT3mk.js';
10
10
 
11
11
  /** Flat key -> string map; widgets merge a partial override over EN defaults. */
@@ -685,6 +685,20 @@ declare class SelfstoreDestinationElement extends FlowWidget {
685
685
  * a host can still mount separately, with every knob they already had. What is
686
686
  * added here is only the CHOICE between them, which follows the engine's own
687
687
  * status - the same signal the gate uses to decide whether to be on screen.
688
+ *
689
+ * WHERE IT FITS, and where it does not. Before a home is chosen this element IS
690
+ * the gate, and the gate is a full-viewport modal (measured: it covers the page
691
+ * at z-index 280 and takes focus). That is right for an app whose data means
692
+ * nothing until the user answers - a wallet, a record, anything the user will
693
+ * be told is safe - and it is the reason the question is asked once, up front,
694
+ * instead of hiding in a settings screen.
695
+ *
696
+ * It is wrong for a page that must work before any answer: a landing demo, a
697
+ * scratchpad, anything whose whole point is that you can type first. There,
698
+ * mount <selfstore-destination> (the panel on its own, no modal) or
699
+ * <selfstore-status> (one line), and offer the connect journey from a control
700
+ * the user reaches deliberately. Both are the same elements this one composes,
701
+ * so nothing is lost by starting there.
688
702
  */
689
703
 
690
704
  declare class SelfstoreStorageElement extends FlowWidget {
package/dist/widgets.js CHANGED
@@ -1,12 +1,14 @@
1
- import { saveToDisk, datedName } from './chunk-DCEXWSM6.js';
2
- import { connectFlow, shareFlow, joinFlow } from './chunk-LKIRWVXM.js';
3
- import { isOpenSupported } from './chunk-TKWU52LK.js';
4
- import './chunk-W22V5CRM.js';
5
- import './chunk-J5MFXJU6.js';
6
- import './chunk-MGDXR3RB.js';
7
- import './chunk-QBCU7OOP.js';
8
- import './chunk-O3Y6FORN.js';
9
- import './chunk-3OBJOMQ2.js';
1
+ import { saveToDisk, datedName } from './chunk-AUH35AAQ.js';
2
+ import { connectFlow, shareFlow, joinFlow } from './chunk-LYO36VYB.js';
3
+ import './chunk-3BWBBGFW.js';
4
+ import { isOpenSupported } from './chunk-GW5CYP4C.js';
5
+ import './chunk-3KAAPYPO.js';
6
+ import './chunk-JTNFZV2B.js';
7
+ import './chunk-757ZOSUI.js';
8
+ import './chunk-HHPJPEEG.js';
9
+ import './chunk-OY2A5DCB.js';
10
+ import './chunk-RREJ2MFN.js';
11
+ import './chunk-XMC67RNM.js';
10
12
 
11
13
  // src/widgets/icons.ts
12
14
  var INK = "#8a8f98";
@@ -38,7 +40,12 @@ var baseStyles = `
38
40
  color: inherit;
39
41
  --_accent: var(--selfstore-accent, #2563eb);
40
42
  --_accent-ink: var(--selfstore-accent-contrast, #ffffff);
41
- --_ink-dim: var(--selfstore-muted, color-mix(in srgb, currentColor 55%, transparent));
43
+ /* Dimmed ink is TEXT too - it words every sub, hint and field label - so it
44
+ answers to 4.5:1, and an alpha over the host background is what decides
45
+ that. At 55% a near-black ink on white composited to 3.99:1 and failed;
46
+ 62% lands at 5.0:1 there and at 6.3:1 for a near-white ink on a near-black
47
+ page, while still reading a clear step below the main ink. */
48
+ --_ink-dim: var(--selfstore-muted, color-mix(in srgb, currentColor 62%, transparent));
42
49
  --_border: var(--selfstore-border, color-mix(in srgb, currentColor 16%, transparent));
43
50
  --_radius: var(--selfstore-radius, 12px);
44
51
  --_gap: var(--selfstore-gap, 0.6rem);