@walletmesh/aztec-rpc-wallet 0.1.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 (108) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +201 -0
  3. package/README.md +260 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/aztecRemoteWallet.d.ts +73 -0
  6. package/dist/aztecRemoteWallet.d.ts.map +1 -0
  7. package/dist/aztecRemoteWallet.js +354 -0
  8. package/dist/chainProvider.d.ts +56 -0
  9. package/dist/chainProvider.d.ts.map +1 -0
  10. package/dist/chainProvider.js +98 -0
  11. package/dist/contractArtifactCache.d.ts +50 -0
  12. package/dist/contractArtifactCache.d.ts.map +1 -0
  13. package/dist/contractArtifactCache.js +66 -0
  14. package/dist/errors.d.ts +50 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +62 -0
  17. package/dist/handlers/aztecAccountWallet.d.ts +4 -0
  18. package/dist/handlers/aztecAccountWallet.d.ts.map +1 -0
  19. package/dist/handlers/aztecAccountWallet.js +329 -0
  20. package/dist/handlers/transactions.d.ts +21 -0
  21. package/dist/handlers/transactions.d.ts.map +1 -0
  22. package/dist/handlers/transactions.js +90 -0
  23. package/dist/handlers.d.ts +27 -0
  24. package/dist/handlers.d.ts.map +1 -0
  25. package/dist/handlers.js +55 -0
  26. package/dist/index.d.ts +58 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +33 -0
  29. package/dist/provider.d.ts +105 -0
  30. package/dist/provider.d.ts.map +1 -0
  31. package/dist/provider.js +160 -0
  32. package/dist/serializers/account.d.ts +167 -0
  33. package/dist/serializers/account.d.ts.map +1 -0
  34. package/dist/serializers/account.js +245 -0
  35. package/dist/serializers/contract-utils.d.ts +40 -0
  36. package/dist/serializers/contract-utils.d.ts.map +1 -0
  37. package/dist/serializers/contract-utils.js +102 -0
  38. package/dist/serializers/contract.d.ts +168 -0
  39. package/dist/serializers/contract.d.ts.map +1 -0
  40. package/dist/serializers/contract.js +268 -0
  41. package/dist/serializers/core.d.ts +110 -0
  42. package/dist/serializers/core.d.ts.map +1 -0
  43. package/dist/serializers/core.js +130 -0
  44. package/dist/serializers/index.d.ts +28 -0
  45. package/dist/serializers/index.d.ts.map +1 -0
  46. package/dist/serializers/index.js +159 -0
  47. package/dist/serializers/log.d.ts +113 -0
  48. package/dist/serializers/log.d.ts.map +1 -0
  49. package/dist/serializers/log.js +231 -0
  50. package/dist/serializers/note.d.ts +127 -0
  51. package/dist/serializers/note.d.ts.map +1 -0
  52. package/dist/serializers/note.js +182 -0
  53. package/dist/serializers/transaction-utils.d.ts +107 -0
  54. package/dist/serializers/transaction-utils.d.ts.map +1 -0
  55. package/dist/serializers/transaction-utils.js +130 -0
  56. package/dist/serializers/transaction.d.ts +103 -0
  57. package/dist/serializers/transaction.d.ts.map +1 -0
  58. package/dist/serializers/transaction.js +238 -0
  59. package/dist/serializers/types.d.ts +49 -0
  60. package/dist/serializers/types.d.ts.map +1 -0
  61. package/dist/serializers/types.js +22 -0
  62. package/dist/types.d.ts +391 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +8 -0
  65. package/dist/wallet.d.ts +62 -0
  66. package/dist/wallet.d.ts.map +1 -0
  67. package/dist/wallet.js +77 -0
  68. package/package.json +44 -0
  69. package/src/aztecRemoteWallet.test.ts +542 -0
  70. package/src/aztecRemoteWallet.ts +484 -0
  71. package/src/chainProvider.test.ts +322 -0
  72. package/src/chainProvider.ts +122 -0
  73. package/src/contractArtifactCache.test.ts +126 -0
  74. package/src/contractArtifactCache.ts +75 -0
  75. package/src/errors.ts +71 -0
  76. package/src/handlers/aztecAccountWallet.test.ts +720 -0
  77. package/src/handlers/aztecAccountWallet.ts +593 -0
  78. package/src/handlers/transactions.ts +110 -0
  79. package/src/handlers.test.ts +270 -0
  80. package/src/handlers.ts +70 -0
  81. package/src/index.test.ts +23 -0
  82. package/src/index.ts +64 -0
  83. package/src/provider.test.ts +276 -0
  84. package/src/provider.ts +189 -0
  85. package/src/serializers/account.test.ts +125 -0
  86. package/src/serializers/account.ts +319 -0
  87. package/src/serializers/contract-utils.ts +104 -0
  88. package/src/serializers/contract.test.ts +162 -0
  89. package/src/serializers/contract.ts +350 -0
  90. package/src/serializers/core.test.ts +56 -0
  91. package/src/serializers/core.ts +141 -0
  92. package/src/serializers/index.test.ts +122 -0
  93. package/src/serializers/index.ts +213 -0
  94. package/src/serializers/log.test.ts +119 -0
  95. package/src/serializers/log.ts +283 -0
  96. package/src/serializers/note.test.ts +100 -0
  97. package/src/serializers/note.ts +227 -0
  98. package/src/serializers/transaction-utils.ts +237 -0
  99. package/src/serializers/transaction.test.ts +153 -0
  100. package/src/serializers/transaction.ts +342 -0
  101. package/src/serializers/types.ts +58 -0
  102. package/src/types.ts +295 -0
  103. package/src/wallet.test.ts +275 -0
  104. package/src/wallet.ts +94 -0
  105. package/tsconfig.build.json +6 -0
  106. package/tsconfig.json +11 -0
  107. package/typedoc.json +15 -0
  108. package/vitest.config.ts +10 -0
