@verbeth/sdk 0.1.4 → 0.1.6

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 (190) hide show
  1. package/README.md +20 -168
  2. package/dist/esm/src/addresses.d.ts +20 -0
  3. package/dist/esm/src/addresses.d.ts.map +1 -0
  4. package/dist/esm/src/addresses.js +33 -0
  5. package/dist/esm/src/client/HsrTagIndex.d.ts +77 -0
  6. package/dist/esm/src/client/HsrTagIndex.d.ts.map +1 -0
  7. package/dist/esm/src/client/HsrTagIndex.js +157 -0
  8. package/dist/esm/src/client/PendingManager.d.ts +65 -0
  9. package/dist/esm/src/client/PendingManager.d.ts.map +1 -0
  10. package/dist/esm/src/client/PendingManager.js +84 -0
  11. package/dist/esm/src/client/SessionManager.d.ts +65 -0
  12. package/dist/esm/src/client/SessionManager.d.ts.map +1 -0
  13. package/dist/esm/src/client/SessionManager.js +146 -0
  14. package/dist/esm/src/client/VerbethClient.d.ts +153 -99
  15. package/dist/esm/src/client/VerbethClient.d.ts.map +1 -1
  16. package/dist/esm/src/client/VerbethClient.js +429 -123
  17. package/dist/esm/src/client/VerbethClientBuilder.d.ts +105 -0
  18. package/dist/esm/src/client/VerbethClientBuilder.d.ts.map +1 -0
  19. package/dist/esm/src/client/VerbethClientBuilder.js +146 -0
  20. package/dist/esm/src/client/hsrMatcher.d.ts +22 -0
  21. package/dist/esm/src/client/hsrMatcher.d.ts.map +1 -0
  22. package/dist/esm/src/client/hsrMatcher.js +31 -0
  23. package/dist/esm/src/client/index.d.ts +6 -1
  24. package/dist/esm/src/client/index.d.ts.map +1 -1
  25. package/dist/esm/src/client/index.js +2 -0
  26. package/dist/esm/src/client/types.d.ts +151 -10
  27. package/dist/esm/src/client/types.d.ts.map +1 -1
  28. package/dist/esm/src/crypto(old).d.ts +46 -0
  29. package/dist/esm/src/crypto(old).d.ts.map +1 -0
  30. package/dist/esm/src/crypto(old).js +137 -0
  31. package/dist/esm/src/crypto.d.ts +7 -29
  32. package/dist/esm/src/crypto.d.ts.map +1 -1
  33. package/dist/esm/src/crypto.js +36 -72
  34. package/dist/esm/src/executor.d.ts +17 -18
  35. package/dist/esm/src/executor.d.ts.map +1 -1
  36. package/dist/esm/src/executor.js +54 -70
  37. package/dist/esm/src/handshake.d.ts +51 -0
  38. package/dist/esm/src/handshake.d.ts.map +1 -0
  39. package/dist/esm/src/handshake.js +105 -0
  40. package/dist/esm/src/identity.d.ts +24 -18
  41. package/dist/esm/src/identity.d.ts.map +1 -1
  42. package/dist/esm/src/identity.js +126 -31
  43. package/dist/esm/src/index.d.ts +11 -7
  44. package/dist/esm/src/index.d.ts.map +1 -1
  45. package/dist/esm/src/index.js +10 -7
  46. package/dist/esm/src/payload.d.ts +3 -30
  47. package/dist/esm/src/payload.d.ts.map +1 -1
  48. package/dist/esm/src/payload.js +3 -77
  49. package/dist/esm/src/pq/kem.d.ts +33 -0
  50. package/dist/esm/src/pq/kem.d.ts.map +1 -0
  51. package/dist/esm/src/pq/kem.js +40 -0
  52. package/dist/esm/src/ratchet/auth.d.ts +34 -0
  53. package/dist/esm/src/ratchet/auth.d.ts.map +1 -0
  54. package/dist/esm/src/ratchet/auth.js +88 -0
  55. package/dist/esm/src/ratchet/codec.d.ts +52 -0
  56. package/dist/esm/src/ratchet/codec.d.ts.map +1 -0
  57. package/dist/esm/src/ratchet/codec.js +127 -0
  58. package/dist/esm/src/ratchet/decrypt.d.ts +28 -0
  59. package/dist/esm/src/ratchet/decrypt.d.ts.map +1 -0
  60. package/dist/esm/src/ratchet/decrypt.js +255 -0
  61. package/dist/esm/src/ratchet/encrypt.d.ts +17 -0
  62. package/dist/esm/src/ratchet/encrypt.d.ts.map +1 -0
  63. package/dist/esm/src/ratchet/encrypt.js +78 -0
  64. package/dist/esm/src/ratchet/index.d.ts +8 -0
  65. package/dist/esm/src/ratchet/index.d.ts.map +1 -0
  66. package/dist/esm/src/ratchet/index.js +8 -0
  67. package/dist/esm/src/ratchet/kdf.d.ts +60 -0
  68. package/dist/esm/src/ratchet/kdf.d.ts.map +1 -0
  69. package/dist/esm/src/ratchet/kdf.js +91 -0
  70. package/dist/esm/src/ratchet/session.d.ts +43 -0
  71. package/dist/esm/src/ratchet/session.d.ts.map +1 -0
  72. package/dist/esm/src/ratchet/session.js +139 -0
  73. package/dist/esm/src/ratchet/types.d.ts +168 -0
  74. package/dist/esm/src/ratchet/types.d.ts.map +1 -0
  75. package/dist/esm/src/ratchet/types.js +27 -0
  76. package/dist/esm/src/safeSessionSigner.d.ts +35 -0
  77. package/dist/esm/src/safeSessionSigner.d.ts.map +1 -0
  78. package/dist/esm/src/safeSessionSigner.js +59 -0
  79. package/dist/esm/src/send.d.ts +32 -24
  80. package/dist/esm/src/send.d.ts.map +1 -1
  81. package/dist/esm/src/send.js +84 -39
  82. package/dist/esm/src/types.d.ts +8 -13
  83. package/dist/esm/src/types.d.ts.map +1 -1
  84. package/dist/esm/src/utils/safeSessionSigner.d.ts +23 -0
  85. package/dist/esm/src/utils/safeSessionSigner.d.ts.map +1 -0
  86. package/dist/esm/src/utils/safeSessionSigner.js +59 -0
  87. package/dist/esm/src/utils/txQueue.d.ts +12 -0
  88. package/dist/esm/src/utils/txQueue.d.ts.map +1 -0
  89. package/dist/esm/src/utils/txQueue.js +25 -0
  90. package/dist/esm/src/utils.d.ts +2 -3
  91. package/dist/esm/src/utils.d.ts.map +1 -1
  92. package/dist/esm/src/utils.js +5 -5
  93. package/dist/esm/src/verify.d.ts +9 -25
  94. package/dist/esm/src/verify.d.ts.map +1 -1
  95. package/dist/esm/src/verify.js +49 -50
  96. package/dist/src/addresses.d.ts +20 -0
  97. package/dist/src/addresses.d.ts.map +1 -0
  98. package/dist/src/addresses.js +33 -0
  99. package/dist/src/client/HsrTagIndex.d.ts +77 -0
  100. package/dist/src/client/HsrTagIndex.d.ts.map +1 -0
  101. package/dist/src/client/HsrTagIndex.js +157 -0
  102. package/dist/src/client/PendingManager.d.ts +65 -0
  103. package/dist/src/client/PendingManager.d.ts.map +1 -0
  104. package/dist/src/client/PendingManager.js +84 -0
  105. package/dist/src/client/SessionManager.d.ts +65 -0
  106. package/dist/src/client/SessionManager.d.ts.map +1 -0
  107. package/dist/src/client/SessionManager.js +146 -0
  108. package/dist/src/client/VerbethClient.d.ts +153 -99
  109. package/dist/src/client/VerbethClient.d.ts.map +1 -1
  110. package/dist/src/client/VerbethClient.js +429 -123
  111. package/dist/src/client/VerbethClientBuilder.d.ts +105 -0
  112. package/dist/src/client/VerbethClientBuilder.d.ts.map +1 -0
  113. package/dist/src/client/VerbethClientBuilder.js +146 -0
  114. package/dist/src/client/hsrMatcher.d.ts +22 -0
  115. package/dist/src/client/hsrMatcher.d.ts.map +1 -0
  116. package/dist/src/client/hsrMatcher.js +31 -0
  117. package/dist/src/client/index.d.ts +6 -1
  118. package/dist/src/client/index.d.ts.map +1 -1
  119. package/dist/src/client/index.js +2 -0
  120. package/dist/src/client/types.d.ts +151 -10
  121. package/dist/src/client/types.d.ts.map +1 -1
  122. package/dist/src/crypto(old).d.ts +46 -0
  123. package/dist/src/crypto(old).d.ts.map +1 -0
  124. package/dist/src/crypto(old).js +137 -0
  125. package/dist/src/crypto.d.ts +7 -29
  126. package/dist/src/crypto.d.ts.map +1 -1
  127. package/dist/src/crypto.js +36 -72
  128. package/dist/src/executor.d.ts +17 -18
  129. package/dist/src/executor.d.ts.map +1 -1
  130. package/dist/src/executor.js +54 -70
  131. package/dist/src/handshake.d.ts +51 -0
  132. package/dist/src/handshake.d.ts.map +1 -0
  133. package/dist/src/handshake.js +105 -0
  134. package/dist/src/identity.d.ts +24 -18
  135. package/dist/src/identity.d.ts.map +1 -1
  136. package/dist/src/identity.js +126 -31
  137. package/dist/src/index.d.ts +11 -7
  138. package/dist/src/index.d.ts.map +1 -1
  139. package/dist/src/index.js +10 -7
  140. package/dist/src/payload.d.ts +3 -30
  141. package/dist/src/payload.d.ts.map +1 -1
  142. package/dist/src/payload.js +3 -77
  143. package/dist/src/pq/kem.d.ts +33 -0
  144. package/dist/src/pq/kem.d.ts.map +1 -0
  145. package/dist/src/pq/kem.js +40 -0
  146. package/dist/src/ratchet/auth.d.ts +34 -0
  147. package/dist/src/ratchet/auth.d.ts.map +1 -0
  148. package/dist/src/ratchet/auth.js +88 -0
  149. package/dist/src/ratchet/codec.d.ts +52 -0
  150. package/dist/src/ratchet/codec.d.ts.map +1 -0
  151. package/dist/src/ratchet/codec.js +127 -0
  152. package/dist/src/ratchet/decrypt.d.ts +28 -0
  153. package/dist/src/ratchet/decrypt.d.ts.map +1 -0
  154. package/dist/src/ratchet/decrypt.js +255 -0
  155. package/dist/src/ratchet/encrypt.d.ts +17 -0
  156. package/dist/src/ratchet/encrypt.d.ts.map +1 -0
  157. package/dist/src/ratchet/encrypt.js +78 -0
  158. package/dist/src/ratchet/index.d.ts +8 -0
  159. package/dist/src/ratchet/index.d.ts.map +1 -0
  160. package/dist/src/ratchet/index.js +8 -0
  161. package/dist/src/ratchet/kdf.d.ts +60 -0
  162. package/dist/src/ratchet/kdf.d.ts.map +1 -0
  163. package/dist/src/ratchet/kdf.js +91 -0
  164. package/dist/src/ratchet/session.d.ts +43 -0
  165. package/dist/src/ratchet/session.d.ts.map +1 -0
  166. package/dist/src/ratchet/session.js +139 -0
  167. package/dist/src/ratchet/types.d.ts +168 -0
  168. package/dist/src/ratchet/types.d.ts.map +1 -0
  169. package/dist/src/ratchet/types.js +27 -0
  170. package/dist/src/safeSessionSigner.d.ts +35 -0
  171. package/dist/src/safeSessionSigner.d.ts.map +1 -0
  172. package/dist/src/safeSessionSigner.js +59 -0
  173. package/dist/src/send.d.ts +32 -24
  174. package/dist/src/send.d.ts.map +1 -1
  175. package/dist/src/send.js +84 -39
  176. package/dist/src/types.d.ts +8 -13
  177. package/dist/src/types.d.ts.map +1 -1
  178. package/dist/src/utils/safeSessionSigner.d.ts +23 -0
  179. package/dist/src/utils/safeSessionSigner.d.ts.map +1 -0
  180. package/dist/src/utils/safeSessionSigner.js +59 -0
  181. package/dist/src/utils/txQueue.d.ts +12 -0
  182. package/dist/src/utils/txQueue.d.ts.map +1 -0
  183. package/dist/src/utils/txQueue.js +25 -0
  184. package/dist/src/utils.d.ts +2 -3
  185. package/dist/src/utils.d.ts.map +1 -1
  186. package/dist/src/utils.js +5 -5
  187. package/dist/src/verify.d.ts +9 -25
  188. package/dist/src/verify.d.ts.map +1 -1
  189. package/dist/src/verify.js +49 -50
  190. package/package.json +2 -1
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Builder pattern and factory function for VerbethClient.
3
+ *
4
+ * Provides a fluent API for client setup, reducing boilerplate
5
+ * and making the initialization order explicit.
6
+ */
7
+ import type { Signer } from 'ethers';
8
+ import type { IExecutor } from '../executor.js';
9
+ import type { IdentityKeyPair, IdentityProof } from '../types.js';
10
+ import type { SessionStore, PendingStore, VerbethClientCallbacks } from './types.js';
11
+ import { VerbethClient } from './VerbethClient.js';
12
+ /**
13
+ * Options for createVerbethClient factory function.
14
+ */
15
+ export interface CreateVerbethClientOptions {
16
+ address: string;
17
+ signer: Signer;
18
+ identityKeyPair: IdentityKeyPair;
19
+ identityProof: IdentityProof;
20
+ executor: IExecutor;
21
+ sessionStore?: SessionStore;
22
+ pendingStore?: PendingStore;
23
+ callbacks?: VerbethClientCallbacks;
24
+ }
25
+ /**
26
+ * Factory function for one-liner client creation.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const client = createVerbethClient({
31
+ * address,
32
+ * signer,
33
+ * identityKeyPair,
34
+ * identityProof,
35
+ * executor,
36
+ * sessionStore,
37
+ * pendingStore,
38
+ * });
39
+ * ```
40
+ */
41
+ export declare function createVerbethClient(options: CreateVerbethClientOptions): VerbethClient;
42
+ /**
43
+ * Builder for fluent VerbethClient construction.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const client = new VerbethClientBuilder()
48
+ * .withAddress(address)
49
+ * .withSigner(signer)
50
+ * .withIdentity(keyPair, proof)
51
+ * .withExecutor(executor)
52
+ * .withStorage(sessionStore, pendingStore)
53
+ * .build();
54
+ * ```
55
+ */
56
+ export declare class VerbethClientBuilder {
57
+ private address?;
58
+ private signer?;
59
+ private identityKeyPair?;
60
+ private identityProof?;
61
+ private executor?;
62
+ private sessionStore?;
63
+ private pendingStore?;
64
+ private callbacks?;
65
+ /**
66
+ * Set the user's blockchain address.
67
+ */
68
+ withAddress(address: string): this;
69
+ /**
70
+ * Set the ethers Signer for transaction signing.
71
+ */
72
+ withSigner(signer: Signer): this;
73
+ /**
74
+ * Set the identity keypair and proof.
75
+ */
76
+ withIdentity(keyPair: IdentityKeyPair, proof: IdentityProof): this;
77
+ /**
78
+ * Set the contract executor.
79
+ */
80
+ withExecutor(executor: IExecutor): this;
81
+ /**
82
+ * Set storage adapters for sessions and pending messages.
83
+ * Both are optional - only set what you need.
84
+ */
85
+ withStorage(sessionStore?: SessionStore, pendingStore?: PendingStore): this;
86
+ /**
87
+ * Set the session store adapter.
88
+ */
89
+ withSessionStore(store: SessionStore): this;
90
+ /**
91
+ * Set the pending message store adapter.
92
+ */
93
+ withPendingStore(store: PendingStore): this;
94
+ /**
95
+ * Set optional callbacks for events.
96
+ */
97
+ withCallbacks(callbacks: VerbethClientCallbacks): this;
98
+ /**
99
+ * Build the VerbethClient instance.
100
+ *
101
+ * @throws Error if required fields are missing
102
+ */
103
+ build(): VerbethClient;
104
+ }
105
+ //# sourceMappingURL=VerbethClientBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerbethClientBuilder.d.ts","sourceRoot":"","sources":["../../../src/client/VerbethClientBuilder.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,aAAa,CAmBtF;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,SAAS,CAAC,CAAyB;IAE3C;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAMlE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAKvC;;;OAGG;IACH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI;IAU3E;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAK3C;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAK3C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAKtD;;;;OAIG;IACH,KAAK,IAAI,aAAa;CA4BvB"}
@@ -0,0 +1,146 @@
1
+ // packages/sdk/src/client/VerbethClientBuilder.ts
2
+ import { VerbethClient } from './VerbethClient.js';
3
+ /**
4
+ * Factory function for one-liner client creation.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * const client = createVerbethClient({
9
+ * address,
10
+ * signer,
11
+ * identityKeyPair,
12
+ * identityProof,
13
+ * executor,
14
+ * sessionStore,
15
+ * pendingStore,
16
+ * });
17
+ * ```
18
+ */
19
+ export function createVerbethClient(options) {
20
+ const client = new VerbethClient({
21
+ address: options.address,
22
+ signer: options.signer,
23
+ identityKeyPair: options.identityKeyPair,
24
+ identityProof: options.identityProof,
25
+ executor: options.executor,
26
+ callbacks: options.callbacks,
27
+ });
28
+ if (options.sessionStore) {
29
+ client.setSessionStore(options.sessionStore);
30
+ }
31
+ if (options.pendingStore) {
32
+ client.setPendingStore(options.pendingStore);
33
+ }
34
+ return client;
35
+ }
36
+ /**
37
+ * Builder for fluent VerbethClient construction.
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const client = new VerbethClientBuilder()
42
+ * .withAddress(address)
43
+ * .withSigner(signer)
44
+ * .withIdentity(keyPair, proof)
45
+ * .withExecutor(executor)
46
+ * .withStorage(sessionStore, pendingStore)
47
+ * .build();
48
+ * ```
49
+ */
50
+ export class VerbethClientBuilder {
51
+ /**
52
+ * Set the user's blockchain address.
53
+ */
54
+ withAddress(address) {
55
+ this.address = address;
56
+ return this;
57
+ }
58
+ /**
59
+ * Set the ethers Signer for transaction signing.
60
+ */
61
+ withSigner(signer) {
62
+ this.signer = signer;
63
+ return this;
64
+ }
65
+ /**
66
+ * Set the identity keypair and proof.
67
+ */
68
+ withIdentity(keyPair, proof) {
69
+ this.identityKeyPair = keyPair;
70
+ this.identityProof = proof;
71
+ return this;
72
+ }
73
+ /**
74
+ * Set the contract executor.
75
+ */
76
+ withExecutor(executor) {
77
+ this.executor = executor;
78
+ return this;
79
+ }
80
+ /**
81
+ * Set storage adapters for sessions and pending messages.
82
+ * Both are optional - only set what you need.
83
+ */
84
+ withStorage(sessionStore, pendingStore) {
85
+ if (sessionStore) {
86
+ this.sessionStore = sessionStore;
87
+ }
88
+ if (pendingStore) {
89
+ this.pendingStore = pendingStore;
90
+ }
91
+ return this;
92
+ }
93
+ /**
94
+ * Set the session store adapter.
95
+ */
96
+ withSessionStore(store) {
97
+ this.sessionStore = store;
98
+ return this;
99
+ }
100
+ /**
101
+ * Set the pending message store adapter.
102
+ */
103
+ withPendingStore(store) {
104
+ this.pendingStore = store;
105
+ return this;
106
+ }
107
+ /**
108
+ * Set optional callbacks for events.
109
+ */
110
+ withCallbacks(callbacks) {
111
+ this.callbacks = callbacks;
112
+ return this;
113
+ }
114
+ /**
115
+ * Build the VerbethClient instance.
116
+ *
117
+ * @throws Error if required fields are missing
118
+ */
119
+ build() {
120
+ if (!this.address) {
121
+ throw new Error('VerbethClientBuilder: address is required. Call withAddress().');
122
+ }
123
+ if (!this.signer) {
124
+ throw new Error('VerbethClientBuilder: signer is required. Call withSigner().');
125
+ }
126
+ if (!this.identityKeyPair) {
127
+ throw new Error('VerbethClientBuilder: identityKeyPair is required. Call withIdentity().');
128
+ }
129
+ if (!this.identityProof) {
130
+ throw new Error('VerbethClientBuilder: identityProof is required. Call withIdentity().');
131
+ }
132
+ if (!this.executor) {
133
+ throw new Error('VerbethClientBuilder: executor is required. Call withExecutor().');
134
+ }
135
+ return createVerbethClient({
136
+ address: this.address,
137
+ signer: this.signer,
138
+ identityKeyPair: this.identityKeyPair,
139
+ identityProof: this.identityProof,
140
+ executor: this.executor,
141
+ sessionStore: this.sessionStore,
142
+ pendingStore: this.pendingStore,
143
+ callbacks: this.callbacks,
144
+ });
145
+ }
146
+ }
@@ -0,0 +1,22 @@
1
+ export interface PendingContactEntry {
2
+ address: string;
3
+ handshakeEphemeralSecret: Uint8Array;
4
+ kemSecretKey: Uint8Array;
5
+ }
6
+ /**
7
+ * Match an HSR event to a pending contact by computing hybrid tags.
8
+ *
9
+ * For each pending contact, attempts to decrypt the HSR payload and compute
10
+ * the expected tag. Returns the address of the first matching contact.
11
+ *
12
+ * Complexity: O(N) where N = number of pending contacts.
13
+ * Per contact: NaCl decrypt + ML-KEM decapsulate + HKDF tag computation.
14
+ *
15
+ * @param pendingContacts - Contacts with pending handshakes
16
+ * @param inResponseToTag - The tag from the HSR event (topics[1])
17
+ * @param R - Responder's ephemeral public key (from HSR event data)
18
+ * @param encryptedPayload - JSON string of the encrypted HSR payload
19
+ * @returns Address of matching contact, or null if no match
20
+ */
21
+ export declare function matchHsrToContact(pendingContacts: PendingContactEntry[], inResponseToTag: `0x${string}`, R: Uint8Array, encryptedPayload: string): string | null;
22
+ //# sourceMappingURL=hsrMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hsrMatcher.d.ts","sourceRoot":"","sources":["../../../src/client/hsrMatcher.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB,EAAE,UAAU,CAAC;IACrC,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,mBAAmB,EAAE,EACtC,eAAe,EAAE,KAAK,MAAM,EAAE,EAC9B,CAAC,EAAE,UAAU,EACb,gBAAgB,EAAE,MAAM,GACvB,MAAM,GAAG,IAAI,CAaf"}
@@ -0,0 +1,31 @@
1
+ // packages/sdk/src/client/hsrMatcher.ts
2
+ import { computeHybridTagFromInitiator, decryptHandshakeResponse } from '../crypto.js';
3
+ import { kem } from '../pq/kem.js';
4
+ /**
5
+ * Match an HSR event to a pending contact by computing hybrid tags.
6
+ *
7
+ * For each pending contact, attempts to decrypt the HSR payload and compute
8
+ * the expected tag. Returns the address of the first matching contact.
9
+ *
10
+ * Complexity: O(N) where N = number of pending contacts.
11
+ * Per contact: NaCl decrypt + ML-KEM decapsulate + HKDF tag computation.
12
+ *
13
+ * @param pendingContacts - Contacts with pending handshakes
14
+ * @param inResponseToTag - The tag from the HSR event (topics[1])
15
+ * @param R - Responder's ephemeral public key (from HSR event data)
16
+ * @param encryptedPayload - JSON string of the encrypted HSR payload
17
+ * @returns Address of matching contact, or null if no match
18
+ */
19
+ export function matchHsrToContact(pendingContacts, inResponseToTag, R, encryptedPayload) {
20
+ for (const contact of pendingContacts) {
21
+ const decrypted = decryptHandshakeResponse(encryptedPayload, contact.handshakeEphemeralSecret);
22
+ if (!decrypted?.kemCiphertext)
23
+ continue;
24
+ const kemSecret = kem.decapsulate(decrypted.kemCiphertext, contact.kemSecretKey);
25
+ const tag = computeHybridTagFromInitiator(contact.handshakeEphemeralSecret, R, kemSecret);
26
+ if (tag === inResponseToTag) {
27
+ return contact.address;
28
+ }
29
+ }
30
+ return null;
31
+ }
@@ -1,3 +1,8 @@
1
1
  export { VerbethClient } from './VerbethClient.js';
