@frak-labs/components 0.0.26-beta.b38eef2e → 0.0.26-beta.bbbb3d22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/cdn/Banner.BrrxJ-YP.js +132 -0
  2. package/cdn/ButtonShare.D6sav-O3.js +1 -0
  3. package/cdn/ButtonWallet.DalZLwGv.js +40 -0
  4. package/cdn/OpenInAppButton.BBj09SVF.js +1 -0
  5. package/cdn/PostPurchase.CXHETVu7.js +47 -0
  6. package/cdn/components.js +1 -1
  7. package/cdn/formatReward.CU8k_jx9.js +1 -0
  8. package/cdn/jsxRuntime.module.D7jbXhdY.js +58 -0
  9. package/cdn/loader.css +0 -14
  10. package/cdn/loader.js +66 -1
  11. package/cdn/sprinkles.css.ts.vanilla.BtNHSSRm.js +1175 -0
  12. package/cdn/useLightDomStyles.x0mCz8nV.js +1 -0
  13. package/cdn/useReward.Cbh2WzQ3.js +1 -0
  14. package/cdn/useShareModal.DsoI-v9u.js +1 -0
  15. package/dist/GiftIcon-BrNVWoWm.js +1246 -0
  16. package/dist/banner.d.ts +116 -0
  17. package/dist/banner.js +405 -0
  18. package/dist/buttonShare.d.ts +8 -6
  19. package/dist/buttonShare.js +60 -101
  20. package/dist/buttonWallet.d.ts +10 -2
  21. package/dist/buttonWallet.js +79 -38
  22. package/dist/formatReward-_UYA3aHE.js +26 -0
  23. package/dist/openInApp.d.ts +4 -2
  24. package/dist/openInApp.js +23 -27
  25. package/dist/postPurchase.d.ts +122 -0
  26. package/dist/postPurchase.js +1744 -0
  27. package/dist/useLightDomStyles-Cjpf0MnX.js +41 -0
  28. package/dist/usePlacement-LqYjZLX_.js +248 -0
  29. package/dist/useReward-XF2hB_C_.js +65 -0
  30. package/dist/useShareModal-Bmlk3eBJ.js +53 -0
  31. package/package.json +29 -19
  32. package/cdn/ButtonShare.CSPl5Bi5.js +0 -1
  33. package/cdn/ButtonWallet.3Hp62hGr.js +0 -1
  34. package/cdn/OpenInAppButton.BTvukMkp.js +0 -1
  35. package/cdn/Spinner.DQogVqic.js +0 -1
  36. package/cdn/initFrakSdk.CMgrZQwQ.js +0 -14
  37. package/cdn/useClientReady.CKKC4IMk.js +0 -1
  38. package/dist/Spinner-Btnwk01x.js +0 -36
  39. package/dist/Spinner-CHZD3tMn.css +0 -1
  40. package/dist/buttonShare.css +0 -1
  41. package/dist/buttonWallet.css +0 -1
  42. package/dist/openInApp.css +0 -1
  43. package/dist/useClientReady-0vKBG0-p.js +0 -197
  44. package/dist/useReward-DAkT-7wT.js +0 -48
@@ -0,0 +1,41 @@
1
+ import { r as lightDomBaseCss } from "./usePlacement-LqYjZLX_.js";
2
+ import { useEffect } from "preact/hooks";
3
+ //#region src/utils/styleManager.ts
4
+ function ensureStyle(id, css) {
5
+ const existing = document.getElementById(id);
6
+ if (existing) {
7
+ if (existing.textContent !== css) existing.textContent = css;
8
+ return;
9
+ }
10
+ const style = document.createElement("style");
11
+ style.id = id;
12
+ style.textContent = css;
13
+ document.head.appendChild(style);
14
+ }
15
+ function injectBase(tag, css) {
16
+ ensureStyle(`frak-base-${tag}`, css);
17
+ }
18
+ function injectPlacement(tag, placementId, scopedCss) {
19
+ ensureStyle(`frak-placement-${tag}-${placementId}`, scopedCss);
20
+ }
21
+ const styleManager = {
22
+ injectBase,
23
+ injectPlacement
24
+ };
25
+ //#endregion
26
+ //#region src/hooks/useLightDomStyles.ts
27
+ function useLightDomStyles(tag, placementId, placementCss, baseCss) {
28
+ useEffect(() => {
29
+ styleManager.injectBase(tag, baseCss ?? lightDomBaseCss);
30
+ }, [tag]);
31
+ useEffect(() => {
32
+ if (!placementId || !placementCss) return;
33
+ styleManager.injectPlacement(tag, placementId, placementCss);
34
+ }, [
35
+ tag,
36
+ placementId,
37
+ placementCss
38
+ ]);
39
+ }
40
+ //#endregion
41
+ export { useLightDomStyles as t };
@@ -0,0 +1,248 @@
1
+ import register from "preact-custom-element";
2
+ import * as coreSdkIndex from "@frak-labs/core-sdk";
3
+ import { sdkConfigStore, setupClient, withCache } from "@frak-labs/core-sdk";
4
+ import * as coreSdkActions from "@frak-labs/core-sdk/actions";
5
+ import { displayEmbeddedWallet } from "@frak-labs/core-sdk/actions";
6
+ import { useEffect, useMemo, useState } from "preact/hooks";
7
+ //#region src/utils/embeddedWallet.ts
8
+ async function openEmbeddedWallet(targetInteraction, placement) {
9
+ if (!window.FrakSetup?.client) {
10
+ console.error("Frak client not found");
11
+ return;
12
+ }
13
+ const modalWalletConfig = window.FrakSetup?.modalWalletConfig ?? {};
14
+ await displayEmbeddedWallet(window.FrakSetup.client, targetInteraction ? {
15
+ ...modalWalletConfig,
16
+ metadata: {
17
+ ...modalWalletConfig.metadata,
18
+ targetInteraction
19
+ }
20
+ } : modalWalletConfig, placement);
21
+ }
22
+ //#endregion
23
+ //#region src/utils/safeVibrate.ts
24
+ /**
25
+ * Attempt to vibrate the device
26
+ */
27
+ function safeVibrate() {
28
+ if ("vibrate" in navigator) navigator.vibrate(10);
29
+ else console.log("Vibration not supported");
30
+ }
31
+ //#endregion
32
+ //#region src/components/ButtonWallet/utils.ts
33
+ function openWalletModal(targetInteraction, placement) {
34
+ safeVibrate();
35
+ openEmbeddedWallet(targetInteraction, placement);
36
+ }
37
+ //#endregion
38
+ //#region src/utils/clientReady.ts
39
+ const CUSTOM_EVENT_NAME = "frak:client";
40
+ /**
41
+ * Dispatch a custom event when the Frak client is ready
42
+ */
43
+ function dispatchClientReadyEvent() {
44
+ const event = new CustomEvent(CUSTOM_EVENT_NAME);
45
+ window.dispatchEvent(event);
46
+ }
47
+ /**
48
+ * Add or remove an event listener for when the Frak client is ready
49
+ * @param action
50
+ * @param callback
51
+ */
52
+ function onClientReady(action, callback) {
53
+ if (window.FrakSetup?.client && action === "add") {
54
+ callback();
55
+ return;
56
+ }
57
+ (action === "add" ? window.addEventListener : window.removeEventListener)(CUSTOM_EVENT_NAME, callback, false);
58
+ }
59
+ //#endregion
60
+ //#region src/utils/initFrakSdk.ts
61
+ /**
62
+ * Initializes the Frak SDK client and sets up necessary configurations.
63
+ * Uses withCache for inflight dedup — concurrent callers share the same promise.
64
+ * Failures are not cached, allowing retry on next call.
65
+ *
66
+ * @returns {Promise<void>}
67
+ */
68
+ function initFrakSdk() {
69
+ window.FrakSetup.core = {
70
+ ...coreSdkIndex,
71
+ ...coreSdkActions
72
+ };
73
+ if (window.FrakSetup?.client) return Promise.resolve();
74
+ return withCache(() => doInit(), {
75
+ cacheKey: "frak-sdk-init",
76
+ cacheTime: Number.POSITIVE_INFINITY
77
+ }).catch(() => {});
78
+ }
79
+ /**
80
+ * Performs the actual SDK initialization.
81
+ * Throws on failure so withCache doesn't cache failed attempts.
82
+ */
83
+ async function doInit() {
84
+ if (!window.FrakSetup?.config) throw new Error("[Frak SDK] Configuration not found. Please ensure window.FrakSetup.config is set.");
85
+ console.log("[Frak SDK] Starting initialization");
86
+ const client = await setupClient({ config: window.FrakSetup.config });
87
+ if (!client) throw new Error("[Frak SDK] Failed to create client");
88
+ window.FrakSetup.client = client;
89
+ console.log("[Frak SDK] Client initialized successfully");
90
+ dispatchClientReadyEvent();
91
+ coreSdkActions.setupReferral(client);
92
+ handleActionQueryParam();
93
+ }
94
+ /**
95
+ * Check the query param contain params for an auto opening of the frak modal
96
+ */
97
+ function handleActionQueryParam() {
98
+ const frakAction = new URLSearchParams(window.location.search).get("frakAction");
99
+ if (!frakAction) return;
100
+ if (frakAction === "share") {
101
+ console.log("[Frak SDK] Auto open query param found");
102
+ openWalletModal();
103
+ }
104
+ }
105
+ //#endregion
106
+ //#region src/utils/onDocumentReady.ts
107
+ /**
108
+ * When the document is ready, run the callback
109
+ * @param callback
110
+ */
111
+ function onDocumentReady(callback) {
112
+ if (document.readyState === "complete" || document.readyState === "interactive") setTimeout(callback, 1);
113
+ else document.addEventListener("DOMContentLoaded", callback);
114
+ }
115
+ //#endregion
116
+ //#region src/utils/registerWebComponent.ts
117
+ /**
118
+ * Registers a Preact component as a custom web component
119
+ *
120
+ * @param component - The Preact component to register
121
+ * @param tagName - The custom element tag name (e.g., "frak-button-wallet")
122
+ * @param observedAttributes - Array of attribute names to observe for changes
123
+ * @param options - Registration options (e.g., { shadow: true })
124
+ */
125
+ function registerWebComponent(component, tagName, observedAttributes = [], options = { shadow: true }) {
126
+ if (typeof window !== "undefined") {
127
+ onDocumentReady(initFrakSdk);
128
+ if (!customElements.get(tagName)) register(component, tagName, observedAttributes, options);
129
+ }
130
+ }
131
+ //#endregion
132
+ //#region src/hooks/useClientReady.ts
133
+ function useClientReady() {
134
+ const [shouldRender, setShouldRender] = useState(() => {
135
+ if (!(window.FrakSetup?.config?.waitForBackendConfig !== false)) return true;
136
+ return sdkConfigStore.isResolved;
137
+ });
138
+ const [isHidden, setIsHidden] = useState(() => sdkConfigStore.getConfig().hidden ?? false);
139
+ const [isClientReady, setIsClientReady] = useState(() => !!window.FrakSetup?.client);
140
+ useEffect(() => {
141
+ const currentConfig = sdkConfigStore.getConfig();
142
+ if (currentConfig.isResolved) {
143
+ setShouldRender(true);
144
+ setIsHidden(currentConfig.hidden ?? false);
145
+ }
146
+ if (window.FrakSetup?.client) setIsClientReady(true);
147
+ const onConfig = (e) => {
148
+ const config = e.detail;
149
+ if (config.isResolved) setShouldRender(true);
150
+ setIsHidden(config.hidden ?? false);
151
+ };
152
+ window.addEventListener("frak:config", onConfig);
153
+ const handleReady = () => setIsClientReady(true);
154
+ onClientReady("add", handleReady);
155
+ return () => {
156
+ window.removeEventListener("frak:config", onConfig);
157
+ onClientReady("remove", handleReady);
158
+ };
159
+ }, []);
160
+ return {
161
+ shouldRender,
162
+ isHidden,
163
+ isClientReady
164
+ };
165
+ }
166
+ //#endregion
167
+ //#region src/utils/sharedCss.ts
168
+ const sharedCss = `
169
+ :host {
170
+ display: contents;
171
+ }
172
+
173
+ :host([hidden]) {
174
+ display: none;
175
+ }
176
+
177
+ .button:disabled {
178
+ opacity: 0.7;
179
+ cursor: default;
180
+ }
181
+
182
+ .button__fadeIn {
183
+ animation: frak-fadeIn 300ms ease-in;
184
+ }
185
+
186
+ @keyframes frak-fadeIn {
187
+ from {
188
+ opacity: 0;
189
+ }
190
+
191
+ to {
192
+ opacity: 1;
193
+ }
194
+ }
195
+ `;
196
+ function buildStyleContent(componentCss, placementCss) {
197
+ return placementCss ? `${sharedCss}\n${componentCss}\n${placementCss}` : `${sharedCss}\n${componentCss}`;
198
+ }
199
+ const lightDomBaseCss = `
200
+ :where(frak-button-share, frak-open-in-app) {
201
+ display: contents;
202
+ }
203
+
204
+ :where(frak-button-share .button, frak-open-in-app .button) {
205
+ display: flex;
206
+ align-items: center;
207
+ justify-content: center;
208
+ gap: 10px;
209
+ }
210
+
211
+ :where(frak-button-share .button:disabled, frak-open-in-app .button:disabled) {
212
+ opacity: 0.7;
213
+ cursor: default;
214
+ }
215
+
216
+ :where(frak-button-share .button__fadeIn, frak-open-in-app .button__fadeIn) {
217
+ animation: frak-fadeIn 300ms ease-in;
218
+ }
219
+
220
+ @keyframes frak-fadeIn {
221
+ from {
222
+ opacity: 0;
223
+ }
224
+
225
+ to {
226
+ opacity: 1;
227
+ }
228
+ }
229
+ `;
230
+ //#endregion
231
+ //#region src/hooks/usePlacement.ts
232
+ function getPlacement(id) {
233
+ return sdkConfigStore.getConfig().placements?.[id];
234
+ }
235
+ function usePlacement(placementId) {
236
+ const [configVersion, setConfigVersion] = useState(0);
237
+ useEffect(() => {
238
+ const onConfig = (_e) => {
239
+ setConfigVersion((v) => v + 1);
240
+ };
241
+ window.addEventListener("frak:config", onConfig);
242
+ setConfigVersion((v) => v + 1);
243
+ return () => window.removeEventListener("frak:config", onConfig);
244
+ }, []);
245
+ return useMemo(() => placementId ? getPlacement(placementId) : void 0, [placementId, configVersion]);
246
+ }
247
+ //#endregion
248
+ export { registerWebComponent as a, useClientReady as i, buildStyleContent as n, openWalletModal as o, lightDomBaseCss as r, openEmbeddedWallet as s, usePlacement as t };
@@ -0,0 +1,65 @@
1
+ import { t as formatEstimatedReward } from "./formatReward-_UYA3aHE.js";
2
+ import { getCurrencyAmountKey, getSupportedCurrency } from "@frak-labs/core-sdk";
3
+ import { getMerchantInformation } from "@frak-labs/core-sdk/actions";
4
+ import { useEffect, useState } from "preact/hooks";
5
+ //#region src/hooks/useReward.ts
6
+ /**
7
+ * Get the comparable fiat value of a reward for ranking purposes.
8
+ */
9
+ function getRewardValue(reward, key) {
10
+ switch (reward.payoutType) {
11
+ case "fixed": return reward.amount[key];
12
+ case "tiered": return reward.tiers.reduce((acc, tier) => Math.max(acc, tier.amount[key]), 0);
13
+ case "percentage": return 0;
14
+ }
15
+ }
16
+ /**
17
+ * Pick the best referrer reward from merchant info and format it.
18
+ * Returns `undefined` when no displayable reward is found.
19
+ */
20
+ function resolveBestReward({ rewards }, currency, targetInteraction) {
21
+ const referrerRewards = (targetInteraction ? rewards.filter((r) => r.interactionTypeKey === targetInteraction) : rewards).map((r) => r.referrer).filter((r) => r !== void 0);
22
+ if (referrerRewards.length === 0) return void 0;
23
+ const key = getCurrencyAmountKey(getSupportedCurrency(currency));
24
+ let bestReward = referrerRewards[0];
25
+ let bestValue = getRewardValue(bestReward, key);
26
+ for (let i = 1; i < referrerRewards.length; i++) {
27
+ const value = getRewardValue(referrerRewards[i], key);
28
+ if (value > bestValue) {
29
+ bestReward = referrerRewards[i];
30
+ bestValue = value;
31
+ }
32
+ }
33
+ if (bestValue <= 0) {
34
+ const percentageReward = referrerRewards.find((r) => r.payoutType === "percentage");
35
+ if (!percentageReward) return void 0;
36
+ bestReward = percentageReward;
37
+ }
38
+ return formatEstimatedReward(bestReward, currency);
39
+ }
40
+ /**
41
+ * Hook to fetch and format the best referrer reward for a given interaction type.
42
+ *
43
+ * Calls `getMerchantInformation`, picks the highest-value referrer reward
44
+ * across all matching campaigns, and returns it as a formatted string.
45
+ *
46
+ * @param shouldUseReward - Whether to fetch the reward at all
47
+ * @param targetInteraction - Optional filter by interaction type (e.g. "purchase")
48
+ * @returns Object containing the formatted reward string, or undefined if unavailable
49
+ */
50
+ function useReward(shouldUseReward, targetInteraction) {
51
+ const [reward, setReward] = useState(void 0);
52
+ useEffect(() => {
53
+ if (!shouldUseReward) return;
54
+ const client = window.FrakSetup?.client;
55
+ if (!client) return;
56
+ getMerchantInformation(client).then((merchantInfo) => {
57
+ const currency = client.config.metadata?.currency;
58
+ const formatted = resolveBestReward(merchantInfo, currency, targetInteraction);
59
+ if (formatted) setReward(formatted);
60
+ }).catch(() => {});
61
+ }, [shouldUseReward, targetInteraction]);
62
+ return { reward };
63
+ }
64
+ //#endregion
65
+ export { useReward as t };
@@ -0,0 +1,53 @@
1
+ import { DebugInfoGatherer, trackEvent } from "@frak-labs/core-sdk";
2
+ import { modalBuilder } from "@frak-labs/core-sdk/actions";
3
+ import { useCallback, useState } from "preact/hooks";
4
+ import { FrakRpcError, RpcErrorCodes } from "@frak-labs/frame-connector";
5
+ //#region src/components/ButtonShare/hooks/useShareModal.ts
6
+ /**
7
+ * Open the share modal
8
+ *
9
+ * @description
10
+ * This function will open the share modal, lazily creating a modal builder on demand.
11
+ */
12
+ function useShareModal(targetInteraction, placement, sharingLink) {
13
+ const [debugInfo, setDebugInfo] = useState(void 0);
14
+ const [isError, setIsError] = useState(false);
15
+ return {
16
+ handleShare: useCallback(async () => {
17
+ if (!window.FrakSetup?.client) {
18
+ console.error("Frak client not found");
19
+ setDebugInfo(DebugInfoGatherer.empty().formatDebugInfo("Frak client not found"));
20
+ setIsError(true);
21
+ return;
22
+ }
23
+ const builder = modalBuilder(window.FrakSetup.client, {});
24
+ try {
25
+ await builder.sharing(sharingLink ? { link: sharingLink } : {}).display((metadata) => ({
26
+ ...metadata,
27
+ targetInteraction
28
+ }), placement);
29
+ } catch (e) {
30
+ if (e instanceof FrakRpcError && e.code === RpcErrorCodes.clientAborted) {
31
+ console.debug("User aborted the modal");
32
+ return;
33
+ }
34
+ const debugInfo = window.FrakSetup.client.debugInfo.formatDebugInfo(e);
35
+ trackEvent(window.FrakSetup.client, "share_modal_error", {
36
+ error: e instanceof Object && "message" in e ? e.message : "Unknown error",
37
+ debugInfo
38
+ });
39
+ setDebugInfo(debugInfo);
40
+ setIsError(true);
41
+ console.error("Error while opening the modal", e);
42
+ }
43
+ }, [
44
+ targetInteraction,
45
+ placement,
46
+ sharingLink
47
+ ]),
48
+ isError,
49
+ debugInfo
50
+ };
51
+ }
52
+ //#endregion
53
+ export { useShareModal as t };
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://twitter.com/QNivelais"
12
12
  }