@@ -0,0 +1,90 @@
1
+ import { AuthWitness, AztecAddress, Contract, NoFeePaymentMethod, } from '@aztec/aztec.js';
2
+ import { GasSettings } from '@aztec/circuits.js';
3
+ import { AztecWalletError } from '../errors.js';
4
+ /**
5
+ * Handles the 'aztec_sendTransaction' JSON-RPC method.
6
+ * Sends transactions to the Aztec network and returns the transaction hash.
7
+ * @param params - The transaction parameters
8
+ * @param params.functionCalls - Array of function calls to execute
9
+ * @param params.authwits - Optional array of authorization witnesses for the transaction
10
+ * @returns A Promise that resolves to the transaction hash string
11
+ */
12
+ export async function sendTransaction(context, params) {
13
+ try {
14
+ // Setup the execution request without the calls for now
15
+ const executionRequestInit = {
16
+ calls: [],
17
+ authWitnesses: params.authwits?.map(AuthWitness.fromString) ?? [],
18
+ // TODO: Figure out what we should be doing with this fee parameter
19
+ fee: {
20
+ paymentMethod: new NoFeePaymentMethod(),
21
+ gasSettings: GasSettings.default({ maxFeesPerGas: await context.wallet.getCurrentBaseFees() }),
22
+ },
23
+ };
24
+ // Get artifacts and contracts first
25
+ const contractMap = new Map();
26
+ for (const c of params.functionCalls) {
27
+ const contractAddress = AztecAddress.fromString(c.contractAddress);
28
+ if (!contractMap.has(c.contractAddress)) {
29
+ const artifact = await context.contractArtifactCache.getContractArtifact(contractAddress);
30
+ const contract = await Contract.at(contractAddress, artifact, context.wallet);
31
+ contractMap.set(c.contractAddress, { contract, artifact });
32
+ }
33
+ }
34
+ // Now build the execution request
35
+ for (const c of params.functionCalls) {
36
+ // biome-ignore lint/style/noNonNullAssertion: we know the contract is in the map
37
+ const { contract } = contractMap.get(c.contractAddress);
38
+ const functionCall = contract.methods[c.functionName](...c.args);
39
+ executionRequestInit.calls.push(await functionCall.request());
40
+ }
41
+ const txExecutionRequest = await context.wallet.createTxExecutionRequest(executionRequestInit);
42
+ const simulatedTx = await context.wallet.simulateTx(txExecutionRequest, true /* simulatePublic */);
43
+ const txProvingResult = await context.wallet.proveTx(txExecutionRequest, simulatedTx.privateExecutionResult);
44
+ const txHash = await context.wallet.sendTx(txProvingResult.toTx());
45
+ return txHash.toString();
46
+ }
47
+ catch (error) {
48
+ throw new AztecWalletError('unknownInternalError');
49
+ }
50
+ }
51
+ /**
52
+ * Handles the 'aztec_simulateTransaction' JSON-RPC method.
53
+ * Simulates a transaction without submitting it to the network.
54
+ * @param params - The transaction parameters to simulate
55
+ * @param params.contractAddress - The target contract address
56
+ * @param params.functionName - The contract function to call
57
+ * @param params.args - The function arguments
58
+ * @returns A Promise that resolves to the simulation result
59
+ */
60
+ export async function simulateTransaction(context, params) {
61
+ try {
62
+ const { contractAddress, functionName, args } = params;
63
+ const addr = AztecAddress.fromString(contractAddress);
64
+ const artifact = await context.contractArtifactCache.getContractArtifact(addr);
65
+ const contract = await Contract.at(addr, artifact, context.wallet);
66
+ const result = await contract.methods[functionName](...args).simulate();
67
+ // TODO: Is this sufficient for serializing the result?
68
+ switch (typeof result) {
69
+ case 'string':
70
+ return result;
71
+ case 'bigint':
72
+ return result.toString();
73
+ case 'object':
74
+ if (result instanceof Uint8Array) {
75
+ return Buffer.from(result).toString('hex');
76
+ }
77
+ return result;
78
+ default:
79
+ return result;
80
+ }
81
+ }
82
+ catch (error) {
83
+ if (error instanceof AztecWalletError) {
84
+ throw error;
85
+ }
86
+ console.error('Error simulating transaction:', error);
87
+ throw new AztecWalletError('unknownInternalError', 'aztec_simulateTransaction');
88
+ }
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3RyYW5zYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLFlBQVksRUFDWixRQUFRLEVBQ1Isa0JBQWtCLEdBRW5CLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLE9BQTJCLEVBQzNCLE1BQXlCO0lBRXpCLElBQUksQ0FBQztRQUNILHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUF5QjtZQUNqRCxLQUFLLEVBQUUsRUFBRTtZQUNULGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUNqRSxtRUFBbUU7WUFDbkUsR0FBRyxFQUFFO2dCQUNILGFBQWEsRUFBRSxJQUFJLGtCQUFrQixFQUFFO2dCQUN2QyxXQUFXLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2FBQy9GO1NBQ0YsQ0FBQztRQUVGLG9DQUFvQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBOEQsQ0FBQztRQUMxRixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzFGLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckMsaUZBQWlGO1lBQ2pGLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUUsQ0FBQztZQUN6RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0YsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRyxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsRCxrQkFBa0IsRUFDbEIsV0FBVyxDQUFDLHNCQUFzQixDQUNuQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxPQUEyQixFQUMzQixNQUErQjtJQUUvQixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEUsdURBQXVEO1FBQ3ZELFFBQVEsT0FBTyxNQUFNLEVBQUUsQ0FBQztZQUN0QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNCLEtBQUssUUFBUTtnQkFDWCxJQUFJLE1BQU0sWUFBWSxVQUFVLEVBQUUsQ0FBQztvQkFDakMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxJQUFJLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDbEYsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @module handlers
3
+ *
4
+ * This module provides the core RPC method handling logic for the Aztec wallet.
5
+ * It routes incoming RPC requests to appropriate specialized handlers based on the method type.
6
+ *
7
+ * The handlers are organized into categories:
8
+ * - Base wallet methods (connect, getAccount, etc.)
9
+ * - Account wallet methods (chain operations, contract management, etc.)
10
+ * - Transaction methods (send, simulate)
11
+ *
12
+ * Each method handler validates inputs, performs the requested operation through the wallet,
13
+ * and returns properly formatted responses.
14
+ */
15
+ import type { AztecWalletMethodMap } from './types.js';
16
+ import { type AztecWalletContext } from './types.js';
17
+ /**
18
+ * Main handler function that routes RPC method calls to appropriate specialized handlers.
19
+ *
20
+ * @param context - The wallet context containing PXE and wallet instances
21
+ * @param method - The RPC method being called
22
+ * @param params - Parameters passed to the method
23
+ * @returns Result from the method handler
24
+ * @throws {AztecWalletError} If method not supported or handler fails
25
+ */
26
+ export declare function handler<M extends keyof AztecWalletMethodMap>(context: AztecWalletContext, method: M, params: AztecWalletMethodMap[M]['params']): Promise<AztecWalletMethodMap[M]['result']>;
27
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,KAAK,kBAAkB,EAAuB,MAAM,YAAY,CAAC;AAK1E;;;;;;;;GAQG;AAEH,wBAAsB,OAAO,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAChE,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GACxC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAkC5C"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @module handlers
3
+ *
4
+ * This module provides the core RPC method handling logic for the Aztec wallet.
5
+ * It routes incoming RPC requests to appropriate specialized handlers based on the method type.
6
+ *
7
+ * The handlers are organized into categories:
8
+ * - Base wallet methods (connect, getAccount, etc.)
9
+ * - Account wallet methods (chain operations, contract management, etc.)
10
+ * - Transaction methods (send, simulate)
11
+ *
12
+ * Each method handler validates inputs, performs the requested operation through the wallet,
13
+ * and returns properly formatted responses.
14
+ */
15
+ import { BASE_WALLET_METHODS } from './types.js';
16
+ import { AztecWalletError } from './errors.js';
17
+ import { sendTransaction, simulateTransaction } from './handlers/transactions.js';
18
+ import { aztecWalletHandler, AZTEC_WALLET_METHODS } from './handlers/aztecAccountWallet.js';
19
+ /**
20
+ * Main handler function that routes RPC method calls to appropriate specialized handlers.
21
+ *
22
+ * @param context - The wallet context containing PXE and wallet instances
23
+ * @param method - The RPC method being called
24
+ * @param params - Parameters passed to the method
25
+ * @returns Result from the method handler
26
+ * @throws {AztecWalletError} If method not supported or handler fails
27
+ */
28
+ export async function handler(context, method, params) {
29
+ if (AZTEC_WALLET_METHODS.includes(method)) {
30
+ return aztecWalletHandler(context, method, params);
31
+ }
32
+ switch (method) {
33
+ // Base wallet methods
34
+ case 'wm_getSupportedMethods': {
35
+ // Return combined list of supported methods from all handlers
36
+ return [...BASE_WALLET_METHODS, ...AZTEC_WALLET_METHODS];
37
+ }
38
+ case 'aztec_connect': {
39
+ // Basic connection validation
40
+ // Note: Main connection logic handled by provider
41
+ return true;
42
+ }
43
+ // Core wallet methods
44
+ case 'aztec_getAccount':
45
+ return (await context.wallet.getAddress()).toString();
46
+ // Transaction methods
47
+ case 'aztec_sendTransaction':
48
+ return await sendTransaction(context, params);
49
+ case 'aztec_simulateTransaction':
50
+ return await simulateTransaction(context, params);
51
+ default:
52
+ throw new AztecWalletError('invalidRequest', `Method not supported: ${String(method)}`);
53
+ }
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUdILE9BQU8sRUFBMkIsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU1Rjs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUMzQixPQUEyQixFQUMzQixNQUFTLEVBQ1QsTUFBeUM7SUFFekMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixzQkFBc0I7UUFDdEIsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDOUIsOERBQThEO1lBQzlELE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsb0JBQW9CLENBQWEsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLDhCQUE4QjtZQUM5QixrREFBa0Q7WUFDbEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0Qsc0JBQXNCO1FBQ3RCLEtBQUssa0JBQWtCO1lBQ3JCLE9BQU8sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV4RCxzQkFBc0I7UUFDdEIsS0FBSyx1QkFBdUI7WUFDMUIsT0FBTyxNQUFNLGVBQWUsQ0FDMUIsT0FBTyxFQUNQLE1BQWlFLENBQ2xFLENBQUM7UUFDSixLQUFLLDJCQUEyQjtZQUM5QixPQUFPLE1BQU0sbUJBQW1CLENBQzlCLE9BQU8sRUFDUCxNQUFxRSxDQUN0RSxDQUFDO1FBRUo7WUFDRSxNQUFNLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUseUJBQXlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @module @walletmesh/aztec-rpc-wallet
3
+ *
4
+ * This module provides a JSON-RPC implementation for interacting with Aztec Network.
5
+ * It enables communication between dApps and wallets through a standardized interface.
6
+ */
7
+ /**
8
+ * Provider class for dApps to interact with Aztec wallets
9
+ * @see AztecProvider
10
+ */
11
+ export { AztecProvider } from './provider.js';
12
+ /**
13
+ * Minimal provider for direct interaction with an Aztec chain wallet
14
+ * @see AztecChainProvider
15
+ */
16
+ export { AztecChainProvider } from './chainProvider.js';
17
+ /**
18
+ * Wallet implementation that handles RPC requests from dApps
19
+ * @see AztecChainWallet
20
+ */
21
+ export { AztecChainWallet } from './wallet.js';
22
+ export { AztecChainWalletMiddleware } from './types.js';
23
+ /**
24
+ * Cache for contract artifacts
25
+ * @see ContractArtifactCache
26
+ */
27
+ export { ContractArtifactCache } from './contractArtifactCache.js';
28
+ /**
29
+ * Error handling utilities for RPC communication
30
+ * @see AztecWalletError
31
+ * @see AztecWalletErrorMap
32
+ */
33
+ export { AztecWalletError, AztecWalletErrorMap } from './errors.js';
34
+ /**
35
+ * Type definitions for RPC interfaces
36
+ */
37
+ export type {
38
+ /** Chain identifier type */
39
+ AztecChainId,
40
+ /** Context passed through RPC middleware */
41
+ AztecWalletContext,
42
+ /** Event map for wallet events */
43
+ AztecWalletEventMap,
44
+ /** Base method map for core wallet functionality */
45
+ AztecWalletBaseMethodMap,
46
+ /** Complete method map including all Aztec methods */
47
+ AztecWalletMethodMap,
48
+ /** Middleware type for processing RPC requests */
49
+ AztecWalletMiddleware,
50
+ /** Router client type for wallet mesh integration */
51
+ AztecWalletRouterClient,
52
+ /** Handler type for wallet methods */
53
+ AztecWalletMethodHandler,
54
+ /** Type for contract function calls */
55
+ TransactionFunctionCall,
56
+ /** Parameters for transaction requests */
57
+ TransactionParams, } from './types.js';
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpE;;GAEG;AACH,YAAY;AACV,4BAA4B;AAC5B,YAAY;AACZ,4CAA4C;AAC5C,kBAAkB;AAClB,kCAAkC;AAClC,mBAAmB;AACnB,oDAAoD;AACpD,wBAAwB;AACxB,sDAAsD;AACtD,oBAAoB;AACpB,kDAAkD;AAClD,qBAAqB;AACrB,qDAAqD;AACrD,uBAAuB;AACvB,sCAAsC;AACtC,wBAAwB;AACxB,uCAAuC;AACvC,uBAAuB;AACvB,0CAA0C;AAC1C,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @module @walletmesh/aztec-rpc-wallet
3
+ *
4
+ * This module provides a JSON-RPC implementation for interacting with Aztec Network.
5
+ * It enables communication between dApps and wallets through a standardized interface.
6
+ */
7
+ /**
8
+ * Provider class for dApps to interact with Aztec wallets
9
+ * @see AztecProvider
10
+ */
11
+ export { AztecProvider } from './provider.js';
12
+ /**
13
+ * Minimal provider for direct interaction with an Aztec chain wallet
14
+ * @see AztecChainProvider
15
+ */
16
+ export { AztecChainProvider } from './chainProvider.js';
17
+ /**
18
+ * Wallet implementation that handles RPC requests from dApps
19
+ * @see AztecChainWallet
20
+ */
21
+ export { AztecChainWallet } from './wallet.js';
22
+ /**
23
+ * Cache for contract artifacts
24
+ * @see ContractArtifactCache
25
+ */
26
+ export { ContractArtifactCache } from './contractArtifactCache.js';
27
+ /**
28
+ * Error handling utilities for RPC communication
29
+ * @see AztecWalletError
30
+ * @see AztecWalletErrorMap
31
+ */
32
+ export { AztecWalletError, AztecWalletErrorMap } from './errors.js';
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSDs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDOzs7R0FHRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhEOzs7R0FHRztBQUNILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUcvQzs7O0dBR0c7QUFDSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDIn0=
@@ -0,0 +1,105 @@
1
+ import type { JSONRPCTransport } from '@walletmesh/jsonrpc';
2
+ import { WalletRouterProvider } from '@walletmesh/router';
3
+ import type { AztecChainId, AztecWalletMethodMap, TransactionParams } from './types.js';
4
+ /**
5
+ * Provider for interacting with multiple Aztec chains through WalletMesh router.
6
+ *
7
+ * This class implements the client-side interface for dApps to communicate with Aztec wallets.
8
+ * It handles:
9
+ * - Connection management for multiple chains
10
+ * - Session tracking
11
+ * - Method calls with proper context
12
+ * - Event handling for wallet state changes
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Create provider with transport
17
+ * const provider = new AztecProvider(transport);
18
+ *
19
+ * // Connect to chains
20
+ * await provider.connect(['aztec:testnet', 'aztec:devnet']);
21
+ *
22
+ * // Single operation using convenience method
23
+ * const address = await provider.getAccount('aztec:testnet');
24
+ *
25
+ * // Single operation using chain builder
26
+ * const txHash = await provider.chain('aztec:testnet')
27
+ * .call('aztec_sendTransaction', {
28
+ * functionCalls: [{
29
+ * contractAddress: "0x...",
30
+ * functionName: "transfer",
31
+ * args: [recipient, amount]
32
+ * }]
33
+ * })
34
+ * .execute();
35
+ *
36
+ * // Multiple operations in one call
37
+ * const [account, contracts, blockNumber] = await provider
38
+ * .chain('aztec:testnet')
39
+ * .call('aztec_getAccount')
40
+ * .call('aztec_getContracts')
41
+ * .call('aztec_getBlockNumber')
42
+ * .execute();
43
+ * ```
44
+ */
45
+ export declare class AztecProvider extends WalletRouterProvider {
46
+ private connectedChains;
47
+ private requestedChains;
48
+ constructor(transport: JSONRPCTransport);
49
+ /**
50
+ * Handles wallet state change events from the router.
51
+ * Updates the set of connected chains based on account availability.
52
+ * @param params - Event parameters containing chain ID and changes
53
+ */
54
+ private handleWalletStateChanged;
55
+ /**
56
+ * Handles session termination events from the router.
57
+ * Cleans up session state and connected chains.
58
+ * @param params - Event parameters containing session ID
59
+ */
60
+ private handleSessionTerminated;
61
+ /**
62
+ * Gets the list of currently connected chain IDs.
63
+ * @returns Array of connected chain IDs
64
+ */
65
+ getSupportedChains(): AztecChainId[];
66
+ getAccount(chainId: AztecChainId): Promise<string>;
67
+ /**
68
+ * Sends a transaction to the specified chain.
69
+ * @param chainId - ID of the chain to send transaction to
70
+ * @param params - Transaction parameters including function calls and optional auth witnesses
71
+ * @returns Transaction hash
72
+ * @throws {AztecWalletError} If transaction fails or response invalid
73
+ */
74
+ sendTransaction(chainId: AztecChainId, params: TransactionParams): Promise<string>;
75
+ /**
76
+ * Simulates a transaction without submitting it.
77
+ * @param chainId - ID of the chain to simulate on
78
+ * @param params - Transaction parameters to simulate
79
+ * @returns Simulation result
80
+ * @throws {AztecWalletError} If simulation fails
81
+ */
82
+ simulateTransaction(chainId: AztecChainId, params: TransactionParams['functionCalls'][0]): Promise<unknown>;
83
+ /**
84
+ * Registers a contract instance with the wallet.
85
+ * @param chainId - ID of the chain where contract is deployed
86
+ * @param params - Contract registration parameters
87
+ * @throws {AztecWalletError} If registration fails
88
+ */
89
+ registerContract(chainId: AztecChainId, params: AztecWalletMethodMap['aztec_registerContract']['params']): Promise<void>;
90
+ /**
91
+ * Registers a contract class with the wallet.
92
+ * @param chainId - ID of the chain to register on
93
+ * @param params - Contract class registration parameters
94
+ * @throws {AztecWalletError} If registration fails
95
+ */
96
+ registerContractClass(chainId: AztecChainId, params: AztecWalletMethodMap['aztec_registerContractClass']['params']): Promise<void>;
97
+ /**
98
+ * Registers a transaction sender with the wallet.
99
+ * @param chainId - ID of the chain to register on
100
+ * @param params - Sender registration parameters
101
+ * @throws {AztecWalletError} If registration fails
102
+ */
103
+ registerSender(chainId: AztecChainId, params: AztecWalletMethodMap['aztec_registerSender']['params']): Promise<void>;
104
+ }
105
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,aAAc,SAAQ,oBAAoB;IACrD,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,eAAe,CAAoB;gBAE/B,SAAS,EAAE,gBAAgB;IAcvC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;;OAGG;IACI,kBAAkB,IAAI,YAAY,EAAE;IAI9B,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ/D;;;;;;OAMG;IACU,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ/F;;;;;;OAMG;IACU,mBAAmB,CAC9B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,OAAO,CAAC;IAQnB;;;;;OAKG;IACU,gBAAgB,CAC3B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACU,qBAAqB,CAChC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,oBAAoB,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACU,cAAc,CACzB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,GAC7D,OAAO,CAAC,IAAI,CAAC;CAGjB"}
@@ -0,0 +1,160 @@
1
+ import { WalletRouterProvider } from '@walletmesh/router';
2
+ import { AztecWalletError, AztecWalletErrorType } from './errors.js';
3
+ /**
4
+ * Provider for interacting with multiple Aztec chains through WalletMesh router.
5
+ *
6
+ * This class implements the client-side interface for dApps to communicate with Aztec wallets.
7
+ * It handles:
8
+ * - Connection management for multiple chains
9
+ * - Session tracking
10
+ * - Method calls with proper context
11
+ * - Event handling for wallet state changes
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Create provider with transport
16
+ * const provider = new AztecProvider(transport);
17
+ *
18
+ * // Connect to chains
19
+ * await provider.connect(['aztec:testnet', 'aztec:devnet']);
20
+ *
21
+ * // Single operation using convenience method
22
+ * const address = await provider.getAccount('aztec:testnet');
23
+ *
24
+ * // Single operation using chain builder
25
+ * const txHash = await provider.chain('aztec:testnet')
26
+ * .call('aztec_sendTransaction', {
27
+ * functionCalls: [{
28
+ * contractAddress: "0x...",
29
+ * functionName: "transfer",
30
+ * args: [recipient, amount]
31
+ * }]
32
+ * })
33
+ * .execute();
34
+ *
35
+ * // Multiple operations in one call
36
+ * const [account, contracts, blockNumber] = await provider
37
+ * .chain('aztec:testnet')
38
+ * .call('aztec_getAccount')
39
+ * .call('aztec_getContracts')
40
+ * .call('aztec_getBlockNumber')
41
+ * .execute();
42
+ * ```
43
+ */
44
+ export class AztecProvider extends WalletRouterProvider {
45
+ constructor(transport) {
46
+ super(transport);
47
+ this.connectedChains = new Set();
48
+ this.requestedChains = new Set();
49
+ // Bind event handlers
50
+ this.handleWalletStateChanged = this.handleWalletStateChanged.bind(this);
51
+ this.handleSessionTerminated = this.handleSessionTerminated.bind(this);
52
+ // Register event handlers
53
+ this.on('wm_walletStateChanged', this.handleWalletStateChanged);
54
+ this.on('wm_sessionTerminated', this.handleSessionTerminated);
55
+ }
56
+ /**
57
+ * Handles wallet state change events from the router.
58
+ * Updates the set of connected chains based on account availability.
59
+ * @param params - Event parameters containing chain ID and changes
60
+ */
61
+ handleWalletStateChanged(params) {
62
+ const { chainId, changes } = params;
63
+ const aztecChainId = chainId;
64
+ // Only handle events for requested chains
65
+ if (this.requestedChains.has(aztecChainId)) {
66
+ if (changes.accounts && changes.accounts.length > 0) {
67
+ this.connectedChains.add(aztecChainId);
68
+ console.log('Chain connected:', aztecChainId);
69
+ }
70
+ else {
71
+ this.connectedChains.delete(aztecChainId);
72
+ console.log('Chain disconnected:', aztecChainId);
73
+ }
74
+ console.log('Connected chains:', Array.from(this.connectedChains));
75
+ }
76
+ }
77
+ /**
78
+ * Handles session termination events from the router.
79
+ * Cleans up session state and connected chains.
80
+ * @param params - Event parameters containing session ID
81
+ */
82
+ handleSessionTerminated(params) {
83
+ const { sessionId } = params;
84
+ if (sessionId === this.sessionId) {
85
+ this.connectedChains.clear();
86
+ this.requestedChains.clear();
87
+ console.log('Session terminated, all chains cleared');
88
+ }
89
+ }
90
+ /**
91
+ * Gets the list of currently connected chain IDs.
92
+ * @returns Array of connected chain IDs
93
+ */
94
+ getSupportedChains() {
95
+ return Array.from(this.connectedChains);
96
+ }
97
+ async getAccount(chainId) {
98
+ const result = await this.chain(chainId).call('aztec_getAccount').execute();
99
+ if (typeof result !== 'string' || !result) {
100
+ throw new AztecWalletError(AztecWalletErrorType.invalidResponse, 'Invalid account address returned');
101
+ }
102
+ return result;
103
+ }
104
+ /**
105
+ * Sends a transaction to the specified chain.
106
+ * @param chainId - ID of the chain to send transaction to
107
+ * @param params - Transaction parameters including function calls and optional auth witnesses
108
+ * @returns Transaction hash
109
+ * @throws {AztecWalletError} If transaction fails or response invalid
110
+ */
111
+ async sendTransaction(chainId, params) {
112
+ const result = await this.chain(chainId).call('aztec_sendTransaction', params).execute();
113
+ if (typeof result !== 'string' || !result) {
114
+ throw new AztecWalletError(AztecWalletErrorType.invalidResponse, 'Invalid transaction hash returned');
115
+ }
116
+ return result;
117
+ }
118
+ /**
119
+ * Simulates a transaction without submitting it.
120
+ * @param chainId - ID of the chain to simulate on
121
+ * @param params - Transaction parameters to simulate
122
+ * @returns Simulation result
123
+ * @throws {AztecWalletError} If simulation fails
124
+ */
125
+ async simulateTransaction(chainId, params) {
126
+ const result = await this.chain(chainId).call('aztec_simulateTransaction', params).execute();
127
+ if (result === undefined || result === null) {
128
+ throw new AztecWalletError(AztecWalletErrorType.invalidResponse, 'Invalid simulation result returned');
129
+ }
130
+ return result;
131
+ }
132
+ /**
133
+ * Registers a contract instance with the wallet.
134
+ * @param chainId - ID of the chain where contract is deployed
135
+ * @param params - Contract registration parameters
136
+ * @throws {AztecWalletError} If registration fails
137
+ */
138
+ async registerContract(chainId, params) {
139
+ await this.chain(chainId).call('aztec_registerContract', params).execute();
140
+ }
141
+ /**
142
+ * Registers a contract class with the wallet.
143
+ * @param chainId - ID of the chain to register on
144
+ * @param params - Contract class registration parameters
145
+ * @throws {AztecWalletError} If registration fails
146
+ */
147
+ async registerContractClass(chainId, params) {
148
+ await this.chain(chainId).call('aztec_registerContractClass', params).execute();
149
+ }
150
+ /**
151
+ * Registers a transaction sender with the wallet.
152
+ * @param chainId - ID of the chain to register on
153
+ * @param params - Sender registration parameters
154
+ * @throws {AztecWalletError} If registration fails
155
+ */
156
+ async registerSender(chainId, params) {
157
+ await this.chain(chainId).call('aztec_registerSender', params).execute();
158
+ }
159
+ }
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3JFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxvQkFBb0I7SUFJckQsWUFBWSxTQUEyQjtRQUNyQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVqQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkUsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHdCQUF3QixDQUFDLE1BQStDO1FBQzlFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLE9BQXVCLENBQUM7UUFFN0MsMENBQTBDO1FBQzFDLElBQUksSUFBSSxDQUFDLGVB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