@bsv/sdk 1.2.20 → 1.2.22

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 (160) hide show
  1. package/dist/cjs/package.json +3 -3
  2. package/dist/cjs/src/auth/Peer.js +536 -0
  3. package/dist/cjs/src/auth/Peer.js.map +1 -0
  4. package/dist/cjs/src/auth/SessionManager.js +66 -0
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -0
  6. package/dist/cjs/src/auth/{Certificate.js → certificates/Certificate.js} +22 -26
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -0
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +79 -0
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -0
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +49 -0
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -0
  12. package/dist/cjs/src/auth/certificates/index.js +25 -0
  13. package/dist/cjs/src/auth/certificates/index.js.map +1 -0
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +411 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -0
  16. package/dist/cjs/src/auth/clients/index.js +18 -0
  17. package/dist/cjs/src/auth/clients/index.js.map +1 -0
  18. package/dist/cjs/src/auth/index.js +20 -5
  19. package/dist/cjs/src/auth/index.js.map +1 -1
  20. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +259 -0
  21. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -0
  22. package/dist/cjs/src/auth/transports/index.js +18 -0
  23. package/dist/cjs/src/auth/transports/index.js.map +1 -0
  24. package/dist/cjs/src/auth/types.js +3 -0
  25. package/dist/cjs/src/auth/types.js.map +1 -0
  26. package/dist/cjs/src/auth/utils/certificateHelpers.js +51 -0
  27. package/dist/cjs/src/auth/utils/certificateHelpers.js.map +1 -0
  28. package/dist/cjs/src/auth/utils/createNonce.js +19 -0
  29. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -0
  30. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js +31 -0
  31. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -0
  32. package/dist/cjs/src/auth/utils/index.js +22 -0
  33. package/dist/cjs/src/auth/utils/index.js.map +1 -0
  34. package/dist/cjs/src/auth/utils/validateCertificates.js +42 -0
  35. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -0
  36. package/dist/cjs/src/auth/utils/verifyNonce.js +27 -0
  37. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -0
  38. package/dist/cjs/src/primitives/Point.js +1 -1
  39. package/dist/cjs/src/primitives/Point.js.map +1 -1
  40. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1 -1
  41. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  42. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +148 -148
  43. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  44. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  45. package/dist/esm/src/auth/Peer.js +533 -0
  46. package/dist/esm/src/auth/Peer.js.map +1 -0
  47. package/dist/esm/src/auth/SessionManager.js +63 -0
  48. package/dist/esm/src/auth/SessionManager.js.map +1 -0
  49. package/dist/esm/src/auth/{Certificate.js → certificates/Certificate.js} +1 -2
  50. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -0
  51. package/dist/esm/src/auth/certificates/MasterCertificate.js +73 -0
  52. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -0
  53. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +44 -0
  54. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -0
  55. package/dist/esm/src/auth/certificates/index.js +4 -0
  56. package/dist/esm/src/auth/certificates/index.js.map +1 -0
  57. package/dist/esm/src/auth/clients/AuthFetch.js +409 -0
  58. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -0
  59. package/dist/esm/src/auth/clients/index.js +2 -0
  60. package/dist/esm/src/auth/clients/index.js.map +1 -0
  61. package/dist/esm/src/auth/index.js +7 -1
  62. package/dist/esm/src/auth/index.js.map +1 -1
  63. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +258 -0
  64. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -0
  65. package/dist/esm/src/auth/transports/index.js +2 -0
  66. package/dist/esm/src/auth/transports/index.js.map +1 -0
  67. package/dist/esm/src/auth/types.js +2 -0
  68. package/dist/esm/src/auth/types.js.map +1 -0
  69. package/dist/esm/src/auth/utils/certificateHelpers.js +47 -0
  70. package/dist/esm/src/auth/utils/certificateHelpers.js.map +1 -0
  71. package/dist/esm/src/auth/utils/createNonce.js +16 -0
  72. package/dist/esm/src/auth/utils/createNonce.js.map +1 -0
  73. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +27 -0
  74. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -0
  75. package/dist/esm/src/auth/utils/index.js +6 -0
  76. package/dist/esm/src/auth/utils/index.js.map +1 -0
  77. package/dist/esm/src/auth/utils/validateCertificates.js +38 -0
  78. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -0
  79. package/dist/esm/src/auth/utils/verifyNonce.js +24 -0
  80. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -0
  81. package/dist/esm/src/primitives/Point.js +1 -1
  82. package/dist/esm/src/primitives/Point.js.map +1 -1
  83. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1 -1
  84. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  85. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +1 -1
  86. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  87. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  88. package/dist/types/src/auth/Peer.d.ts +193 -0
  89. package/dist/types/src/auth/Peer.d.ts.map +1 -0
  90. package/dist/types/src/auth/SessionManager.d.ts +42 -0
  91. package/dist/types/src/auth/SessionManager.d.ts.map +1 -0
  92. package/dist/types/src/auth/{Certificate.d.ts → certificates/Certificate.d.ts} +1 -1
  93. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -0
  94. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +38 -0
  95. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -0
  96. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts +26 -0
  97. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -0
  98. package/dist/types/src/auth/certificates/index.d.ts +4 -0
  99. package/dist/types/src/auth/certificates/index.d.ts.map +1 -0
  100. package/dist/types/src/auth/clients/AuthFetch.d.ts +87 -0
  101. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -0
  102. package/dist/types/src/auth/clients/index.d.ts +2 -0
  103. package/dist/types/src/auth/clients/index.d.ts.map +1 -0
  104. package/dist/types/src/auth/index.d.ts +7 -1
  105. package/dist/types/src/auth/index.d.ts.map +1 -1
  106. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +51 -0
  107. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -0
  108. package/dist/types/src/auth/transports/index.d.ts +2 -0
  109. package/dist/types/src/auth/transports/index.d.ts.map +1 -0
  110. package/dist/types/src/auth/types.d.ts +31 -0
  111. package/dist/types/src/auth/types.d.ts.map +1 -0
  112. package/dist/types/src/auth/utils/certificateHelpers.d.ts +26 -0
  113. package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +1 -0
  114. package/dist/types/src/auth/utils/createNonce.d.ts +8 -0
  115. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -0
  116. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +13 -0
  117. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -0
  118. package/dist/types/src/auth/utils/index.d.ts +6 -0
  119. package/dist/types/src/auth/utils/index.d.ts.map +1 -0
  120. package/dist/types/src/auth/utils/validateCertificates.d.ts +12 -0
  121. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -0
  122. package/dist/types/src/auth/utils/verifyNonce.d.ts +9 -0
  123. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -0
  124. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  125. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  126. package/dist/umd/bundle.js +1 -1
  127. package/docs/README.md +1 -0
  128. package/docs/auth.md +1193 -0
  129. package/package.json +13 -3
  130. package/src/auth/Peer.ts +600 -0
  131. package/src/auth/SessionManager.ts +71 -0
  132. package/src/auth/__tests/Peer.test.ts +599 -0
  133. package/src/auth/__tests/SessionManager.test.ts +87 -0
  134. package/src/auth/{Certificate.ts → certificates/Certificate.ts} +15 -8
  135. package/src/auth/certificates/MasterCertificate.ts +106 -0
  136. package/src/auth/certificates/VerifiableCertificate.ts +73 -0
  137. package/src/auth/certificates/__tests/Certificate.test.ts +282 -0
  138. package/src/auth/certificates/index.ts +3 -0
  139. package/src/auth/clients/AuthFetch.ts +482 -0
  140. package/src/auth/clients/index.ts +1 -0
  141. package/src/auth/index.ts +7 -1
  142. package/src/auth/transports/SimplifiedFetchTransport.ts +288 -0
  143. package/src/auth/transports/index.ts +1 -0
  144. package/src/auth/types.ts +41 -0
  145. package/src/auth/utils/__tests/cryptononce.test.ts +84 -0
  146. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +126 -0
  147. package/src/auth/utils/__tests/validateCertificates.test.ts +142 -0
  148. package/src/auth/utils/certificateHelpers.ts +86 -0
  149. package/src/auth/utils/createNonce.ts +16 -0
  150. package/src/auth/utils/getVerifiableCertificates.ts +40 -0
  151. package/src/auth/utils/index.ts +5 -0
  152. package/src/auth/utils/validateCertificates.ts +54 -0
  153. package/src/auth/utils/verifyNonce.ts +27 -0
  154. package/src/primitives/Point.ts +59 -59
  155. package/src/wallet/substrates/WalletWireProcessor.ts +1 -1
  156. package/src/wallet/substrates/WalletWireTransceiver.ts +1 -1
  157. package/dist/cjs/src/auth/Certificate.js.map +0 -1
  158. package/dist/esm/src/auth/Certificate.js.map +0 -1
  159. package/dist/types/src/auth/Certificate.d.ts.map +0 -1
  160. package/src/auth/__tests/Certificate.test.ts +0 -282