13
13
  ],
14
- "version": "0.0.26-beta.b38eef2e",
14
+ "version": "0.0.26-beta.bbbb3d22",
15
15
  "description": "Frak Wallet components, helping any person to interact with the Frak wallet.",
16
16
  "repository": {
17
17
  "url": "https://github.com/frak-id/wallet",
@@ -56,6 +56,16 @@
56
56
  "import": "./dist/openInApp.js",
57
57
  "types": "./dist/openInApp.d.ts"
58
58
  },
59
+ "./postPurchase": {
60
+ "development": "./src/components/PostPurchase/index.ts",
61
+ "import": "./dist/postPurchase.js",
62
+ "types": "./dist/postPurchase.d.ts"
63
+ },
64
+ "./banner": {
65
+ "development": "./src/components/Banner/index.ts",
66
+ "import": "./dist/banner.js",
67
+ "types": "./dist/banner.d.ts"
68
+ },
59
69
  "./cdn": {
60
70
  "import": "./cdn/components.js"
61
71
  },
@@ -76,31 +86,31 @@
76
86
  "publish": "echo 'Publishing components...'"
77
87
  },
78
88
  "dependencies": {
79
- "@frak-labs/frame-connector": "0.2.0-beta.b38eef2e",
80
- "@frak-labs/core-sdk": "0.2.1-beta.b38eef2e",
81
- "class-variance-authority": "^0.7.1",
82
- "preact": "^10.28.3",
83
- "preact-custom-element": "^4.6.0"
89
+ "@frak-labs/core-sdk": "0.2.1-beta.bbbb3d22",
90
+ "@frak-labs/frame-connector": "0.2.0-beta.bbbb3d22",
91
+ "preact": "^10.29.0",
92
+ "preact-custom-element": "^4.6.0",
93
+ "@frak-labs/design-system": "0.0.0"
84
94
  },
85
95
  "devDependencies": {
86
- "@bosh-code/tsdown-plugin-inject-css": "^2.0.0",
87
- "@frak-labs/dev-tooling": "0.0.0",
88
96
  "@frak-labs/test-foundation": "0.1.0",
89
- "@frak-labs/ui": "0.0.0",
90
- "@preact/preset-vite": "^2.10.3",
97
+ "@preact/preset-vite": "^2.10.4",
91
98
  "@rolldown/plugin-node-polyfills": "^1.0.3",
92
99
  "@testing-library/jest-dom": "^6.9.1",
93
100
  "@testing-library/preact": "^3.2.4",
94
101
  "@testing-library/user-event": "^14.6.1",
95
- "@types/jsdom": "^27.0.0",
96
- "@types/node": "^24.10.13",
102
+ "@types/jsdom": "^28.0.0",
103
+ "@types/node": "^25.6.0",
97
104
  "@types/preact-custom-element": "^4.0.4",
98
- "@vitest/coverage-v8": "^4.0.18",
99
- "@vitest/ui": "^4.0.18",
100
- "jsdom": "^28.0.0",
101
- "tsdown": "^0.20.3",
102
- "typescript": "^5",
103
- "unplugin-lightningcss": "^0.4.5",
104
- "vitest": "^4.0.18"
105
+ "@vanilla-extract/css": "^1.20.1",
106
+ "@vanilla-extract/integration": "^8.0.10",
107
+ "@vanilla-extract/vite-plugin": "^5.2.1",
108
+ "@vanilla-extract/sprinkles": "^1.6.5",
109
+ "@vitest/coverage-v8": "^4.1.0",
110
+ "@vitest/ui": "^4.1.0",
111
+ "jsdom": "^29.0.0",
112
+ "tsdown": "^0.21.8",
113
+ "typescript": "^6.0.2",
114
+ "vitest": "^4.1.4"
105
115
  }