2
- export type { VerbethClientConfig, HandshakeResult, HandshakeResponseResult } from './types.js';
2
+ export { VerbethClientBuilder, createVerbethClient } from './VerbethClientBuilder.js';
3
+ export { matchHsrToContact } from './hsrMatcher.js';
4
+ export type { CreateVerbethClientOptions, } from './VerbethClientBuilder.js';
5
+ export type { PendingContactEntry, } from './hsrMatcher.js';
6
+ export type { VerbethClientConfig, VerbethClientCallbacks, TopicRatchetEvent, MessageDecryptedEvent, HandshakeResult, HandshakeResponseResult, SessionStore, PendingStore, PreparedMessage, DecryptedMessage, PendingMessage, PendingStatus, SendResult, ConfirmResult, SerializedSessionInfo, HsrEventData, CreateInitiatorSessionFromHsrParams, } from './types.js';
7
+ export type { CreateInitiatorSessionParams, CreateResponderSessionParams, } from './VerbethClient.js';
3
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACxB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,YAAY,EACV,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EAErB,eAAe,EACf,uBAAuB,EAEvB,YAAY,EACZ,YAAY,EAEZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,UAAU,EACV,aAAa,EAEb,qBAAqB,EACrB,YAAY,EACZ,mCAAmC,GACpC,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
@@ -1,2 +1,4 @@
1
1
  // packages/sdk/src/client/index.ts
