@frak-labs/core-sdk 0.2.1 → 1.0.0-beta.0cd79998
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/cdn/bundle.js +3 -3
- package/dist/actions-BMTVobuH.js +1 -0
- package/dist/actions-ukNCM0d7.cjs +1 -0
- package/dist/actions.cjs +1 -1
- package/dist/actions.d.cts +3 -3
- package/dist/actions.d.ts +3 -3
- package/dist/actions.js +1 -1
- package/dist/bundle.cjs +1 -1
- package/dist/bundle.d.cts +4 -4
- package/dist/bundle.d.ts +4 -4
- package/dist/bundle.js +1 -1
- package/dist/{computeLegacyProductId-b5cUWdAm.d.ts → index-BCwGNRmk.d.cts} +144 -58
- package/dist/{computeLegacyProductId-CCAZvLa5.d.cts → index-BfmJnxzo.d.ts} +144 -58
- package/dist/{siweAuthenticate-CnCZ7mok.d.ts → index-CVnwk1E_.d.cts} +122 -8
- package/dist/{siweAuthenticate-CVigMOxz.d.cts → index-DZuYiI2M.d.ts} +122 -8
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/{openSso-B0g7-807.d.cts → openSso-BQ-q-_Y9.d.ts} +373 -46
- package/dist/{openSso-CMzwvaCa.d.ts → openSso-CMBCbhvP.d.cts} +372 -45
- package/dist/src-Cx0RZEA3.js +13 -0
- package/dist/src-DmYZ4ZLk.cjs +13 -0
- package/dist/trackEvent-B5xo_5K3.cjs +1 -0
- package/dist/trackEvent-DdykyX0U.js +1 -0
- package/package.json +12 -13
- package/src/actions/displayEmbeddedWallet.ts +6 -2
- package/src/actions/displayModal.ts +6 -2
- package/src/actions/displaySharingPage.ts +49 -0
- package/src/actions/ensureIdentity.ts +2 -2
- package/src/actions/getMerchantInformation.test.ts +13 -1
- package/src/actions/getMerchantInformation.ts +20 -5
- package/src/actions/getMergeToken.ts +33 -0
- package/src/actions/getUserReferralStatus.ts +42 -0
- package/src/actions/index.ts +8 -1
- package/src/actions/referral/setupReferral.test.ts +79 -0
- package/src/actions/referral/setupReferral.ts +32 -0
- package/src/actions/trackPurchaseStatus.test.ts +32 -20
- package/src/actions/trackPurchaseStatus.ts +3 -5
- package/src/actions/wrapper/modalBuilder.test.ts +4 -2
- package/src/actions/wrapper/modalBuilder.ts +6 -8
- package/src/clients/createIFrameFrakClient.ts +162 -27
- package/src/clients/transports/iframeLifecycleManager.test.ts +14 -94
- package/src/clients/transports/iframeLifecycleManager.ts +35 -53
- package/src/index.ts +21 -4
- package/src/stubs/rrweb.ts +9 -0
- package/src/types/config.ts +19 -3
- package/src/types/index.ts +15 -1
- package/src/types/lifecycle/client.ts +22 -27
- package/src/types/lifecycle/iframe.ts +7 -8
- package/src/types/resolvedConfig.ts +138 -0
- package/src/types/rpc/displaySharingPage.ts +100 -0
- package/src/types/rpc/embedded/index.ts +1 -1
- package/src/types/rpc/interaction.ts +4 -0
- package/src/types/rpc/userReferralStatus.ts +20 -0
- package/src/types/rpc.ts +54 -5
- package/src/types/tracking.ts +36 -0
- package/src/utils/FrakContext.test.ts +144 -0
- package/src/utils/FrakContext.ts +67 -1
- package/src/utils/backendUrl.test.ts +2 -2
- package/src/utils/backendUrl.ts +1 -1
- package/src/utils/cache/index.ts +7 -0
- package/src/utils/cache/lruMap.test.ts +55 -0
- package/src/utils/cache/lruMap.ts +38 -0
- package/src/utils/cache/withCache.test.ts +168 -0
- package/src/utils/cache/withCache.ts +124 -0
- package/src/utils/inAppBrowser.ts +60 -0
- package/src/utils/index.ts +10 -4
- package/src/utils/mergeAttribution.test.ts +153 -0
- package/src/utils/mergeAttribution.ts +75 -0
- package/src/utils/sdkConfigStore.test.ts +405 -0
- package/src/utils/sdkConfigStore.ts +263 -0
- package/src/utils/sso.ts +3 -7
- package/dist/setupClient-BduY6Sym.cjs +0 -13
- package/dist/setupClient-ftmdQ-I8.js +0 -13
- package/dist/siweAuthenticate-BWmI2_TN.cjs +0 -1
- package/dist/siweAuthenticate-zczqxm0a.js +0 -1
- package/dist/trackEvent-CeLFVzZn.js +0 -1
- package/dist/trackEvent-Ew5r5zfI.cjs +0 -1
- package/src/utils/merchantId.test.ts +0 -653
- package/src/utils/merchantId.ts +0 -143
|
@@ -1,8 +1,65 @@
|
|
|
1
|
-
import { OpenPanel } from "@openpanel/web";
|
|
2
|
-
import { LifecycleMessage, RpcClient } from "@frak-labs/frame-connector";
|
|
3
1
|
import { Address, Hex } from "viem";
|
|
2
|
+
import { LifecycleMessage, RpcClient } from "@frak-labs/frame-connector";
|
|
3
|
+
import { OpenPanel } from "@openpanel/web";
|
|
4
4
|
import { SiweMessage } from "viem/siwe";
|
|
5
5
|
|
|
6
|
+
//#region src/types/tracking.d.ts
|
|
7
|
+
type UtmParams = {
|
|
8
|
+
source?: string;
|
|
9
|
+
medium?: string;
|
|
10
|
+
campaign?: string;
|
|
11
|
+
term?: string;
|
|
12
|
+
content?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Attribution parameters appended to outbound sharing URLs.
|
|
16
|
+
*
|
|
17
|
+
* Defaults are derived from the V2 Frak context when available:
|
|
18
|
+
* - `utmSource`: `"frak"`
|
|
19
|
+
* - `utmMedium`: `"referral"`
|
|
20
|
+
* - `utmCampaign`: merchantId (`context.m`)
|
|
21
|
+
* - `via`: `"frak"`
|
|
22
|
+
* - `ref`: clientId (`context.c`)
|
|
23
|
+
*
|
|
24
|
+
* Fields explicitly set here override the defaults. Existing params on the
|
|
25
|
+
* base URL are preserved (gap-fill policy) to respect merchant-provided UTMs.
|
|
26
|
+
*/
|
|
27
|
+
type AttributionParams = {
|
|
28
|
+
utmSource?: string;
|
|
29
|
+
utmMedium?: string;
|
|
30
|
+
utmCampaign?: string;
|
|
31
|
+
utmContent?: string;
|
|
32
|
+
utmTerm?: string;
|
|
33
|
+
via?: string;
|
|
34
|
+
ref?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Merchant-level attribution defaults.
|
|
38
|
+
*
|
|
39
|
+
* Same shape as {@link AttributionParams} minus `utmContent`, because
|
|
40
|
+
* `utm_content` describes the specific content/creative being shared and is
|
|
41
|
+
* inherently per-call or per-product (never a merchant-wide default).
|
|
42
|
+
*
|
|
43
|
+
* Used as the shape for both:
|
|
44
|
+
* - `FrakWalletSdkConfig.attribution` (SDK-side compile-time defaults)
|
|
45
|
+
* - Backend merchant-config attribution (dashboard-driven defaults)
|
|
46
|
+
*/
|
|
47
|
+
type AttributionDefaults = Omit<AttributionParams, "utmContent">;
|
|
48
|
+
type TrackArrivalParams = {
|
|
49
|
+
/** @deprecated V1 legacy — use referrerClientId for v2 contexts */referrerWallet?: Address;
|
|
50
|
+
referrerClientId?: string;
|
|
51
|
+
referrerMerchantId?: string; /** Epoch seconds timestamp from the referral link creation */
|
|
52
|
+
referralTimestamp?: number;
|
|
53
|
+
landingUrl?: string;
|
|
54
|
+
utmParams?: UtmParams;
|
|
55
|
+
};
|
|
56
|
+
type TrackArrivalResult = {
|
|
57
|
+
success: boolean;
|
|
58
|
+
identityGroupId?: string;
|
|
59
|
+
touchpointId?: string;
|
|
60
|
+
error?: string;
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
6
63
|
//#region src/types/config.d.ts
|
|
7
64
|
/**
|
|
8
65
|
* All the currencies available
|
|
@@ -31,7 +88,7 @@ type FrakWalletSdkConfig = {
|
|
|
31
88
|
/**
|
|
32
89
|
* Your application name (will be displayed in a few modals and in SSO)
|
|
33
90
|
*/
|
|
34
|
-
name
|
|
91
|
+
name?: string;
|
|
35
92
|
/**
|
|
36
93
|
* Your merchant ID from the Frak dashboard (UUID format)
|
|
37
94
|
* Used for referral tracking and analytics
|
|
@@ -75,6 +132,20 @@ type FrakWalletSdkConfig = {
|
|
|
75
132
|
* @defaultValue window.location.host
|
|
76
133
|
*/
|
|
77
134
|
domain?: string;
|
|
135
|
+
/**
|
|
136
|
+
* Wait for backend config before rendering components.
|
|
137
|
+
* When true (default), components show a spinner until backend config is resolved.
|
|
138
|
+
* When false, components render immediately with SDK static config / HTML attributes.
|
|
139
|
+
* @defaultValue true
|
|
140
|
+
*/
|
|
141
|
+
waitForBackendConfig?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Default attribution params (UTM / via / ref) appended to outbound
|
|
144
|
+
* sharing URLs. Per-call `displaySharingPage` overrides win, then backend
|
|
145
|
+
* config, then this SDK-level default. `utm_content` is intentionally
|
|
146
|
+
* excluded — it is per-content/per-product, never a merchant-wide default.
|
|
147
|
+
*/
|
|
148
|
+
attribution?: AttributionDefaults;
|
|
78
149
|
};
|
|
79
150
|
/**
|
|
80
151
|
* Custom i18n configuration for the modal
|
|
@@ -111,19 +182,125 @@ type FrakWalletSdkConfig = {
|
|
|
111
182
|
*/
|
|
112
183
|
type I18nConfig = Record<Language, LocalizedI18nConfig> | LocalizedI18nConfig;
|
|
113
184
|
/**
|
|
114
|
-
* A localized i18n config
|
|
185
|
+
* A localized i18n config (inline objects only — URL-based i18n removed)
|
|
115
186
|
* @category Config
|
|
116
187
|
*/
|
|
117
|
-
type LocalizedI18nConfig =
|
|
188
|
+
type LocalizedI18nConfig = {
|
|
118
189
|
[key: string]: string;
|
|
119
190
|
};
|
|
120
191
|
//#endregion
|
|
192
|
+
//#region src/types/resolvedConfig.d.ts
|
|
193
|
+
/**
|
|
194
|
+
* Response from the merchant resolve endpoint
|
|
195
|
+
* @category Config
|
|
196
|
+
*/
|
|
197
|
+
type MerchantConfigResponse = {
|
|
198
|
+
merchantId: string;
|
|
199
|
+
name: string;
|
|
200
|
+
domain: string;
|
|
201
|
+
allowedDomains: string[];
|
|
202
|
+
sdkConfig?: ResolvedSdkConfig;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* Resolved placement config from backend
|
|
206
|
+
* Translations already flattened: default + lang-specific merged into one record
|
|
207
|
+
* @category Config
|
|
208
|
+
*/
|
|
209
|
+
type ResolvedPlacement = {
|
|
210
|
+
/** Per-component configuration within this placement */components?: {
|
|
211
|
+
buttonShare?: {
|
|
212
|
+
text?: string;
|
|
213
|
+
noRewardText?: string;
|
|
214
|
+
clickAction?: "embedded-wallet" | "share-modal" | "sharing-page";
|
|
215
|
+
useReward?: boolean;
|
|
216
|
+
css?: string;
|
|
217
|
+
};
|
|
218
|
+
buttonWallet?: {
|
|
219
|
+
position?: "right" | "left";
|
|
220
|
+
css?: string;
|
|
221
|
+
};
|
|
222
|
+
openInApp?: {
|
|
223
|
+
text?: string;
|
|
224
|
+
css?: string;
|
|
225
|
+
};
|
|
226
|
+
postPurchase?: {
|
|
227
|
+
badgeText?: string;
|
|
228
|
+
refereeText?: string;
|
|
229
|
+
refereeNoRewardText?: string;
|
|
230
|
+
referrerText?: string;
|
|
231
|
+
referrerNoRewardText?: string;
|
|
232
|
+
ctaText?: string;
|
|
233
|
+
ctaNoRewardText?: string;
|
|
234
|
+
css?: string;
|
|
235
|
+
};
|
|
236
|
+
banner?: {
|
|
237
|
+
referralTitle?: string;
|
|
238
|
+
referralDescription?: string;
|
|
239
|
+
referralCta?: string;
|
|
240
|
+
inappTitle?: string;
|
|
241
|
+
inappDescription?: string;
|
|
242
|
+
inappCta?: string;
|
|
243
|
+
css?: string;
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
targetInteraction?: string; /** Already flattened: default + lang-specific merged into one record */
|
|
247
|
+
translations?: Record<string, string>; /** Global placement CSS (applied to modals/listener) */
|
|
248
|
+
css?: string;
|
|
249
|
+
};
|
|
250
|
+
/**
|
|
251
|
+
* Resolved SDK config from backend `/resolve` endpoint
|
|
252
|
+
* Language resolution and translation merging already applied
|
|
253
|
+
* @category Config
|
|
254
|
+
*/
|
|
255
|
+
type ResolvedSdkConfig = {
|
|
256
|
+
name?: string;
|
|
257
|
+
logoUrl?: string;
|
|
258
|
+
homepageLink?: string;
|
|
259
|
+
currency?: Currency;
|
|
260
|
+
lang?: Language; /** When true, all SDK components should be hidden */
|
|
261
|
+
hidden?: boolean;
|
|
262
|
+
css?: string;
|
|
263
|
+
translations?: Record<string, string>;
|
|
264
|
+
placements?: Record<string, ResolvedPlacement>; /** Global component defaults (used when no placement override exists) */
|
|
265
|
+
components?: ResolvedPlacement["components"];
|
|
266
|
+
/**
|
|
267
|
+
* Default attribution params applied when building outbound sharing URLs.
|
|
268
|
+
* Per-call overrides win over these backend defaults; `utm_content` is
|
|
269
|
+
* intentionally excluded (per-content/per-product, never a merchant default).
|
|
270
|
+
*/
|
|
271
|
+
attribution?: AttributionDefaults;
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Internal SDK config store state
|
|
275
|
+
* Merged config: backend > SDK static > defaults
|
|
276
|
+
* Components subscribe to this reactively
|
|
277
|
+
* @category Config
|
|
278
|
+
*/
|
|
279
|
+
type SdkResolvedConfig = {
|
|
280
|
+
/** Whether the backend config has been resolved */isResolved: boolean; /** Merchant ID from resolution */
|
|
281
|
+
merchantId: string; /** Domain returned by the resolve endpoint */
|
|
282
|
+
domain?: string; /** Domains allowed for this merchant (used by iframe trust check) */
|
|
283
|
+
allowedDomains?: string[]; /** Whether the resolve returned a backend sdkConfig object */
|
|
284
|
+
hasRawSdkConfig?: boolean; /** Merged metadata fields */
|
|
285
|
+
name?: string;
|
|
286
|
+
logoUrl?: string;
|
|
287
|
+
homepageLink?: string;
|
|
288
|
+
lang?: Language;
|
|
289
|
+
currency?: Currency; /** When true, all SDK components should be hidden */
|
|
290
|
+
hidden?: boolean; /** Global CSS from backend config (passed to iframe) */
|
|
291
|
+
css?: string; /** Global translations (for reference / component fallback) */
|
|
292
|
+
translations?: Record<string, string>; /** Named placements (keyed by placement ID) */
|
|
293
|
+
placements?: Record<string, ResolvedPlacement>; /** Global component defaults (fallback for placement-level overrides) */
|
|
294
|
+
components?: ResolvedPlacement["components"]; /** Merged attribution defaults: backend > SDK static config */
|
|
295
|
+
attribution?: AttributionDefaults;
|
|
296
|
+
};
|
|
297
|
+
//#endregion
|
|
121
298
|
//#region src/types/lifecycle/client.d.ts
|
|
122
299
|
/**
|
|
123
300
|
* Event related to the iframe lifecycle
|
|
124
301
|
* @ignore
|
|
125
302
|
*/
|
|
126
|
-
type ClientLifecycleEvent = CustomCssEvent | CustomI18nEvent | RestoreBackupEvent | HearbeatEvent |
|
|
303
|
+
type ClientLifecycleEvent = CustomCssEvent | CustomI18nEvent | RestoreBackupEvent | HearbeatEvent | SsoRedirectCompleteEvent | DeepLinkFailedEvent | ResolvedConfigEvent;
|
|
127
304
|
type CustomCssEvent = {
|
|
128
305
|
clientLifecycle: "modal-css";
|
|
129
306
|
data: {
|
|
@@ -146,30 +323,6 @@ type HearbeatEvent = {
|
|
|
146
323
|
clientLifecycle: "heartbeat";
|
|
147
324
|
data?: never;
|
|
148
325
|
};
|
|
149
|
-
type HandshakeResponse = {
|
|
150
|
-
clientLifecycle: "handshake-response";
|
|
151
|
-
data: {
|
|
152
|
-
token: string;
|
|
153
|
-
currentUrl: string;
|
|
154
|
-
/**
|
|
155
|
-
* Pending merge token extracted from URL (?fmt= parameter)
|
|
156
|
-
* When present, listener should execute identity merge in background
|
|
157
|
-
* URL is cleaned after handshake response is sent
|
|
158
|
-
*/
|
|
159
|
-
pendingMergeToken?: string;
|
|
160
|
-
/**
|
|
161
|
-
* Client ID for identity tracking (belt & suspenders fallback)
|
|
162
|
-
* Primary delivery is via iframe URL query param; handshake is backup for SSR
|
|
163
|
-
*/
|
|
164
|
-
clientId?: string;
|
|
165
|
-
/**
|
|
166
|
-
* Explicit domain from SDK config (FrakWalletSdkConfig.domain)
|
|
167
|
-
* When present, listener should prefer this over URL-derived domain
|
|
168
|
-
* for merchant resolution (handles proxied/tunneled environments)
|
|
169
|
-
*/
|
|
170
|
-
configDomain?: string;
|
|
171
|
-
};
|
|
172
|
-
};
|
|
173
326
|
type SsoRedirectCompleteEvent = {
|
|
174
327
|
clientLifecycle: "sso-redirect-complete";
|
|
175
328
|
data: {
|
|
@@ -182,6 +335,21 @@ type DeepLinkFailedEvent = {
|
|
|
182
335
|
originalUrl: string;
|
|
183
336
|
};
|
|
184
337
|
};
|
|
338
|
+
type ResolvedConfigEvent = {
|
|
339
|
+
clientLifecycle: "resolved-config";
|
|
340
|
+
data: {
|
|
341
|
+
merchantId: string; /** The domain the backend resolved this config for */
|
|
342
|
+
domain: string; /** All domains registered for this merchant (for domain proof) */
|
|
343
|
+
allowedDomains: string[]; /** Full URL of the parent page (for interaction tracking) */
|
|
344
|
+
sourceUrl: string;
|
|
345
|
+
/**
|
|
346
|
+
* Pending merge token extracted from URL (?fmt= parameter).
|
|
347
|
+
* When present, listener should execute identity merge in background.
|
|
348
|
+
*/
|
|
349
|
+
pendingMergeToken?: string;
|
|
350
|
+
sdkConfig?: ResolvedSdkConfig;
|
|
351
|
+
};
|
|
352
|
+
};
|
|
185
353
|
//#endregion
|
|
186
354
|
//#region src/types/lifecycle/iframe.d.ts
|
|
187
355
|
/**
|
|
@@ -191,19 +359,13 @@ type DeepLinkFailedEvent = {
|
|
|
191
359
|
type IFrameLifecycleEvent = {
|
|
192
360
|
iframeLifecycle: "connected" | "show" | "hide" | "remove-backup";
|
|
193
361
|
data?: never;
|
|
194
|
-
} | DoBackupEvent |
|
|
362
|
+
} | DoBackupEvent | RedirectRequestEvent;
|
|
195
363
|
type DoBackupEvent = {
|
|
196
364
|
iframeLifecycle: "do-backup";
|
|
197
365
|
data: {
|
|
198
366
|
backup?: string;
|
|
199
367
|
};
|
|
200
368
|
};
|
|
201
|
-
type HandshakeRequestEvent = {
|
|
202
|
-
iframeLifecycle: "handshake";
|
|
203
|
-
data: {
|
|
204
|
-
token: string;
|
|
205
|
-
};
|
|
206
|
-
};
|
|
207
369
|
type RedirectRequestEvent = {
|
|
208
370
|
iframeLifecycle: "redirect";
|
|
209
371
|
data: {
|
|
@@ -218,6 +380,13 @@ type RedirectRequestEvent = {
|
|
|
218
380
|
* Used when redirecting out of social browsers to preserve identity across contexts
|
|
219
381
|
*/
|
|
220
382
|
mergeToken?: string;
|
|
383
|
+
/**
|
|
384
|
+
* When true, open the URL in a new tab via window.open(_blank)
|
|
385
|
+
* instead of navigating the current page.
|
|
386
|
+
* Requires the postMessage to include user activation delegation
|
|
387
|
+
* (includeUserActivation: true) so Safari allows the popup.
|
|
388
|
+
*/
|
|
389
|
+
openInNewTab?: boolean;
|
|
221
390
|
};
|
|
222
391
|
};
|
|
223
392
|
//#endregion
|
|
@@ -534,6 +703,102 @@ type DisplayModalParamsType<T extends ModalStepTypes[]> = {
|
|
|
534
703
|
metadata?: ModalRpcMetadata;
|
|
535
704
|
};
|
|
536
705
|
//#endregion
|
|
706
|
+
//#region src/types/rpc/displaySharingPage.d.ts
|
|
707
|
+
/**
|
|
708
|
+
* Product information to display on the sharing page
|
|
709
|
+
* @group Sharing Page
|
|
710
|
+
*/
|
|
711
|
+
type SharingPageProduct = {
|
|
712
|
+
/**
|
|
713
|
+
* The product title / name
|
|
714
|
+
*/
|
|
715
|
+
title: string;
|
|
716
|
+
/**
|
|
717
|
+
* Optional product image URL
|
|
718
|
+
*/
|
|
719
|
+
imageUrl?: string;
|
|
720
|
+
/**
|
|
721
|
+
* Optional product-specific sharing link
|
|
722
|
+
* When provided and the product is selected, this link is used instead of the default sharing link
|
|
723
|
+
*/
|
|
724
|
+
link?: string;
|
|
725
|
+
/**
|
|
726
|
+
* Optional `utm_content` value to apply when this product is selected.
|
|
727
|
+
* Falls back to the page-level `attribution.utmContent` when omitted.
|
|
728
|
+
*/
|
|
729
|
+
utmContent?: string;
|
|
730
|
+
};
|
|
731
|
+
/**
|
|
732
|
+
* Parameters to display the sharing page
|
|
733
|
+
* @group Sharing Page
|
|
734
|
+
* @group RPC Schema
|
|
735
|
+
*/
|
|
736
|
+
type DisplaySharingPageParamsType = {
|
|
737
|
+
/**
|
|
738
|
+
* Products to showcase on the sharing page
|
|
739
|
+
* If provided, they will be displayed in a product card section
|
|
740
|
+
*/
|
|
741
|
+
products?: SharingPageProduct[];
|
|
742
|
+
/**
|
|
743
|
+
* Optional link override for sharing
|
|
744
|
+
* If not provided, the sharing link will be generated from the current page URL + merchant context
|
|
745
|
+
*/
|
|
746
|
+
link?: string;
|
|
747
|
+
/**
|
|
748
|
+
* Optional attribution overrides for the outbound sharing URL.
|
|
749
|
+
*
|
|
750
|
+
* When provided (even as an empty object), Frak adds standard affiliation
|
|
751
|
+
* params (`utm_source=frak`, `utm_medium=referral`, `utm_campaign=<merchantId>`,
|
|
752
|
+
* `ref=<clientId>`, `via=frak`) alongside `fCtx`. Existing UTMs on the base
|
|
753
|
+
* URL are preserved (gap-fill). Set this to `null` to disable attribution
|
|
754
|
+
* params entirely (only `fCtx` is added).
|
|
755
|
+
*
|
|
756
|
+
* @default {} — defaults applied
|
|
757
|
+
*/
|
|
758
|
+
attribution?: AttributionParams | null;
|
|
759
|
+
/**
|
|
760
|
+
* Optional metadata overrides for the sharing page
|
|
761
|
+
*/
|
|
762
|
+
metadata?: {
|
|
763
|
+
/**
|
|
764
|
+
* Logo override for the sharing page header
|
|
765
|
+
*/
|
|
766
|
+
logo?: string;
|
|
767
|
+
/**
|
|
768
|
+
* Link to the homepage of the calling website
|
|
769
|
+
*/
|
|
770
|
+
homepageLink?: string;
|
|
771
|
+
/**
|
|
772
|
+
* The target interaction behind this sharing page
|
|
773
|
+
*/
|
|
774
|
+
targetInteraction?: InteractionTypeKey;
|
|
775
|
+
/**
|
|
776
|
+
* i18n overrides for the sharing page
|
|
777
|
+
*/
|
|
778
|
+
i18n?: I18nConfig;
|
|
779
|
+
};
|
|
780
|
+
};
|
|
781
|
+
/**
|
|
782
|
+
* Result of the sharing page display
|
|
783
|
+
* @group Sharing Page
|
|
784
|
+
* @group RPC Schema
|
|
785
|
+
*/
|
|
786
|
+
type DisplaySharingPageResultType = {
|
|
787
|
+
/**
|
|
788
|
+
* The action the user took
|
|
789
|
+
* - "shared": User used the native share dialog
|
|
790
|
+
* - "copied": User copied the link to clipboard
|
|
791
|
+
* - "dismissed": User dismissed the sharing page without acting
|
|
792
|
+
*/
|
|
793
|
+
action: "shared" | "copied" | "dismissed";
|
|
794
|
+
/**
|
|
795
|
+
* The install URL for the Frak app
|
|
796
|
+
* Can be used as a fallback to redirect the user to the install page
|
|
797
|
+
* from the merchant's top-level page (e.g. via `window.location.href`)
|
|
798
|
+
*/
|
|
799
|
+
installUrl?: string;
|
|
800
|
+
};
|
|
801
|
+
//#endregion
|
|
537
802
|
//#region src/types/rpc/embedded/loggedIn.d.ts
|
|
538
803
|
/**
|
|
539
804
|
* The different type of action we can have on the embedded view (once the user is logged in)
|
|
@@ -691,7 +956,9 @@ type SendInteractionParamsType = {
|
|
|
691
956
|
utmTerm?: string;
|
|
692
957
|
utmContent?: string;
|
|
693
958
|
} | {
|
|
694
|
-
type: "sharing";
|
|
959
|
+
type: "sharing"; /** Epoch seconds timestamp matching the V2 context `t` field embedded in the referral link URL, used for backend correlation */
|
|
960
|
+
sharingTimestamp?: number; /** Merchant order ID linking this sharing event to a purchase (stays server-side, never in URL) */
|
|
961
|
+
purchaseId?: string;
|
|
695
962
|
} | {
|
|
696
963
|
type: "custom";
|
|
697
964
|
customType: string;
|
|
@@ -769,6 +1036,28 @@ type GetMerchantInformationReturnType = {
|
|
|
769
1036
|
}[];
|
|
770
1037
|
};
|
|
771
1038
|
//#endregion
|
|
1039
|
+
//#region src/types/rpc/userReferralStatus.d.ts
|
|
1040
|
+
/**
|
|
1041
|
+
* User referral status returned by `frak_getUserReferralStatus`.
|
|
1042
|
+
*
|
|
1043
|
+
* Generic referral context for the current user on a merchant.
|
|
1044
|
+
* Used by components like `<frak-post-purchase>` and `<frak-referred-banner>`
|
|
1045
|
+
* to adapt their display based on the user's referral relationship.
|
|
1046
|
+
*
|
|
1047
|
+
* Returns `null` when the user's identity cannot be resolved
|
|
1048
|
+
* (e.g. no clientId and no wallet session).
|
|
1049
|
+
*
|
|
1050
|
+
* @group RPC Schema
|
|
1051
|
+
*/
|
|
1052
|
+
type UserReferralStatusType = {
|
|
1053
|
+
/**
|
|
1054
|
+
* Whether the user was referred to this merchant by someone else.
|
|
1055
|
+
*
|
|
1056
|
+
* `true` means a referral link exists where this user is the referee.
|
|
1057
|
+
*/
|
|
1058
|
+
isReferred: boolean;
|
|
1059
|
+
};
|
|
1060
|
+
//#endregion
|
|
772
1061
|
//#region src/types/rpc/walletStatus.d.ts
|
|
773
1062
|
/**
|
|
774
1063
|
* RPC Response for the method `frak_listenToWalletStatus`
|
|
@@ -815,7 +1104,7 @@ type WalletNotConnected = {
|
|
|
815
1104
|
* - Response Type: stream (emits updates when wallet status changes)
|
|
816
1105
|
*
|
|
817
1106
|
* #### frak_displayModal
|
|
818
|
-
* - Params: [requests: {@link ModalRpcStepsInput}, metadata?: {@link ModalRpcMetadata}, configMetadata: {@link FrakWalletSdkConfig}["metadata"]]
|
|
1107
|
+
* - Params: [requests: {@link ModalRpcStepsInput}, metadata?: {@link ModalRpcMetadata}, configMetadata: {@link FrakWalletSdkConfig}["metadata"], placement?: string]
|
|
819
1108
|
* - Returns: {@link ModalRpcStepsResultType}
|
|
820
1109
|
* - Response Type: promise (one-shot)
|
|
821
1110
|
*
|
|
@@ -830,9 +1119,14 @@ type WalletNotConnected = {
|
|
|
830
1119
|
* - Response Type: promise (one-shot)
|
|
831
1120
|
*
|
|
832
1121
|
* #### frak_displayEmbeddedWallet
|
|
833
|
-
* - Params: [request: {@link DisplayEmbeddedWalletParamsType}, metadata: {@link FrakWalletSdkConfig}["metadata"]]
|
|
1122
|
+
* - Params: [request: {@link DisplayEmbeddedWalletParamsType}, metadata: {@link FrakWalletSdkConfig}["metadata"], placement?: string]
|
|
834
1123
|
* - Returns: {@link DisplayEmbeddedWalletResultType}
|
|
835
1124
|
* - Response Type: promise (one-shot)
|
|
1125
|
+
*
|
|
1126
|
+
* #### frak_displaySharingPage
|
|
1127
|
+
* - Params: [request: {@link DisplaySharingPageParamsType}, configMetadata: {@link FrakWalletSdkConfig}["metadata"], placement?: string]
|
|
1128
|
+
* - Returns: {@link DisplaySharingPageResultType}
|
|
1129
|
+
* - Response Type: promise (one-shot)
|
|
836
1130
|
*/
|
|
837
1131
|
type IFrameRpcSchema = [
|
|
838
1132
|
/**
|
|
@@ -850,7 +1144,7 @@ type IFrameRpcSchema = [
|
|
|
850
1144
|
*/
|
|
851
1145
|
{
|
|
852
1146
|
Method: "frak_displayModal";
|
|
853
|
-
Parameters: [requests: ModalRpcStepsInput, metadata: ModalRpcMetadata | undefined, configMetadata: FrakWalletSdkConfig["metadata"]];
|
|
1147
|
+
Parameters: [requests: ModalRpcStepsInput, metadata: ModalRpcMetadata | undefined, configMetadata: FrakWalletSdkConfig["metadata"], placement?: string];
|
|
854
1148
|
ReturnType: ModalRpcStepsResultType;
|
|
855
1149
|
},
|
|
856
1150
|
/**
|
|
@@ -860,7 +1154,7 @@ type IFrameRpcSchema = [
|
|
|
860
1154
|
*/
|
|
861
1155
|
{
|
|
862
1156
|
Method: "frak_prepareSso";
|
|
863
|
-
Parameters: [params: PrepareSsoParamsType, name
|
|
1157
|
+
Parameters: [params: PrepareSsoParamsType, name?: string, customCss?: string];
|
|
864
1158
|
ReturnType: PrepareSsoReturnType;
|
|
865
1159
|
},
|
|
866
1160
|
/**
|
|
@@ -871,7 +1165,7 @@ type IFrameRpcSchema = [
|
|
|
871
1165
|
*/
|
|
872
1166
|
{
|
|
873
1167
|
Method: "frak_openSso";
|
|
874
|
-
Parameters: [params: OpenSsoParamsType, name
|
|
1168
|
+
Parameters: [params: OpenSsoParamsType, name?: string, customCss?: string];
|
|
875
1169
|
ReturnType: OpenSsoReturnType;
|
|
876
1170
|
},
|
|
877
1171
|
/**
|
|
@@ -892,14 +1186,14 @@ type IFrameRpcSchema = [
|
|
|
892
1186
|
*/
|
|
893
1187
|
{
|
|
894
1188
|
Method: "frak_displayEmbeddedWallet";
|
|
895
|
-
Parameters: [request: DisplayEmbeddedWalletParamsType, metadata: FrakWalletSdkConfig["metadata"]];
|
|
1189
|
+
Parameters: [request: DisplayEmbeddedWalletParamsType, metadata: FrakWalletSdkConfig["metadata"], placement?: string];
|
|
896
1190
|
ReturnType: DisplayEmbeddedWalletResultType;
|
|
897
1191
|
},
|
|
898
1192
|
/**
|
|
899
1193
|
* Method to send interactions (arrival, sharing, custom events)
|
|
900
1194
|
* Fire-and-forget method - no return value expected
|
|
901
1195
|
* merchantId is resolved from context
|
|
902
|
-
* clientId is passed via metadata as safeguard against
|
|
1196
|
+
* clientId is passed via metadata as safeguard against race conditions
|
|
903
1197
|
*/
|
|
904
1198
|
{
|
|
905
1199
|
Method: "frak_sendInteraction";
|
|
@@ -907,6 +1201,39 @@ type IFrameRpcSchema = [
|
|
|
907
1201
|
clientId?: string;
|
|
908
1202
|
}];
|
|
909
1203
|
ReturnType: undefined;
|
|
1204
|
+
},
|
|
1205
|
+
/**
|
|
1206
|
+
* Method to get the current user's referral status on this merchant.
|
|
1207
|
+
* Returns whether the user was referred (has a referral link as referee).
|
|
1208
|
+
* Returns null when the user's identity cannot be resolved.
|
|
1209
|
+
* This is a one-shot request.
|
|
1210
|
+
*/
|
|
1211
|
+
{
|
|
1212
|
+
Method: "frak_getUserReferralStatus";
|
|
1213
|
+
Parameters?: undefined;
|
|
1214
|
+
ReturnType: UserReferralStatusType | null;
|
|
1215
|
+
},
|
|
1216
|
+
/**
|
|
1217
|
+
* Method to display a sharing page with product info and sharing buttons
|
|
1218
|
+
* Resolves on first user action (share/copy) but the page stays visible
|
|
1219
|
+
* This is a one-shot request
|
|
1220
|
+
*/
|
|
1221
|
+
{
|
|
1222
|
+
Method: "frak_displaySharingPage";
|
|
1223
|
+
Parameters: [request: DisplaySharingPageParamsType, configMetadata: FrakWalletSdkConfig["metadata"], placement?: string];
|
|
1224
|
+
ReturnType: DisplaySharingPageResultType;
|
|
1225
|
+
},
|
|
1226
|
+
/**
|
|
1227
|
+
* Method to get a merge token for the current anonymous identity.
|
|
1228
|
+
* Used by in-app browser redirect flows to preserve identity
|
|
1229
|
+
* when switching from a WebView to the system browser.
|
|
1230
|
+
* Returns the merge token string, or null if unavailable.
|
|
1231
|
+
* This is a one-shot request.
|
|
1232
|
+
*/
|
|
1233
|
+
{
|
|
1234
|
+
Method: "frak_getMergeToken";
|
|
1235
|
+
Parameters?: undefined;
|
|
1236
|
+
ReturnType: string | null;
|
|
910
1237
|
}];
|
|
911
1238
|
//#endregion
|
|
912
1239
|
//#region src/types/transport.d.ts
|
|
@@ -1052,4 +1379,4 @@ declare const ssoPopupName = "frak-sso";
|
|
|
1052
1379
|
*/
|
|
1053
1380
|
declare function openSso(client: FrakClient, args: OpenSsoParamsType): Promise<OpenSsoReturnType>;
|
|
1054
1381
|
//#endregion
|
|
1055
|
-
export {
|
|
1382
|
+
export { ResolvedPlacement as $, ModalRpcMetadata as A, LoginModalStepType as B, EmbeddedViewActionReferred as C, DisplaySharingPageResultType as D, DisplaySharingPageParamsType as E, SendTransactionReturnType as F, SsoMetadata as G, OpenSsoReturnType as H, SendTransactionTxType as I, ModalStepMetadata as J, FinalActionType as K, SiweAuthenticateModalStepType as L, ModalRpcStepsResultType as M, ModalStepTypes as N, SharingPageProduct as O, SendTransactionModalStepType as P, MerchantConfigResponse as Q, SiweAuthenticateReturnType as R, LoggedOutEmbeddedView as S, LoggedInEmbeddedView as T, PrepareSsoParamsType as U, OpenSsoParamsType as V, PrepareSsoReturnType as W, IFrameLifecycleEvent as X, InteractionTypeKey as Y, ClientLifecycleEvent as Z, RewardTier as _, FrakContextV1 as a, Language as at, DisplayEmbeddedWalletParamsType as b, isV2Context as c, AttributionParams as ct, IFrameTransport as d, UtmParams as dt, ResolvedSdkConfig as et, IFrameRpcSchema as f, GetMerchantInformationReturnType as g, EstimatedReward as h, FrakContext as i, I18nConfig as it, ModalRpcStepsInput as j, DisplayModalParamsType as k, FrakClient as l, TrackArrivalParams as lt, UserReferralStatusType as m, ssoPopupFeatures as n, Currency as nt, FrakContextV2 as o, LocalizedI18nConfig as ot, WalletStatusReturnType as p, FinalModalStepType as q, ssoPopupName as r, FrakWalletSdkConfig as rt, isV1Context as s, AttributionDefaults as st, openSso as t, SdkResolvedConfig as tt, FrakLifecycleEvent as u, TrackArrivalResult as ut, TokenAmountType as v, EmbeddedViewActionSharing as w, DisplayEmbeddedWalletResultType as x, SendInteractionParamsType as y, SiweAuthenticationParams as z };
|