@dynamic-labs-sdk/aleo 1.28.0 → 1.29.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 (58) hide show
  1. package/README.md +20 -0
  2. package/dist/AleoWalletProvider.types.d.ts +7 -0
  3. package/dist/AleoWalletProvider.types.d.ts.map +1 -1
  4. package/dist/InvalidAleoTransactionIdError-CZoNf2SE.esm.js +50 -0
  5. package/dist/InvalidAleoTransactionIdError-CZoNf2SE.esm.js.map +1 -0
  6. package/dist/InvalidAleoTransactionIdError-DRDfoh4x.cjs +61 -0
  7. package/dist/InvalidAleoTransactionIdError-DRDfoh4x.cjs.map +1 -0
  8. package/dist/constants-CI_2oR6o.esm.js +43 -0
  9. package/dist/constants-CI_2oR6o.esm.js.map +1 -0
  10. package/dist/{getNetworkByChainId-XUAi3XmZ.cjs → constants-mzfIFWE0.cjs} +2 -46
  11. package/dist/constants-mzfIFWE0.cjs.map +1 -0
  12. package/dist/errors/AleoInvalidTransactionError/AleoInvalidTransactionError.d.ts +19 -0
  13. package/dist/errors/AleoInvalidTransactionError/AleoInvalidTransactionError.d.ts.map +1 -0
  14. package/dist/errors/AleoInvalidTransactionError/index.d.ts +2 -0
  15. package/dist/errors/AleoInvalidTransactionError/index.d.ts.map +1 -0
  16. package/dist/exports/index.d.ts +1 -0
  17. package/dist/exports/index.d.ts.map +1 -1
  18. package/dist/exports/waas.d.ts +3 -0
  19. package/dist/exports/waas.d.ts.map +1 -0
  20. package/dist/getNetworkByChainId-BSJD5Y-I.cjs +47 -0
  21. package/dist/getNetworkByChainId-BSJD5Y-I.cjs.map +1 -0
  22. package/dist/getNetworkByChainId-CaBRkrc5.esm.js +36 -0
  23. package/dist/getNetworkByChainId-CaBRkrc5.esm.js.map +1 -0
  24. package/dist/index.cjs +13 -31
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.esm.js +4 -23
  27. package/dist/index.esm.js.map +1 -1
  28. package/dist/registerAleoNetworkProviderBuilder-C3YfyKPM.esm.js +153 -0
  29. package/dist/registerAleoNetworkProviderBuilder-C3YfyKPM.esm.js.map +1 -0
  30. package/dist/registerAleoNetworkProviderBuilder-vJHDENQX.cjs +158 -0
  31. package/dist/registerAleoNetworkProviderBuilder-vJHDENQX.cjs.map +1 -0
  32. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  33. package/dist/waas/WaasAleoWalletProvider.types.d.ts +12 -0
  34. package/dist/waas/WaasAleoWalletProvider.types.d.ts.map +1 -0
  35. package/dist/waas/addWaasAleoExtension/addWaasAleoExtension.d.ts +12 -0
  36. package/dist/waas/addWaasAleoExtension/addWaasAleoExtension.d.ts.map +1 -0
  37. package/dist/waas/addWaasAleoExtension/index.d.ts +2 -0
  38. package/dist/waas/addWaasAleoExtension/index.d.ts.map +1 -0
  39. package/dist/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.d.ts +25 -0
  40. package/dist/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.d.ts.map +1 -0
  41. package/dist/waas/utils/createWalletProviderForWaasAleo/index.d.ts +2 -0
  42. package/dist/waas/utils/createWalletProviderForWaasAleo/index.d.ts.map +1 -0
  43. package/dist/waas/utils/inferAleoInputType/index.d.ts +2 -0
  44. package/dist/waas/utils/inferAleoInputType/index.d.ts.map +1 -0
  45. package/dist/waas/utils/inferAleoInputType/inferAleoInputType.d.ts +18 -0
  46. package/dist/waas/utils/inferAleoInputType/inferAleoInputType.d.ts.map +1 -0
  47. package/dist/waas.cjs +217 -0
  48. package/dist/waas.cjs.map +1 -0
  49. package/dist/waas.esm.js +217 -0
  50. package/dist/waas.esm.js.map +1 -0
  51. package/dist/walletStandard.cjs +12 -158
  52. package/dist/walletStandard.cjs.map +1 -1
  53. package/dist/walletStandard.esm.js +4 -150
  54. package/dist/walletStandard.esm.js.map +1 -1
  55. package/package.json +9 -4
  56. package/dist/getNetworkByChainId-BfyC4NXK.esm.js +0 -75
  57. package/dist/getNetworkByChainId-BfyC4NXK.esm.js.map +0 -1
  58. package/dist/getNetworkByChainId-XUAi3XmZ.cjs.map +0 -1