2
2
  export { VerbethClient } from './VerbethClient.js';
3
+ export { VerbethClientBuilder, createVerbethClient } from './VerbethClientBuilder.js';
4
+ export { matchHsrToContact } from './hsrMatcher.js';
@@ -1,9 +1,49 @@
1
+ /**
2
+ * Client types for VerbethClient.
3
+ *
4
+ * Includes storage interfaces that apps implement to connect
5
+ * VerbethClient to their persistence layer.
6
+ */
1
7
  import type { Signer } from 'ethers';
2
8
  import type { IExecutor } from '../executor.js';
3
- import type { IdentityKeyPair, IdentityProof, DuplexTopics } from '../types.js';
9
+ import type { IdentityKeyPair, IdentityProof } from '../types.js';
10
+ import type { RatchetSession } from '../ratchet/types.js';
4
11
  import type nacl from 'tweetnacl';
12
+ import type { KemKeyPair } from '../handshake.js';
13
+ /**
14
+ * Event emitted when topic ratcheting occurs.
15
+ */
16
+ export interface TopicRatchetEvent {
17
+ conversationId: string;
18
+ previousTopicInbound: string | null;
19
+ currentTopicInbound: string;
20
+ topicEpoch: number;
21
+ }
22
+ /**
23
+ * Event emitted after message decryption with topic match info.
24
+ */
25
+ export interface MessageDecryptedEvent {
26
+ conversationId: string;
27
+ topicMatch: 'current' | 'next' | 'previous';
28
+ topicEpoch: number;
29
+ }
30
+ /**
31
+ * Optional callbacks for VerbethClient events.
32
+ */
33
+ export interface VerbethClientCallbacks {
34
+ /**
35
+ * Called when a topic ratchet occurs (epoch advances).
36
+ * Useful for updating UI or triggering contact sync.
37
+ */
38
+ onTopicRatchet?: (event: TopicRatchetEvent) => void;
39
+ /**
40
+ * Called after successful message decryption.
41
+ * Provides topic match info for debugging/analytics.
42
+ */
43
+ onMessageDecrypted?: (event: MessageDecryptedEvent) => void;
44
+ }
5
45
  /**
6
- * Configuration for creating a VerbethClient instance
46
+ * Configuration for creating a VerbethClient instance.
7
47
  */