@@ -0,0 +1,533 @@
1
+ import { SessionManager } from './SessionManager.js';
2
+ import { createNonce, verifyNonce, getVerifiableCertificates, validateCertificates } from './utils/index.js';
3
+ import { Random, Utils } from '../../mod.js';
4
+ const AUTH_VERSION = '0.1';
5
+ /**
6
+ * Represents a peer capable of performing mutual authentication.
7
+ * Manages sessions, handles authentication handshakes, certificate requests and responses,
8
+ * and sending and receiving general messages over a transport layer.
9
+ */
10
+ export class Peer {
11
+ sessionManager;
12
+ transport;
13
+ wallet;
14
+ certificatesToRequest;
15
+ onGeneralMessageReceivedCallbacks = new Map();
16
+ onCertificatesReceivedCallbacks = new Map();
17
+ onCertificateRequestReceivedCallbacks = new Map();
18
+ onInitialResponseReceivedCallbacks = new Map();
19
+ // Single shared counter for all callback types
20
+ callbackIdCounter = 0;
21
+ /**
22
+ * Creates a new Peer instance
23
+ *
24
+ * @param {Wallet} wallet - The wallet instance used for cryptographic operations.
25
+ * @param {Transport} transport - The transport mechanism used for sending and receiving messages.
26
+ * @param {RequestedCertificateSet} [certificatesToRequest] - Optional set of certificates to request from a peer during the initial handshake.
27
+ * @param {SessionManager} [sessionManager] - Optional SessionManager to be used for managing peer sessions.
28
+ */
29
+ constructor(wallet, transport, certificatesToRequest, sessionManager) {
30
+ this.wallet = wallet;
31
+ this.transport = transport;
32
+ this.certificatesToRequest = certificatesToRequest ?? { certifiers: [], types: {} };
33
+ this.transport.onData(this.handleIncomingMessage.bind(this));
34
+ this.sessionManager = sessionManager || new SessionManager();
35
+ }
36
+ /**
37
+ * Sends a general message to a peer, and initiates a handshake if necessary.
38
+ *
39
+ * @param {number[]} message - The message payload to send.
40
+ * @param {string} [identityKey] - The identity public key of the peer. If not provided, a handshake will be initiated.
41
+ * @returns {Promise<void>}
42
+ * @throws Will throw an error if the message fails to send.
43
+ */
44
+ async toPeer(message, identityKey, maxWaitTime) {
45
+ const peerSession = await this.getAuthenticatedSession(identityKey, maxWaitTime);
46
+ // Prepare the general message
47
+ const requestNonce = Utils.toBase64(Random(32));
48
+ const { signature } = await this.wallet.createSignature({
49
+ data: message,
50
+ protocolID: [2, 'auth message signature'],
51
+ keyID: `${requestNonce} ${peerSession.peerNonce}`,
52
+ counterparty: peerSession.peerIdentityKey
53
+ });
54
+ const generalMessage = {
55
+ version: AUTH_VERSION,
56
+ messageType: 'general',
57
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
58
+ nonce: requestNonce,
59
+ yourNonce: peerSession.peerNonce,
60
+ payload: message,
61
+ signature
62
+ };
63
+ try {
64
+ await this.transport.send(generalMessage);
65
+ }
66
+ catch (error) {
67
+ const e = new Error(`Failed to send message to peer ${peerSession.peerIdentityKey}: ${error.message}`);
68
+ e.stack = error.stack;
69
+ throw e;
70
+ }
71
+ }
72
+ /**
73
+ * Sends a request for certificates to a peer.
74
+ * This method allows a peer to dynamically request specific certificates after
75
+ * an initial handshake or message has been exchanged.
76
+ *
77
+ * @param {RequestedCertificateSet} certificatesToRequest - Specifies the certifiers and types of certificates required from the peer.
78
+ * @param {string} [identityKey] - The identity public key of the peer. If not provided, the current session identity is used.
79
+ * @param {number} [maxWaitTime=10000] - Maximum time in milliseconds to wait for the peer session to be authenticated.
80
+ * @returns {Promise<void>} Resolves if the certificate request message is successfully sent.
81
+ * @throws Will throw an error if the peer session is not authenticated or if sending the request fails.
82
+ */
83
+ async requestCertificates(certificatesToRequest, identityKey, maxWaitTime = 10000) {
84
+ const peerSession = await this.getAuthenticatedSession(identityKey, maxWaitTime);
85
+ // Prepare the general message
86
+ const requestNonce = Utils.toBase64(Random(32));
87
+ const { signature } = await this.wallet.createSignature({
88
+ data: Utils.toArray(JSON.stringify(certificatesToRequest), 'utf8'),
89
+ protocolID: [2, 'auth message signature'],
90
+ keyID: `${requestNonce} ${peerSession.peerNonce}`,
91
+ counterparty: peerSession.peerIdentityKey
92
+ });
93
+ const certRequestMessage = {
94
+ version: AUTH_VERSION,
95
+ messageType: 'certificateRequest',
96
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
97
+ nonce: requestNonce,
98
+ initialNonce: peerSession.sessionNonce,
99
+ yourNonce: peerSession.peerNonce,
100
+ requestedCertificates: certificatesToRequest,
101
+ signature
102
+ };
103
+ try {
104
+ await this.transport.send(certRequestMessage);
105
+ }
106
+ catch (error) {
107
+ throw new Error(`Failed to send certificate request message to peer ${peerSession.peerIdentityKey}: ${error.message}`);
108
+ }
109
+ }
110
+ /**
111
+ * Retrieves an authenticated session for a given peer identity. If no session exists
112
+ * or the session is not authenticated, initiates a handshake to create or authenticate the session.
113
+ *
114
+ * @param {string} [identityKey] - The identity public key of the peer. If provided, it attempts
115
+ * to retrieve an existing session associated with this identity.
116
+ * @param {number} [maxWaitTime] - The maximum time in milliseconds to wait for the handshake
117
+ * to complete if a new session is required. Defaults to a pre-defined timeout if not specified.
118
+ * @returns {Promise<PeerSession>} - A promise that resolves with an authenticated `PeerSession`.
119
+ * @throws {Error} - Throws an error if the transport is not connected or if the handshake fails.
120
+ */
121
+ async getAuthenticatedSession(identityKey, maxWaitTime) {
122
+ if (!this.transport) {
123
+ throw new Error('Peer transport is not connected!');
124
+ }
125
+ let peerSession = identityKey ? this.sessionManager.getSession(identityKey) : undefined;
126
+ if (!peerSession || !peerSession.isAuthenticated) {
127
+ const sessionNonce = await this.initiateHandshake(identityKey, maxWaitTime);
128
+ peerSession = this.sessionManager.getSession(identityKey || sessionNonce);
129
+ if (!peerSession.isAuthenticated) {
130
+ throw new Error('Unable to establish mutual authentication with peer!');
131
+ }
132
+ }
133
+ return peerSession;
134
+ }
135
+ /**
136
+ * Registers a callback to listen for general messages from peers.
137
+ *
138
+ * @param {(senderPublicKey: string, payload: number[]) => void} callback - The function to call when a general message is received.
139
+ * @returns {number} The ID of the callback listener.
140
+ */
141
+ listenForGeneralMessages(callback) {
142
+ const callbackID = this.callbackIdCounter++;
143
+ this.onGeneralMessageReceivedCallbacks.set(callbackID, callback);
144
+ return callbackID;
145
+ }
146
+ /**
147
+ * Removes a general message listener.
148
+ *
149
+ * @param {number} callbackID - The ID of the callback to remove.
150
+ */
151
+ stopListeningForGeneralMessages(callbackID) {
152
+ this.onGeneralMessageReceivedCallbacks.delete(callbackID);
153
+ }
154
+ /**
155
+ * Registers a callback to listen for certificates received from peers.
156
+ *
157
+ * @param {(certs: VerifiableCertificate[]) => void} callback - The function to call when certificates are received.
158
+ * @returns {number} The ID of the callback listener.
159
+ */
160
+ listenForCertificatesReceived(callback) {
161
+ const callbackID = this.callbackIdCounter++;
162
+ this.onCertificatesReceivedCallbacks.set(callbackID, callback);
163
+ return callbackID;
164
+ }
165
+ /**
166
+ * Cancels and unsubscribes a certificatesReceived listener.
167
+ *
168
+ * @param {number} callbackID - The ID of the certificates received callback to cancel.
169
+ */
170
+ stopListeningForCertificatesReceived(callbackID) {
171
+ this.onCertificatesReceivedCallbacks.delete(callbackID);
172
+ }
173
+ /**
174
+ * Registers a callback to listen for certificates requested from peers.
175
+ *
176
+ * @param {(requestedCertificates: RequestedCertificateSet) => void} callback - The function to call when a certificate request is received
177
+ * @returns {number} The ID of the callback listener.
178
+ */
179
+ listenForCertificatesRequested(callback) {
180
+ const callbackID = this.callbackIdCounter++;
181
+ this.onCertificateRequestReceivedCallbacks.set(callbackID, callback);
182
+ return callbackID;
183
+ }
184
+ /**
185
+ * Cancels and unsubscribes a certificatesRequested listener.
186
+ *
187
+ * @param {number} callbackID - The ID of the requested certificates callback to cancel.
188
+ */
189
+ stopListeningForCertificatesRequested(callbackID) {
190
+ this.onCertificateRequestReceivedCallbacks.delete(callbackID);
191
+ }
192
+ /**
193
+ * Initiates the mutual authentication handshake with a peer.
194
+ *
195
+ * @private
196
+ * @param {string} [identityKey] - The identity public key of the peer.
197
+ * @returns {Promise<string>} A promise that resolves to the session nonce.
198
+ */
199
+ async initiateHandshake(identityKey, maxWaitTime = 10000) {
200
+ const sessionNonce = await createNonce(this.wallet); // Initial request nonce
201
+ this.sessionManager.addSession({
202
+ isAuthenticated: false,
203
+ sessionNonce,
204
+ peerIdentityKey: identityKey
205
+ });
206
+ const initialRequest = {
207
+ version: AUTH_VERSION,
208
+ messageType: 'initialRequest',
209
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
210
+ initialNonce: sessionNonce,
211
+ requestedCertificates: this.certificatesToRequest
212
+ };
213
+ await this.transport.send(initialRequest);
214
+ return await this.waitForInitialResponse(sessionNonce, maxWaitTime);
215
+ }
216
+ /**
217
+ * Waits for the initial response from the peer after sending an initial handshake request message.
218
+ *
219
+ * @param {string} sessionNonce - The session nonce created in the initial request.
220
+ * @returns {Promise<string>} A promise that resolves with the session nonce when the initial response is received.
221
+ */
222
+ async waitForInitialResponse(sessionNonce, maxWaitTime = 10000) {
223
+ return await new Promise((resolve, reject) => {
224
+ const callbackID = this.listenForInitialResponse(sessionNonce, (sessionNonce) => {
225
+ clearTimeout(timeoutHandle);
226
+ this.stopListeningForInitialResponses(callbackID);
227
+ resolve(sessionNonce);
228
+ });
229
+ const timeoutHandle = setTimeout(() => {
230
+ this.stopListeningForInitialResponses(callbackID);
231
+ reject(new Error('Initial response timed out.'));
232
+ }, maxWaitTime);
233
+ });
234
+ }
235
+ /**
236
+ * Adds a listener for an initial response message matching a specific initial nonce.
237
+ *
238
+ * @private
239
+ * @param {string} sessionNonce - The session nonce to match.
240
+ * @param {(sessionNonce: string) => void} callback - The callback to invoke when the initial response is received.
241
+ * @returns {number} The ID of the callback listener.
242
+ */
243
+ listenForInitialResponse(sessionNonce, callback) {
244
+ const callbackID = this.callbackIdCounter++;
245
+ this.onInitialResponseReceivedCallbacks.set(callbackID, { callback, sessionNonce });
246
+ return callbackID;
247
+ }
248
+ /**
249
+ * Removes a listener for initial responses.
250
+ *
251
+ * @private
252
+ * @param {number} callbackID - The ID of the callback to remove.
253
+ */
254
+ stopListeningForInitialResponses(callbackID) {
255
+ this.onInitialResponseReceivedCallbacks.delete(callbackID);
256
+ }
257
+ /**
258
+ * Handles incoming messages from the transport.
259
+ *
260
+ * @param {AuthMessage} message - The incoming message to process.
261
+ * @returns {Promise<void>}
262
+ */
263
+ async handleIncomingMessage(message) {
264
+ if (!message.version || message.version !== AUTH_VERSION) {
265
+ console.error(`Invalid message auth version! Received: ${message.version}, expected: ${AUTH_VERSION}`);
266
+ return;
267
+ }
268
+ switch (message.messageType) {
269
+ case 'initialRequest':
270
+ await this.processInitialRequest(message);
271
+ break;
272
+ case 'initialResponse':
273
+ await this.processInitialResponse(message);
274
+ break;
275
+ case 'certificateRequest':
276
+ await this.processCertificateRequest(message);
277
+ break;
278
+ case 'certificateResponse':
279
+ await this.processCertificateResponse(message);
280
+ break;
281
+ case 'general':
282
+ await this.processGeneralMessage(message);
283
+ break;
284
+ default:
285
+ console.error(`Unknown message type of ${message.messageType} from ${message.identityKey}`);
286
+ }
287
+ }
288
+ /**
289
+ * Processes an initial request message from a peer.
290
+ *
291
+ * @param {AuthMessage} message - The incoming initial request message.
292
+ * @returns {Promise<void>}
293
+ */
294
+ async processInitialRequest(message) {
295
+ if (!message.identityKey || !message.initialNonce) {
296
+ throw new Error('Missing required fields in initialResponse message.');
297
+ }
298
+ // Create an initial session nonce
299
+ const sessionNonce = await createNonce(this.wallet);
300
+ this.sessionManager.addSession({
301
+ isAuthenticated: true,
302
+ sessionNonce,
303
+ peerNonce: message.initialNonce,
304
+ peerIdentityKey: message.identityKey
305
+ });
306
+ // Handle initial certificate requests
307
+ let certificatesToInclude;
308
+ if (message.requestedCertificates?.certifiers?.length > 0) {
309
+ if (this.onCertificateRequestReceivedCallbacks.size > 0) {
310
+ // The application wants to handle certificate requests
311
+ this.onCertificateRequestReceivedCallbacks.forEach(callback => {
312
+ callback(message.identityKey, message.requestedCertificates);
313
+ });
314
+ }
315
+ else {
316
+ // Attempt to find exact matching certificates to return automatically to save round trips
317
+ certificatesToInclude = await getVerifiableCertificates(this.wallet, message.requestedCertificates, message.identityKey);
318
+ }
319
+ }
320
+ // Create the signature for the message
321
+ const { signature } = await this.wallet.createSignature({
322
+ data: Utils.toArray(message.initialNonce + sessionNonce, 'base64'),
323
+ protocolID: [2, 'auth message signature'],
324
+ keyID: `${message.initialNonce} ${sessionNonce}`,
325
+ counterparty: message.identityKey
326
+ });
327
+ const initialResponseMessage = {
328
+ version: AUTH_VERSION,
329
+ messageType: 'initialResponse',
330
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
331
+ initialNonce: sessionNonce,
332
+ yourNonce: message.initialNonce,
333
+ certificates: certificatesToInclude,
334
+ requestedCertificates: this.certificatesToRequest,
335
+ signature
336
+ };
337
+ await this.transport.send(initialResponseMessage);
338
+ }
339
+ /**
340
+ * Processes an initial response message from a peer.
341
+ *
342
+ * @private
343
+ * @param {AuthMessage} message - The incoming initial response message.
344
+ * @returns {Promise<void>}
345
+ * @throws Will throw an error if nonce verification or signature verification fails.
346
+ */
347
+ async processInitialResponse(message) {
348
+ const validNonce = await verifyNonce(message.yourNonce, this.wallet);
349
+ if (!validNonce) {
350
+ throw new Error(`Initial response nonce verification failed from peer: ${message.identityKey}`);
351
+ }
352
+ const peerSession = this.sessionManager.getSession(message.yourNonce);
353
+ if (!peerSession) {
354
+ throw new Error(`Peer session not found for peer: ${message.identityKey}`);
355
+ }
356
+ // Validate message signature
357
+ const { valid } = await this.wallet.verifySignature({
358
+ data: Utils.toArray(peerSession.sessionNonce + message.initialNonce, 'base64'),
359
+ signature: message.signature,
360
+ protocolID: [2, 'auth message signature'],
361
+ keyID: `${peerSession.sessionNonce} ${message.initialNonce}`,
362
+ counterparty: message.identityKey
363
+ });
364
+ if (!valid) {
365
+ throw new Error(`Unable to verify initial response signature for peer: ${message.identityKey}`);
366
+ }
367
+ // After signature and nonce verification is complete, the peer is considered authenticated
368
+ // Save the peer's identity key and initial nonce
369
+ // This allows future requests to be linked to the same session
370
+ peerSession.peerNonce = message.initialNonce;
371
+ peerSession.peerIdentityKey = message.identityKey;
372
+ peerSession.isAuthenticated = true;
373
+ // Run update to ensure lookup is available by both peerIdentityKey and sessionNonce
374
+ this.sessionManager.updateSession(peerSession);
375
+ // Process certificates received
376
+ if (this.certificatesToRequest?.certifiers?.length && message.certificates?.length) {
377
+ await validateCertificates(this.wallet, message, this.certificatesToRequest);
378
+ this.onCertificatesReceivedCallbacks.forEach(callback => callback(message.identityKey, message.certificates));
379
+ }
380
+ this.onInitialResponseReceivedCallbacks.forEach((entry) => {
381
+ if (entry && entry.sessionNonce === peerSession.sessionNonce) {
382
+ entry.callback(peerSession.sessionNonce);
383
+ }
384
+ });
385
+ // Check if the peer requested certificates from us
386
+ if (message.requestedCertificates?.certifiers?.length > 0) {
387
+ if (this.onCertificateRequestReceivedCallbacks.size > 0) {
388
+ // Application wants to handle certificate requests
389
+ this.onCertificateRequestReceivedCallbacks.forEach(callback => {
390
+ callback(message.identityKey, message.requestedCertificates);
391
+ });
392
+ }
393
+ else {
394
+ // Attempt to find exact matching certificates to respond automatically and save round trips
395
+ const verifiableCertificates = await getVerifiableCertificates(this.wallet, message.requestedCertificates, message.identityKey);
396
+ await this.sendCertificateResponse(message.identityKey, verifiableCertificates);
397
+ }
398
+ }
399
+ }
400
+ /**
401
+ * Processes an incoming certificate request message from a peer.
402
+ * Verifies the nonce and signature to ensure the authenticity of the request,
403
+ * then initiates a response with any requested certificates that are available.
404
+ *
405
+ * @param {AuthMessage} message - The certificate request message received from the peer.
406
+ * @throws {Error} Throws an error if nonce verification fails, or the message signature is invalid.
407
+ */
408
+ async processCertificateRequest(message) {
409
+ const validNonce = await verifyNonce(message.yourNonce, this.wallet);
410
+ if (!validNonce) {
411
+ throw new Error(`Unable to verify nonce for certificate request message from: ${message.identityKey}`);
412
+ }
413
+ const peerSession = this.sessionManager.getSession(message.yourNonce);
414
+ const { valid } = await this.wallet.verifySignature({
415
+ data: Utils.toArray(JSON.stringify(message.requestedCertificates), 'utf8'),
416
+ signature: message.signature,
417
+ protocolID: [2, 'auth message signature'],
418
+ keyID: `${message.nonce} ${peerSession.sessionNonce}`,
419
+ counterparty: peerSession.peerIdentityKey
420
+ });
421
+ if (!valid) {
422
+ throw new Error(`Invalid signature in certificate request message from ${peerSession.peerIdentityKey}`);
423
+ }
424
+ if (message.requestedCertificates?.certifiers?.length > 0) {
425
+ if (this.onCertificateRequestReceivedCallbacks.size > 0) {
426
+ // Application wants to handle certificate requests
427
+ this.onCertificateRequestReceivedCallbacks.forEach(callback => {
428
+ callback(message.identityKey, message.requestedCertificates);
429
+ });
430
+ }
431
+ else {
432
+ // Attempt to find exact matching certificates to respond automatically and save round trips
433
+ const verifiableCertificates = await getVerifiableCertificates(this.wallet, message.requestedCertificates, message.identityKey);
434
+ await this.sendCertificateResponse(message.identityKey, verifiableCertificates);
435
+ }
436
+ }
437
+ }
438
+ /**
439
+ * Sends a certificate response message containing the specified certificates to a peer.
440
+ *
441
+ * @param {string} verifierIdentityKey - The identity key of the peer requesting the certificates.
442
+ * @param {VerifiableCertificate[]} certificates - The list of certificates to be included in the response.
443
+ * @returns {Promise<void>} - A promise that resolves once the certificate response has been sent successfully.
444
+ *
445
+ * @throws {Error} Throws an error if the peer session could not be authenticated or if message signing fails.
446
+ */
447
+ async sendCertificateResponse(verifierIdentityKey, certificates) {
448
+ const peerSession = await this.getAuthenticatedSession(verifierIdentityKey);
449
+ const requestNonce = Utils.toBase64(Random(32));
450
+ const { signature } = await this.wallet.createSignature({
451
+ data: Utils.toArray(JSON.stringify(certificates), 'utf8'),
452
+ protocolID: [2, 'auth message signature'],
453
+ keyID: `${requestNonce} ${peerSession.peerNonce}`,
454
+ counterparty: peerSession.peerIdentityKey
455
+ });
456
+ const certificateResponse = {
457
+ version: AUTH_VERSION,
458
+ messageType: 'certificateResponse',
459
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
460
+ nonce: requestNonce,
461
+ initialNonce: peerSession.sessionNonce,
462
+ yourNonce: peerSession.peerNonce,
463
+ certificates,
464
+ signature
465
+ };
466
+ try {
467
+ await this.transport.send(certificateResponse);
468
+ }
469
+ catch (error) {
470
+ throw new Error(`Failed to send certificate response message to peer ${peerSession.peerIdentityKey}: ${error.message}`);
471
+ }
472
+ }
473
+ /**
474
+ * Processes a certificate response message from a peer.
475
+ *
476
+ * @private
477
+ * @param {AuthMessage} message - The incoming certificate response message.
478
+ * @returns {Promise<void>}
479
+ * @throws Will throw an error if nonce verification or signature verification fails.
480
+ */
481
+ async processCertificateResponse(message) {
482
+ const validNonce = await verifyNonce(message.yourNonce, this.wallet);
483
+ if (!validNonce) {
484
+ throw new Error(`Unable to verify nonce for certificate response from: ${message.identityKey}!`);
485
+ }
486
+ const peerSession = this.sessionManager.getSession(message.yourNonce);
487
+ // Validate message signature
488
+ const { valid } = await this.wallet.verifySignature({
489
+ data: Utils.toArray(JSON.stringify(message.certificates), 'utf8'),
490
+ signature: message.signature,
491
+ protocolID: [2, 'auth message signature'],
492
+ keyID: `${message.nonce} ${peerSession.sessionNonce}`,
493
+ counterparty: message.identityKey
494
+ });
495
+ if (!valid) {
496
+ throw new Error(`Unable to verify certificate response signature for peer: ${message.identityKey}`);
497
+ }
498
+ // Process and verify any certificates received
499
+ await validateCertificates(this.wallet, message, message.requestedCertificates);
500
+ this.onCertificatesReceivedCallbacks.forEach(callback => {
501
+ callback(message.identityKey, message.certificates);
502
+ });
503
+ }
504
+ /**
505
+ * Processes a general message from a peer.
506
+ *
507
+ * @private
508
+ * @param {AuthMessage} message - The incoming general message.
509
+ * @returns {Promise<void>}
510
+ * @throws Will throw an error if nonce verification or signature verification fails.
511
+ */
512
+ async processGeneralMessage(message) {
513
+ const validNonce = await verifyNonce(message.yourNonce, this.wallet);
514
+ if (!validNonce) {
515
+ throw new Error(`Unable to verify nonce for general message from: ${message.identityKey}`);
516
+ }
517
+ const peerSession = this.sessionManager.getSession(message.yourNonce);
518
+ const { valid } = await this.wallet.verifySignature({
519
+ data: message.payload,
520
+ signature: message.signature,
521
+ protocolID: [2, 'auth message signature'],
522
+ keyID: `${message.nonce} ${peerSession.sessionNonce}`,
523
+ counterparty: peerSession.peerIdentityKey
524
+ });
525
+ if (!valid) {
526
+ throw new Error(`Invalid signature in generalMessage from ${peerSession.peerIdentityKey}`);
527
+ }
528
+ this.onGeneralMessageReceivedCallbacks.forEach(callback => {
529
+ callback(message.identityKey, message.payload);
530
+ });
531
+ }
532
+ }
533
+ //# sourceMappingURL=Peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Peer.js","sourceRoot":"","sources":["../../../../src/auth/Peer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Manages sessions for peers, allowing sessions to be added, retrieved, updated, and removed
3
+ * by relevant identifiers (sessionNonce and peerIdentityKey).
4
+ */
5
+ export class SessionManager {
6
+ identifierToSession;
7
+ constructor() {
8
+ this.identifierToSession = new Map();
9
+ }
10
+ /**
11
+ * Adds a session to the manager, associating it with relevant identifiers for retrieval.
12
+ *
13
+ * @param {PeerSession} session - The peer session to add.
14
+ */
15
+ addSession(session) {
16
+ if (!session.sessionNonce && !session.peerIdentityKey) {
17
+ throw new Error('Invalid session: at least one of sessionNonce or peerIdentityKey is required.');
18
+ }
19
+ if (session.sessionNonce) {
20
+ this.identifierToSession.set(session.sessionNonce, session);
21
+ }
22
+ if (session.peerIdentityKey) {
23
+ this.identifierToSession.set(session.peerIdentityKey, session);
24
+ }
25
+ }
26
+ /**
27
+ * Updates a session in the manager, ensuring that all identifiers are correctly associated.
28
+ *
29
+ * @param {PeerSession} session - The peer session to update.
30
+ */
31
+ updateSession(session) {
32
+ this.removeSession(session);
33
+ this.addSession(session);
34
+ }
35
+ /**
36
+ * Retrieves a session based on a given identifier.
37
+ *
38
+ * @param {string} identifier - The identifier for the session (sessionNonce or peerIdentityKey).
39
+ * @returns {PeerSession | undefined} - The matching peer session, or undefined if not found.
40
+ */
41
+ getSession(identifier) {
42
+ return this.identifierToSession.get(identifier);
43
+ }
44
+ /**
45
+ * Removes a session from the manager by clearing all associated identifiers.
46
+ *
47
+ * @param {PeerSession} session - The peer session to remove.
48
+ */
49
+ removeSession(session) {
50
+ this.identifierToSession.delete(session.sessionNonce);
51
+ this.identifierToSession.delete(session.peerIdentityKey);
52
+ }
53
+ /**
54
+ * Checks if a session exists based on a given identifier.
55
+ *
56
+ * @param {string} identifier - The identifier to check.
57
+ * @returns {boolean} - True if the session exists, false otherwise.
58
+ */
59
+ hasSession(identifier) {
60
+ return this.identifierToSession.has(identifier);
61
+ }
62
+ }
63
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../../src/auth/SessionManager.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,cAAc;IACR,mBAAmB,CAA0B;IAE9D;QACE,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC3D,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAE,OAAoB;QAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAA;QAClG,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED;;;;MAIE;IACF,aAAa,CAAE,OAAoB;QACjC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAE,UAAkB;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAE,OAAoB;QACjC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACrD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1D,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAE,UAAkB;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;CACF"}
@@ -1,5 +1,4 @@
1
- import { Utils } from '../primitives/index.js';
2
- import ProtoWallet from '../wallet/ProtoWallet.js';
1
+ import { Utils, ProtoWallet } from '../../../mod.js';
3
2
  /**
4
3
  * Represents an Identity Certificate as per the Wallet interface specifications.
5
4
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Certificate.js","sourceRoot":"","sources":["../../../../../src/auth/certificates/Certificate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAOL,WAAW,EACZ,MAAM,iBAAiB,CAAA;AAExB;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B;;OAEG;IACH,IAAI,CAAc;IAElB;;OAEG;IACH,YAAY,CAAc;IAE1B;;OAEG;IACH,OAAO,CAAW;IAElB;;OAEG;IACH,SAAS,CAAW;IAEpB;;OAEG;IACH,kBAAkB,CAAgB;IAElC;;OAEG;IACH,MAAM,CAAkD;IAExD;;MAEE;IACF,SAAS,CAAY;IAErB;;;;;;;;;;OAUG;IACH,YACE,IAAkB,EAClB,YAA0B,EAC1B,OAAkB,EAClB,SAAoB,EACpB,kBAAkC,EAClC,MAAwD,EACxD,SAAqB;QAErB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,mBAA4B,IAAI;QACpC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA;QAEjC,sCAAsC;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAEvB,8CAA8C;QAC9C,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QACpE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAE/B,gDAAgD;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACvD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAE1B,kDAAkD;QAClD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC3D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAE5B,gDAAgD;QAChD,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACvB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QAE1C,eAAe;QACf,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC1C,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,YAAY,EAAE,CAAC;YACnD,aAAa;YACb,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YACvD,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAC5C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YAE5B,cAAc;YACd,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzD,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAC7C,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC/B,CAAC;QAED,8BAA8B;QAC9B,IAAI,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC3D,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAC5C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9B,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,GAAa;QAC1B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAEpC,YAAY;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAEtC,oBAAoB;QACpB,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACzC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QAEtD,0BAA0B;QAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAEzC,4BAA4B;QAC5B,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAE7C,0BAA0B;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnC,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;QAC1C,MAAM,kBAAkB,GAAG,GAAG,IAAI,IAAI,WAAW,EAAE,CAAA;QAEnD,cAAc;QACd,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;QACxC,MAAM,MAAM,GAAqD,EAAE,CAAA;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,aAAa;YACb,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;YAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACnD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;YAE9C,cAAc;YACd,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;YAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACrD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;YAEhD,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAA;QAChC,CAAC;QAED,4BAA4B;QAC5B,IAAI,SAA6B,CAAA;QACjC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;YAClB,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;YAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACnD,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,IAAI,WAAW,CACpB,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,SAAS,CACV,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAC,mDAAmD;QAE9F,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC;YAC/C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;YAC/C,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,CAAC,CAAC,EAAE,uBAAuB,CAAC;YACxC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAC1C,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,sDAAsD;SACpF,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAC,qCAAqC;QACxE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC;YACpD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,CAAC,CAAC,EAAE,uBAAuB,CAAC;YACxC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;SAC3C,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;CACF"}