106
116
  }
@@ -1 +0,0 @@
1
- import{S as e,a as t,b as n,c as r,f as i,h as a,l as o,m as s,n as c,o as l,p as u,s as d}from"./initFrakSdk.CMgrZQwQ.js";import{t as f}from"./Spinner.DQogVqic.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./useClientReady.CKKC4IMk.js";function y(e,t){return!e||e.payoutType!==`fixed`?0:e.amount[t]}function b(e,t){return e.reduce((e,n)=>Math.max(e,y(n.referrer,t)),0)}async function x({targetInteraction:e}){let n=window.FrakSetup?.client;if(!n){console.warn(`Frak client not ready yet`);return}let{rewards:i}=await t(n),a=r(n.config.metadata?.currency),s=b(e?i.filter(t=>t.interactionTypeKey===e):i,a);if(!(s<=0))return o(Math.round(s),n.config.metadata?.currency)}function S(e,t){let[n,r]=_(void 0);return p(()=>{e&&x({targetInteraction:t}).then(e=>{e&&r(e)})},[e,t]),{reward:n}}const C={buttonShare:`nOB7Uq_buttonShare`};C.buttonShare;function w(e={}){let{successDuration:t=2e3}=e,[n,r]=_(!1);return{copy:m(async e=>{try{if(navigator.clipboard&&window.isSecureContext)await navigator.clipboard.writeText(e),r(!0);else{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.focus(),t.select();try{document.execCommand(`copy`),r(!0)}catch(e){return console.error(`Failed to copy text:`,e),!1}finally{t.remove()}}return setTimeout(()=>{r(!1)},t),!0}catch(e){return console.error(`Failed to copy text:`,e),!1}},[t]),copied:n}}const T={errorContainer:{marginTop:`16px`,padding:`16px`,backgroundColor:`#FEE2E2`,border:`1px solid #FCA5A5`,borderRadius:`4px`,color:`#991B1B`},header:{display:`flex`,alignItems:`center`,gap:`8px`,marginBottom:`12px`},title:{margin:0,fontSize:`16px`,fontWeight:500},message:{fontSize:`14px`,lineHeight:`1.5`,margin:`0 0 12px 0`},link:{color:`#991B1B`,textDecoration:`underline`,textUnderlineOffset:`2px`},copyButton:{display:`inline-flex`,alignItems:`center`,gap:`8px`,marginBottom:`10px`,padding:`8px 12px`,backgroundColor:`white`,border:`1px solid #D1D5DB`,borderRadius:`4px`,color:`black`,fontSize:`14px`,fontWeight:500}};function E({debugInfo:e}){let[t,n]=_(!1);return a(`div`,{children:[a(`button`,{type:`button`,style:T.copyButton,onClick:()=>n(!t),children:`Ouvrir les informations`}),t&&a(`textarea`,{style:{display:`block`,width:`100%`,height:`200px`,fontSize:`12px`},children:e})]})}function D({debugInfo:e}){let{copied:t,copy:n}=w();return a(`div`,{style:T.errorContainer,children:[a(`div`,{style:T.header,children:a(`h3`,{style:T.title,children:`Oups ! Nous avons rencontré un petit problème`})}),a(`p`,{style:T.message,children:[`Impossible d'ouvrir le menu de partage pour le moment. Si le problème persiste, copiez les informations ci-dessous et collez-les dans votre mail à`,` `,a(`a`,{href:`mailto:help@frak-labs.com?subject=Debug`,style:T.link,children:`help@frak-labs.com`}),` `,a(`br`,{}),`Merci pour votre retour, nous traitons votre demande dans les plus brefs délais.`]}),a(`button`,{type:`button`,onClick:()=>n(e??``),style:T.copyButton,children:t?`Informations copiées !`:`Copier les informations de débogage`}),a(E,{debugInfo:e})]})}function O(e){let[t,n]=_(void 0),[r,a]=_(!1);return{handleShare:m(async()=>{if(!window.FrakSetup?.client){console.error(`Frak client not found`),n(d.empty().formatDebugInfo(`Frak client not found`)),a(!0);return}let t=c();if(!t)throw Error(`modalBuilderSteps not found`);try{await t.sharing(window.FrakSetup?.modalShareConfig??{}).display(t=>({...t,targetInteraction:e}))}catch(e){if(e instanceof s&&e.code===u.clientAborted){console.debug(`User aborted the modal`);return}let t=window.FrakSetup.client.debugInfo.formatDebugInfo(e);i(window.FrakSetup.client,`share_modal_error`,{error:e instanceof Object&&`message`in e?e.message:`Unknown error`,debugInfo:t}),n(t),a(!0),console.error(`Error while opening the modal`,e)}},[e]),isError:r,debugInfo:t}}async function k(){if(!window.FrakSetup?.client)throw Error(`Frak client not found`);await l(window.FrakSetup.client,window.FrakSetup?.modalWalletConfig??{})}function A({text:t=`Share and earn!`,classname:r=``,useReward:o,noRewardText:s,targetInteraction:c,showWallet:l}){let u=h(()=>o!==void 0,[o]),d=h(()=>l!==void 0,[l]),{isClientReady:p}=v(),{reward:g}=S(u&&p,c),{handleShare:_,isError:y,debugInfo:b}=O(c),x=h(()=>u?g?t.includes(`{REWARD}`)?t.replace(`{REWARD}`,g):`${t} ${g}`:s??t.replace(`{REWARD}`,``):t,[u,t,s,g]),w=m(async()=>{i(window.FrakSetup.client,`share_button_clicked`),d?await k():await _()},[d,_]);return a(n,{children:[a(`button`,{type:`button`,className:e(C.buttonShare,r,`override`),onClick:w,children:[!p&&a(f,{}),` `,x]}),y&&a(D,{debugInfo:b})]})}g(A,`frak-button-share`,[`text`],{shadow:!1});export{A as ButtonShare,S as t};
@@ -1 +0,0 @@
1
- import{S as e,f as t,h as n,i as r}from"./initFrakSdk.CMgrZQwQ.js";import{a as i,n as a,o,r as s,t as c}from"./useClientReady.CKKC4IMk.js";import{t as l}from"./ButtonShare.CSPl5Bi5.js";function u(e){return n(`svg`,{fill:`none`,height:`1em`,viewBox:`0 0 28 28`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[n(`title`,{children:`Gift icon`}),n(`path`,{d:`m23.1427 13.9999v11.4285h-18.2857v-11.4285m9.1429 11.4285v-17.14282m0 0h-5.1429c-.75776 0-1.48448-.30102-2.0203-.83684s-.83684-1.26255-.83684-2.02031.30102-1.48448.83684-2.0203 1.26254-.83684 2.0203-.83684c4 0 5.1429 5.71429 5.1429 5.71429zm0 0h5.1428c.7578 0 1.4845-.30102 2.0203-.83684s.8369-1.26255.8369-2.02031-.3011-1.48448-.8369-2.0203-1.2625-.83684-2.0203-.83684c-4 0-5.1428 5.71429-5.1428 5.71429zm-11.42861 0h22.85711v5.71432h-22.85711z`,stroke:`#fff`,"stroke-linecap":`round`,"stroke-linejoin":`round`})]})}const d={button:`Kl62ia_button`,reward:`Kl62ia_reward`,button__left:`Kl62ia_button__left`,button__right:`Kl62ia_button__right`};d.button,d.reward,d.button__left,d.button__right;function f({classname:o=``,useReward:f,targetInteraction:p}){let m=a(()=>f!==void 0,[f]),{isClientReady:h}=c(),{reward:g}=l(m&&h,p),[_,v]=s(`right`);return i(()=>{let e=window.FrakSetup?.modalWalletConfig?.metadata?.position;v(e??`right`)},[]),n(`button`,{type:`button`,"aria-label":`Open wallet`,class:e(d.button,_===`left`?d.button__left:d.button__right,o,`override`),disabled:!h,onClick:()=>{t(window.FrakSetup.client,`wallet_button_clicked`),r()},children:[n(u,{}),g&&n(`span`,{className:d.reward,children:g})]})}o(f,`frak-button-wallet`,[],{shadow:!1});export{f as ButtonWallet};
@@ -1 +0,0 @@
1
- import{S as e,d as t,f as n,h as r,u as i}from"./initFrakSdk.CMgrZQwQ.js";import{t as a}from"./Spinner.DQogVqic.js";import{n as o,o as s,t as c}from"./useClientReady.CKKC4IMk.js";function l(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||/Macintosh/i.test(navigator.userAgent)&&navigator.maxTouchPoints>1)}function u(){return{isMobile:o(()=>l(),[])}}function d(e=`wallet`){let r=window.FrakSetup?.client;r&&n(r,`open_in_app_clicked`),t(`${i}${e}`,{onFallback:()=>{r&&n(r,`app_not_installed`)}})}const f={button:`XYfqGq_button`};f.button;function p({text:t=`Open in App`,classname:n=``}){let{isClientReady:i}=c(),{isMobile:o}=u();if(!o)return null;let s=()=>{d()};return r(`button`,{type:`button`,"aria-label":`Open in Frak Wallet app`,className:e(f.button,n,`override`),disabled:!i,onClick:s,children:[!i&&r(a,{}),` `,t]})}s(p,`frak-open-in-app`,[`text`],{shadow:!1});export{p as OpenInAppButton};
@@ -1 +0,0 @@
1
- import{S as e,h as t}from"./initFrakSdk.CMgrZQwQ.js";const n={spinner:`M4fSKa_spinner`,spinner__leaf:`M4fSKa_spinner__leaf`,"rt-spinner-leaf-fade":`M4fSKa_rt-spinner-leaf-fade`};n.spinner,n.spinner__leaf,n[`rt-spinner-leaf-fade`];const r=({ref:r,className:i,...a})=>t(`span`,{...a,ref:r,className:e(n.spinner),children:[t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf}),t(`span`,{className:n.spinner__leaf})]});r.displayName=`Spinner`;export{r as t};
@@ -1,14 +0,0 @@
1
- var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function n(e){document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,1):document.addEventListener?document.addEventListener(`DOMContentLoaded`,e):document.attachEvent(`onreadystatechange`,()=>{document.readyState===`complete`&&e()})}function r(e){var t,n,i=``;if(typeof e==`string`||typeof e==`number`)i+=e;else if(typeof e==`object`)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(i&&(i+=` `),i+=n)}else for(n in e)e[n]&&(i&&(i+=` `),i+=n);return i}function i(){for(var e,t,n=0,i=``,a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(i&&(i+=` `),i+=t);return i}const a=i;var o,s,c,l,u,d,f,p,m,h,g,_={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,b=Array.isArray;function x(e,t){for(var n in t)e[n]=t[n];return e}function ee(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function S(e,t,n){var r,i,a,s={};for(a in t)a==`key`?r=t[a]:a==`ref`?i=t[a]:s[a]=t[a];if(arguments.length>2&&(s.children=arguments.length>3?o.call(arguments,2):n),typeof e==`function`&&e.defaultProps!=null)for(a in e.defaultProps)s[a]===void 0&&(s[a]=e.defaultProps[a]);return C(e,s,r,i,null)}function C(e,t,n,r,i){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++c,__i:-1,__u:0};return i==null&&s.vnode!=null&&s.vnode(a),a}function w(e){return e.children}function T(e,t){this.props=e,this.context=t}function E(e,t){if(t==null)return e.__?E(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type==`function`?E(e):null}function D(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,r=[],i=[],a=x({},t);a.__v=t.__v+1,s.vnode&&s.vnode(a),se(e.__P,a,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,r,n??E(t),!!(32&t.__u),i),a.__v=t.__v,a.__.__k[a.__i]=a,le(r,a,i),t.__e=t.__=null,a.__e!=n&&O(a)}}function O(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),O(e)}function k(e){(!e.__d&&(e.__d=!0)&&l.push(e)&&!A.__r++||u!=s.debounceRendering)&&((u=s.debounceRendering)||d)(A)}function A(){for(var e,t=1;l.length;)l.length>t&&l.sort(f),e=l.shift(),t=l.length,D(e);A.__r=0}function te(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,g,y,b=r&&r.__k||v,x=t.length;for(c=j(n,t,b,c,x),d=0;d<x;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&b[p.__i]||_,p.__i=d,g=se(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&fe(f.ref,null,p),u.push(p.ref,p.__c||m,p)),h==null&&m!=null&&(h=m),(y=!!(4&p.__u))||f.__k===p.__k?c=ne(p,c,e,y):typeof p.type==`function`&&g!==void 0?c=g:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=h,c}function j(e,t,n,r,i){var a,o,s,c,l,u=n.length,d=u,f=0;for(e.__k=Array(i),a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o==`string`||typeof o==`number`||typeof o==`bigint`||o.constructor==String?o=e.__k[a]=C(null,o,null,null,null):b(o)?o=e.__k[a]=C(w,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=C(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[a]=o,c=a+f,o.__=e,o.__b=e.__b+1,s=null,(l=o.__i=re(o,n,c,d))!=-1&&(d--,(s=n[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(i>u?f--:i<u&&f++),typeof o.type!=`function`&&(o.__u|=4)):l!=c&&(l==c-1?f--:l==c+1?f++:(l>c?f--:f++,o.__u|=4))):e.__k[a]=null;if(d)for(a=0;a<u;a++)(s=n[a])!=null&&!(2&s.__u)&&(s.__e==r&&(r=E(s)),pe(s,s));return r}function ne(e,t,n,r){var i,a;if(typeof e.type==`function`){for(i=e.__k,a=0;i&&a<i.length;a++)i[a]&&(i[a].__=e,t=ne(i[a],t,n,r));return t}e.__e!=t&&(r&&(t&&e.type&&!t.parentNode&&(t=E(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function re(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l!=null&&(2&l.__u)==0;if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>(u?1:0)){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function ie(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||y.test(t)?n:n+`px`}function ae(e,t,n,r,i){var a,o;n:if(t==`style`)if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||ie(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||ie(e.style,t,n[t])}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(p,`$1`)),o=t.toLowerCase(),t=o in e||t==`onFocusOut`||t==`onFocusIn`?o.slice(2):t.slice(2),e.l||={},e.l[t+a]=n,n?r?n.u=r.u:(n.u=m,e.addEventListener(t,a?g:h,a)):e.removeEventListener(t,a?g:h,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function oe(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=m++;else if(t.t<n.u)return;return n(s.event?s.event(t):t)}}}function se(e,t,n,r,i,a,o,c,l,u){var d,f,p,m,h,g,_,y,S,C,E,D,O,k,A,j=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(l=!!(32&n.__u),a=[c=t.__e=n.__e]),(d=s.__b)&&d(t);n:if(typeof j==`function`)try{if(y=t.props,S=`prototype`in j&&j.prototype.render,C=(d=j.contextType)&&r[d.__c],E=d?C?C.props.value:d.__:r,n.__c?_=(f=t.__c=n.__c).__=f.__E:(S?t.__c=f=new j(y,E):(t.__c=f=new T(y,E),f.constructor=j,f.render=me),C&&C.sub(f),f.state||={},f.__n=r,p=f.__d=!0,f.__h=[],f._sb=[]),S&&f.__s==null&&(f.__s=f.state),S&&j.getDerivedStateFromProps!=null&&(f.__s==f.state&&(f.__s=x({},f.__s)),x(f.__s,j.getDerivedStateFromProps(y,f.__s))),m=f.props,h=f.state,f.__v=t,p)S&&j.getDerivedStateFromProps==null&&f.componentWillMount!=null&&f.componentWillMount(),S&&f.componentDidMount!=null&&f.__h.push(f.componentDidMount);else{if(S&&j.getDerivedStateFromProps==null&&y!==m&&f.componentWillReceiveProps!=null&&f.componentWillReceiveProps(y,E),t.__v==n.__v||!f.__e&&f.shouldComponentUpdate!=null&&!1===f.shouldComponentUpdate(y,f.__s,E)){t.__v!=n.__v&&(f.props=y,f.state=f.__s,f.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(e){e&&(e.__=t)}),v.push.apply(f.__h,f._sb),f._sb=[],f.__h.length&&o.push(f);break n}f.componentWillUpdate!=null&&f.componentWillUpdate(y,f.__s,E),S&&f.componentDidUpdate!=null&&f.__h.push(function(){f.componentDidUpdate(m,h,g)})}if(f.context=E,f.props=y,f.__P=e,f.__e=!1,D=s.__r,O=0,S)f.state=f.__s,f.__d=!1,D&&D(t),d=f.render(f.props,f.state,f.context),v.push.apply(f.__h,f._sb),f._sb=[];else do f.__d=!1,D&&D(t),d=f.render(f.props,f.state,f.context),f.state=f.__s;while(f.__d&&++O<25);f.state=f.__s,f.getChildContext!=null&&(r=x(x({},r),f.getChildContext())),S&&!p&&f.getSnapshotBeforeUpdate!=null&&(g=f.getSnapshotBeforeUpdate(m,h)),k=d!=null&&d.type===w&&d.key==null?ue(d.props.children):d,c=te(e,b(k)?k:[k],t,n,r,i,a,o,c,l,u),f.base=t.__e,t.__u&=-161,f.__h.length&&o.push(f),_&&(f.__E=f.__=null)}catch(e){if(t.__v=null,l||a!=null)if(e.then){for(t.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;a[a.indexOf(c)]=null,t.__e=c}else{for(A=a.length;A--;)ee(a[A]);ce(t)}else t.__e=n.__e,t.__k=n.__k,e.then||ce(t);s.__e(e,t,n)}else a==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=de(n.__e,t,n,r,i,a,o,l,u);return(d=s.diffed)&&d(t),128&t.__u?void 0:c}function ce(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ce))}function le(e,t,n){for(var r=0;r<n.length;r++)fe(n[r],n[++r],n[++r]);s.__c&&s.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){s.__e(e,t.__v)}})}function ue(e){return typeof e!=`object`||!e||e.__b>0?e:b(e)?e.map(ue):x({},e)}function de(e,t,n,r,i,a,c,l,u){var d,f,p,m,h,g,v,y=n.props||_,x=t.props,S=t.type;if(S==`svg`?i=`http://www.w3.org/2000/svg`:S==`math`?i=`http://www.w3.org/1998/Math/MathML`:i||=`http://www.w3.org/1999/xhtml`,a!=null){for(d=0;d<a.length;d++)if((h=a[d])&&`setAttribute`in h==!!S&&(S?h.localName==S:h.nodeType==3)){e=h,a[d]=null;break}}if(e==null){if(S==null)return document.createTextNode(x);e=document.createElementNS(i,S,x.is&&x),l&&=(s.__m&&s.__m(t,a),!1),a=null}if(S==null)y===x||l&&e.data==x||(e.data=x);else{if(a&&=o.call(e.childNodes),!l&&a!=null)for(y={},d=0;d<e.attributes.length;d++)y[(h=e.attributes[d]).name]=h.value;for(d in y)h=y[d],d==`dangerouslySetInnerHTML`?p=h:d==`children`||d in x||d==`value`&&`defaultValue`in x||d==`checked`&&`defaultChecked`in x||ae(e,d,null,h,i);for(d in x)h=x[d],d==`children`?m=h:d==`dangerouslySetInnerHTML`?f=h:d==`value`?g=h:d==`checked`?v=h:l&&typeof h!=`function`||y[d]===h||ae(e,d,h,y[d],i);if(f)l||p&&(f.__html==p.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(p&&(e.innerHTML=``),te(t.type==`template`?e.content:e,b(m)?m:[m],t,n,r,S==`foreignObject`?`http://www.w3.org/1999/xhtml`:i,a,c,a?a[0]:n.__k&&E(n,0),l,u),a!=null)for(d=a.length;d--;)ee(a[d]);l||(d=`value`,S==`progress`&&g==null?e.removeAttribute(`value`):g!=null&&(g!==e[d]||S==`progress`&&!g||S==`option`&&g!=y[d])&&ae(e,d,g,y[d],i),d=`checked`,v!=null&&v!=e[d]&&ae(e,d,v,y[d],i))}return e}function fe(e,t,n){try{if(typeof e==`function`){var r=typeof e.__u==`function`;r&&e.__u(),r&&t==null||(e.__u=e(t))}else e.current=t}catch(e){s.__e(e,n)}}function pe(e,t,n){var r,i;if(s.unmount&&s.unmount(e),(r=e.ref)&&(r.current&&r.current!=e.__e||fe(r,null,t)),(r=e.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){s.__e(e,t)}r.base=r.__P=null}if(r=e.__k)for(i=0;i<r.length;i++)r[i]&&pe(r[i],t,n||typeof e.type!=`function`);n||ee(e.__e),e.__c=e.__=e.__e=void 0}function me(e,t,n){return this.constructor(e,n)}function he(e,t,n){var r,i,a,c;t==document&&(t=document.documentElement),s.__&&s.__(e,t),i=(r=typeof n==`function`)?null:n&&n.__k||t.__k,a=[],c=[],se(t,e=(!r&&n||t).__k=S(w,null,[e]),i||_,_,t.namespaceURI,!r&&n?[n]:i?null:t.firstChild?o.call(t.childNodes):null,a,!r&&n?n:i?i.__e:t.firstChild,r,c),le(a,e,c)}function ge(e,t){he(e,t,ge)}function _e(e,t,n){var r,i,a,s,c=x({},e.props);for(a in e.type&&e.type.defaultProps&&(s=e.type.defaultProps),t)a==`key`?r=t[a]:a==`ref`?i=t[a]:c[a]=t[a]===void 0&&s!=null?s[a]:t[a];return arguments.length>2&&(c.children=arguments.length>3?o.call(arguments,2):n),C(e.type,c,r||e.key,i||e.ref,null)}o=v.slice,s={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},c=0,T.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=x({},this.state);typeof e==`function`&&(e=e(x({},n),this.props)),e&&x(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),k(this))},T.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),k(this))},T.prototype.render=w,l=[],d=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(e,t){return e.__v.__b-t.__v.__b},A.__r=0,p=/(PointerCapture)$|Capture$/i,m=0,h=oe(!1),g=oe(!0);var ve=0;Array.isArray;function ye(e,t,n,r,i,a){t||={};var o,c,l=t;if(`ref`in l)for(c in l={},t)c==`ref`?o=t[c]:l[c]=t[c];var u={type:e,props:l,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--ve,__i:-1,__u:0,__source:i,__self:a};if(typeof e==`function`&&(o=e.defaultProps))for(c in o)l[c]===void 0&&(l[c]=o[c]);return s.vnode&&s.vnode(u),u}function be(e,{strict:t=!0}={}){return!e||typeof e!=`string`?!1:t?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith(`0x`)}function xe(e){return be(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}const Se=`2.46.3`;let Ce={getDocsUrl:({docsBaseUrl:e,docsPath:t=``,docsSlug:n})=>t?`${e??`https://viem.sh`}${t}${n?`#${n}`:``}`:void 0,version:`viem@${Se}`};var M=class e extends Error{constructor(t,n={}){let r=n.cause instanceof e?n.cause.details:n.cause?.message?n.cause.message:n.details,i=n.cause instanceof e&&n.cause.docsPath||n.docsPath,a=Ce.getDocsUrl?.({...n,docsPath:i}),o=[t||`An error occurred.`,``,...n.metaMessages?[...n.metaMessages,``]:[],...a?[`Docs: ${a}`]:[],...r?[`Details: ${r}`]:[],...Ce.version?[`Version: ${Ce.version}`]:[]].join(`
2
- `);super(o,n.cause?{cause:n.cause}:void 0),Object.defineProperty(this,`details`,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,`docsPath`,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,`metaMessages`,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,`shortMessage`,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,`version`,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,`name`,{enumerable:!0,configurable:!0,writable:!0,value:`BaseError`}),this.details=r,this.docsPath=i,this.metaMessages=n.metaMessages,this.name=n.name??this.name,this.shortMessage=t,this.version=Se}walk(e){return we(this,e)}};function we(e,t){return t?.(e)?e:e&&typeof e==`object`&&`cause`in e&&e.cause!==void 0?we(e.cause,t):t?null:e}var Te=class extends M{constructor({size:e,targetSize:t,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (${e}) exceeds padding size (${t}).`,{name:`SizeExceedsPaddingSizeError`})}};function N(e,{dir:t,size:n=32}={}){return typeof e==`string`?Ee(e,{dir:t,size:n}):De(e,{dir:t,size:n})}function Ee(e,{dir:t,size:n=32}={}){if(n===null)return e;let r=e.replace(`0x`,``);if(r.length>n*2)throw new Te({size:Math.ceil(r.length/2),targetSize:n,type:`hex`});return`0x${r[t===`right`?`padEnd`:`padStart`](n*2,`0`)}`}function De(e,{dir:t,size:n=32}={}){if(n===null)return e;if(e.length>n)throw new Te({size:e.length,targetSize:n,type:`bytes`});let r=new Uint8Array(n);for(let i=0;i<n;i++){let a=t===`right`;r[a?i:n-i-1]=e[a?i:e.length-i-1]}return r}var Oe=class extends M{constructor({max:e,min:t,signed:n,size:r,value:i}){super(`Number "${i}" is not in safe ${r?`${r*8}-bit ${n?`signed`:`unsigned`} `:``}integer range ${e?`(${t} to ${e})`:`(above ${t})`}`,{name:`IntegerOutOfRangeError`})}},ke=class extends M{constructor({givenSize:e,maxSize:t}){super(`Size cannot exceed ${t} bytes. Given size: ${e} bytes.`,{name:`SizeOverflowError`})}};function P(e,{size:t}){if(xe(e)>t)throw new ke({givenSize:xe(e),maxSize:t})}const Ae=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function je(e,t={}){return typeof e==`number`||typeof e==`bigint`?Pe(e,t):typeof e==`string`?Ie(e,t):typeof e==`boolean`?Me(e,t):Ne(e,t)}function Me(e,t={}){let n=`0x${Number(e)}`;return typeof t.size==`number`?(P(n,{size:t.size}),N(n,{size:t.size})):n}function Ne(e,t={}){let n=``;for(let t=0;t<e.length;t++)n+=Ae[e[t]];let r=`0x${n}`;return typeof t.size==`number`?(P(r,{size:t.size}),N(r,{dir:`right`,size:t.size})):r}function Pe(e,t={}){let{signed:n,size:r}=t,i=BigInt(e),a;r?a=n?(1n<<BigInt(r)*8n-1n)-1n:2n**(BigInt(r)*8n)-1n:typeof e==`number`&&(a=BigInt(2**53-1));let o=typeof a==`bigint`&&n?-a-1n:0;if(a&&i>a||i<o){let t=typeof e==`bigint`?`n`:``;throw new Oe({max:a?`${a}${t}`:void 0,min:`${o}${t}`,signed:n,size:r,value:`${e}${t}`})}let s=`0x${(n&&i<0?(1n<<BigInt(r*8))+BigInt(i):i).toString(16)}`;return r?N(s,{size:r}):s}const Fe=new TextEncoder;function Ie(e,t={}){return Ne(Fe.encode(e),t)}const Le=new TextEncoder;function Re(e,t={}){return typeof e==`number`||typeof e==`bigint`?He(e,t):typeof e==`boolean`?ze(e,t):be(e)?Ve(e,t):Ue(e,t)}function ze(e,t={}){let n=new Uint8Array(1);return n[0]=Number(e),typeof t.size==`number`?(P(n,{size:t.size}),N(n,{size:t.size})):n}const F={zero:48,nine:57,A:65,F:70,a:97,f:102};function Be(e){if(e>=F.zero&&e<=F.nine)return e-F.zero;if(e>=F.A&&e<=F.F)return e-(F.A-10);if(e>=F.a&&e<=F.f)return e-(F.a-10)}function Ve(e,t={}){let n=e;t.size&&(P(n,{size:t.size}),n=N(n,{dir:`right`,size:t.size}));let r=n.slice(2);r.length%2&&(r=`0${r}`);let i=r.length/2,a=new Uint8Array(i);for(let e=0,t=0;e<i;e++){let n=Be(r.charCodeAt(t++)),i=Be(r.charCodeAt(t++));if(n===void 0||i===void 0)throw new M(`Invalid byte sequence ("${r[t-2]}${r[t-1]}" in "${r}").`);a[e]=n*16+i}return a}function He(e,t){return Ve(Pe(e,t))}function Ue(e,t={}){let n=Le.encode(e);return typeof t.size==`number`?(P(n,{size:t.size}),N(n,{dir:`right`,size:t.size})):n}const I=BigInt(2**32-1),We=BigInt(32);function Ge(e,t=!1){return t?{h:Number(e&I),l:Number(e>>We&I)}:{h:Number(e>>We&I)|0,l:Number(e&I)|0}}function Ke(e,t=!1){let n=e.length,r=new Uint32Array(n),i=new Uint32Array(n);for(let a=0;a<n;a++){let{h:n,l:o}=Ge(e[a],t);[r[a],i[a]]=[n,o]}return[r,i]}const qe=(e,t,n)=>e<<n|t>>>32-n,Je=(e,t,n)=>t<<n|e>>>32-n,Ye=(e,t,n)=>t<<n-32|e>>>64-n,Xe=(e,t,n)=>e<<n-32|t>>>64-n;function Ze(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function Qe(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`positive integer expected, got `+e)}function L(e,...t){if(!Ze(e))throw Error(`Uint8Array expected`);if(t.length>0&&!t.includes(e.length))throw Error(`Uint8Array expected of length `+t+`, got length=`+e.length)}function $e(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function et(e,t){L(e);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function tt(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function nt(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}const rt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function it(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function at(e){for(let t=0;t<e.length;t++)e[t]=it(e[t]);return e}const ot=rt?e=>e:at;typeof Uint8Array.from([]).toHex==`function`&&Uint8Array.fromHex;function st(e){if(typeof e!=`string`)throw Error(`string expected`);return new Uint8Array(new TextEncoder().encode(e))}function ct(e){return typeof e==`string`&&(e=st(e)),L(e),e}var lt=class{};function ut(e){let t=t=>e().update(ct(t)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function dt(e){let t=(t,n)=>e(n).update(ct(t)).digest(),n=e({});return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=t=>e(t),t}const ft=BigInt(0),R=BigInt(1),pt=BigInt(2),mt=BigInt(7),ht=BigInt(256),gt=BigInt(113),_t=[],vt=[],yt=[];for(let e=0,t=R,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],_t.push(2*(5*r+n)),vt.push((e+1)*(e+2)/2%64);let i=ft;for(let e=0;e<7;e++)t=(t<<R^(t>>mt)*gt)%ht,t&pt&&(i^=R<<(R<<BigInt(e))-R);yt.push(i)}const bt=Ke(yt,!0),xt=bt[0],St=bt[1],Ct=(e,t,n)=>n>32?Ye(e,t,n):qe(e,t,n),wt=(e,t,n)=>n>32?Xe(e,t,n):Je(e,t,n);function Tt(e,t=24){let n=new Uint32Array(10);for(let r=24-t;r<24;r++){for(let t=0;t<10;t++)n[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let r=(t+8)%10,i=(t+2)%10,a=n[i],o=n[i+1],s=Ct(a,o,1)^n[r],c=wt(a,o,1)^n[r+1];for(let n=0;n<50;n+=10)e[t+n]^=s,e[t+n+1]^=c}let t=e[2],i=e[3];for(let n=0;n<24;n++){let r=vt[n],a=Ct(t,i,r),o=wt(t,i,r),s=_t[n];t=e[s],i=e[s+1],e[s]=a,e[s+1]=o}for(let t=0;t<50;t+=10){for(let r=0;r<10;r++)n[r]=e[t+r];for(let r=0;r<10;r++)e[t+r]^=~n[(r+2)%10]&n[(r+4)%10]}e[0]^=xt[r],e[1]^=St[r]}nt(n)}var Et=class e extends lt{constructor(e,t,n,r=!1,i=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=r,this.rounds=i,Qe(n),!(0<e&&e<200))throw Error(`only keccak-f1600 function is supported`);this.state=new Uint8Array(200),this.state32=tt(this.state)}clone(){return this._cloneInto()}keccak(){ot(this.state32),Tt(this.state32,this.rounds),ot(this.state32),this.posOut=0,this.pos=0}update(e){$e(this),e=ct(e),L(e);let{blockLen:t,state:n}=this,r=e.length;for(let i=0;i<r;){let a=Math.min(t-this.pos,r-i);for(let t=0;t<a;t++)n[this.pos++]^=e[i++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:t,pos:n,blockLen:r}=this;e[n]^=t,t&128&&n===r-1&&this.keccak(),e[r-1]^=128,this.keccak()}writeInto(e){$e(this,!1),L(e),this.finish();let t=this.state,{blockLen:n}=this;for(let r=0,i=e.length;r<i;){this.posOut>=n&&this.keccak();let a=Math.min(n-this.posOut,i-r);e.set(t.subarray(this.posOut,this.posOut+a),r),this.posOut+=a,r+=a}return e}xofInto(e){if(!this.enableXOF)throw Error(`XOF is not possible for this instance`);return this.writeInto(e)}xof(e){return Qe(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(et(e,this),this.finished)throw Error(`digest() was already called`);return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,nt(this.state)}_cloneInto(t){let{blockLen:n,suffix:r,outputLen:i,rounds:a,enableXOF:o}=this;return t||=new e(n,r,i,o,a),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=a,t.suffix=r,t.outputLen=i,t.enableXOF=o,t.destroyed=this.destroyed,t}};const z=(e,t,n)=>ut(()=>new Et(t,e,n));z(6,144,224/8),z(6,136,256/8),z(6,104,384/8),z(6,72,512/8),z(1,144,224/8);const Dt=z(1,136,256/8);z(1,104,384/8),z(1,72,512/8);const Ot=(e,t,n)=>dt((r={})=>new Et(t,e,r.dkLen===void 0?n:r.dkLen,!0));Ot(31,168,128/8),Ot(31,136,256/8);function kt(e,t){let n=t||`hex`,r=Dt(be(e,{strict:!1})?Re(e):e);return n===`bytes`?r:je(r)}var At=class extends M{constructor({address:e}){super(`Address "${e}" is invalid.`,{metaMessages:[`- Address must be a hex value of 20 bytes (40 hex characters).`,`- Address must match its checksum counterpart.`],name:`InvalidAddressError`})}},jt=class extends Map{constructor(e){super(),Object.defineProperty(this,`maxSize`,{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}get(e){let t=super.get(e);return super.has(e)&&t!==void 0&&(this.delete(e),super.set(e,t)),t}set(e,t){if(super.set(e,t),this.maxSize&&this.size>this.maxSize){let e=this.keys().next().value;e&&this.delete(e)}return this}};const Mt=new jt(8192);function Nt(e,t){if(Mt.has(`${e}.${t}`))return Mt.get(`${e}.${t}`);let n=t?`${t}${e.toLowerCase()}`:e.substring(2).toLowerCase(),r=kt(Ue(n),`bytes`),i=(t?n.substring(`${t}0x`.length):n).split(``);for(let e=0;e<40;e+=2)r[e>>1]>>4>=8&&i[e]&&(i[e]=i[e].toUpperCase()),(r[e>>1]&15)>=8&&i[e+1]&&(i[e+1]=i[e+1].toUpperCase());let a=`0x${i.join(``)}`;return Mt.set(`${e}.${t}`,a),a}const Pt=/^0x[a-fA-F0-9]{40}$/,Ft=new jt(8192);function It(e,t){let{strict:n=!0}=t??{},r=`${e}.${n}`;if(Ft.has(r))return Ft.get(r);let i=Pt.test(e)?e.toLowerCase()===e?!0:n?Nt(e)===e:!0:!1;return Ft.set(r,i),i}function Lt(e,t){if(!It(e,{strict:!1}))throw new At({address:e});if(!It(t,{strict:!1}))throw new At({address:t});return e.toLowerCase()===t.toLowerCase()}let B=256,V;function Rt(e=11){if(!V||B+e>256*2){V=``,B=0;for(let e=0;e<256;e++)V+=(256+Math.random()*256|0).toString(16).substring(1)}return V.substring(B,B+++e)}const zt={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006,userRejected:-32007};var H=class extends Error{constructor(e,t,n){super(t),this.code=e,this.data=n}toJSON(){return{code:this.code,message:this.message,data:this.data}}},Bt=class{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}};function Vt(e){let{emittingTransport:t,listeningTransport:n,targetOrigin:r,middleware:i=[],lifecycleHandlers:a}=e,o=new Map;function s(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function c(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function l(e){try{`clientLifecycle`in e&&a?.clientLifecycle?await a.clientLifecycle(e,{origin:r,source:null}):`iframeLifecycle`in e&&a?.iframeLifecycle&&await a.iframeLifecycle(e,{origin:r,source:null})}catch(e){console.error(`[RPC Client] Lifecycle handler error:`,e)}}async function u(e){let t={origin:r,source:null};for(let n of i)n.onRequest&&await n.onRequest(e,t);return e}async function d(e,t){let n={origin:r,source:null},a=t;for(let t of i)t.onResponse&&(a=await t.onResponse(e,a,n));return a}async function f(e){try{let t=new URL(e.origin).origin.toLowerCase(),n=new URL(r).origin.toLowerCase();if(t!==n){console.log(`Not expected origin`,t,n);return}}catch(e){console.error(`[RPC Client] Invalid origin`,e);return}if(s(e.data)){await l(e.data);return}if(!c(e.data))return;let t;try{let n=e.data.data,r=n instanceof Uint8Array||ArrayBuffer.isView(n)?{result:n}:n;t=await d(e.data,r)}catch(e){console.error(`[RPC Client] Middleware error on response:`,e);return}let n=o.get(e.data.id);n&&n(t)}async function p(e){let n=e;try{n=await u(e)}catch(e){throw console.error(`[RPC Client] Middleware error on request:`,e),e}t.postMessage(n,r)}function m(e){t.postMessage(e,r)}function h(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}n.addEventListener(`message`,f);function g(e){let t=h(),n=new Bt;return o.set(t,e=>{e.error?n.reject(new H(e.error.code,e.error.message,e.error.data)):n.resolve(e.result),o.delete(t)}),p({id:t,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{o.delete(t),n.reject(e)}),n.promise}function _(e,t){let n=h();return o.set(n,e=>{e.error?(console.error(`[RPC Client] Listener error:`,e.error),o.delete(n)):t(e.result)}),p({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error(`[RPC Client] Failed to send listener request:`,e),o.delete(n)}),()=>{o.delete(n)}}function v(){n.removeEventListener(`message`,f),o.clear()}return{request:g,listen:_,sendLifecycle:m,cleanup:v}}function Ht(e){return new TextEncoder().encode(JSON.stringify(e))}function Ut(e){try{return JSON.parse(new TextDecoder().decode(e))}catch{return null}}const Wt=`frak-client-id`;function Gt(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function U(){if(typeof window>`u`||!window.localStorage)return console.warn(`[Frak SDK] No Window / localStorage available to save the clientId`),Gt();let e=localStorage.getItem(Wt);return e||(e=Gt(),localStorage.setItem(Wt,e)),e}function Kt({domain:e}={}){return kt(je((e??window.location.host).replace(`www.`,``)))}function qt(e){return btoa(Array.from(e,e=>String.fromCharCode(e)).join(``)).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function Jt(e){let t=e.length%4;return Uint8Array.from(atob(e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(e.length+(t===0?0:4-t),`=`)),e=>e.charCodeAt(0))}function Yt(e){return qt(Ht(e))}function Xt(e,t,n,r,i,a){let o=Yt(Zt({redirectUrl:t.redirectUrl,directExit:t.directExit,lang:t.lang,merchantId:n,metadata:{name:r,css:a,logoUrl:t.metadata?.logoUrl,homepageLink:t.metadata?.homepageLink},clientId:i})),s=new URL(e);return s.pathname=`/sso`,s.searchParams.set(`p`,o),s.toString()}function Zt(e){return{r:e.redirectUrl,cId:e.clientId,d:e.directExit,l:e.lang,m:e.merchantId,md:{n:e.metadata?.name,css:e.metadata?.css,l:e.metadata?.logoUrl,h:e.metadata?.homepageLink}}}const Qt=`menubar=no,status=no,scrollbars=no,fullscreen=no,width=500, height=800`,$t=`frak-sso`;async function en(e,t){let{metadata:n,customizations:r,walletUrl:i}=e.config;if(t.openInSameWindow??!!t.redirectUrl)return await e.request({method:`frak_openSso`,params:[t,n.name,r?.css]});let a=t.ssoPopupUrl??Xt(i??`https://wallet.frak.id`,t,Kt(),n.name,U(),r?.css),o=window.open(a,$t,Qt);if(!o)throw Error(`Popup was blocked. Please allow popups for this site.`);return o.focus(),await e.request({method:`frak_openSso`,params:[t,n.name,r?.css]})??{}}const tn=`https://backend.frak.id`;function nn(e){return e.includes(`localhost:3000`)||e.includes(`localhost:3010`)}function rn(e){return nn(e)?`http://localhost:3030`:e.includes(`wallet-dev.frak.id`)||e.includes(`wallet.gcp-dev.frak.id`)?`https://backend.gcp-dev.frak.id`:tn}function W(e){if(e)return rn(e);if(typeof window<`u`){let e=window.FrakSetup?.client?.config?.walletUrl;if(e)return rn(e)}return tn}function an(e){return Ut(Jt(e))}function on(e){return`r`in e&&!(`v`in e)}function G(e){return`v`in e&&e.v===2}const sn=`fCtx`;function cn(e){if(e)try{return G(e)?!e.c||!e.m||!e.t?void 0:Yt({v:2,c:e.c,m:e.m,t:e.t}):qt(Ve(e.r))}catch(t){console.error(`Error compressing Frak context`,{e:t,context:e})}}function ln(e){if(!(!e||e.length===0))try{let t=an(e);if(t&&typeof t==`object`&&t.v===2)return t.c&&t.m&&t.t?{v:2,c:t.c,m:t.m,t:t.t}:void 0;let n=Ne(Jt(e),{size:20});if(It(n))return{r:n}}catch(t){console.error(`Error decompressing Frak context`,{e:t,context:e})}}function un({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(sn);return t?ln(t):null}function dn({url:e,context:t}){if(!e)return null;let n=cn(t);if(!n)return null;let r=new URL(e);return r.searchParams.set(sn,n),r.toString()}function fn(e){let t=new URL(e);return t.searchParams.delete(sn),t.toString()}function pn({url:e,context:t}){if(!window.location?.href||typeof window>`u`){console.error(`No window found, can't update context`);return}let n=e??window.location.href,r;r=t===null?fn(n):dn({url:n,context:t}),r&&window.history.replaceState(null,``,r.toString())}const mn={compress:cn,decompress:ln,parse:un,update:dn,remove:fn,replaceUrl:pn},hn=`frak-merchant-id`;let K,q;async function J(e,t){if(K)return K;if(typeof window<`u`){let e=window.sessionStorage.getItem(hn);if(e)return K=e,e}if(q)return q;q=gn(e,t);let n=await q;return q=void 0,n}async function gn(e,t){let n=e??(typeof window<`u`?window.location.hostname:``);if(n)try{let e=W(t),r=await fetch(`${e}/user/merchant/resolve?domain=${encodeURIComponent(n)}`);if(!r.ok){console.warn(`[Frak SDK] Merchant lookup failed for domain ${n}: ${r.status}`);return}let i=await r.json();return K=i.merchantId,typeof window<`u`&&window.sessionStorage.setItem(hn,i.merchantId),K}catch(e){console.warn(`[Frak SDK] Failed to fetch merchantId:`,e);return}}function _n(){K=void 0,q=void 0,typeof window<`u`&&window.sessionStorage.removeItem(hn)}async function vn(e,t){return e.metadata?.merchantId?e.metadata.merchantId:J(void 0,t)}function Y(e,t,n={}){if(!e){console.debug(`[Frak] No client provided, skipping event tracking`);return}try{e.openPanel?.track(t,n)}catch(e){console.debug(`[Frak] Failed to track event:`,t,e)}}var yn=class{constructor(e){this.baseUrl=e.baseUrl,this.headers={"Content-Type":`application/json`,...e.defaultHeaders},this.maxRetries=e.maxRetries??3,this.initialRetryDelay=e.initialRetryDelay??500}async resolveHeaders(){let e={};for(let[t,n]of Object.entries(this.headers)){let r=await n;r!==null&&(e[t]=r)}return e}addHeader(e,t){this.headers[e]=t}async post(e,t,n,r){try{let r=await fetch(e,{method:`POST`,headers:await this.resolveHeaders(),body:t?JSON.stringify(t??{}):void 0,keepalive:!0,...n});if(r.status===401)return null;if(r.status!==200&&r.status!==202)throw Error(`HTTP error! status: ${r.status}`);let i=await r.text();return i?JSON.parse(i):null}catch(i){if(r<this.maxRetries){let i=this.initialRetryDelay*2**r;return await new Promise(e=>setTimeout(e,i)),this.post(e,t,n,r+1)}return console.error(`Max retries reached:`,i),null}}async fetch(e,t,n={}){let r=`${this.baseUrl}${e}`;return this.post(r,t,n,0)}},bn=class{constructor(e){this.options=e,this.queue=[];let t={"openpanel-client-id":e.clientId};e.clientSecret&&(t[`openpanel-client-secret`]=e.clientSecret),t[`openpanel-sdk-name`]=e.sdk||`node`,t[`openpanel-sdk-version`]=e.sdkVersion||`1.0.4`,this.api=new yn({baseUrl:e.apiUrl||`https://api.openpanel.dev`,defaultHeaders:t})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(e){return this.options.disabled||this.options.filter&&!this.options.filter(e)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(e),Promise.resolve()):this.api.fetch(`/track`,e)}setGlobalProperties(e){this.global={...this.global,...e}}async track(e,t){return this.log(`track event`,e,t),this.send({type:`track`,payload:{name:e,profileId:t?.profileId??this.profileId,properties:{...this.global??{},...t??{}}}})}async identify(e){if(this.log(`identify user`,e),e.profileId&&(this.profileId=e.profileId,this.flush()),Object.keys(e).length>1)return this.send({type:`identify`,payload:{...e,properties:{...this.global,...e.properties}}})}async alias(e){}async increment(e){return this.send({type:`increment`,payload:e})}async decrement(e){return this.send({type:`decrement`,payload:e})}async revenue(e,t){let n=t?.deviceId;return delete t?.deviceId,this.track(`revenue`,{...t??{},...n?{__deviceId:n}:{},__revenue:e})}async fetchDeviceId(){return(await this.api.fetch(`/track/device-id`,void 0,{method:`GET`,keepalive:!1}))?.deviceId??``}clear(){this.profileId=void 0}flush(){this.queue.forEach(e=>{this.send({...e,payload:{...e.payload,profileId:e.payload.profileId??this.profileId}})}),this.queue=[]}log(...e){this.options.debug&&console.log(`[OpenPanel.dev]`,...e)}};function xn(e){return e.replace(/([-_][a-z])/gi,e=>e.toUpperCase().replace(`-`,``).replace(`_`,``))}var Sn=class extends bn{constructor(e){if(super({sdk:`web`,sdkVersion:`1.0.7`,...e}),this.options=e,this.lastPath=``,this.pendingRevenues=[],!this.isServer()){try{let e=sessionStorage.getItem(`openpanel-pending-revenues`);if(e){let t=JSON.parse(e);Array.isArray(t)&&(this.pendingRevenues=t)}}catch{this.pendingRevenues=[]}this.setGlobalProperties({__referrer:document.referrer}),this.options.trackScreenViews&&(this.trackScreenViews(),setTimeout(()=>this.screenView(),0)),this.options.trackOutgoingLinks&&this.trackOutgoingLinks(),this.options.trackAttributes&&this.trackAttributes()}}debounce(e,t){clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(e,t)}isServer(){return typeof document>`u`}trackOutgoingLinks(){this.isServer()||document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`a`);if(n&&t){let e=n.getAttribute(`href`);if(e?.startsWith(`http`))try{let r=new URL(e),i=window.location.hostname;r.hostname!==i&&super.track(`link_out`,{href:e,text:n.innerText||n.getAttribute(`title`)||t.getAttribute(`alt`)||t.getAttribute(`title`)})}catch{}}})}trackScreenViews(){if(this.isServer())return;let e=history.pushState;history.pushState=function(...t){let n=e.apply(this,t);return window.dispatchEvent(new Event(`pushstate`)),window.dispatchEvent(new Event(`locationchange`)),n};let t=history.replaceState;history.replaceState=function(...e){let n=t.apply(this,e);return window.dispatchEvent(new Event(`replacestate`)),window.dispatchEvent(new Event(`locationchange`)),n},window.addEventListener(`popstate`,()=>{window.dispatchEvent(new Event(`locationchange`))});let n=()=>this.debounce(()=>this.screenView(),50);this.options.trackHashChanges?window.addEventListener(`hashchange`,n):window.addEventListener(`locationchange`,n)}trackAttributes(){this.isServer()||document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`button`),r=t.closest(`a`),i=n?.getAttribute(`data-track`)?n:r?.getAttribute(`data-track`)?r:null;if(i){let e={};for(let t of i.attributes)t.name.startsWith(`data-`)&&t.name!==`data-track`&&(e[xn(t.name.replace(/^data-/,``))]=t.value);let t=i.getAttribute(`data-track`);t&&super.track(t,e)}})}screenView(e,t){if(this.isServer())return;let n,r;typeof e==`string`?(n=e,r=t):(n=window.location.href,r=e),this.lastPath!==n&&(this.lastPath=n,super.track(`screen_view`,{...r??{},__path:n,__title:document.title}))}async flushRevenue(){let e=this.pendingRevenues.map(e=>super.revenue(e.amount,e.properties));await Promise.all(e),this.clearRevenue()}clearRevenue(){if(this.pendingRevenues=[],!this.isServer())try{sessionStorage.removeItem(`openpanel-pending-revenues`)}catch{}}pendingRevenue(e,t){if(this.pendingRevenues.push({amount:e,properties:t}),!this.isServer())try{sessionStorage.setItem(`openpanel-pending-revenues`,JSON.stringify(this.pendingRevenues))}catch{}}};const Cn=`nexus-wallet-backup`,wn=`frakwallet://`;function Tn(){let e=navigator.userAgent;return/Android/i.test(e)&&/Chrome\/\d+/i.test(e)}function En(e){return`intent://${e.slice(13)}#Intent;scheme=frakwallet;end`}function Dn(e,t){let n=t?.timeout??2500,r=!1,i=()=>{document.hidden&&(r=!0)};document.addEventListener(`visibilitychange`,i);let a=Tn()&&On(e)?En(e):e;window.location.href=a,setTimeout(()=>{document.removeEventListener(`visibilitychange`,i),r||t?.onFallback?.()},n)}function On(e){return e.startsWith(wn)}const X={eur:`fr-FR`,usd:`en-US`,gbp:`en-GB`};function kn(e){return e&&e in X?e:`eur`}function An(e){return e?X[e]??X.eur:X.eur}function jn(e,t){let n=An(t),r=kn(t);return e.toLocaleString(n,{style:`currency`,currency:r,minimumFractionDigits:0,maximumFractionDigits:2})}function Mn(e){return e?`${e}Amount`:`eurAmount`}const Z={id:`frak-wallet`,name:`frak-wallet`,title:`Frak Wallet`,allow:`publickey-credentials-get *; clipboard-write; web-share *`,style:{width:`0`,height:`0`,border:`0`,position:`absolute`,zIndex:2000001,top:`-1000px`,left:`-1000px`,colorScheme:`auto`}};function Nn({walletBaseUrl:e,config:t}){let n=document.querySelector(`#frak-wallet`);n&&n.remove();let r=document.createElement(`iframe`);r.id=Z.id,r.name=Z.name,r.allow=Z.allow,r.style.zIndex=Z.style.zIndex.toString(),Pn({iframe:r,isVisible:!1});let i=t?.walletUrl??e??`https://wallet.frak.id`,a=U();return r.src=`${i}/listener?clientId=${encodeURIComponent(a)}`,new Promise(e=>{r.addEventListener(`load`,()=>e(r)),document.body.appendChild(r)})}function Pn({iframe:e,isVisible:t}){if(!t){e.style.width=`0`,e.style.height=`0`,e.style.border=`0`,e.style.position=`fixed`,e.style.top=`-1000px`,e.style.left=`-1000px`;return}e.style.position=`fixed`,e.style.top=`0`,e.style.left=`0`,e.style.width=`100%`,e.style.height=`100%`,e.style.pointerEvents=`auto`}function Fn(e=`/listener`){if(!window.opener)return null;let t=t=>{try{return t.location.origin===window.location.origin&&t.location.pathname===e}catch{return!1}};if(t(window.opener))return window.opener;try{let e=window.opener.frames;for(let n=0;n<e.length;n++)if(t(e[n]))return e[n];return null}catch(t){return console.error(`[findIframeInOpener] Error finding iframe with pathname ${e}:`,t),null}}function In(e,t){if(typeof window>`u`)return;let n=new URL(window.location.href),r=n.searchParams.get(`sso`);r&&(t.then(()=>{e.sendLifecycle({clientLifecycle:`sso-redirect-complete`,data:{compressed:r}}),console.log(`[SSO URL Listener] Forwarded compressed SSO data to iframe`)}).catch(e=>{console.error(`[SSO URL Listener] Failed to forward SSO data:`,e)}),n.searchParams.delete(`sso`),window.history.replaceState({},``,n.toString()),console.log(`[SSO URL Listener] SSO parameter detected and URL cleaned`))}var Ln=class e{config;iframe;isSetupDone=!1;lastResponse=null;lastRequest=null;constructor(e,t){this.config=e,this.iframe=t,this.lastRequest=null,this.lastResponse=null}setLastResponse(e,t){this.lastResponse={message:e,response:t,timestamp:Date.now()}}setLastRequest(e){this.lastRequest={event:e,timestamp:Date.now()}}updateSetupStatus(e){this.isSetupDone=e}base64Encode(e){try{return btoa(JSON.stringify(e))}catch(e){return console.warn(`Failed to encode debug data`,e),btoa(`Failed to encode data`)}}getIframeStatus(){return this.iframe?{loading:this.iframe.hasAttribute(`loading`),url:this.iframe.src,readyState:this.iframe.contentDocument?.readyState?this.iframe.contentDocument.readyState===`complete`?1:0:-1,contentWindow:!!this.iframe.contentWindow,isConnected:this.iframe.isConnected}:null}getNavigatorInfo(){return navigator?{userAgent:navigator.userAgent,language:navigator.language,onLine:navigator.onLine,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}:null}gatherDebugInfo(e){let t=this.getIframeStatus(),n=this.getNavigatorInfo(),r=`Unknown`;return e instanceof H?r=`FrakRpcError: ${e.code} '${e.message}'`:e instanceof Error?r=e.message:typeof e==`string`&&(r=e),{timestamp:new Date().toISOString(),encodedUrl:btoa(window.location.href),encodedConfig:this.config?this.base64Encode(this.config):`no-config`,navigatorInfo:n?this.base64Encode(n):`no-navigator`,iframeStatus:t?this.base64Encode(t):`not-iframe`,lastRequest:this.lastRequest?this.base64Encode(this.lastRequest):`No Frak request logged`,lastResponse:this.lastResponse?this.base64Encode(this.lastResponse):`No Frak response logged`,clientStatus:this.isSetupDone?`setup`:`not-setup`,error:r}}static empty(){return new e}formatDebugInfo(e){let t=this.gatherDebugInfo(e);return`
3
- Debug Information:
4
- -----------------
5
- Timestamp: ${t.timestamp}
6
- URL: ${t.encodedUrl}
7
- Config: ${t.encodedConfig}
8
- Navigator Info: ${t.navigatorInfo}
9
- IFrame Status: ${t.iframeStatus}
10
- Last Request: ${t.lastRequest}
11
- Last Response: ${t.lastResponse}
12
- Client Status: ${t.clientStatus}
13
- Error: ${t.error}
14
- `.trim()}};const Rn=(()=>{if(typeof navigator>`u`)return!1;let e=navigator.userAgent;if(!(/iPhone|iPad|iPod/i.test(e)||/Macintosh/i.test(e)&&navigator.maxTouchPoints>1))return!1;let t=e.toLowerCase();return t.includes(`instagram`)||t.includes(`fban`)||t.includes(`fbav`)||t.includes(`facebook`)})();function zn(e){e?localStorage.setItem(Cn,e):localStorage.removeItem(Cn)}function Bn(e,t,n,r){let i=new URL(window.location.href),a=i.searchParams.get(`fmt`)??void 0;e.contentWindow?.postMessage({clientLifecycle:`handshake-response`,data:{token:t,currentUrl:window.location.href,pendingMergeToken:a,configDomain:r,clientId:U()}},n),a&&(i.searchParams.delete(`fmt`),window.history.replaceState({},``,i.toString()))}function Vn(e,t){try{let n=new URL(e);return n.searchParams.has(`u`)?(n.searchParams.delete(`u`),n.searchParams.append(`u`,window.location.href),t&&n.searchParams.append(`fmt`,t),n.toString()):e}catch{return e}}function Hn(e){let t=new URL(window.location.href);e&&t.searchParams.set(`fmt`,e);let n=t.protocol===`http:`?`x-safari-http`:`x-safari-https`;window.location.href=`${n}://${t.host}${t.pathname}${t.search}${t.hash}`}function Un(e){return e.includes(`/common/social`)}function Wn(e,t,n,r){if(On(t)){let i=Vn(t,r);Dn(i,{onFallback:()=>{e.contentWindow?.postMessage({clientLifecycle:`deep-link-failed`,data:{originalUrl:i}},n)}})}else if(Rn&&Un(t))Hn(r);else{let e=Vn(t,r);window.location.href=e}}function Gn({iframe:e,targetOrigin:t,configDomain:n}){let r=new Bt;return{handleEvent:async i=>{if(!(`iframeLifecycle`in i))return;let{iframeLifecycle:a,data:o}=i;switch(a){case`connected`:r.resolve(!0);break;case`do-backup`:zn(o.backup);break;case`remove-backup`:localStorage.removeItem(Cn);break;case`show`:case`hide`:Pn({iframe:e,isVisible:a===`show`});break;case`handshake`:Bn(e,o.token,t,n);break;case`redirect`:Wn(e,o.baseRedirectUrl,t,o.mergeToken);break}},isConnected:r.promise}}function Kn({config:e,iframe:t}){let n=e?.walletUrl??`https://wallet.frak.id`,r=Gn({iframe:t,targetOrigin:n,configDomain:e.domain}),i=new Ln(e,t);if(!t.contentWindow)throw new H(zt.configError,`The iframe does not have a content window`);let a=Vt({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await r.isConnected)throw new H(zt.clientNotConnected,`The iframe provider isn't connected yet`);return t}},{onRequest(e,t){return i.setLastRequest(e),t},onResponse(e,t){return i.setLastResponse(e,t),t}}],lifecycleHandlers:{iframeLifecycle:async(e,t)=>{await r.handleEvent(e)}}}),o=qn(a,r),s=async()=>{o(),a.cleanup(),t.remove()},c;console.log(`[Frak SDK] Initializing OpenPanel`),c=new Sn({apiUrl:`https://op-api.gcp.frak.id`,clientId:`6eacc8d7-49ac-4936-95e9-81ef29449570`,trackScreenViews:!0,trackOutgoingLinks:!0,trackAttributes:!1,filter:({type:e,payload:t})=>(e!==`track`||!t?.properties||`sdkVersion`in t.properties||(t.properties={...t.properties,sdkVersion:`0.2.1`,userAnonymousClientId:U()}),!0)}),c.setGlobalProperties({sdkVersion:`0.2.1`,userAnonymousClientId:U()}),c.init();let l=Jn({config:e,rpcClient:a,lifecycleManager:r}).then(()=>i.updateSetupStatus(!0));return{config:e,debugInfo:i,waitForConnection:r.isConnected,waitForSetup:l,request:a.request,listenerRequest:a.listen,destroy:s,openPanel:c}}function qn(e,t){let n,r,i=()=>e.sendLifecycle({clientLifecycle:`heartbeat`});async function a(){i(),n=setInterval(i,1e3),r=setTimeout(()=>{o(),console.log(`Heartbeat timeout: connection failed`)},3e4),await t.isConnected,o()}function o(){n&&clearInterval(n),r&&clearTimeout(r)}return a(),o}async function Jn({config:e,rpcClient:t,lifecycleManager:n}){await n.isConnected,In(t,n.isConnected);async function r(){let n=e.customizations?.css;if(!n)return;let r={clientLifecycle:`modal-css`,data:{cssLink:n}};t.sendLifecycle(r)}async function i(){let n=e.customizations?.i18n;if(!n)return;let r={clientLifecycle:`modal-i18n`,data:{i18n:n}};t.sendLifecycle(r)}async function a(){if(typeof window>`u`)return;let e=window.localStorage.getItem(Cn);if(!e)return;let n={clientLifecycle:`restore-backup`,data:{backup:e}};t.sendLifecycle(n)}await Promise.allSettled([r(),i(),a()])}async function Yn({config:e}){let t=Xn(e),n=await Nn({config:t});if(!n){console.error(`Failed to create iframe`);return}let r=Kn({config:t,iframe:n});if(await r.waitForSetup,!await r.waitForConnection){console.error(`Failed to connect to client`);return}return r}function Xn(e){let t=kn(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}function Zn(){return Rt(96)}async function Qn(e,t){return await e.request({method:`frak_displayEmbeddedWallet`,params:[t,e.config.metadata]})}async function Q(e,{steps:t,metadata:n}){return await e.request({method:`frak_displayModal`,params:[t,n,e.config.metadata]})}async function $n(e){if(typeof window>`u`)return;let t=U();if(!t)return;let n=await J();if(!n)return;let r=`frak-identity-ensured-${n}`;if(!window.sessionStorage.getItem(r))try{let i=W();(await fetch(`${i}/user/identity/ensure`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,"x-wallet-sdk-auth":e,"x-frak-client-id":t},body:JSON.stringify({merchantId:n})})).ok&&window.sessionStorage.setItem(r,`1`)}catch{}}async function er(e){return await e.request({method:`frak_getMerchantInformation`})}async function tr(e,t){let{metadata:n,customizations:r}=e.config;return await e.request({method:`frak_prepareSso`,params:[t,n.name,r?.css]})}async function nr(e,t){try{await e.request({method:`frak_sendInteraction`,params:[t,{clientId:U()}]})}catch{console.warn(`[Frak SDK] Failed to send interaction:`,t.type)}}function rr(e,t,n){let r=typeof window<`u`?window.location.href:void 0;return G(t)?(Y(e,`user_referred_started`,{properties:{referrerClientId:t.c,walletStatus:n?.key}}),nr(e,{type:`arrival`,referrerClientId:t.c,referrerMerchantId:t.m,referralTimestamp:t.t,landingUrl:r}),!0):on(t)?(Y(e,`user_referred_started`,{properties:{referrer:t.r,walletStatus:n?.key}}),nr(e,{type:`arrival`,referrerWallet:t.r,landingUrl:r}),!0):!1}function ir(e){let t=U();return t?{v:2,c:t,m:e,t:Math.floor(Date.now()/1e3)}:null}function ar(e,t){return G(e)?U()===e.c:on(e)&&t?.wallet?Lt(e.r,t.wallet):!1}function or(e,{walletStatus:t,frakContext:n,options:r}){if(!n)return`no-referrer`;if(ar(n,t))return`self-referral`;if(!rr(e,n,t))return`no-referrer`;let i=G(n)?n.m:r?.merchantId,a=r?.alwaysAppendUrl&&i?ir(i):null;return mn.replaceUrl({url:window.location?.href,context:a}),Y(e,`user_referred_completed`,{properties:{status:`success`}}),`success`}async function sr(e,{options:t}={}){let n=mn.parse({url:window.location.href}),r=await lr(e);try{return or(e,{walletStatus:r,frakContext:n,options:t})}catch(e){console.warn(`Error processing referral`,{error:e})}}async function cr(e){if(typeof window>`u`){console.warn(`[Frak] No window found, can't track purchase`);return}let t=window.sessionStorage.getItem(`frak-wallet-interaction-token`),n=U();if(!t&&!n){console.warn(`[Frak] No identity found, skipping purchase check`);return}let r=window.sessionStorage.getItem(`frak-merchant-id`),i=e.merchantId??r??await J();if(!i){console.warn(`[Frak] No merchant id found, skipping purchase check`);return}let a={Accept:`application/json`,"Content-Type":`application/json`};t&&(a[`x-wallet-sdk-auth`]=t),n&&(a[`x-frak-client-id`]=n);let o=W();await fetch(`${o}/user/track/purchase`,{method:`POST`,headers:a,body:JSON.stringify({customerId:e.customerId,orderId:e.orderId,token:e.token,merchantId:i})})}function lr(e,t){if(!t)return e.request({method:`frak_listenToWalletStatus`}).then(t=>(ur(e,t),t));let n=new Bt,r=!1;return e.listenerRequest({method:`frak_listenToWalletStatus`},i=>{ur(e,i),t(i),r||=(n.resolve(i),!0)}),n.promise}function ur(e,t){typeof window>`u`||(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?(window.sessionStorage.setItem(`frak-wallet-interaction-token`,t.interactionToken),$n(t.interactionToken)):window.sessionStorage.removeItem(`frak-wallet-interaction-token`))}function dr(e,{metadata:t,login:n}){return $(e,{steps:{login:n??{}},metadata:t})}function $(e,t){function n(n){return $(e,{...t,steps:{...t.steps,sendTransaction:n}})}function r(n){return $(e,{...t,steps:{...t.steps,final:{...n,action:{key:`reward`}}}})}function i(n,r){return $(e,{...t,steps:{...t.steps,final:{...r,action:{key:`sharing`,options:n}}}})}async function a(n){return n&&(t.metadata=n(t.metadata??{})),await Q(e,t)}return{params:t,sendTx:n,reward:r,sharing:i,display:a}}async function fr(e,{tx:t,metadata:n}){return(await Q(e,{metadata:n,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}async function pr(e,{siwe:t,metadata:n}){let r=e.config?.domain??window.location.host,i=t?.statement??`I confirm that I want to use my Frak wallet on: ${e.config.metadata.name}`;return(await Q(e,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:{...t,statement:i,nonce:t?.nonce??Zn(),uri:t?.uri??`https://${r}`,version:t?.version??`1`,domain:r}}}})).siweAuthenticate}var mr=t({DEEP_LINK_SCHEME:()=>wn,DebugInfoGatherer:()=>Ln,FrakContextManager:()=>mn,base64urlDecode:()=>Jt,base64urlEncode:()=>qt,baseIframeProps:()=>Z,clearMerchantIdCache:()=>_n,compressJsonToB64:()=>Yt,computeLegacyProductId:()=>Kt,createIFrameFrakClient:()=>Kn,createIframe:()=>Nn,decompressJsonFromB64:()=>an,displayEmbeddedWallet:()=>Qn,displayModal:()=>Q,ensureIdentity:()=>$n,fetchMerchantId:()=>J,findIframeInOpener:()=>Fn,formatAmount:()=>jn,generateSsoUrl:()=>Xt,getBackendUrl:()=>W,getClientId:()=>U,getCurrencyAmountKey:()=>Mn,getMerchantInformation:()=>er,getSupportedCurrency:()=>kn,getSupportedLocale:()=>An,isChromiumAndroid:()=>Tn,isFrakDeepLink:()=>On,isV1Context:()=>on,isV2Context:()=>G,locales:()=>X,modalBuilder:()=>dr,openSso:()=>en,prepareSso:()=>tr,processReferral:()=>or,referralInteraction:()=>sr,resolveMerchantId:()=>vn,sendInteraction:()=>nr,sendTransaction:()=>fr,setupClient:()=>Yn,siweAuthenticate:()=>pr,ssoPopupFeatures:()=>Qt,ssoPopupName:()=>$t,toAndroidIntentUrl:()=>En,trackEvent:()=>Y,trackPurchaseStatus:()=>cr,triggerDeepLinkWithFallback:()=>Dn,watchWalletStatus:()=>lr});function hr(){`vibrate`in navigator?navigator.vibrate(10):console.log(`Vibration not supported`)}function gr(){if(!window.FrakSetup?.client){console.error(`Frak client not found`);return}hr(),Qn(window.FrakSetup.client,window.FrakSetup?.modalWalletConfig??{})}const _r=`frakClientReady`;function vr(){let e=new CustomEvent(_r);window.dispatchEvent(e)}function yr(e,t){if(window.FrakSetup?.client&&e===`add`){t();return}(e===`add`?window.addEventListener:window.removeEventListener)(_r,t,!1)}function br(e){window.modalBuilderSteps=dr(e,window.FrakSetup?.modalConfig??{})}async function xr(e){let t=await sr(e);console.log(`referral`,t)}function Sr(){if(!window.modalBuilderSteps)throw Error(`modalBuilderSteps not found`);return window.modalBuilderSteps}async function Cr(){if(window.FrakSetup.core=mr,!wr())return;if(console.log(`[Frak SDK] Starting initialization`),!window.FrakSetup.config){console.error(`[Frak SDK] Configuration not found`),window.frakSetupInProgress=!1;return}let e=await Yn({config:window.FrakSetup.config});if(!e){console.error(`[Frak SDK] Failed to create client`),window.frakSetupInProgress=!1;return}window.FrakSetup.client=e,console.log(`[Frak SDK] Client initialized successfully`),vr(),br(e),xr(e),window.frakSetupInProgress=!1,Tr()}function wr(){return window.frakSetupInProgress?(console.log(`[Frak SDK] Initialization already in progress`),!1):(window.frakSetupInProgress=!0,window.FrakSetup?.client?(console.log(`[Frak SDK] Client already initialized`),window.frakSetupInProgress=!1,!1):window.FrakSetup?.config?!0:(console.error(`[Frak SDK] Configuration not found. Please ensure window.FrakSetup.config is set.`),window.frakSetupInProgress=!1,!1))}function Tr(){let e=new URLSearchParams(window.location.search).get(`frakAction`);e&&e===`share`&&(console.log(`[Frak SDK] Auto open query param found`),gr())}export{n as C,a as S,ge as _,er as a,w as b,Mn as c,Dn as d,Y as f,he as g,ye as h,gr as i,jn as l,H as m,Sr as n,Qn as o,zt as p,yr as r,Ln as s,Cr as t,wn as u,_e as v,s as x,S as y};