8
48
  export interface VerbethClientConfig {
9
49
  executor: IExecutor;
@@ -11,20 +51,121 @@ export interface VerbethClientConfig {
11
51
  identityProof: IdentityProof;
12
52
  signer: Signer;
13
53
  address: string;
54
+ callbacks?: VerbethClientCallbacks;
14
55
  }
15
- /**
16
- * Result from initiating a handshake
17
- */
18
56
  export interface HandshakeResult {
19
57
  tx: any;
20
58
  ephemeralKeyPair: nacl.BoxKeyPair;
59
+ kemKeyPair: KemKeyPair;
21
60
  }
22
- /**
23
- * Result from accepting a handshake
24
- */
25
61
  export interface HandshakeResponseResult {
26
62
  tx: any;
27
- duplexTopics: DuplexTopics;
28
- tag: string;
63
+ topicOutbound: `0x${string}`;
64
+ topicInbound: `0x${string}`;
65
+ tag: `0x${string}`;
66
+ salt: Uint8Array;
67
+ responderEphemeralSecret: Uint8Array;
68
+ responderEphemeralPublic: Uint8Array;
69
+ kemSharedSecret?: Uint8Array;
70
+ }
71
+ /**
72
+ * Storage interface for ratchet sessions (to connect VerbethClient to a storage layer)
73
+ */
74
+ export interface SessionStore {
75
+ get(conversationId: string): Promise<RatchetSession | null>;
76
+ /**
77
+ * Find session by any active inbound topic.
78
+ */
79
+ getByInboundTopic(topic: string): Promise<RatchetSession | null>;
80
+ save(session: RatchetSession): Promise<void>;
81
+ }
82
+ /**
83
+ * Result of prepareMessage contains everything needed to send and commit.
84
+ *
85
+ * Two-phase commit pattern:
86
+ * 1. prepareMessage() - encrypts and returns PreparedMessage
87
+ * 2. Send transaction using prepared.payload and prepared.topic
88
+ * 3. Session state is already committed for forward secrecy
89
+ */
90
+ export interface PreparedMessage {
91
+ id: string;
92
+ conversationId: string;
93
+ topic: `0x${string}`;
94
+ payload: Uint8Array;
95
+ plaintext: string;
96
+ sessionBefore: RatchetSession;
97
+ sessionAfter: RatchetSession;
98
+ messageNumber: number;
99
+ createdAt: number;
100
+ }
101
+ /**
102
+ * Result of decryptMessage.
103
+ */
104
+ export interface DecryptedMessage {
105
+ conversationId: string;
106
+ plaintext: string;
107
+ isOwnMessage: boolean;
108
+ session: RatchetSession;
109
+ topic: string;
110
+ topicMatch: 'current' | 'next' | 'previous';
111
+ }
112
+ export type PendingStatus = 'preparing' | 'submitted' | 'confirmed' | 'failed';
113
+ /**
114
+ * Pending outbound message record.
115
+ * Used for matching on-chain confirmations to sent messages.
116
+ */
117
+ export interface PendingMessage {
118
+ id: string;
119
+ conversationId: string;
120
+ topic: string;
121
+ payloadHex: string;
122
+ plaintext: string;
123
+ sessionStateBefore: string;
124
+ sessionStateAfter: string;
125
+ createdAt: number;
126
+ txHash: string | null;
127
+ status: PendingStatus;
128
+ }
129
+ /**
130
+ * Storage interface for pending outbound messages.
131
+ * Implement this to enable sendMessage/confirmTx/revertTx.
132
+ */
133
+ export interface PendingStore {
134
+ save(pending: PendingMessage): Promise<void>;
135
+ get(id: string): Promise<PendingMessage | null>;
136
+ getByTxHash(txHash: string): Promise<PendingMessage | null>;
137
+ updateStatus(id: string, status: PendingStatus, txHash?: string): Promise<void>;
138
+ delete(id: string): Promise<void>;
139
+ getByConversation(conversationId: string): Promise<PendingMessage[]>;
140
+ }
141
+ export interface SendResult {
142
+ messageId: string;
143
+ txHash: string;
144
+ topic: `0x${string}`;
145
+ messageNumber: number;
146
+ }
147
+ export interface ConfirmResult {
148
+ conversationId: string;
149
+ plaintext: string;
150
+ messageId: string;
151
+ }
152
+ export interface SerializedSessionInfo {
153
+ conversationId: string;
154
+ topicEpoch: number;
155
+ sendingMsgNumber: number;
156
+ receivingMsgNumber: number;
157
+ currentTopicOutbound: string;
158
+ currentTopicInbound: string;
159
+ }
160
+ export interface HsrEventData {
161
+ inResponseToTag: `0x${string}`;
162
+ responderEphemeralPubKey: Uint8Array;
163
+ kemCiphertext?: Uint8Array;
164
+ }
165
+ export interface CreateInitiatorSessionFromHsrParams {
166
+ contactAddress: string;
167
+ myEphemeralSecret: Uint8Array;
168
+ myKemSecret?: Uint8Array;
169
+ hsrEvent: HsrEventData;
29
170
  }
30
171
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,GAAG,CAAC;IACR,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,GAAG,CAAC;IACR,YAAY,EAAE,YAAY,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAEpD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,GAAG,CAAC;IACR,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,GAAG,CAAC;IACR,aAAa,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,GAAG,EAAE,KAAK,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,wBAAwB,EAAE,UAAU,CAAC;IACrC,wBAAwB,EAAE,UAAU,CAAC;IACrC,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAE5D;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,cAAc,CAAC;IAC9B,YAAY,EAAE,cAAc,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;CAC7C;AAGD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC5D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,wBAAwB,EAAE,UAAU,CAAC;IACrC,aAAa,CAAC,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;CACxB"}
@@ -0,0 +1,46 @@
1
+ import { HandshakeResponseContent } from './payload.js';
2
+ import { IdentityProof } from './types.js';
3
+ /**
4
+ * Encrypts a structured payload (JSON-serializable objects)
5
+ */
6
+ export declare function encryptStructuredPayload<T>(payload: T, recipientPublicKey: Uint8Array, ephemeralSecretKey: Uint8Array, ephemeralPublicKey: Uint8Array, staticSigningSecretKey?: Uint8Array, staticSigningPublicKey?: Uint8Array): string;
7
+ /**
8
+ * Decrypts a structured payload with converter function
9
+ */
10
+ export declare function decryptStructuredPayload<T>(payloadJson: string, recipientSecretKey: Uint8Array, converter: (obj: any) => T, staticSigningPublicKey?: Uint8Array): T | null;
11
+ export declare function encryptMessage(message: string, recipientPublicKey: Uint8Array, ephemeralSecretKey: Uint8Array, ephemeralPublicKey: Uint8Array, staticSigningSecretKey?: Uint8Array, staticSigningPublicKey?: Uint8Array): string;
12
+ export declare function decryptMessage(payloadJson: string, recipientSecretKey: Uint8Array, staticSigningPublicKey?: Uint8Array): string | null;
13
+ /**
14
+ * Decrypts handshake response and extracts individual keys from unified format
15
+ */
16
+ export declare function decryptHandshakeResponse(payloadJson: string, initiatorEphemeralSecretKey: Uint8Array): HandshakeResponseContent | null;
17
+ /**
18
+ * helper to decrypt handshake response and extract individual keys
19
+ */
20
+ export declare function decryptAndExtractHandshakeKeys(payloadJson: string, initiatorEphemeralSecretKey: Uint8Array): {
21
+ identityPubKey: Uint8Array;
22
+ signingPubKey: Uint8Array;
23
+ ephemeralPubKey: Uint8Array;
24
+ note?: string;
25
+ identityProof: IdentityProof;
26
+ } | null;
27
+ /**
28
+ * Responder: tag = H( KDF( ECDH(r, viewPubA), "verbeth:hsr"))
29
+ */
30
+ export declare function computeTagFromResponder(rSecretKey: Uint8Array, viewPubA: Uint8Array): `0x${string}`;
31
+ /**
32
+ * Initiator: tag = H( KDF( ECDH(viewPrivA, R), "verbeth:hsr"))
33
+ */
34
+ export declare function computeTagFromInitiator(viewPrivA: Uint8Array, R: Uint8Array): `0x${string}`;
35
+ export declare function deriveLongTermShared(myIdentitySecretKey: Uint8Array, theirIdentityPublicKey: Uint8Array): Uint8Array;
36
+ /**
37
+ * Directional duplex topics (Initiator-Responder, Responder-Initiator).
38
+ * Recommended salt: tag (bytes)
39
+ */
40
+ export declare function deriveDuplexTopics(myIdentitySecretKey: Uint8Array, theirIdentityPublicKey: Uint8Array, salt?: Uint8Array): {
41
+ topicOut: `0x${string}`;
42
+ topicIn: `0x${string}`;
43
+ checksum: `0x${string}`;
44
+ };
45
+ export declare function verifyDuplexTopicsChecksum(topicOut: `0x${string}`, topicIn: `0x${string}`, checksum: `0x${string}`): boolean;
46
+ //# sourceMappingURL=crypto(old).d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto(old).d.ts","sourceRoot":"","sources":["../../src/crypto(old).ts"],"names":[],"mappings":"AAMA,OAAO,EAML,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,OAAO,EAAE,CAAC,EACV,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,EACnC,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,UAAU,EAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAC1B,sBAAsB,CAAC,EAAE,UAAU,GAClC,CAAC,GAAG,IAAI,CAaV;AAGD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,EACnC,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,CAUR;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,GAAG,IAAI,CAQf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,UAAU,GACtC,wBAAwB,GAAG,IAAI,CAgBjC;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,UAAU,GACtC;IACD,cAAc,EAAE,UAAU,CAAC;IAC3B,aAAa,EAAE,UAAU,CAAC;IAC1B,eAAe,EAAE,UAAU,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,aAAa,CAAC;CAC9B,GAAG,IAAI,CAcP;AAWD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,UAAU,GACnB,KAAK,MAAM,EAAE,CAGf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,UAAU,EACrB,CAAC,EAAE,UAAU,GACZ,KAAK,MAAM,EAAE,CAGf;AAkBD,wBAAgB,oBAAoB,CAClC,mBAAmB,EAAE,UAAU,EAC/B,sBAAsB,EAAE,UAAU,GACjC,UAAU,CAEZ;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,UAAU,EAC/B,sBAAsB,EAAE,UAAU,EAClC,IAAI,CAAC,EAAE,UAAU,GAChB;IAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAA;CAAE,CAW9E;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,KAAK,MAAM,EAAE,EACvB,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,QAAQ,EAAE,KAAK,MAAM,EAAE,GACtB,OAAO,CAOT"}