agent-comms 8.6.1 → 8.7.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.
Files changed (183) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +27 -1
  4. package/dist/account-cli.d.ts +34 -0
  5. package/dist/account-cli.d.ts.map +1 -0
  6. package/dist/account-cli.js +140 -0
  7. package/dist/account-cli.js.map +1 -0
  8. package/dist/account-join-cli.d.ts +17 -0
  9. package/dist/account-join-cli.d.ts.map +1 -0
  10. package/dist/account-join-cli.js +140 -0
  11. package/dist/account-join-cli.js.map +1 -0
  12. package/dist/bridges/mcp/server.d.ts +1 -4
  13. package/dist/bridges/mcp/server.d.ts.map +1 -1
  14. package/dist/bridges/mcp/server.js +1 -1
  15. package/dist/bridges/mcp/server.js.map +1 -1
  16. package/dist/cli.d.ts +4 -0
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +24 -1
  19. package/dist/cli.js.map +1 -1
  20. package/dist/core/account-bundle.d.ts +22 -0
  21. package/dist/core/account-bundle.d.ts.map +1 -0
  22. package/dist/core/account-bundle.js +143 -0
  23. package/dist/core/account-bundle.js.map +1 -0
  24. package/dist/core/account-join.d.ts +62 -0
  25. package/dist/core/account-join.d.ts.map +1 -0
  26. package/dist/core/account-join.js +150 -0
  27. package/dist/core/account-join.js.map +1 -0
  28. package/dist/core/account-ledger-crypto.d.ts +28 -0
  29. package/dist/core/account-ledger-crypto.d.ts.map +1 -0
  30. package/dist/core/account-ledger-crypto.js +101 -0
  31. package/dist/core/account-ledger-crypto.js.map +1 -0
  32. package/dist/core/account-ledger-store.d.ts +21 -0
  33. package/dist/core/account-ledger-store.d.ts.map +1 -0
  34. package/dist/core/account-ledger-store.js +34 -0
  35. package/dist/core/account-ledger-store.js.map +1 -0
  36. package/dist/core/account-ledger.d.ts +80 -0
  37. package/dist/core/account-ledger.d.ts.map +1 -0
  38. package/dist/core/account-ledger.js +247 -0
  39. package/dist/core/account-ledger.js.map +1 -0
  40. package/dist/core/bridge-mesh.d.ts.map +1 -1
  41. package/dist/core/bridge-mesh.js +12 -1
  42. package/dist/core/bridge-mesh.js.map +1 -1
  43. package/dist/core/data-frame-routing.d.ts +50 -3
  44. package/dist/core/data-frame-routing.d.ts.map +1 -1
  45. package/dist/core/data-frame-routing.js +112 -5
  46. package/dist/core/data-frame-routing.js.map +1 -1
  47. package/dist/core/device-membership.d.ts +8 -8
  48. package/dist/core/device-membership.d.ts.map +1 -1
  49. package/dist/core/device-membership.js +17 -16
  50. package/dist/core/device-membership.js.map +1 -1
  51. package/dist/core/dm-send-delegation.d.ts +4 -4
  52. package/dist/core/dm-send-delegation.d.ts.map +1 -1
  53. package/dist/core/dm-send-delegation.js +2 -3
  54. package/dist/core/dm-send-delegation.js.map +1 -1
  55. package/dist/core/group-proofs.d.ts +5 -0
  56. package/dist/core/group-proofs.d.ts.map +1 -1
  57. package/dist/core/group-proofs.js +4 -0
  58. package/dist/core/group-proofs.js.map +1 -1
  59. package/dist/core/identity-store.d.ts.map +1 -1
  60. package/dist/core/identity-store.js +2 -62
  61. package/dist/core/identity-store.js.map +1 -1
  62. package/dist/core/issuer-identity-file.d.ts +4 -0
  63. package/dist/core/issuer-identity-file.d.ts.map +1 -1
  64. package/dist/core/issuer-identity-file.js +7 -5
  65. package/dist/core/issuer-identity-file.js.map +1 -1
  66. package/dist/core/ledger-lock.d.ts +12 -0
  67. package/dist/core/ledger-lock.d.ts.map +1 -0
  68. package/dist/core/ledger-lock.js +62 -0
  69. package/dist/core/ledger-lock.js.map +1 -0
  70. package/dist/core/membership-proofs.d.ts +7 -0
  71. package/dist/core/membership-proofs.d.ts.map +1 -1
  72. package/dist/core/membership-proofs.js +26 -1
  73. package/dist/core/membership-proofs.js.map +1 -1
  74. package/dist/core/mesh-store-shared.d.ts +4 -1
  75. package/dist/core/mesh-store-shared.d.ts.map +1 -1
  76. package/dist/core/mesh-store-shared.js.map +1 -1
  77. package/dist/core/mesh-store.d.ts +17 -8
  78. package/dist/core/mesh-store.d.ts.map +1 -1
  79. package/dist/core/mesh-store.js +41 -41
  80. package/dist/core/mesh-store.js.map +1 -1
  81. package/dist/core/peer-versions.d.ts +11 -0
  82. package/dist/core/peer-versions.d.ts.map +1 -1
  83. package/dist/core/peer-versions.js +9 -0
  84. package/dist/core/peer-versions.js.map +1 -1
  85. package/dist/core/pid-lock-file.d.ts +20 -0
  86. package/dist/core/pid-lock-file.d.ts.map +1 -0
  87. package/dist/core/pid-lock-file.js +115 -0
  88. package/dist/core/pid-lock-file.js.map +1 -0
  89. package/dist/core/room-lifecycle.d.ts +2 -2
  90. package/dist/core/room-lifecycle.d.ts.map +1 -1
  91. package/dist/core/room-lifecycle.js +18 -19
  92. package/dist/core/room-lifecycle.js.map +1 -1
  93. package/dist/core/transport-queries.d.ts +11 -0
  94. package/dist/core/transport-queries.d.ts.map +1 -0
  95. package/dist/core/transport-queries.js +30 -0
  96. package/dist/core/transport-queries.js.map +1 -0
  97. package/dist/core/user-identity.d.ts +23 -18
  98. package/dist/core/user-identity.d.ts.map +1 -1
  99. package/dist/core/user-identity.js +99 -61
  100. package/dist/core/user-identity.js.map +1 -1
  101. package/dist/core/wire-mesh-transport-options.d.ts +11 -2
  102. package/dist/core/wire-mesh-transport-options.d.ts.map +1 -1
  103. package/dist/core/wire-mesh-transport-options.js.map +1 -1
  104. package/dist/core/wire-mesh-transport.d.ts +4 -6
  105. package/dist/core/wire-mesh-transport.d.ts.map +1 -1
  106. package/dist/core/wire-mesh-transport.js +16 -20
  107. package/dist/core/wire-mesh-transport.js.map +1 -1
  108. package/dist/test/account-join.integration.test.d.ts +5 -0
  109. package/dist/test/account-join.integration.test.d.ts.map +1 -0
  110. package/dist/test/account-join.integration.test.js +183 -0
  111. package/dist/test/account-join.integration.test.js.map +1 -0
  112. package/dist/test/account-ledger-lock-worker.d.ts +9 -0
  113. package/dist/test/account-ledger-lock-worker.d.ts.map +1 -0
  114. package/dist/test/account-ledger-lock-worker.js +34 -0
  115. package/dist/test/account-ledger-lock-worker.js.map +1 -0
  116. package/dist/test/account-ledger-lock.integration.test.d.ts +5 -0
  117. package/dist/test/account-ledger-lock.integration.test.d.ts.map +1 -0
  118. package/dist/test/account-ledger-lock.integration.test.js +71 -0
  119. package/dist/test/account-ledger-lock.integration.test.js.map +1 -0
  120. package/dist/test/account-ledger-replication.integration.test.d.ts +5 -0
  121. package/dist/test/account-ledger-replication.integration.test.d.ts.map +1 -0
  122. package/dist/test/account-ledger-replication.integration.test.js +145 -0
  123. package/dist/test/account-ledger-replication.integration.test.js.map +1 -0
  124. package/dist/test/account-ledger.unit.test.d.ts +5 -0
  125. package/dist/test/account-ledger.unit.test.d.ts.map +1 -0
  126. package/dist/test/account-ledger.unit.test.js +317 -0
  127. package/dist/test/account-ledger.unit.test.js.map +1 -0
  128. package/dist/test/account-transfer.unit.test.d.ts +5 -0
  129. package/dist/test/account-transfer.unit.test.d.ts.map +1 -0
  130. package/dist/test/account-transfer.unit.test.js +204 -0
  131. package/dist/test/account-transfer.unit.test.js.map +1 -0
  132. package/dist/test/delivery-engine-delivery.unit.test.js +1 -0
  133. package/dist/test/delivery-engine-delivery.unit.test.js.map +1 -1
  134. package/dist/test/delivery-engine-directed-notify.unit.test.js +1 -0
  135. package/dist/test/delivery-engine-directed-notify.unit.test.js.map +1 -1
  136. package/dist/test/delivery-engine-own-agent.unit.test.js +1 -0
  137. package/dist/test/delivery-engine-own-agent.unit.test.js.map +1 -1
  138. package/dist/test/delivery-engine.unit.test.js +1 -0
  139. package/dist/test/delivery-engine.unit.test.js.map +1 -1
  140. package/dist/test/device-membership.unit.test.js +81 -30
  141. package/dist/test/device-membership.unit.test.js.map +1 -1
  142. package/dist/test/dm-send-delegation.unit.test.js +25 -14
  143. package/dist/test/dm-send-delegation.unit.test.js.map +1 -1
  144. package/dist/test/dm-send-principal-delegation.integration.test.js +9 -2
  145. package/dist/test/dm-send-principal-delegation.integration.test.js.map +1 -1
  146. package/dist/test/hidden-line.unit.test.d.ts +5 -0
  147. package/dist/test/hidden-line.unit.test.d.ts.map +1 -0
  148. package/dist/test/hidden-line.unit.test.js +40 -0
  149. package/dist/test/hidden-line.unit.test.js.map +1 -0
  150. package/dist/test/identity-restart.integration.test.js +8 -1
  151. package/dist/test/identity-restart.integration.test.js.map +1 -1
  152. package/dist/test/mcp-stdout-channel.integration.test.js +2 -2
  153. package/dist/test/mcp-stdout-channel.integration.test.js.map +1 -1
  154. package/dist/test/mesh-smoke.runner.js +2 -1
  155. package/dist/test/mesh-smoke.runner.js.map +1 -1
  156. package/dist/test/room-join-admission.integration.test.js +8 -1
  157. package/dist/test/room-join-admission.integration.test.js.map +1 -1
  158. package/dist/test/room-lifecycle-bare-name.unit.test.js +1 -0
  159. package/dist/test/room-lifecycle-bare-name.unit.test.js.map +1 -1
  160. package/dist/test/room-lifecycle-membership.unit.test.js +1 -0
  161. package/dist/test/room-lifecycle-membership.unit.test.js.map +1 -1
  162. package/dist/test/room-lifecycle-remote.unit.test.js +1 -0
  163. package/dist/test/room-lifecycle-remote.unit.test.js.map +1 -1
  164. package/dist/test/room-lifecycle.unit.test.js +1 -0
  165. package/dist/test/room-lifecycle.unit.test.js.map +1 -1
  166. package/dist/test/room-messaging-durable-send.unit.test.js +1 -0
  167. package/dist/test/room-messaging-durable-send.unit.test.js.map +1 -1
  168. package/dist/test/room-messaging.unit.test.js +1 -0
  169. package/dist/test/room-messaging.unit.test.js.map +1 -1
  170. package/dist/test/room-protocol-notify.unit.test.js +1 -0
  171. package/dist/test/room-protocol-notify.unit.test.js.map +1 -1
  172. package/dist/test/room-protocol.helper.d.ts.map +1 -1
  173. package/dist/test/room-protocol.helper.js +1 -0
  174. package/dist/test/room-protocol.helper.js.map +1 -1
  175. package/dist/test/room-send-retry.integration.test.js +8 -1
  176. package/dist/test/room-send-retry.integration.test.js.map +1 -1
  177. package/dist/test/test-transport.d.ts +9 -0
  178. package/dist/test/test-transport.d.ts.map +1 -1
  179. package/dist/test/test-transport.js +14 -5
  180. package/dist/test/test-transport.js.map +1 -1
  181. package/dist/test/user-identity.unit.test.js +75 -106
  182. package/dist/test/user-identity.unit.test.js.map +1 -1
  183. package/package.json +2 -2
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The account key in transit (agent-comms#344): the one deliberate way a user principal's private key leaves the machine it lives on, so a second machine can hold the same account and, through the replicated grant ledger, see and revoke everything the first minted. The key only ever travels sealed: under a passphrase for an export the person carries themselves, or under a key derived from a one-time account invite for a join, never as plaintext.
3
+ */
4
+ /** The text an exported bundle starts with, so a file can be recognised for what it is before any decryption is attempted. */
5
+ export declare const ACCOUNT_BUNDLE_PREFIX = "agent-comms-account:v1:";
6
+ /** The shortest passphrase an export accepts. Twelve characters is the length NCSC and NIST guidance treat as the floor for a passphrase protecting something offline-attackable; the scrypt cost above does the rest. */
7
+ export declare const MIN_ACCOUNT_PASSPHRASE_LENGTH = 12;
8
+ /** Seals the account's PEM private key under a passphrase, as one line of text. Throws WEAK_PASSPHRASE for a passphrase shorter than MIN_ACCOUNT_PASSPHRASE_LENGTH. */
9
+ export declare function sealAccountBundle(privateKeyPem: string, passphrase: string): string;
10
+ /** The PEM private key a bundle holds. Throws INVALID_BUNDLE for text that is not a bundle this build can read, and WRONG_PASSPHRASE when the passphrase does not open it. The cost parameters are read from the bundle but capped at this build's own, so a crafted bundle cannot make an import run for hours. */
11
+ export declare function openAccountBundle(bundle: string, passphrase: string): string;
12
+ /** The fields of an account invite both ends know: the invite's own single-use nonce is the secret, and the expiry and issuing device are bound in so a sealed key cannot be replayed under a different invite. */
13
+ export interface AccountInviteSecret {
14
+ code: string;
15
+ expiresAt: string;
16
+ deviceId: string;
17
+ }
18
+ /** Seals the account's PEM private key for the machine redeeming `invite`. The invite's nonce carries enough entropy to key it directly, with no passphrase stretching needed. */
19
+ export declare function sealAccountKeyForInvite(privateKeyPem: string, invite: Readonly<AccountInviteSecret>): string;
20
+ /** The PEM private key sealed for `invite`. Throws INVALID_BUNDLE when the text does not open under that invite. */
21
+ export declare function openAccountKeyFromInvite(sealed: string, invite: Readonly<AccountInviteSecret>): string;
22
+ //# sourceMappingURL=account-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-bundle.d.ts","sourceRoot":"","sources":["../../src/core/account-bundle.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,8HAA8H;AAC9H,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAgB/D,0NAA0N;AAC1N,eAAO,MAAM,6BAA6B,KAAK,CAAC;AA0EhD,uKAAuK;AACvK,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAgBR;AAED,oTAAoT;AACpT,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAsC5E;AAED,mNAAmN;AACnN,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,kLAAkL;AAClL,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,MAAM,CAIR;AAED,oHAAoH;AACpH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,MAAM,CAkBR"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * The account key in transit (agent-comms#344): the one deliberate way a user principal's private key leaves the machine it lives on, so a second machine can hold the same account and, through the replicated grant ledger, see and revoke everything the first minted. The key only ever travels sealed: under a passphrase for an export the person carries themselves, or under a key derived from a one-time account invite for a join, never as plaintext.
3
+ */
4
+ import { createCipheriv, createDecipheriv, hkdfSync, randomBytes, scryptSync, } from "node:crypto";
5
+ import { z } from "zod";
6
+ import { CommsError } from "./store.js";
7
+ /** The text an exported bundle starts with, so a file can be recognised for what it is before any decryption is attempted. */
8
+ export const ACCOUNT_BUNDLE_PREFIX = "agent-comms-account:v1:";
9
+ /** scrypt's cost as OWASP's password storage guidance recommends it (N = 2^17, r = 8, p = 1): slow enough that guessing a passphrase against a stolen bundle is expensive, fast enough for a once-per-machine export or import. */
10
+ const SCRYPT_COST_LOG2 = 17;
11
+ const SCRYPT_COST = 2 ** SCRYPT_COST_LOG2;
12
+ const SCRYPT_BLOCK_SIZE = 8;
13
+ const SCRYPT_PARALLELISM = 1;
14
+ /** scrypt needs 128 * N * r bytes of memory; Node refuses by default above 32 MiB, so the limit is raised to exactly twice what these parameters need. */
15
+ const SCRYPT_BYTES_PER_UNIT = 128;
16
+ const SCRYPT_MAX_MEMORY = 2 * SCRYPT_BYTES_PER_UNIT * SCRYPT_COST * SCRYPT_BLOCK_SIZE;
17
+ /** A 128-bit salt, the size NIST SP 800-132 sets as the minimum. */
18
+ const SALT_BYTES = 16;
19
+ const KEY_BYTES = 32;
20
+ /** GCM's specified IV length. */
21
+ const IV_BYTES = 12;
22
+ /** The shortest passphrase an export accepts. Twelve characters is the length NCSC and NIST guidance treat as the floor for a passphrase protecting something offline-attackable; the scrypt cost above does the rest. */
23
+ export const MIN_ACCOUNT_PASSPHRASE_LENGTH = 12;
24
+ const INVITE_KEY_INFO = "agent-comms/account-invite/v1";
25
+ const BUNDLE_AAD = Buffer.from(ACCOUNT_BUNDLE_PREFIX);
26
+ const base64url = z.string().regex(/^[A-Za-z0-9_-]*$/);
27
+ const passphraseEnvelopeSchema = z
28
+ .object({
29
+ kdf: z.literal("scrypt"),
30
+ n: z.number().int().positive(),
31
+ r: z.number().int().positive(),
32
+ p: z.number().int().positive(),
33
+ salt: base64url,
34
+ iv: base64url,
35
+ tag: base64url,
36
+ ct: base64url,
37
+ })
38
+ .strict();
39
+ const inviteEnvelopeSchema = z
40
+ .object({ iv: base64url, tag: base64url, ct: base64url })
41
+ .strict();
42
+ function seal(key, plaintext) {
43
+ const iv = randomBytes(IV_BYTES);
44
+ const cipher = createCipheriv("aes-256-gcm", key, iv);
45
+ cipher.setAAD(BUNDLE_AAD);
46
+ const ct = Buffer.concat([cipher.update(plaintext, "utf-8"), cipher.final()]);
47
+ return {
48
+ iv: iv.toString("base64url"),
49
+ tag: cipher.getAuthTag().toString("base64url"),
50
+ ct: ct.toString("base64url"),
51
+ };
52
+ }
53
+ /** The plaintext of a sealed envelope, or undefined if the key is wrong or the envelope was altered. */
54
+ function open(key, envelope) {
55
+ const decipher = createDecipheriv("aes-256-gcm", key, Buffer.from(envelope.iv, "base64url"));
56
+ decipher.setAAD(BUNDLE_AAD);
57
+ decipher.setAuthTag(Buffer.from(envelope.tag, "base64url"));
58
+ try {
59
+ return Buffer.concat([
60
+ decipher.update(Buffer.from(envelope.ct, "base64url")),
61
+ decipher.final(),
62
+ ]).toString("utf-8");
63
+ }
64
+ catch {
65
+ return undefined;
66
+ }
67
+ }
68
+ function passphraseKey(passphrase, salt, cost) {
69
+ return scryptSync(passphrase, salt, KEY_BYTES, {
70
+ N: cost.n,
71
+ r: cost.r,
72
+ p: cost.p,
73
+ maxmem: SCRYPT_MAX_MEMORY,
74
+ });
75
+ }
76
+ /** Seals the account's PEM private key under a passphrase, as one line of text. Throws WEAK_PASSPHRASE for a passphrase shorter than MIN_ACCOUNT_PASSPHRASE_LENGTH. */
77
+ export function sealAccountBundle(privateKeyPem, passphrase) {
78
+ if (passphrase.length < MIN_ACCOUNT_PASSPHRASE_LENGTH) {
79
+ throw new CommsError(`An account export passphrase must be at least ${String(MIN_ACCOUNT_PASSPHRASE_LENGTH)} characters`, "WEAK_PASSPHRASE");
80
+ }
81
+ const salt = randomBytes(SALT_BYTES);
82
+ const cost = { n: SCRYPT_COST, r: SCRYPT_BLOCK_SIZE, p: SCRYPT_PARALLELISM };
83
+ const envelope = {
84
+ kdf: "scrypt",
85
+ ...cost,
86
+ salt: salt.toString("base64url"),
87
+ ...seal(passphraseKey(passphrase, salt, cost), privateKeyPem),
88
+ };
89
+ return `${ACCOUNT_BUNDLE_PREFIX}${Buffer.from(JSON.stringify(envelope)).toString("base64url")}`;
90
+ }
91
+ /** The PEM private key a bundle holds. Throws INVALID_BUNDLE for text that is not a bundle this build can read, and WRONG_PASSPHRASE when the passphrase does not open it. The cost parameters are read from the bundle but capped at this build's own, so a crafted bundle cannot make an import run for hours. */
92
+ export function openAccountBundle(bundle, passphrase) {
93
+ const text = bundle.trim();
94
+ if (!text.startsWith(ACCOUNT_BUNDLE_PREFIX)) {
95
+ throw new CommsError("Not an agent-comms account bundle", "INVALID_BUNDLE");
96
+ }
97
+ let decoded;
98
+ try {
99
+ decoded = JSON.parse(Buffer.from(text.slice(ACCOUNT_BUNDLE_PREFIX.length), "base64url").toString("utf-8"));
100
+ }
101
+ catch {
102
+ throw new CommsError("The account bundle is damaged", "INVALID_BUNDLE");
103
+ }
104
+ const envelope = passphraseEnvelopeSchema.safeParse(decoded);
105
+ if (!envelope.success ||
106
+ envelope.data.n > SCRYPT_COST ||
107
+ envelope.data.r > SCRYPT_BLOCK_SIZE ||
108
+ envelope.data.p > SCRYPT_PARALLELISM) {
109
+ throw new CommsError("The account bundle is damaged", "INVALID_BUNDLE");
110
+ }
111
+ const key = passphraseKey(passphrase, Buffer.from(envelope.data.salt, "base64url"), envelope.data);
112
+ const privateKeyPem = open(key, envelope.data);
113
+ if (privateKeyPem === undefined) {
114
+ throw new CommsError("The passphrase does not open this account bundle", "WRONG_PASSPHRASE");
115
+ }
116
+ return privateKeyPem;
117
+ }
118
+ function inviteKey(invite) {
119
+ return Buffer.from(hkdfSync("sha256", Buffer.from(invite.code), Buffer.from(`${invite.expiresAt}:${invite.deviceId}`), INVITE_KEY_INFO, KEY_BYTES));
120
+ }
121
+ /** Seals the account's PEM private key for the machine redeeming `invite`. The invite's nonce carries enough entropy to key it directly, with no passphrase stretching needed. */
122
+ export function sealAccountKeyForInvite(privateKeyPem, invite) {
123
+ return Buffer.from(JSON.stringify(seal(inviteKey(invite), privateKeyPem))).toString("base64url");
124
+ }
125
+ /** The PEM private key sealed for `invite`. Throws INVALID_BUNDLE when the text does not open under that invite. */
126
+ export function openAccountKeyFromInvite(sealed, invite) {
127
+ let decoded;
128
+ try {
129
+ decoded = JSON.parse(Buffer.from(sealed, "base64url").toString("utf-8"));
130
+ }
131
+ catch {
132
+ throw new CommsError("The sealed account key is damaged", "INVALID_BUNDLE");
133
+ }
134
+ const envelope = inviteEnvelopeSchema.safeParse(decoded);
135
+ const privateKeyPem = envelope.success
136
+ ? open(inviteKey(invite), envelope.data)
137
+ : undefined;
138
+ if (privateKeyPem === undefined) {
139
+ throw new CommsError("The sealed account key does not open under this invite", "INVALID_BUNDLE");
140
+ }
141
+ return privateKeyPem;
142
+ }
143
+ //# sourceMappingURL=account-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-bundle.js","sourceRoot":"","sources":["../../src/core/account-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Joining a machine to an account (agent-comms#344): one deliberate act per new machine. A machine holding the account issues an account invite, an ordinary connection code (connection-code.ts) it also remembers as an invite; the person carries it to the new machine, which redeems it. Redeeming trusts the issuing device exactly as any connection code does, then asks that device, over the mesh's end-to-end authenticated request path (directly or relayed by the hub), for the account key, which comes back sealed under a key only the invite's holder can derive. The new machine then holds the account: its devices mint membership proofs as the account, so every machine already trusting the account's principal covers them with no per-pair step, and it replicates and can revoke from the account's grant ledger.
3
+ *
4
+ * The issuing device enforces the invite for real, not only the redeemer: it answers each invite once and never after its expiry, so a copied invite is worth nothing once used or stale, and it refuses to issue one that would stay valid for longer than an ordinary connection code (DEFAULT_CONNECTION_CODE_TTL_MS), which is already sized for a person relaying it by hand, since an invite is the account key to whoever redeems it first. Invites live only in the issuing store's memory, so a restart of that store before the invite is used cancels it.
5
+ *
6
+ * Neither half is an agent_comms tool action: an invite hands over the account key and a join replaces the machine's account, so both are `agent-comms account invite` and `agent-comms account join`, run by the person at the terminal (account-cli.ts), where nothing an agent is told can trigger them and the invite is never written into an agent's transcript.
7
+ */
8
+ import type { IncomingManageRequest } from "wire-mesh-core/domain/mesh-session";
9
+ import type { ManageOutcome } from "wire-mesh-core/domain/mesh-session";
10
+ import { type ConnectionCodeLedger, type GenerateConnectionCodeOptions, type RedeemConnectionCodeOptions } from "./connection-code.js";
11
+ import type { GatewayTrust } from "./gateway-trust.js";
12
+ import type { MeshStoreIdentity } from "./mesh-store-shared.js";
13
+ import type { MeshTransport } from "./transport.js";
14
+ import type { ConnectionCode } from "./types.js";
15
+ /** The request verb an invite's redeemer sends its issuer (params.verb), and the capability verb the manage-command carries only to satisfy manage-command.verb's grammar: the handler checks the invite itself, never a token. */
16
+ export declare const ACCOUNT_JOIN_VERB = "account.join";
17
+ /** What became of an invite: answered with the account key, or expired unanswered. */
18
+ export type AccountInviteOutcome = "redeemed" | "expired";
19
+ export interface AccountInvite {
20
+ code: ConnectionCode;
21
+ /** Settles once the invite has been answered or has expired, whichever comes first. */
22
+ settled: Promise<AccountInviteOutcome>;
23
+ }
24
+ export interface AccountJoinDeps {
25
+ requireIdentity: () => MeshStoreIdentity;
26
+ requireTransport: () => MeshTransport;
27
+ getPeerId: () => string;
28
+ connectionCodes: ConnectionCodeLedger;
29
+ gatewayTrust: GatewayTrust;
30
+ /** Re-evaluates whether the store should hold a hub session, after trust changes. */
31
+ reconsiderHub: () => void;
32
+ /** Redeems a connection code the ordinary way (freshness, single use, optional signature) and trusts the device it vouches for. */
33
+ redeemConnectionCode: (candidate: Readonly<ConnectionCode>, options: Readonly<RedeemConnectionCodeOptions>) => Promise<unknown>;
34
+ /** Re-attaches the store to the account it now holds, so its own proofs and ledger switch at once. */
35
+ setIdentity: (identity: MeshStoreIdentity) => void;
36
+ }
37
+ export interface AccountJoinResult {
38
+ /** The account's principal id (hex) this machine now holds. */
39
+ principal: string;
40
+ /** Where the account this machine held before was set aside, when it held a different one. */
41
+ replacedFile?: string;
42
+ }
43
+ export declare class AccountJoin {
44
+ private readonly deps;
45
+ /** Invites this store issued that are neither answered nor known to have expired, keyed by their nonce. */
46
+ private readonly invites;
47
+ constructor(deps: Readonly<AccountJoinDeps>);
48
+ /** Issues an account invite vouching for this store's own device, valid for options.ttlMs (at most DEFAULT_CONNECTION_CODE_TTL_MS, the default). Throws INVITE_TTL_TOO_LONG for a longer one. Also trusts the account's own principal, so this machine holds a hub session the joining machine can reach it through, and admits the joined machine's devices once their proofs name the account. */
49
+ invite(options?: Readonly<Omit<GenerateConnectionCodeOptions, "now">>): Promise<AccountInvite>;
50
+ /** Answers an account.join request: the account key sealed for the named invite, once, and only before the invite expires. Every other request, including a second use of the same invite, is refused without saying whether the invite ever existed. */
51
+ readonly handleJoinRequest: (request: Readonly<IncomingManageRequest>) => Promise<ManageOutcome>;
52
+ /** Drops every invite whose expiry has passed by this store's clock, settling each as expired. */
53
+ private pruneExpired;
54
+ /** Redeems an account invite and makes this machine hold the account it names. Throws INVITE_REFUSED when the issuing device will not answer it (used, expired, cancelled by a restart, or unreachable), and whatever redeeming the connection code itself throws before that. Redeeming trusts the issuing device so the key request can reach it; when the join then fails, that trust is withdrawn again unless the device was already trusted before, so a refused or unanswered invite leaves this machine trusting no one new. */
55
+ join(candidate: Readonly<ConnectionCode>, options?: Readonly<RedeemConnectionCodeOptions>): Promise<AccountJoinResult>;
56
+ /** The half of join after the invite's issuer is trusted: fetch the account key from it and switch this machine to that account. */
57
+ private takeAccount;
58
+ /** Asks the invite's issuing device for the account key. Redeeming the invite has only just trusted that device, so the route to it (a hub session this store opens because it now trusts someone) may still be coming up: a request that found no route yet is retried until JOIN_ROUTE_WAIT_MS has passed, and any answer from the device itself is returned as it is. */
59
+ private requestAccountKey;
60
+ private trustOwnAccount;
61
+ }
62
+ //# sourceMappingURL=account-join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-join.d.ts","sourceRoot":"","sources":["../../src/core/account-join.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAOxE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,mOAAmO;AACnO,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAehD,sFAAsF;AACtF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACxC;AAOD,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,iBAAiB,CAAC;IACzC,gBAAgB,EAAE,MAAM,aAAa,CAAC;IACtC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,eAAe,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,YAAY,CAAC;IAC3B,qFAAqF;IACrF,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,mIAAmI;IACnI,oBAAoB,EAAE,CACpB,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,EACnC,OAAO,EAAE,QAAQ,CAAC,2BAA2B,CAAC,KAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,sGAAsG;IACtG,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,2GAA2G;IAC3G,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;gBAE/B,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC;IAE5D,oYAAoY;IAC9X,MAAM,CACV,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAM,GACjE,OAAO,CAAC,aAAa,CAAC;IAgCzB,yPAAyP;IACzP,QAAQ,CAAC,iBAAiB,GACxB,SAAS,QAAQ,CAAC,qBAAqB,CAAC,KACvC,OAAO,CAAC,aAAa,CAAC,CAiBvB;IAEF,kGAAkG;IAClG,OAAO,CAAC,YAAY;IASpB,wgBAAwgB;IAClgB,IAAI,CACR,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,EACnC,OAAO,GAAE,QAAQ,CAAC,2BAA2B,CAAM,GAClD,OAAO,CAAC,iBAAiB,CAAC;IAc7B,oIAAoI;YACtH,WAAW;IAkCzB,4WAA4W;YAC9V,iBAAiB;IAuB/B,OAAO,CAAC,eAAe;CAKxB"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Joining a machine to an account (agent-comms#344): one deliberate act per new machine. A machine holding the account issues an account invite, an ordinary connection code (connection-code.ts) it also remembers as an invite; the person carries it to the new machine, which redeems it. Redeeming trusts the issuing device exactly as any connection code does, then asks that device, over the mesh's end-to-end authenticated request path (directly or relayed by the hub), for the account key, which comes back sealed under a key only the invite's holder can derive. The new machine then holds the account: its devices mint membership proofs as the account, so every machine already trusting the account's principal covers them with no per-pair step, and it replicates and can revoke from the account's grant ledger.
3
+ *
4
+ * The issuing device enforces the invite for real, not only the redeemer: it answers each invite once and never after its expiry, so a copied invite is worth nothing once used or stale, and it refuses to issue one that would stay valid for longer than an ordinary connection code (DEFAULT_CONNECTION_CODE_TTL_MS), which is already sized for a person relaying it by hand, since an invite is the account key to whoever redeems it first. Invites live only in the issuing store's memory, so a restart of that store before the invite is used cancels it.
5
+ *
6
+ * Neither half is an agent_comms tool action: an invite hands over the account key and a join replaces the machine's account, so both are `agent-comms account invite` and `agent-comms account join`, run by the person at the terminal (account-cli.ts), where nothing an agent is told can trigger them and the invite is never written into an agent's transcript.
7
+ */
8
+ import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
9
+ import { openAccountKeyFromInvite, sealAccountKeyForInvite, } from "./account-bundle.js";
10
+ import { openAccountLedger } from "./account-ledger-store.js";
11
+ import { DEFAULT_CONNECTION_CODE_TTL_MS, } from "./connection-code.js";
12
+ import { CommsError } from "./store.js";
13
+ import { importAccountKey, readAccountPrivateKey } from "./user-identity.js";
14
+ import { toIdentityPort } from "./wire-mesh-identity.js";
15
+ /** The request verb an invite's redeemer sends its issuer (params.verb), and the capability verb the manage-command carries only to satisfy manage-command.verb's grammar: the handler checks the invite itself, never a token. */
16
+ export const ACCOUNT_JOIN_VERB = "account.join";
17
+ const ACCOUNT_JOIN_CAPABILITY_VERB = "account:join";
18
+ /** The outcomes sendRoomRequest gives when this side has no route to the device yet, as opposed to an answer from the device. */
19
+ const NO_ROUTE_CODES = new Set([
20
+ "no_route",
21
+ "not_connected",
22
+ ]);
23
+ const MS_PER_SECOND = 1000;
24
+ /** How long a join waits for a route to the issuing device to come up: a hub dial and its first directory exchange take seconds, so this is generous without leaving a person waiting on an unreachable issuer for long. */
25
+ const JOIN_ROUTE_WAIT_SECONDS = 30;
26
+ const JOIN_ROUTE_WAIT_MS = JOIN_ROUTE_WAIT_SECONDS * MS_PER_SECOND;
27
+ /** Between attempts to reach the issuing device: short against the wait, long enough not to spin. */
28
+ const JOIN_ROUTE_RETRY_MS = 250;
29
+ export class AccountJoin {
30
+ deps;
31
+ /** Invites this store issued that are neither answered nor known to have expired, keyed by their nonce. */
32
+ invites = new Map();
33
+ constructor(deps) {
34
+ this.deps = deps;
35
+ }
36
+ /** Issues an account invite vouching for this store's own device, valid for options.ttlMs (at most DEFAULT_CONNECTION_CODE_TTL_MS, the default). Throws INVITE_TTL_TOO_LONG for a longer one. Also trusts the account's own principal, so this machine holds a hub session the joining machine can reach it through, and admits the joined machine's devices once their proofs name the account. */
37
+ async invite(options = {}) {
38
+ const ttlMs = options.ttlMs ?? DEFAULT_CONNECTION_CODE_TTL_MS;
39
+ if (ttlMs > DEFAULT_CONNECTION_CODE_TTL_MS) {
40
+ throw new CommsError(`An account invite can stay valid for at most ${String(DEFAULT_CONNECTION_CODE_TTL_MS)} ms, since whoever redeems it first takes the account key`, "INVITE_TTL_TOO_LONG");
41
+ }
42
+ const { clock } = this.deps.requireIdentity();
43
+ this.pruneExpired();
44
+ const code = await this.deps.connectionCodes.generate(this.deps.getPeerId(), { ...options, ttlMs, now: clock.now() });
45
+ const settled = new Promise((resolve) => {
46
+ this.invites.set(code.code, {
47
+ secret: {
48
+ code: code.code,
49
+ expiresAt: code.expiresAt,
50
+ deviceId: code.deviceId,
51
+ },
52
+ settle: resolve,
53
+ });
54
+ });
55
+ // Settles `settled` on expiry even when nothing else calls in to prune; unref'd so a pending invite never keeps a process alive by itself.
56
+ setTimeout(() => {
57
+ this.pruneExpired();
58
+ }, ttlMs).unref();
59
+ this.trustOwnAccount();
60
+ return { code, settled };
61
+ }
62
+ /** Answers an account.join request: the account key sealed for the named invite, once, and only before the invite expires. Every other request, including a second use of the same invite, is refused without saying whether the invite ever existed. */
63
+ handleJoinRequest = async (request) => {
64
+ this.pruneExpired();
65
+ const { params } = request.command;
66
+ const code = "code" in params ? params.code : undefined;
67
+ const invite = typeof code === "string" ? this.invites.get(code) : undefined;
68
+ if (invite === undefined) {
69
+ return Promise.resolve({ result: "error", code: "invalid_invite" });
70
+ }
71
+ this.invites.delete(invite.secret.code);
72
+ const { userIdentityOptions } = this.deps.requireIdentity();
73
+ const sealed = sealAccountKeyForInvite(readAccountPrivateKey(userIdentityOptions), invite.secret);
74
+ invite.settle("redeemed");
75
+ return Promise.resolve({ result: "ok", sealed });
76
+ };
77
+ /** Drops every invite whose expiry has passed by this store's clock, settling each as expired. */
78
+ pruneExpired() {
79
+ const now = this.deps.requireIdentity().clock.now();
80
+ for (const [nonce, invite] of this.invites) {
81
+ if (Date.parse(invite.secret.expiresAt) > now)
82
+ continue;
83
+ this.invites.delete(nonce);
84
+ invite.settle("expired");
85
+ }
86
+ }
87
+ /** Redeems an account invite and makes this machine hold the account it names. Throws INVITE_REFUSED when the issuing device will not answer it (used, expired, cancelled by a restart, or unreachable), and whatever redeeming the connection code itself throws before that. Redeeming trusts the issuing device so the key request can reach it; when the join then fails, that trust is withdrawn again unless the device was already trusted before, so a refused or unanswered invite leaves this machine trusting no one new. */
88
+ async join(candidate, options = {}) {
89
+ const trustedBefore = this.deps.gatewayTrust.isTrusted(candidate.deviceId);
90
+ await this.deps.redeemConnectionCode(candidate, options);
91
+ try {
92
+ return await this.takeAccount(candidate);
93
+ }
94
+ catch (error) {
95
+ if (!trustedBefore) {
96
+ this.deps.gatewayTrust.remove(candidate.deviceId);
97
+ this.deps.reconsiderHub();
98
+ }
99
+ throw error;
100
+ }
101
+ }
102
+ /** The half of join after the invite's issuer is trusted: fetch the account key from it and switch this machine to that account. */
103
+ async takeAccount(candidate) {
104
+ const outcome = await this.requestAccountKey(candidate);
105
+ const sealed = outcome.result === "ok" ? outcome.sealed : undefined;
106
+ if (typeof sealed !== "string") {
107
+ throw new CommsError(`The issuing device refused the account invite (${outcome.result === "error" ? (outcome.message ?? outcome.code) : "no key in its answer"})`, "INVITE_REFUSED");
108
+ }
109
+ const privateKeyPem = openAccountKeyFromInvite(sealed, candidate);
110
+ const current = this.deps.requireIdentity();
111
+ const { identity, replacedFile } = importAccountKey(current.userIdentityOptions, privateKeyPem);
112
+ this.deps.setIdentity({
113
+ ...current,
114
+ userIdentity: await toIdentityPort(identity),
115
+ accountLedger: await openAccountLedger({
116
+ userIdentityOptions: current.userIdentityOptions,
117
+ userIdentity: identity,
118
+ clock: current.clock,
119
+ }),
120
+ });
121
+ this.trustOwnAccount();
122
+ const principal = deviceIdToHex(Uint8Array.from(identity.deviceId));
123
+ return replacedFile === undefined
124
+ ? { principal }
125
+ : { principal, replacedFile };
126
+ }
127
+ /** Asks the invite's issuing device for the account key. Redeeming the invite has only just trusted that device, so the route to it (a hub session this store opens because it now trusts someone) may still be coming up: a request that found no route yet is retried until JOIN_ROUTE_WAIT_MS has passed, and any answer from the device itself is returned as it is. */
128
+ async requestAccountKey(invite) {
129
+ const { clock } = this.deps.requireIdentity();
130
+ const deadline = clock.now() + JOIN_ROUTE_WAIT_MS;
131
+ for (;;) {
132
+ const outcome = await this.deps.requireTransport().sendRoomRequest(invite.deviceId, {
133
+ verb: ACCOUNT_JOIN_CAPABILITY_VERB,
134
+ params: { verb: ACCOUNT_JOIN_VERB, code: invite.code },
135
+ }, { kind: "node" });
136
+ const noRouteYet = outcome.result === "error" && NO_ROUTE_CODES.has(outcome.code);
137
+ if (!noRouteYet || clock.now() >= deadline)
138
+ return outcome;
139
+ await new Promise((resolve) => {
140
+ setTimeout(resolve, JOIN_ROUTE_RETRY_MS);
141
+ });
142
+ }
143
+ }
144
+ trustOwnAccount() {
145
+ const { userIdentity } = this.deps.requireIdentity();
146
+ this.deps.gatewayTrust.addPrincipal(deviceIdToHex(userIdentity.deviceId));
147
+ this.deps.reconsiderHub();
148
+ }
149
+ }
150
+ //# sourceMappingURL=account-join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-join.js","sourceRoot":"","sources":["../../src/core/account-join.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The confidentiality layer of the account's replicated grant ledger (agent-comms#344). A `core/data` entry is opaque bytes to the transport and is replicated to whoever asks for it, so every ledger entry is sealed with a key only a holder of the account's private key can derive: AES-256-GCM under an HKDF-SHA256 key from the account key, with the log it belongs to and its sequence number bound in as associated data so a relayer can neither read an entry nor move one to another log or position. The same derivation gives each machine's writer log an id that any account holder recognises and nobody else can distinguish from a random device-id.
3
+ */
4
+ import type { DeviceId } from "wire-mesh-core/generated/protocol";
5
+ /** A data-domain log id is a device-id, which is a SHA-256 digest. */
6
+ export declare const WRITER_LOG_ID_BYTES = 32;
7
+ /** The random half of a writer log id; the other half authenticates it. */
8
+ export declare const WRITER_NONCE_BYTES: number;
9
+ /** The two keys every ledger operation needs, derived once from the account's private key. */
10
+ export interface AccountLedgerKeys {
11
+ /** Seals and opens entries. */
12
+ entryKey: Buffer;
13
+ /** Derives and recognises writer log ids. */
14
+ writerKey: Buffer;
15
+ }
16
+ /** Derives the ledger's keys from the account's PEM private key. Every copy of the same account key derives the same keys, which is what lets every machine holding it read what any of them wrote. */
17
+ export declare function deriveAccountLedgerKeys(accountPrivateKeyPem: string): AccountLedgerKeys;
18
+ /** A fresh random writer nonce, generated once per machine. */
19
+ export declare function generateWriterNonce(): Uint8Array<ArrayBuffer>;
20
+ /** The log id a machine with this writer nonce appends the account's ledger entries under: the nonce followed by a truncated HMAC of it under the account's writer key. */
21
+ export declare function writerLogId(keys: Readonly<AccountLedgerKeys>, nonce: Uint8Array): DeviceId;
22
+ /** Whether a log id is one of this account's writer logs. Only a holder of the account key can tell; to anyone else it is indistinguishable from a device-id. */
23
+ export declare function isWriterLogId(keys: Readonly<AccountLedgerKeys>, logId: Uint8Array): boolean;
24
+ /** Seals one ledger entry's plaintext for position `seq` of log `logId`: version, IV, tag, then ciphertext. */
25
+ export declare function sealLedgerEntry(keys: Readonly<AccountLedgerKeys>, logId: Uint8Array, seq: number, plaintext: Uint8Array): Uint8Array<ArrayBuffer>;
26
+ /** Opens a sealed entry, or returns undefined if it was not sealed by a holder of this account key for exactly this log and position (tampered, moved, truncated, or someone else's). */
27
+ export declare function openLedgerEntry(keys: Readonly<AccountLedgerKeys>, logId: Uint8Array, seq: number, sealed: Uint8Array): Uint8Array<ArrayBuffer> | undefined;
28
+ //# sourceMappingURL=account-ledger-crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-ledger-crypto.d.ts","sourceRoot":"","sources":["../../src/core/account-ledger-crypto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAWlE,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,QAA0B,CAAC;AAQ1D,8FAA8F;AAC9F,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uMAAuM;AACvM,wBAAgB,uBAAuB,CACrC,oBAAoB,EAAE,MAAM,GAC3B,iBAAiB,CAWnB;AASD,+DAA+D;AAC/D,wBAAgB,mBAAmB,IAAI,UAAU,CAAC,WAAW,CAAC,CAE7D;AAED,2KAA2K;AAC3K,wBAAgB,WAAW,CACzB,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,KAAK,EAAE,UAAU,GAChB,QAAQ,CAUV;AAED,iKAAiK;AACjK,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,KAAK,EAAE,UAAU,GAChB,OAAO,CAOT;AAQD,+GAA+G;AAC/G,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,UAAU,GACpB,UAAU,CAAC,WAAW,CAAC,CAazB;AAED,yLAAyL;AACzL,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,GACjB,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAoBrC"}