@provablehq/aleo-wallet-adaptor-puzzle 0.1.1-alpha.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.
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # @provablehq/aleo-wallet-adaptor-puzzle
2
+
3
+ Adapter that exposes the Puzzle wallet through the Aleo wallet adaptor interfaces.
4
+
5
+ ## When to use it
6
+
7
+ - Offer Puzzle wallet users a seamless connect experience in your Aleo dApp.
8
+ - Combine Puzzle with other wallets (Leo, Prove Alpha, Fox, Soter) in a single provider instance.
9
+ - Prototype wallet flows that rely on Puzzle’s capabilities without forking adaptor logic.
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pnpm add @provablehq/aleo-wallet-adaptor-puzzle
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```tsx
20
+ import { PuzzleWalletAdapter } from '@provablehq/aleo-wallet-adaptor-puzzle';
21
+
22
+ const wallets = [new PuzzleWalletAdapter()];
23
+ ```
24
+
25
+ ## Related packages
26
+
27
+ - `@provablehq/aleo-wallet-adaptor-core` – required base implementation.
28
+ - `@provablehq/aleo-wallet-adaptor-react` – provider that wires Puzzle into React apps.
29
+ - `@provablehq/aleo-wallet-adaptor-react-ui` – wallet picker UI that automatically lists Puzzle when available.
30
+
31
+ Live demo: https://aleo-dev-toolkit-react-app.vercel.app/
@@ -0,0 +1,146 @@
1
+ import { Network, Account, TransactionOptions, TransactionStatusResponse } from '@provablehq/aleo-types';
2
+ import { WalletName, WalletDecryptPermission, WalletReadyState, AleoDeployment } from '@provablehq/aleo-wallet-standard';
3
+ import { BaseAleoWalletAdapter } from '@provablehq/aleo-wallet-adaptor-core';
4
+ import { Network as Network$1 } from '@puzzlehq/sdk-core';
5
+
6
+ /**
7
+ * Puzzle window interface
8
+ */
9
+ interface PuzzleWindow extends Window {
10
+ puzzle?: {
11
+ connected: boolean;
12
+ connect(): Promise<unknown>;
13
+ disconnect(): Promise<void>;
14
+ };
15
+ }
16
+ /**
17
+ * Puzzle wallet adapter configuration
18
+ */
19
+ interface PuzzleWalletAdapterConfig {
20
+ /**
21
+ * Application name
22
+ */
23
+ appName?: string;
24
+ /**
25
+ * Application icon URL
26
+ */
27
+ appIconUrl?: string;
28
+ /**
29
+ * Application description
30
+ */
31
+ appDescription?: string;
32
+ /**
33
+ * Program ID permissions by network
34
+ */
35
+ programIdPermissions?: Record<string, string[]>;
36
+ }
37
+ declare const PUZZLE_NETWORK_MAP: Record<Network, Network$1>;
38
+
39
+ /**
40
+ * Puzzle wallet adapter
41
+ */
42
+ declare class PuzzleWalletAdapter extends BaseAleoWalletAdapter {
43
+ /**
44
+ * The wallet name
45
+ */
46
+ name: WalletName<"Puzzle Wallet">;
47
+ /**
48
+ * The wallet URL
49
+ */
50
+ url: string;
51
+ /**
52
+ * The wallet icon (base64-encoded SVG)
53
+ */
54
+ icon: string;
55
+ /**
56
+ * The window object
57
+ */
58
+ private _window;
59
+ /**
60
+ * App name
61
+ */
62
+ private _appName;
63
+ /**
64
+ * App icon URL
65
+ */
66
+ private _appIconUrl?;
67
+ /**
68
+ * App description
69
+ */
70
+ private _appDescription?;
71
+ /**
72
+ * Current network
73
+ */
74
+ network: Network;
75
+ /**
76
+ * The wallet's decrypt permission
77
+ */
78
+ decryptPermission: WalletDecryptPermission;
79
+ _readyState: WalletReadyState;
80
+ /**
81
+ * Public key
82
+ */
83
+ private _publicKey;
84
+ /**
85
+ * Create a new Puzzle wallet adapter
86
+ * @param config Adapter configuration
87
+ */
88
+ constructor(config?: PuzzleWalletAdapterConfig);
89
+ /**
90
+ * Check if Puzzle wallet is available
91
+ */
92
+ private _checkAvailability;
93
+ /**
94
+ * Connect to Puzzle wallet
95
+ * @param network The network to connect to
96
+ * @returns The connected account
97
+ */
98
+ connect(network: Network, decryptPermission: WalletDecryptPermission, programs?: string[]): Promise<Account>;
99
+ /**
100
+ * Disconnect from Puzzle wallet
101
+ */
102
+ disconnect(): Promise<void>;
103
+ /**
104
+ * Sign a message with Puzzle wallet
105
+ * @param message The message to sign
106
+ * @returns The signed message
107
+ */
108
+ signMessage(message: Uint8Array): Promise<Uint8Array>;
109
+ decrypt(cipherText: string): Promise<string>;
110
+ /**
111
+ * Execute a transaction with Puzzle wallet
112
+ * @param options Transaction options
113
+ * @returns The executed temporary transaction ID
114
+ */
115
+ executeTransaction(options: TransactionOptions): Promise<{
116
+ transactionId: string;
117
+ }>;
118
+ /**
119
+ * Get transaction status
120
+ * @param transactionId The transaction ID
121
+ * @returns The transaction status
122
+ */
123
+ transactionStatus(transactionId: string): Promise<TransactionStatusResponse>;
124
+ /**
125
+ * Request records from Leo wallet
126
+ * @param program The program to request records from
127
+ * @param includePlaintext Whether to include plaintext on each record
128
+ * @returns The records
129
+ */
130
+ requestRecords(program: string): Promise<unknown[]>;
131
+ /**
132
+ * Switch the network
133
+ * @param network The network to switch to
134
+ */
135
+ switchNetwork(_network: Network): Promise<void>;
136
+ /**
137
+ * Execute a deployment
138
+ * @param deployment The deployment to execute
139
+ * @returns The executed transaction ID
140
+ */
141
+ executeDeployment(_deployment: AleoDeployment): Promise<{
142
+ transactionId: string;
143
+ }>;
144
+ }
145
+
146
+ export { PUZZLE_NETWORK_MAP, PuzzleWalletAdapter, type PuzzleWalletAdapterConfig, type PuzzleWindow };
@@ -0,0 +1,146 @@
1
+ import { Network, Account, TransactionOptions, TransactionStatusResponse } from '@provablehq/aleo-types';
2
+ import { WalletName, WalletDecryptPermission, WalletReadyState, AleoDeployment } from '@provablehq/aleo-wallet-standard';
3
+ import { BaseAleoWalletAdapter } from '@provablehq/aleo-wallet-adaptor-core';
4
+ import { Network as Network$1 } from '@puzzlehq/sdk-core';
5
+
6
+ /**
7
+ * Puzzle window interface
8
+ */
9
+ interface PuzzleWindow extends Window {
10
+ puzzle?: {
11
+ connected: boolean;
12
+ connect(): Promise<unknown>;
13
+ disconnect(): Promise<void>;
14
+ };
15
+ }
16
+ /**
17
+ * Puzzle wallet adapter configuration
18
+ */
19
+ interface PuzzleWalletAdapterConfig {
20
+ /**
21
+ * Application name
22
+ */
23
+ appName?: string;
24
+ /**
25
+ * Application icon URL
26
+ */
27
+ appIconUrl?: string;
28
+ /**
29
+ * Application description
30
+ */
31
+ appDescription?: string;
32
+ /**
33
+ * Program ID permissions by network
34
+ */
35
+ programIdPermissions?: Record<string, string[]>;
36
+ }
37
+ declare const PUZZLE_NETWORK_MAP: Record<Network, Network$1>;
38
+
39
+ /**
40
+ * Puzzle wallet adapter
41
+ */
42
+ declare class PuzzleWalletAdapter extends BaseAleoWalletAdapter {
43
+ /**
44
+ * The wallet name
45
+ */
46
+ name: WalletName<"Puzzle Wallet">;
47
+ /**
48
+ * The wallet URL
49
+ */
50
+ url: string;
51
+ /**
52
+ * The wallet icon (base64-encoded SVG)
53
+ */
54
+ icon: string;
55
+ /**
56
+ * The window object
57
+ */
58
+ private _window;
59
+ /**
60
+ * App name
61
+ */
62
+ private _appName;
63
+ /**
64
+ * App icon URL
65
+ */
66
+ private _appIconUrl?;
67
+ /**
68
+ * App description
69
+ */
70
+ private _appDescription?;
71
+ /**
72
+ * Current network
73
+ */
74
+ network: Network;
75
+ /**
76
+ * The wallet's decrypt permission
77
+ */
78
+ decryptPermission: WalletDecryptPermission;
79
+ _readyState: WalletReadyState;
80
+ /**
81
+ * Public key
82
+ */
83
+ private _publicKey;
84
+ /**
85
+ * Create a new Puzzle wallet adapter
86
+ * @param config Adapter configuration
87
+ */
88
+ constructor(config?: PuzzleWalletAdapterConfig);
89
+ /**
90
+ * Check if Puzzle wallet is available
91
+ */
92
+ private _checkAvailability;
93
+ /**
94
+ * Connect to Puzzle wallet
95
+ * @param network The network to connect to
96
+ * @returns The connected account
97
+ */
98
+ connect(network: Network, decryptPermission: WalletDecryptPermission, programs?: string[]): Promise<Account>;
99
+ /**
100
+ * Disconnect from Puzzle wallet
101
+ */
102
+ disconnect(): Promise<void>;
103
+ /**
104
+ * Sign a message with Puzzle wallet
105
+ * @param message The message to sign
106
+ * @returns The signed message
107
+ */
108
+ signMessage(message: Uint8Array): Promise<Uint8Array>;
109
+ decrypt(cipherText: string): Promise<string>;
110
+ /**
111
+ * Execute a transaction with Puzzle wallet
112
+ * @param options Transaction options
113
+ * @returns The executed temporary transaction ID
114
+ */
115
+ executeTransaction(options: TransactionOptions): Promise<{
116
+ transactionId: string;
117
+ }>;
118
+ /**
119
+ * Get transaction status
120
+ * @param transactionId The transaction ID
121
+ * @returns The transaction status
122
+ */
123
+ transactionStatus(transactionId: string): Promise<TransactionStatusResponse>;
124
+ /**
125
+ * Request records from Leo wallet
126
+ * @param program The program to request records from
127
+ * @param includePlaintext Whether to include plaintext on each record
128
+ * @returns The records
129
+ */
130
+ requestRecords(program: string): Promise<unknown[]>;
131
+ /**
132
+ * Switch the network
133
+ * @param network The network to switch to
134
+ */
135
+ switchNetwork(_network: Network): Promise<void>;
136
+ /**
137
+ * Execute a deployment
138
+ * @param deployment The deployment to execute
139
+ * @returns The executed transaction ID
140
+ */
141
+ executeDeployment(_deployment: AleoDeployment): Promise<{
142
+ transactionId: string;
143
+ }>;
144
+ }
145
+
146
+ export { PUZZLE_NETWORK_MAP, PuzzleWalletAdapter, type PuzzleWalletAdapterConfig, type PuzzleWindow };
package/dist/index.js ADDED
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ PUZZLE_NETWORK_MAP: () => PUZZLE_NETWORK_MAP,
24
+ PuzzleWalletAdapter: () => PuzzleWalletAdapter
25
+ });
26
+ module.exports = __toCommonJS(src_exports);
27
+
28
+ // src/PuzzleWalletAdapter.ts
29
+ var import_aleo_types2 = require("@provablehq/aleo-types");
30
+ var import_aleo_wallet_standard = require("@provablehq/aleo-wallet-standard");
31
+ var import_aleo_wallet_adaptor_core = require("@provablehq/aleo-wallet-adaptor-core");
32
+ var import_sdk_core2 = require("@puzzlehq/sdk-core");
33
+
34
+ // src/types.ts
35
+ var import_aleo_types = require("@provablehq/aleo-types");
36
+ var import_sdk_core = require("@puzzlehq/sdk-core");
37
+ var PUZZLE_NETWORK_MAP = {
38
+ [import_aleo_types.Network.MAINNET]: import_sdk_core.Network.AleoMainnet,
39
+ [import_aleo_types.Network.TESTNET3]: import_sdk_core.Network.AleoTestnet,
40
+ [import_aleo_types.Network.CANARY]: import_sdk_core.Network.AleoTestnet
41
+ };
42
+
43
+ // src/icon.ts
44
+ var PuzzleIcon = "data:image/webp;base64,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";
45
+
46
+ // src/PuzzleWalletAdapter.ts
47
+ var PuzzleWalletAdapter = class extends import_aleo_wallet_adaptor_core.BaseAleoWalletAdapter {
48
+ /**
49
+ * Create a new Puzzle wallet adapter
50
+ * @param config Adapter configuration
51
+ */
52
+ constructor(config) {
53
+ super();
54
+ /**
55
+ * The wallet name
56
+ */
57
+ this.name = "Puzzle Wallet";
58
+ /**
59
+ * The wallet URL
60
+ */
61
+ this.url = "https://puzzle.online/wallet";
62
+ /**
63
+ * The wallet icon (base64-encoded SVG)
64
+ */
65
+ this.icon = PuzzleIcon;
66
+ /**
67
+ * Current network
68
+ */
69
+ this.network = import_aleo_types2.Network.TESTNET3;
70
+ /**
71
+ * The wallet's decrypt permission
72
+ */
73
+ this.decryptPermission = import_aleo_wallet_standard.WalletDecryptPermission.NoDecrypt;
74
+ this._readyState = typeof window === "undefined" || typeof document === "undefined" ? import_aleo_wallet_standard.WalletReadyState.UNSUPPORTED : import_aleo_wallet_standard.WalletReadyState.NOT_DETECTED;
75
+ /**
76
+ * Public key
77
+ */
78
+ this._publicKey = "";
79
+ this._appName = config?.appName || "Aleo App";
80
+ this._appIconUrl = config?.appIconUrl;
81
+ this._appDescription = config?.appDescription;
82
+ this._checkAvailability();
83
+ }
84
+ /**
85
+ * Check if Puzzle wallet is available
86
+ */
87
+ _checkAvailability() {
88
+ if (typeof window === "undefined") {
89
+ this.readyState = import_aleo_wallet_standard.WalletReadyState.UNSUPPORTED;
90
+ return;
91
+ }
92
+ this._window = window;
93
+ if (this._window.puzzle) {
94
+ this.readyState = import_aleo_wallet_standard.WalletReadyState.INSTALLED;
95
+ } else {
96
+ const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
97
+ if (isMobile) {
98
+ this.readyState = import_aleo_wallet_standard.WalletReadyState.LOADABLE;
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Connect to Puzzle wallet
104
+ * @param network The network to connect to
105
+ * @returns The connected account
106
+ */
107
+ async connect(network, decryptPermission, programs) {
108
+ try {
109
+ if (this.readyState !== import_aleo_wallet_standard.WalletReadyState.INSTALLED) {
110
+ throw new import_aleo_wallet_adaptor_core.WalletConnectionError("Puzzle Wallet is not available");
111
+ }
112
+ const response = await (0, import_sdk_core2.connect)({
113
+ dAppInfo: {
114
+ name: this._appName,
115
+ description: this._appDescription,
116
+ iconUrl: this._appIconUrl
117
+ },
118
+ permissions: {
119
+ programIds: {
120
+ [PUZZLE_NETWORK_MAP[network]]: programs
121
+ }
122
+ }
123
+ });
124
+ if (!response || typeof response !== "object" || !("connection" in response)) {
125
+ throw new import_aleo_wallet_adaptor_core.WalletConnectionError("Invalid response from wallet");
126
+ }
127
+ this.network = network;
128
+ this.decryptPermission = decryptPermission;
129
+ const address = response.connection?.address;
130
+ if (!address) {
131
+ throw new import_aleo_wallet_adaptor_core.WalletConnectionError("No address returned from wallet");
132
+ }
133
+ this._publicKey = address;
134
+ const account = {
135
+ address: this._publicKey
136
+ };
137
+ this.account = account;
138
+ this.emit("connect", account);
139
+ return account;
140
+ } catch (err) {
141
+ this.emit("error", err instanceof Error ? err : new Error(String(err)));
142
+ throw new import_aleo_wallet_adaptor_core.WalletConnectionError(err instanceof Error ? err.message : "Connection failed");
143
+ }
144
+ }
145
+ /**
146
+ * Disconnect from Puzzle wallet
147
+ */
148
+ async disconnect() {
149
+ try {
150
+ await (0, import_sdk_core2.disconnect)();
151
+ this._publicKey = "";
152
+ this.account = void 0;
153
+ this.emit("disconnect");
154
+ } catch (err) {
155
+ this.emit("error", err instanceof Error ? err : new Error(String(err)));
156
+ throw new import_aleo_wallet_adaptor_core.WalletDisconnectionError(
157
+ err instanceof Error ? err.message : "Disconnection failed"
158
+ );
159
+ }
160
+ }
161
+ /**
162
+ * Sign a message with Puzzle wallet
163
+ * @param message The message to sign
164
+ * @returns The signed message
165
+ */
166
+ async signMessage(message) {
167
+ if (!this._publicKey || !this.account) {
168
+ throw new import_aleo_wallet_adaptor_core.WalletNotConnectedError();
169
+ }
170
+ try {
171
+ const signature = await (0, import_sdk_core2.requestSignature)({
172
+ message: message.toString(),
173
+ address: this._publicKey
174
+ });
175
+ return new TextEncoder().encode(signature.signature);
176
+ } catch (error) {
177
+ throw new import_aleo_wallet_adaptor_core.WalletSignMessageError(
178
+ error instanceof Error ? error.message : "Failed to sign message"
179
+ );
180
+ }
181
+ }
182
+ async decrypt(cipherText) {
183
+ if (!this._publicKey || !this.account) {
184
+ throw new import_aleo_wallet_adaptor_core.WalletNotConnectedError();
185
+ }
186
+ switch (this.decryptPermission) {
187
+ case import_aleo_wallet_standard.WalletDecryptPermission.NoDecrypt:
188
+ throw new import_aleo_wallet_adaptor_core.WalletDecryptionNotAllowedError();
189
+ case import_aleo_wallet_standard.WalletDecryptPermission.UponRequest:
190
+ case import_aleo_wallet_adaptor_core.DecryptPermission.AutoDecrypt:
191
+ case import_aleo_wallet_adaptor_core.DecryptPermission.OnChainHistory: {
192
+ try {
193
+ const text = await (0, import_sdk_core2.decrypt)({ ciphertexts: [cipherText] });
194
+ return text.plaintexts[0];
195
+ } catch (error) {
196
+ throw new import_aleo_wallet_adaptor_core.WalletDecryptionError(
197
+ error instanceof Error ? error.message : "Failed to decrypt"
198
+ );
199
+ }
200
+ }
201
+ default:
202
+ throw new import_aleo_wallet_adaptor_core.WalletDecryptionError();
203
+ }
204
+ }
205
+ /**
206
+ * Execute a transaction with Puzzle wallet
207
+ * @param options Transaction options
208
+ * @returns The executed temporary transaction ID
209
+ */
210
+ async executeTransaction(options) {
211
+ if (!this._publicKey || !this.account) {
212
+ throw new import_aleo_wallet_adaptor_core.WalletNotConnectedError();
213
+ }
214
+ if (options.privateFee) {
215
+ throw new import_aleo_wallet_adaptor_core.WalletTransactionError("Private fee is not supported by Puzzle wallet");
216
+ }
217
+ try {
218
+ const fee = options.fee ? options.fee / 1e6 : 1e-3;
219
+ const requestData = {
220
+ type: import_sdk_core2.EventType.Execute,
221
+ programId: options.program,
222
+ functionId: options.function,
223
+ fee,
224
+ inputs: options.inputs,
225
+ address: this._publicKey,
226
+ network: PUZZLE_NETWORK_MAP[this.network]
227
+ };
228
+ const result = await (0, import_sdk_core2.requestCreateEvent)(requestData);
229
+ if (result.error) {
230
+ throw new import_aleo_wallet_adaptor_core.WalletTransactionError(result.error);
231
+ }
232
+ if (!result.eventId) {
233
+ throw new import_aleo_wallet_adaptor_core.WalletTransactionError("Could not create transaction");
234
+ }
235
+ return {
236
+ transactionId: result.eventId
237
+ };
238
+ } catch (error) {
239
+ console.error("Puzzle Wallet executeTransaction error", error);
240
+ if (error instanceof import_aleo_wallet_adaptor_core.WalletError) {
241
+ throw error;
242
+ }
243
+ throw new import_aleo_wallet_adaptor_core.WalletTransactionError(
244
+ error instanceof Error ? error.message : "Failed to execute transaction"
245
+ );
246
+ }
247
+ }
248
+ /**
249
+ * Get transaction status
250
+ * @param transactionId The transaction ID
251
+ * @returns The transaction status
252
+ */
253
+ async transactionStatus(transactionId) {
254
+ if (!this._publicKey || !this.account) {
255
+ throw new import_aleo_wallet_adaptor_core.WalletNotConnectedError();
256
+ }
257
+ try {
258
+ const result = await (0, import_sdk_core2.getEvent)({
259
+ id: transactionId,
260
+ address: this._publicKey,
261
+ network: PUZZLE_NETWORK_MAP[this.network]
262
+ });
263
+ return {
264
+ status: result.event?.status || import_aleo_types2.TransactionStatus.PENDING,
265
+ transactionId: result.event?.transactionId,
266
+ error: result.event?.error
267
+ };
268
+ } catch (error) {
269
+ throw new import_aleo_wallet_adaptor_core.WalletTransactionError(
270
+ error instanceof Error ? error.message : "Failed to get transaction status"
271
+ );
272
+ }
273
+ }
274
+ /**
275
+ * Request records from Leo wallet
276
+ * @param program The program to request records from
277
+ * @param includePlaintext Whether to include plaintext on each record
278
+ * @returns The records
279
+ */
280
+ async requestRecords(program) {
281
+ if (!this._publicKey || !this.account) {
282
+ throw new import_aleo_wallet_adaptor_core.WalletNotConnectedError();
283
+ }
284
+ try {
285
+ const result = await (0, import_sdk_core2.getRecords)({
286
+ filter: {
287
+ programIds: [program],
288
+ status: "All"
289
+ },
290
+ address: this._publicKey,
291
+ network: PUZZLE_NETWORK_MAP[this.network]
292
+ });
293
+ return result?.records || [];
294
+ } catch (error) {
295
+ throw new import_aleo_wallet_adaptor_core.WalletError(error instanceof Error ? error.message : "Failed to request records");
296
+ }
297
+ }
298
+ /**
299
+ * Switch the network
300
+ * @param network The network to switch to
301
+ */
302
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
303
+ async switchNetwork(_network) {
304
+ console.error("Puzzle Wallet does not support switching networks");
305
+ throw new import_aleo_wallet_adaptor_core.MethodNotImplementedError("switchNetwork");
306
+ }
307
+ /**
308
+ * Execute a deployment
309
+ * @param deployment The deployment to execute
310
+ * @returns The executed transaction ID
311
+ */
312
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
313
+ async executeDeployment(_deployment) {
314
+ throw new import_aleo_wallet_adaptor_core.MethodNotImplementedError("executeDeployment");
315
+ }
316
+ };
317
+ // Annotate the CommonJS export names for ESM import in node:
318
+ 0 && (module.exports = {
319
+ PUZZLE_NETWORK_MAP,
320
+ PuzzleWalletAdapter
321
+ });