@interocitor/core 0.0.0-beta.10

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 (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +706 -0
  3. package/dist/adapters/cloudflare.d.ts +78 -0
  4. package/dist/adapters/cloudflare.d.ts.map +1 -0
  5. package/dist/adapters/cloudflare.js +325 -0
  6. package/dist/adapters/google-drive.d.ts +64 -0
  7. package/dist/adapters/google-drive.d.ts.map +1 -0
  8. package/dist/adapters/google-drive.js +339 -0
  9. package/dist/adapters/memory.d.ts +53 -0
  10. package/dist/adapters/memory.d.ts.map +1 -0
  11. package/dist/adapters/memory.js +182 -0
  12. package/dist/adapters/webdav.d.ts +70 -0
  13. package/dist/adapters/webdav.d.ts.map +1 -0
  14. package/dist/adapters/webdav.js +323 -0
  15. package/dist/core/codec.d.ts +20 -0
  16. package/dist/core/codec.d.ts.map +1 -0
  17. package/dist/core/codec.js +102 -0
  18. package/dist/core/compaction.d.ts +45 -0
  19. package/dist/core/compaction.d.ts.map +1 -0
  20. package/dist/core/compaction.js +190 -0
  21. package/dist/core/connected-stores.d.ts +77 -0
  22. package/dist/core/connected-stores.d.ts.map +1 -0
  23. package/dist/core/connected-stores.js +76 -0
  24. package/dist/core/crdt.d.ts +36 -0
  25. package/dist/core/crdt.d.ts.map +1 -0
  26. package/dist/core/crdt.js +174 -0
  27. package/dist/core/errors.d.ts +47 -0
  28. package/dist/core/errors.d.ts.map +1 -0
  29. package/dist/core/errors.js +61 -0
  30. package/dist/core/flush.d.ts +9 -0
  31. package/dist/core/flush.d.ts.map +1 -0
  32. package/dist/core/flush.js +98 -0
  33. package/dist/core/hlc.d.ts +25 -0
  34. package/dist/core/hlc.d.ts.map +1 -0
  35. package/dist/core/hlc.js +75 -0
  36. package/dist/core/ids.d.ts +49 -0
  37. package/dist/core/ids.d.ts.map +1 -0
  38. package/dist/core/ids.js +132 -0
  39. package/dist/core/internals.d.ts +33 -0
  40. package/dist/core/internals.d.ts.map +1 -0
  41. package/dist/core/internals.js +72 -0
  42. package/dist/core/manifest.d.ts +56 -0
  43. package/dist/core/manifest.d.ts.map +1 -0
  44. package/dist/core/manifest.js +203 -0
  45. package/dist/core/pull.d.ts +26 -0
  46. package/dist/core/pull.d.ts.map +1 -0
  47. package/dist/core/pull.js +113 -0
  48. package/dist/core/row-id.d.ts +12 -0
  49. package/dist/core/row-id.d.ts.map +1 -0
  50. package/dist/core/row-id.js +11 -0
  51. package/dist/core/schema-types.d.ts +26 -0
  52. package/dist/core/schema-types.d.ts.map +1 -0
  53. package/dist/core/schema-types.js +31 -0
  54. package/dist/core/schema-types.type-test.d.ts +2 -0
  55. package/dist/core/schema-types.type-test.d.ts.map +1 -0
  56. package/dist/core/schema-types.type-test.js +224 -0
  57. package/dist/core/sync-engine.d.ts +364 -0
  58. package/dist/core/sync-engine.d.ts.map +1 -0
  59. package/dist/core/sync-engine.js +2475 -0
  60. package/dist/core/table.d.ts +260 -0
  61. package/dist/core/table.d.ts.map +1 -0
  62. package/dist/core/table.js +461 -0
  63. package/dist/core/types.d.ts +952 -0
  64. package/dist/core/types.d.ts.map +1 -0
  65. package/dist/core/types.js +6 -0
  66. package/dist/crypto/encryption.d.ts +61 -0
  67. package/dist/crypto/encryption.d.ts.map +1 -0
  68. package/dist/crypto/encryption.js +216 -0
  69. package/dist/crypto/keys.d.ts +48 -0
  70. package/dist/crypto/keys.d.ts.map +1 -0
  71. package/dist/crypto/keys.js +54 -0
  72. package/dist/handshake/channel.d.ts +117 -0
  73. package/dist/handshake/channel.d.ts.map +1 -0
  74. package/dist/handshake/channel.js +245 -0
  75. package/dist/handshake/index.d.ts +216 -0
  76. package/dist/handshake/index.d.ts.map +1 -0
  77. package/dist/handshake/index.js +199 -0
  78. package/dist/handshake/qr-public.d.ts +3 -0
  79. package/dist/handshake/qr-public.d.ts.map +1 -0
  80. package/dist/handshake/qr-public.js +1 -0
  81. package/dist/handshake/qr.d.ts +100 -0
  82. package/dist/handshake/qr.d.ts.map +1 -0
  83. package/dist/handshake/qr.js +102 -0
  84. package/dist/index.d.ts +50 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +50 -0
  87. package/dist/storage/credential-store.d.ts +122 -0
  88. package/dist/storage/credential-store.d.ts.map +1 -0
  89. package/dist/storage/credential-store.js +356 -0
  90. package/dist/storage/local-store.d.ts +64 -0
  91. package/dist/storage/local-store.d.ts.map +1 -0
  92. package/dist/storage/local-store.js +490 -0
  93. package/dist/storage/reset.d.ts +10 -0
  94. package/dist/storage/reset.d.ts.map +1 -0
  95. package/dist/storage/reset.js +18 -0
  96. package/package.json +76 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * interocitor — encrypted local-first CRDT sync over cloud storage
3
+ *
4
+ * Core type definitions
5
+ */
6
+ export {};
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Encryption layer — AES-256-GCM via Web Crypto API
3
+ *
4
+ * The key is a 256-bit symmetric key. It never leaves the device.
5
+ * Each entry is independently encrypted with a random 96-bit IV.
6
+ *
7
+ * The key can be transferred as:
8
+ * - base58 string (~43 chars, copy-pasteable)
9
+ * - URL fragment (#key=base64url)
10
+ * - QR code containing either of the above
11
+ */
12
+ /** Generate a new 256-bit AES-GCM key. */
13
+ export declare function generateKey(): Promise<CryptoKey>;
14
+ /** Export key to raw bytes. */
15
+ export declare function exportKeyRaw(key: CryptoKey): Promise<Uint8Array>;
16
+ /** Import key from raw bytes. */
17
+ export declare function importKeyRaw(raw: Uint8Array): Promise<CryptoKey>;
18
+ /** Export key as a base58 string (~43 chars, human-transferable). */
19
+ export declare function keyToPassphrase(key: CryptoKey): Promise<string>;
20
+ /** Import key from a base58 passphrase. */
21
+ export declare function passphraseToKey(passphrase: string): Promise<CryptoKey>;
22
+ /**
23
+ * Export key as a URL fragment (never hits server).
24
+ * @param baseUrl - e.g. "https://yourapp.com/join"
25
+ */
26
+ export declare function keyToShareUrl(raw: Uint8Array, baseUrl: string): string;
27
+ /** Extract key bytes from a URL fragment. */
28
+ export declare function keyFromFragment(hash: string): Uint8Array | null;
29
+ export interface EncryptedEnvelope {
30
+ v: number;
31
+ iv: string;
32
+ ct: string;
33
+ }
34
+ /** Encrypt a single plaintext string. */
35
+ export declare function encryptEntry(key: CryptoKey, plaintext: string): Promise<string>;
36
+ /** Decrypt a single encrypted envelope back to plaintext. */
37
+ export declare function decryptEntry(key: CryptoKey, envelopeStr: string): Promise<string>;
38
+ /** Encrypt arbitrary binary data using the mesh AES-GCM key. */
39
+ export declare function encryptBytes(key: CryptoKey, plaintext: Uint8Array): Promise<Uint8Array>;
40
+ /** Decrypt binary data produced by {@link encryptBytes}. */
41
+ export declare function decryptBytes(key: CryptoKey, envelopeBytes: Uint8Array): Promise<Uint8Array>;
42
+ /**
43
+ * Encrypt multiple plaintext lines independently and join them as NDJSON.
44
+ *
45
+ * Each line gets its own IV and auth tag, so corruption is isolated to the
46
+ * affected entry.
47
+ */
48
+ export declare function encryptNdjson(key: CryptoKey, lines: string[]): Promise<string>;
49
+ /**
50
+ * Decrypt newline-delimited encrypted entries.
51
+ *
52
+ * Invalid or corrupted lines are returned as `null` instead of throwing so the
53
+ * caller can recover as much of the stream as possible.
54
+ */
55
+ export declare function decryptNdjson(key: CryptoKey, content: string): Promise<Array<string | null>>;
56
+ /** Quick verification: try decrypting a single line to confirm key is correct. */
57
+ export declare function verifyKey(key: CryptoKey, sampleEncrypted: string): Promise<boolean>;
58
+ export declare function storeKeyLocally(key: CryptoKey): Promise<void>;
59
+ export declare function loadKeyLocally(): Promise<CryptoKey | null>;
60
+ export declare function clearKeyLocally(): void;
61
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/crypto/encryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuEH,0CAA0C;AAC1C,wBAAsB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAMtD;AAED,+BAA+B;AAC/B,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAGtE;AAED,iCAAiC;AACjC,wBAAsB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAQtE;AAED,qEAAqE;AACrE,wBAAsB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE;AAED,2CAA2C;AAC3C,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAG5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAO/D;AAID,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,yCAAyC;AACzC,wBAAsB,YAAY,CAChC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,6DAA6D;AAC7D,wBAAsB,YAAY,CAChC,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,gEAAgE;AAChE,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAe7F;AAED,4DAA4D;AAC5D,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBjG;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAalG;AAED,kFAAkF;AAClF,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOzF;AAMD,wBAAsB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAMhE;AAED,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Encryption layer — AES-256-GCM via Web Crypto API
3
+ *
4
+ * The key is a 256-bit symmetric key. It never leaves the device.
5
+ * Each entry is independently encrypted with a random 96-bit IV.
6
+ *
7
+ * The key can be transferred as:
8
+ * - base58 string (~43 chars, copy-pasteable)
9
+ * - URL fragment (#key=base64url)
10
+ * - QR code containing either of the above
11
+ */
12
+ const IV_LENGTH = 12; // 96-bit IV for AES-GCM
13
+ const ENVELOPE_VERSION = 1;
14
+ // ─── Base58 (Bitcoin alphabet) ───────────────────────────────────────
15
+ const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
16
+ function base58Encode(bytes) {
17
+ // Convert byte array to BigInt
18
+ let num = 0n;
19
+ for (const b of bytes) {
20
+ num = num * 256n + BigInt(b);
21
+ }
22
+ let result = '';
23
+ while (num > 0n) {
24
+ const mod = Number(num % 58n);
25
+ result = BASE58_ALPHABET[mod] + result;
26
+ num = num / 58n;
27
+ }
28
+ // Preserve leading zeros
29
+ for (const b of bytes) {
30
+ if (b === 0)
31
+ result = '1' + result;
32
+ else
33
+ break;
34
+ }
35
+ return result;
36
+ }
37
+ function base58Decode(str) {
38
+ let num = 0n;
39
+ for (const char of str) {
40
+ const idx = BASE58_ALPHABET.indexOf(char);
41
+ if (idx === -1)
42
+ throw new Error(`Invalid base58 character: ${char}`);
43
+ num = num * 58n + BigInt(idx);
44
+ }
45
+ // Convert BigInt to byte array
46
+ const hex = num.toString(16).padStart(64, '0'); // 256 bits = 64 hex chars
47
+ const bytes = new Uint8Array(hex.length / 2);
48
+ for (let i = 0; i < bytes.length; i++) {
49
+ bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16) ?? 0;
50
+ }
51
+ return bytes;
52
+ }
53
+ // ─── Uint8 ↔ Base64 ─────────────────────────────────────────────────
54
+ function uint8ToBase64(bytes) {
55
+ let binary = '';
56
+ for (let i = 0; i < bytes.length; i++) {
57
+ binary += String.fromCodePoint(bytes[i]);
58
+ }
59
+ return btoa(binary);
60
+ }
61
+ function base64ToUint8(b64) {
62
+ const binary = atob(b64);
63
+ const bytes = new Uint8Array(binary.length);
64
+ for (let i = 0; i < binary.length; i++) {
65
+ bytes[i] = binary.codePointAt(i);
66
+ }
67
+ return bytes;
68
+ }
69
+ // ─── Key lifecycle ───────────────────────────────────────────────────
70
+ /** Generate a new 256-bit AES-GCM key. */
71
+ export async function generateKey() {
72
+ return crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, // extractable for export/transfer
73
+ ['encrypt', 'decrypt']);
74
+ }
75
+ /** Export key to raw bytes. */
76
+ export async function exportKeyRaw(key) {
77
+ const buffer = await crypto.subtle.exportKey('raw', key);
78
+ return new Uint8Array(buffer);
79
+ }
80
+ /** Import key from raw bytes. */
81
+ export async function importKeyRaw(raw) {
82
+ return crypto.subtle.importKey('raw', raw.buffer, { name: 'AES-GCM' }, true, ['encrypt', 'decrypt']);
83
+ }
84
+ /** Export key as a base58 string (~43 chars, human-transferable). */
85
+ export async function keyToPassphrase(key) {
86
+ const raw = await exportKeyRaw(key);
87
+ return base58Encode(raw);
88
+ }
89
+ /** Import key from a base58 passphrase. */
90
+ export async function passphraseToKey(passphrase) {
91
+ const raw = base58Decode(passphrase.trim());
92
+ return importKeyRaw(raw);
93
+ }
94
+ /**
95
+ * Export key as a URL fragment (never hits server).
96
+ * @param baseUrl - e.g. "https://yourapp.com/join"
97
+ */
98
+ export function keyToShareUrl(raw, baseUrl) {
99
+ const b64url = uint8ToBase64(raw)
100
+ .replaceAll('+', '-')
101
+ .replaceAll('/', '_')
102
+ .replaceAll('=', '');
103
+ return `${baseUrl}#key=${b64url}`;
104
+ }
105
+ /** Extract key bytes from a URL fragment. */
106
+ export function keyFromFragment(hash) {
107
+ const match = hash.match(/key=([A-Za-z0-9_-]+)/);
108
+ if (!match)
109
+ return null;
110
+ const b64 = match[1].replaceAll('-', '+').replaceAll('_', '/');
111
+ // Pad to multiple of 4
112
+ const padded = b64 + '='.repeat((4 - (b64.length % 4)) % 4);
113
+ return base64ToUint8(padded);
114
+ }
115
+ /** Encrypt a single plaintext string. */
116
+ export async function encryptEntry(key, plaintext) {
117
+ const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));
118
+ const encoded = new TextEncoder().encode(plaintext);
119
+ const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, encoded);
120
+ const envelope = {
121
+ v: ENVELOPE_VERSION,
122
+ iv: uint8ToBase64(iv),
123
+ ct: uint8ToBase64(new Uint8Array(ciphertext)),
124
+ };
125
+ return JSON.stringify(envelope);
126
+ }
127
+ /** Decrypt a single encrypted envelope back to plaintext. */
128
+ export async function decryptEntry(key, envelopeStr) {
129
+ const bytes = await decryptBytes(key, new TextEncoder().encode(envelopeStr));
130
+ return new TextDecoder().decode(bytes);
131
+ }
132
+ /** Encrypt arbitrary binary data using the mesh AES-GCM key. */
133
+ export async function encryptBytes(key, plaintext) {
134
+ const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));
135
+ const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, plaintext.buffer.slice(plaintext.byteOffset, plaintext.byteOffset + plaintext.byteLength));
136
+ const envelope = {
137
+ v: ENVELOPE_VERSION,
138
+ iv: uint8ToBase64(iv),
139
+ ct: uint8ToBase64(new Uint8Array(ciphertext)),
140
+ };
141
+ return new TextEncoder().encode(JSON.stringify(envelope));
142
+ }
143
+ /** Decrypt binary data produced by {@link encryptBytes}. */
144
+ export async function decryptBytes(key, envelopeBytes) {
145
+ const envelope = JSON.parse(new TextDecoder().decode(envelopeBytes));
146
+ if (envelope.v !== ENVELOPE_VERSION) {
147
+ throw new Error(`Unknown envelope version: ${envelope.v}`);
148
+ }
149
+ const iv = base64ToUint8(envelope.iv);
150
+ const ct = base64ToUint8(envelope.ct);
151
+ const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: iv.buffer }, key, ct.buffer.slice(ct.byteOffset, ct.byteOffset + ct.byteLength));
152
+ return new Uint8Array(decrypted);
153
+ }
154
+ /**
155
+ * Encrypt multiple plaintext lines independently and join them as NDJSON.
156
+ *
157
+ * Each line gets its own IV and auth tag, so corruption is isolated to the
158
+ * affected entry.
159
+ */
160
+ export async function encryptNdjson(key, lines) {
161
+ const encryptedLines = await Promise.all(lines.map((line) => encryptEntry(key, line)));
162
+ return encryptedLines.join('\n');
163
+ }
164
+ /**
165
+ * Decrypt newline-delimited encrypted entries.
166
+ *
167
+ * Invalid or corrupted lines are returned as `null` instead of throwing so the
168
+ * caller can recover as much of the stream as possible.
169
+ */
170
+ export async function decryptNdjson(key, content) {
171
+ const lines = content
172
+ .split(/\r?\n/)
173
+ .map((line) => line.trim())
174
+ .filter((line) => line.length > 0);
175
+ return Promise.all(lines.map(async (line) => {
176
+ try {
177
+ return await decryptEntry(key, line);
178
+ }
179
+ catch {
180
+ return null;
181
+ }
182
+ }));
183
+ }
184
+ /** Quick verification: try decrypting a single line to confirm key is correct. */
185
+ export async function verifyKey(key, sampleEncrypted) {
186
+ try {
187
+ await decryptEntry(key, sampleEncrypted);
188
+ return true;
189
+ }
190
+ catch {
191
+ return false;
192
+ }
193
+ }
194
+ // ─── Local key persistence ───────────────────────────────────────────
195
+ const KEY_STORAGE_KEY = 'interocitor-key';
196
+ export async function storeKeyLocally(key) {
197
+ if (typeof localStorage === 'undefined')
198
+ return;
199
+ const raw = await exportKeyRaw(key);
200
+ const b64 = uint8ToBase64(raw);
201
+ localStorage.setItem(KEY_STORAGE_KEY, b64);
202
+ }
203
+ export async function loadKeyLocally() {
204
+ if (typeof localStorage === 'undefined')
205
+ return null;
206
+ const b64 = localStorage.getItem(KEY_STORAGE_KEY);
207
+ if (!b64)
208
+ return null;
209
+ const raw = base64ToUint8(b64);
210
+ return importKeyRaw(raw);
211
+ }
212
+ export function clearKeyLocally() {
213
+ if (typeof localStorage === 'undefined')
214
+ return;
215
+ localStorage.removeItem(KEY_STORAGE_KEY);
216
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * interocitor/crypto/keys
3
+ *
4
+ * Key generation and management for encrypted meshes.
5
+ *
6
+ * Keys are 256-bit AES-GCM and never leave the device unless
7
+ * the user explicitly exports them to share with other mesh members.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { generateKey, keyToPassphrase, passphraseToKey } from 'interocitor/crypto/keys';
12
+ *
13
+ * // Host: generate and share
14
+ * const key = await generateKey();
15
+ * const passphrase = await keyToPassphrase(key);
16
+ * console.log('Share this with your mesh:', passphrase);
17
+ *
18
+ * // Guest: join with passphrase
19
+ * const key = await passphraseToKey(passphrase);
20
+ * engine.setEncryptionKey(key);
21
+ *
22
+ * // Persist across sessions
23
+ * await storeKeyLocally(key);
24
+ * const restored = await loadKeyLocally();
25
+ * ```
26
+ */
27
+ export { generateKey,
28
+ /** Export key as a base58 passphrase (~43 chars, copy-pasteable). */
29
+ keyToPassphrase,
30
+ /** Import key from a base58 passphrase produced by keyToPassphrase. */
31
+ passphraseToKey,
32
+ /** Build a share URL with the key embedded in the fragment (#key=...). */
33
+ keyToShareUrl,
34
+ /** Extract raw key bytes from a URL fragment produced by keyToShareUrl. */
35
+ keyFromFragment,
36
+ /** Confirm a key can decrypt a known ciphertext (sanity-check on join). */
37
+ verifyKey,
38
+ /** Persist key in localStorage for the current origin. */
39
+ storeKeyLocally,
40
+ /** Restore key from localStorage, or null if not present. */
41
+ loadKeyLocally,
42
+ /** Remove the persisted key from localStorage. */
43
+ clearKeyLocally,
44
+ /** Export key to raw bytes for custom out-of-band transfer. */
45
+ exportKeyRaw,
46
+ /** Import key from raw bytes produced by exportKeyRaw. */
47
+ importKeyRaw, } from './encryption.ts';
48
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/crypto/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAEL,WAAW;AAGX,qEAAqE;AACrE,eAAe;AACf,uEAAuE;AACvE,eAAe;AAGf,0EAA0E;AAC1E,aAAa;AACb,2EAA2E;AAC3E,eAAe;AAGf,2EAA2E;AAC3E,SAAS;AAGT,0DAA0D;AAC1D,eAAe;AACf,6DAA6D;AAC7D,cAAc;AACd,kDAAkD;AAClD,eAAe;AAGf,+DAA+D;AAC/D,YAAY;AACZ,0DAA0D;AAC1D,YAAY,GACb,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * interocitor/crypto/keys
3
+ *
4
+ * Key generation and management for encrypted meshes.
5
+ *
6
+ * Keys are 256-bit AES-GCM and never leave the device unless
7
+ * the user explicitly exports them to share with other mesh members.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { generateKey, keyToPassphrase, passphraseToKey } from 'interocitor/crypto/keys';
12
+ *
13
+ * // Host: generate and share
14
+ * const key = await generateKey();
15
+ * const passphrase = await keyToPassphrase(key);
16
+ * console.log('Share this with your mesh:', passphrase);
17
+ *
18
+ * // Guest: join with passphrase
19
+ * const key = await passphraseToKey(passphrase);
20
+ * engine.setEncryptionKey(key);
21
+ *
22
+ * // Persist across sessions
23
+ * await storeKeyLocally(key);
24
+ * const restored = await loadKeyLocally();
25
+ * ```
26
+ */
27
+ export {
28
+ // ── Key generation ────────────────────────────────────────────────
29
+ generateKey,
30
+ // ── Human-transferable formats ────────────────────────────────────
31
+ /** Export key as a base58 passphrase (~43 chars, copy-pasteable). */
32
+ keyToPassphrase,
33
+ /** Import key from a base58 passphrase produced by keyToPassphrase. */
34
+ passphraseToKey,
35
+ // ── URL-fragment sharing (key never hits the server) ─────────────
36
+ /** Build a share URL with the key embedded in the fragment (#key=...). */
37
+ keyToShareUrl,
38
+ /** Extract raw key bytes from a URL fragment produced by keyToShareUrl. */
39
+ keyFromFragment,
40
+ // ── Verification ─────────────────────────────────────────────────
41
+ /** Confirm a key can decrypt a known ciphertext (sanity-check on join). */
42
+ verifyKey,
43
+ // ── Local persistence ─────────────────────────────────────────────
44
+ /** Persist key in localStorage for the current origin. */
45
+ storeKeyLocally,
46
+ /** Restore key from localStorage, or null if not present. */
47
+ loadKeyLocally,
48
+ /** Remove the persisted key from localStorage. */
49
+ clearKeyLocally,
50
+ // ── Low-level (advanced: custom key transport) ────────────────────
51
+ /** Export key to raw bytes for custom out-of-band transfer. */
52
+ exportKeyRaw,
53
+ /** Import key from raw bytes produced by exportKeyRaw. */
54
+ importKeyRaw, } from "./encryption.js";
@@ -0,0 +1,117 @@
1
+ /**
2
+ * interocitor/handshake/channel
3
+ *
4
+ * Ephemeral ECDH-P256 key exchange over the shared cloud backend (relay).
5
+ * No extra server required — the backend the mesh already uses is the relay.
6
+ *
7
+ * ## Roles (determined by QR intent, not by which device is "bigger")
8
+ *
9
+ * Generator — device that created the QR (has the ECDH private key).
10
+ * Receives credentials from the scanner via the relay.
11
+ *
12
+ * Scanner — device that scanned the QR (has generatorPub from the QR).
13
+ * Pushes credentials to the generator via the relay.
14
+ *
15
+ * ## Protocol
16
+ *
17
+ * intent = "share" → Generator already has credentials.
18
+ * Scanner is joining → Scanner reads relay → gets credentials.
19
+ * (Scanner pushes scannerPub so Generator can encrypt for it.)
20
+ *
21
+ * intent = "join" → Generator wants credentials.
22
+ * Scanner has credentials → Scanner writes to relay.
23
+ * (Generator just waits and reads.)
24
+ *
25
+ * Both intents use identical wire mechanics; only which side writes
26
+ * credentials differs.
27
+ *
28
+ * ## Wire sequence (both intents)
29
+ *
30
+ * Scanner Relay Generator
31
+ * ─────── ───── ─────────
32
+ * [has generatorPub from QR]
33
+ * generate ephemeral keypair (Es, es)
34
+ * sharedSecret = ECDH(generatorPub, es)
35
+ * wrappingKey = HKDF(sharedSecret)
36
+ * write scanner-pub.json (Es) →
37
+ * read scanner-pub.json
38
+ * sharedSecret = ECDH(Es, eg)
39
+ * wrappingKey = HKDF(sharedSecret)
40
+ *
41
+ * ── if intent == "join": Generator has credentials, Scanner receives ──
42
+ * encrypt {remotePath, meshKey}
43
+ * ← write credentials.json
44
+ * read credentials.json
45
+ * decrypt → remotePath, meshKey
46
+ *
47
+ * ── if intent == "share": Scanner has credentials, Generator receives ──
48
+ * encrypt {remotePath, meshKey}
49
+ * write credentials.json →
50
+ * read credentials.json
51
+ * decrypt → remotePath, meshKey
52
+ *
53
+ * [whoever received credentials deletes relay files — best-effort]
54
+ *
55
+ * ## Relay files (scoped by handshakeId)
56
+ *
57
+ * {relayBase}/scanner-pub.json — scanner's ephemeral ECDH public key
58
+ * {relayBase}/credentials.json — encrypted {remotePath, meshKey?}
59
+ *
60
+ * ## Security
61
+ *
62
+ * wrappingKey is derived from ECDH(generatorPub, scannerPriv)
63
+ * = ECDH(scannerPub, generatorPriv) (commutativity)
64
+ *
65
+ * Anyone with cloud access sees scanner-pub.json and credentials.json.
66
+ * Without generatorPriv (which never leaves the generating device) they
67
+ * cannot derive wrappingKey and cannot decrypt credentials.json.
68
+ * generatorPriv is only accessible to someone who physically held the
69
+ * device that generated the QR.
70
+ */
71
+ import type { StorageAdapter } from '../core/types.ts';
72
+ export declare function generateECDHKeypair(): Promise<CryptoKeyPair>;
73
+ export declare function exportECDHPublicKey(key: CryptoKey): Promise<string>;
74
+ export declare function importECDHPublicKey(spki: string): Promise<CryptoKey>;
75
+ export interface HandshakeCredentials {
76
+ remotePath: string;
77
+ /** Base58 passphrase for the mesh encryption key, or null for unencrypted meshes. */
78
+ passphrase: string | null;
79
+ }
80
+ export interface GeneratorSession {
81
+ /** Generator's ephemeral ECDH public key — goes into the QR payload. */
82
+ generatorPub: string;
83
+ /**
84
+ * Wait for the scanner to appear on the relay, then complete the handshake.
85
+ *
86
+ * intent = "share": generator already has credentials → waits for scannerPub,
87
+ * encrypts and writes credentials, then resolves.
88
+ *
89
+ * intent = "join": generator wants credentials → waits for scannerPub,
90
+ * then waits for credentials, decrypts and resolves them.
91
+ */
92
+ complete(adapter: StorageAdapter, handshakeId: string, relayBase: string, intent: 'share' | 'join', ownCredentials: HandshakeCredentials | null, options?: {
93
+ pollIntervalMs?: number;
94
+ timeoutMs?: number;
95
+ }): Promise<HandshakeCredentials | null>;
96
+ }
97
+ export declare function createGeneratorSession(): Promise<GeneratorSession>;
98
+ /**
99
+ * Run the scanner side of the handshake.
100
+ *
101
+ * intent = "share": generator has credentials and will push them →
102
+ * scanner uploads scannerPub, waits for credentials,
103
+ * decrypts and returns them.
104
+ *
105
+ * intent = "join": generator wants credentials → scanner uploads
106
+ * scannerPub, then writes encrypted credentials,
107
+ * resolves with null (scanner already has them).
108
+ */
109
+ export declare function runScannerHandshake(adapter: StorageAdapter, payload: {
110
+ intent: 'share' | 'join';
111
+ handshakeId: string;
112
+ generatorPub: string;
113
+ }, ownCredentials: HandshakeCredentials | null, relayBase: string, options?: {
114
+ pollIntervalMs?: number;
115
+ timeoutMs?: number;
116
+ }): Promise<HandshakeCredentials | null>;
117
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handshake/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA8BvD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAElE;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzE;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE1E;AAiHD,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,QAAQ,CACN,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GAAG,MAAM,EACxB,cAAc,EAAE,oBAAoB,GAAG,IAAI,EAC3C,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;CACzC;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA6CxE;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE;IACP,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,EACD,cAAc,EAAE,oBAAoB,GAAG,IAAI,EAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5D,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkCtC"}