@@ -0,0 +1,12 @@
1
+ import type { WaasProvider } from '@dynamic-labs-sdk/client/waas/core';
2
+ import type { AleoWalletProvider } from '../AleoWalletProvider.types';
3
+ /**
4
+ * WaaS Aleo Wallet Provider type
5
+ * Combines the base WaasProvider surface with Aleo-specific functionality.
6
+ * `signMessage` is provided by the base AleoWalletProvider (which throws
7
+ * `AleoFeatureUnsupportedError` for WaaS wallets) rather than the generic
8
+ * WaasProvider, since Aleo's MPC signer doesn't yet support signing
9
+ * arbitrary messages.
10
+ */
11
+ export type WaasAleoWalletProvider = Omit<WaasProvider, 'signMessage'> & AleoWalletProvider;
12
+ //# sourceMappingURL=WaasAleoWalletProvider.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaasAleoWalletProvider.types.d.ts","sourceRoot":"","sources":["../../src/waas/WaasAleoWalletProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,GACpE,kBAAkB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const WAAS_ALEO_EXTENSION_KEY = "waasAleo";
2
+ /**
3
+ * Adds the Dynamic WaaS (Wallet as a Service) Aleo extension to the Dynamic client.
4
+ *
5
+ * This extension enables embedded wallet functionality for the Aleo blockchain,
6
+ * allowing users to have wallets managed by Dynamic's infrastructure.
7
+ *
8
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
9
+ * @notInstrumented
10
+ */
11
+ export declare const addWaasAleoExtension: (client?: import("@dynamic-labs-sdk/client").DynamicClient) => void;
12
+ //# sourceMappingURL=addWaasAleoExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addWaasAleoExtension.d.ts","sourceRoot":"","sources":["../../../src/waas/addWaasAleoExtension/addWaasAleoExtension.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,iEAAkC,IAkBlE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { addWaasAleoExtension } from './addWaasAleoExtension';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/waas/addWaasAleoExtension/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import type { WaasAleoWalletProvider } from '../../WaasAleoWalletProvider.types';
3
+ type CreateWalletProviderForWaasAleoParams = {
4
+ dynamicClient: DynamicClient;
5
+ };
6
+ /**
7
+ * Builds the Aleo WaaS (Dynamic-managed MPC) wallet provider.
8
+ *
9
+ * Wraps the generic `WaasProvider` (createWalletAccount, exportPrivateKey,
10
+ * backup/recovery, etc. — all reused as-is) and layers Aleo-specific signing
11
+ * on top by reaching for the raw WaaS client via `getWaasClient()`, since
12
+ * Aleo's transaction model (`proveTransaction`, `findOwnedRecords`) doesn't
13
+ * fit the chain-agnostic `signSerializedTransaction` surface. Only a single
14
+ * transition per transaction is supported — batching multiple transitions
15
+ * atomically isn't exposed by the underlying WaaS client yet. `signMessage`
16
+ * and `decrypt` are unsupported: Aleo's MPC signer has no arbitrary-message
17
+ * primitive, and the view key never leaves the WaaS iframe.
18
+ *
19
+ * @param params.dynamicClient - The Dynamic client instance.
20
+ * @returns The Aleo WaaS wallet provider, registered by `addWaasAleoExtension`.
21
+ * @notInstrumented
22
+ */
23
+ export declare const createWalletProviderForWaasAleo: ({ dynamicClient, }: CreateWalletProviderForWaasAleoParams) => WaasAleoWalletProvider;
24
+ export {};
25
+ //# sourceMappingURL=createWalletProviderForWaasAleo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletProviderForWaasAleo.d.ts","sourceRoot":"","sources":["../../../../src/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAmB9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAOjF,KAAK,qCAAqC,GAAG;IAC3C,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,+BAA+B,uBAEzC,qCAAqC,KAAG,sBAoN1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createWalletProviderForWaasAleo } from './createWalletProviderForWaasAleo';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/waas/utils/createWalletProviderForWaasAleo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { inferAleoInputType } from './inferAleoInputType';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/waas/utils/inferAleoInputType/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Best-effort fallback for deriving the Aleo literal type (e.g.
3
+ * `address.public`, `u64.public`) of a public transition input when the
4
+ * caller didn't supply `AleoTransition.inputTypes` explicitly. Used by
5
+ * `createWalletProviderForWaasAleo` to build the `inputTypes` array
6
+ * `proveTransaction` needs. Addresses (`aleo1...`) map to `address.public`;
7
+ * integer literals carry their own type suffix (e.g. `123u64` → `u64.public`).
8
+ * Boolean literals map to `boolean.public`. Anything else — including
9
+ * private/record inputs, which cannot be inferred from a plaintext string
10
+ * alone — falls back to `field.public`; callers with non-public inputs must
11
+ * pass `inputTypes` explicitly.
12
+ *
13
+ * @param input - A single transition input value.
14
+ * @returns The inferred Aleo literal type for the input.
15
+ * @notInstrumented
16
+ */
17
+ export declare const inferAleoInputType: (input: unknown) => string;
18
+ //# sourceMappingURL=inferAleoInputType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferAleoInputType.d.ts","sourceRoot":"","sources":["../../../../src/waas/utils/inferAleoInputType/inferAleoInputType.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,MAoBnD,CAAC"}
package/dist/waas.cjs ADDED
@@ -0,0 +1,217 @@
1
+ const require_constants = require('./constants-mzfIFWE0.cjs');
2
+ const require_InvalidAleoTransactionIdError = require('./InvalidAleoTransactionIdError-DRDfoh4x.cjs');
3
+ const require_registerAleoNetworkProviderBuilder = require('./registerAleoNetworkProviderBuilder-vJHDENQX.cjs');
4
+ let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
5
+ let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
6
+ let _dynamic_labs_sdk_client_waas_core = require("@dynamic-labs-sdk/client/waas/core");
7
+ let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
8
+
9
+ //#region src/waas/utils/inferAleoInputType/inferAleoInputType.ts
10
+ const MAX_INPUT_TYPE_INFERENCE_LENGTH = 256;
11
+ /**
12
+ * Best-effort fallback for deriving the Aleo literal type (e.g.
13
+ * `address.public`, `u64.public`) of a public transition input when the
14
+ * caller didn't supply `AleoTransition.inputTypes` explicitly. Used by
15
+ * `createWalletProviderForWaasAleo` to build the `inputTypes` array
16
+ * `proveTransaction` needs. Addresses (`aleo1...`) map to `address.public`;
17
+ * integer literals carry their own type suffix (e.g. `123u64` → `u64.public`).
18
+ * Boolean literals map to `boolean.public`. Anything else — including
19
+ * private/record inputs, which cannot be inferred from a plaintext string
20
+ * alone — falls back to `field.public`; callers with non-public inputs must
21
+ * pass `inputTypes` explicitly.
22
+ *
23
+ * @param input - A single transition input value.
24
+ * @returns The inferred Aleo literal type for the input.
25
+ * @notInstrumented
26
+ */
27
+ const inferAleoInputType = (input) => {
28
+ const value = String(input);
29
+ if (value.length > MAX_INPUT_TYPE_INFERENCE_LENGTH) return "field.public";
30
+ if (/^aleo1[a-z0-9]{58}$/.test(value)) return "address.public";
31
+ if (value === "true" || value === "false") return "boolean.public";
32
+ if (/^-?\d+$/.test(value)) throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
33
+ code: "aleo_transaction_input_uninferrable",
34
+ reason: "numeric literals must include an Aleo type suffix (e.g. 100u64) unless inputTypes is provided"
35
+ });
36
+ const match = /^-?\d+(u8|u16|u32|u64|u128|i8|i16|i32|i64|i128)$/.exec(value);
37
+ return match ? `${match[1]}.public` : "field.public";
38
+ };
39
+
40
+ //#endregion
41
+ //#region src/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.ts
42
+ const ALEO_CHAIN = "ALEO";
43
+ const MAX_TRANSACTION_INPUT_LENGTH = 1024;
44
+ /**
45
+ * Builds the Aleo WaaS (Dynamic-managed MPC) wallet provider.
46
+ *
47
+ * Wraps the generic `WaasProvider` (createWalletAccount, exportPrivateKey,
48
+ * backup/recovery, etc. — all reused as-is) and layers Aleo-specific signing
49
+ * on top by reaching for the raw WaaS client via `getWaasClient()`, since
50
+ * Aleo's transaction model (`proveTransaction`, `findOwnedRecords`) doesn't
51
+ * fit the chain-agnostic `signSerializedTransaction` surface. Only a single
52
+ * transition per transaction is supported — batching multiple transitions
53
+ * atomically isn't exposed by the underlying WaaS client yet. `signMessage`
54
+ * and `decrypt` are unsupported: Aleo's MPC signer has no arbitrary-message
55
+ * primitive, and the view key never leaves the WaaS iframe.
56
+ *
57
+ * @param params.dynamicClient - The Dynamic client instance.
58
+ * @returns The Aleo WaaS wallet provider, registered by `addWaasAleoExtension`.
59
+ * @notInstrumented
60
+ */
61
+ const createWalletProviderForWaasAleo = ({ dynamicClient }) => {
62
+ const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.EmbeddedWallet;
63
+ const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
64
+ chain: ALEO_CHAIN,
65
+ displayName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName,
66
+ walletProviderType
67
+ });
68
+ const waasProvider = (0, _dynamic_labs_sdk_client_waas_core.createWaasProvider)({
69
+ chain: ALEO_CHAIN,
70
+ sdkClient: dynamicClient
71
+ });
72
+ const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
73
+ client: dynamicClient,
74
+ walletProviderKey: key
75
+ });
76
+ const switchActiveNetwork = async ({ networkId }) => (0, _dynamic_labs_sdk_client_core.switchActiveNetworkInLastKnownRegistry)({
77
+ client: dynamicClient,
78
+ networkId,
79
+ walletProviderKey: key
80
+ });
81
+ const getConnectedAddresses = async () => {
82
+ return { addresses: (0, _dynamic_labs_sdk_client_waas_core.getAllUserWaasAddressesForChain)({ chain: ALEO_CHAIN }, dynamicClient) };
83
+ };
84
+ const signMessage = async () => {
85
+ throw new require_constants.AleoFeatureUnsupportedError({
86
+ featureName: "signMessage",
87
+ walletName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName
88
+ });
89
+ };
90
+ const decrypt = async () => {
91
+ throw new require_constants.AleoFeatureUnsupportedError({
92
+ featureName: "decrypt",
93
+ walletName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName
94
+ });
95
+ };
96
+ const requestRecords = async ({ options, program, walletAccount }) => {
97
+ const { networkId: chainId } = await getActiveNetworkId();
98
+ const waasClient = await waasProvider.getWaasClient();
99
+ const { signature: signedSessionId } = await (0, _dynamic_labs_sdk_client_core.getSignedSessionId)(dynamicClient);
100
+ const { records } = await waasClient.findOwnedRecords({
101
+ accountAddress: walletAccount.address,
102
+ authToken: dynamicClient.token ?? void 0,
103
+ chainId,
104
+ signedSessionId
105
+ });
106
+ const filteredRecords = records.filter((record) => {
107
+ return record?.program_name === program;
108
+ });
109
+ if (options?.plaintext) return { records: filteredRecords.map((record) => {
110
+ return record?.record_plaintext ?? record;
111
+ }) };
112
+ return { records: filteredRecords };
113
+ };
114
+ const requestTransaction = async ({ transaction, walletAccount }) => {
115
+ const [transition, ...rest] = transaction.transitions;
116
+ if (!transition) throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
117
+ code: "aleo_transaction_no_transitions",
118
+ reason: "transaction must contain at least one transition"
119
+ });
120
+ if (rest.length > 0) throw new require_constants.AleoFeatureUnsupportedError({
121
+ featureName: "batch transitions",
122
+ walletName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName
123
+ });
124
+ const { networkId: chainId } = await getActiveNetworkId();
125
+ if (transaction.chainId !== chainId) throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
126
+ code: "aleo_transaction_chain_id_mismatch",
127
+ reason: "transaction chainId does not match the active network"
128
+ });
129
+ if (transaction.address !== walletAccount.address) throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
130
+ code: "aleo_transaction_address_mismatch",
131
+ reason: "transaction address does not match the selected wallet account"
132
+ });
133
+ const inputs = transition.inputs.map((input) => {
134
+ if (input === null || input === void 0) throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
135
+ code: "aleo_transaction_input_invalid",
136
+ reason: "one or more transition inputs are invalid"
137
+ });
138
+ if (typeof input !== "string" && typeof input !== "number" && typeof input !== "boolean" && typeof input !== "bigint") throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
139
+ code: "aleo_transaction_input_invalid",
140
+ reason: "one or more transition inputs are invalid"
141
+ });
142
+ const inputString = String(input);
143
+ if (inputString.length > MAX_TRANSACTION_INPUT_LENGTH) throw new require_InvalidAleoTransactionIdError.AleoInvalidTransactionError({
144
+ code: "aleo_transaction_input_too_long",
145
+ reason: "one or more transition inputs exceed the maximum allowed length"
146
+ });
147
+ return inputString;
148
+ });
149
+ const waasClient = await waasProvider.getWaasClient();
150
+ const { signature: signedSessionId } = await (0, _dynamic_labs_sdk_client_core.getSignedSessionId)(dynamicClient);
151
+ const mfaToken = await (0, _dynamic_labs_sdk_client_core.consumeMfaTokenIfRequiredForAction)({ mfaAction: _dynamic_labs_sdk_api_core.MFAAction.WalletWaasSign }, dynamicClient);
152
+ const { txId } = await waasClient.proveTransaction({
153
+ accountAddress: walletAccount.address,
154
+ authToken: dynamicClient.token ?? void 0,
155
+ broadcast: true,
156
+ chainId,
157
+ functionName: transition.functionName,
158
+ inputs,
159
+ inputTypes: transition.inputTypes ?? inputs.map(inferAleoInputType),
160
+ mfaToken,
161
+ programId: transition.program,
162
+ signedSessionId
163
+ });
164
+ if (!txId) throw new require_InvalidAleoTransactionIdError.InvalidAleoTransactionIdError({ txId: txId ?? "" });
165
+ return { transactionId: txId };
166
+ };
167
+ return {
168
+ ...waasProvider,
169
+ chain: ALEO_CHAIN,
170
+ decrypt,
171
+ getActiveNetworkId,
172
+ getConnectedAddresses,
173
+ groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(_dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName),
174
+ key,
175
+ metadata: {
176
+ displayName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName,
177
+ icon: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.icon
178
+ },
179
+ requestRecords,
180
+ requestTransaction,
181
+ signMessage,
182
+ switchActiveNetwork,
183
+ walletProviderType
184
+ };
185
+ };
186
+
187
+ //#endregion
188
+ //#region src/waas/addWaasAleoExtension/addWaasAleoExtension.ts
189
+ const WAAS_ALEO_EXTENSION_KEY = "waasAleo";
190
+ /**
191
+ * Adds the Dynamic WaaS (Wallet as a Service) Aleo extension to the Dynamic client.
192
+ *
193
+ * This extension enables embedded wallet functionality for the Aleo blockchain,
194
+ * allowing users to have wallets managed by Dynamic's infrastructure.
195
+ *
196
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
197
+ * @notInstrumented
198
+ */
199
+ const addWaasAleoExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
200
+ if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client)) return;
201
+ (0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client);
202
+ require_registerAleoNetworkProviderBuilder.registerAleoNetworkProviderBuilder(client);
203
+ const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
204
+ const walletProvider = createWalletProviderForWaasAleo({ dynamicClient: client });
205
+ walletProviderRegistry.register({
206
+ priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WALLET_SDK,
207
+ walletProvider
208
+ });
209
+ };
210
+
211
+ //#endregion
212
+ //#region src/exports/waas.ts
213
+ (0, _dynamic_labs_sdk_assert_package_version.assertPackageVersion)(require_constants.name, require_constants.version);
214
+
215
+ //#endregion
216
+ exports.addWaasAleoExtension = addWaasAleoExtension;
217
+ //# sourceMappingURL=waas.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waas.cjs","names":["AleoInvalidTransactionError","WalletProviderEnum","DYNAMIC_WAAS_METADATA","getActiveNetworkId: WaasAleoWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasAleoWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasAleoWalletProvider['getConnectedAddresses']","signMessage: WaasAleoWalletProvider['signMessage']","AleoFeatureUnsupportedError","decrypt: WaasAleoWalletProvider['decrypt']","requestRecords: WaasAleoWalletProvider['requestRecords']","requestTransaction: WaasAleoWalletProvider['requestTransaction']","AleoInvalidTransactionError","MFAAction","InvalidAleoTransactionIdError","WalletProviderPriority","packageName","packageVersion"],"sources":["../src/waas/utils/inferAleoInputType/inferAleoInputType.ts","../src/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.ts","../src/waas/addWaasAleoExtension/addWaasAleoExtension.ts","../src/exports/waas.ts"],"sourcesContent":["import { AleoInvalidTransactionError } from '../../../errors/AleoInvalidTransactionError';\n\nconst MAX_INPUT_TYPE_INFERENCE_LENGTH = 256;\n\n/**\n * Best-effort fallback for deriving the Aleo literal type (e.g.\n * `address.public`, `u64.public`) of a public transition input when the\n * caller didn't supply `AleoTransition.inputTypes` explicitly. Used by\n * `createWalletProviderForWaasAleo` to build the `inputTypes` array\n * `proveTransaction` needs. Addresses (`aleo1...`) map to `address.public`;\n * integer literals carry their own type suffix (e.g. `123u64` → `u64.public`).\n * Boolean literals map to `boolean.public`. Anything else — including\n * private/record inputs, which cannot be inferred from a plaintext string\n * alone — falls back to `field.public`; callers with non-public inputs must\n * pass `inputTypes` explicitly.\n *\n * @param input - A single transition input value.\n * @returns The inferred Aleo literal type for the input.\n * @notInstrumented\n */\nexport const inferAleoInputType = (input: unknown): string => {\n const value = String(input);\n\n if (value.length > MAX_INPUT_TYPE_INFERENCE_LENGTH) return 'field.public';\n\n if (/^aleo1[a-z0-9]{58}$/.test(value)) return 'address.public';\n\n if (value === 'true' || value === 'false') return 'boolean.public';\n\n if (/^-?\\d+$/.test(value)) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_uninferrable',\n reason:\n 'numeric literals must include an Aleo type suffix (e.g. 100u64) unless inputTypes is provided',\n });\n }\n\n const match = /^-?\\d+(u8|u16|u32|u64|u128|i8|i16|i32|i64|i128)$/.exec(value);\n\n return match ? `${match[1]}.public` : 'field.public';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n consumeMfaTokenIfRequiredForAction,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getSignedSessionId,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n DYNAMIC_WAAS_METADATA,\n createWaasProvider,\n getAllUserWaasAddressesForChain,\n} from '@dynamic-labs-sdk/client/waas/core';\nimport { MFAAction, WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport { AleoFeatureUnsupportedError } from '../../../errors/AleoFeatureUnsupportedError';\nimport { AleoInvalidTransactionError } from '../../../errors/AleoInvalidTransactionError';\nimport { InvalidAleoTransactionIdError } from '../../../errors/InvalidAleoTransactionIdError';\nimport type { WaasAleoWalletProvider } from '../../WaasAleoWalletProvider.types';\nimport { inferAleoInputType } from '../inferAleoInputType';\n\nconst ALEO_CHAIN = 'ALEO' as const;\n\nconst MAX_TRANSACTION_INPUT_LENGTH = 1024;\n\ntype CreateWalletProviderForWaasAleoParams = {\n dynamicClient: DynamicClient;\n};\n\n/**\n * Builds the Aleo WaaS (Dynamic-managed MPC) wallet provider.\n *\n * Wraps the generic `WaasProvider` (createWalletAccount, exportPrivateKey,\n * backup/recovery, etc. — all reused as-is) and layers Aleo-specific signing\n * on top by reaching for the raw WaaS client via `getWaasClient()`, since\n * Aleo's transaction model (`proveTransaction`, `findOwnedRecords`) doesn't\n * fit the chain-agnostic `signSerializedTransaction` surface. Only a single\n * transition per transaction is supported — batching multiple transitions\n * atomically isn't exposed by the underlying WaaS client yet. `signMessage`\n * and `decrypt` are unsupported: Aleo's MPC signer has no arbitrary-message\n * primitive, and the view key never leaves the WaaS iframe.\n *\n * @param params.dynamicClient - The Dynamic client instance.\n * @returns The Aleo WaaS wallet provider, registered by `addWaasAleoExtension`.\n * @notInstrumented\n */\nexport const createWalletProviderForWaasAleo = ({\n dynamicClient,\n}: CreateWalletProviderForWaasAleoParams): WaasAleoWalletProvider => {\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain: ALEO_CHAIN,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({\n chain: ALEO_CHAIN,\n sdkClient: dynamicClient,\n });\n\n const getActiveNetworkId: WaasAleoWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasAleoWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasAleoWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasAleoAddresses = getAllUserWaasAddressesForChain(\n { chain: ALEO_CHAIN },\n dynamicClient\n );\n\n return {\n addresses: waasAleoAddresses,\n };\n };\n\n const signMessage: WaasAleoWalletProvider['signMessage'] = async () => {\n throw new AleoFeatureUnsupportedError({\n featureName: 'signMessage',\n walletName: DYNAMIC_WAAS_METADATA.displayName,\n });\n };\n\n const decrypt: WaasAleoWalletProvider['decrypt'] = async () => {\n throw new AleoFeatureUnsupportedError({\n featureName: 'decrypt',\n walletName: DYNAMIC_WAAS_METADATA.displayName,\n });\n };\n\n const requestRecords: WaasAleoWalletProvider['requestRecords'] = async ({\n options,\n program,\n walletAccount,\n }) => {\n const { networkId: chainId } = await getActiveNetworkId();\n\n const waasClient = await waasProvider.getWaasClient();\n\n const { signature: signedSessionId } = await getSignedSessionId(\n dynamicClient\n );\n\n const { records } = await waasClient.findOwnedRecords({\n accountAddress: walletAccount.address,\n authToken: dynamicClient.token ?? undefined,\n chainId,\n signedSessionId,\n });\n\n const filteredRecords = records.filter((record) => {\n const typedRecord = record as { program_name?: unknown } | undefined;\n return typedRecord?.program_name === program;\n });\n\n if (options?.plaintext) {\n return {\n records: filteredRecords.map((record) => {\n const typedRecord = record as\n | { record_plaintext?: unknown }\n | undefined;\n return typedRecord?.record_plaintext ?? record;\n }),\n };\n }\n\n return { records: filteredRecords };\n };\n\n const requestTransaction: WaasAleoWalletProvider['requestTransaction'] =\n async ({ transaction, walletAccount }) => {\n const [transition, ...rest] = transaction.transitions;\n\n if (!transition) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_no_transitions',\n reason: 'transaction must contain at least one transition',\n });\n }\n\n if (rest.length > 0) {\n throw new AleoFeatureUnsupportedError({\n featureName: 'batch transitions',\n walletName: DYNAMIC_WAAS_METADATA.displayName,\n });\n }\n\n const { networkId: chainId } = await getActiveNetworkId();\n\n if (transaction.chainId !== chainId) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_chain_id_mismatch',\n reason: 'transaction chainId does not match the active network',\n });\n }\n\n if (transaction.address !== walletAccount.address) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_address_mismatch',\n reason: 'transaction address does not match the selected wallet account',\n });\n }\n\n // The WaaS proving flow does not accept fee or privateFee; fees are\n // covered by Feemaster sponsorship, so those fields are intentionally\n // not forwarded.\n const inputs = transition.inputs.map((input) => {\n if (input === null || input === undefined) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_invalid',\n reason: 'one or more transition inputs are invalid',\n });\n }\n\n if (\n typeof input !== 'string' &&\n typeof input !== 'number' &&\n typeof input !== 'boolean' &&\n typeof input !== 'bigint'\n ) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_invalid',\n reason: 'one or more transition inputs are invalid',\n });\n }\n\n const inputString = String(input);\n\n if (inputString.length > MAX_TRANSACTION_INPUT_LENGTH) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_too_long',\n reason:\n 'one or more transition inputs exceed the maximum allowed length',\n });\n }\n\n return inputString;\n });\n\n const waasClient = await waasProvider.getWaasClient();\n\n const { signature: signedSessionId } = await getSignedSessionId(\n dynamicClient\n );\n const mfaToken = await consumeMfaTokenIfRequiredForAction(\n { mfaAction: MFAAction.WalletWaasSign },\n dynamicClient\n );\n\n const { txId } = await waasClient.proveTransaction({\n accountAddress: walletAccount.address,\n authToken: dynamicClient.token ?? undefined,\n broadcast: true,\n chainId,\n functionName: transition.functionName,\n inputs,\n inputTypes: transition.inputTypes ?? inputs.map(inferAleoInputType),\n mfaToken,\n programId: transition.program,\n signedSessionId,\n });\n\n if (!txId) {\n throw new InvalidAleoTransactionIdError({ txId: txId ?? '' });\n }\n\n return { transactionId: txId };\n };\n\n return {\n ...waasProvider,\n chain: ALEO_CHAIN,\n decrypt,\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(DYNAMIC_WAAS_METADATA.displayName),\n key,\n metadata: {\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n icon: DYNAMIC_WAAS_METADATA.icon,\n },\n requestRecords,\n requestTransaction,\n signMessage,\n switchActiveNetwork,\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerAleoNetworkProviderBuilder } from '../../registerAleoNetworkProviderBuilder';\nimport { createWalletProviderForWaasAleo } from '../utils/createWalletProviderForWaasAleo';\n\nexport const WAAS_ALEO_EXTENSION_KEY = 'waasAleo';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Aleo extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the Aleo blockchain,\n * allowing users to have wallets managed by Dynamic's infrastructure.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addWaasAleoExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client);\n registerAleoNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasAleo({\n dynamicClient: client,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addWaasAleoExtension } from '../waas/addWaasAleoExtension';\n\nexport type { WaasAleoWalletProvider } from '../waas/WaasAleoWalletProvider.types';\n"],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ import { a as name, i as AleoFeatureUnsupportedError, o as version } from "./constants-CI_2oR6o.esm.js";
2
+ import { n as AleoInvalidTransactionError, t as InvalidAleoTransactionIdError } from "./InvalidAleoTransactionIdError-CZoNf2SE.esm.js";
3
+ import { t as registerAleoNetworkProviderBuilder } from "./registerAleoNetworkProviderBuilder-C3YfyKPM.esm.js";
4
+ import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
+ import { WalletProviderPriority, consumeMfaTokenIfRequiredForAction, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getDefaultClient, getSignedSessionId, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
6
+ import { DYNAMIC_WAAS_METADATA, createWaasProvider, getAllUserWaasAddressesForChain } from "@dynamic-labs-sdk/client/waas/core";
7
+ import { MFAAction, WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
8
+
9
+ //#region src/waas/utils/inferAleoInputType/inferAleoInputType.ts
10
+ const MAX_INPUT_TYPE_INFERENCE_LENGTH = 256;
11
+ /**
12
+ * Best-effort fallback for deriving the Aleo literal type (e.g.
13
+ * `address.public`, `u64.public`) of a public transition input when the
14
+ * caller didn't supply `AleoTransition.inputTypes` explicitly. Used by
15
+ * `createWalletProviderForWaasAleo` to build the `inputTypes` array
16
+ * `proveTransaction` needs. Addresses (`aleo1...`) map to `address.public`;
17
+ * integer literals carry their own type suffix (e.g. `123u64` → `u64.public`).
18
+ * Boolean literals map to `boolean.public`. Anything else — including
19
+ * private/record inputs, which cannot be inferred from a plaintext string
20
+ * alone — falls back to `field.public`; callers with non-public inputs must
21
+ * pass `inputTypes` explicitly.
22
+ *
23
+ * @param input - A single transition input value.
24
+ * @returns The inferred Aleo literal type for the input.
25
+ * @notInstrumented
26
+ */
27
+ const inferAleoInputType = (input) => {
28
+ const value = String(input);
29
+ if (value.length > MAX_INPUT_TYPE_INFERENCE_LENGTH) return "field.public";
30
+ if (/^aleo1[a-z0-9]{58}$/.test(value)) return "address.public";
31
+ if (value === "true" || value === "false") return "boolean.public";
32
+ if (/^-?\d+$/.test(value)) throw new AleoInvalidTransactionError({
33
+ code: "aleo_transaction_input_uninferrable",
34
+ reason: "numeric literals must include an Aleo type suffix (e.g. 100u64) unless inputTypes is provided"
35
+ });
36
+ const match = /^-?\d+(u8|u16|u32|u64|u128|i8|i16|i32|i64|i128)$/.exec(value);
37
+ return match ? `${match[1]}.public` : "field.public";
38
+ };
39
+
40
+ //#endregion
41
+ //#region src/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.ts
42
+ const ALEO_CHAIN = "ALEO";
43
+ const MAX_TRANSACTION_INPUT_LENGTH = 1024;
44
+ /**
45
+ * Builds the Aleo WaaS (Dynamic-managed MPC) wallet provider.
46
+ *
47
+ * Wraps the generic `WaasProvider` (createWalletAccount, exportPrivateKey,
48
+ * backup/recovery, etc. — all reused as-is) and layers Aleo-specific signing
49
+ * on top by reaching for the raw WaaS client via `getWaasClient()`, since
50
+ * Aleo's transaction model (`proveTransaction`, `findOwnedRecords`) doesn't
51
+ * fit the chain-agnostic `signSerializedTransaction` surface. Only a single
52
+ * transition per transaction is supported — batching multiple transitions
53
+ * atomically isn't exposed by the underlying WaaS client yet. `signMessage`
54
+ * and `decrypt` are unsupported: Aleo's MPC signer has no arbitrary-message
55
+ * primitive, and the view key never leaves the WaaS iframe.
56
+ *
57
+ * @param params.dynamicClient - The Dynamic client instance.
58
+ * @returns The Aleo WaaS wallet provider, registered by `addWaasAleoExtension`.
59
+ * @notInstrumented
60
+ */
61
+ const createWalletProviderForWaasAleo = ({ dynamicClient }) => {
62
+ const walletProviderType = WalletProviderEnum.EmbeddedWallet;
63
+ const key = formatWalletProviderKey({
64
+ chain: ALEO_CHAIN,
65
+ displayName: DYNAMIC_WAAS_METADATA.displayName,
66
+ walletProviderType
67
+ });
68
+ const waasProvider = createWaasProvider({
69
+ chain: ALEO_CHAIN,
70
+ sdkClient: dynamicClient
71
+ });
72
+ const getActiveNetworkId = async () => getActiveNetworkIdFromLastKnownRegistry({
73
+ client: dynamicClient,
74
+ walletProviderKey: key
75
+ });
76
+ const switchActiveNetwork = async ({ networkId }) => switchActiveNetworkInLastKnownRegistry({
77
+ client: dynamicClient,
78
+ networkId,
79
+ walletProviderKey: key
80
+ });
81
+ const getConnectedAddresses = async () => {
82
+ return { addresses: getAllUserWaasAddressesForChain({ chain: ALEO_CHAIN }, dynamicClient) };
83
+ };
84
+ const signMessage = async () => {
85
+ throw new AleoFeatureUnsupportedError({
86
+ featureName: "signMessage",
87
+ walletName: DYNAMIC_WAAS_METADATA.displayName
88
+ });
89
+ };
90
+ const decrypt = async () => {
91
+ throw new AleoFeatureUnsupportedError({
92
+ featureName: "decrypt",
93
+ walletName: DYNAMIC_WAAS_METADATA.displayName
94
+ });
95
+ };
96
+ const requestRecords = async ({ options, program, walletAccount }) => {
97
+ const { networkId: chainId } = await getActiveNetworkId();
98
+ const waasClient = await waasProvider.getWaasClient();
99
+ const { signature: signedSessionId } = await getSignedSessionId(dynamicClient);
100
+ const { records } = await waasClient.findOwnedRecords({
101
+ accountAddress: walletAccount.address,
102
+ authToken: dynamicClient.token ?? void 0,
103
+ chainId,
104
+ signedSessionId
105
+ });
106
+ const filteredRecords = records.filter((record) => {
107
+ return record?.program_name === program;
108
+ });
109
+ if (options?.plaintext) return { records: filteredRecords.map((record) => {
110
+ return record?.record_plaintext ?? record;
111
+ }) };
112
+ return { records: filteredRecords };
113
+ };
114
+ const requestTransaction = async ({ transaction, walletAccount }) => {
115
+ const [transition, ...rest] = transaction.transitions;
116
+ if (!transition) throw new AleoInvalidTransactionError({
117
+ code: "aleo_transaction_no_transitions",
118
+ reason: "transaction must contain at least one transition"
119
+ });
120
+ if (rest.length > 0) throw new AleoFeatureUnsupportedError({
121
+ featureName: "batch transitions",
122
+ walletName: DYNAMIC_WAAS_METADATA.displayName
123
+ });
124
+ const { networkId: chainId } = await getActiveNetworkId();
125
+ if (transaction.chainId !== chainId) throw new AleoInvalidTransactionError({
126
+ code: "aleo_transaction_chain_id_mismatch",
127
+ reason: "transaction chainId does not match the active network"
128
+ });
129
+ if (transaction.address !== walletAccount.address) throw new AleoInvalidTransactionError({
130
+ code: "aleo_transaction_address_mismatch",
131
+ reason: "transaction address does not match the selected wallet account"
132
+ });
133
+ const inputs = transition.inputs.map((input) => {
134
+ if (input === null || input === void 0) throw new AleoInvalidTransactionError({
135
+ code: "aleo_transaction_input_invalid",
136
+ reason: "one or more transition inputs are invalid"
137
+ });
138
+ if (typeof input !== "string" && typeof input !== "number" && typeof input !== "boolean" && typeof input !== "bigint") throw new AleoInvalidTransactionError({
139
+ code: "aleo_transaction_input_invalid",
140
+ reason: "one or more transition inputs are invalid"
141
+ });
142
+ const inputString = String(input);
143
+ if (inputString.length > MAX_TRANSACTION_INPUT_LENGTH) throw new AleoInvalidTransactionError({
144
+ code: "aleo_transaction_input_too_long",
145
+ reason: "one or more transition inputs exceed the maximum allowed length"
146
+ });
147
+ return inputString;
148
+ });
149
+ const waasClient = await waasProvider.getWaasClient();
150
+ const { signature: signedSessionId } = await getSignedSessionId(dynamicClient);
151
+ const mfaToken = await consumeMfaTokenIfRequiredForAction({ mfaAction: MFAAction.WalletWaasSign }, dynamicClient);
152
+ const { txId } = await waasClient.proveTransaction({
153
+ accountAddress: walletAccount.address,
154
+ authToken: dynamicClient.token ?? void 0,
155
+ broadcast: true,
156
+ chainId,
157
+ functionName: transition.functionName,
158
+ inputs,
159
+ inputTypes: transition.inputTypes ?? inputs.map(inferAleoInputType),
160
+ mfaToken,
161
+ programId: transition.program,
162
+ signedSessionId
163
+ });
164
+ if (!txId) throw new InvalidAleoTransactionIdError({ txId: txId ?? "" });
165
+ return { transactionId: txId };
166
+ };
167
+ return {
168
+ ...waasProvider,
169
+ chain: ALEO_CHAIN,
170
+ decrypt,
171
+ getActiveNetworkId,
172
+ getConnectedAddresses,
173
+ groupKey: formatWalletProviderGroupKey(DYNAMIC_WAAS_METADATA.displayName),
174
+ key,
175
+ metadata: {
176
+ displayName: DYNAMIC_WAAS_METADATA.displayName,
177
+ icon: DYNAMIC_WAAS_METADATA.icon
178
+ },
179
+ requestRecords,
180
+ requestTransaction,
181
+ signMessage,
182
+ switchActiveNetwork,
183
+ walletProviderType
184
+ };
185
+ };
186
+
187
+ //#endregion
188
+ //#region src/waas/addWaasAleoExtension/addWaasAleoExtension.ts
189
+ const WAAS_ALEO_EXTENSION_KEY = "waasAleo";
190
+ /**
191
+ * Adds the Dynamic WaaS (Wallet as a Service) Aleo extension to the Dynamic client.
192
+ *
193
+ * This extension enables embedded wallet functionality for the Aleo blockchain,
194
+ * allowing users to have wallets managed by Dynamic's infrastructure.
195
+ *
196
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
197
+ * @notInstrumented
198
+ */
199
+ const addWaasAleoExtension = (client = getDefaultClient()) => {
200
+ if (hasExtension({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client)) return;
201
+ registerExtension({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client);
202
+ registerAleoNetworkProviderBuilder(client);
203
+ const walletProviderRegistry = getWalletProviderRegistry(client);
204
+ const walletProvider = createWalletProviderForWaasAleo({ dynamicClient: client });
205
+ walletProviderRegistry.register({
206
+ priority: WalletProviderPriority.WALLET_SDK,
207
+ walletProvider
208
+ });
209
+ };
210
+
211
+ //#endregion
212
+ //#region src/exports/waas.ts
213
+ assertPackageVersion(name, version);
214
+
215
+ //#endregion
216
+ export { addWaasAleoExtension };
217
+ //# sourceMappingURL=waas.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waas.esm.js","names":["getActiveNetworkId: WaasAleoWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasAleoWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasAleoWalletProvider['getConnectedAddresses']","signMessage: WaasAleoWalletProvider['signMessage']","decrypt: WaasAleoWalletProvider['decrypt']","requestRecords: WaasAleoWalletProvider['requestRecords']","requestTransaction: WaasAleoWalletProvider['requestTransaction']","packageName","packageVersion"],"sources":["../src/waas/utils/inferAleoInputType/inferAleoInputType.ts","../src/waas/utils/createWalletProviderForWaasAleo/createWalletProviderForWaasAleo.ts","../src/waas/addWaasAleoExtension/addWaasAleoExtension.ts","../src/exports/waas.ts"],"sourcesContent":["import { AleoInvalidTransactionError } from '../../../errors/AleoInvalidTransactionError';\n\nconst MAX_INPUT_TYPE_INFERENCE_LENGTH = 256;\n\n/**\n * Best-effort fallback for deriving the Aleo literal type (e.g.\n * `address.public`, `u64.public`) of a public transition input when the\n * caller didn't supply `AleoTransition.inputTypes` explicitly. Used by\n * `createWalletProviderForWaasAleo` to build the `inputTypes` array\n * `proveTransaction` needs. Addresses (`aleo1...`) map to `address.public`;\n * integer literals carry their own type suffix (e.g. `123u64` → `u64.public`).\n * Boolean literals map to `boolean.public`. Anything else — including\n * private/record inputs, which cannot be inferred from a plaintext string\n * alone — falls back to `field.public`; callers with non-public inputs must\n * pass `inputTypes` explicitly.\n *\n * @param input - A single transition input value.\n * @returns The inferred Aleo literal type for the input.\n * @notInstrumented\n */\nexport const inferAleoInputType = (input: unknown): string => {\n const value = String(input);\n\n if (value.length > MAX_INPUT_TYPE_INFERENCE_LENGTH) return 'field.public';\n\n if (/^aleo1[a-z0-9]{58}$/.test(value)) return 'address.public';\n\n if (value === 'true' || value === 'false') return 'boolean.public';\n\n if (/^-?\\d+$/.test(value)) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_uninferrable',\n reason:\n 'numeric literals must include an Aleo type suffix (e.g. 100u64) unless inputTypes is provided',\n });\n }\n\n const match = /^-?\\d+(u8|u16|u32|u64|u128|i8|i16|i32|i64|i128)$/.exec(value);\n\n return match ? `${match[1]}.public` : 'field.public';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n consumeMfaTokenIfRequiredForAction,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getSignedSessionId,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n DYNAMIC_WAAS_METADATA,\n createWaasProvider,\n getAllUserWaasAddressesForChain,\n} from '@dynamic-labs-sdk/client/waas/core';\nimport { MFAAction, WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport { AleoFeatureUnsupportedError } from '../../../errors/AleoFeatureUnsupportedError';\nimport { AleoInvalidTransactionError } from '../../../errors/AleoInvalidTransactionError';\nimport { InvalidAleoTransactionIdError } from '../../../errors/InvalidAleoTransactionIdError';\nimport type { WaasAleoWalletProvider } from '../../WaasAleoWalletProvider.types';\nimport { inferAleoInputType } from '../inferAleoInputType';\n\nconst ALEO_CHAIN = 'ALEO' as const;\n\nconst MAX_TRANSACTION_INPUT_LENGTH = 1024;\n\ntype CreateWalletProviderForWaasAleoParams = {\n dynamicClient: DynamicClient;\n};\n\n/**\n * Builds the Aleo WaaS (Dynamic-managed MPC) wallet provider.\n *\n * Wraps the generic `WaasProvider` (createWalletAccount, exportPrivateKey,\n * backup/recovery, etc. — all reused as-is) and layers Aleo-specific signing\n * on top by reaching for the raw WaaS client via `getWaasClient()`, since\n * Aleo's transaction model (`proveTransaction`, `findOwnedRecords`) doesn't\n * fit the chain-agnostic `signSerializedTransaction` surface. Only a single\n * transition per transaction is supported — batching multiple transitions\n * atomically isn't exposed by the underlying WaaS client yet. `signMessage`\n * and `decrypt` are unsupported: Aleo's MPC signer has no arbitrary-message\n * primitive, and the view key never leaves the WaaS iframe.\n *\n * @param params.dynamicClient - The Dynamic client instance.\n * @returns The Aleo WaaS wallet provider, registered by `addWaasAleoExtension`.\n * @notInstrumented\n */\nexport const createWalletProviderForWaasAleo = ({\n dynamicClient,\n}: CreateWalletProviderForWaasAleoParams): WaasAleoWalletProvider => {\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain: ALEO_CHAIN,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({\n chain: ALEO_CHAIN,\n sdkClient: dynamicClient,\n });\n\n const getActiveNetworkId: WaasAleoWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasAleoWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasAleoWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasAleoAddresses = getAllUserWaasAddressesForChain(\n { chain: ALEO_CHAIN },\n dynamicClient\n );\n\n return {\n addresses: waasAleoAddresses,\n };\n };\n\n const signMessage: WaasAleoWalletProvider['signMessage'] = async () => {\n throw new AleoFeatureUnsupportedError({\n featureName: 'signMessage',\n walletName: DYNAMIC_WAAS_METADATA.displayName,\n });\n };\n\n const decrypt: WaasAleoWalletProvider['decrypt'] = async () => {\n throw new AleoFeatureUnsupportedError({\n featureName: 'decrypt',\n walletName: DYNAMIC_WAAS_METADATA.displayName,\n });\n };\n\n const requestRecords: WaasAleoWalletProvider['requestRecords'] = async ({\n options,\n program,\n walletAccount,\n }) => {\n const { networkId: chainId } = await getActiveNetworkId();\n\n const waasClient = await waasProvider.getWaasClient();\n\n const { signature: signedSessionId } = await getSignedSessionId(\n dynamicClient\n );\n\n const { records } = await waasClient.findOwnedRecords({\n accountAddress: walletAccount.address,\n authToken: dynamicClient.token ?? undefined,\n chainId,\n signedSessionId,\n });\n\n const filteredRecords = records.filter((record) => {\n const typedRecord = record as { program_name?: unknown } | undefined;\n return typedRecord?.program_name === program;\n });\n\n if (options?.plaintext) {\n return {\n records: filteredRecords.map((record) => {\n const typedRecord = record as\n | { record_plaintext?: unknown }\n | undefined;\n return typedRecord?.record_plaintext ?? record;\n }),\n };\n }\n\n return { records: filteredRecords };\n };\n\n const requestTransaction: WaasAleoWalletProvider['requestTransaction'] =\n async ({ transaction, walletAccount }) => {\n const [transition, ...rest] = transaction.transitions;\n\n if (!transition) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_no_transitions',\n reason: 'transaction must contain at least one transition',\n });\n }\n\n if (rest.length > 0) {\n throw new AleoFeatureUnsupportedError({\n featureName: 'batch transitions',\n walletName: DYNAMIC_WAAS_METADATA.displayName,\n });\n }\n\n const { networkId: chainId } = await getActiveNetworkId();\n\n if (transaction.chainId !== chainId) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_chain_id_mismatch',\n reason: 'transaction chainId does not match the active network',\n });\n }\n\n if (transaction.address !== walletAccount.address) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_address_mismatch',\n reason: 'transaction address does not match the selected wallet account',\n });\n }\n\n // The WaaS proving flow does not accept fee or privateFee; fees are\n // covered by Feemaster sponsorship, so those fields are intentionally\n // not forwarded.\n const inputs = transition.inputs.map((input) => {\n if (input === null || input === undefined) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_invalid',\n reason: 'one or more transition inputs are invalid',\n });\n }\n\n if (\n typeof input !== 'string' &&\n typeof input !== 'number' &&\n typeof input !== 'boolean' &&\n typeof input !== 'bigint'\n ) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_invalid',\n reason: 'one or more transition inputs are invalid',\n });\n }\n\n const inputString = String(input);\n\n if (inputString.length > MAX_TRANSACTION_INPUT_LENGTH) {\n throw new AleoInvalidTransactionError({\n code: 'aleo_transaction_input_too_long',\n reason:\n 'one or more transition inputs exceed the maximum allowed length',\n });\n }\n\n return inputString;\n });\n\n const waasClient = await waasProvider.getWaasClient();\n\n const { signature: signedSessionId } = await getSignedSessionId(\n dynamicClient\n );\n const mfaToken = await consumeMfaTokenIfRequiredForAction(\n { mfaAction: MFAAction.WalletWaasSign },\n dynamicClient\n );\n\n const { txId } = await waasClient.proveTransaction({\n accountAddress: walletAccount.address,\n authToken: dynamicClient.token ?? undefined,\n broadcast: true,\n chainId,\n functionName: transition.functionName,\n inputs,\n inputTypes: transition.inputTypes ?? inputs.map(inferAleoInputType),\n mfaToken,\n programId: transition.program,\n signedSessionId,\n });\n\n if (!txId) {\n throw new InvalidAleoTransactionIdError({ txId: txId ?? '' });\n }\n\n return { transactionId: txId };\n };\n\n return {\n ...waasProvider,\n chain: ALEO_CHAIN,\n decrypt,\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(DYNAMIC_WAAS_METADATA.displayName),\n key,\n metadata: {\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n icon: DYNAMIC_WAAS_METADATA.icon,\n },\n requestRecords,\n requestTransaction,\n signMessage,\n switchActiveNetwork,\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerAleoNetworkProviderBuilder } from '../../registerAleoNetworkProviderBuilder';\nimport { createWalletProviderForWaasAleo } from '../utils/createWalletProviderForWaasAleo';\n\nexport const WAAS_ALEO_EXTENSION_KEY = 'waasAleo';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Aleo extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the Aleo blockchain,\n * allowing users to have wallets managed by Dynamic's infrastructure.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addWaasAleoExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_ALEO_EXTENSION_KEY }, client);\n registerAleoNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasAleo({\n dynamicClient: client,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addWaasAleoExtension } from '../waas/addWaasAleoExtension';\n\nexport type { WaasAleoWalletProvider } from '../waas/WaasAleoWalletProvider.types';\n"],"mappings":"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"}