@walletmesh/aztec-rpc-wallet 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3JFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxvQkFBb0I7SUFJckQsWUFBWSxTQUEyQjtRQUNyQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVqQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkUsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHdCQUF3QixDQUFDLE1BQStDO1FBQzlFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLE9BQXVCLENBQUM7UUFFN0MsMENBQTBDO1FBQzFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHVCQUF1QixDQUFDLE1BQThDO1FBQzVFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFxQjtRQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDdkcsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQXFCLEVBQUUsTUFBeUI7UUFDM0UsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsT0FBcUIsRUFDckIsTUFBNkM7UUFFN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3RixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUMzQixPQUFxQixFQUNyQixNQUFnRTtRQUVoRSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxxQkFBcUIsQ0FDaEMsT0FBcUIsRUFDckIsTUFBcUU7UUFFckUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUN6QixPQUFxQixFQUNyQixNQUE4RDtRQUU5RCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNFLENBQUM7Q0FDRiJ9