@aastar/sdk 0.20.1 → 0.20.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aastar/sdk",
3
- "version": "0.20.1",
3
+ "version": "0.20.2",
4
4
  "description": "AAStar SDK - the all-in-one package for Mycelium Network (single bundled package; subpaths preserve the module structure)",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -94,11 +94,11 @@
94
94
  "@aastar/paymaster": "0.20.1",
95
95
  "@aastar/identity": "0.20.1",
96
96
  "@aastar/enduser": "0.20.1",
97
- "@aastar/tokens": "0.20.1",
98
97
  "@aastar/operator": "0.20.1",
99
98
  "@aastar/admin": "0.20.1",
100
- "@aastar/x402": "0.20.1",
101
99
  "@aastar/airaccount": "0.20.1",
100
+ "@aastar/x402": "0.20.1",
101
+ "@aastar/tokens": "0.20.1",
102
102
  "@aastar/channel": "0.20.1"
103
103
  },
104
104
  "scripts": {
@@ -1,281 +0,0 @@
1
- import { getSuperPaymasterMiddleware } from './chunk-MPOMWT2J.js';
2
- import { createAAStarPublicClient, RegistryABI } from './chunk-ZSSNU3UF.js';
3
- import { parseAbi, createPublicClient, http, hashTypedData, hashMessage, hexToBytes, encodeFunctionData } from 'viem';
4
- import { useState, useEffect, useCallback } from 'react';
5
-
6
- var DVT_ABI = parseAbi([
7
- "function registerValidator(bytes)",
8
- "function createProposal(address, uint8, string)",
9
- "function signProposal(uint256, bytes)"
10
- ]);
11
- var DVTClient = class {
12
- static async registerValidator(wallet, dvtAddr, blsPublicKey) {
13
- return wallet.writeContract({
14
- address: dvtAddr,
15
- abi: DVT_ABI,
16
- functionName: "registerValidator",
17
- args: [blsPublicKey],
18
- chain: wallet.chain
19
- });
20
- }
21
- };
22
- function useCreditScore({ chain, rpcUrl, registryAddress, userAddress }) {
23
- const [creditLimit, setCreditLimit] = useState(null);
24
- const [loading, setLoading] = useState(false);
25
- useEffect(() => {
26
- if (!registryAddress || !userAddress || !rpcUrl)
27
- return;
28
- const fetchCredit = async () => {
29
- setLoading(true);
30
- try {
31
- const client = createAAStarPublicClient(rpcUrl, chain);
32
- const limit = await client.readContract({
33
- address: registryAddress,
34
- abi: RegistryABI,
35
- functionName: "getCreditLimit",
36
- args: [userAddress]
37
- });
38
- setCreditLimit(limit);
39
- } catch (e) {
40
- console.error("Failed to fetch credit limit:", e);
41
- setCreditLimit(0n);
42
- } finally {
43
- setLoading(false);
44
- }
45
- };
46
- fetchCredit();
47
- }, [chain, rpcUrl, registryAddress, userAddress]);
48
- return { creditLimit, loading };
49
- }
50
- function useSuperPaymaster(config) {
51
- const [isLoading, setIsLoading] = useState(false);
52
- const [error, setError] = useState(null);
53
- const generatePaymasterAndData = useCallback(async (userOp) => {
54
- setIsLoading(true);
55
- setError(null);
56
- try {
57
- const middleware = getSuperPaymasterMiddleware(config);
58
- const result = await middleware.sponsorUserOperation({ userOperation: userOp });
59
- return result.paymasterAndData;
60
- } catch (err) {
61
- setError(err);
62
- throw err;
63
- } finally {
64
- setIsLoading(false);
65
- }
66
- }, [config.paymasterAddress, config.operator, config.verificationGasLimit, config.postOpGasLimit]);
67
- return { generatePaymasterAndData, isLoading, error };
68
- }
69
- var EXECUTE_ABI = [
70
- {
71
- name: "execute",
72
- type: "function",
73
- stateMutability: "nonpayable",
74
- inputs: [
75
- { name: "dest", type: "address" },
76
- { name: "value", type: "uint256" },
77
- { name: "func", type: "bytes" }
78
- ],
79
- outputs: []
80
- }
81
- ];
82
- var ENTRYPOINT_ABI = [
83
- {
84
- name: "getNonce",
85
- type: "function",
86
- stateMutability: "view",
87
- inputs: [
88
- { name: "sender", type: "address" },
89
- { name: "key", type: "uint192" }
90
- ],
91
- outputs: [{ name: "nonce", type: "uint256" }]
92
- },
93
- {
94
- name: "getUserOpHash",
95
- type: "function",
96
- stateMutability: "view",
97
- inputs: [
98
- {
99
- name: "packedUserOp",
100
- type: "tuple",
101
- components: [
102
- { name: "sender", type: "address" },
103
- { name: "nonce", type: "uint256" },
104
- { name: "initCode", type: "bytes" },
105
- { name: "callData", type: "bytes" },
106
- { name: "accountGasLimits", type: "bytes32" },
107
- { name: "preVerificationGas", type: "uint256" },
108
- { name: "gasFees", type: "bytes32" },
109
- { name: "paymasterAndData", type: "bytes" },
110
- { name: "signature", type: "bytes" }
111
- ]
112
- }
113
- ],
114
- outputs: [{ type: "bytes32" }]
115
- }
116
- ];
117
- var DEFAULT_ENTRYPOINT = "0x0000000071727De22E5E9d8BAf0edAc6f37da032";
118
- var AirAccountEIP1193Provider = class {
119
- config;
120
- client;
121
- listeners = /* @__PURE__ */ new Map();
122
- constructor(config) {
123
- this.config = config;
124
- this.client = createPublicClient({ transport: http(config.rpcUrl) });
125
- }
126
- async request({ method, params }) {
127
- switch (method) {
128
- case "eth_chainId":
129
- return `0x${this.config.chainId.toString(16)}`;
130
- case "eth_accounts":
131
- case "eth_requestAccounts":
132
- return [this.config.accountAddress];
133
- case "eth_sendTransaction": {
134
- const tx = params[0];
135
- return this._sendTransaction(tx);
136
- }
137
- case "personal_sign": {
138
- const [data] = params;
139
- const hash = hashMessage({ raw: hexToBytes(data) });
140
- return this.config.signer(hash);
141
- }
142
- case "eth_signTypedData_v4": {
143
- const [, typedDataJson] = params;
144
- const typedData = JSON.parse(typedDataJson);
145
- const hash = hashTypedData({
146
- domain: typedData.domain,
147
- types: typedData.types,
148
- primaryType: typedData.primaryType,
149
- message: typedData.message
150
- });
151
- return this.config.signer(hash);
152
- }
153
- default:
154
- return this._forwardToRpc(method, params);
155
- }
156
- }
157
- on(event, listener) {
158
- if (!this.listeners.has(event))
159
- this.listeners.set(event, /* @__PURE__ */ new Set());
160
- this.listeners.get(event).add(listener);
161
- return this;
162
- }
163
- removeListener(event, listener) {
164
- this.listeners.get(event)?.delete(listener);
165
- return this;
166
- }
167
- // ── Private ──────────────────────────────────────────────────────
168
- async _sendTransaction(tx) {
169
- const entryPoint = this.config.entryPoint ?? DEFAULT_ENTRYPOINT;
170
- const callData = encodeFunctionData({
171
- abi: EXECUTE_ABI,
172
- functionName: "execute",
173
- args: [tx.to, BigInt(tx.value ?? "0x0"), tx.data ?? "0x"]
174
- });
175
- const [nonce, feeData] = await Promise.all([
176
- this.client.readContract({
177
- address: entryPoint,
178
- abi: ENTRYPOINT_ABI,
179
- functionName: "getNonce",
180
- args: [this.config.accountAddress, 0n]
181
- }),
182
- this.client.estimateFeesPerGas()
183
- ]);
184
- const maxFeePerGas = feeData.maxFeePerGas ?? 1000000000n;
185
- const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? 100000000n;
186
- const verificationGasLimit = 200000n;
187
- const callGasLimit = BigInt(tx.gas ?? "0x30000");
188
- const accountGasLimits = `0x${(verificationGasLimit << 128n | callGasLimit).toString(16).padStart(64, "0")}`;
189
- const gasFees = `0x${(maxPriorityFeePerGas << 128n | maxFeePerGas).toString(16).padStart(64, "0")}`;
190
- const userOp = {
191
- sender: this.config.accountAddress,
192
- nonce,
193
- initCode: "0x",
194
- callData,
195
- accountGasLimits,
196
- preVerificationGas: 50000n,
197
- gasFees,
198
- paymasterAndData: "0x",
199
- signature: "0x"
200
- };
201
- const userOpHash = await this.client.readContract({
202
- address: entryPoint,
203
- abi: ENTRYPOINT_ABI,
204
- functionName: "getUserOpHash",
205
- args: [userOp]
206
- });
207
- userOp.signature = await this.config.signer(userOpHash);
208
- const resp = await fetch(this.config.bundlerUrl, {
209
- method: "POST",
210
- headers: { "Content-Type": "application/json" },
211
- body: JSON.stringify({
212
- jsonrpc: "2.0",
213
- id: 1,
214
- method: "eth_sendUserOperation",
215
- params: [
216
- {
217
- sender: userOp.sender,
218
- nonce: `0x${userOp.nonce.toString(16)}`,
219
- initCode: userOp.initCode,
220
- callData: userOp.callData,
221
- accountGasLimits: userOp.accountGasLimits,
222
- preVerificationGas: `0x${userOp.preVerificationGas.toString(16)}`,
223
- gasFees: userOp.gasFees,
224
- paymasterAndData: userOp.paymasterAndData,
225
- signature: userOp.signature
226
- },
227
- entryPoint
228
- ]
229
- })
230
- });
231
- const result = await resp.json();
232
- if (result.error)
233
- throw new Error(result.error.message);
234
- return result.result;
235
- }
236
- async _forwardToRpc(method, params) {
237
- const resp = await fetch(this.config.rpcUrl, {
238
- method: "POST",
239
- headers: { "Content-Type": "application/json" },
240
- body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params: params ?? [] })
241
- });
242
- const result = await resp.json();
243
- if (result.error)
244
- throw new Error(result.error.message);
245
- return result.result;
246
- }
247
- };
248
-
249
- // ../dapp/dist/eip6963.js
250
- var DEFAULT_ICON = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMjQiIGZpbGw9IiMxQTFBMkUiLz48dGV4dCB4PSIxMiIgeT0iMzIiIGZvbnQtc2l6ZT0iMjQiIGZpbGw9IiNGRkYiPkFBPC90ZXh0Pjwvc3ZnPg==";
251
- var AIRACCOUNT_UUID = "d4e5f6a7-b8c9-4d0e-8f2a-3b4c5d6e7f80";
252
- function announceAirAccount(provider, info = {}) {
253
- const providerDetail = Object.freeze({
254
- info: Object.freeze({
255
- uuid: AIRACCOUNT_UUID,
256
- name: "AirAccount",
257
- icon: DEFAULT_ICON,
258
- rdns: "community.aastar.airaccount",
259
- ...info
260
- }),
261
- provider
262
- });
263
- const announce = () => {
264
- window.dispatchEvent(new CustomEvent("eip6963:announceProvider", { detail: providerDetail }));
265
- };
266
- announce();
267
- window.addEventListener("eip6963:requestProvider", announce);
268
- return () => window.removeEventListener("eip6963:requestProvider", announce);
269
- }
270
- function watchProviders(onProvider) {
271
- const handler = (event) => {
272
- onProvider(event.detail);
273
- };
274
- window.addEventListener("eip6963:announceProvider", handler);
275
- window.dispatchEvent(new Event("eip6963:requestProvider"));
276
- return () => window.removeEventListener("eip6963:announceProvider", handler);
277
- }
278
-
279
- export { AirAccountEIP1193Provider, DVTClient, announceAirAccount, useCreditScore, useSuperPaymaster, watchProviders };
280
- //# sourceMappingURL=chunk-6JCYPTSH.js.map
281
- //# sourceMappingURL=chunk-6JCYPTSH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../dapp/dist/ui/index.js","../../dapp/dist/ui/hooks/useCreditScore.js","../../dapp/dist/ui/hooks/useSuperPaymaster.js","../../dapp/dist/eip1193.js","../../dapp/dist/eip6963.js"],"names":["useState"],"mappings":"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","file":"chunk-6JCYPTSH.js","sourcesContent":["import { parseAbi } from 'viem';\nconst DVT_ABI = parseAbi([\n 'function registerValidator(bytes)',\n 'function createProposal(address, uint8, string)',\n 'function signProposal(uint256, bytes)'\n]);\nexport class DVTClient {\n static async registerValidator(wallet, dvtAddr, blsPublicKey) {\n return wallet.writeContract({\n address: dvtAddr,\n abi: DVT_ABI,\n functionName: 'registerValidator',\n args: [blsPublicKey],\n chain: wallet.chain\n });\n }\n}\n","import { useState, useEffect } from 'react';\nimport { createAAStarPublicClient, RegistryABI } from '@aastar/core';\nexport function useCreditScore({ chain, rpcUrl, registryAddress, userAddress }) {\n const [creditLimit, setCreditLimit] = useState(null);\n const [loading, setLoading] = useState(false);\n useEffect(() => {\n if (!registryAddress || !userAddress || !rpcUrl)\n return;\n const fetchCredit = async () => {\n setLoading(true);\n try {\n const client = createAAStarPublicClient(rpcUrl, chain);\n const limit = await client.readContract({\n address: registryAddress,\n abi: RegistryABI,\n functionName: 'getCreditLimit',\n args: [userAddress]\n });\n setCreditLimit(limit);\n }\n catch (e) {\n console.error(\"Failed to fetch credit limit:\", e);\n setCreditLimit(0n);\n }\n finally {\n setLoading(false);\n }\n };\n fetchCredit();\n }, [chain, rpcUrl, registryAddress, userAddress]);\n return { creditLimit, loading };\n}\n","import { useState, useCallback } from 'react';\nimport { getSuperPaymasterMiddleware } from '@aastar/paymaster';\nexport function useSuperPaymaster(config) {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n const generatePaymasterAndData = useCallback(async (userOp) => {\n setIsLoading(true);\n setError(null);\n try {\n const middleware = getSuperPaymasterMiddleware(config);\n const result = await middleware.sponsorUserOperation({ userOperation: userOp });\n return result.paymasterAndData;\n }\n catch (err) {\n setError(err);\n throw err;\n }\n finally {\n setIsLoading(false);\n }\n }, [config.paymasterAddress, config.operator, config.verificationGasLimit, config.postOpGasLimit]);\n return { generatePaymasterAndData, isLoading, error };\n}\n","/**\n * eip1193.ts — EIP-1193 compatible provider wrapping AirAccount M7.\n *\n * Intercepts eth_sendTransaction and converts it to an ERC-4337 v0.7\n * PackedUserOperation submitted to the bundler via eth_sendUserOperation.\n * All other JSON-RPC methods are forwarded to the public RPC.\n */\nimport { createPublicClient, encodeFunctionData, hashMessage, hashTypedData, hexToBytes, http, } from \"viem\";\n// AirAccount execute() — ERC-4337 smart account entry point for single calls\nconst EXECUTE_ABI = [\n {\n name: \"execute\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"dest\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"func\", type: \"bytes\" },\n ],\n outputs: [],\n },\n];\n// EntryPoint v0.7 getNonce + getUserOpHash\nconst ENTRYPOINT_ABI = [\n {\n name: \"getNonce\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"sender\", type: \"address\" },\n { name: \"key\", type: \"uint192\" },\n ],\n outputs: [{ name: \"nonce\", type: \"uint256\" }],\n },\n {\n name: \"getUserOpHash\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n {\n name: \"packedUserOp\",\n type: \"tuple\",\n components: [\n { name: \"sender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"initCode\", type: \"bytes\" },\n { name: \"callData\", type: \"bytes\" },\n { name: \"accountGasLimits\", type: \"bytes32\" },\n { name: \"preVerificationGas\", type: \"uint256\" },\n { name: \"gasFees\", type: \"bytes32\" },\n { name: \"paymasterAndData\", type: \"bytes\" },\n { name: \"signature\", type: \"bytes\" },\n ],\n },\n ],\n outputs: [{ type: \"bytes32\" }],\n },\n];\nconst DEFAULT_ENTRYPOINT = \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\";\n/**\n * AirAccountEIP1193Provider — drop-in EIP-1193 wallet backed by an AirAccount M7 smart account.\n *\n * Usage:\n * ```ts\n * const provider = new AirAccountEIP1193Provider({\n * chainId: 11155111,\n * rpcUrl: 'https://rpc.sepolia.org',\n * bundlerUrl: 'https://api.pimlico.io/v2/11155111/rpc?apikey=...',\n * accountAddress: '0x...',\n * signer: async (hash) => passkeySign(hash),\n * });\n * // Pass to wagmi, ethers.js BrowserProvider, or window.ethereum\n * ```\n */\nexport class AirAccountEIP1193Provider {\n config;\n client;\n listeners = new Map();\n constructor(config) {\n this.config = config;\n this.client = createPublicClient({ transport: http(config.rpcUrl) });\n }\n async request({ method, params }) {\n switch (method) {\n case \"eth_chainId\":\n return `0x${this.config.chainId.toString(16)}`;\n case \"eth_accounts\":\n case \"eth_requestAccounts\":\n return [this.config.accountAddress];\n case \"eth_sendTransaction\": {\n const tx = params[0];\n return this._sendTransaction(tx);\n }\n case \"personal_sign\": {\n // params: [hexData, address] — sign raw bytes with EIP-191 prefix\n const [data] = params;\n const hash = hashMessage({ raw: hexToBytes(data) });\n return this.config.signer(hash);\n }\n case \"eth_signTypedData_v4\": {\n // params: [address, typedDataJson] — sign EIP-712 typed data\n const [, typedDataJson] = params;\n const typedData = JSON.parse(typedDataJson);\n const hash = hashTypedData({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n });\n return this.config.signer(hash);\n }\n default:\n return this._forwardToRpc(method, params);\n }\n }\n on(event, listener) {\n if (!this.listeners.has(event))\n this.listeners.set(event, new Set());\n this.listeners.get(event).add(listener);\n return this;\n }\n removeListener(event, listener) {\n this.listeners.get(event)?.delete(listener);\n return this;\n }\n // ── Private ──────────────────────────────────────────────────────\n async _sendTransaction(tx) {\n const entryPoint = this.config.entryPoint ?? DEFAULT_ENTRYPOINT;\n // Encode execute(to, value, data) for the AirAccount\n const callData = encodeFunctionData({\n abi: EXECUTE_ABI,\n functionName: \"execute\",\n args: [tx.to, BigInt(tx.value ?? \"0x0\"), tx.data ?? \"0x\"],\n });\n // Fetch nonce and gas fees in parallel\n const [nonce, feeData] = await Promise.all([\n this.client.readContract({\n address: entryPoint,\n abi: ENTRYPOINT_ABI,\n functionName: \"getNonce\",\n args: [this.config.accountAddress, 0n],\n }),\n this.client.estimateFeesPerGas(),\n ]);\n const maxFeePerGas = feeData.maxFeePerGas ?? 1000000000n;\n const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? 100000000n;\n // Pack gas limits into bytes32 fields (ERC-4337 v0.7 packed format)\n const verificationGasLimit = 200000n;\n const callGasLimit = BigInt(tx.gas ?? \"0x30000\");\n const accountGasLimits = `0x${((verificationGasLimit << 128n) | callGasLimit).toString(16).padStart(64, \"0\")}`;\n const gasFees = `0x${((maxPriorityFeePerGas << 128n) | maxFeePerGas).toString(16).padStart(64, \"0\")}`;\n const userOp = {\n sender: this.config.accountAddress,\n nonce,\n initCode: \"0x\",\n callData,\n accountGasLimits,\n preVerificationGas: 50000n,\n gasFees,\n paymasterAndData: \"0x\",\n signature: \"0x\",\n };\n // Get UserOp hash from EntryPoint\n const userOpHash = await this.client.readContract({\n address: entryPoint,\n abi: ENTRYPOINT_ABI,\n functionName: \"getUserOpHash\",\n args: [userOp],\n });\n // Sign and attach\n userOp.signature = await this.config.signer(userOpHash);\n // Submit to bundler\n const resp = await fetch(this.config.bundlerUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"eth_sendUserOperation\",\n params: [\n {\n sender: userOp.sender,\n nonce: `0x${userOp.nonce.toString(16)}`,\n initCode: userOp.initCode,\n callData: userOp.callData,\n accountGasLimits: userOp.accountGasLimits,\n preVerificationGas: `0x${userOp.preVerificationGas.toString(16)}`,\n gasFees: userOp.gasFees,\n paymasterAndData: userOp.paymasterAndData,\n signature: userOp.signature,\n },\n entryPoint,\n ],\n }),\n });\n const result = (await resp.json());\n if (result.error)\n throw new Error(result.error.message);\n return result.result;\n }\n async _forwardToRpc(method, params) {\n const resp = await fetch(this.config.rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params: params ?? [] }),\n });\n const result = (await resp.json());\n if (result.error)\n throw new Error(result.error.message);\n return result.result;\n }\n}\n","/**\n * eip6963.ts — EIP-6963 Multi Injected Provider Discovery for AirAccount.\n *\n * Announces AirAccount as an EIP-1193 wallet via the eip6963:announceProvider\n * DOM event, enabling DApps to auto-discover it without relying on window.ethereum.\n *\n * Reference: https://eips.ethereum.org/EIPS/eip-6963\n */\n// AirAccount default icon (minimal SVG placeholder)\nconst DEFAULT_ICON = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMjQiIGZpbGw9IiMxQTFBMkUiLz48dGV4dCB4PSIxMiIgeT0iMzIiIGZvbnQtc2l6ZT0iMjQiIGZpbGw9IiNGRkYiPkFBPC90ZXh0Pjwvc3ZnPg==\";\n// Stable UUID for AirAccount — must not change between sessions per EIP-6963 spec\nconst AIRACCOUNT_UUID = \"d4e5f6a7-b8c9-4d0e-8f2a-3b4c5d6e7f80\";\n/**\n * Announce AirAccount as an EIP-6963 wallet so DApps can auto-discover it.\n *\n * Call this once at app startup. Returns a cleanup function that removes the\n * event listener when the wallet is no longer available.\n *\n * @example\n * ```ts\n * const provider = new AirAccountEIP1193Provider({ ... });\n * const cleanup = announceAirAccount(provider);\n * // later: cleanup() to stop announcing\n * ```\n */\nexport function announceAirAccount(provider, info = {}) {\n const providerDetail = Object.freeze({\n info: Object.freeze({\n uuid: AIRACCOUNT_UUID,\n name: \"AirAccount\",\n icon: DEFAULT_ICON,\n rdns: \"community.aastar.airaccount\",\n ...info,\n }),\n provider,\n });\n const announce = () => {\n window.dispatchEvent(new CustomEvent(\"eip6963:announceProvider\", { detail: providerDetail }));\n };\n // Announce immediately so DApps already listening receive it\n announce();\n // Re-announce whenever a DApp requests wallet discovery\n window.addEventListener(\"eip6963:requestProvider\", announce);\n return () => window.removeEventListener(\"eip6963:requestProvider\", announce);\n}\n/**\n * Listen for EIP-6963 wallet announcements from other providers in the page.\n * Useful for composing AirAccount with MetaMask fallback, etc.\n *\n * Returns a cleanup function to stop listening.\n */\nexport function watchProviders(onProvider) {\n const handler = (event) => {\n onProvider(event.detail);\n };\n window.addEventListener(\"eip6963:announceProvider\", handler);\n // Trigger all existing wallets to re-announce\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n return () => window.removeEventListener(\"eip6963:announceProvider\", handler);\n}\n"]}