@human.tech/waap-sdk 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/dist/SolanaProvider-CxJX9Dzo.js +1 -0
- package/dist/SolanaProvider-CygEwKg1.mjs +1 -0
- package/dist/WaaPError-BuwfZjBk.d.mts +52 -0
- package/dist/WaaPError-BuwfZjBk.d.ts +52 -0
- package/dist/{WaaPError-CMOAWUlN.d.ts → WalletModalController-Qh9LNwW5.d.ts} +17 -55
- package/dist/{WaaPError-BjukImOz.d.mts → WalletModalController-wIHBGOVd.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-64xq-c4L.js +2 -0
- package/dist/evm-ChOfSh-X.mjs +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-DNyKwJcJ.d.ts} +3 -184
- package/dist/{index-C0mLQs_a.d.mts → index-XdQjHMzI.d.mts} +3 -184
- package/dist/index.d.mts +30 -7
- package/dist/index.d.ts +30 -7
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{initializerContext-_YjbVTiL.d.mts → initializerContext-DB5E2A6s.d.mts} +1 -1
- package/dist/{initializerContext-DIrqEE6B.d.ts → initializerContext-Z7JeZRsm.d.ts} +1 -1
- 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-BAygaKgr.mjs +1 -0
- package/dist/{register-9bEe9ATz.d.mts → register-BhybMFR2.d.mts} +3 -3
- package/dist/{register-PWKDsSRv.d.ts → register-CMv6n7ak.d.ts} +3 -3
- package/dist/register-CdSpQr2m.js +1 -0
- package/dist/register-CoFt8w20.mjs +1 -0
- package/dist/register-DEFLr1aE.js +1 -0
- package/dist/{register-Mb1D_xW4.d.ts → register-DfUAOQke.d.mts} +3 -3
- package/dist/{register-XzDVa7r8.d.mts → register-MK9ivXiJ.d.ts} +3 -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/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-8CCmbLuY.d.ts +191 -0
- package/dist/types-Bfz205sD.d.mts +191 -0
- package/dist/{types-BmCqyQtu.d.mts → types-x7TOncUp.d.mts} +13 -1
- package/dist/{types-BmCqyQtu.d.ts → types-x7TOncUp.d.ts} +13 -1
- package/dist/ui-Bd49qoIs.js +1 -0
- package/dist/ui-CI7vln8d.mjs +1 -0
- package/dist/useWaapAuth-C9Cwu4XG.js +1 -0
- package/dist/{useWaapAuth-vJAk2n_I.d.mts → useWaapAuth-CMhYoBKA.d.mts} +2 -2
- package/dist/{useWaapAuth-DgYO5KxO.d.ts → useWaapAuth-CeJuu2wk.d.ts} +2 -2
- package/dist/useWaapAuth-Vh8gUs6Y.mjs +1 -0
- package/package.json +24 -3
- 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/register-CEeLG7qz.mjs +0 -1
- package/dist/register-CodxV1XG.js +0 -1
- package/dist/register-DgN7qh23.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/dist/bridge.d.ts
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { F as WaaPSdkPlatform, l as SilkEthereumProviderInterface, n as InitSilkOptions } from "./types-x7TOncUp.js";
|
|
2
|
+
import { i as getWaaPIframeDiagnostics } from "./WalletModalController-Qh9LNwW5.js";
|
|
3
|
+
import { y as WaaPSolanaProviderInterface } from "./types-8CCmbLuY.js";
|
|
4
|
+
//#region src/lib/bridge/mobileBridge.d.ts
|
|
5
|
+
type MobileBridgeOptions = {
|
|
6
|
+
/** Serialized outbound envelopes, host-bound. */
|
|
7
|
+
post: (message: string) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Deferred so the WebView can load the bridge page before the wallet iframe
|
|
10
|
+
* is mounted, and so tests can drive a stub provider.
|
|
11
|
+
*/
|
|
12
|
+
createProvider: () => SilkEthereumProviderInterface;
|
|
13
|
+
/**
|
|
14
|
+
* The Solana facade over the same wallet iframe. Optional so a host that only
|
|
15
|
+
* needs EVM -- and every existing test -- keeps working unchanged.
|
|
16
|
+
*/
|
|
17
|
+
createSolanaProvider?: () => WaaPSolanaProviderInterface;
|
|
18
|
+
/**
|
|
19
|
+
* Stamped on every outbound message so the host can tell this frame apart
|
|
20
|
+
* from the cross-origin frames that share its JavaScript channel. See
|
|
21
|
+
* `BridgeResponse['token']`.
|
|
22
|
+
*/
|
|
23
|
+
token?: string;
|
|
24
|
+
};
|
|
25
|
+
type MobileBridge = {
|
|
26
|
+
handleMessage: (raw: unknown) => void;
|
|
27
|
+
dispose: () => void;
|
|
28
|
+
};
|
|
29
|
+
declare const createMobileBridge: (options: MobileBridgeOptions) => MobileBridge;
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/lib/bridge/evmMethods.d.ts
|
|
32
|
+
/**
|
|
33
|
+
* The EIP-1193 methods `evm.request` may forward.
|
|
34
|
+
*
|
|
35
|
+
* `SILK_METHOD` is not usable as the allowlist: it also carries portal-admin
|
|
36
|
+
* and wallet-configuration methods (`project_init`, `gastank_topup`,
|
|
37
|
+
* `customization_update`, `set_project`, `set_custom_config`) that a native
|
|
38
|
+
* application must never be able to reach through the escape hatch. The list is
|
|
39
|
+
* enumerated rather than derived from an `eth_`/`wallet_` prefix so adding a
|
|
40
|
+
* method to the enum cannot silently widen the native surface.
|
|
41
|
+
*/
|
|
42
|
+
declare const BRIDGE_EVM_METHODS: readonly string[];
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/lib/bridge/protocol.d.ts
|
|
45
|
+
/**
|
|
46
|
+
* Wire protocol between a native host (Flutter/Dart) and the browser SDK
|
|
47
|
+
* running in a WebView bridge page.
|
|
48
|
+
*
|
|
49
|
+
* The host is untrusted input. Every inbound message is parsed defensively and
|
|
50
|
+
* anything that is not a well-formed request for a known method is refused
|
|
51
|
+
* without reaching the SDK.
|
|
52
|
+
*/
|
|
53
|
+
declare const BRIDGE_PROTOCOL_VERSION = 1;
|
|
54
|
+
type BridgeMethod = 'session.login' | 'session.logout' | 'session.status' | 'evm.connect' | 'evm.request' | 'solana.connect' | 'solana.disconnect' | 'solana.accounts' | 'solana.signMessage' | 'solana.signTransaction' | 'solana.signAndSendTransaction' | 'sdk.preload' | 'sdk.destroy';
|
|
55
|
+
/**
|
|
56
|
+
* Codes the Dart layer switches on. They are deliberately not the SDK's
|
|
57
|
+
* `WaaPErrorCode` values: the native surface owns its own stable vocabulary and
|
|
58
|
+
* must not break when the SDK's internal codes are extended.
|
|
59
|
+
*/
|
|
60
|
+
type BridgeErrorCode = 'cancelled' | 'timeout' | 'userRejected' | 'policyRejected' | 'insufficientBalance' | 'notAuthenticated' | 'notConnected' | 'unsupportedInput' | 'unsupportedMethod' | 'walletError' | 'maintenance' | 'protocolError' | 'bridgeUnavailable' | 'serializationFailed' | 'unknown';
|
|
61
|
+
type BridgeError = {
|
|
62
|
+
code: BridgeErrorCode;
|
|
63
|
+
message: string;
|
|
64
|
+
/** Present only when the wallet supplied an EIP-1193 numeric code. */
|
|
65
|
+
eip1193Code?: number;
|
|
66
|
+
method?: string;
|
|
67
|
+
};
|
|
68
|
+
type BridgeRequest = {
|
|
69
|
+
version: number;
|
|
70
|
+
kind: 'request';
|
|
71
|
+
id: string;
|
|
72
|
+
method: BridgeMethod;
|
|
73
|
+
params?: unknown;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* `token` authenticates the sender as the bridge page's main frame.
|
|
77
|
+
*
|
|
78
|
+
* A WebView JavaScript channel is not origin-scoped. On Android it is backed by
|
|
79
|
+
* `addJavascriptInterface`, which injects the object into *every* frame and
|
|
80
|
+
* tells the host nothing about which one called — and this page deliberately
|
|
81
|
+
* contains the wallet, cross-origin, which in turn loads third-party login
|
|
82
|
+
* frames. Any of them could otherwise post a forged `accountsChanged` or a
|
|
83
|
+
* forged `session.status` response straight to the native layer.
|
|
84
|
+
*
|
|
85
|
+
* The host mints a secret per page load and hands it to the main frame only.
|
|
86
|
+
* A cross-origin subframe cannot read a main-frame variable, so it cannot
|
|
87
|
+
* produce this value, and the host drops anything that arrives without it.
|
|
88
|
+
*/
|
|
89
|
+
type BridgeResponse = {
|
|
90
|
+
version: number;
|
|
91
|
+
kind: 'response';
|
|
92
|
+
id: string;
|
|
93
|
+
result?: unknown;
|
|
94
|
+
error?: BridgeError;
|
|
95
|
+
token?: string;
|
|
96
|
+
};
|
|
97
|
+
type BridgeEvent = {
|
|
98
|
+
version: number;
|
|
99
|
+
kind: 'event';
|
|
100
|
+
event: string;
|
|
101
|
+
data?: unknown;
|
|
102
|
+
token?: string;
|
|
103
|
+
};
|
|
104
|
+
type ParsedHostMessage = {
|
|
105
|
+
ok: true;
|
|
106
|
+
request: BridgeRequest;
|
|
107
|
+
} | {
|
|
108
|
+
ok: false;
|
|
109
|
+
id: string | null;
|
|
110
|
+
error: BridgeError;
|
|
111
|
+
};
|
|
112
|
+
declare const parseHostMessage: (raw: unknown) => ParsedHostMessage;
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/bridge.d.ts
|
|
115
|
+
type NativeHostWindow = Window & {
|
|
116
|
+
ReactNativeWebView?: {
|
|
117
|
+
postMessage: (message: string) => void;
|
|
118
|
+
};
|
|
119
|
+
webkit?: {
|
|
120
|
+
messageHandlers?: Record<string, {
|
|
121
|
+
postMessage: (message: string) => void;
|
|
122
|
+
}>;
|
|
123
|
+
};
|
|
124
|
+
[channel: string]: unknown;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Resolve the host channel this WebView exposes. `channel` names the JavaScript
|
|
128
|
+
* interface on Android and the message handler on iOS; both are installed by
|
|
129
|
+
* the native layer before the page loads.
|
|
130
|
+
*/
|
|
131
|
+
declare const resolveNativeHostPost: (channel?: string, scope?: NativeHostWindow) => ((message: string) => void) | null;
|
|
132
|
+
type StartMobileBridgeOptions = {
|
|
133
|
+
init?: InitSilkOptions;
|
|
134
|
+
channel?: string;
|
|
135
|
+
post?: (message: string) => void;
|
|
136
|
+
/**
|
|
137
|
+
* Secret the host minted for this page load, echoed on every outbound
|
|
138
|
+
* message. The channel is shared with every frame in the WebView, including
|
|
139
|
+
* the cross-origin wallet; this is what distinguishes this frame from them.
|
|
140
|
+
*/
|
|
141
|
+
token?: string;
|
|
142
|
+
/**
|
|
143
|
+
* The SDK actually facing the integrator. This bundle is compiled into
|
|
144
|
+
* `waap-sdk-flutter`, so a Flutter session would otherwise report itself as
|
|
145
|
+
* the web SDK, at the web SDK's version. Attribution only.
|
|
146
|
+
*/
|
|
147
|
+
sdkPlatform?: WaaPSdkPlatform;
|
|
148
|
+
sdkVersion?: string;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Wire the bridge to the WebView host and begin accepting host messages.
|
|
152
|
+
*
|
|
153
|
+
* Throws when no host channel is present rather than falling back to a no-op:
|
|
154
|
+
* a silently deaf bridge would leave every native call pending forever.
|
|
155
|
+
*/
|
|
156
|
+
declare const startMobileBridge: (options?: StartMobileBridgeOptions) => MobileBridge;
|
|
157
|
+
//#endregion
|
|
158
|
+
export { BRIDGE_EVM_METHODS, BRIDGE_PROTOCOL_VERSION, type BridgeError, type BridgeErrorCode, type BridgeEvent, type BridgeMethod, type BridgeRequest, type BridgeResponse, type MobileBridge, type MobileBridgeOptions, StartMobileBridgeOptions, createMobileBridge, getWaaPIframeDiagnostics, parseHostMessage, resolveNativeHostPost, startMobileBridge };
|
package/dist/bridge.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./evm-64xq-c4L.js"),t=require("./asyncSigning-B0KrmKk7.js"),n=require("./SolanaProvider-CxJX9Dzo.js"),r=[e.O.eth_requestAccounts,e.O.eth_accounts,e.O.eth_sendTransaction,e.O.eth_signTransaction,e.O.eth_getBalance,e.O.personal_sign,e.O.eth_signTypedData_v4,e.O.eth_chainId,e.O.net_version,e.O.wallet_switchEthereumChain,e.O.wallet_addEthereumChain,e.O.eth_estimateGas,e.O.eth_blockNumber,e.O.eth_getCode,e.O.eth_call,e.O.eth_getTransactionReceipt,e.O.eth_getTransactionByHash],i=new Set(r),a=e=>typeof e==`string`&&i.has(e),o=[`session.login`,`session.logout`,`session.status`,`evm.connect`,`evm.request`,`solana.connect`,`solana.disconnect`,`solana.accounts`,`solana.signMessage`,`solana.signTransaction`,`solana.signAndSendTransaction`,`sdk.preload`,`sdk.destroy`],s=e=>typeof e==`string`&&o.includes(e),c=(e,t,n=`protocolError`)=>({ok:!1,id:e,error:{code:n,message:t}}),l=e=>typeof e==`object`&&!!e&&!Array.isArray(e),u=e=>l(e)&&typeof e.id==`string`&&e.id.length>0?e.id:null,d=e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return c(null,`Message is not valid JSON`)}if(!l(t))return c(null,`Message must be a JSON object`);let n=u(t);return t.version===1?t.kind===`request`?n?s(t.method)?{ok:!0,request:{version:1,kind:`request`,id:n,method:t.method,params:t.params}}:{ok:!1,id:n,error:{code:`unsupportedMethod`,message:`Unsupported bridge method: ${String(t.method)}`,method:typeof t.method==`string`?t.method:void 0}}:c(null,`Request id must be a non-empty string`):c(n,`Unsupported message kind: ${String(t.kind)}`):c(n,`Unsupported protocol version: ${String(t.version)}`)},f=(e,t)=>({version:1,kind:`response`,id:e,result:t}),p=(e,t)=>({version:1,kind:`response`,id:e,error:t}),m=(e,t)=>({version:1,kind:`event`,event:e,data:t}),h=e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t),g={cancelled:`cancelled`,timeout:`timeout`,user_rejected:`userRejected`,policy_rejected:`policyRejected`,insufficient_balance:`insufficientBalance`,not_authenticated:`notAuthenticated`,not_connected:`notConnected`,unsupported_input:`unsupportedInput`,wallet_error:`walletError`,maintenance:`maintenance`,unknown:`unknown`},_=[`connect`,`disconnect`,`accountsChanged`,`chainChanged`,...Object.values(t.t)],v=e=>{if(typeof e!=`object`||!e)return;let t=e.code;return typeof t==`number`?t:void 0},y=(t,n)=>{let r=e.E(t),i=v(r.cause??t);return{code:g[r.code]??`unknown`,message:r.message,...i===void 0?{}:{eip1193Code:i},...n?{method:n}:{}}},b=e=>{let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)},x=(e,t)=>{if(typeof e!=`string`)throw{bridgeError:{code:`unsupportedInput`,message:`${t} must be a base64 string`}};let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)r[e]=n.charCodeAt(e);return r},S=e=>({address:e.address,publicKey:b(e.publicKey),chains:[...e.chains]}),C=[`solana:mainnet`,`solana:devnet`,`solana:testnet`,`solana:localnet`],w=e=>{if(e!=null){if(typeof e==`string`&&C.includes(e))return e;throw{bridgeError:{code:`unsupportedInput`,message:`Not a supported Solana chain: ${String(e)}`}}}},T=t=>{let{post:n,createProvider:r,createSolanaProvider:i,token:o}=t,s=null,c=!1,l=new Set,u=[],g=e=>{try{n(e)}catch{}},v=e=>o?{...e,token:o}:e,C=e=>{let t;try{t=h(v(e))}catch(n){let r=n instanceof Error?n.message:String(n);t=h(v(e.kind===`response`?p(e.id,{code:`serializationFailed`,message:`Result could not be serialized for the host: ${r}`}):m(`bridgeSerializationError`,{event:e.event,message:r})))}g(t)},T=e=>{for(let t of _){let n=(...e)=>C(m(t,e.length<=1?e[0]:e));e.on(t,n),u.push([t,n])}},E=e=>{let t=e.uiMessageManager;typeof t?.on==`function`&&(t.on(`show_modal`,()=>C(m(`walletVisibilityChanged`,{visible:!0}))),t.on(`hide_modal`,()=>C(m(`walletVisibilityChanged`,{visible:!1}))))},D=null,O=null,k=t=>{let n=t.walletMessageManager;if(n){if(typeof n.pingIframe!=`function`||typeof n.postSilkRequest!=`function`){C(m(`bridgeProtocolError`,{code:`walletError`,message:`Cannot announce mobile: the wallet message manager is missing pingIframe or postSilkRequest`}));return}O=n.pingIframe().then(()=>n.postSilkRequest?.({method:e.O.set_is_mobile,params:[!0],interactionRequired:!1})).then(()=>void 0).catch(e=>{C(m(`bridgeProtocolError`,{code:`walletError`,message:`Could not tell the wallet it is on mobile: ${String(e)}`}))})}},A=e=>{let t=e.walletMessageManager;typeof t?.addListener==`function`&&t.addListener({onAuthComplete:async e=>{let t=D;if(t){if(D=null,e===`success`){try{await F().request({method:`eth_requestAccounts`})}catch(e){C(m(`bridgeProtocolError`,{code:`walletError`,message:`Login completed but accounts could not be read: ${String(e)}`}))}M(`waap`)}t(e===`success`?`waap`:null)}}})},j=null,M=e=>{j?.setLoginMethod(e)},N=()=>{if(!i)throw{bridgeError:{code:`unsupportedMethod`,message:`This bridge was built without a Solana facade`}};if(!j){let e=F();j=i(),M(e.getLoginMethod())}return j},P=e=>{let t=N().accounts;if(t.length===0)throw{bridgeError:{code:`notConnected`,message:`Connect the Solana facade before signing`}};if(typeof e!=`string`||e.length===0)return t[0];let n=t.find(t=>t.address===e);if(!n)throw{bridgeError:{code:`unsupportedInput`,message:`Not a connected Solana account: ${e}`}};return n},F=()=>(s||(s=r(),T(s),E(s),A(s),k(s)),s),I=async e=>{let t=typeof e.params==`object`&&e.params!==null?e.params:{};switch(e.method){case`sdk.preload`:return await F().preload(),null;case`sdk.destroy`:return R(e.id),null;case`session.login`:{F(),await O;let e=F(),n=e.loginWithNativeHandoff;if(typeof n!=`function`)throw{bridgeError:{code:`walletError`,message:`This provider cannot report a native auth hand-off; social login would silently do nothing`,method:`session.login`}};let r=await n.call(e,{force:t.force===!0});if(typeof r==`object`&&r&&r.isComplete===!1&&typeof r.authUrl==`string`)return C(m(`nativeAuthRequested`,{authUrl:r.authUrl})),await new Promise((e,t)=>{D?.(null);let n=setTimeout(()=>{D=null,t({bridgeError:{code:`timeout`,message:`The social login was not completed. The browser may have been dismissed before it finished.`,method:`session.login`}})},18e4);D=t=>{clearTimeout(n),e(t)}});let i=typeof r==`object`&&r?r.loginMethod??null:r;return M(i),i}case`session.logout`:return await F().logout(),M(null),null;case`session.status`:return F().session.getAccountStatus();case`evm.connect`:return F().request({method:`eth_requestAccounts`});case`solana.connect`:return{accounts:(await N().connect(t.silent===!0?{silent:!0}:void 0)).accounts.map(S)};case`solana.disconnect`:return await N().disconnect(),null;case`solana.accounts`:return{accounts:N().accounts.map(S)};case`solana.signMessage`:{let e=P(t.address),n=await N().signMessage({message:x(t.message,`message`),account:e});return{signedMessage:b(n.signedMessage),signature:b(n.signature)}}case`solana.signTransaction`:{let e=P(t.address),n=w(t.chain),r=await N().signTransaction({transaction:x(t.transaction,`transaction`),account:e,...n===void 0?{}:{chain:n}});return{signedTransaction:b(r.signedTransaction),signature:b(r.signature)}}case`solana.signAndSendTransaction`:{let e=P(t.address),n=w(t.chain);return{signature:(await N().signAndSendTransaction({transaction:x(t.transaction,`transaction`),account:e,...n===void 0?{}:{chain:n}})).signature}}case`evm.request`:if(!a(t.method))throw{bridgeError:{code:`unsupportedMethod`,message:`Method is not available to native callers: ${String(t.method)}`,method:typeof t.method==`string`?t.method:void 0}};return F().request({method:t.method,params:t.params})}},L=(e,t)=>{l.delete(e)&&C(t)},R=e=>{D?.(null),D=null;for(let t of[...l])t!==e&&L(t,p(t,{code:`bridgeUnavailable`,message:`Bridge was destroyed while this request was in flight`}));if(s){for(let[e,t]of u)s.removeListener(e,t);u.length=0;let e=s.destroy;typeof e==`function`&&e.call(s),s=null}j&&=(j.destroy(),null),c=!0};return{handleMessage:e=>{let t=d(e);if(!t.ok){t.id?C(p(t.id,t.error)):C(m(`bridgeProtocolError`,t.error));return}let{request:n}=t;if(c){C(p(n.id,{code:`bridgeUnavailable`,message:`Bridge has been destroyed`}));return}if(l.has(n.id)){C(m(`bridgeProtocolError`,{code:`protocolError`,message:`Request id is already in flight: ${n.id}`,id:n.id,method:n.method}));return}l.add(n.id),(async()=>{try{L(n.id,f(n.id,await I(n)))}catch(e){let t=e?.bridgeError;L(n.id,p(n.id,t??y(e,n.method)))}})()},dispose:()=>R()}},E=(e=`WaaPBridge`,t=window)=>{let n=t[e];if(typeof n?.postMessage==`function`)return e=>n.postMessage(e);let r=t.webkit?.messageHandlers?.[e];return typeof r?.postMessage==`function`?e=>r.postMessage(e):typeof t.ReactNativeWebView?.postMessage==`function`?e=>t.ReactNativeWebView.postMessage(e):null},D=(t={})=>{t.sdkPlatform&&e._(t.sdkPlatform,t.sdkVersion??`unknown`);let r=t.post??E(t.channel);if(!r)throw Error(`[WaaP bridge] No native host channel found. The WebView must install one before loading the bridge page.`);let i={...t.init??{},deferIframe:!1},a=()=>(e.b(i),e.y(`tap`).contentWindow),o=null,s=T({post:r,token:t.token,createProvider:()=>e.n(i,`tap`,!0,[`evm`,`solana`],!1),createSolanaProvider:()=>(o??=new n.t(a(),i,a,{...i,chains:[`solana`]}),o.setAccountMode?.(`tap`),o)});return window.__waapBridgeReceive=e=>s.handleMessage(e),s};exports.BRIDGE_EVM_METHODS=r,exports.BRIDGE_PROTOCOL_VERSION=1,exports.createMobileBridge=T,exports.getWaaPIframeDiagnostics=e.d,exports.parseHostMessage=d,exports.resolveNativeHostPost=E,exports.startMobileBridge=D;
|
package/dist/bridge.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{E as e,O as t,_ as n,b as r,d as i,n as a,y as o}from"./evm-ChOfSh-X.mjs";import{t as s}from"./asyncSigning-CzqBbYDP.mjs";import{t as c}from"./SolanaProvider-CygEwKg1.mjs";const l=[t.eth_requestAccounts,t.eth_accounts,t.eth_sendTransaction,t.eth_signTransaction,t.eth_getBalance,t.personal_sign,t.eth_signTypedData_v4,t.eth_chainId,t.net_version,t.wallet_switchEthereumChain,t.wallet_addEthereumChain,t.eth_estimateGas,t.eth_blockNumber,t.eth_getCode,t.eth_call,t.eth_getTransactionReceipt,t.eth_getTransactionByHash],u=new Set(l),d=e=>typeof e==`string`&&u.has(e),f=1,p=[`session.login`,`session.logout`,`session.status`,`evm.connect`,`evm.request`,`solana.connect`,`solana.disconnect`,`solana.accounts`,`solana.signMessage`,`solana.signTransaction`,`solana.signAndSendTransaction`,`sdk.preload`,`sdk.destroy`],m=e=>typeof e==`string`&&p.includes(e),h=(e,t,n=`protocolError`)=>({ok:!1,id:e,error:{code:n,message:t}}),g=e=>typeof e==`object`&&!!e&&!Array.isArray(e),_=e=>g(e)&&typeof e.id==`string`&&e.id.length>0?e.id:null,v=e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return h(null,`Message is not valid JSON`)}if(!g(t))return h(null,`Message must be a JSON object`);let n=_(t);return t.version===1?t.kind===`request`?n?m(t.method)?{ok:!0,request:{version:1,kind:`request`,id:n,method:t.method,params:t.params}}:{ok:!1,id:n,error:{code:`unsupportedMethod`,message:`Unsupported bridge method: ${String(t.method)}`,method:typeof t.method==`string`?t.method:void 0}}:h(null,`Request id must be a non-empty string`):h(n,`Unsupported message kind: ${String(t.kind)}`):h(n,`Unsupported protocol version: ${String(t.version)}`)},y=(e,t)=>({version:1,kind:`response`,id:e,result:t}),b=(e,t)=>({version:1,kind:`response`,id:e,error:t}),x=(e,t)=>({version:1,kind:`event`,event:e,data:t}),S=e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t),C={cancelled:`cancelled`,timeout:`timeout`,user_rejected:`userRejected`,policy_rejected:`policyRejected`,insufficient_balance:`insufficientBalance`,not_authenticated:`notAuthenticated`,not_connected:`notConnected`,unsupported_input:`unsupportedInput`,wallet_error:`walletError`,maintenance:`maintenance`,unknown:`unknown`},w=[`connect`,`disconnect`,`accountsChanged`,`chainChanged`,...Object.values(s)],T=e=>{if(typeof e!=`object`||!e)return;let t=e.code;return typeof t==`number`?t:void 0},E=(t,n)=>{let r=e(t),i=T(r.cause??t);return{code:C[r.code]??`unknown`,message:r.message,...i===void 0?{}:{eip1193Code:i},...n?{method:n}:{}}},D=e=>{let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)},O=(e,t)=>{if(typeof e!=`string`)throw{bridgeError:{code:`unsupportedInput`,message:`${t} must be a base64 string`}};let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)r[e]=n.charCodeAt(e);return r},k=e=>({address:e.address,publicKey:D(e.publicKey),chains:[...e.chains]}),A=[`solana:mainnet`,`solana:devnet`,`solana:testnet`,`solana:localnet`],j=e=>{if(e!=null){if(typeof e==`string`&&A.includes(e))return e;throw{bridgeError:{code:`unsupportedInput`,message:`Not a supported Solana chain: ${String(e)}`}}}},M=e=>{let{post:n,createProvider:r,createSolanaProvider:i,token:a}=e,o=null,s=!1,c=new Set,l=[],u=e=>{try{n(e)}catch{}},f=e=>a?{...e,token:a}:e,p=e=>{let t;try{t=S(f(e))}catch(n){let r=n instanceof Error?n.message:String(n);t=S(f(e.kind===`response`?b(e.id,{code:`serializationFailed`,message:`Result could not be serialized for the host: ${r}`}):x(`bridgeSerializationError`,{event:e.event,message:r})))}u(t)},m=e=>{for(let t of w){let n=(...e)=>p(x(t,e.length<=1?e[0]:e));e.on(t,n),l.push([t,n])}},h=e=>{let t=e.uiMessageManager;typeof t?.on==`function`&&(t.on(`show_modal`,()=>p(x(`walletVisibilityChanged`,{visible:!0}))),t.on(`hide_modal`,()=>p(x(`walletVisibilityChanged`,{visible:!1}))))},g=null,_=null,C=e=>{let n=e.walletMessageManager;if(n){if(typeof n.pingIframe!=`function`||typeof n.postSilkRequest!=`function`){p(x(`bridgeProtocolError`,{code:`walletError`,message:`Cannot announce mobile: the wallet message manager is missing pingIframe or postSilkRequest`}));return}_=n.pingIframe().then(()=>n.postSilkRequest?.({method:t.set_is_mobile,params:[!0],interactionRequired:!1})).then(()=>void 0).catch(e=>{p(x(`bridgeProtocolError`,{code:`walletError`,message:`Could not tell the wallet it is on mobile: ${String(e)}`}))})}},T=e=>{let t=e.walletMessageManager;typeof t?.addListener==`function`&&t.addListener({onAuthComplete:async e=>{let t=g;if(t){if(g=null,e===`success`){try{await F().request({method:`eth_requestAccounts`})}catch(e){p(x(`bridgeProtocolError`,{code:`walletError`,message:`Login completed but accounts could not be read: ${String(e)}`}))}M(`waap`)}t(e===`success`?`waap`:null)}}})},A=null,M=e=>{A?.setLoginMethod(e)},N=()=>{if(!i)throw{bridgeError:{code:`unsupportedMethod`,message:`This bridge was built without a Solana facade`}};if(!A){let e=F();A=i(),M(e.getLoginMethod())}return A},P=e=>{let t=N().accounts;if(t.length===0)throw{bridgeError:{code:`notConnected`,message:`Connect the Solana facade before signing`}};if(typeof e!=`string`||e.length===0)return t[0];let n=t.find(t=>t.address===e);if(!n)throw{bridgeError:{code:`unsupportedInput`,message:`Not a connected Solana account: ${e}`}};return n},F=()=>(o||(o=r(),m(o),h(o),T(o),C(o)),o),I=async e=>{let t=typeof e.params==`object`&&e.params!==null?e.params:{};switch(e.method){case`sdk.preload`:return await F().preload(),null;case`sdk.destroy`:return R(e.id),null;case`session.login`:{F(),await _;let e=F(),n=e.loginWithNativeHandoff;if(typeof n!=`function`)throw{bridgeError:{code:`walletError`,message:`This provider cannot report a native auth hand-off; social login would silently do nothing`,method:`session.login`}};let r=await n.call(e,{force:t.force===!0});if(typeof r==`object`&&r&&r.isComplete===!1&&typeof r.authUrl==`string`)return p(x(`nativeAuthRequested`,{authUrl:r.authUrl})),await new Promise((e,t)=>{g?.(null);let n=setTimeout(()=>{g=null,t({bridgeError:{code:`timeout`,message:`The social login was not completed. The browser may have been dismissed before it finished.`,method:`session.login`}})},18e4);g=t=>{clearTimeout(n),e(t)}});let i=typeof r==`object`&&r?r.loginMethod??null:r;return M(i),i}case`session.logout`:return await F().logout(),M(null),null;case`session.status`:return F().session.getAccountStatus();case`evm.connect`:return F().request({method:`eth_requestAccounts`});case`solana.connect`:return{accounts:(await N().connect(t.silent===!0?{silent:!0}:void 0)).accounts.map(k)};case`solana.disconnect`:return await N().disconnect(),null;case`solana.accounts`:return{accounts:N().accounts.map(k)};case`solana.signMessage`:{let e=P(t.address),n=await N().signMessage({message:O(t.message,`message`),account:e});return{signedMessage:D(n.signedMessage),signature:D(n.signature)}}case`solana.signTransaction`:{let e=P(t.address),n=j(t.chain),r=await N().signTransaction({transaction:O(t.transaction,`transaction`),account:e,...n===void 0?{}:{chain:n}});return{signedTransaction:D(r.signedTransaction),signature:D(r.signature)}}case`solana.signAndSendTransaction`:{let e=P(t.address),n=j(t.chain);return{signature:(await N().signAndSendTransaction({transaction:O(t.transaction,`transaction`),account:e,...n===void 0?{}:{chain:n}})).signature}}case`evm.request`:if(!d(t.method))throw{bridgeError:{code:`unsupportedMethod`,message:`Method is not available to native callers: ${String(t.method)}`,method:typeof t.method==`string`?t.method:void 0}};return F().request({method:t.method,params:t.params})}},L=(e,t)=>{c.delete(e)&&p(t)},R=e=>{g?.(null),g=null;for(let t of[...c])t!==e&&L(t,b(t,{code:`bridgeUnavailable`,message:`Bridge was destroyed while this request was in flight`}));if(o){for(let[e,t]of l)o.removeListener(e,t);l.length=0;let e=o.destroy;typeof e==`function`&&e.call(o),o=null}A&&=(A.destroy(),null),s=!0};return{handleMessage:e=>{let t=v(e);if(!t.ok){t.id?p(b(t.id,t.error)):p(x(`bridgeProtocolError`,t.error));return}let{request:n}=t;if(s){p(b(n.id,{code:`bridgeUnavailable`,message:`Bridge has been destroyed`}));return}if(c.has(n.id)){p(x(`bridgeProtocolError`,{code:`protocolError`,message:`Request id is already in flight: ${n.id}`,id:n.id,method:n.method}));return}c.add(n.id),(async()=>{try{L(n.id,y(n.id,await I(n)))}catch(e){let t=e?.bridgeError;L(n.id,b(n.id,t??E(e,n.method)))}})()},dispose:()=>R()}},N=(e=`WaaPBridge`,t=window)=>{let n=t[e];if(typeof n?.postMessage==`function`)return e=>n.postMessage(e);let r=t.webkit?.messageHandlers?.[e];return typeof r?.postMessage==`function`?e=>r.postMessage(e):typeof t.ReactNativeWebView?.postMessage==`function`?e=>t.ReactNativeWebView.postMessage(e):null},P=(e={})=>{e.sdkPlatform&&n(e.sdkPlatform,e.sdkVersion??`unknown`);let t=e.post??N(e.channel);if(!t)throw Error(`[WaaP bridge] No native host channel found. The WebView must install one before loading the bridge page.`);let i={...e.init??{},deferIframe:!1},s=()=>(r(i),o(`tap`).contentWindow),l=null,u=M({post:t,token:e.token,createProvider:()=>a(i,`tap`,!0,[`evm`,`solana`],!1),createSolanaProvider:()=>(l??=new c(s(),i,s,{...i,chains:[`solana`]}),l.setAccountMode?.(`tap`),l)});return window.__waapBridgeReceive=e=>u.handleMessage(e),u};export{l as BRIDGE_EVM_METHODS,f as BRIDGE_PROTOCOL_VERSION,M as createMobileBridge,i as getWaaPIframeDiagnostics,v as parseHostMessage,N as resolveNativeHostPost,P as startMobileBridge};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./WalletConnect-Dn40Omgo.js");let t=require("events"),n=require("ethers");var r;(function(e){e.request=`request`,e.response=`response`,e.notification=`notification`})(r||={});var i;(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.set_signing_mode=`set_signing_mode`,e.enter_lite_mode=`enter_lite_mode`})(i||={});var a;(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`})(a||={});var o;(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`})(o||={});var s=class extends Error{constructor(e,t,n={}){super(t),this.name=`WaaPError`,this.code=e,this.operation=n.operation,this.cause=n.cause}};function c(e,t){if(e instanceof s)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,a=r.toLowerCase();return new s(a.includes(`cancelled`)||a.includes(`canceled`)?`cancelled`:a.includes(`timed out`)?`timeout`:a.includes(`insufficient balance`)?`insufficient_balance`:a.includes(`policy`)||a.includes(`permission token`)?`policy_rejected`:i===4001||a.includes(`rejected`)?`user_rejected`:a.includes(`not connected`)?`not_connected`:a.includes(`not authenticated`)||a.includes(`log in first`)?`not_authenticated`:a.includes(`unsupported`)||a.includes(`must be base64`)?`unsupported_input`:n?`wallet_error`:`unknown`,r,{cause:e,operation:t})}const l=`waap-wallet`,u=`waap-component-container`,d=typeof window<`u`&&typeof document<`u`&&typeof HTMLElement<`u`;let f;d?(f=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=u,this.setAttribute(`data-waap-mounted`,`true`)}disconnectedCallback(){this.removeAttribute(`data-waap-mounted`)}},typeof customElements<`u`&&!customElements.get(l)&&customElements.define(l,f)):f=class{};function p(){return d?!!document.getElementById(u)||!!document.querySelector(l):!1}function m(){return d?document.getElementById(u)||document.querySelector(l):null}const h=`https://staging.waap.xyz`,g={development:`http://localhost:3000`,staging:h,production:`https://waap.xyz`},ee=e=>e===`localhost`||e===`127.0.0.1`||e===`[::1]`;function _(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 v(e={}){return e.walletOrigin?_(e.walletOrigin):e.environment?_(g[e.environment]):e.useStaging?_(h):_(g.production)}const y=new WeakMap,b=new WeakMap,te=()=>typeof performance<`u`?performance.now():Date.now(),x=e=>({generation:e.generation,navigationStartedAt:e.navigationStartedAt,loadedAt:e.loadedAt}),S=e=>{let t=e.contentWindow;if(!t)return;let n=b.get(e);if(n&&y.get(t)===n)return;n?.cleanup(),n&&(b.delete(e),y.get(t)===n&&y.delete(t));let r=y.get(t);if(r?.iframe===e)return;r?.cleanup(),r&&b.delete(r.iframe);let i={iframe:e,generation:0,navigationStartedAt:te(),loadedAt:null,listeners:new Set,cleanup:()=>{}},a=()=>{i.generation+=1,i.loadedAt=te();let e=x(i);for(let t of Array.from(i.listeners))t(e)};i.cleanup=()=>{e.removeEventListener(`load`,a),i.listeners.clear()},e.addEventListener(`load`,a),y.set(t,i),b.set(e,i)},ne=e=>{let t=b.get(e);if(t){t.cleanup(),b.delete(e);let n=e.contentWindow;n&&y.get(n)===t&&y.delete(n);return}let n=e.contentWindow;if(!n)return;let r=y.get(n);!r||r.iframe!==e||(r.cleanup(),y.delete(n))},C=e=>{let t=y.get(e);return t?x(t):null},re=(e,t)=>{let n=y.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(x(n)):Promise.resolve(null)},ie=(e,t)=>{let n=y.get(e);return n?(n.listeners.add(t),()=>n.listeners.delete(t)):()=>{}},ae=`waap-wallet-loading-styles`,w=`waap-iframe-visual-ready`,T=typeof window<`u`&&typeof document<`u`,oe=()=>{if(!T||document.getElementById(ae))return;let e=document.createElement(`style`);e.id=ae,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)},se=(e={})=>v(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},ce=(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)}},le=(e,t)=>{let n=e.__silkCleanup;e.__silkCleanup=()=>{n?.(),t()}},ue=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},de=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{}},fe=(e,t)=>{e.dataset.waapTheme=t?`dark`:`light`},pe=(e,t)=>{let n=e;de(n);let r=document.createElement(`iframe`);return r.id=`waap-wallet-iframe`,r.dataset.waapOrigin=n,fe(r,t),S(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},me=()=>{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},he=()=>{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},ge=(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 le(t,d),d},_e=(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 le(t,i),i},ve=()=>{setTimeout(()=>{if(typeof document>`u`)return;let e=D();e&&(e.style.height=`600px`,e.style.width=`380px`)},100)},ye=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},be=(e,t)=>{let n=m();if(!n)throw Error(`WaaP component not found in DOM`);if(ye(e))return;let r=me(),i=pe(e,t);ge(e,i),_e(e,i),ve(),r.appendChild(i),n.appendChild(r),S(i)},xe=(e,t)=>{if(ye(e))return;let n=he(),r=me();n.appendChild(r);let i=pe(e,t);ge(e,i),_e(e,i),ve(),r.appendChild(i),document.body.appendChild(n),S(i)},j=(e={})=>{if(!T)return;oe();let t=se(e),n=e.config?.styles?.darkMode===!0,r=O();r&&fe(r,n),p()?be(t,n):xe(t,n)},M=()=>{if(!T)return;Re();let e=O(),t=e?.__silkCleanup;typeof t==`function`&&t(),e&&ne(e);let n=D(),r=E();r?r.remove():n?.remove(),document.querySelectorAll(`link[data-waap-preconnect]`).forEach(e=>{e.remove()})};let Se=0;async function Ce(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 we(new Uint8Array(e))}return Se+=1,we(new TextEncoder().encode(`${t}:${Se}:${Math.random()}:${JSON.stringify(e)}`)).padEnd(64,`0`).slice(0,64)}function we(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}const N=new WeakMap,Te=(e,t)=>{let n=N.get(e);if(n)return n;let r=t();return N.set(e,r),r.catch(()=>{N.get(e)===r&&N.delete(e)}),r},Ee=e=>{N.delete(e)};let P=null;const De=(e,t)=>{P={platform:e,version:t}},F=(e,t={})=>({schemaVersion:1,accountMode:e,sessionProtection:`dpop`,sdkPlatform:P?.platform??`web`,sdkVersion:P?.version??`2.4.0`,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}:{}}),I=new Set;let L=!1,R;const z=new WeakMap,Oe=(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}}},B=e=>{let t=z.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 z.set(e,n),n},V=(e,t)=>{let n=z.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)},ke=()=>typeof performance<`u`?performance.now():Date.now();let H=null;const U=new Set,Ae=()=>{for(let e of U)if(!e.isDisposed())return e.getHandshakeDiagnostics();return H},je=(e,t,n)=>{let{handleResponse:i,handleRequest:a,onReceiveConnectNotif:s,onAccountChanged:c,onAsyncTxNotification:l,onSquidLifecycleNotification:u,onAuthComplete:d}=n;if(e.origin===t.walletOrigin&&e.source===t.getIframeWindow()&&e.data?.target===`silk`)if(e.data?.messageType===r.request)a?.(e.data);else if(e.data?.messageType===r.response){if(i){let n=e.data;t.shouldHandleTerminalResponse(n.id)&&i(n)}}else e.data?.messageType===r.notification&&(e.data?.data===o.connect?s?.():e.data?.data?.type===o.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===o.mobile_oauth_success||e.data?.data===o.mobile_oauth_error)&&d?d(e.data.data===o.mobile_oauth_success?`success`:`error`):e.data?.data?.type?.startsWith(`waap_squid_`)&&u&&u({type:e.data.data.type,payload:e.data.data.payload}))},Me=()=>{L||typeof window>`u`||(L=!0,R=e=>{for(let{manager:t,config:n}of Array.from(I))je(e,t,n)},window.addEventListener(`message`,R))},Ne=()=>{I.size>0||!L||!R||typeof window>`u`||(window.removeEventListener(`message`,R),R=void 0,L=!1)};var Pe=class{constructor(e,t){this.iframeWindow=null,this.unregisterListeners=new Set,this.terminalResponseDeduper=Oe(),this.unsubscribeIframeNavigation=null,this.disposed=!1,this.iframeWindow=e,this.walletOrigin=typeof t==`string`?t:v(t===!0?{useStaging:!0}:{}),e&&this.observeIframeNavigation(e),U.add(this)}observeIframeNavigation(e){this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=ie(e,()=>{let t=B(e);(t.ready||t.readyPingStartedAt!==null)&&(Ee(e),V(e,Error(`WaaP iframe reloaded; readiness must be re-established`)),this.terminalResponseDeduper.clear())})}setIframeWindow(e){this.iframeWindow&&this.iframeWindow!==e&&(V(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?C(e):null,n=e?B(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 H=r,r}postSilkNotification(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);this.iframeWindow.postMessage({target:`silk`,messageType:r.notification,data:e},this.walletOrigin)}postReadyNotification(){this.postSilkNotification(o.ready)}postConnectNotification(){this.postSilkNotification(o.connect)}cancelSilkRequest(e,t){this.postSilkNotification({type:o.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 t=B(e),n=C(e);return t.ready&&(!n||t.navigationGeneration===n.generation)?Promise.resolve():(t.ready&&V(e,Error(`WaaP iframe navigation changed; readiness must be re-established`)),t.promise?t.promise:(t.lastError=null,t.readyPingStartedAt=null,t.readyAt=null,t.readyAttempts=0,t.visualReadySupported=null,t.promise=new Promise((n,i)=>{t.reject=i,re(e,3e4).then(n=>{if(this.disposed||this.iframeWindow!==e)throw Error(`Wallet message manager is disposed`);return new Promise((i,a)=>{let s=a=>{if(a.origin===this.walletOrigin&&a.source===e&&a.data?.target===`silk`&&a.data.messageType===r.notification&&a.data.data===o.ready){t.ready=!0,t.navigationGeneration=C(e)?.generation??n?.generation??null,t.readyAt=ke(),t.visualReadySupported=a.data?.capabilities?.visualReady===1;let r=O();r?.contentWindow===e&&A(r,t.visualReadySupported),p(),i()}},c=()=>{try{t.readyAttempts+=1,this.postReadyNotification()}catch(e){p(),a(e)}};t.readyPingStartedAt=ke();let l=250,u,d=()=>{u=window.setTimeout(()=>{c(),l=Math.min(l*2,1e3),d()},l)},f=window.setTimeout(()=>{p(),a(Error(`WaaP wallet ready handshake timed out after 10s.`))},1e4),p=()=>{u!==void 0&&window.clearTimeout(u),window.clearTimeout(f),window.removeEventListener(`message`,s),t.cleanup===p&&(t.cleanup=null,t.reject=null)};t.cleanup=p,t.reject=a,window.addEventListener(`message`,s),c(),d()})}).then(n,i)}),t.promise=t.promise.finally(()=>{t.ready||(t.lastError=t.lastError??`Wallet readiness failed`,t.promise=null)}),t.promise.catch(e=>{t.lastError=e instanceof Error?e.message:String(e)}),t.promise))}async postSilkRequest(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);let{silkOptions:t,...n}=e,i={...n,target:`silk`,messageType:r.request,...t&&{silkOptions:t}},a=await Ce(i);return this.iframeWindow.postMessage({...i,id:a},this.walletOrigin),a}addListener(e){if(this.disposed)throw Error(`Wallet message manager is disposed`);Me();let t={manager:this,config:e};I.add(t);let n=()=>{this.unregisterListeners.delete(n)&&(I.delete(t),Ne())};return this.unregisterListeners.add(n),n}dispose(){this.disposed||(this.disposed=!0,this.iframeWindow&&V(this.iframeWindow,Error(`Wallet message manager was disposed`)),Array.from(this.unregisterListeners).forEach(e=>e()),this.terminalResponseDeduper.clear(),this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=null,H=this.getHandshakeDiagnostics(),this.iframeWindow=null,U.delete(this))}};const W=`waap-wallet-iframe-loading`,G=new Set,K=()=>typeof performance<`u`?performance.now():Date.now(),q=e=>{G.forEach(t=>{try{t(e)}catch{}})},Fe=e=>(G.add(e),()=>G.delete(e));var Ie=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=K(),this.visibleAt=null,this.usedVisualFallback=!1,q({phase:`modal_requested`,at:this.requestedAt,visualRevision:this.pendingRevision}),this.hideIframeUntilPaint(t),n===`modal`?this.showModalSurface():t.style.display=`flex`;let r=ce(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=K();e&&q({phase:`modal_cancelled`,at:t,visualRevision:k(this.iframe)}),q({phase:`modal_hidden`,at:t,visualRevision:k(this.iframe)});let n=D();if(n&&delete n.dataset.waapSizeLocked,p()){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(p()){let t=m();return t&&e.parentElement!==t&&t.appendChild(e),`component`}let t=E();return t||(t=he(),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=K(),this.usedVisualFallback=e,q({phase:`modal_visible`,at:this.visibleAt,visualRevision:t,fallback:e});let n=D();if(!n)return;delete n.dataset.waapSizeLocked;let r=n.querySelector(`#${W}`);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(`#${W}`);if(t)return this.applyLoadingTheme(t),t;t=document.createElement(`div`),t.id=W,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 J;const Le=()=>{let e=O();return e?(J&&!J.isFor(e)&&(J.dispose(),J=void 0),J??=new Ie(e),J):null},Y=e=>{Le()?.show(e)},X=()=>{Le()?.hide()},Re=()=>{J?.dispose(),J=void 0},ze=()=>{let e=O(),t=e?.contentWindow?C(e.contentWindow):null,n=J?.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:Ae()}},Be=new Set([a.eth_sendTransaction,a.eth_signTransaction,a.personal_sign,a.eth_signTypedData_v4]),Ve=e=>Be.has(e);function He(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 Ue(e){if(typeof e!=`object`||!e)return e;try{e.waapCode=c(e).code}catch{}return e}async function Z(e,t,n,r,a){let o=e.method,s=e.params,{timeoutMs:c,signal:l,...u}=a??{};t&&Y({layout:o===i.login?`auth`:`signing`});let d;try{d=await n.postSilkRequest({method:o,params:s,interactionRequired:t,silkOptions:a?u:void 0});let e=await He({eventEmitter:r,id:d,method:o,interactionRequired:t,timeoutMs:c,signal:l,onCancel:()=>{n.cancelSilkRequest(d,o),t&&X()}});if(t&&X(),e.error)throw Ue(e.error);return e.data}catch(e){throw t&&d===void 0&&X(),e}}const We=(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 Ge=function(e){return e.show_modal=`show_modal`,e.hide_modal=`hide_modal`,e}(Ge||{}),Q=class extends t.EventEmitter{constructor(){super()}};const Ke=e=>typeof e==`object`&&!!e&&e.isComplete===!1&&typeof e.authUrl==`string`;function qe(e){return!(!e?.isMetaMask||e.isApexWallet||e.isAvalanche||e.isBitKeep||e.isBlockWallet||e.isMathWallet||e.isOkxWallet||e.isOKExWallet||e.isOneInchIOSWallet||e.isOneInchAndroidWallet||e.isOpera||e.isPortal||e.isRabby||e.isDefiant||e.isTokenPocket||e.isTokenary||e.isZerion)}function Je(e){try{if(!e||!Array.isArray(e))return!1;let t=JSON.parse(typeof e[1]==`string`?e[1]:JSON.stringify(e[1]));return t.primaryType===`SafeTx`&&t.domain?.verifyingContract!==void 0&&t.message&&`to`in t.message&&`value`in t.message&&`safeTxGas`in t.message&&`baseGas`in t.message&&`gasPrice`in t.message&&`nonce`in t.message}catch{return!1}}const Ye={styles:{darkMode:!1}},$=[`waap`,`human`,`injected`,`walletconnect`],Xe=[a.eth_sendTransaction,a.eth_signTransaction,a.eth_signTypedData_v4,a.personal_sign];function Ze(e){if(e==null)return null;if(typeof e==`string`){if($.includes(e))return e;throw Error(`[EthereumProvider] Unexpected login method: "${e}". Expected one of: ${$.join(`, `)}`)}if(typeof e==`object`&&`loginMethod`in e&&typeof e.loginMethod==`string`){let t=e.loginMethod;if(console.warn(`[EthereumProvider] Received object login response. Normalizing "${t}" to string. This is unexpected for the web SDK.`),$.includes(t))return t;throw Error(`[EthereumProvider] Unknown loginMethod in object: "${t}". Expected one of: ${$.join(`, `)}`)}throw Error(`[EthereumProvider] Unexpected login response: ${JSON.stringify(e)} (type: ${typeof e})`)}var Qe=class extends t.EventEmitter{setExposeOnWindow(e){this.exposeOnWindow=e}constructor(e,n,r,a,o,s=!1,c=!1,l,u=[`evm`]){super(),this.lastKnownConversion=`pending`,this.isSilk=!0,this.isWaaP=!0,this.connected=!1,this.exposeOnWindow=!0,this.currentAccount=null,this.accountMode=`tap`,this.walletConnectProvider=null,this.asyncTxs=!1,this.legacyAsyncSigning=!1,this.internalEventEmitter=new t.EventEmitter,this.iframeMounted=!0,this.initializerPromise=null,this.sessionProbe=null,this.initializedIframeWindow=null,this.waapRestoreRetryAt=0,this.asyncTxs=s,this.legacyAsyncSigning=c,this.ensureIframe=l,this.iframeMounted=!l,this.referralCode=n,this.project=a,this.customConfig=r,this.initializerChains=u,this.uiMessageManager=new Q,this.walletMessageManager=new Pe(e,o),this.config={...Ye,...r||{}},this.persistedMethods={login:this.login.bind(this),logout:this.logout.bind(this),getLoginMethod:this.getLoginMethod.bind(this),walletMessageManager:this.walletMessageManager,internalEventEmitter:this.internalEventEmitter,uiMessageManager:this.uiMessageManager,portal:this.portal.bind(this),requestEmail:this.requestEmail.bind(this),requestSBT:this.requestSBT.bind(this),requestPermissionToken:this.requestPermissionToken.bind(this),getLinkedAddresses:this.getLinkedAddresses.bind(this),linkAddress:this.linkAddress.bind(this),unlinkAddress:this.unlinkAddress.bind(this),orcid:this.orcid.bind(this),enable:this.enable.bind(this),isConnected:this.isConnected.bind(this),toggleDarkMode:this.toggleDarkMode.bind(this),destroy:this.destroy.bind(this),silkRequest:this.request.bind(this),waaPRequest:this.request.bind(this)},this.walletMessageManager.addListener({onReceiveConnectNotif:()=>{this.connected=!0,this.emit(`connect`)},handleResponse:e=>this.internalEventEmitter.emit(e.id,e),handleRequest:e=>{e.method===i.show_modal?this.uiMessageManager.emit(`show_modal`):e.method===i.hide_modal&&this.uiMessageManager.emit(`hide_modal`)},onAccountChanged:e=>{this.currentAccount!==e&&(this.currentAccount=e,this.emit(`accountsChanged`,e?[e]:[]))},onAsyncTxNotification:e=>{this.emit(e.type,e.payload)},onSquidLifecycleNotification:e=>{this.emit(e.type,e.payload)}})}async initializeWalletConnect(){try{this.walletConnectProvider=await e.t.getInstance()}catch(e){console.error(`Failed to initialize WalletConnect provider:`,e),this.walletConnectProvider=null}}async initializeIframeContext(){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=Te(e,async()=>{await this.walletMessageManager.pingIframe(),await Z({method:i.set_signing_mode,params:[F(this.accountMode,{referralCode:this.referralCode,project:this.project,config:this.customConfig,chains:this.initializerChains})]},!1,this.walletMessageManager,this.internalEventEmitter)});try{await this.initializerPromise}catch(e){throw this.initializerPromise=null,this.initializedIframeWindow=null,e}}async reassertIframeAccountMode(){this.ensureIframeMounted(),await this.walletMessageManager.pingIframe(),await Z({method:i.set_signing_mode,params:[F(this.accountMode,{referralCode:this.referralCode,project:this.project,config:this.customConfig,chains:this.initializerChains})]},!1,this.walletMessageManager,this.internalEventEmitter)}ensureIframeMounted(){if(this.iframeMounted||!this.ensureIframe)return;let e=this.ensureIframe();e&&(this.iframeMounted=!0,this.walletMessageManager.setIframeWindow(e))}async ensureInitialized(){this.ensureIframeMounted(),await this.initializeIframeContext()}async preload(){await this.ensureInitialized()}async enable(){return this.request({method:`eth_requestAccounts`})}isConnected(){return this.connected}getAccountStatus(){let e=this.getLoginMethod();return{authenticated:e!==null,loginMethod:e,activeMode:e?this.accountMode:null,mode:this.accountMode,conversion:e?this.lastKnownConversion:`not_required`,tap:null,squid:null,accounts:this.currentAccount?{evm:this.currentAccount}:{}}}get session(){return{login:e=>this.login(e),logout:async()=>{await this.logout()},getLoginMethod:()=>this.getLoginMethod(),getAccountStatus:()=>this.getCanonicalAccountStatus()}}async getCanonicalAccountStatus(){await this.ensureInitialized();let e=await Z({method:i.waap_getAccountStatus,params:[]},!1,this.walletMessageManager,this.internalEventEmitter);return e?.conversion&&(this.lastKnownConversion=e.conversion),e}setAccountMode(e){this.accountMode=e,this.initializerPromise=null,this.initializedIframeWindow=null}async request(e){if(!Object.keys(a).includes(e.method))return Promise.reject({error:`Not implemented (${e.method})`});let t=await this.attemptAutoConnect(e.method);if(t!==null)return t;if(Xe.includes(e.method)&&!(this.getLoginMethod()!==null||await this.restorePersistedWaaPSession()!==null))return Promise.reject(new s(`not_authenticated`,`Not authenticated: call login() before signing.`,{operation:{chain:`evm`,method:e.method}}));if(Je(e.params)&&e.method!==a.eth_signTypedData_v4)return Promise.reject({error:`Safe transactions must be signed using eth_signTypedData_v4`});await this.ensureInitialized();let n=(e.method===a.eth_sendTransaction||e.method===a.eth_signTransaction||e.method===a.eth_signTypedData_v4||e.method===a.personal_sign)&&this.asyncTxs||e.async,r=n||e.withPT||e.timeoutMs!==void 0||e.signal?this.legacyAsyncSigning?{asyncSigning:n||void 0,withPT:e.withPT,timeoutMs:e.timeoutMs,signal:e.signal}:{async:n,withPT:e.withPT,timeoutMs:e.timeoutMs,signal:e.signal}:void 0,i=await Z(e,Ve(e.method),this.walletMessageManager,this.internalEventEmitter,r);if((e.method===a.wallet_switchEthereumChain||e.method===a.wallet_addEthereumChain)&&i===null){this.emit(`chainChanged`,e.params?.[0]?.chainId);try{let t=await this.request({method:`eth_accounts`});t&&t.length>0&&(this.currentAccount=t[0],this.emit(`accountsChanged`,t),this.emit(`connect`,{chainId:e.params?.[0]?.chainId}))}catch(t){console.warn(`[EthereumProvider] Failed to get accounts after chain switch:`,t),this.currentAccount&&(this.emit(`accountsChanged`,[this.currentAccount]),this.emit(`connect`,{chainId:e.params?.[0]?.chainId}))}}return e.method===a.eth_requestAccounts&&Array.isArray(i)&&typeof i[0]==`string`&&(this.currentAccount=i[0],this.connected=!0,typeof window<`u`&&typeof localStorage<`u`&&localStorage.setItem(`${window.location.origin}-connected`,`waap`),this.emit(`accountsChanged`,i),this.emit(`connect`)),i}async login(e){let t=await this.loginWithNativeHandoff(e);if(Ke(t))throw Error(`[WaaP SDK] The wallet returned a native auth hand-off. Use loginWithNativeHandoff() from a native host.`);return t}async loginWithNativeHandoff(t){if(this.waapRestoreRetryAt=0,typeof window>`u`||typeof document>`u`)return null;let n=t&&!(`request`in t)?t:void 0,r=n?n.customProvider:t;if(await this.ensureInitialized(),!n?.force&&await this.restorePersistedWaaPSession())return this.getLoginMethod()??`waap`;let a=r||window.ethereum,o=a&&qe(a)?`MetaMask`:`Browser Wallet`,s=await Z({method:i.login,params:[o]},!0,this.walletMessageManager,this.internalEventEmitter);if(Ke(s))return s;let c=Ze(s);if(c===null)return null;switch(c){case`waap`:case`human`:localStorage.setItem(`${window.location.origin}-connected`,`waap`),this.setupWaaP();break;case`injected`:a&&(localStorage.setItem(`${window.location.origin}-connected`,`injected`),this.setupInjectedWallet(a));break;case`walletconnect`:{localStorage.setItem(`${window.location.origin}-connected`,`walletconnect`),this.walletConnectProvider||await this.initializeWalletConnect(),e.t.isConnected()||(await this.walletConnectProvider.open({view:`Connect`}),await e.t.listenToAccountChangeEvent());let t=e.t.getWalletProvider();this.setupWalletConnect(t);break}}return c}async logout(){await this.ensureInitialized(),this.cleanupInvalidLoginState(),this.waapRestoreRetryAt=0,this.lastKnownConversion=`pending`,this.currentAccount=null,this.connected=!1,this.emit(`accountsChanged`,[]),this.emit(`disconnect`);try{this.walletConnectProvider&&await this.walletConnectProvider.disconnect()}catch(e){console.error(`Error disconnecting from WalletConnect:`,e)}return Z({method:i.logout},!1,this.walletMessageManager,this.internalEventEmitter)}destroy(){if(this.walletMessageManager.dispose(),this.internalEventEmitter.removeAllListeners(),this.uiMessageManager.removeAllListeners(),this.removeAllListeners(),this.connected=!1,this.walletConnectProvider&&=(this.walletConnectProvider.disconnect().catch(()=>void 0),null),typeof window<`u`){let e=window;(e.silk===this||e.silk?.walletMessageManager===this.walletMessageManager)&&delete e.silk,(e.waap===this||e.waap?.walletMessageManager===this.walletMessageManager)&&delete e.waap}M()}cleanupInvalidLoginState(){try{localStorage.removeItem(`${window.location.origin}-connected`)}catch(e){console.warn(`Could not clean up login state:`,e)}}setupWaaP(){if(!this.exposeOnWindow)return;let e={...this.persistedMethods,isWaaP:!0,on:this.on.bind(this),removeListener:this.removeListener.bind(this),request:this.request.bind(this)};window.silk=e,window.waap=e}setupInjectedWallet(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!0,connected:e.connected??!1,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}setupWalletConnect(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!0,connected:!0,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}setupAutoConnectInjected(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!1,connected:e.isConnected?.()??!1,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}setupAutoConnectWalletConnect(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!1,connected:!0,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}async attemptAutoConnect(t){if(t!==`eth_requestAccounts`&&t!==`eth_accounts`)return null;let n=this.getLoginMethod();if(n===`waap`||n===`human`||n===null&&t===`eth_accounts`&&Date.now()>=this.waapRestoreRetryAt){let e=await this.restorePersistedWaaPSession();if(e)return e;n===null&&(this.waapRestoreRetryAt=Date.now()+5e3)}if(n===`injected`&&window.ethereum)try{return this.setupAutoConnectInjected(window.ethereum),window.ethereum.request({method:`eth_requestAccounts`})}catch(e){return console.warn(`Injected wallet auto-connect failed:`,e),this.cleanupInvalidLoginState(),null}else if(n===`walletconnect`)try{if(this.walletConnectProvider||=await e.t.getInstance(),await e.t.waitForReadyAndCheckConnection()){let t=e.t.getWalletProvider();return this.setupAutoConnectWalletConnect(t),t.request({method:`eth_requestAccounts`})}else return this.cleanupInvalidLoginState(),null}catch(e){return console.warn(`WalletConnect auto-connect failed:`,e),this.cleanupInvalidLoginState(),null}return null}restorePersistedWaaPSession(){return this.sessionProbe??=this.probeWaaPSession().finally(()=>{this.sessionProbe=null}),this.sessionProbe}async probeWaaPSession(){try{if(await this.ensureInitialized(),!(await this.getCanonicalAccountStatus()).authenticated)return this.cleanupInvalidLoginState(),null;let e=await Z({method:i.auto_conn,params:[window.location.origin]},!1,this.walletMessageManager,this.internalEventEmitter);if(Array.isArray(e)&&e.length>0)return this.currentAccount=e[0],this.connected=!0,localStorage.setItem(`${window.location.origin}-connected`,`waap`),this.setupWaaP(),e}catch(e){console.warn(`WaaP session probe failed:`,e)}return this.cleanupInvalidLoginState(),null}getLoginMethod(){if(typeof window>`u`||typeof localStorage>`u`)return null;try{let t=localStorage.getItem(`${window.location.origin}-connected`);if(!t)return null;if(![`waap`,`human`,`injected`,`walletconnect`].includes(t))return this.cleanupInvalidLoginState(),null;switch(t){case`injected`:return window.ethereum?`injected`:(this.cleanupInvalidLoginState(),null);case`walletconnect`:try{return e.t.isConnected()?`walletconnect`:(this.cleanupInvalidLoginState(),null)}catch{return this.cleanupInvalidLoginState(),null}case`waap`:return`waap`;case`human`:return`human`;default:return this.cleanupInvalidLoginState(),null}}catch(e){return console.warn(`Error checking login method:`,e),this.cleanupInvalidLoginState(),null}}async toggleDarkMode(){this.config.styles.darkMode=!this.config.styles.darkMode,await this.ensureInitialized();try{await Z({method:i.set_custom_config,params:[this.config]},!1,this.walletMessageManager,this.internalEventEmitter)}catch(e){console.error(`Error setting custom config in Silk iframe:`,e)}}async safe(){await this.ensureInitialized(),await Z({method:i.safe},!0,this.walletMessageManager,this.internalEventEmitter)}async orcid(){await this.ensureInitialized(),await Z({method:i.orcid},!0,this.walletMessageManager,this.internalEventEmitter)}async portal(e,t,n){await this.ensureInitialized();let r;switch(t){case`get`:r=e===`gastank`?i.gastank_get_settings:i.customization_get;break;case`update`:r=e===`gastank`?i.gastank_update_settings:i.customization_update;break;case`topup`:r=i.gastank_topup;break;case`init`:r=i.project_init;break}let a=t!==`get`&&e!==`customization`;return Z({method:r,params:[n,window.location.origin]},a,this.walletMessageManager,this.internalEventEmitter)}async requestEmail(){return await this.ensureInitialized(),Z({method:i.silk_requestEmail},!0,this.walletMessageManager,this.internalEventEmitter)}async requestPermissionToken(e){await this.ensureInitialized();let t={...e,walletMode:this.accountMode};return Z({method:i.waap_requestPermissionToken,params:[t]},!0,this.walletMessageManager,this.internalEventEmitter)}async getPermissionTokenStatus(e){return await this.ensureInitialized(),await Z({method:i.waap_getPermissionTokenStatus,params:[e]},!1,this.walletMessageManager,this.internalEventEmitter)}async clearPermissionToken(e){return await this.ensureInitialized(),await Z({method:i.waap_clearPermissionToken,params:[e]},!1,this.walletMessageManager,this.internalEventEmitter)}async requestSBT(e){return await this.ensureInitialized(),Z({method:i.silk_requestSbt,params:[e]},!0,this.walletMessageManager,this.internalEventEmitter)}async getLinkedAddresses(){return await this.walletMessageManager.pingIframe(),(await Z({method:i.waap_getLinkedAddresses,params:[]},!1,this.walletMessageManager,this.internalEventEmitter)).addresses}async linkAddress(t){if(typeof window>`u`)throw Error(`linkAddress requires a browser environment`);this.walletConnectProvider||await this.initializeWalletConnect(),e.t.isConnected()||(await this.walletConnectProvider.open({view:`Connect`}),await e.t.listenToAccountChangeEvent());let n=e.t.getWalletProvider();if(!n)throw Error(`No wallet provider available after connection`);let r=(await n.request({method:`eth_accounts`}))[0];if(!r||r.toLowerCase()!==t.toLowerCase())throw Error(`Connected wallet account ${r??`(none)`} does not match requested address ${t}`);await this.walletMessageManager.pingIframe();let a=await Z({method:i.waap_getLinkAddressNonce,params:[]},!1,this.walletMessageManager,this.internalEventEmitter),o=$e({domain:window.location.host,address:t,uri:window.location.origin,nonce:a.nonce,issuedAt:new Date().toISOString()}),s=await n.request({method:`personal_sign`,params:[o,t]});return(await Z({method:i.waap_linkAddress,params:[{message:o,signature:s}]},!1,this.walletMessageManager,this.internalEventEmitter)).addresses}async unlinkAddress(e){return await this.walletMessageManager.pingIframe(),(await Z({method:i.waap_unlinkAddress,params:[{address:e}]},!1,this.walletMessageManager,this.internalEventEmitter)).addresses}};function $e(e){let t=(0,n.getAddress)(e.address);return`${`${e.domain} wants you to sign in with your Ethereum account:\n${t}`}\n\nLink this wallet to your Human Wallet account.\n\n${[`URI: ${e.uri}`,`Version: 1`,`Chain ID: 1`,`Nonce: ${e.nonce}`,`Issued At: ${e.issuedAt}`].join(`
|
|
2
|
+
`)}`}const et=(t,n,r=!0,i=[`evm`],a=!0)=>{let{referralCode:o,config:s,project:c,asyncTxs:l,asyncSigning:u,deferIframe:d}=t,f=v(t),p=!!u&&!l;t.walletConnectProjectId&&e.t.setProjectId(t.walletConnectProjectId),u&&!l&&console.warn("[WaaP SDK] `asyncSigning` is deprecated. Use `asyncTxs` instead.");let m=typeof window>`u`||typeof document>`u`,h=()=>typeof window>`u`||typeof document>`u`?null:(j(t),ue(n).contentWindow),g=d===!1&&!m,ee=d===void 0&&!m,_=g?h():null;if(g&&!_)throw Error(`WaaP iframe does not exist on page`);let y=new Qe(_,o,s||{},c||{},f,l||u||!1,p,g?void 0:h,i);if(y.setAccountMode(n),y.setExposeOnWindow(a),!m&&r&&g&&y.initializeIframeContext().catch(()=>void 0),y.uiMessageManager.on(`show_modal`,()=>{Y()}),y.uiMessageManager.on(`hide_modal`,()=>{X()}),!m&&a&&(window.silk=y,window.waap=y),r&&ee){let e=We(y),t=y.destroy.bind(y);y.destroy=()=>{e(),t()}}return y},tt=(e={})=>et(e,`tap`);Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return Ve}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Ge}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return We}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return ue}});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./WalletConnect-UfxGn2M_.mjs";import{EventEmitter as t}from"events";import{getAddress as n}from"ethers";var r;(function(e){e.request=`request`,e.response=`response`,e.notification=`notification`})(r||={});var i;(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.set_signing_mode=`set_signing_mode`,e.enter_lite_mode=`enter_lite_mode`})(i||={});var a;(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`})(a||={});var o;(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`})(o||={});var s=class extends Error{constructor(e,t,n={}){super(t),this.name=`WaaPError`,this.code=e,this.operation=n.operation,this.cause=n.cause}};function c(e,t){if(e instanceof s)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,a=r.toLowerCase();return new s(a.includes(`cancelled`)||a.includes(`canceled`)?`cancelled`:a.includes(`timed out`)?`timeout`:a.includes(`insufficient balance`)?`insufficient_balance`:a.includes(`policy`)||a.includes(`permission token`)?`policy_rejected`:i===4001||a.includes(`rejected`)?`user_rejected`:a.includes(`not connected`)?`not_connected`:a.includes(`not authenticated`)||a.includes(`log in first`)?`not_authenticated`:a.includes(`unsupported`)||a.includes(`must be base64`)?`unsupported_input`:n?`wallet_error`:`unknown`,r,{cause:e,operation:t})}const l=`waap-wallet`,u=`waap-component-container`,d=typeof window<`u`&&typeof document<`u`&&typeof HTMLElement<`u`;let f;d?(f=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=u,this.setAttribute(`data-waap-mounted`,`true`)}disconnectedCallback(){this.removeAttribute(`data-waap-mounted`)}},typeof customElements<`u`&&!customElements.get(l)&&customElements.define(l,f)):f=class{};function p(){return d?!!document.getElementById(u)||!!document.querySelector(l):!1}function m(){return d?document.getElementById(u)||document.querySelector(l):null}const h=`https://staging.waap.xyz`,g={development:`http://localhost:3000`,staging:h,production:`https://waap.xyz`},ee=e=>e===`localhost`||e===`127.0.0.1`||e===`[::1]`;function _(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 v(e={}){return e.walletOrigin?_(e.walletOrigin):e.environment?_(g[e.environment]):e.useStaging?_(h):_(g.production)}const y=new WeakMap,b=new WeakMap,te=()=>typeof performance<`u`?performance.now():Date.now(),x=e=>({generation:e.generation,navigationStartedAt:e.navigationStartedAt,loadedAt:e.loadedAt}),S=e=>{let t=e.contentWindow;if(!t)return;let n=b.get(e);if(n&&y.get(t)===n)return;n?.cleanup(),n&&(b.delete(e),y.get(t)===n&&y.delete(t));let r=y.get(t);if(r?.iframe===e)return;r?.cleanup(),r&&b.delete(r.iframe);let i={iframe:e,generation:0,navigationStartedAt:te(),loadedAt:null,listeners:new Set,cleanup:()=>{}},a=()=>{i.generation+=1,i.loadedAt=te();let e=x(i);for(let t of Array.from(i.listeners))t(e)};i.cleanup=()=>{e.removeEventListener(`load`,a),i.listeners.clear()},e.addEventListener(`load`,a),y.set(t,i),b.set(e,i)},ne=e=>{let t=b.get(e);if(t){t.cleanup(),b.delete(e);let n=e.contentWindow;n&&y.get(n)===t&&y.delete(n);return}let n=e.contentWindow;if(!n)return;let r=y.get(n);!r||r.iframe!==e||(r.cleanup(),y.delete(n))},C=e=>{let t=y.get(e);return t?x(t):null},re=(e,t)=>{let n=y.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(x(n)):Promise.resolve(null)},ie=(e,t)=>{let n=y.get(e);return n?(n.listeners.add(t),()=>n.listeners.delete(t)):()=>{}},ae=`waap-wallet-loading-styles`,w=`waap-iframe-visual-ready`,T=typeof window<`u`&&typeof document<`u`,oe=()=>{if(!T||document.getElementById(ae))return;let e=document.createElement(`style`);e.id=ae,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)},se=(e={})=>v(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},ce=(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)}},le=(e,t)=>{let n=e.__silkCleanup;e.__silkCleanup=()=>{n?.(),t()}},ue=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},de=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{}},fe=(e,t)=>{e.dataset.waapTheme=t?`dark`:`light`},pe=(e,t)=>{let n=e;de(n);let r=document.createElement(`iframe`);return r.id=`waap-wallet-iframe`,r.dataset.waapOrigin=n,fe(r,t),S(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},me=()=>{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},he=()=>{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},ge=(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 le(t,d),d},_e=(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 le(t,i),i},ve=()=>{setTimeout(()=>{if(typeof document>`u`)return;let e=D();e&&(e.style.height=`600px`,e.style.width=`380px`)},100)},ye=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},be=(e,t)=>{let n=m();if(!n)throw Error(`WaaP component not found in DOM`);if(ye(e))return;let r=me(),i=pe(e,t);ge(e,i),_e(e,i),ve(),r.appendChild(i),n.appendChild(r),S(i)},xe=(e,t)=>{if(ye(e))return;let n=he(),r=me();n.appendChild(r);let i=pe(e,t);ge(e,i),_e(e,i),ve(),r.appendChild(i),document.body.appendChild(n),S(i)},j=(e={})=>{if(!T)return;oe();let t=se(e),n=e.config?.styles?.darkMode===!0,r=O();r&&fe(r,n),p()?be(t,n):xe(t,n)},M=()=>{if(!T)return;Re();let e=O(),t=e?.__silkCleanup;typeof t==`function`&&t(),e&&ne(e);let n=D(),r=E();r?r.remove():n?.remove(),document.querySelectorAll(`link[data-waap-preconnect]`).forEach(e=>{e.remove()})};let Se=0;async function Ce(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 we(new Uint8Array(e))}return Se+=1,we(new TextEncoder().encode(`${t}:${Se}:${Math.random()}:${JSON.stringify(e)}`)).padEnd(64,`0`).slice(0,64)}function we(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}const N=new WeakMap,Te=(e,t)=>{let n=N.get(e);if(n)return n;let r=t();return N.set(e,r),r.catch(()=>{N.get(e)===r&&N.delete(e)}),r},Ee=e=>{N.delete(e)};let P=null;const De=(e,t)=>{P={platform:e,version:t}},F=(e,t={})=>({schemaVersion:1,accountMode:e,sessionProtection:`dpop`,sdkPlatform:P?.platform??`web`,sdkVersion:P?.version??`2.4.0`,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}:{}}),I=new Set;let L=!1,R;const z=new WeakMap,Oe=(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}}},B=e=>{let t=z.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 z.set(e,n),n},V=(e,t)=>{let n=z.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)},ke=()=>typeof performance<`u`?performance.now():Date.now();let H=null;const U=new Set,Ae=()=>{for(let e of U)if(!e.isDisposed())return e.getHandshakeDiagnostics();return H},je=(e,t,n)=>{let{handleResponse:i,handleRequest:a,onReceiveConnectNotif:s,onAccountChanged:c,onAsyncTxNotification:l,onSquidLifecycleNotification:u,onAuthComplete:d}=n;if(e.origin===t.walletOrigin&&e.source===t.getIframeWindow()&&e.data?.target===`silk`)if(e.data?.messageType===r.request)a?.(e.data);else if(e.data?.messageType===r.response){if(i){let n=e.data;t.shouldHandleTerminalResponse(n.id)&&i(n)}}else e.data?.messageType===r.notification&&(e.data?.data===o.connect?s?.():e.data?.data?.type===o.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===o.mobile_oauth_success||e.data?.data===o.mobile_oauth_error)&&d?d(e.data.data===o.mobile_oauth_success?`success`:`error`):e.data?.data?.type?.startsWith(`waap_squid_`)&&u&&u({type:e.data.data.type,payload:e.data.data.payload}))},Me=()=>{L||typeof window>`u`||(L=!0,R=e=>{for(let{manager:t,config:n}of Array.from(I))je(e,t,n)},window.addEventListener(`message`,R))},Ne=()=>{I.size>0||!L||!R||typeof window>`u`||(window.removeEventListener(`message`,R),R=void 0,L=!1)};var Pe=class{constructor(e,t){this.iframeWindow=null,this.unregisterListeners=new Set,this.terminalResponseDeduper=Oe(),this.unsubscribeIframeNavigation=null,this.disposed=!1,this.iframeWindow=e,this.walletOrigin=typeof t==`string`?t:v(t===!0?{useStaging:!0}:{}),e&&this.observeIframeNavigation(e),U.add(this)}observeIframeNavigation(e){this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=ie(e,()=>{let t=B(e);(t.ready||t.readyPingStartedAt!==null)&&(Ee(e),V(e,Error(`WaaP iframe reloaded; readiness must be re-established`)),this.terminalResponseDeduper.clear())})}setIframeWindow(e){this.iframeWindow&&this.iframeWindow!==e&&(V(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?C(e):null,n=e?B(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 H=r,r}postSilkNotification(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);this.iframeWindow.postMessage({target:`silk`,messageType:r.notification,data:e},this.walletOrigin)}postReadyNotification(){this.postSilkNotification(o.ready)}postConnectNotification(){this.postSilkNotification(o.connect)}cancelSilkRequest(e,t){this.postSilkNotification({type:o.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 t=B(e),n=C(e);return t.ready&&(!n||t.navigationGeneration===n.generation)?Promise.resolve():(t.ready&&V(e,Error(`WaaP iframe navigation changed; readiness must be re-established`)),t.promise?t.promise:(t.lastError=null,t.readyPingStartedAt=null,t.readyAt=null,t.readyAttempts=0,t.visualReadySupported=null,t.promise=new Promise((n,i)=>{t.reject=i,re(e,3e4).then(n=>{if(this.disposed||this.iframeWindow!==e)throw Error(`Wallet message manager is disposed`);return new Promise((i,a)=>{let s=a=>{if(a.origin===this.walletOrigin&&a.source===e&&a.data?.target===`silk`&&a.data.messageType===r.notification&&a.data.data===o.ready){t.ready=!0,t.navigationGeneration=C(e)?.generation??n?.generation??null,t.readyAt=ke(),t.visualReadySupported=a.data?.capabilities?.visualReady===1;let r=O();r?.contentWindow===e&&A(r,t.visualReadySupported),p(),i()}},c=()=>{try{t.readyAttempts+=1,this.postReadyNotification()}catch(e){p(),a(e)}};t.readyPingStartedAt=ke();let l=250,u,d=()=>{u=window.setTimeout(()=>{c(),l=Math.min(l*2,1e3),d()},l)},f=window.setTimeout(()=>{p(),a(Error(`WaaP wallet ready handshake timed out after 10s.`))},1e4),p=()=>{u!==void 0&&window.clearTimeout(u),window.clearTimeout(f),window.removeEventListener(`message`,s),t.cleanup===p&&(t.cleanup=null,t.reject=null)};t.cleanup=p,t.reject=a,window.addEventListener(`message`,s),c(),d()})}).then(n,i)}),t.promise=t.promise.finally(()=>{t.ready||(t.lastError=t.lastError??`Wallet readiness failed`,t.promise=null)}),t.promise.catch(e=>{t.lastError=e instanceof Error?e.message:String(e)}),t.promise))}async postSilkRequest(e){if(!this.iframeWindow)throw Error(`WaaP iframe is not mounted`);let{silkOptions:t,...n}=e,i={...n,target:`silk`,messageType:r.request,...t&&{silkOptions:t}},a=await Ce(i);return this.iframeWindow.postMessage({...i,id:a},this.walletOrigin),a}addListener(e){if(this.disposed)throw Error(`Wallet message manager is disposed`);Me();let t={manager:this,config:e};I.add(t);let n=()=>{this.unregisterListeners.delete(n)&&(I.delete(t),Ne())};return this.unregisterListeners.add(n),n}dispose(){this.disposed||(this.disposed=!0,this.iframeWindow&&V(this.iframeWindow,Error(`Wallet message manager was disposed`)),Array.from(this.unregisterListeners).forEach(e=>e()),this.terminalResponseDeduper.clear(),this.unsubscribeIframeNavigation?.(),this.unsubscribeIframeNavigation=null,H=this.getHandshakeDiagnostics(),this.iframeWindow=null,U.delete(this))}};const W=`waap-wallet-iframe-loading`,G=new Set,K=()=>typeof performance<`u`?performance.now():Date.now(),q=e=>{G.forEach(t=>{try{t(e)}catch{}})},Fe=e=>(G.add(e),()=>G.delete(e));var Ie=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=K(),this.visibleAt=null,this.usedVisualFallback=!1,q({phase:`modal_requested`,at:this.requestedAt,visualRevision:this.pendingRevision}),this.hideIframeUntilPaint(t),n===`modal`?this.showModalSurface():t.style.display=`flex`;let r=ce(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=K();e&&q({phase:`modal_cancelled`,at:t,visualRevision:k(this.iframe)}),q({phase:`modal_hidden`,at:t,visualRevision:k(this.iframe)});let n=D();if(n&&delete n.dataset.waapSizeLocked,p()){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(p()){let t=m();return t&&e.parentElement!==t&&t.appendChild(e),`component`}let t=E();return t||(t=he(),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=K(),this.usedVisualFallback=e,q({phase:`modal_visible`,at:this.visibleAt,visualRevision:t,fallback:e});let n=D();if(!n)return;delete n.dataset.waapSizeLocked;let r=n.querySelector(`#${W}`);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(`#${W}`);if(t)return this.applyLoadingTheme(t),t;t=document.createElement(`div`),t.id=W,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 J;const Le=()=>{let e=O();return e?(J&&!J.isFor(e)&&(J.dispose(),J=void 0),J??=new Ie(e),J):null},Y=e=>{Le()?.show(e)},X=()=>{Le()?.hide()},Re=()=>{J?.dispose(),J=void 0},ze=()=>{let e=O(),t=e?.contentWindow?C(e.contentWindow):null,n=J?.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:Ae()}},Be=new Set([a.eth_sendTransaction,a.eth_signTransaction,a.personal_sign,a.eth_signTypedData_v4]),Ve=e=>Be.has(e);function He(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 Ue(e){if(typeof e!=`object`||!e)return e;try{e.waapCode=c(e).code}catch{}return e}async function Z(e,t,n,r,a){let o=e.method,s=e.params,{timeoutMs:c,signal:l,...u}=a??{};t&&Y({layout:o===i.login?`auth`:`signing`});let d;try{d=await n.postSilkRequest({method:o,params:s,interactionRequired:t,silkOptions:a?u:void 0});let e=await He({eventEmitter:r,id:d,method:o,interactionRequired:t,timeoutMs:c,signal:l,onCancel:()=>{n.cancelSilkRequest(d,o),t&&X()}});if(t&&X(),e.error)throw Ue(e.error);return e.data}catch(e){throw t&&d===void 0&&X(),e}}const We=(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 Ge=function(e){return e.show_modal=`show_modal`,e.hide_modal=`hide_modal`,e}(Ge||{}),Q=class extends t{constructor(){super()}};const Ke=e=>typeof e==`object`&&!!e&&e.isComplete===!1&&typeof e.authUrl==`string`;function qe(e){return!(!e?.isMetaMask||e.isApexWallet||e.isAvalanche||e.isBitKeep||e.isBlockWallet||e.isMathWallet||e.isOkxWallet||e.isOKExWallet||e.isOneInchIOSWallet||e.isOneInchAndroidWallet||e.isOpera||e.isPortal||e.isRabby||e.isDefiant||e.isTokenPocket||e.isTokenary||e.isZerion)}function Je(e){try{if(!e||!Array.isArray(e))return!1;let t=JSON.parse(typeof e[1]==`string`?e[1]:JSON.stringify(e[1]));return t.primaryType===`SafeTx`&&t.domain?.verifyingContract!==void 0&&t.message&&`to`in t.message&&`value`in t.message&&`safeTxGas`in t.message&&`baseGas`in t.message&&`gasPrice`in t.message&&`nonce`in t.message}catch{return!1}}const Ye={styles:{darkMode:!1}},$=[`waap`,`human`,`injected`,`walletconnect`],Xe=[a.eth_sendTransaction,a.eth_signTransaction,a.eth_signTypedData_v4,a.personal_sign];function Ze(e){if(e==null)return null;if(typeof e==`string`){if($.includes(e))return e;throw Error(`[EthereumProvider] Unexpected login method: "${e}". Expected one of: ${$.join(`, `)}`)}if(typeof e==`object`&&`loginMethod`in e&&typeof e.loginMethod==`string`){let t=e.loginMethod;if(console.warn(`[EthereumProvider] Received object login response. Normalizing "${t}" to string. This is unexpected for the web SDK.`),$.includes(t))return t;throw Error(`[EthereumProvider] Unknown loginMethod in object: "${t}". Expected one of: ${$.join(`, `)}`)}throw Error(`[EthereumProvider] Unexpected login response: ${JSON.stringify(e)} (type: ${typeof e})`)}var Qe=class extends t{setExposeOnWindow(e){this.exposeOnWindow=e}constructor(e,n,r,a,o,s=!1,c=!1,l,u=[`evm`]){super(),this.lastKnownConversion=`pending`,this.isSilk=!0,this.isWaaP=!0,this.connected=!1,this.exposeOnWindow=!0,this.currentAccount=null,this.accountMode=`tap`,this.walletConnectProvider=null,this.asyncTxs=!1,this.legacyAsyncSigning=!1,this.internalEventEmitter=new t,this.iframeMounted=!0,this.initializerPromise=null,this.sessionProbe=null,this.initializedIframeWindow=null,this.waapRestoreRetryAt=0,this.asyncTxs=s,this.legacyAsyncSigning=c,this.ensureIframe=l,this.iframeMounted=!l,this.referralCode=n,this.project=a,this.customConfig=r,this.initializerChains=u,this.uiMessageManager=new Q,this.walletMessageManager=new Pe(e,o),this.config={...Ye,...r||{}},this.persistedMethods={login:this.login.bind(this),logout:this.logout.bind(this),getLoginMethod:this.getLoginMethod.bind(this),walletMessageManager:this.walletMessageManager,internalEventEmitter:this.internalEventEmitter,uiMessageManager:this.uiMessageManager,portal:this.portal.bind(this),requestEmail:this.requestEmail.bind(this),requestSBT:this.requestSBT.bind(this),requestPermissionToken:this.requestPermissionToken.bind(this),getLinkedAddresses:this.getLinkedAddresses.bind(this),linkAddress:this.linkAddress.bind(this),unlinkAddress:this.unlinkAddress.bind(this),orcid:this.orcid.bind(this),enable:this.enable.bind(this),isConnected:this.isConnected.bind(this),toggleDarkMode:this.toggleDarkMode.bind(this),destroy:this.destroy.bind(this),silkRequest:this.request.bind(this),waaPRequest:this.request.bind(this)},this.walletMessageManager.addListener({onReceiveConnectNotif:()=>{this.connected=!0,this.emit(`connect`)},handleResponse:e=>this.internalEventEmitter.emit(e.id,e),handleRequest:e=>{e.method===i.show_modal?this.uiMessageManager.emit(`show_modal`):e.method===i.hide_modal&&this.uiMessageManager.emit(`hide_modal`)},onAccountChanged:e=>{this.currentAccount!==e&&(this.currentAccount=e,this.emit(`accountsChanged`,e?[e]:[]))},onAsyncTxNotification:e=>{this.emit(e.type,e.payload)},onSquidLifecycleNotification:e=>{this.emit(e.type,e.payload)}})}async initializeWalletConnect(){try{this.walletConnectProvider=await e.getInstance()}catch(e){console.error(`Failed to initialize WalletConnect provider:`,e),this.walletConnectProvider=null}}async initializeIframeContext(){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=Te(e,async()=>{await this.walletMessageManager.pingIframe(),await Z({method:i.set_signing_mode,params:[F(this.accountMode,{referralCode:this.referralCode,project:this.project,config:this.customConfig,chains:this.initializerChains})]},!1,this.walletMessageManager,this.internalEventEmitter)});try{await this.initializerPromise}catch(e){throw this.initializerPromise=null,this.initializedIframeWindow=null,e}}async reassertIframeAccountMode(){this.ensureIframeMounted(),await this.walletMessageManager.pingIframe(),await Z({method:i.set_signing_mode,params:[F(this.accountMode,{referralCode:this.referralCode,project:this.project,config:this.customConfig,chains:this.initializerChains})]},!1,this.walletMessageManager,this.internalEventEmitter)}ensureIframeMounted(){if(this.iframeMounted||!this.ensureIframe)return;let e=this.ensureIframe();e&&(this.iframeMounted=!0,this.walletMessageManager.setIframeWindow(e))}async ensureInitialized(){this.ensureIframeMounted(),await this.initializeIframeContext()}async preload(){await this.ensureInitialized()}async enable(){return this.request({method:`eth_requestAccounts`})}isConnected(){return this.connected}getAccountStatus(){let e=this.getLoginMethod();return{authenticated:e!==null,loginMethod:e,activeMode:e?this.accountMode:null,mode:this.accountMode,conversion:e?this.lastKnownConversion:`not_required`,tap:null,squid:null,accounts:this.currentAccount?{evm:this.currentAccount}:{}}}get session(){return{login:e=>this.login(e),logout:async()=>{await this.logout()},getLoginMethod:()=>this.getLoginMethod(),getAccountStatus:()=>this.getCanonicalAccountStatus()}}async getCanonicalAccountStatus(){await this.ensureInitialized();let e=await Z({method:i.waap_getAccountStatus,params:[]},!1,this.walletMessageManager,this.internalEventEmitter);return e?.conversion&&(this.lastKnownConversion=e.conversion),e}setAccountMode(e){this.accountMode=e,this.initializerPromise=null,this.initializedIframeWindow=null}async request(e){if(!Object.keys(a).includes(e.method))return Promise.reject({error:`Not implemented (${e.method})`});let t=await this.attemptAutoConnect(e.method);if(t!==null)return t;if(Xe.includes(e.method)&&!(this.getLoginMethod()!==null||await this.restorePersistedWaaPSession()!==null))return Promise.reject(new s(`not_authenticated`,`Not authenticated: call login() before signing.`,{operation:{chain:`evm`,method:e.method}}));if(Je(e.params)&&e.method!==a.eth_signTypedData_v4)return Promise.reject({error:`Safe transactions must be signed using eth_signTypedData_v4`});await this.ensureInitialized();let n=(e.method===a.eth_sendTransaction||e.method===a.eth_signTransaction||e.method===a.eth_signTypedData_v4||e.method===a.personal_sign)&&this.asyncTxs||e.async,r=n||e.withPT||e.timeoutMs!==void 0||e.signal?this.legacyAsyncSigning?{asyncSigning:n||void 0,withPT:e.withPT,timeoutMs:e.timeoutMs,signal:e.signal}:{async:n,withPT:e.withPT,timeoutMs:e.timeoutMs,signal:e.signal}:void 0,i=await Z(e,Ve(e.method),this.walletMessageManager,this.internalEventEmitter,r);if((e.method===a.wallet_switchEthereumChain||e.method===a.wallet_addEthereumChain)&&i===null){this.emit(`chainChanged`,e.params?.[0]?.chainId);try{let t=await this.request({method:`eth_accounts`});t&&t.length>0&&(this.currentAccount=t[0],this.emit(`accountsChanged`,t),this.emit(`connect`,{chainId:e.params?.[0]?.chainId}))}catch(t){console.warn(`[EthereumProvider] Failed to get accounts after chain switch:`,t),this.currentAccount&&(this.emit(`accountsChanged`,[this.currentAccount]),this.emit(`connect`,{chainId:e.params?.[0]?.chainId}))}}return e.method===a.eth_requestAccounts&&Array.isArray(i)&&typeof i[0]==`string`&&(this.currentAccount=i[0],this.connected=!0,typeof window<`u`&&typeof localStorage<`u`&&localStorage.setItem(`${window.location.origin}-connected`,`waap`),this.emit(`accountsChanged`,i),this.emit(`connect`)),i}async login(e){let t=await this.loginWithNativeHandoff(e);if(Ke(t))throw Error(`[WaaP SDK] The wallet returned a native auth hand-off. Use loginWithNativeHandoff() from a native host.`);return t}async loginWithNativeHandoff(t){if(this.waapRestoreRetryAt=0,typeof window>`u`||typeof document>`u`)return null;let n=t&&!(`request`in t)?t:void 0,r=n?n.customProvider:t;if(await this.ensureInitialized(),!n?.force&&await this.restorePersistedWaaPSession())return this.getLoginMethod()??`waap`;let a=r||window.ethereum,o=a&&qe(a)?`MetaMask`:`Browser Wallet`,s=await Z({method:i.login,params:[o]},!0,this.walletMessageManager,this.internalEventEmitter);if(Ke(s))return s;let c=Ze(s);if(c===null)return null;switch(c){case`waap`:case`human`:localStorage.setItem(`${window.location.origin}-connected`,`waap`),this.setupWaaP();break;case`injected`:a&&(localStorage.setItem(`${window.location.origin}-connected`,`injected`),this.setupInjectedWallet(a));break;case`walletconnect`:{localStorage.setItem(`${window.location.origin}-connected`,`walletconnect`),this.walletConnectProvider||await this.initializeWalletConnect(),e.isConnected()||(await this.walletConnectProvider.open({view:`Connect`}),await e.listenToAccountChangeEvent());let t=e.getWalletProvider();this.setupWalletConnect(t);break}}return c}async logout(){await this.ensureInitialized(),this.cleanupInvalidLoginState(),this.waapRestoreRetryAt=0,this.lastKnownConversion=`pending`,this.currentAccount=null,this.connected=!1,this.emit(`accountsChanged`,[]),this.emit(`disconnect`);try{this.walletConnectProvider&&await this.walletConnectProvider.disconnect()}catch(e){console.error(`Error disconnecting from WalletConnect:`,e)}return Z({method:i.logout},!1,this.walletMessageManager,this.internalEventEmitter)}destroy(){if(this.walletMessageManager.dispose(),this.internalEventEmitter.removeAllListeners(),this.uiMessageManager.removeAllListeners(),this.removeAllListeners(),this.connected=!1,this.walletConnectProvider&&=(this.walletConnectProvider.disconnect().catch(()=>void 0),null),typeof window<`u`){let e=window;(e.silk===this||e.silk?.walletMessageManager===this.walletMessageManager)&&delete e.silk,(e.waap===this||e.waap?.walletMessageManager===this.walletMessageManager)&&delete e.waap}M()}cleanupInvalidLoginState(){try{localStorage.removeItem(`${window.location.origin}-connected`)}catch(e){console.warn(`Could not clean up login state:`,e)}}setupWaaP(){if(!this.exposeOnWindow)return;let e={...this.persistedMethods,isWaaP:!0,on:this.on.bind(this),removeListener:this.removeListener.bind(this),request:this.request.bind(this)};window.silk=e,window.waap=e}setupInjectedWallet(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!0,connected:e.connected??!1,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}setupWalletConnect(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!0,connected:!0,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}setupAutoConnectInjected(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!1,connected:e.isConnected?.()??!1,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}setupAutoConnectWalletConnect(e){if(!this.exposeOnWindow)return;let t={...this.persistedMethods,...e,isSilk:!1,connected:!0,on:e.on?.bind(e)??(()=>{}),removeListener:e.removeListener?.bind(e)??(()=>{}),request:e.request.bind(e)};window.silk=t,window.waap=t}async attemptAutoConnect(t){if(t!==`eth_requestAccounts`&&t!==`eth_accounts`)return null;let n=this.getLoginMethod();if(n===`waap`||n===`human`||n===null&&t===`eth_accounts`&&Date.now()>=this.waapRestoreRetryAt){let e=await this.restorePersistedWaaPSession();if(e)return e;n===null&&(this.waapRestoreRetryAt=Date.now()+5e3)}if(n===`injected`&&window.ethereum)try{return this.setupAutoConnectInjected(window.ethereum),window.ethereum.request({method:`eth_requestAccounts`})}catch(e){return console.warn(`Injected wallet auto-connect failed:`,e),this.cleanupInvalidLoginState(),null}else if(n===`walletconnect`)try{if(this.walletConnectProvider||=await e.getInstance(),await e.waitForReadyAndCheckConnection()){let t=e.getWalletProvider();return this.setupAutoConnectWalletConnect(t),t.request({method:`eth_requestAccounts`})}else return this.cleanupInvalidLoginState(),null}catch(e){return console.warn(`WalletConnect auto-connect failed:`,e),this.cleanupInvalidLoginState(),null}return null}restorePersistedWaaPSession(){return this.sessionProbe??=this.probeWaaPSession().finally(()=>{this.sessionProbe=null}),this.sessionProbe}async probeWaaPSession(){try{if(await this.ensureInitialized(),!(await this.getCanonicalAccountStatus()).authenticated)return this.cleanupInvalidLoginState(),null;let e=await Z({method:i.auto_conn,params:[window.location.origin]},!1,this.walletMessageManager,this.internalEventEmitter);if(Array.isArray(e)&&e.length>0)return this.currentAccount=e[0],this.connected=!0,localStorage.setItem(`${window.location.origin}-connected`,`waap`),this.setupWaaP(),e}catch(e){console.warn(`WaaP session probe failed:`,e)}return this.cleanupInvalidLoginState(),null}getLoginMethod(){if(typeof window>`u`||typeof localStorage>`u`)return null;try{let t=localStorage.getItem(`${window.location.origin}-connected`);if(!t)return null;if(![`waap`,`human`,`injected`,`walletconnect`].includes(t))return this.cleanupInvalidLoginState(),null;switch(t){case`injected`:return window.ethereum?`injected`:(this.cleanupInvalidLoginState(),null);case`walletconnect`:try{return e.isConnected()?`walletconnect`:(this.cleanupInvalidLoginState(),null)}catch{return this.cleanupInvalidLoginState(),null}case`waap`:return`waap`;case`human`:return`human`;default:return this.cleanupInvalidLoginState(),null}}catch(e){return console.warn(`Error checking login method:`,e),this.cleanupInvalidLoginState(),null}}async toggleDarkMode(){this.config.styles.darkMode=!this.config.styles.darkMode,await this.ensureInitialized();try{await Z({method:i.set_custom_config,params:[this.config]},!1,this.walletMessageManager,this.internalEventEmitter)}catch(e){console.error(`Error setting custom config in Silk iframe:`,e)}}async safe(){await this.ensureInitialized(),await Z({method:i.safe},!0,this.walletMessageManager,this.internalEventEmitter)}async orcid(){await this.ensureInitialized(),await Z({method:i.orcid},!0,this.walletMessageManager,this.internalEventEmitter)}async portal(e,t,n){await this.ensureInitialized();let r;switch(t){case`get`:r=e===`gastank`?i.gastank_get_settings:i.customization_get;break;case`update`:r=e===`gastank`?i.gastank_update_settings:i.customization_update;break;case`topup`:r=i.gastank_topup;break;case`init`:r=i.project_init;break}let a=t!==`get`&&e!==`customization`;return Z({method:r,params:[n,window.location.origin]},a,this.walletMessageManager,this.internalEventEmitter)}async requestEmail(){return await this.ensureInitialized(),Z({method:i.silk_requestEmail},!0,this.walletMessageManager,this.internalEventEmitter)}async requestPermissionToken(e){await this.ensureInitialized();let t={...e,walletMode:this.accountMode};return Z({method:i.waap_requestPermissionToken,params:[t]},!0,this.walletMessageManager,this.internalEventEmitter)}async getPermissionTokenStatus(e){return await this.ensureInitialized(),await Z({method:i.waap_getPermissionTokenStatus,params:[e]},!1,this.walletMessageManager,this.internalEventEmitter)}async clearPermissionToken(e){return await this.ensureInitialized(),await Z({method:i.waap_clearPermissionToken,params:[e]},!1,this.walletMessageManager,this.internalEventEmitter)}async requestSBT(e){return await this.ensureInitialized(),Z({method:i.silk_requestSbt,params:[e]},!0,this.walletMessageManager,this.internalEventEmitter)}async getLinkedAddresses(){return await this.walletMessageManager.pingIframe(),(await Z({method:i.waap_getLinkedAddresses,params:[]},!1,this.walletMessageManager,this.internalEventEmitter)).addresses}async linkAddress(t){if(typeof window>`u`)throw Error(`linkAddress requires a browser environment`);this.walletConnectProvider||await this.initializeWalletConnect(),e.isConnected()||(await this.walletConnectProvider.open({view:`Connect`}),await e.listenToAccountChangeEvent());let n=e.getWalletProvider();if(!n)throw Error(`No wallet provider available after connection`);let r=(await n.request({method:`eth_accounts`}))[0];if(!r||r.toLowerCase()!==t.toLowerCase())throw Error(`Connected wallet account ${r??`(none)`} does not match requested address ${t}`);await this.walletMessageManager.pingIframe();let a=await Z({method:i.waap_getLinkAddressNonce,params:[]},!1,this.walletMessageManager,this.internalEventEmitter),o=$e({domain:window.location.host,address:t,uri:window.location.origin,nonce:a.nonce,issuedAt:new Date().toISOString()}),s=await n.request({method:`personal_sign`,params:[o,t]});return(await Z({method:i.waap_linkAddress,params:[{message:o,signature:s}]},!1,this.walletMessageManager,this.internalEventEmitter)).addresses}async unlinkAddress(e){return await this.walletMessageManager.pingIframe(),(await Z({method:i.waap_unlinkAddress,params:[{address:e}]},!1,this.walletMessageManager,this.internalEventEmitter)).addresses}};function $e(e){let t=n(e.address);return`${`${e.domain} wants you to sign in with your Ethereum account:\n${t}`}\n\nLink this wallet to your Human Wallet account.\n\n${[`URI: ${e.uri}`,`Version: 1`,`Chain ID: 1`,`Nonce: ${e.nonce}`,`Issued At: ${e.issuedAt}`].join(`
|
|
2
|
+
`)}`}const et=(t,n,r=!0,i=[`evm`],a=!0)=>{let{referralCode:o,config:s,project:c,asyncTxs:l,asyncSigning:u,deferIframe:d}=t,f=v(t),p=!!u&&!l;t.walletConnectProjectId&&e.setProjectId(t.walletConnectProjectId),u&&!l&&console.warn("[WaaP SDK] `asyncSigning` is deprecated. Use `asyncTxs` instead.");let m=typeof window>`u`||typeof document>`u`,h=()=>typeof window>`u`||typeof document>`u`?null:(j(t),ue(n).contentWindow),g=d===!1&&!m,ee=d===void 0&&!m,_=g?h():null;if(g&&!_)throw Error(`WaaP iframe does not exist on page`);let y=new Qe(_,o,s||{},c||{},f,l||u||!1,p,g?void 0:h,i);if(y.setAccountMode(n),y.setExposeOnWindow(a),!m&&r&&g&&y.initializeIframeContext().catch(()=>void 0),y.uiMessageManager.on(`show_modal`,()=>{Y()}),y.uiMessageManager.on(`hide_modal`,()=>{X()}),!m&&a&&(window.silk=y,window.waap=y),r&&ee){let e=We(y),t=y.destroy.bind(y);y.destroy=()=>{e(),t()}}return y},tt=(e={})=>et(e,`tap`);export{_ as C,a as D,c as E,i as O,v as S,s as T,De as _,Q as a,j as b,Z as c,ze as d,X as f,F as g,Pe as h,Ye as i,Ve as l,Fe as m,et as n,Ge as o,Y as p,Qe as r,We as s,tt as t,He as u,Te as v,f as w,M as x,ue as y};
|
package/dist/evm.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
1
|
+
import { I as WaaPSessionProtection, _ as resolveWalletOrigin, a as PermissionTokenClearResult, d as WaaPAccountMode, f as WaaPAccountStatus, g as WaaPWalletTargetOptions, h as WaaPEnvironment, l as SilkEthereumProviderInterface, n as InitSilkOptions, o as PermissionTokenQuery, p as WaaPLoginOptions, s as PermissionTokenStatus, u as SilkProvider, v as validateWalletOrigin } from "./types-x7TOncUp.mjs";
|
|
2
|
+
import { a as subscribeWaaPIframeLifecycle, i as getWaaPIframeDiagnostics, n as WaaPIframeLifecycleEvent, r as WaaPIframeLifecyclePhase, t as WaaPIframeDiagnostics } from "./WalletModalController-wIHBGOVd.mjs";
|
|
3
|
+
import { a as CancelWaaPPreload, c as preloadWaaPOnIdle, i as normalizeWaaPError, n as WaaPErrorCode, o as WaaPIdlePreloadOptions, r as WaaPOperationMetadata, s as WaaPPreloadTarget, t as WaaPError } from "./WaaPError-BuwfZjBk.mjs";
|
|
3
4
|
//#region src/ui/evm.d.ts
|
|
4
5
|
/** Initialize the TAP t1 EVM EIP-1193 provider. */
|
|
5
6
|
declare const initWaaP: (params?: InitSilkOptions) => SilkEthereumProviderInterface;
|
package/dist/evm.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
1
|
+
import { I as WaaPSessionProtection, _ as resolveWalletOrigin, a as PermissionTokenClearResult, d as WaaPAccountMode, f as WaaPAccountStatus, g as WaaPWalletTargetOptions, h as WaaPEnvironment, l as SilkEthereumProviderInterface, n as InitSilkOptions, o as PermissionTokenQuery, p as WaaPLoginOptions, s as PermissionTokenStatus, u as SilkProvider, v as validateWalletOrigin } from "./types-x7TOncUp.js";
|
|
2
|
+
import { a as subscribeWaaPIframeLifecycle, i as getWaaPIframeDiagnostics, n as WaaPIframeLifecycleEvent, r as WaaPIframeLifecyclePhase, t as WaaPIframeDiagnostics } from "./WalletModalController-Qh9LNwW5.js";
|
|
3
|
+
import { a as CancelWaaPPreload, c as preloadWaaPOnIdle, i as normalizeWaaPError, n as WaaPErrorCode, o as WaaPIdlePreloadOptions, r as WaaPOperationMetadata, s as WaaPPreloadTarget, t as WaaPError } from "./WaaPError-BuwfZjBk.js";
|
|
3
4
|
//#region src/ui/evm.d.ts
|
|
4
5
|
/** Initialize the TAP t1 EVM EIP-1193 provider. */
|
|
5
6
|
declare const initWaaP: (params?: InitSilkOptions) => SilkEthereumProviderInterface;
|
package/dist/evm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./evm-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./evm-64xq-c4L.js");exports.WaaPError=e.T,exports.getWaaPIframeDiagnostics=e.d,exports.initWaaP=e.t,exports.normalizeWaaPError=e.E,exports.preloadWaaPOnIdle=e.s,exports.resolveWalletOrigin=e.S,exports.subscribeWaaPIframeLifecycle=e.m,exports.validateWalletOrigin=e.C;
|
package/dist/evm.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e,E as t,S as n,T as r,d as i,m as a,s as o,t as s}from"./evm-ChOfSh-X.mjs";export{r as WaaPError,i as getWaaPIframeDiagnostics,s as initWaaP,t as normalizeWaaPError,o as preloadWaaPOnIdle,n as resolveWalletOrigin,a as subscribeWaaPIframeLifecycle,e as validateWalletOrigin};
|