@human.tech/waap-sdk 2.3.0 → 2.4.1
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/.agent/SKILL.md +28 -13
- package/CHANGELOG.md +152 -0
- package/README.md +16 -2
- package/dist/SolanaProvider-BdeBP_ro.js +1 -0
- package/dist/SolanaProvider-DP9J8JuJ.mjs +1 -0
- package/dist/UIMessageManager-4xqSTTBS.d.mts +11 -0
- package/dist/UIMessageManager-4xqSTTBS.d.ts +11 -0
- package/dist/UIMessageManager-CtnIZgIY.mjs +1 -0
- package/dist/UIMessageManager-D-OTya1E.js +1 -0
- package/dist/WaaPError-C2TOEGPx.d.mts +52 -0
- package/dist/WaaPError-C2TOEGPx.d.ts +52 -0
- package/dist/{WalletConnect-Dn40Omgo.js → WalletConnect-B21f4Vvh.js} +1 -1
- package/dist/{WalletConnect-UfxGn2M_.mjs → WalletConnect-DXiTxC-F.mjs} +1 -1
- package/dist/{WaaPError-CMOAWUlN.d.ts → WalletModalController-16mHsFv2.d.ts} +17 -55
- package/dist/{WaaPError-BjukImOz.d.mts → WalletModalController-DxiBiqDf.d.mts} +17 -55
- package/dist/bridge.d.mts +158 -0
- package/dist/bridge.d.ts +158 -0
- package/dist/bridge.js +1 -0
- package/dist/bridge.mjs +1 -0
- package/dist/evm-dDMLwSQe.mjs +2 -0
- package/dist/evm-rUSuf-iy.js +2 -0
- package/dist/evm.d.mts +3 -2
- package/dist/evm.d.ts +3 -2
- package/dist/evm.js +1 -1
- package/dist/evm.mjs +1 -1
- package/dist/{index-DOIss_GK.d.ts → index-BOExImk3.d.mts} +29 -192
- package/dist/{index-C0mLQs_a.d.mts → index-BkKBZpqc.d.ts} +29 -192
- package/dist/index.d.mts +33 -8
- package/dist/index.d.ts +33 -8
- package/dist/index.js +3 -3
- package/dist/index.mjs +3 -3
- package/dist/init-BkrqKNet.js +1 -0
- package/dist/init-C-52fEJS.d.ts +84 -0
- package/dist/init-C3zCj5Lc.d.mts +84 -0
- package/dist/init-CkYgm7Zu.mjs +1 -0
- package/dist/react.d.mts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/react.mjs +1 -1
- package/dist/register-B2G1larb.mjs +1 -0
- package/dist/{register-9bEe9ATz.d.mts → register-BKCJXsHB.d.mts} +9 -6
- package/dist/register-BL_2Xqcc.js +1 -0
- package/dist/{register-XzDVa7r8.d.mts → register-C1hFwh4A.d.ts} +4 -3
- package/dist/register-CLpzYN7U.mjs +1 -0
- package/dist/{register-DgN7qh23.js → register-Diu5wxsG.js} +1 -1
- package/dist/{register-PWKDsSRv.d.ts → register-GiWQpcBY.d.ts} +9 -6
- package/dist/{register-Mb1D_xW4.d.ts → register-mq9fTaSt.d.mts} +4 -3
- package/dist/solana.d.mts +6 -4
- package/dist/solana.d.ts +6 -4
- package/dist/solana.js +1 -1
- package/dist/solana.mjs +1 -1
- package/dist/stellar.d.mts +6 -0
- package/dist/stellar.d.ts +6 -0
- package/dist/stellar.js +1 -0
- package/dist/stellar.mjs +1 -0
- package/dist/sui.d.mts +5 -4
- package/dist/sui.d.ts +5 -4
- package/dist/sui.js +1 -1
- package/dist/sui.mjs +1 -1
- package/dist/types-Bai14yLc.d.mts +95 -0
- package/dist/types-Bj5dDE-C.d.ts +198 -0
- package/dist/types-C7JDjWnt.d.mts +198 -0
- package/dist/{types-BmCqyQtu.d.mts → types-Cc6tc4ut.d.mts} +18 -1
- package/dist/{types-BmCqyQtu.d.ts → types-Cc6tc4ut.d.ts} +18 -1
- package/dist/types-DqdVfkaW.d.ts +95 -0
- package/dist/ui-CnG74RaM.js +1 -0
- package/dist/ui-lV9LVoom.mjs +1 -0
- package/dist/{useWaapAuth-vJAk2n_I.d.mts → useWaapAuth-Be1YJk-7.d.mts} +2 -2
- package/dist/useWaapAuth-C9Cwu4XG.js +1 -0
- package/dist/{useWaapAuth-DgYO5KxO.d.ts → useWaapAuth-DSFDwJtt.d.ts} +2 -2
- package/dist/useWaapAuth-Vh8gUs6Y.mjs +1 -0
- package/dist/walletconnect.js +1 -1
- package/dist/walletconnect.mjs +1 -1
- package/docs/solana-wallet-adapter.md +157 -0
- package/package.json +32 -4
- package/dist/esm-BUfmyWbN.mjs +0 -1
- package/dist/esm-DFwVZkjo.js +0 -1
- package/dist/evm-9r6LecIW.mjs +0 -2
- package/dist/evm-D_LHHo3z.js +0 -2
- package/dist/initializerContext-DIrqEE6B.d.ts +0 -20
- package/dist/initializerContext-_YjbVTiL.d.mts +0 -20
- package/dist/register-CEeLG7qz.mjs +0 -1
- package/dist/register-CodxV1XG.js +0 -1
- package/dist/register-I8d7v41B.mjs +0 -1
- package/dist/ui-BjcwM6px.js +0 -1
- package/dist/ui-CrnBoTQL.mjs +0 -1
- package/dist/useWaapAuth-BPvve-_3.js +0 -1
- package/dist/useWaapAuth-BcmVGb-D.mjs +0 -1
package/.agent/SKILL.md
CHANGED
|
@@ -54,17 +54,17 @@ caller-controlled input: that origin governs iframe creation, every
|
|
|
54
54
|
|
|
55
55
|
## Chain and capability support
|
|
56
56
|
|
|
57
|
-
| Capability | EVM | Sui | Solana
|
|
58
|
-
| --------------------------- | ---------------------- | --------------------------- |
|
|
59
|
-
| Interface | EIP-1193 | Wallet Standard | Wallet Standard
|
|
60
|
-
| Standard signer | `t1` secp256k1 | `t1` secp256k1 | `t2` ed25519
|
|
61
|
-
| Squid dWallet | `sqd1` secp256k1 | `sqd2` ed25519 | `sqd2` ed25519
|
|
62
|
-
| Message signing | `personal_sign` | `signPersonalMessage` | `signMessage`
|
|
63
|
-
| Typed data | `eth_signTypedData_v4` | — | —
|
|
64
|
-
| Sign only | `eth_signTransaction` | `signTransaction` | `signTransaction`
|
|
65
|
-
| Sign and submit | `eth_sendTransaction` | `signAndExecuteTransaction` | `signAndSendTransaction`
|
|
66
|
-
| Permission token (`withPT`) | sign/send transaction | sign / sign-and-execute | sign / sign-and-send
|
|
67
|
-
|
|
|
57
|
+
| Capability | EVM | Sui | Solana |
|
|
58
|
+
| --------------------------- | ---------------------- | --------------------------- | -------------------------------- |
|
|
59
|
+
| Interface | EIP-1193 | Wallet Standard | Wallet Standard |
|
|
60
|
+
| Standard signer | `t1` secp256k1 | `t1` secp256k1 | `t2` ed25519 |
|
|
61
|
+
| Squid dWallet | `sqd1` secp256k1 | `sqd2` ed25519 | `sqd2` ed25519 |
|
|
62
|
+
| Message signing | `personal_sign` | `signPersonalMessage` | `signMessage` |
|
|
63
|
+
| Typed data | `eth_signTypedData_v4` | — | — |
|
|
64
|
+
| Sign only | `eth_signTransaction` | `signTransaction` | `signTransaction` |
|
|
65
|
+
| Sign and submit | `eth_sendTransaction` | `signAndExecuteTransaction` | `signAndSendTransaction` |
|
|
66
|
+
| Permission token (`withPT`) | sign/send transaction | sign / sign-and-execute | sign / sign-and-send |
|
|
67
|
+
| Multiple signing inputs | — | — | sequential via standard features |
|
|
68
68
|
|
|
69
69
|
Chain identifiers are `sui:<mainnet\|testnet\|devnet\|localnet>` and
|
|
70
70
|
`solana:<mainnet\|devnet\|testnet>`. Permission-token requests use
|
|
@@ -81,8 +81,23 @@ Chain identifiers are `sui:<mainnet\|testnet\|devnet\|localnet>` and
|
|
|
81
81
|
- `preload()` completes non-interactive setup. It never opens wallet UI and
|
|
82
82
|
never creates a Squid account.
|
|
83
83
|
- Re-target an environment by navigating, not by swapping in place. The wallet
|
|
84
|
-
origin is fixed at initialization
|
|
85
|
-
|
|
84
|
+
origin is fixed at initialization. Standalone Solana registration is removed
|
|
85
|
+
by `destroy()`; teardown the old initializer before creating another.
|
|
86
|
+
|
|
87
|
+
## Solana wallet-adapter consumers
|
|
88
|
+
|
|
89
|
+
- `initWaaP({ chain: 'solana' })` automatically registers the standalone wallet.
|
|
90
|
+
Initialize once in a browser effect and call `destroy()` in its cleanup.
|
|
91
|
+
- Modern `@solana/wallet-adapter-react` discovers Wallet Standard wallets. Use
|
|
92
|
+
its normal `WalletProvider`, picker, and signing methods; no WaaP-specific
|
|
93
|
+
adapter package or manually registered duplicate is needed.
|
|
94
|
+
- Explicit connect restores a current session or opens login. Silent connect
|
|
95
|
+
probes the session without a modal and returns empty accounts when absent.
|
|
96
|
+
- The generic adapter supplies `signAllTransactions`. Standard feature inputs
|
|
97
|
+
run sequentially with per-request approval policy; there is no atomic batch
|
|
98
|
+
or single Squid roundtrip, and no direct facade `signAllTransactions` helper.
|
|
99
|
+
- This standalone lifecycle does not replace composite Squid's explicit
|
|
100
|
+
`session.login()` and `squid.onboard()` flow below.
|
|
86
101
|
|
|
87
102
|
## Squid accounts
|
|
88
103
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,157 @@
|
|
|
1
1
|
# @human.tech/waap-sdk
|
|
2
2
|
|
|
3
|
+
## 2.4.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4e6c275: Add a Stellar facade implementing SEP-43, reachable as
|
|
8
|
+
`initWaaP({ chain: 'stellar' })` or from `@human.tech/waap-sdk/stellar`.
|
|
9
|
+
|
|
10
|
+
SEP-43 is a plain module interface rather than a Wallet Standard registration,
|
|
11
|
+
so unlike the Sui and Solana facades there is nothing to register — a dapp
|
|
12
|
+
holds the provider object. Two of its conventions differ from the rest of the
|
|
13
|
+
SDK and are worth knowing before integrating:
|
|
14
|
+
|
|
15
|
+
- **Errors resolve, they do not throw.** Every method returns an optional
|
|
16
|
+
`error` with the standard's four codes, so integrations check
|
|
17
|
+
`if (result.error)`. A user rejection is `-4` specifically, which SEP-43
|
|
18
|
+
tells the dapp not to retry.
|
|
19
|
+
- **`getNetwork` is answered locally**, from the network the facade was
|
|
20
|
+
initialized for. A round trip could only disagree with what it signs for.
|
|
21
|
+
|
|
22
|
+
`signMessage` follows SEP-53, the standard that defines what SEP-43's
|
|
23
|
+
`signMessage` actually signs: `SHA256("Stellar Signed Message:\n" ‖ message)`.
|
|
24
|
+
|
|
25
|
+
Three requests are refused rather than approximated. A caller-supplied
|
|
26
|
+
`submitUrl` is rejected — the wallet submits through its own Horizon or not at
|
|
27
|
+
all. A request naming an address the wallet does not hold is rejected rather
|
|
28
|
+
than answered with a signature from whichever account is loaded.
|
|
29
|
+
`signAuthEntry` is refused because Soroban authorization entries cannot yet be
|
|
30
|
+
decoded or displayed, and signing a blob the user cannot see is the blind
|
|
31
|
+
signing this integration exists to avoid.
|
|
32
|
+
|
|
33
|
+
`initWaaP` no longer falls through to the EVM provider for an unrecognized
|
|
34
|
+
`chain`. It previously returned an EVM facade silently, so a caller asking for
|
|
35
|
+
an unsupported chain would go on to sign EVM payloads believing otherwise; it
|
|
36
|
+
now throws. `initWaaPMulti` continues to accept `'evm' | 'sui' | 'solana'`
|
|
37
|
+
only — Stellar has no Squid account, so a facade there could not complete an
|
|
38
|
+
operation.
|
|
39
|
+
|
|
40
|
+
- b630820: Send the Stellar network with `signMessage`.
|
|
41
|
+
|
|
42
|
+
The parameter was omitted, so a facade initialized with `network: 'TESTNET'`
|
|
43
|
+
had its message-signing requests recorded by the wallet's policy engine under
|
|
44
|
+
pubnet. SEP-53's digest does not depend on the network, so the signature itself
|
|
45
|
+
was unaffected — but policy is scoped and audited per chain, and a testnet
|
|
46
|
+
integration's activity was filed against the wrong one. Found by driving the
|
|
47
|
+
facade against a live wallet.
|
|
48
|
+
|
|
49
|
+
- d28866f: Complete standalone Solana Wallet Standard integration: initialize WaaP once to
|
|
50
|
+
make it discoverable in compatible wallet-adapter pickers, then destroy it to
|
|
51
|
+
remove its registration. Explicit connect restores a valid session or opens
|
|
52
|
+
login, while silent reconnect checks the current session without showing UI.
|
|
53
|
+
Document the standard wallet-adapter integration and its sequential batch-signing
|
|
54
|
+
behavior; no WaaP-specific adapter package is required.
|
|
55
|
+
|
|
56
|
+
Add `defaultChain` for wallet-adapter sign-only and batch calls that omit the
|
|
57
|
+
cluster; set it to the application's RPC cluster (the default remains mainnet).
|
|
58
|
+
|
|
59
|
+
Forward wallet-adapter's Solana preflight commitment, minimum context slot,
|
|
60
|
+
skip-preflight, and retry controls through the wallet's validated broadcast
|
|
61
|
+
pipeline to the RPC. Confirmation remains the application's responsibility.
|
|
62
|
+
|
|
63
|
+
- 31482ae: Introduce the SDK to WalletConnect wallets as WaaP, with the current WaaP description and icon, instead of the old Human Wallet and Silk branding.
|
|
64
|
+
|
|
65
|
+
## 2.4.0
|
|
66
|
+
|
|
67
|
+
### Minor Changes
|
|
68
|
+
|
|
69
|
+
- 6240f2e: Add `build:bridge-page`, which generates the immutable HTML page a native
|
|
70
|
+
WebView loads to drive the SDK.
|
|
71
|
+
|
|
72
|
+
The page bundles the real `@human.tech/waap-sdk/bridge` entry, so the Flutter
|
|
73
|
+
package vendors no hand-written JavaScript and the two cannot drift.
|
|
74
|
+
|
|
75
|
+
WalletConnect/AppKit is stubbed out of that bundle. It is not a V1 native login
|
|
76
|
+
method and is reached only through `await import('@reown/…')` inside
|
|
77
|
+
`SilkWalletConnect.getInstance()`, but an IIFE bundle cannot code-split, so
|
|
78
|
+
leaving it in inlines the entire AppKit graph — viem, ox, the Coinbase and Base
|
|
79
|
+
SDKs, an icon set. That is the difference between a 140 kB page and a 4.3 MB
|
|
80
|
+
one parsed on a phone at every launch. The stub throws a legible error rather
|
|
81
|
+
than failing as an opaque module-resolution error, so the excluded path stays
|
|
82
|
+
loud.
|
|
83
|
+
|
|
84
|
+
`esbuild` becomes an explicit devDependency; it was previously only reachable
|
|
85
|
+
as a transitive dependency of `tsdown`.
|
|
86
|
+
|
|
87
|
+
- a87adeb: Add `@human.tech/waap-sdk/bridge`, the shared runtime a native application's
|
|
88
|
+
WebView bridge page uses to drive the browser SDK.
|
|
89
|
+
|
|
90
|
+
This is the JavaScript half of the Flutter SDK's architecture, and it is
|
|
91
|
+
deliberately host-agnostic: the same bridge serves any native layer that can
|
|
92
|
+
install a message channel on a WebView.
|
|
93
|
+
|
|
94
|
+
The bridge page is a distinct origin from the wallet. The wallet stays in a
|
|
95
|
+
cross-origin iframe that application JavaScript cannot reach, so the native host
|
|
96
|
+
talks only to this module and never to wallet DOM, storage or credentials.
|
|
97
|
+
|
|
98
|
+
**A versioned envelope that fails closed.** Unknown protocol versions, message
|
|
99
|
+
kinds the host must never send (a `response` or `event` among them), missing or
|
|
100
|
+
non-string ids, unknown bridge methods and malformed JSON are all refused before
|
|
101
|
+
anything reaches the SDK. A failure is reported against the caller's id whenever
|
|
102
|
+
one can be recovered, so a native future rejects rather than hanging; only a
|
|
103
|
+
message with no usable id degrades to an out-of-band event.
|
|
104
|
+
|
|
105
|
+
**Exactly-once settlement.** A settled request id is retired, so a late resolve
|
|
106
|
+
or a second rejection cannot reach the host twice, and a second request reusing
|
|
107
|
+
an in-flight id is refused rather than silently replacing it.
|
|
108
|
+
|
|
109
|
+
**`evm.request` is allowlisted, and the allowlist is load-bearing.**
|
|
110
|
+
`SILK_METHOD` mixes the EIP-1193 methods with portal-admin and configuration
|
|
111
|
+
methods — `project_init`, `gastank_topup`, `gastank_update_settings`,
|
|
112
|
+
`customization_update`, `set_project`, `set_custom_config`. Forwarding the
|
|
113
|
+
escape hatch unfiltered would hand a native application a path to all of them.
|
|
114
|
+
The allowed set is enumerated rather than derived from an `eth_`/`wallet_`
|
|
115
|
+
prefix, so extending the enum cannot silently widen the native surface.
|
|
116
|
+
|
|
117
|
+
**Errors cross redacted.** Only a stable native error code, a message and any
|
|
118
|
+
EIP-1193 number are sent; the originating cause is dropped because it can carry
|
|
119
|
+
request payloads and wallet internals. The code map is exhaustive over
|
|
120
|
+
`WaaPErrorCode`, so adding an SDK code fails type-checking here rather than
|
|
121
|
+
degrading to `unknown` on a user's device.
|
|
122
|
+
|
|
123
|
+
33 tests cover the protocol rules, the allowlist against every method it admits
|
|
124
|
+
and every portal-admin method it must refuse, redaction, teardown and event
|
|
125
|
+
forwarding.
|
|
126
|
+
|
|
127
|
+
### Patch Changes
|
|
128
|
+
|
|
129
|
+
- 306ec08: Add `homepage` (docs) and `keywords` to package.json so the npm sidebar links to docs.waap.human.tech instead of the private silk repo.
|
|
130
|
+
- ef2f368: Release the Squid onboarding latch when the wallet stops reporting progress.
|
|
131
|
+
|
|
132
|
+
`onboard()` opens with `if (isSquidReady() || activeLifecycleId) return`, and
|
|
133
|
+
`activeLifecycleId` was only ever cleared by a `waap_squid_failed` event, a
|
|
134
|
+
throw inside `onboard()`, a successful `getAccountStatus()` reconcile, or
|
|
135
|
+
`logout()`. None of those fire when an attempt simply goes silent, so an
|
|
136
|
+
integrator whose onboarding died without a terminal event was stuck:
|
|
137
|
+
`getSquidStatus()` reported `provisioning` forever, and every later `onboard()`
|
|
138
|
+
returned immediately without reaching the wallet.
|
|
139
|
+
|
|
140
|
+
An attempt that emits nothing for three minutes is now treated as failed and
|
|
141
|
+
emits `waap_squid_failed`, which updates status and frees a retry. This bounds silence rather
|
|
142
|
+
than slowness — the wallet re-posts `pending` on every network-DKG poll, so a
|
|
143
|
+
legitimately slow provision keeps resetting the timer and is never cut off.
|
|
144
|
+
|
|
145
|
+
No API change: the recovery is a plain `onboard()` call.
|
|
146
|
+
|
|
147
|
+
Bound the shared native sign-ticket request to 45 seconds. A stalled ticket
|
|
148
|
+
request previously prevented SDK and CLI Squid onboarding from reaching DKG or
|
|
149
|
+
reporting a failure.
|
|
150
|
+
|
|
151
|
+
Keep CLI TAP registration recovery within the preparation phase and inspect the
|
|
152
|
+
underlying failure, so an operation ID containing `403` cannot cause a failed
|
|
153
|
+
transaction to be replayed.
|
|
154
|
+
|
|
3
155
|
## 2.3.0
|
|
4
156
|
|
|
5
157
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -97,8 +97,22 @@ consumers. They accept serialized bytes (or a serializable transaction object).
|
|
|
97
97
|
Dapp-built Solana transactions retain their exact bytes; obtain a fresh
|
|
98
98
|
blockhash near approval to avoid expiry.
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
`
|
|
100
|
+
Standalone initialization registers WaaP with Wallet Standard automatically;
|
|
101
|
+
`destroy()` removes that registration. Modern `@solana/wallet-adapter-react`
|
|
102
|
+
discovers it and supplies the normal adapter methods, including
|
|
103
|
+
`signAllTransactions`, without a WaaP-specific adapter package. See the
|
|
104
|
+
[Solana wallet-adapter integration guide](docs/solana-wallet-adapter.md).
|
|
105
|
+
|
|
106
|
+
Explicit `connect()` restores a valid session or opens login. Silent
|
|
107
|
+
`connect({ silent: true })`, used by the generic adapter's `autoConnect()`,
|
|
108
|
+
checks the current session without opening login and returns no accounts when
|
|
109
|
+
there is no authenticated session.
|
|
110
|
+
|
|
111
|
+
The Wallet Standard signing features accept multiple inputs. Requests run
|
|
112
|
+
sequentially, with a separate wallet request and normal approval policy for each
|
|
113
|
+
transaction. The direct facade has no `signAllTransactions` helper; that method
|
|
114
|
+
is supplied by the generic adapter. Batches are not atomic and do not share one
|
|
115
|
+
Squid signing roundtrip.
|
|
102
116
|
|
|
103
117
|
## Squid mode: multi chains
|
|
104
118
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./UIMessageManager-D-OTya1E.js");let t=require("events");var n=class{constructor(n,r={},i,a=r,o=!0){this.ownsSession=o,this.lastKnownConversion=`pending`,this.name=`WaaP`,this.version=`1.0.0`,this.icon=`data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiByeD0iMTYiIGZpbGw9IiMxMTE4MmMiLz48cGF0aCBkPSJNMTYgNDhoMzJMMzIgMTZ6IiBmaWxsPSIjN2NkNGZmIi8+PC9zdmc+`,this._accounts=[],this.accountMode=`tap`,this.loginMethod=null,this._chains=[`solana:mainnet`,`solana:devnet`,`solana:testnet`],this.internalEventEmitter=new t.EventEmitter,this.changeListeners=new Set,this.initializerPromise=null,this.initializedIframeWindow=null,this.defaultChain=this.asSupportedChain(r.defaultChain)??`solana:mainnet`,this.walletMessageManager=new e.d(n,e.v(r)),this.ensureIframe=i,this.iframeMounted=!i,this.initializerOptions=a,this.uiMessageManager=new e.t,this.walletMessageManager.addListener({handleResponse:e=>{this.internalEventEmitter.emit(e.id,e)},handleRequest:t=>{t.method===e.w.show_modal?this.uiMessageManager.emit(`show_modal`):t.method===e.w.hide_modal&&this.uiMessageManager.emit(`hide_modal`)},onAccountChanged:async()=>{try{let e=await this.refreshAccounts();this.notifyChange({accounts:e.accounts})}catch(e){console.error(`Failed to refresh Solana accounts:`,e),this._accounts=[],this.notifyChange({accounts:[]})}}})}destroy(){this.walletMessageManager.dispose(),this.internalEventEmitter.removeAllListeners(),this.uiMessageManager.removeAllListeners(),this.changeListeners.clear(),this._accounts=[]}ensureIframeMounted(){if(this.iframeMounted||!this.ensureIframe)return;let e=this.ensureIframe();if(!e)throw Error(`Failed to create WaaP iframe`);this.iframeMounted=!0,this.walletMessageManager.setIframeWindow(e)}async preload(){if(!this.ensureIframe)return;this.ensureIframeMounted();let t=this.walletMessageManager.getIframeWindow();if(!t)throw Error(`WaaP iframe is not mounted`);if(this.initializedIframeWindow===t&&this.initializerPromise)return this.initializerPromise;this.initializedIframeWindow=t,this.initializerPromise=e.m(t,()=>this.selectAccountMode(this.accountMode,this.initializerOptions));try{await this.initializerPromise}catch(e){throw this.initializerPromise=null,this.initializedIframeWindow=null,e}}async ensureInitialized(){await this.preload()}get chains(){return this._chains}get accounts(){return this._accounts}get features(){return{"standard:connect":{version:`1.0.0`,connect:this.connect.bind(this)},"standard:disconnect":{version:`1.0.0`,disconnect:this.disconnect.bind(this)},"standard:events":{version:`1.0.0`,on:this.on.bind(this)},"solana:signMessage":{version:`1.1.0`,signMessage:this.signStandardMessages.bind(this)},"solana:signTransaction":{version:`1.0.0`,supportedTransactionVersions:[`legacy`,0],signTransaction:this.signStandardTransactions.bind(this)},"solana:signAndSendTransaction":{version:`1.0.0`,supportedTransactionVersions:[`legacy`,0],signAndSendTransaction:this.signAndSendStandardTransactions.bind(this)}}}get ui(){return this.uiMessageManager}getAccountStatus(){return{authenticated:this.loginMethod!==null,loginMethod:this.loginMethod,activeMode:this.loginMethod?this.accountMode:null,mode:this.accountMode,conversion:this.loginMethod?this.lastKnownConversion:`not_required`,tap:null,squid:null,accounts:this._accounts[0]?{solana:this._accounts[0].address}:{}}}get session(){return{login:()=>this.login(),logout:()=>this.logout(),getLoginMethod:()=>this.getLoginMethod(),getAccountStatus:()=>this.getCanonicalAccountStatus()}}async getCanonicalAccountStatus(t){await this.ensureInitialized();let n=await this.postRequestAndWait({method:e.w.waap_getAccountStatus,params:[],interactionRequired:!1,signal:t?.signal,timeoutMs:t?.timeoutMs});if(n.error)throw Error(n.error.message||`Failed to read WaaP status`);let r=n.data;return this.syncLoginMethodFromCanonicalStatus(r),r?.conversion&&(this.lastKnownConversion=r.conversion),r}setAccountMode(e){this.accountMode=e,this.initializerPromise=null,this.initializedIframeWindow=null}async selectAccountMode(t,n={}){await this.walletMessageManager.pingIframe(),await this.postRequestAndWait({method:e.w.set_signing_mode,params:[e.f(t,n)],interactionRequired:!1})}setLoginMethod(e){this.loginMethod=e,e===null&&(this._accounts=[],this.notifyChange({accounts:[]}))}getLoginMethod(){return this.loginMethod}async login(t){await this.ensureInitialized();let n=await this.restoreSession(t);if(n)return n;let r=(await this.postRequestAndWait({method:e.w.login,params:[],interactionRequired:!0,signal:t?.signal,timeoutMs:t?.timeoutMs})).data;return r!==`waap`&&r!==`human`&&r!==`injected`&&r!==`walletconnect`?(this.setLoginMethod(null),null):(this.loginMethod=r,r)}async logout(){this.lastKnownConversion=`pending`,await this.ensureInitialized(),await this.postRequestAndWait({method:e.w.logout,params:[],interactionRequired:!1}),this.loginMethod=null,this._accounts=[],this.notifyChange({accounts:[]})}async refreshAccounts(){try{await this.ensureInitialized();let e=await this.postRequestAndWait({method:`solana_connect`,params:[{silent:!0}],interactionRequired:!1});if(e.error)return this._accounts=[],{accounts:[]};let t=this.normalizeAccounts(e.data?.accounts||[]);return this._accounts=t,{accounts:this._accounts}}catch{return this._accounts=[],{accounts:[]}}}normalizeAccounts(e){return e.map(e=>({address:e.address,publicKey:e.publicKey instanceof Uint8Array?e.publicKey:new Uint8Array(e.publicKey??[]),chains:e.chains??this._chains,features:e.features??[]}))}async connect(t){if(t?.signal?.aborted)throw new e.x(`cancelled`,`WaaP connect cancelled.`,{operation:{chain:`solana`,method:`solana_connect`}});if(!this.ownsSession&&!this.loginMethod)throw new e.x(`not_authenticated`,`Not authenticated: call session.login() before connect().`,{operation:{chain:`solana`,method:`solana_connect`}});if(await this.ensureInitialized(),this.ownsSession&&t?.silent){try{await this.getCanonicalAccountStatus(t)}catch(e){throw this.setLoginMethod(null),e}if(!this.loginMethod)return{accounts:[]}}else if(this.ownsSession&&!await this.login(t))throw new e.x(`user_rejected`,`User rejected WaaP login during connect().`,{operation:{chain:`solana`,method:`solana_connect`}});let n=await this.postRequestAndWait({method:`solana_connect`,params:[t||{}],interactionRequired:!t?.silent,signal:t?.signal,timeoutMs:t?.timeoutMs});if(n.error)throw Error(n.error.message||`Failed to connect`);let r=this.normalizeAccounts(n.data?.accounts||[]);return this._accounts=r,this.notifyChange({accounts:this._accounts}),t?.silent||this.internalEventEmitter.emit(`connect`),this.internalEventEmitter.emit(`accountsChanged`,this._accounts.map(e=>e.address)),{accounts:this._accounts}}async restoreSession(t){try{let e=await this.getCanonicalAccountStatus(t);if(e.authenticated&&(e.loginMethod===`waap`||e.loginMethod===`human`||e.loginMethod===`injected`||e.loginMethod===`walletconnect`))return this.loginMethod=e.loginMethod,e.loginMethod}catch(t){if(t instanceof e.x&&(t.code===`cancelled`||t.code===`timeout`))throw t}return null}syncLoginMethodFromCanonicalStatus(e){let t=e.authenticated&&(e.loginMethod===`waap`||e.loginMethod===`human`||e.loginMethod===`injected`||e.loginMethod===`walletconnect`)?e.loginMethod:null;t!==this.loginMethod&&this.setLoginMethod(t)}async disconnect(){await this.ensureInitialized(),await this.postRequestAndWait({method:`solana_disconnect`,params:[],interactionRequired:!1}),this._accounts=[],this.notifyChange({accounts:[]})}async signMessage(e){await this.ensureInitialized();let t=e.account.address;if(!this._accounts.some(e=>e.address===t))throw Error(`Account ${t} is not connected`);let n=await this.postRequestAndWait({method:`solana_signMessage`,params:[{message:Array.from(e.message),account:t}],interactionRequired:!0,signal:e.signal,timeoutMs:e.timeoutMs});if(n.error)throw Error(n.error.message||`Failed to sign message`);return{signedMessage:new Uint8Array(n.data.signedMessage),signature:new Uint8Array(n.data.signature)}}async signTransaction(e){await this.ensureInitialized();let t=e.account.address;if(!this._accounts.some(e=>e.address===t))throw Error(`Account ${t} is not connected`);let n=this.resolveTransactionBytes(e.transaction),r=await this.postRequestAndWait({method:`solana_signTransaction`,params:[{transaction:Array.from(n),account:t,chain:this.asSupportedChain(e.chain)??this.defaultChain,withPT:e.withPT}],interactionRequired:!0,signal:e.signal,timeoutMs:e.timeoutMs});if(r.error)throw Error(r.error.message||`Failed to sign transaction`);return{signedTransaction:new Uint8Array(r.data.signedTransaction),signature:new Uint8Array(r.data.signature)}}async signAndSendTransaction(e){await this.ensureInitialized();let t=e.account.address;if(!this._accounts.some(e=>e.address===t))throw Error(`Account ${t} is not connected`);let n=this.resolveTransactionBytes(e.transaction),r=await this.postRequestAndWait({method:`solana_signAndSendTransaction`,params:[{transaction:Array.from(n),account:t,chain:this.asSupportedChain(e.chain)??this.defaultChain,options:e.options,withPT:e.withPT}],interactionRequired:!0,signal:e.signal,timeoutMs:e.timeoutMs});if(r.error)throw Error(r.error.message||`Failed to sign and send transaction`);return{signature:r.data.signature}}async signStandardMessages(...e){let t=[];for(let n of e){let e=await this.signMessage({account:n.account,message:n.message});t.push({...e,signatureType:`ed25519`})}return t}async signStandardTransactions(...e){let t=[];for(let n of e){let e=await this.signTransaction({account:n.account,transaction:n.transaction,chain:this.asSupportedChain(n.chain)});t.push({signedTransaction:e.signedTransaction})}return t}async signAndSendStandardTransactions(...e){let t=[];for(let n of e){let e=await this.signAndSendTransaction({account:n.account,transaction:n.transaction,chain:this.asSupportedChain(n.chain),options:this.broadcastOptions(n.options)});t.push({signature:r(e.signature)})}return t}asSupportedChain(t){if(t!==void 0){if(this._chains.includes(t))return t;throw new e.x(`unsupported_input`,`Unsupported Solana Wallet Standard chain: ${t}`,{operation:{chain:`solana`,method:`wallet_standard`}})}}broadcastOptions(t){if(t?.commitment!==void 0)throw new e.x(`unsupported_input`,`WaaP returns a submitted signature; confirm the transaction with the dapp RPC instead of setting commitment.`,{operation:{chain:`solana`,method:`wallet_standard`}});return t?{preflightCommitment:t.preflightCommitment,minContextSlot:t.minContextSlot,skipPreflight:t.skipPreflight,maxRetries:t.maxRetries}:void 0}async requestPermissionToken(t){await this.ensureInitialized();let n={...t,walletMode:this.accountMode},r=await this.postRequestAndWait({method:e.w.waap_requestPermissionToken,params:[n],interactionRequired:!0});if(r.error)throw Error(r.error.message||`Failed to request permission token`);return r.data}async getPermissionTokenStatus(t){return await this.ensureInitialized(),(await this.postRequestAndWait({method:e.w.waap_getPermissionTokenStatus,params:[t],interactionRequired:!1})).data}async clearPermissionToken(t){return await this.ensureInitialized(),(await this.postRequestAndWait({method:e.w.waap_clearPermissionToken,params:[t],interactionRequired:!1})).data}resolveTransactionBytes(e){if(e instanceof Uint8Array)return e;if(Array.isArray(e))return new Uint8Array(e);if(e&&typeof e.serialize==`function`){let t=e.serialize();return t instanceof Uint8Array?t:new Uint8Array(t)}throw Error(`Unsupported transaction format. Pass serialized bytes or a @solana/web3.js Transaction.`)}on(e,t){return e===`change`?(this.changeListeners.add(t),()=>{this.changeListeners.delete(t)}):(this.internalEventEmitter.on(e,t),()=>{this.internalEventEmitter.removeListener(e,t)})}removeListener(e,t){if(e===`change`){this.changeListeners.delete(t);return}this.internalEventEmitter.removeListener(e,t)}async postRequestAndWait(t){let n;try{t.interactionRequired&&e.l({layout:t.method===e.w.login?`auth`:`signing`}),n=await this.walletMessageManager.postSilkRequest({method:t.method,params:t.params,interactionRequired:t.interactionRequired});let r=await e.o({eventEmitter:this.internalEventEmitter,id:n,method:t.method,interactionRequired:t.interactionRequired,signal:t.signal,timeoutMs:t.timeoutMs,onCancel:()=>{this.walletMessageManager.cancelSilkRequest(n,t.method),t.interactionRequired&&e.c()}});if(r.error)throw Error(r.error.message);return r}catch(r){throw t.interactionRequired&&n===void 0&&e.c(),e.S(r,{chain:`solana`,method:String(t.method),requestId:n})}}notifyChange(e){Array.from(this.changeListeners).forEach(t=>{t(e)})}};function r(e){let t=[];for(let n of e){let e=`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`.indexOf(n);if(e<0)throw Error(`Invalid base58 transaction signature`);for(let n=0;n<t.length;n+=1)e+=t[n]*58,t[n]=e&255,e>>=8;for(;e>0;)t.push(e&255),e>>=8}let n=0;for(;n<e.length&&e[n]===`1`;)n+=1;return new Uint8Array([...Array(n).fill(0),...t.reverse()])}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{S as e,c as t,d as n,f as r,l as i,m as a,o,t as s,v as c,w as l,x as u}from"./UIMessageManager-CtnIZgIY.mjs";import{EventEmitter as d}from"events";var f=class{constructor(e,t={},r,i=t,a=!0){this.ownsSession=a,this.lastKnownConversion=`pending`,this.name=`WaaP`,this.version=`1.0.0`,this.icon=`data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiByeD0iMTYiIGZpbGw9IiMxMTE4MmMiLz48cGF0aCBkPSJNMTYgNDhoMzJMMzIgMTZ6IiBmaWxsPSIjN2NkNGZmIi8+PC9zdmc+`,this._accounts=[],this.accountMode=`tap`,this.loginMethod=null,this._chains=[`solana:mainnet`,`solana:devnet`,`solana:testnet`],this.internalEventEmitter=new d,this.changeListeners=new Set,this.initializerPromise=null,this.initializedIframeWindow=null,this.defaultChain=this.asSupportedChain(t.defaultChain)??`solana:mainnet`,this.walletMessageManager=new n(e,c(t)),this.ensureIframe=r,this.iframeMounted=!r,this.initializerOptions=i,this.uiMessageManager=new s,this.walletMessageManager.addListener({handleResponse:e=>{this.internalEventEmitter.emit(e.id,e)},handleRequest:e=>{e.method===l.show_modal?this.uiMessageManager.emit(`show_modal`):e.method===l.hide_modal&&this.uiMessageManager.emit(`hide_modal`)},onAccountChanged:async()=>{try{let e=await this.refreshAccounts();this.notifyChange({accounts:e.accounts})}catch(e){console.error(`Failed to refresh Solana accounts:`,e),this._accounts=[],this.notifyChange({accounts:[]})}}})}destroy(){this.walletMessageManager.dispose(),this.internalEventEmitter.removeAllListeners(),this.uiMessageManager.removeAllListeners(),this.changeListeners.clear(),this._accounts=[]}ensureIframeMounted(){if(this.iframeMounted||!this.ensureIframe)return;let e=this.ensureIframe();if(!e)throw Error(`Failed to create WaaP iframe`);this.iframeMounted=!0,this.walletMessageManager.setIframeWindow(e)}async preload(){if(!this.ensureIframe)return;this.ensureIframeMounted();let e=this.walletMessageManager.getIframeWindow();if(!e)throw Error(`WaaP iframe is not mounted`);if(this.initializedIframeWindow===e&&this.initializerPromise)return this.initializerPromise;this.initializedIframeWindow=e,this.initializerPromise=a(e,()=>this.selectAccountMode(this.accountMode,this.initializerOptions));try{await this.initializerPromise}catch(e){throw this.initializerPromise=null,this.initializedIframeWindow=null,e}}async ensureInitialized(){await this.preload()}get chains(){return this._chains}get accounts(){return this._accounts}get features(){return{"standard:connect":{version:`1.0.0`,connect:this.connect.bind(this)},"standard:disconnect":{version:`1.0.0`,disconnect:this.disconnect.bind(this)},"standard:events":{version:`1.0.0`,on:this.on.bind(this)},"solana:signMessage":{version:`1.1.0`,signMessage:this.signStandardMessages.bind(this)},"solana:signTransaction":{version:`1.0.0`,supportedTransactionVersions:[`legacy`,0],signTransaction:this.signStandardTransactions.bind(this)},"solana:signAndSendTransaction":{version:`1.0.0`,supportedTransactionVersions:[`legacy`,0],signAndSendTransaction:this.signAndSendStandardTransactions.bind(this)}}}get ui(){return this.uiMessageManager}getAccountStatus(){return{authenticated:this.loginMethod!==null,loginMethod:this.loginMethod,activeMode:this.loginMethod?this.accountMode:null,mode:this.accountMode,conversion:this.loginMethod?this.lastKnownConversion:`not_required`,tap:null,squid:null,accounts:this._accounts[0]?{solana:this._accounts[0].address}:{}}}get session(){return{login:()=>this.login(),logout:()=>this.logout(),getLoginMethod:()=>this.getLoginMethod(),getAccountStatus:()=>this.getCanonicalAccountStatus()}}async getCanonicalAccountStatus(e){await this.ensureInitialized();let t=await this.postRequestAndWait({method:l.waap_getAccountStatus,params:[],interactionRequired:!1,signal:e?.signal,timeoutMs:e?.timeoutMs});if(t.error)throw Error(t.error.message||`Failed to read WaaP status`);let n=t.data;return this.syncLoginMethodFromCanonicalStatus(n),n?.conversion&&(this.lastKnownConversion=n.conversion),n}setAccountMode(e){this.accountMode=e,this.initializerPromise=null,this.initializedIframeWindow=null}async selectAccountMode(e,t={}){await this.walletMessageManager.pingIframe(),await this.postRequestAndWait({method:l.set_signing_mode,params:[r(e,t)],interactionRequired:!1})}setLoginMethod(e){this.loginMethod=e,e===null&&(this._accounts=[],this.notifyChange({accounts:[]}))}getLoginMethod(){return this.loginMethod}async login(e){await this.ensureInitialized();let t=await this.restoreSession(e);if(t)return t;let n=(await this.postRequestAndWait({method:l.login,params:[],interactionRequired:!0,signal:e?.signal,timeoutMs:e?.timeoutMs})).data;return n!==`waap`&&n!==`human`&&n!==`injected`&&n!==`walletconnect`?(this.setLoginMethod(null),null):(this.loginMethod=n,n)}async logout(){this.lastKnownConversion=`pending`,await this.ensureInitialized(),await this.postRequestAndWait({method:l.logout,params:[],interactionRequired:!1}),this.loginMethod=null,this._accounts=[],this.notifyChange({accounts:[]})}async refreshAccounts(){try{await this.ensureInitialized();let e=await this.postRequestAndWait({method:`solana_connect`,params:[{silent:!0}],interactionRequired:!1});if(e.error)return this._accounts=[],{accounts:[]};let t=this.normalizeAccounts(e.data?.accounts||[]);return this._accounts=t,{accounts:this._accounts}}catch{return this._accounts=[],{accounts:[]}}}normalizeAccounts(e){return e.map(e=>({address:e.address,publicKey:e.publicKey instanceof Uint8Array?e.publicKey:new Uint8Array(e.publicKey??[]),chains:e.chains??this._chains,features:e.features??[]}))}async connect(e){if(e?.signal?.aborted)throw new u(`cancelled`,`WaaP connect cancelled.`,{operation:{chain:`solana`,method:`solana_connect`}});if(!this.ownsSession&&!this.loginMethod)throw new u(`not_authenticated`,`Not authenticated: call session.login() before connect().`,{operation:{chain:`solana`,method:`solana_connect`}});if(await this.ensureInitialized(),this.ownsSession&&e?.silent){try{await this.getCanonicalAccountStatus(e)}catch(e){throw this.setLoginMethod(null),e}if(!this.loginMethod)return{accounts:[]}}else if(this.ownsSession&&!await this.login(e))throw new u(`user_rejected`,`User rejected WaaP login during connect().`,{operation:{chain:`solana`,method:`solana_connect`}});let t=await this.postRequestAndWait({method:`solana_connect`,params:[e||{}],interactionRequired:!e?.silent,signal:e?.signal,timeoutMs:e?.timeoutMs});if(t.error)throw Error(t.error.message||`Failed to connect`);let n=this.normalizeAccounts(t.data?.accounts||[]);return this._accounts=n,this.notifyChange({accounts:this._accounts}),e?.silent||this.internalEventEmitter.emit(`connect`),this.internalEventEmitter.emit(`accountsChanged`,this._accounts.map(e=>e.address)),{accounts:this._accounts}}async restoreSession(e){try{let t=await this.getCanonicalAccountStatus(e);if(t.authenticated&&(t.loginMethod===`waap`||t.loginMethod===`human`||t.loginMethod===`injected`||t.loginMethod===`walletconnect`))return this.loginMethod=t.loginMethod,t.loginMethod}catch(e){if(e instanceof u&&(e.code===`cancelled`||e.code===`timeout`))throw e}return null}syncLoginMethodFromCanonicalStatus(e){let t=e.authenticated&&(e.loginMethod===`waap`||e.loginMethod===`human`||e.loginMethod===`injected`||e.loginMethod===`walletconnect`)?e.loginMethod:null;t!==this.loginMethod&&this.setLoginMethod(t)}async disconnect(){await this.ensureInitialized(),await this.postRequestAndWait({method:`solana_disconnect`,params:[],interactionRequired:!1}),this._accounts=[],this.notifyChange({accounts:[]})}async signMessage(e){await this.ensureInitialized();let t=e.account.address;if(!this._accounts.some(e=>e.address===t))throw Error(`Account ${t} is not connected`);let n=await this.postRequestAndWait({method:`solana_signMessage`,params:[{message:Array.from(e.message),account:t}],interactionRequired:!0,signal:e.signal,timeoutMs:e.timeoutMs});if(n.error)throw Error(n.error.message||`Failed to sign message`);return{signedMessage:new Uint8Array(n.data.signedMessage),signature:new Uint8Array(n.data.signature)}}async signTransaction(e){await this.ensureInitialized();let t=e.account.address;if(!this._accounts.some(e=>e.address===t))throw Error(`Account ${t} is not connected`);let n=this.resolveTransactionBytes(e.transaction),r=await this.postRequestAndWait({method:`solana_signTransaction`,params:[{transaction:Array.from(n),account:t,chain:this.asSupportedChain(e.chain)??this.defaultChain,withPT:e.withPT}],interactionRequired:!0,signal:e.signal,timeoutMs:e.timeoutMs});if(r.error)throw Error(r.error.message||`Failed to sign transaction`);return{signedTransaction:new Uint8Array(r.data.signedTransaction),signature:new Uint8Array(r.data.signature)}}async signAndSendTransaction(e){await this.ensureInitialized();let t=e.account.address;if(!this._accounts.some(e=>e.address===t))throw Error(`Account ${t} is not connected`);let n=this.resolveTransactionBytes(e.transaction),r=await this.postRequestAndWait({method:`solana_signAndSendTransaction`,params:[{transaction:Array.from(n),account:t,chain:this.asSupportedChain(e.chain)??this.defaultChain,options:e.options,withPT:e.withPT}],interactionRequired:!0,signal:e.signal,timeoutMs:e.timeoutMs});if(r.error)throw Error(r.error.message||`Failed to sign and send transaction`);return{signature:r.data.signature}}async signStandardMessages(...e){let t=[];for(let n of e){let e=await this.signMessage({account:n.account,message:n.message});t.push({...e,signatureType:`ed25519`})}return t}async signStandardTransactions(...e){let t=[];for(let n of e){let e=await this.signTransaction({account:n.account,transaction:n.transaction,chain:this.asSupportedChain(n.chain)});t.push({signedTransaction:e.signedTransaction})}return t}async signAndSendStandardTransactions(...e){let t=[];for(let n of e){let e=await this.signAndSendTransaction({account:n.account,transaction:n.transaction,chain:this.asSupportedChain(n.chain),options:this.broadcastOptions(n.options)});t.push({signature:p(e.signature)})}return t}asSupportedChain(e){if(e!==void 0){if(this._chains.includes(e))return e;throw new u(`unsupported_input`,`Unsupported Solana Wallet Standard chain: ${e}`,{operation:{chain:`solana`,method:`wallet_standard`}})}}broadcastOptions(e){if(e?.commitment!==void 0)throw new u(`unsupported_input`,`WaaP returns a submitted signature; confirm the transaction with the dapp RPC instead of setting commitment.`,{operation:{chain:`solana`,method:`wallet_standard`}});return e?{preflightCommitment:e.preflightCommitment,minContextSlot:e.minContextSlot,skipPreflight:e.skipPreflight,maxRetries:e.maxRetries}:void 0}async requestPermissionToken(e){await this.ensureInitialized();let t={...e,walletMode:this.accountMode},n=await this.postRequestAndWait({method:l.waap_requestPermissionToken,params:[t],interactionRequired:!0});if(n.error)throw Error(n.error.message||`Failed to request permission token`);return n.data}async getPermissionTokenStatus(e){return await this.ensureInitialized(),(await this.postRequestAndWait({method:l.waap_getPermissionTokenStatus,params:[e],interactionRequired:!1})).data}async clearPermissionToken(e){return await this.ensureInitialized(),(await this.postRequestAndWait({method:l.waap_clearPermissionToken,params:[e],interactionRequired:!1})).data}resolveTransactionBytes(e){if(e instanceof Uint8Array)return e;if(Array.isArray(e))return new Uint8Array(e);if(e&&typeof e.serialize==`function`){let t=e.serialize();return t instanceof Uint8Array?t:new Uint8Array(t)}throw Error(`Unsupported transaction format. Pass serialized bytes or a @solana/web3.js Transaction.`)}on(e,t){return e===`change`?(this.changeListeners.add(t),()=>{this.changeListeners.delete(t)}):(this.internalEventEmitter.on(e,t),()=>{this.internalEventEmitter.removeListener(e,t)})}removeListener(e,t){if(e===`change`){this.changeListeners.delete(t);return}this.internalEventEmitter.removeListener(e,t)}async postRequestAndWait(n){let r;try{n.interactionRequired&&i({layout:n.method===l.login?`auth`:`signing`}),r=await this.walletMessageManager.postSilkRequest({method:n.method,params:n.params,interactionRequired:n.interactionRequired});let e=await o({eventEmitter:this.internalEventEmitter,id:r,method:n.method,interactionRequired:n.interactionRequired,signal:n.signal,timeoutMs:n.timeoutMs,onCancel:()=>{this.walletMessageManager.cancelSilkRequest(r,n.method),n.interactionRequired&&t()}});if(e.error)throw Error(e.error.message);return e}catch(i){throw n.interactionRequired&&r===void 0&&t(),e(i,{chain:`solana`,method:String(n.method),requestId:r})}}notifyChange(e){Array.from(this.changeListeners).forEach(t=>{t(e)})}};function p(e){let t=[];for(let n of e){let e=`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`.indexOf(n);if(e<0)throw Error(`Invalid base58 transaction signature`);for(let n=0;n<t.length;n+=1)e+=t[n]*58,t[n]=e&255,e>>=8;for(;e>0;)t.push(e&255),e>>=8}let n=0;for(;n<e.length&&e[n]===`1`;)n+=1;return new Uint8Array([...Array(n).fill(0),...t.reverse()])}export{f as t};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
//#region src/lib/UIMessageManager.d.ts
|
|
3
|
+
declare enum UI_EVENT_NAMES {
|
|
4
|
+
show_modal = "show_modal",
|
|
5
|
+
hide_modal = "hide_modal"
|
|
6
|
+
}
|
|
7
|
+
declare class UIMessageManager extends EventEmitter {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { UI_EVENT_NAMES as n, UIMessageManager as t };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
//#region src/lib/UIMessageManager.d.ts
|
|
3
|
+
declare enum UI_EVENT_NAMES {
|
|
4
|
+
show_modal = "show_modal",
|
|
5
|
+
hide_modal = "hide_modal"
|
|
6
|
+
}
|
|
7
|
+
declare class UIMessageManager extends EventEmitter {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { UI_EVENT_NAMES as n, UIMessageManager as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{EventEmitter as e}from"events";var t;(function(e){e.request=`request`,e.response=`response`,e.notification=`notification`})(t||={});var n;(function(e){e.eth_requestAccounts=`eth_requestAccounts`,e.eth_accounts=`eth_accounts`,e.eth_sendTransaction=`eth_sendTransaction`,e.eth_signTransaction=`eth_signTransaction`,e.eth_getBalance=`eth_getBalance`,e.personal_sign=`personal_sign`,e.eth_signTypedData_v4=`eth_signTypedData_v4`,e.eth_chainId=`eth_chainId`,e.net_version=`net_version`,e.wallet_switchEthereumChain=`wallet_switchEthereumChain`,e.wallet_addEthereumChain=`wallet_addEthereumChain`,e.eth_estimateGas=`eth_estimateGas`,e.eth_blockNumber=`eth_blockNumber`,e.eth_getCode=`eth_getCode`,e.eth_call=`eth_call`,e.eth_getTransactionReceipt=`eth_getTransactionReceipt`,e.eth_getTransactionByHash=`eth_getTransactionByHash`,e.eth_accountsChanged=`eth_accountsChanged`,e.sui_connect=`sui_connect`,e.sui_disconnect=`sui_disconnect`,e.sui_getAccounts=`sui_getAccounts`,e.sui_signPersonalMessage=`sui_signPersonalMessage`,e.sui_signTransaction=`sui_signTransaction`,e.sui_signAndExecuteTransaction=`sui_signAndExecuteTransaction`,e.sui_switchChain=`sui_switchChain`,e.show_modal=`show_modal`,e.hide_modal=`hide_modal`,e.login=`login`,e.auto_conn=`auto_conn`,e.logout=`logout`,e.set_points_referral_code=`set_points_referral_code`,e.set_project=`set_project`,e.silk_requestEmail=`silk_requestEmail`,e.silk_requestSbt=`silk_requestSbt`,e.set_custom_config=`set_custom_config`,e.safe=`safe`,e.set_is_mobile=`set_is_mobile`,e.project_init=`project_init`,e.gastank_get_settings=`gastank_get_settings`,e.gastank_update_settings=`gastank_update_settings`,e.gastank_topup=`gastank_topup`,e.customization_get=`customization_get`,e.customization_update=`customization_update`,e.orcid=`orcid`,e.waap_requestPermissionToken=`waap_requestPermissionToken`,e.waap_getAccountStatus=`waap_getAccountStatus`,e.waap_getPermissionTokenStatus=`waap_getPermissionTokenStatus`,e.waap_clearPermissionToken=`waap_clearPermissionToken`,e.waap_getLinkedAddresses=`waap_getLinkedAddresses`,e.waap_linkAddress=`waap_linkAddress`,e.waap_unlinkAddress=`waap_unlinkAddress`,e.waap_getLinkAddressNonce=`waap_getLinkAddressNonce`,e.solana_connect=`solana_connect`,e.solana_disconnect=`solana_disconnect`,e.solana_signMessage=`solana_signMessage`,e.solana_signTransaction=`solana_signTransaction`,e.solana_signAllTransactions=`solana_signAllTransactions`,e.solana_signAndSendTransaction=`solana_signAndSendTransaction`,e.stellar_connect=`stellar_connect`,e.stellar_disconnect=`stellar_disconnect`,e.stellar_signMessage=`stellar_signMessage`,e.stellar_signTransaction=`stellar_signTransaction`,e.stellar_signAndSendTransaction=`stellar_signAndSendTransaction`,e.set_signing_mode=`set_signing_mode`,e.enter_lite_mode=`enter_lite_mode`})(n||={});var r;(function(e){e.eth_requestAccounts=`eth_requestAccounts`,e.eth_accounts=`eth_accounts`,e.eth_sendTransaction=`eth_sendTransaction`,e.eth_signTransaction=`eth_signTransaction`,e.eth_getBalance=`eth_getBalance`,e.personal_sign=`personal_sign`,e.eth_signTypedData_v4=`eth_signTypedData_v4`,e.eth_chainId=`eth_chainId`,e.net_version=`net_version`,e.wallet_switchEthereumChain=`wallet_switchEthereumChain`,e.wallet_addEthereumChain=`wallet_addEthereumChain`,e.eth_estimateGas=`eth_estimateGas`,e.eth_blockNumber=`eth_blockNumber`,e.eth_getCode=`eth_getCode`,e.eth_call=`eth_call`,e.eth_getTransactionReceipt=`eth_getTransactionReceipt`,e.eth_getTransactionByHash=`eth_getTransactionByHash`})(r||={});var i;(function(e){e.ready=`ready`,e.connect=`connect`,e.account_changed=`account_changed`,e.mobile_oauth_success=`mobile_oauth_success`,e.mobile_oauth_error=`mobile_oauth_error`,e.tx_pending=`waap_txPending`,e.tx_2fa_required=`waap_tx2faRequired`,e.tx_signed=`waap_txSigned`,e.tx_confirmed=`waap_txConfirmed`,e.tx_failed=`waap_txFailed`,e.squid_pending=`waap_squid_pending`,e.squid_ready=`waap_squid_ready`,e.squid_failed=`waap_squid_failed`,e.request_cancel=`waap_requestCancel`})(i||={});var a=class extends Error{constructor(e,t,n={}){super(t),this.name=`WaaPError`,this.code=e,this.operation=n.operation,this.cause=n.cause}};function o(e,t){if(e instanceof a)return e;let n=e&&typeof e==`object`?e:void 0,r=n&&typeof n.message==`string`&&n.message||e instanceof Error&&e.message||String(e||`WaaP request failed`),i=n?.code,o=r.toLowerCase();return new a(o.includes(`cancelled`)||o.includes(`canceled`)?`cancelled`:o.includes(`timed out`)?`timeout`:o.includes(`insufficient balance`)?`insufficient_balance`:o.includes(`policy`)||o.includes(`permission token`)?`policy_rejected`:i===4001||o.includes(`rejected`)?`user_rejected`:o.includes(`not connected`)?`not_connected`:o.includes(`not authenticated`)||o.includes(`log in first`)?`not_authenticated`:o.includes(`unsupported`)||o.includes(`must be base64`)?`unsupported_input`:n?`wallet_error`:`unknown`,r,{cause:e,operation:t})}const s=`waap-wallet`,c=`waap-component-container`,l=typeof window<`u`&&typeof document<`u`&&typeof HTMLElement<`u`;let u;l?(u=class extends HTMLElement{constructor(){super()}connectedCallback(){(!this.style.display||this.style.display===``)&&(this.style.display=`flex`,this.style.alignItems=`center`,this.style.justifyContent=`center`),(!this.style.width||this.style.width===``)&&(this.style.width=`100%`),(!this.style.height||this.style.height===``)&&(this.style.height=`100%`),this.id=c,this.setAttribute(`data-waap-mounted`,`true`)}disconnectedCallback(){this.removeAttribute(`data-waap-mounted`)}},typeof customElements<`u`&&!customElements.get(s)&&customElements.define(s,u)):u=class{};function d(){return l?!!document.getElementById(c)||!!document.querySelector(s):!1}function f(){return l?document.getElementById(c)||document.querySelector(s):null}const p=`https://staging.waap.xyz`,m={development:`http://localhost:3000`,staging:p,production:`https://waap.xyz`},ee=e=>e===`localhost`||e===`127.0.0.1`||e===`[::1]`;function h(e){let t;try{t=new URL(e)}catch{throw Error(`Invalid WaaP wallet origin: ${e}`)}if(t.origin!==e||t.pathname!==`/`||t.search||t.hash||t.username||t.password)throw Error(`WaaP walletOrigin must be an absolute origin without a path, query, or credentials`);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&ee(t.hostname)))throw Error(`WaaP walletOrigin must use HTTPS unless it is a loopback host`);return t.origin}function g(e={}){return e.walletOrigin?h(e.walletOrigin):e.environment?h(m[e.environment]):e.useStaging?h(p):h(m.production)}const _=new WeakMap,v=new WeakMap,y=()=>typeof performance<`u`?performance.now():Date.now(),b=e=>({generation:e.generation,navigationStartedAt:e.navigationStartedAt,loadedAt:e.loadedAt}),x=e=>{let t=e.contentWindow;if(!t)return;let n=v.get(e);if(n&&_.get(t)===n)return;n?.cleanup(),n&&(v.delete(e),_.get(t)===n&&_.delete(t));let r=_.get(t);if(r?.iframe===e)return;r?.cleanup(),r&&v.delete(r.iframe);let i={iframe:e,generation:0,navigationStartedAt:y(),loadedAt:null,listeners:new Set,cleanup:()=>{}},a=()=>{i.generation+=1,i.loadedAt=y();let e=b(i);for(let t of Array.from(i.listeners))t(e)};i.cleanup=()=>{e.removeEventListener(`load`,a),i.listeners.clear()},e.addEventListener(`load`,a),_.set(t,i),v.set(e,i)},te=e=>{let t=v.get(e);if(t){t.cleanup(),v.delete(e);let n=e.contentWindow;n&&_.get(n)===t&&_.delete(n);return}let n=e.contentWindow;if(!n)return;let r=_.get(n);!r||r.iframe!==e||(r.cleanup(),_.delete(n))},S=e=>{let t=_.get(e);return t?b(t):null},ne=(e,t)=>{let n=_.get(e);return n?n.loadedAt===null?new Promise((e,r)=>{let i=window.setTimeout(()=>{n.listeners.delete(a),r(Error(`WaaP iframe navigation timed out after ${Math.round(t/1e3)}s.`))},t),a=t=>{window.clearTimeout(i),n.listeners.delete(a),e(t)};n.listeners.add(a)}):Promise.resolve(b(n)):Promise.resolve(null)},re=(e,t)=>{let n=_.get(e);return n?(n.listeners.add(t),()=>n.listeners.delete(t)):()=>{}},C=`waap-wallet-loading-styles`,w=`waap-iframe-visual-ready`,T=typeof window<`u`&&typeof document<`u`,ie=()=>{if(!T||document.getElementById(C))return;let e=document.createElement(`style`);e.id=C,e.textContent=`@keyframes waap-loading-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } @media (prefers-reduced-motion: reduce) { [data-waap-loading-part] { animation: none !important; } }`,document.head.appendChild(e)},ae=(e={})=>g(e),E=()=>T?document.getElementById(`waap-wallet-iframe-container`)||document.getElementById(`silk-wallet-iframe-container`):null,D=()=>T?document.getElementById(`waap-wallet-iframe-wrapper`)||document.getElementById(`silk-wallet-iframe-wrapper`):null,O=()=>T?document.getElementById(`waap-wallet-iframe`)||document.getElementById(`silk-wallet-iframe`):null,k=(e=O())=>{let t=Number(e?.dataset.waapVisualRevision??`0`);return Number.isSafeInteger(t)&&t>=0?t:0},oe=(e=O())=>{let t=e?.dataset.waapVisualReadySupported;return t===`true`||t!==`false`&&null},A=(e,t)=>{if(e){if(t===null){delete e.dataset.waapVisualReadySupported;return}e.dataset.waapVisualReadySupported=String(t)}},se=(e,t)=>{let n=e.__silkCleanup;e.__silkCleanup=()=>{n?.(),t()}},ce=e=>{let t=O();if(!t)throw Error(`WaaP iframe does not exist on page`);let n=t.dataset.waapAccountMode;if(n&&n!==e)throw Error(`WaaP iframe is already bound to ${n}; destroy it before initializing ${e}.`);return t.dataset.waapAccountMode=e,t},le=e=>{if(T)try{if(document.querySelector(`link[data-waap-preconnect="${e}"]`))return;let t=document.createElement(`link`);t.rel=`preconnect`,t.href=e,t.crossOrigin=`anonymous`,t.setAttribute(`data-waap-preconnect`,e),document.head.appendChild(t);let n=document.createElement(`link`);n.rel=`dns-prefetch`,n.href=e,n.setAttribute(`data-waap-preconnect`,e),document.head.appendChild(n)}catch{}},ue=(e,t)=>{e.dataset.waapTheme=t?`dark`:`light`},de=(e,t)=>{let n=e;le(n);let r=document.createElement(`iframe`);return r.id=`waap-wallet-iframe`,r.dataset.waapOrigin=n,ue(r,t),x(r),r.src=`${n}/iframe`,r.allow=`publickey-credentials-get; publickey-credentials-create`,r.style.width=`100%`,r.style.height=`100%`,r.style.border=`none`,r.style.borderRadius=`24px`,r.style.backgroundColor=`transparent`,r.style.background=`transparent`,r.style.padding=`0`,r.style.margin=`0`,r},fe=()=>{let e=document.createElement(`div`);return e.id=`waap-wallet-iframe-wrapper`,e.style.position=`relative`,e.style.display=`flex`,e.style.alignItems=`center`,e.style.justifyContent=`center`,e.style.padding=`0`,e.style.margin=`0`,e.style.height=`600px`,e.style.width=`380px`,e},pe=()=>{let e=document.createElement(`div`);return e.id=`waap-wallet-iframe-container`,e.style.position=`fixed`,e.style.top=`0`,e.style.left=`0`,e.style.right=`0`,e.style.bottom=`0`,e.style.width=`100%`,e.style.height=`100%`,e.style.alignItems=`center`,e.style.justifyContent=`center`,e.style.backgroundColor=`rgba(0, 0, 0, 0.5)`,e.style.zIndex=`9999999999`,e.style.display=`flex`,e.style.visibility=`hidden`,e.style.opacity=`0`,e.style.pointerEvents=`none`,e.style.transition=typeof window<`u`&&window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`none`:`opacity 140ms ease`,e},me=(e,t)=>{let n=e,r,i,a,o,s=()=>{if(r=void 0,!o)return;let e=D();e&&e.dataset.waapSizeLocked!==`true`&&(i=o.width,a=o.height,e.style.height=`${o.height}px`,e.style.width=`${o.width}px`,o=void 0)},c=()=>{r===void 0&&(r=window.requestAnimationFrame(s))},l=()=>{!o&&i!==void 0&&a!==void 0&&(o={width:i,height:a}),c()},u=e=>{if(e.origin!==n||e.source!==t.contentWindow||!e.data||typeof e.data!=`object`||e.data.type!==`silk-iframe-size`)return;let r=e.data.height,s=e.data.width,l=2e3;if(typeof r!=`number`||typeof s!=`number`||r<50||r>l||s<50||s>l||!Number.isFinite(r)||!Number.isFinite(s))return;let u=Math.floor(s),d=Math.floor(r);u===i&&d===a||(o={width:u,height:d},c())};window.addEventListener(`message`,u),t.addEventListener(w,l);let d=()=>{r!==void 0&&window.cancelAnimationFrame(r),window.removeEventListener(`message`,u),t.removeEventListener(w,l)};return se(t,d),d},j=(e,t)=>{let n=()=>{delete t.dataset.waapVisualRevision,delete t.dataset.waapVisualReadyAt,A(t,null)},r=n=>{if(n.origin!==e||n.source!==t.contentWindow||!n.data||typeof n.data!=`object`||n.data.type!==`silk-iframe-visual-ready`)return;let r=n.data.revision;!Number.isSafeInteger(r)||r<=0||r<=k(t)||(t.dataset.waapVisualRevision=String(r),t.dataset.waapVisualReadyAt=String(typeof performance<`u`?performance.now():Date.now()),t.dispatchEvent(new CustomEvent(w,{detail:{revision:r}})))};t.addEventListener(`load`,n),window.addEventListener(`message`,r);let i=()=>{t.removeEventListener(`load`,n),window.removeEventListener(`message`,r)};return se(t,i),i},M=()=>{setTimeout(()=>{if(typeof document>`u`)return;let e=D();e&&(e.style.height=`600px`,e.style.width=`380px`)},100)},N=e=>{let t=O();if(!t)return!1;let n=t.dataset.waapOrigin??(()=>{try{return new URL(t.src).origin}catch{return}})();if(n&&n!==e)throw Error(`WaaP wallet iframe already exists for ${n}; destroy it before switching to ${e}`);return!0},he=(e,t)=>{let n=f();if(!n)throw Error(`WaaP component not found in DOM`);if(N(e))return;let r=fe(),i=de(e,t);me(e,i),j(e,i),M(),r.appendChild(i),n.appendChild(r),x(i)},ge=(e,t)=>{if(N(e))return;let n=pe(),r=fe();n.appendChild(r);let i=de(e,t);me(e,i),j(e,i),M(),r.appendChild(i),document.body.appendChild(n),x(i)},_e=(e={})=>{if(!T)return;ie();let t=ae(e),n=e.config?.styles?.darkMode===!0,r=O();r&&ue(r,n),d()?he(t,n):ge(t,n)},ve=()=>{if(!T)return;Ne();let e=O(),t=e?.__silkCleanup;typeof t==`function`&&t(),e&&te(e);let n=D(),r=E();r?r.remove():n?.remove(),document.querySelectorAll(`link[data-waap-preconnect]`).forEach(e=>{e.remove()})};let P=0;async function ye(e){let t=Date.now().toString(),n=new TextEncoder().encode(JSON.stringify(e)+t),r=globalThis.crypto;if(r?.subtle?.digest){let e=await r.subtle.digest(`SHA-256`,new Uint8Array(n));return F(new Uint8Array(e))}return P+=1,F(new TextEncoder().encode(`${t}:${P}:${Math.random()}:${JSON.stringify(e)}`)).padEnd(64,`0`).slice(0,64)}function F(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}const I=new WeakMap,be=(e,t)=>{let n=I.get(e);if(n)return n;let r=t();return I.set(e,r),r.catch(()=>{I.get(e)===r&&I.delete(e)}),r},xe=e=>{I.delete(e)};let L=null;const Se=(e,t)=>{L={platform:e,version:t}},Ce=(e,t={})=>({schemaVersion:1,accountMode:e,sessionProtection:`dpop`,sdkPlatform:L?.platform??`web`,sdkVersion:L?.version??`2.4.1`,relyingPartySource:`browser-origin`,...t.project?.appId?{appId:t.project.appId}:{},...t.chains?.length?{chains:t.chains}:{},parentOrigin:typeof window>`u`?void 0:window.location?.origin,...t.referralCode?{referralCode:t.referralCode}:{},...t.project?{project:t.project}:{},...t.config?{config:t.config}:{}}),R=new Set;let z=!1,B;const V=new WeakMap,we=(e=256)=>{let t=new Set;return{accept(n){if(t.has(n))return!1;if(t.add(n),t.size>e){let e=t.values().next().value;e&&t.delete(e)}return!0},clear(){t.clear()},size(){return t.size}}},H=e=>{let t=V.get(e);if(t)return t;let n={ready:!1,promise:null,reject:null,cleanup:null,navigationGeneration:null,readyPingStartedAt:null,readyAt:null,readyAttempts:0,visualReadySupported:null,lastError:null};return V.set(e,n),n},U=(e,t)=>{let n=V.get(e);if(!n)return;n.ready=!1,n.cleanup?.(),n.cleanup=null;let r=n.reject;n.reject=null,n.promise=null,n.navigationGeneration=null,n.visualReadySupported=null;let i=O();i?.contentWindow===e&&A(i,null),r?.(t)},W=()=>typeof performance<`u`?performance.now():Date.now();let G=null;const K=new Set,Te=()=>{for(let e of K)if(!e.isDisposed())return e.getHandshakeDiagnostics();return G},Ee=(e,n,r)=>{let{handleResponse:a,handleRequest:o,onReceiveConnectNotif:s,onAccountChanged:c,onAsyncTxNotification:l,onSquidLifecycleNotification:u,onAuthComplete:d}=r;if(e.origin===n.walletOrigin&&e.source===n.getIframeWindow()&&e.data?.target===`silk`)if(e.data?.messageType===t.request)o?.(e.data);else if(e.data?.messageType===t.response){if(a){let t=e.data;n.shouldHandleTerminalResponse(t.id)&&a(t)}}else e.data?.messageType===t.notification&&(e.data?.data===i.connect?s?.():e.data?.data?.type===i.account_changed&&c?c(e.data.data.account):(e.data?.data?.type?.startsWith(`waap_sign_`)||e.data?.data?.type?.startsWith(`waap_tx_`))&&l?l({type:e.data.data.type,payload:e.data.data.payload}):(e.data?.data===i.mobile_oauth_success||e.data?.data===i.mobile_oauth_error)&&d?d(e.data.data===i.mobile_oauth_success?`success`:`error`):e.data?.data?.type?.startsWith(`waap_squid_`)&&u&&u({type:e.data.data.type,payload:e.data.data.payload}))},De=()=>{z||typeof window>`u`||(z=!0,B=e=>{for(let{manager:t,config:n}of Array.from(R))Ee(e,t,n)},window.addEventListener(`message`,B))},Oe=()=>{R.size>0||!z||!B||typeof window>`u`||(window.removeEventListener(`message`,B),B=void 0,z=!1)};var ke=class{constructor(e,t){this.iframeWindow=null,this.unregisterListeners=new Set,this.terminalResponseDeduper=we(),this.unsubscribeIframeNavigation=null,this.disposed=!1,this.iframeWindow=e,this.walletOrigin=typeof t==`string`?t:g(t===!0?{useStaging:!0}:{}),e&&this.observeIframeNavigation(e),K.add(this)}observeIframeNavigation(e){this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=re(e,()=>{let t=H(e);(t.ready||t.readyPingStartedAt!==null)&&(xe(e),U(e,Error(`WaaP iframe reloaded; readiness must be re-established`)),this.terminalResponseDeduper.clear())})}setIframeWindow(e){this.iframeWindow&&this.iframeWindow!==e&&(U(this.iframeWindow,Error(`Wallet iframe window changed`)),this.terminalResponseDeduper.clear()),this.iframeWindow=e,this.observeIframeNavigation(e)}getIframeWindow(){return this.iframeWindow}isDisposed(){return this.disposed}shouldHandleTerminalResponse(e){return this.terminalResponseDeduper.accept(e)}getHandshakeDiagnostics(){let e=this.iframeWindow,t=e?S(e):null,n=e?H(e):null,r={walletOrigin:this.walletOrigin,iframeNavigationStartedAt:t?.navigationStartedAt??null,iframeLoadedAt:t?.loadedAt??null,readyPingStartedAt:n?.readyPingStartedAt??null,readyAt:n?.readyAt??null,readyAttempts:n?.readyAttempts??0,visualReadySupported:n?.visualReadySupported??null,navigationGeneration:n?.navigationGeneration??null,lastError:n?.lastError??null};return G=r,r}postSilkNotification(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);this.iframeWindow.postMessage({target:`silk`,messageType:t.notification,data:e},this.walletOrigin)}postReadyNotification(){this.postSilkNotification(i.ready)}postConnectNotification(){this.postSilkNotification(i.connect)}cancelSilkRequest(e,t){this.postSilkNotification({type:i.request_cancel,requestId:e,method:t})}pingIframe(){if(this.disposed)return Promise.reject(Error(`Wallet message manager is disposed`));let e=this.iframeWindow;if(!e||typeof window>`u`)return Promise.reject(Error(`WaaP iframe is not mounted`));let n=H(e),r=S(e);return n.ready&&(!r||n.navigationGeneration===r.generation)?Promise.resolve():(n.ready&&U(e,Error(`WaaP iframe navigation changed; readiness must be re-established`)),n.promise?n.promise:(n.lastError=null,n.readyPingStartedAt=null,n.readyAt=null,n.readyAttempts=0,n.visualReadySupported=null,n.promise=new Promise((r,a)=>{n.reject=a,ne(e,3e4).then(r=>{if(this.disposed||this.iframeWindow!==e)throw Error(`Wallet message manager is disposed`);return new Promise((a,o)=>{let s=o=>{if(o.origin===this.walletOrigin&&o.source===e&&o.data?.target===`silk`&&o.data.messageType===t.notification&&o.data.data===i.ready){n.ready=!0,n.navigationGeneration=S(e)?.generation??r?.generation??null,n.readyAt=W(),n.visualReadySupported=o.data?.capabilities?.visualReady===1;let t=O();t?.contentWindow===e&&A(t,n.visualReadySupported),p(),a()}},c=()=>{try{n.readyAttempts+=1,this.postReadyNotification()}catch(e){p(),o(e)}};n.readyPingStartedAt=W();let l=250,u,d=()=>{u=window.setTimeout(()=>{c(),l=Math.min(l*2,1e3),d()},l)},f=window.setTimeout(()=>{p(),o(Error(`WaaP wallet ready handshake timed out after 10s.`))},1e4),p=()=>{u!==void 0&&window.clearTimeout(u),window.clearTimeout(f),window.removeEventListener(`message`,s),n.cleanup===p&&(n.cleanup=null,n.reject=null)};n.cleanup=p,n.reject=o,window.addEventListener(`message`,s),c(),d()})}).then(r,a)}),n.promise=n.promise.finally(()=>{n.ready||(n.lastError=n.lastError??`Wallet readiness failed`,n.promise=null)}),n.promise.catch(e=>{n.lastError=e instanceof Error?e.message:String(e)}),n.promise))}async postSilkRequest(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);let{silkOptions:n,...r}=e,i={...r,target:`silk`,messageType:t.request,...n&&{silkOptions:n}},a=await ye(i);return this.iframeWindow.postMessage({...i,id:a},this.walletOrigin),a}addListener(e){if(this.disposed)throw Error(`Wallet message manager is disposed`);De();let t={manager:this,config:e};R.add(t);let n=()=>{this.unregisterListeners.delete(n)&&(R.delete(t),Oe())};return this.unregisterListeners.add(n),n}dispose(){this.disposed||(this.disposed=!0,this.iframeWindow&&U(this.iframeWindow,Error(`Wallet message manager was disposed`)),Array.from(this.unregisterListeners).forEach(e=>e()),this.terminalResponseDeduper.clear(),this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=null,G=this.getHandshakeDiagnostics(),this.iframeWindow=null,K.delete(this))}};const q=`waap-wallet-iframe-loading`,J=new Set,Y=()=>typeof performance<`u`?performance.now():Date.now(),X=e=>{J.forEach(t=>{try{t(e)}catch{}})},Ae=e=>(J.add(e),()=>J.delete(e));var je=class{constructor(e){this.pendingRevision=null,this.phase=`idle`,this.requestedAt=null,this.visibleAt=null,this.usedVisualFallback=!1,this.onVisualReady=e=>{let t=e.detail?.revision;this.pendingRevision!==null&&typeof t==`number`&&t>=this.pendingRevision&&this.revealIframe(!1)},this.iframe=e,e.addEventListener(w,this.onVisualReady)}show({layout:e=`signing`}={}){if(this.phase===`pending`||this.phase===`visible`)return;let t=D();if(!t)return;this.clearFallbackTimer();let n=this.moveToCurrentMode(t);n===`modal`&&e===`signing`?(t.dataset.waapSizeLocked=`true`,t.style.width=`380px`,t.style.height=`600px`):n===`modal`&&delete t.dataset.waapSizeLocked,this.pendingRevision=k(this.iframe)+1,this.phase=`pending`,this.requestedAt=Y(),this.visibleAt=null,this.usedVisualFallback=!1,X({phase:`modal_requested`,at:this.requestedAt,visualRevision:this.pendingRevision}),this.hideIframeUntilPaint(t),n===`modal`?this.showModalSurface():t.style.display=`flex`;let r=oe(this.iframe);if(r===!1){this.revealIframe(!0);return}this.fallbackTimer=window.setTimeout(()=>{this.revealIframe(!0)},r===!0?3e3:750)}hide(){let e=this.pendingRevision!==null;this.pendingRevision=null,this.clearFallbackTimer(),this.phase=`hidden`;let t=Y();e&&X({phase:`modal_cancelled`,at:t,visualRevision:k(this.iframe)}),X({phase:`modal_hidden`,at:t,visualRevision:k(this.iframe)});let n=D();if(n&&delete n.dataset.waapSizeLocked,d()){n&&(n.style.display=`none`);return}let r=E();r&&(r.style.opacity=`0`,r.style.visibility=`hidden`,r.style.pointerEvents=`none`)}dispose(){this.clearFallbackTimer(),this.iframe.removeEventListener(w,this.onVisualReady)}isFor(e){return this.iframe===e}getDiagnostics(){return{modalPhase:this.phase,modalRequestedAt:this.requestedAt,modalVisibleAt:this.visibleAt,usedVisualFallback:this.usedVisualFallback}}moveToCurrentMode(e){if(d()){let t=f();return t&&e.parentElement!==t&&t.appendChild(e),`component`}let t=E();return t||(t=pe(),document.body.appendChild(t)),e.parentElement!==t&&t.appendChild(e),`modal`}showModalSurface(){let e=E();e&&(e.style.display=`flex`,e.style.visibility=`visible`,e.style.opacity=`1`,e.style.pointerEvents=`auto`)}hideIframeUntilPaint(e){e.style.display=`flex`,e.style.visibility=`visible`,e.style.opacity=`1`,e.style.pointerEvents=`auto`,this.iframe.style.visibility=`hidden`,this.iframe.style.opacity=`0`,this.iframe.style.pointerEvents=`none`,this.ensureLoadingIndicator(e).style.display=`flex`}revealIframe(e){if(this.pendingRevision===null)return;let t=k(this.iframe);this.pendingRevision=null,this.clearFallbackTimer(),this.phase=`visible`,this.visibleAt=Y(),this.usedVisualFallback=e,X({phase:`modal_visible`,at:this.visibleAt,visualRevision:t,fallback:e});let n=D();if(!n)return;delete n.dataset.waapSizeLocked;let r=n.querySelector(`#${q}`);r&&(r.style.display=`none`),this.iframe.style.visibility=`visible`,this.iframe.style.opacity=`1`,this.iframe.style.pointerEvents=`auto`,n.style.visibility=`visible`,n.style.opacity=`1`,n.style.pointerEvents=`auto`}ensureLoadingIndicator(e){let t=e.querySelector(`#${q}`);if(t)return this.applyLoadingTheme(t),t;t=document.createElement(`div`),t.id=q,t.setAttribute(`role`,`status`),t.setAttribute(`aria-live`,`polite`),t.setAttribute(`aria-label`,`Loading WaaP wallet`),t.style.position=`absolute`,t.style.inset=`0`,t.style.zIndex=`1`,t.style.display=`none`,t.style.flexDirection=`column`,t.style.borderRadius=`24px`,t.style.fontFamily=`system-ui, sans-serif`,t.style.fontSize=`14px`,t.style.pointerEvents=`none`;let n=document.createElement(`div`);n.style.boxSizing=`border-box`,n.style.display=`flex`,n.style.flexDirection=`column`,n.style.width=`100%`,n.style.height=`100%`,n.style.padding=`24px`;let r=document.createElement(`img`),i=this.iframe.dataset.waapOrigin;i&&(r.src=`${i}/assets/svg/waaplogo.svg`),r.alt=`WaaP`,r.width=66,r.height=25,r.style.alignSelf=`center`,r.style.width=`66px`,r.style.height=`25px`,r.style.marginBottom=`20px`,r.dataset.waapLoadingLogo=`true`;let a=(e,t,n,r)=>{let i=document.createElement(`div`);return i.setAttribute(`aria-hidden`,`true`),i.dataset.waapLoadingPart=e,i.style.width=t,i.style.height=n,i.style.flexShrink=`0`,i.style.borderRadius=r,i.style.backgroundSize=`200% 100%`,i.style.animation=`waap-loading-shimmer 2.4s ease-in-out infinite`,i},o=a(`request-title`,`156px`,`16px`,`999px`);o.style.marginTop=`34px`;let s=a(`request-body`,`100%`,`220px`,`12px`);s.style.flex=`1`,s.style.marginTop=`18px`,s.style.opacity=`.58`;let c=document.createElement(`div`);return c.dataset.waapLoadingPart=`actions`,c.setAttribute(`aria-hidden`,`true`),c.style.display=`flex`,c.style.gap=`10px`,c.append(a(`cancel-action`,`calc(50% - 5px)`,`48px`,`12px`),a(`confirm-action`,`calc(50% - 5px)`,`48px`,`12px`)),n.append(r,o,s,c),t.appendChild(n),e.appendChild(t),this.applyLoadingTheme(t),t}applyLoadingTheme(e){let t=this.iframe.dataset.waapTheme===`dark`;e.dataset.waapTheme=t?`dark`:`light`,e.style.background=t?`#121212`:`#ffffff`,e.style.color=t?`#e6e6e6`:`#000000`;let n=e.querySelector(`[data-waap-loading-logo]`);n&&(n.style.filter=t?`invert(1)`:`none`);let r=t?`linear-gradient(90deg, rgba(255,255,255,.07), rgba(255,255,255,.14), rgba(255,255,255,.07))`:`linear-gradient(90deg, rgba(0,0,0,.05), rgba(0,0,0,.1), rgba(0,0,0,.05))`;e.querySelectorAll(`[data-waap-loading-part]`).forEach(e=>{e.style.background=r})}clearFallbackTimer(){this.fallbackTimer!==void 0&&(window.clearTimeout(this.fallbackTimer),this.fallbackTimer=void 0)}};let Z;const Q=()=>{let e=O();return e?(Z&&!Z.isFor(e)&&(Z.dispose(),Z=void 0),Z??=new je(e),Z):null},Me=e=>{Q()?.show(e)},$=()=>{Q()?.hide()},Ne=()=>{Z?.dispose(),Z=void 0},Pe=()=>{let e=O(),t=e?.contentWindow?S(e.contentWindow):null,n=Z?.getDiagnostics(),r=Number(e?.dataset.waapVisualReadyAt??``);return{walletOrigin:e?.dataset.waapOrigin??null,iframeNavigationStartedAt:t?.navigationStartedAt??null,iframeLoadedAt:t?.loadedAt??null,visualRevision:k(e),visualReadyAt:Number.isFinite(r)?r:null,modalPhase:n?.modalPhase??`idle`,modalRequestedAt:n?.modalRequestedAt??null,modalVisibleAt:n?.modalVisibleAt??null,usedVisualFallback:n?.usedVisualFallback??!1,handshake:Te()}},Fe=new Set([r.eth_sendTransaction,r.eth_signTransaction,r.personal_sign,r.eth_signTypedData_v4]),Ie=e=>Fe.has(e);function Le(e){return new Promise((t,n)=>{let r,i=!1,a=()=>{r!==void 0&&clearTimeout(r),e.eventEmitter.removeListener(e.id,o),e.signal?.removeEventListener(`abort`,c)},o=e=>{i||(i=!0,a(),t(e))},s=t=>{i||(i=!0,a(),e.onCancel?.(),n(Error(t)))},c=()=>s(`WaaP request cancelled: ${e.method}`);if(e.signal?.aborted){c();return}e.interactionRequired||(r=setTimeout(()=>{s(`WaaP request timed out: ${e.method}`)},e.timeoutMs??3e4)),e.eventEmitter.once(e.id,o),e.signal?.addEventListener(`abort`,c,{once:!0})})}function Re(e){if(typeof e!=`object`||!e)return e;try{e.waapCode=o(e).code}catch{}return e}async function ze(e,t,r,i,a){let o=e.method,s=e.params,{timeoutMs:c,signal:l,...u}=a??{};t&&Me({layout:o===n.login?`auth`:`signing`});let d;try{d=await r.postSilkRequest({method:o,params:s,interactionRequired:t,silkOptions:a?u:void 0});let e=await Le({eventEmitter:i,id:d,method:o,interactionRequired:t,timeoutMs:c,signal:l,onCancel:()=>{r.cancelSilkRequest(d,o),t&&$()}});if(t&&$(),e.error)throw Re(e.error);return e.data}catch(e){throw t&&d===void 0&&$(),e}}const Be=(e,t={})=>{if(typeof window>`u`)return()=>void 0;let n=!1,r,i,a=window,o=()=>{n||e.preload().catch(e=>t.onError?.(e))};return typeof a.requestIdleCallback==`function`?r=a.requestIdleCallback(o,{timeout:t.timeoutMs??2e3}):i=window.setTimeout(o,0),()=>{n=!0,r!==void 0&&a.cancelIdleCallback?.(r),i!==void 0&&window.clearTimeout(i)}};var Ve=function(e){return e.show_modal=`show_modal`,e.hide_modal=`hide_modal`,e}(Ve||{}),He=class extends e{constructor(){super()}};export{r as C,o as S,ve as _,Ie as a,u as b,$ as c,ke as d,Ce as f,_e as g,ce as h,ze as i,Me as l,be as m,Ve as n,Le as o,Se as p,Be as r,Pe as s,He as t,Ae as u,g as v,n as w,a as x,h as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require("events");var t;(function(e){e.request=`request`,e.response=`response`,e.notification=`notification`})(t||={});var n;(function(e){e.eth_requestAccounts=`eth_requestAccounts`,e.eth_accounts=`eth_accounts`,e.eth_sendTransaction=`eth_sendTransaction`,e.eth_signTransaction=`eth_signTransaction`,e.eth_getBalance=`eth_getBalance`,e.personal_sign=`personal_sign`,e.eth_signTypedData_v4=`eth_signTypedData_v4`,e.eth_chainId=`eth_chainId`,e.net_version=`net_version`,e.wallet_switchEthereumChain=`wallet_switchEthereumChain`,e.wallet_addEthereumChain=`wallet_addEthereumChain`,e.eth_estimateGas=`eth_estimateGas`,e.eth_blockNumber=`eth_blockNumber`,e.eth_getCode=`eth_getCode`,e.eth_call=`eth_call`,e.eth_getTransactionReceipt=`eth_getTransactionReceipt`,e.eth_getTransactionByHash=`eth_getTransactionByHash`,e.eth_accountsChanged=`eth_accountsChanged`,e.sui_connect=`sui_connect`,e.sui_disconnect=`sui_disconnect`,e.sui_getAccounts=`sui_getAccounts`,e.sui_signPersonalMessage=`sui_signPersonalMessage`,e.sui_signTransaction=`sui_signTransaction`,e.sui_signAndExecuteTransaction=`sui_signAndExecuteTransaction`,e.sui_switchChain=`sui_switchChain`,e.show_modal=`show_modal`,e.hide_modal=`hide_modal`,e.login=`login`,e.auto_conn=`auto_conn`,e.logout=`logout`,e.set_points_referral_code=`set_points_referral_code`,e.set_project=`set_project`,e.silk_requestEmail=`silk_requestEmail`,e.silk_requestSbt=`silk_requestSbt`,e.set_custom_config=`set_custom_config`,e.safe=`safe`,e.set_is_mobile=`set_is_mobile`,e.project_init=`project_init`,e.gastank_get_settings=`gastank_get_settings`,e.gastank_update_settings=`gastank_update_settings`,e.gastank_topup=`gastank_topup`,e.customization_get=`customization_get`,e.customization_update=`customization_update`,e.orcid=`orcid`,e.waap_requestPermissionToken=`waap_requestPermissionToken`,e.waap_getAccountStatus=`waap_getAccountStatus`,e.waap_getPermissionTokenStatus=`waap_getPermissionTokenStatus`,e.waap_clearPermissionToken=`waap_clearPermissionToken`,e.waap_getLinkedAddresses=`waap_getLinkedAddresses`,e.waap_linkAddress=`waap_linkAddress`,e.waap_unlinkAddress=`waap_unlinkAddress`,e.waap_getLinkAddressNonce=`waap_getLinkAddressNonce`,e.solana_connect=`solana_connect`,e.solana_disconnect=`solana_disconnect`,e.solana_signMessage=`solana_signMessage`,e.solana_signTransaction=`solana_signTransaction`,e.solana_signAllTransactions=`solana_signAllTransactions`,e.solana_signAndSendTransaction=`solana_signAndSendTransaction`,e.stellar_connect=`stellar_connect`,e.stellar_disconnect=`stellar_disconnect`,e.stellar_signMessage=`stellar_signMessage`,e.stellar_signTransaction=`stellar_signTransaction`,e.stellar_signAndSendTransaction=`stellar_signAndSendTransaction`,e.set_signing_mode=`set_signing_mode`,e.enter_lite_mode=`enter_lite_mode`})(n||={});var r;(function(e){e.eth_requestAccounts=`eth_requestAccounts`,e.eth_accounts=`eth_accounts`,e.eth_sendTransaction=`eth_sendTransaction`,e.eth_signTransaction=`eth_signTransaction`,e.eth_getBalance=`eth_getBalance`,e.personal_sign=`personal_sign`,e.eth_signTypedData_v4=`eth_signTypedData_v4`,e.eth_chainId=`eth_chainId`,e.net_version=`net_version`,e.wallet_switchEthereumChain=`wallet_switchEthereumChain`,e.wallet_addEthereumChain=`wallet_addEthereumChain`,e.eth_estimateGas=`eth_estimateGas`,e.eth_blockNumber=`eth_blockNumber`,e.eth_getCode=`eth_getCode`,e.eth_call=`eth_call`,e.eth_getTransactionReceipt=`eth_getTransactionReceipt`,e.eth_getTransactionByHash=`eth_getTransactionByHash`})(r||={});var i;(function(e){e.ready=`ready`,e.connect=`connect`,e.account_changed=`account_changed`,e.mobile_oauth_success=`mobile_oauth_success`,e.mobile_oauth_error=`mobile_oauth_error`,e.tx_pending=`waap_txPending`,e.tx_2fa_required=`waap_tx2faRequired`,e.tx_signed=`waap_txSigned`,e.tx_confirmed=`waap_txConfirmed`,e.tx_failed=`waap_txFailed`,e.squid_pending=`waap_squid_pending`,e.squid_ready=`waap_squid_ready`,e.squid_failed=`waap_squid_failed`,e.request_cancel=`waap_requestCancel`})(i||={});var a=class extends Error{constructor(e,t,n={}){super(t),this.name=`WaaPError`,this.code=e,this.operation=n.operation,this.cause=n.cause}};function o(e,t){if(e instanceof a)return e;let n=e&&typeof e==`object`?e:void 0,r=n&&typeof n.message==`string`&&n.message||e instanceof Error&&e.message||String(e||`WaaP request failed`),i=n?.code,o=r.toLowerCase();return new a(o.includes(`cancelled`)||o.includes(`canceled`)?`cancelled`:o.includes(`timed out`)?`timeout`:o.includes(`insufficient balance`)?`insufficient_balance`:o.includes(`policy`)||o.includes(`permission token`)?`policy_rejected`:i===4001||o.includes(`rejected`)?`user_rejected`:o.includes(`not connected`)?`not_connected`:o.includes(`not authenticated`)||o.includes(`log in first`)?`not_authenticated`:o.includes(`unsupported`)||o.includes(`must be base64`)?`unsupported_input`:n?`wallet_error`:`unknown`,r,{cause:e,operation:t})}const s=`waap-wallet`,c=`waap-component-container`,l=typeof window<`u`&&typeof document<`u`&&typeof HTMLElement<`u`;let u;l?(u=class extends HTMLElement{constructor(){super()}connectedCallback(){(!this.style.display||this.style.display===``)&&(this.style.display=`flex`,this.style.alignItems=`center`,this.style.justifyContent=`center`),(!this.style.width||this.style.width===``)&&(this.style.width=`100%`),(!this.style.height||this.style.height===``)&&(this.style.height=`100%`),this.id=c,this.setAttribute(`data-waap-mounted`,`true`)}disconnectedCallback(){this.removeAttribute(`data-waap-mounted`)}},typeof customElements<`u`&&!customElements.get(s)&&customElements.define(s,u)):u=class{};function d(){return l?!!document.getElementById(c)||!!document.querySelector(s):!1}function f(){return l?document.getElementById(c)||document.querySelector(s):null}const p=`https://staging.waap.xyz`,m={development:`http://localhost:3000`,staging:p,production:`https://waap.xyz`},ee=e=>e===`localhost`||e===`127.0.0.1`||e===`[::1]`;function h(e){let t;try{t=new URL(e)}catch{throw Error(`Invalid WaaP wallet origin: ${e}`)}if(t.origin!==e||t.pathname!==`/`||t.search||t.hash||t.username||t.password)throw Error(`WaaP walletOrigin must be an absolute origin without a path, query, or credentials`);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&ee(t.hostname)))throw Error(`WaaP walletOrigin must use HTTPS unless it is a loopback host`);return t.origin}function g(e={}){return e.walletOrigin?h(e.walletOrigin):e.environment?h(m[e.environment]):e.useStaging?h(p):h(m.production)}const _=new WeakMap,v=new WeakMap,y=()=>typeof performance<`u`?performance.now():Date.now(),b=e=>({generation:e.generation,navigationStartedAt:e.navigationStartedAt,loadedAt:e.loadedAt}),x=e=>{let t=e.contentWindow;if(!t)return;let n=v.get(e);if(n&&_.get(t)===n)return;n?.cleanup(),n&&(v.delete(e),_.get(t)===n&&_.delete(t));let r=_.get(t);if(r?.iframe===e)return;r?.cleanup(),r&&v.delete(r.iframe);let i={iframe:e,generation:0,navigationStartedAt:y(),loadedAt:null,listeners:new Set,cleanup:()=>{}},a=()=>{i.generation+=1,i.loadedAt=y();let e=b(i);for(let t of Array.from(i.listeners))t(e)};i.cleanup=()=>{e.removeEventListener(`load`,a),i.listeners.clear()},e.addEventListener(`load`,a),_.set(t,i),v.set(e,i)},te=e=>{let t=v.get(e);if(t){t.cleanup(),v.delete(e);let n=e.contentWindow;n&&_.get(n)===t&&_.delete(n);return}let n=e.contentWindow;if(!n)return;let r=_.get(n);!r||r.iframe!==e||(r.cleanup(),_.delete(n))},S=e=>{let t=_.get(e);return t?b(t):null},ne=(e,t)=>{let n=_.get(e);return n?n.loadedAt===null?new Promise((e,r)=>{let i=window.setTimeout(()=>{n.listeners.delete(a),r(Error(`WaaP iframe navigation timed out after ${Math.round(t/1e3)}s.`))},t),a=t=>{window.clearTimeout(i),n.listeners.delete(a),e(t)};n.listeners.add(a)}):Promise.resolve(b(n)):Promise.resolve(null)},re=(e,t)=>{let n=_.get(e);return n?(n.listeners.add(t),()=>n.listeners.delete(t)):()=>{}},C=`waap-wallet-loading-styles`,w=`waap-iframe-visual-ready`,T=typeof window<`u`&&typeof document<`u`,ie=()=>{if(!T||document.getElementById(C))return;let e=document.createElement(`style`);e.id=C,e.textContent=`@keyframes waap-loading-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } @media (prefers-reduced-motion: reduce) { [data-waap-loading-part] { animation: none !important; } }`,document.head.appendChild(e)},ae=(e={})=>g(e),E=()=>T?document.getElementById(`waap-wallet-iframe-container`)||document.getElementById(`silk-wallet-iframe-container`):null,D=()=>T?document.getElementById(`waap-wallet-iframe-wrapper`)||document.getElementById(`silk-wallet-iframe-wrapper`):null,O=()=>T?document.getElementById(`waap-wallet-iframe`)||document.getElementById(`silk-wallet-iframe`):null,k=(e=O())=>{let t=Number(e?.dataset.waapVisualRevision??`0`);return Number.isSafeInteger(t)&&t>=0?t:0},oe=(e=O())=>{let t=e?.dataset.waapVisualReadySupported;return t===`true`||t!==`false`&&null},A=(e,t)=>{if(e){if(t===null){delete e.dataset.waapVisualReadySupported;return}e.dataset.waapVisualReadySupported=String(t)}},se=(e,t)=>{let n=e.__silkCleanup;e.__silkCleanup=()=>{n?.(),t()}},ce=e=>{let t=O();if(!t)throw Error(`WaaP iframe does not exist on page`);let n=t.dataset.waapAccountMode;if(n&&n!==e)throw Error(`WaaP iframe is already bound to ${n}; destroy it before initializing ${e}.`);return t.dataset.waapAccountMode=e,t},le=e=>{if(T)try{if(document.querySelector(`link[data-waap-preconnect="${e}"]`))return;let t=document.createElement(`link`);t.rel=`preconnect`,t.href=e,t.crossOrigin=`anonymous`,t.setAttribute(`data-waap-preconnect`,e),document.head.appendChild(t);let n=document.createElement(`link`);n.rel=`dns-prefetch`,n.href=e,n.setAttribute(`data-waap-preconnect`,e),document.head.appendChild(n)}catch{}},ue=(e,t)=>{e.dataset.waapTheme=t?`dark`:`light`},de=(e,t)=>{let n=e;le(n);let r=document.createElement(`iframe`);return r.id=`waap-wallet-iframe`,r.dataset.waapOrigin=n,ue(r,t),x(r),r.src=`${n}/iframe`,r.allow=`publickey-credentials-get; publickey-credentials-create`,r.style.width=`100%`,r.style.height=`100%`,r.style.border=`none`,r.style.borderRadius=`24px`,r.style.backgroundColor=`transparent`,r.style.background=`transparent`,r.style.padding=`0`,r.style.margin=`0`,r},fe=()=>{let e=document.createElement(`div`);return e.id=`waap-wallet-iframe-wrapper`,e.style.position=`relative`,e.style.display=`flex`,e.style.alignItems=`center`,e.style.justifyContent=`center`,e.style.padding=`0`,e.style.margin=`0`,e.style.height=`600px`,e.style.width=`380px`,e},pe=()=>{let e=document.createElement(`div`);return e.id=`waap-wallet-iframe-container`,e.style.position=`fixed`,e.style.top=`0`,e.style.left=`0`,e.style.right=`0`,e.style.bottom=`0`,e.style.width=`100%`,e.style.height=`100%`,e.style.alignItems=`center`,e.style.justifyContent=`center`,e.style.backgroundColor=`rgba(0, 0, 0, 0.5)`,e.style.zIndex=`9999999999`,e.style.display=`flex`,e.style.visibility=`hidden`,e.style.opacity=`0`,e.style.pointerEvents=`none`,e.style.transition=typeof window<`u`&&window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`none`:`opacity 140ms ease`,e},me=(e,t)=>{let n=e,r,i,a,o,s=()=>{if(r=void 0,!o)return;let e=D();e&&e.dataset.waapSizeLocked!==`true`&&(i=o.width,a=o.height,e.style.height=`${o.height}px`,e.style.width=`${o.width}px`,o=void 0)},c=()=>{r===void 0&&(r=window.requestAnimationFrame(s))},l=()=>{!o&&i!==void 0&&a!==void 0&&(o={width:i,height:a}),c()},u=e=>{if(e.origin!==n||e.source!==t.contentWindow||!e.data||typeof e.data!=`object`||e.data.type!==`silk-iframe-size`)return;let r=e.data.height,s=e.data.width,l=2e3;if(typeof r!=`number`||typeof s!=`number`||r<50||r>l||s<50||s>l||!Number.isFinite(r)||!Number.isFinite(s))return;let u=Math.floor(s),d=Math.floor(r);u===i&&d===a||(o={width:u,height:d},c())};window.addEventListener(`message`,u),t.addEventListener(w,l);let d=()=>{r!==void 0&&window.cancelAnimationFrame(r),window.removeEventListener(`message`,u),t.removeEventListener(w,l)};return se(t,d),d},j=(e,t)=>{let n=()=>{delete t.dataset.waapVisualRevision,delete t.dataset.waapVisualReadyAt,A(t,null)},r=n=>{if(n.origin!==e||n.source!==t.contentWindow||!n.data||typeof n.data!=`object`||n.data.type!==`silk-iframe-visual-ready`)return;let r=n.data.revision;!Number.isSafeInteger(r)||r<=0||r<=k(t)||(t.dataset.waapVisualRevision=String(r),t.dataset.waapVisualReadyAt=String(typeof performance<`u`?performance.now():Date.now()),t.dispatchEvent(new CustomEvent(w,{detail:{revision:r}})))};t.addEventListener(`load`,n),window.addEventListener(`message`,r);let i=()=>{t.removeEventListener(`load`,n),window.removeEventListener(`message`,r)};return se(t,i),i},M=()=>{setTimeout(()=>{if(typeof document>`u`)return;let e=D();e&&(e.style.height=`600px`,e.style.width=`380px`)},100)},N=e=>{let t=O();if(!t)return!1;let n=t.dataset.waapOrigin??(()=>{try{return new URL(t.src).origin}catch{return}})();if(n&&n!==e)throw Error(`WaaP wallet iframe already exists for ${n}; destroy it before switching to ${e}`);return!0},he=(e,t)=>{let n=f();if(!n)throw Error(`WaaP component not found in DOM`);if(N(e))return;let r=fe(),i=de(e,t);me(e,i),j(e,i),M(),r.appendChild(i),n.appendChild(r),x(i)},ge=(e,t)=>{if(N(e))return;let n=pe(),r=fe();n.appendChild(r);let i=de(e,t);me(e,i),j(e,i),M(),r.appendChild(i),document.body.appendChild(n),x(i)},_e=(e={})=>{if(!T)return;ie();let t=ae(e),n=e.config?.styles?.darkMode===!0,r=O();r&&ue(r,n),d()?he(t,n):ge(t,n)},ve=()=>{if(!T)return;Ne();let e=O(),t=e?.__silkCleanup;typeof t==`function`&&t(),e&&te(e);let n=D(),r=E();r?r.remove():n?.remove(),document.querySelectorAll(`link[data-waap-preconnect]`).forEach(e=>{e.remove()})};let P=0;async function ye(e){let t=Date.now().toString(),n=new TextEncoder().encode(JSON.stringify(e)+t),r=globalThis.crypto;if(r?.subtle?.digest){let e=await r.subtle.digest(`SHA-256`,new Uint8Array(n));return F(new Uint8Array(e))}return P+=1,F(new TextEncoder().encode(`${t}:${P}:${Math.random()}:${JSON.stringify(e)}`)).padEnd(64,`0`).slice(0,64)}function F(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}const I=new WeakMap,be=(e,t)=>{let n=I.get(e);if(n)return n;let r=t();return I.set(e,r),r.catch(()=>{I.get(e)===r&&I.delete(e)}),r},xe=e=>{I.delete(e)};let L=null;const Se=(e,t)=>{L={platform:e,version:t}},Ce=(e,t={})=>({schemaVersion:1,accountMode:e,sessionProtection:`dpop`,sdkPlatform:L?.platform??`web`,sdkVersion:L?.version??`2.4.1`,relyingPartySource:`browser-origin`,...t.project?.appId?{appId:t.project.appId}:{},...t.chains?.length?{chains:t.chains}:{},parentOrigin:typeof window>`u`?void 0:window.location?.origin,...t.referralCode?{referralCode:t.referralCode}:{},...t.project?{project:t.project}:{},...t.config?{config:t.config}:{}}),R=new Set;let z=!1,B;const V=new WeakMap,we=(e=256)=>{let t=new Set;return{accept(n){if(t.has(n))return!1;if(t.add(n),t.size>e){let e=t.values().next().value;e&&t.delete(e)}return!0},clear(){t.clear()},size(){return t.size}}},H=e=>{let t=V.get(e);if(t)return t;let n={ready:!1,promise:null,reject:null,cleanup:null,navigationGeneration:null,readyPingStartedAt:null,readyAt:null,readyAttempts:0,visualReadySupported:null,lastError:null};return V.set(e,n),n},U=(e,t)=>{let n=V.get(e);if(!n)return;n.ready=!1,n.cleanup?.(),n.cleanup=null;let r=n.reject;n.reject=null,n.promise=null,n.navigationGeneration=null,n.visualReadySupported=null;let i=O();i?.contentWindow===e&&A(i,null),r?.(t)},W=()=>typeof performance<`u`?performance.now():Date.now();let G=null;const K=new Set,Te=()=>{for(let e of K)if(!e.isDisposed())return e.getHandshakeDiagnostics();return G},Ee=(e,n,r)=>{let{handleResponse:a,handleRequest:o,onReceiveConnectNotif:s,onAccountChanged:c,onAsyncTxNotification:l,onSquidLifecycleNotification:u,onAuthComplete:d}=r;if(e.origin===n.walletOrigin&&e.source===n.getIframeWindow()&&e.data?.target===`silk`)if(e.data?.messageType===t.request)o?.(e.data);else if(e.data?.messageType===t.response){if(a){let t=e.data;n.shouldHandleTerminalResponse(t.id)&&a(t)}}else e.data?.messageType===t.notification&&(e.data?.data===i.connect?s?.():e.data?.data?.type===i.account_changed&&c?c(e.data.data.account):(e.data?.data?.type?.startsWith(`waap_sign_`)||e.data?.data?.type?.startsWith(`waap_tx_`))&&l?l({type:e.data.data.type,payload:e.data.data.payload}):(e.data?.data===i.mobile_oauth_success||e.data?.data===i.mobile_oauth_error)&&d?d(e.data.data===i.mobile_oauth_success?`success`:`error`):e.data?.data?.type?.startsWith(`waap_squid_`)&&u&&u({type:e.data.data.type,payload:e.data.data.payload}))},De=()=>{z||typeof window>`u`||(z=!0,B=e=>{for(let{manager:t,config:n}of Array.from(R))Ee(e,t,n)},window.addEventListener(`message`,B))},Oe=()=>{R.size>0||!z||!B||typeof window>`u`||(window.removeEventListener(`message`,B),B=void 0,z=!1)};var ke=class{constructor(e,t){this.iframeWindow=null,this.unregisterListeners=new Set,this.terminalResponseDeduper=we(),this.unsubscribeIframeNavigation=null,this.disposed=!1,this.iframeWindow=e,this.walletOrigin=typeof t==`string`?t:g(t===!0?{useStaging:!0}:{}),e&&this.observeIframeNavigation(e),K.add(this)}observeIframeNavigation(e){this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=re(e,()=>{let t=H(e);(t.ready||t.readyPingStartedAt!==null)&&(xe(e),U(e,Error(`WaaP iframe reloaded; readiness must be re-established`)),this.terminalResponseDeduper.clear())})}setIframeWindow(e){this.iframeWindow&&this.iframeWindow!==e&&(U(this.iframeWindow,Error(`Wallet iframe window changed`)),this.terminalResponseDeduper.clear()),this.iframeWindow=e,this.observeIframeNavigation(e)}getIframeWindow(){return this.iframeWindow}isDisposed(){return this.disposed}shouldHandleTerminalResponse(e){return this.terminalResponseDeduper.accept(e)}getHandshakeDiagnostics(){let e=this.iframeWindow,t=e?S(e):null,n=e?H(e):null,r={walletOrigin:this.walletOrigin,iframeNavigationStartedAt:t?.navigationStartedAt??null,iframeLoadedAt:t?.loadedAt??null,readyPingStartedAt:n?.readyPingStartedAt??null,readyAt:n?.readyAt??null,readyAttempts:n?.readyAttempts??0,visualReadySupported:n?.visualReadySupported??null,navigationGeneration:n?.navigationGeneration??null,lastError:n?.lastError??null};return G=r,r}postSilkNotification(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);this.iframeWindow.postMessage({target:`silk`,messageType:t.notification,data:e},this.walletOrigin)}postReadyNotification(){this.postSilkNotification(i.ready)}postConnectNotification(){this.postSilkNotification(i.connect)}cancelSilkRequest(e,t){this.postSilkNotification({type:i.request_cancel,requestId:e,method:t})}pingIframe(){if(this.disposed)return Promise.reject(Error(`Wallet message manager is disposed`));let e=this.iframeWindow;if(!e||typeof window>`u`)return Promise.reject(Error(`WaaP iframe is not mounted`));let n=H(e),r=S(e);return n.ready&&(!r||n.navigationGeneration===r.generation)?Promise.resolve():(n.ready&&U(e,Error(`WaaP iframe navigation changed; readiness must be re-established`)),n.promise?n.promise:(n.lastError=null,n.readyPingStartedAt=null,n.readyAt=null,n.readyAttempts=0,n.visualReadySupported=null,n.promise=new Promise((r,a)=>{n.reject=a,ne(e,3e4).then(r=>{if(this.disposed||this.iframeWindow!==e)throw Error(`Wallet message manager is disposed`);return new Promise((a,o)=>{let s=o=>{if(o.origin===this.walletOrigin&&o.source===e&&o.data?.target===`silk`&&o.data.messageType===t.notification&&o.data.data===i.ready){n.ready=!0,n.navigationGeneration=S(e)?.generation??r?.generation??null,n.readyAt=W(),n.visualReadySupported=o.data?.capabilities?.visualReady===1;let t=O();t?.contentWindow===e&&A(t,n.visualReadySupported),p(),a()}},c=()=>{try{n.readyAttempts+=1,this.postReadyNotification()}catch(e){p(),o(e)}};n.readyPingStartedAt=W();let l=250,u,d=()=>{u=window.setTimeout(()=>{c(),l=Math.min(l*2,1e3),d()},l)},f=window.setTimeout(()=>{p(),o(Error(`WaaP wallet ready handshake timed out after 10s.`))},1e4),p=()=>{u!==void 0&&window.clearTimeout(u),window.clearTimeout(f),window.removeEventListener(`message`,s),n.cleanup===p&&(n.cleanup=null,n.reject=null)};n.cleanup=p,n.reject=o,window.addEventListener(`message`,s),c(),d()})}).then(r,a)}),n.promise=n.promise.finally(()=>{n.ready||(n.lastError=n.lastError??`Wallet readiness failed`,n.promise=null)}),n.promise.catch(e=>{n.lastError=e instanceof Error?e.message:String(e)}),n.promise))}async postSilkRequest(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);let{silkOptions:n,...r}=e,i={...r,target:`silk`,messageType:t.request,...n&&{silkOptions:n}},a=await ye(i);return this.iframeWindow.postMessage({...i,id:a},this.walletOrigin),a}addListener(e){if(this.disposed)throw Error(`Wallet message manager is disposed`);De();let t={manager:this,config:e};R.add(t);let n=()=>{this.unregisterListeners.delete(n)&&(R.delete(t),Oe())};return this.unregisterListeners.add(n),n}dispose(){this.disposed||(this.disposed=!0,this.iframeWindow&&U(this.iframeWindow,Error(`Wallet message manager was disposed`)),Array.from(this.unregisterListeners).forEach(e=>e()),this.terminalResponseDeduper.clear(),this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=null,G=this.getHandshakeDiagnostics(),this.iframeWindow=null,K.delete(this))}};const q=`waap-wallet-iframe-loading`,J=new Set,Y=()=>typeof performance<`u`?performance.now():Date.now(),X=e=>{J.forEach(t=>{try{t(e)}catch{}})},Ae=e=>(J.add(e),()=>J.delete(e));var je=class{constructor(e){this.pendingRevision=null,this.phase=`idle`,this.requestedAt=null,this.visibleAt=null,this.usedVisualFallback=!1,this.onVisualReady=e=>{let t=e.detail?.revision;this.pendingRevision!==null&&typeof t==`number`&&t>=this.pendingRevision&&this.revealIframe(!1)},this.iframe=e,e.addEventListener(w,this.onVisualReady)}show({layout:e=`signing`}={}){if(this.phase===`pending`||this.phase===`visible`)return;let t=D();if(!t)return;this.clearFallbackTimer();let n=this.moveToCurrentMode(t);n===`modal`&&e===`signing`?(t.dataset.waapSizeLocked=`true`,t.style.width=`380px`,t.style.height=`600px`):n===`modal`&&delete t.dataset.waapSizeLocked,this.pendingRevision=k(this.iframe)+1,this.phase=`pending`,this.requestedAt=Y(),this.visibleAt=null,this.usedVisualFallback=!1,X({phase:`modal_requested`,at:this.requestedAt,visualRevision:this.pendingRevision}),this.hideIframeUntilPaint(t),n===`modal`?this.showModalSurface():t.style.display=`flex`;let r=oe(this.iframe);if(r===!1){this.revealIframe(!0);return}this.fallbackTimer=window.setTimeout(()=>{this.revealIframe(!0)},r===!0?3e3:750)}hide(){let e=this.pendingRevision!==null;this.pendingRevision=null,this.clearFallbackTimer(),this.phase=`hidden`;let t=Y();e&&X({phase:`modal_cancelled`,at:t,visualRevision:k(this.iframe)}),X({phase:`modal_hidden`,at:t,visualRevision:k(this.iframe)});let n=D();if(n&&delete n.dataset.waapSizeLocked,d()){n&&(n.style.display=`none`);return}let r=E();r&&(r.style.opacity=`0`,r.style.visibility=`hidden`,r.style.pointerEvents=`none`)}dispose(){this.clearFallbackTimer(),this.iframe.removeEventListener(w,this.onVisualReady)}isFor(e){return this.iframe===e}getDiagnostics(){return{modalPhase:this.phase,modalRequestedAt:this.requestedAt,modalVisibleAt:this.visibleAt,usedVisualFallback:this.usedVisualFallback}}moveToCurrentMode(e){if(d()){let t=f();return t&&e.parentElement!==t&&t.appendChild(e),`component`}let t=E();return t||(t=pe(),document.body.appendChild(t)),e.parentElement!==t&&t.appendChild(e),`modal`}showModalSurface(){let e=E();e&&(e.style.display=`flex`,e.style.visibility=`visible`,e.style.opacity=`1`,e.style.pointerEvents=`auto`)}hideIframeUntilPaint(e){e.style.display=`flex`,e.style.visibility=`visible`,e.style.opacity=`1`,e.style.pointerEvents=`auto`,this.iframe.style.visibility=`hidden`,this.iframe.style.opacity=`0`,this.iframe.style.pointerEvents=`none`,this.ensureLoadingIndicator(e).style.display=`flex`}revealIframe(e){if(this.pendingRevision===null)return;let t=k(this.iframe);this.pendingRevision=null,this.clearFallbackTimer(),this.phase=`visible`,this.visibleAt=Y(),this.usedVisualFallback=e,X({phase:`modal_visible`,at:this.visibleAt,visualRevision:t,fallback:e});let n=D();if(!n)return;delete n.dataset.waapSizeLocked;let r=n.querySelector(`#${q}`);r&&(r.style.display=`none`),this.iframe.style.visibility=`visible`,this.iframe.style.opacity=`1`,this.iframe.style.pointerEvents=`auto`,n.style.visibility=`visible`,n.style.opacity=`1`,n.style.pointerEvents=`auto`}ensureLoadingIndicator(e){let t=e.querySelector(`#${q}`);if(t)return this.applyLoadingTheme(t),t;t=document.createElement(`div`),t.id=q,t.setAttribute(`role`,`status`),t.setAttribute(`aria-live`,`polite`),t.setAttribute(`aria-label`,`Loading WaaP wallet`),t.style.position=`absolute`,t.style.inset=`0`,t.style.zIndex=`1`,t.style.display=`none`,t.style.flexDirection=`column`,t.style.borderRadius=`24px`,t.style.fontFamily=`system-ui, sans-serif`,t.style.fontSize=`14px`,t.style.pointerEvents=`none`;let n=document.createElement(`div`);n.style.boxSizing=`border-box`,n.style.display=`flex`,n.style.flexDirection=`column`,n.style.width=`100%`,n.style.height=`100%`,n.style.padding=`24px`;let r=document.createElement(`img`),i=this.iframe.dataset.waapOrigin;i&&(r.src=`${i}/assets/svg/waaplogo.svg`),r.alt=`WaaP`,r.width=66,r.height=25,r.style.alignSelf=`center`,r.style.width=`66px`,r.style.height=`25px`,r.style.marginBottom=`20px`,r.dataset.waapLoadingLogo=`true`;let a=(e,t,n,r)=>{let i=document.createElement(`div`);return i.setAttribute(`aria-hidden`,`true`),i.dataset.waapLoadingPart=e,i.style.width=t,i.style.height=n,i.style.flexShrink=`0`,i.style.borderRadius=r,i.style.backgroundSize=`200% 100%`,i.style.animation=`waap-loading-shimmer 2.4s ease-in-out infinite`,i},o=a(`request-title`,`156px`,`16px`,`999px`);o.style.marginTop=`34px`;let s=a(`request-body`,`100%`,`220px`,`12px`);s.style.flex=`1`,s.style.marginTop=`18px`,s.style.opacity=`.58`;let c=document.createElement(`div`);return c.dataset.waapLoadingPart=`actions`,c.setAttribute(`aria-hidden`,`true`),c.style.display=`flex`,c.style.gap=`10px`,c.append(a(`cancel-action`,`calc(50% - 5px)`,`48px`,`12px`),a(`confirm-action`,`calc(50% - 5px)`,`48px`,`12px`)),n.append(r,o,s,c),t.appendChild(n),e.appendChild(t),this.applyLoadingTheme(t),t}applyLoadingTheme(e){let t=this.iframe.dataset.waapTheme===`dark`;e.dataset.waapTheme=t?`dark`:`light`,e.style.background=t?`#121212`:`#ffffff`,e.style.color=t?`#e6e6e6`:`#000000`;let n=e.querySelector(`[data-waap-loading-logo]`);n&&(n.style.filter=t?`invert(1)`:`none`);let r=t?`linear-gradient(90deg, rgba(255,255,255,.07), rgba(255,255,255,.14), rgba(255,255,255,.07))`:`linear-gradient(90deg, rgba(0,0,0,.05), rgba(0,0,0,.1), rgba(0,0,0,.05))`;e.querySelectorAll(`[data-waap-loading-part]`).forEach(e=>{e.style.background=r})}clearFallbackTimer(){this.fallbackTimer!==void 0&&(window.clearTimeout(this.fallbackTimer),this.fallbackTimer=void 0)}};let Z;const Q=()=>{let e=O();return e?(Z&&!Z.isFor(e)&&(Z.dispose(),Z=void 0),Z??=new je(e),Z):null},Me=e=>{Q()?.show(e)},$=()=>{Q()?.hide()},Ne=()=>{Z?.dispose(),Z=void 0},Pe=()=>{let e=O(),t=e?.contentWindow?S(e.contentWindow):null,n=Z?.getDiagnostics(),r=Number(e?.dataset.waapVisualReadyAt??``);return{walletOrigin:e?.dataset.waapOrigin??null,iframeNavigationStartedAt:t?.navigationStartedAt??null,iframeLoadedAt:t?.loadedAt??null,visualRevision:k(e),visualReadyAt:Number.isFinite(r)?r:null,modalPhase:n?.modalPhase??`idle`,modalRequestedAt:n?.modalRequestedAt??null,modalVisibleAt:n?.modalVisibleAt??null,usedVisualFallback:n?.usedVisualFallback??!1,handshake:Te()}},Fe=new Set([r.eth_sendTransaction,r.eth_signTransaction,r.personal_sign,r.eth_signTypedData_v4]),Ie=e=>Fe.has(e);function Le(e){return new Promise((t,n)=>{let r,i=!1,a=()=>{r!==void 0&&clearTimeout(r),e.eventEmitter.removeListener(e.id,o),e.signal?.removeEventListener(`abort`,c)},o=e=>{i||(i=!0,a(),t(e))},s=t=>{i||(i=!0,a(),e.onCancel?.(),n(Error(t)))},c=()=>s(`WaaP request cancelled: ${e.method}`);if(e.signal?.aborted){c();return}e.interactionRequired||(r=setTimeout(()=>{s(`WaaP request timed out: ${e.method}`)},e.timeoutMs??3e4)),e.eventEmitter.once(e.id,o),e.signal?.addEventListener(`abort`,c,{once:!0})})}function Re(e){if(typeof e!=`object`||!e)return e;try{e.waapCode=o(e).code}catch{}return e}async function ze(e,t,r,i,a){let o=e.method,s=e.params,{timeoutMs:c,signal:l,...u}=a??{};t&&Me({layout:o===n.login?`auth`:`signing`});let d;try{d=await r.postSilkRequest({method:o,params:s,interactionRequired:t,silkOptions:a?u:void 0});let e=await Le({eventEmitter:i,id:d,method:o,interactionRequired:t,timeoutMs:c,signal:l,onCancel:()=>{r.cancelSilkRequest(d,o),t&&$()}});if(t&&$(),e.error)throw Re(e.error);return e.data}catch(e){throw t&&d===void 0&&$(),e}}const Be=(e,t={})=>{if(typeof window>`u`)return()=>void 0;let n=!1,r,i,a=window,o=()=>{n||e.preload().catch(e=>t.onError?.(e))};return typeof a.requestIdleCallback==`function`?r=a.requestIdleCallback(o,{timeout:t.timeoutMs??2e3}):i=window.setTimeout(o,0),()=>{n=!0,r!==void 0&&a.cancelIdleCallback?.(r),i!==void 0&&window.clearTimeout(i)}};var Ve=function(e){return e.show_modal=`show_modal`,e.hide_modal=`hide_modal`,e}(Ve||{}),He=class extends e.EventEmitter{constructor(){super()}};Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ve}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return h}});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/lib/preload.d.ts
|
|
2
|
+
/** Any public WaaP facade that can warm the shared wallet iframe. */
|
|
3
|
+
interface WaaPPreloadTarget {
|
|
4
|
+
preload(): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
interface WaaPIdlePreloadOptions {
|
|
7
|
+
/** Browser deadline for an idle callback. Default: 2 seconds. */
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
/** Observes a best-effort warmup failure without making page startup fail. */
|
|
10
|
+
onError?: (error: unknown) => void;
|
|
11
|
+
}
|
|
12
|
+
type CancelWaaPPreload = () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Warm an already-created WaaP facade when the browser is idle. It never opens
|
|
15
|
+
* wallet UI, and cancellation is useful when the embedding route unmounts.
|
|
16
|
+
*
|
|
17
|
+
* Use this after the host page's LCP. For a likely immediate action (for
|
|
18
|
+
* example Connect button hover/focus), call `target.preload()` directly.
|
|
19
|
+
*/
|
|
20
|
+
declare const preloadWaaPOnIdle: (target: WaaPPreloadTarget, options?: WaaPIdlePreloadOptions) => CancelWaaPPreload;
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/lib/WaaPError.d.ts
|
|
23
|
+
/** Stable, safe error vocabulary for non-EIP-1193 SDK facades. */
|
|
24
|
+
type WaaPErrorCode = 'cancelled' | 'timeout' | 'user_rejected' | 'policy_rejected' |
|
|
25
|
+
/**
|
|
26
|
+
* The user's gas tank cannot cover a fee the operation is billed. Distinct
|
|
27
|
+
* from `wallet_error` because it is the user's to fix and retrying changes
|
|
28
|
+
* nothing until they top up — the same split the server draws between a 402
|
|
29
|
+
* and a 502.
|
|
30
|
+
*/
|
|
31
|
+
'insufficient_balance' | 'not_authenticated' | 'not_connected' | 'unsupported_input' | 'wallet_error' | 'maintenance' | 'unknown';
|
|
32
|
+
type WaaPOperationMetadata = {
|
|
33
|
+
/**
|
|
34
|
+
* The chain the failed operation targeted. Declared structurally rather than
|
|
35
|
+
* as `WaaPChain` so the error vocabulary stays free of the initializer graph.
|
|
36
|
+
*/
|
|
37
|
+
chain?: 'evm' | 'sui' | 'solana' | 'stellar';
|
|
38
|
+
method?: string;
|
|
39
|
+
requestId?: string;
|
|
40
|
+
};
|
|
41
|
+
declare class WaaPError extends Error {
|
|
42
|
+
readonly code: WaaPErrorCode;
|
|
43
|
+
readonly operation?: WaaPOperationMetadata;
|
|
44
|
+
readonly cause?: unknown;
|
|
45
|
+
constructor(code: WaaPErrorCode, message: string, options?: {
|
|
46
|
+
cause?: unknown;
|
|
47
|
+
operation?: WaaPOperationMetadata;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
declare function normalizeWaaPError(error: unknown, operation?: WaaPOperationMetadata): WaaPError;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { CancelWaaPPreload as a, preloadWaaPOnIdle as c, normalizeWaaPError as i, WaaPErrorCode as n, WaaPIdlePreloadOptions as o, WaaPOperationMetadata as r, WaaPPreloadTarget as s, WaaPError as t };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/lib/preload.d.ts
|
|
2
|
+
/** Any public WaaP facade that can warm the shared wallet iframe. */
|
|
3
|
+
interface WaaPPreloadTarget {
|
|
4
|
+
preload(): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
interface WaaPIdlePreloadOptions {
|
|
7
|
+
/** Browser deadline for an idle callback. Default: 2 seconds. */
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
/** Observes a best-effort warmup failure without making page startup fail. */
|
|
10
|
+
onError?: (error: unknown) => void;
|
|
11
|
+
}
|
|
12
|
+
type CancelWaaPPreload = () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Warm an already-created WaaP facade when the browser is idle. It never opens
|
|
15
|
+
* wallet UI, and cancellation is useful when the embedding route unmounts.
|
|
16
|
+
*
|
|
17
|
+
* Use this after the host page's LCP. For a likely immediate action (for
|
|
18
|
+
* example Connect button hover/focus), call `target.preload()` directly.
|
|
19
|
+
*/
|
|
20
|
+
declare const preloadWaaPOnIdle: (target: WaaPPreloadTarget, options?: WaaPIdlePreloadOptions) => CancelWaaPPreload;
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/lib/WaaPError.d.ts
|
|
23
|
+
/** Stable, safe error vocabulary for non-EIP-1193 SDK facades. */
|
|
24
|
+
type WaaPErrorCode = 'cancelled' | 'timeout' | 'user_rejected' | 'policy_rejected' |
|
|
25
|
+
/**
|
|
26
|
+
* The user's gas tank cannot cover a fee the operation is billed. Distinct
|
|
27
|
+
* from `wallet_error` because it is the user's to fix and retrying changes
|
|
28
|
+
* nothing until they top up — the same split the server draws between a 402
|
|
29
|
+
* and a 502.
|
|
30
|
+
*/
|
|
31
|
+
'insufficient_balance' | 'not_authenticated' | 'not_connected' | 'unsupported_input' | 'wallet_error' | 'maintenance' | 'unknown';
|
|
32
|
+
type WaaPOperationMetadata = {
|
|
33
|
+
/**
|
|
34
|
+
* The chain the failed operation targeted. Declared structurally rather than
|
|
35
|
+
* as `WaaPChain` so the error vocabulary stays free of the initializer graph.
|
|
36
|
+
*/
|
|
37
|
+
chain?: 'evm' | 'sui' | 'solana' | 'stellar';
|
|
38
|
+
method?: string;
|
|
39
|
+
requestId?: string;
|
|
40
|
+
};
|
|
41
|
+
declare class WaaPError extends Error {
|
|
42
|
+
readonly code: WaaPErrorCode;
|
|
43
|
+
readonly operation?: WaaPOperationMetadata;
|
|
44
|
+
readonly cause?: unknown;
|
|
45
|
+
constructor(code: WaaPErrorCode, message: string, options?: {
|
|
46
|
+
cause?: unknown;
|
|
47
|
+
operation?: WaaPOperationMetadata;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
declare function normalizeWaaPError(error: unknown, operation?: WaaPOperationMetadata): WaaPError;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { CancelWaaPPreload as a, preloadWaaPOnIdle as c, normalizeWaaPError as i, WaaPErrorCode as n, WaaPIdlePreloadOptions as o, WaaPOperationMetadata as r, WaaPPreloadTarget as s, WaaPError as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e=class e{static{this.instance=null}static{this.projectId=void 0}static{this.chains=[1,10,100,137,8453,43114,42161,42220,84532,11155111]}static setProjectId(t){e.projectId=t}static getProjectIdFromEnv(){try{if(typeof process<`u`&&process.env)return process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID||process.env.VITE_WALLET_CONNECT_PROJECT_ID||process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID||process.env.WALLET_CONNECT_PROJECT_ID}catch{return}}static async getInstance(){if(typeof window>`u`||typeof document>`u`)return null;let{createAppKit:t}=await import(`@reown/appkit`),{mainnet:n,sepolia:r,optimism:i,arbitrum:a,optimismGoerli:o,polygon:s,gnosis:c,avalanche:l,aurora:u,fantom:d,base:f,celo:p}=await import(`@reown/appkit/networks`);try{let o={name:`
|
|
1
|
+
var e=class e{static{this.instance=null}static{this.projectId=void 0}static{this.chains=[1,10,100,137,8453,43114,42161,42220,84532,11155111]}static setProjectId(t){e.projectId=t}static getProjectIdFromEnv(){try{if(typeof process<`u`&&process.env)return process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID||process.env.VITE_WALLET_CONNECT_PROJECT_ID||process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID||process.env.WALLET_CONNECT_PROJECT_ID}catch{return}}static async getInstance(){if(typeof window>`u`||typeof document>`u`)return null;let{createAppKit:t}=await import(`@reown/appkit`),{mainnet:n,sepolia:r,optimism:i,arbitrum:a,optimismGoerli:o,polygon:s,gnosis:c,avalanche:l,aurora:u,fantom:d,base:f,celo:p}=await import(`@reown/appkit/networks`);try{let o={name:`WaaP`,description:`WaaP lets you create human keys for web3 wallets that are recoverable with private identity proofs and secured by zero trust protocols.`,url:window.location.origin,icons:[`https://waap.xyz/waapy-favicon.png`]},m=e.projectId||e.getProjectIdFromEnv();if(!m)return console.error(`WalletConnect project ID not found. Please set it using one of these methods:
|
|
2
2
|
1. Pass walletConnectProjectId when calling initSilk
|
|
3
3
|
2. Call SilkWalletConnect.setProjectId("your-project-id")
|
|
4
4
|
3. Set WALLET_CONNECT_PROJECT_ID (NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID for Next projects) environment variable`),null;if(e.projectId=m,!e.instance){let{EthersAdapter:h}=await import(`@reown/appkit-adapter-ethers`);e.instance=t({adapters:[new h],projectId:m,metadata:o,networks:[n,r,a,i,s,c,l,u,d,f,p],features:{socials:!1,email:!1}})}return e.instance}catch(e){return console.error(`Error importing or initializing WalletConnect:`,e),null}}static async listenToAccountChangeEvent(){await new Promise((t,n)=>{let r=setTimeout(()=>{n(Error(`Wallet connection timed out`))},6e4);e.instance.subscribeAccount(e=>{e?.isConnected&&(clearTimeout(r),t())})})}static async waitForReadyAndCheckConnection(){if(!e.instance)return!1;let t=!1,n=0;for(;!t&&n<15;){let r=n<5?500:1e3;await new Promise(e=>setTimeout(e,r)),t=e.instance.getIsConnectedState(),n++,console.log(`WalletConnect connection check attempt ${n}: ${t}`)}return t}static isConnected(){return e.instance?.getIsConnectedState()??!1}static getWalletProvider(){return e.instance?.getWalletProvider()??null}};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return e}});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e=class e{static{this.instance=null}static{this.projectId=void 0}static{this.chains=[1,10,100,137,8453,43114,42161,42220,84532,11155111]}static setProjectId(t){e.projectId=t}static getProjectIdFromEnv(){try{if(typeof process<`u`&&process.env)return process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID||process.env.VITE_WALLET_CONNECT_PROJECT_ID||process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID||process.env.WALLET_CONNECT_PROJECT_ID}catch{return}}static async getInstance(){if(typeof window>`u`||typeof document>`u`)return null;let{createAppKit:t}=await import(`@reown/appkit`),{mainnet:n,sepolia:r,optimism:i,arbitrum:a,optimismGoerli:o,polygon:s,gnosis:c,avalanche:l,aurora:u,fantom:d,base:f,celo:p}=await import(`@reown/appkit/networks`);try{let o={name:`
|
|
1
|
+
var e=class e{static{this.instance=null}static{this.projectId=void 0}static{this.chains=[1,10,100,137,8453,43114,42161,42220,84532,11155111]}static setProjectId(t){e.projectId=t}static getProjectIdFromEnv(){try{if(typeof process<`u`&&process.env)return process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID||process.env.VITE_WALLET_CONNECT_PROJECT_ID||process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID||process.env.WALLET_CONNECT_PROJECT_ID}catch{return}}static async getInstance(){if(typeof window>`u`||typeof document>`u`)return null;let{createAppKit:t}=await import(`@reown/appkit`),{mainnet:n,sepolia:r,optimism:i,arbitrum:a,optimismGoerli:o,polygon:s,gnosis:c,avalanche:l,aurora:u,fantom:d,base:f,celo:p}=await import(`@reown/appkit/networks`);try{let o={name:`WaaP`,description:`WaaP lets you create human keys for web3 wallets that are recoverable with private identity proofs and secured by zero trust protocols.`,url:window.location.origin,icons:[`https://waap.xyz/waapy-favicon.png`]},m=e.projectId||e.getProjectIdFromEnv();if(!m)return console.error(`WalletConnect project ID not found. Please set it using one of these methods:
|
|
2
2
|
1. Pass walletConnectProjectId when calling initSilk
|
|
3
3
|
2. Call SilkWalletConnect.setProjectId("your-project-id")
|
|
4
4
|
3. Set WALLET_CONNECT_PROJECT_ID (NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID for Next projects) environment variable`),null;if(e.projectId=m,!e.instance){let{EthersAdapter:h}=await import(`@reown/appkit-adapter-ethers`);e.instance=t({adapters:[new h],projectId:m,metadata:o,networks:[n,r,a,i,s,c,l,u,d,f,p],features:{socials:!1,email:!1}})}return e.instance}catch(e){return console.error(`Error importing or initializing WalletConnect:`,e),null}}static async listenToAccountChangeEvent(){await new Promise((t,n)=>{let r=setTimeout(()=>{n(Error(`Wallet connection timed out`))},6e4);e.instance.subscribeAccount(e=>{e?.isConnected&&(clearTimeout(r),t())})})}static async waitForReadyAndCheckConnection(){if(!e.instance)return!1;let t=!1,n=0;for(;!t&&n<15;){let r=n<5?500:1e3;await new Promise(e=>setTimeout(e,r)),t=e.instance.getIsConnectedState(),n++,console.log(`WalletConnect connection check attempt ${n}: ${t}`)}return t}static isConnected(){return e.instance?.getIsConnectedState()??!1}static getWalletProvider(){return e.instance?.getWalletProvider()??null}};export{e as t};
|