@frak-labs/core-sdk 0.1.0-beta.afa252b0 → 0.1.0-beta.b0bd1f8a
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/cdn/bundle.iife.js +14 -0
- package/dist/actions-CEEObPYc.js +1 -0
- package/dist/actions-DbQhWYx8.cjs +1 -0
- package/dist/actions.cjs +1 -1
- package/dist/actions.d.cts +3 -1481
- package/dist/actions.d.ts +3 -1481
- package/dist/actions.js +1 -1
- package/dist/bundle.cjs +1 -13
- package/dist/bundle.d.cts +6 -2087
- package/dist/bundle.d.ts +6 -2087
- package/dist/bundle.js +1 -13
- package/dist/index-7OZ39x1U.d.ts +195 -0
- package/dist/index-C6FxkWPC.d.cts +511 -0
- package/dist/index-UFX7xCg3.d.ts +351 -0
- package/dist/index-d8xS4ryI.d.ts +511 -0
- package/dist/index-p4FqSp8z.d.cts +351 -0
- package/dist/index-zDq-VlKx.d.cts +195 -0
- package/dist/index.cjs +1 -13
- package/dist/index.d.cts +4 -1387
- package/dist/index.d.ts +4 -1387
- package/dist/index.js +1 -13
- package/dist/interaction-DMJ3ZfaF.d.cts +45 -0
- package/dist/interaction-KX1h9a7V.d.ts +45 -0
- package/dist/interactions-DnfM3oe0.js +1 -0
- package/dist/interactions-EIXhNLf6.cjs +1 -0
- package/dist/interactions.cjs +1 -1
- package/dist/interactions.d.cts +2 -182
- package/dist/interactions.d.ts +2 -182
- package/dist/interactions.js +1 -1
- package/dist/openSso-D--Airj6.d.cts +1018 -0
- package/dist/openSso-DsKJ4y0j.d.ts +1018 -0
- package/dist/productTypes-BUkXJKZ7.cjs +1 -0
- package/dist/productTypes-CGb1MmBF.js +1 -0
- package/dist/src-B_xO0AR6.cjs +13 -0
- package/dist/src-D2d52OZa.js +13 -0
- package/dist/trackEvent-CHnYa85W.js +1 -0
- package/dist/trackEvent-GuQm_1Nm.cjs +1 -0
- package/package.json +23 -18
- package/src/actions/displayEmbeddedWallet.test.ts +194 -0
- package/src/actions/displayEmbeddedWallet.ts +20 -0
- package/src/actions/displayModal.test.ts +387 -0
- package/src/actions/displayModal.ts +131 -0
- package/src/actions/getProductInformation.test.ts +133 -0
- package/src/actions/getProductInformation.ts +14 -0
- package/src/actions/index.ts +29 -0
- package/src/actions/openSso.test.ts +407 -0
- package/src/actions/openSso.ts +116 -0
- package/src/actions/prepareSso.test.ts +223 -0
- package/src/actions/prepareSso.ts +48 -0
- package/src/actions/referral/processReferral.ts +230 -0
- package/src/actions/referral/referralInteraction.ts +57 -0
- package/src/actions/sendInteraction.test.ts +219 -0
- package/src/actions/sendInteraction.ts +32 -0
- package/src/actions/trackPurchaseStatus.test.ts +287 -0
- package/src/actions/trackPurchaseStatus.ts +53 -0
- package/src/actions/watchWalletStatus.test.ts +372 -0
- package/src/actions/watchWalletStatus.ts +94 -0
- package/src/actions/wrapper/modalBuilder.ts +212 -0
- package/src/actions/wrapper/sendTransaction.ts +62 -0
- package/src/actions/wrapper/siweAuthenticate.ts +94 -0
- package/src/bundle.ts +3 -0
- package/src/clients/DebugInfo.ts +182 -0
- package/src/clients/createIFrameFrakClient.ts +287 -0
- package/src/clients/index.ts +3 -0
- package/src/clients/setupClient.test.ts +343 -0
- package/src/clients/setupClient.ts +73 -0
- package/src/clients/transports/iframeLifecycleManager.test.ts +399 -0
- package/src/clients/transports/iframeLifecycleManager.ts +90 -0
- package/src/constants/interactionTypes.ts +44 -0
- package/src/constants/locales.ts +14 -0
- package/src/constants/productTypes.ts +33 -0
- package/src/index.ts +101 -0
- package/src/interactions/index.ts +5 -0
- package/src/interactions/pressEncoder.test.ts +215 -0
- package/src/interactions/pressEncoder.ts +53 -0
- package/src/interactions/purchaseEncoder.test.ts +291 -0
- package/src/interactions/purchaseEncoder.ts +99 -0
- package/src/interactions/referralEncoder.test.ts +170 -0
- package/src/interactions/referralEncoder.ts +47 -0
- package/src/interactions/retailEncoder.test.ts +107 -0
- package/src/interactions/retailEncoder.ts +37 -0
- package/src/interactions/webshopEncoder.test.ts +56 -0
- package/src/interactions/webshopEncoder.ts +30 -0
- package/src/types/client.ts +14 -0
- package/src/types/compression.ts +22 -0
- package/src/types/config.ts +111 -0
- package/src/types/context.ts +13 -0
- package/src/types/index.ts +71 -0
- package/src/types/lifecycle/client.ts +46 -0
- package/src/types/lifecycle/iframe.ts +35 -0
- package/src/types/lifecycle/index.ts +2 -0
- package/src/types/rpc/displayModal.ts +84 -0
- package/src/types/rpc/embedded/index.ts +68 -0
- package/src/types/rpc/embedded/loggedIn.ts +55 -0
- package/src/types/rpc/embedded/loggedOut.ts +28 -0
- package/src/types/rpc/interaction.ts +43 -0
- package/src/types/rpc/modal/final.ts +46 -0
- package/src/types/rpc/modal/generic.ts +46 -0
- package/src/types/rpc/modal/index.ts +20 -0
- package/src/types/rpc/modal/login.ts +32 -0
- package/src/types/rpc/modal/openSession.ts +25 -0
- package/src/types/rpc/modal/siweAuthenticate.ts +37 -0
- package/src/types/rpc/modal/transaction.ts +33 -0
- package/src/types/rpc/productInformation.ts +59 -0
- package/src/types/rpc/sso.ts +80 -0
- package/src/types/rpc/walletStatus.ts +35 -0
- package/src/types/rpc.ts +158 -0
- package/src/types/transport.ts +34 -0
- package/src/utils/FrakContext.test.ts +407 -0
- package/src/utils/FrakContext.ts +158 -0
- package/src/utils/compression/b64.test.ts +181 -0
- package/src/utils/compression/b64.ts +29 -0
- package/src/utils/compression/compress.test.ts +123 -0
- package/src/utils/compression/compress.ts +11 -0
- package/src/utils/compression/decompress.test.ts +145 -0
- package/src/utils/compression/decompress.ts +11 -0
- package/src/utils/compression/index.ts +3 -0
- package/src/utils/computeProductId.test.ts +80 -0
- package/src/utils/computeProductId.ts +11 -0
- package/src/utils/constants.test.ts +23 -0
- package/src/utils/constants.ts +4 -0
- package/src/utils/formatAmount.test.ts +113 -0
- package/src/utils/formatAmount.ts +18 -0
- package/src/utils/getCurrencyAmountKey.test.ts +44 -0
- package/src/utils/getCurrencyAmountKey.ts +15 -0
- package/src/utils/getSupportedCurrency.test.ts +51 -0
- package/src/utils/getSupportedCurrency.ts +14 -0
- package/src/utils/getSupportedLocale.test.ts +64 -0
- package/src/utils/getSupportedLocale.ts +16 -0
- package/src/utils/iframeHelper.test.ts +450 -0
- package/src/utils/iframeHelper.ts +143 -0
- package/src/utils/index.ts +21 -0
- package/src/utils/sso.test.ts +361 -0
- package/src/utils/sso.ts +119 -0
- package/src/utils/ssoUrlListener.ts +60 -0
- package/src/utils/trackEvent.test.ts +162 -0
- package/src/utils/trackEvent.ts +26 -0
- package/cdn/bundle.js +0 -19
- package/cdn/bundle.js.LICENSE.txt +0 -10
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { I18nConfig } from "../config";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Event related to the iframe lifecycle
|
|
5
|
+
* @ignore
|
|
6
|
+
*/
|
|
7
|
+
export type ClientLifecycleEvent =
|
|
8
|
+
| CustomCssEvent
|
|
9
|
+
| CustomI18nEvent
|
|
10
|
+
| RestoreBackupEvent
|
|
11
|
+
| HearbeatEvent
|
|
12
|
+
| HandshakeResponse
|
|
13
|
+
| SsoRedirectCompleteEvent;
|
|
14
|
+
|
|
15
|
+
type CustomCssEvent = {
|
|
16
|
+
clientLifecycle: "modal-css";
|
|
17
|
+
data: { cssLink: string };
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type CustomI18nEvent = {
|
|
21
|
+
clientLifecycle: "modal-i18n";
|
|
22
|
+
data: { i18n: I18nConfig };
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
type RestoreBackupEvent = {
|
|
26
|
+
clientLifecycle: "restore-backup";
|
|
27
|
+
data: { backup: string };
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type HearbeatEvent = {
|
|
31
|
+
clientLifecycle: "heartbeat";
|
|
32
|
+
data?: never;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type HandshakeResponse = {
|
|
36
|
+
clientLifecycle: "handshake-response";
|
|
37
|
+
data: {
|
|
38
|
+
token: string;
|
|
39
|
+
currentUrl: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
type SsoRedirectCompleteEvent = {
|
|
44
|
+
clientLifecycle: "sso-redirect-complete";
|
|
45
|
+
data: { compressed: string };
|
|
46
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event related to the iframe lifecycle
|
|
3
|
+
* @ignore
|
|
4
|
+
*/
|
|
5
|
+
export type IFrameLifecycleEvent =
|
|
6
|
+
| {
|
|
7
|
+
iframeLifecycle: "connected" | "show" | "hide" | "remove-backup";
|
|
8
|
+
data?: never;
|
|
9
|
+
}
|
|
10
|
+
| DoBackupEvent
|
|
11
|
+
| HandshakeRequestEvent
|
|
12
|
+
| RedirectRequestEvent;
|
|
13
|
+
|
|
14
|
+
type DoBackupEvent = {
|
|
15
|
+
iframeLifecycle: "do-backup";
|
|
16
|
+
data: { backup?: string };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type HandshakeRequestEvent = {
|
|
20
|
+
iframeLifecycle: "handshake";
|
|
21
|
+
data: {
|
|
22
|
+
token: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type RedirectRequestEvent = {
|
|
27
|
+
iframeLifecycle: "redirect";
|
|
28
|
+
data: {
|
|
29
|
+
/**
|
|
30
|
+
* The base url to redirect to
|
|
31
|
+
* If it contain a query param `u`, the client need will suffix the current url to the base url
|
|
32
|
+
*/
|
|
33
|
+
baseRedirectUrl: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { FullInteractionTypesKey } from "../../constants/interactionTypes";
|
|
2
|
+
import type { I18nConfig } from "../config";
|
|
3
|
+
import type {
|
|
4
|
+
FinalModalStepType,
|
|
5
|
+
LoginModalStepType,
|
|
6
|
+
OpenInteractionSessionModalStepType,
|
|
7
|
+
SendTransactionModalStepType,
|
|
8
|
+
SiweAuthenticateModalStepType,
|
|
9
|
+
} from "./modal";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generic type of steps we will display in the modal to the end user
|
|
13
|
+
* @group Modal Display
|
|
14
|
+
*/
|
|
15
|
+
export type ModalStepTypes =
|
|
16
|
+
| LoginModalStepType
|
|
17
|
+
| SiweAuthenticateModalStepType
|
|
18
|
+
| SendTransactionModalStepType
|
|
19
|
+
| OpenInteractionSessionModalStepType
|
|
20
|
+
| FinalModalStepType;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Type for the result of a modal request
|
|
24
|
+
* Just the `returns` type of each `ModalStepTypes`
|
|
25
|
+
* @typeParam T - The list of modal steps we expect to have in the modal
|
|
26
|
+
* @group Modal Display
|
|
27
|
+
* @group RPC Schema
|
|
28
|
+
*/
|
|
29
|
+
export type ModalRpcStepsResultType<
|
|
30
|
+
T extends ModalStepTypes[] = ModalStepTypes[],
|
|
31
|
+
> = {
|
|
32
|
+
[K in T[number]["key"]]: Extract<T[number], { key: K }>["returns"];
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Type for the RPC input of a modal
|
|
37
|
+
* Just the `params` type of each `ModalStepTypes`
|
|
38
|
+
* @typeParam T - The list of modal steps we expect to have in the modal
|
|
39
|
+
* @group Modal Display
|
|
40
|
+
* @group RPC Schema
|
|
41
|
+
*/
|
|
42
|
+
export type ModalRpcStepsInput<T extends ModalStepTypes[] = ModalStepTypes[]> =
|
|
43
|
+
{
|
|
44
|
+
[K in T[number]["key"]]?: Extract<T[number], { key: K }>["params"];
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* RPC metadata for the modal, used on top level modal configuration
|
|
49
|
+
* @group Modal Display
|
|
50
|
+
* @group RPC Schema
|
|
51
|
+
*/
|
|
52
|
+
export type ModalRpcMetadata = {
|
|
53
|
+
header?: {
|
|
54
|
+
title?: string;
|
|
55
|
+
icon?: string;
|
|
56
|
+
};
|
|
57
|
+
targetInteraction?: FullInteractionTypesKey;
|
|
58
|
+
/**
|
|
59
|
+
* Some i18n override for the displayed modal (i.e. update the displayed text only for this modal)
|
|
60
|
+
*/
|
|
61
|
+
i18n?: I18nConfig;
|
|
62
|
+
} & (
|
|
63
|
+
| {
|
|
64
|
+
isDismissible: true;
|
|
65
|
+
/**
|
|
66
|
+
* @deprecated Use `config.customizations.i18n` or `metadata.i18n` instead
|
|
67
|
+
*/
|
|
68
|
+
dismissActionTxt?: string;
|
|
69
|
+
}
|
|
70
|
+
| {
|
|
71
|
+
isDismissible?: false;
|
|
72
|
+
dismissActionTxt?: never;
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Params used to display a modal
|
|
78
|
+
* @typeParam T - The list of modal steps we expect to have in the modal
|
|
79
|
+
* @group Modal Display
|
|
80
|
+
*/
|
|
81
|
+
export type DisplayModalParamsType<T extends ModalStepTypes[]> = {
|
|
82
|
+
steps: ModalRpcStepsInput<T>;
|
|
83
|
+
metadata?: ModalRpcMetadata;
|
|
84
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import type { FullInteractionTypesKey } from "../../../constants/interactionTypes";
|
|
3
|
+
import type { I18nConfig } from "../../config";
|
|
4
|
+
import type {
|
|
5
|
+
EmbeddedViewActionReferred,
|
|
6
|
+
EmbeddedViewActionSharing,
|
|
7
|
+
LoggedInEmbeddedView,
|
|
8
|
+
} from "./loggedIn";
|
|
9
|
+
import type { LoggedOutEmbeddedView } from "./loggedOut";
|
|
10
|
+
|
|
11
|
+
export type {
|
|
12
|
+
EmbeddedViewActionSharing,
|
|
13
|
+
LoggedInEmbeddedView,
|
|
14
|
+
LoggedOutEmbeddedView,
|
|
15
|
+
EmbeddedViewActionReferred,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The params used to display the embedded wallet
|
|
20
|
+
*
|
|
21
|
+
* @group Embedded wallet
|
|
22
|
+
*/
|
|
23
|
+
export type DisplayEmbeddedWalletParamsType = {
|
|
24
|
+
/**
|
|
25
|
+
* The embedded view to display once the user is logged in
|
|
26
|
+
*/
|
|
27
|
+
loggedIn?: LoggedInEmbeddedView;
|
|
28
|
+
/**
|
|
29
|
+
* The embedded view to display once the user is logged out
|
|
30
|
+
*/
|
|
31
|
+
loggedOut?: LoggedOutEmbeddedView;
|
|
32
|
+
/**
|
|
33
|
+
* Some metadata to customize the embedded view
|
|
34
|
+
*/
|
|
35
|
+
metadata?: {
|
|
36
|
+
/**
|
|
37
|
+
* The logo to display on the embedded wallet
|
|
38
|
+
* If undefined, will default to no logo displayed
|
|
39
|
+
*/
|
|
40
|
+
logo?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Link to the homepage of the calling website
|
|
43
|
+
* If undefined, will default to the domain of the calling website
|
|
44
|
+
*/
|
|
45
|
+
homepageLink?: string;
|
|
46
|
+
/**
|
|
47
|
+
* The target interaction behind this modal
|
|
48
|
+
*/
|
|
49
|
+
targetInteraction?: FullInteractionTypesKey;
|
|
50
|
+
/**
|
|
51
|
+
* The position of the component
|
|
52
|
+
*/
|
|
53
|
+
position?: "left" | "right";
|
|
54
|
+
/**
|
|
55
|
+
* Some i18n override for the displayed modal (i.e. update the displayed text only for this modal)
|
|
56
|
+
*/
|
|
57
|
+
i18n?: I18nConfig;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The result of the display embedded wallet rpc request
|
|
63
|
+
*
|
|
64
|
+
* @group Embedded wallet
|
|
65
|
+
*/
|
|
66
|
+
export type DisplayEmbeddedWalletResultType = {
|
|
67
|
+
wallet: Address;
|
|
68
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The different type of action we can have on the embedded view (once the user is logged in)
|
|
3
|
+
*
|
|
4
|
+
* @group Embedded wallet
|
|
5
|
+
*/
|
|
6
|
+
export type EmbeddedViewActionSharing = {
|
|
7
|
+
key: "sharing";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Some sharing options
|
|
11
|
+
*/
|
|
12
|
+
options?: {
|
|
13
|
+
/**
|
|
14
|
+
* The title that will be displayed on the system popup once the system sharing window is open
|
|
15
|
+
* @deprecated Use the top level `config.metadata.i18n` instead
|
|
16
|
+
*/
|
|
17
|
+
popupTitle?: string;
|
|
18
|
+
/**
|
|
19
|
+
* The text that will be shared alongside the link.
|
|
20
|
+
* Can contain the variable `{LINK}` to specify where the link is placed, otherwise it will be added at the end
|
|
21
|
+
* @deprecated Use the top level `config.metadata.i18n` instead
|
|
22
|
+
*/
|
|
23
|
+
text?: string;
|
|
24
|
+
/**
|
|
25
|
+
* The link to be shared (will be suffixed with the Frak sharing context)
|
|
26
|
+
*/
|
|
27
|
+
link?: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The action to display on the logged out embedded view when the user is referred
|
|
33
|
+
*
|
|
34
|
+
* @group Embedded wallet
|
|
35
|
+
*/
|
|
36
|
+
export type EmbeddedViewActionReferred = {
|
|
37
|
+
key: "referred";
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* No options for a referred action
|
|
41
|
+
*/
|
|
42
|
+
options?: never;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Some configuration options for the embedded view
|
|
47
|
+
*
|
|
48
|
+
* @group Embedded wallet
|
|
49
|
+
*/
|
|
50
|
+
export type LoggedInEmbeddedView = {
|
|
51
|
+
/**
|
|
52
|
+
* The main action to display on the logged in embedded view
|
|
53
|
+
*/
|
|
54
|
+
action?: EmbeddedViewActionSharing | EmbeddedViewActionReferred;
|
|
55
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The view when a user is logged out
|
|
3
|
+
* @group Embedded wallet
|
|
4
|
+
*/
|
|
5
|
+
export type LoggedOutEmbeddedView = {
|
|
6
|
+
/**
|
|
7
|
+
* Metadata option when displaying the embedded view
|
|
8
|
+
*/
|
|
9
|
+
metadata?: {
|
|
10
|
+
/**
|
|
11
|
+
* The main CTA for the logged out view
|
|
12
|
+
* - can include some variable, available ones are:
|
|
13
|
+
* - `{REWARD}` -> The maximum reward a user can receive when interacting on your website
|
|
14
|
+
* - can be formatted in markdown
|
|
15
|
+
*
|
|
16
|
+
* If not set, it will default to a internationalized message
|
|
17
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
18
|
+
*/
|
|
19
|
+
text?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The text that will be displayed on the login button
|
|
22
|
+
*
|
|
23
|
+
* If not set, it will default to a internationalized message
|
|
24
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
25
|
+
*/
|
|
26
|
+
buttonText?: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represent a prepared user interaction, ready to be sent on-chain via the wallet
|
|
5
|
+
*/
|
|
6
|
+
export type PreparedInteraction = {
|
|
7
|
+
handlerTypeDenominator: Hex;
|
|
8
|
+
interactionData: Hex;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Parameters that will be used to send an interaction to the blockchain
|
|
13
|
+
* @inline
|
|
14
|
+
*/
|
|
15
|
+
export type SendInteractionParamsType = {
|
|
16
|
+
/**
|
|
17
|
+
* The product id where this interaction has been made
|
|
18
|
+
* @defaultValue keccak256(toHex(window.location.host))
|
|
19
|
+
*/
|
|
20
|
+
productId?: Hex;
|
|
21
|
+
/**
|
|
22
|
+
* The prepared interaction, built from an Interaction Encoder
|
|
23
|
+
*/
|
|
24
|
+
interaction: PreparedInteraction;
|
|
25
|
+
/**
|
|
26
|
+
* A pre-computed interaction signature
|
|
27
|
+
* If none provided, the delegated interaction validator of your product will sign it (you can manage it in the business dashboard)
|
|
28
|
+
*
|
|
29
|
+
* @defaultValue undefined
|
|
30
|
+
*/
|
|
31
|
+
validation?: Hex;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Return type of the send interaction rpc request
|
|
36
|
+
* @group RPC Schema
|
|
37
|
+
*/
|
|
38
|
+
export type SendInteractionReturnType = {
|
|
39
|
+
/**
|
|
40
|
+
* The id of the interaction in the interaction pool
|
|
41
|
+
*/
|
|
42
|
+
delegationId: string;
|
|
43
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { GenericModalStepType, ModalStepMetadata } from "./generic";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The final modal step type, could be used to display sharing options or a success reward screen.
|
|
5
|
+
*
|
|
6
|
+
* **Input**: What type final step to display?
|
|
7
|
+
* **Output**: None
|
|
8
|
+
*
|
|
9
|
+
* @group Modal Display
|
|
10
|
+
*/
|
|
11
|
+
export type FinalModalStepType = GenericModalStepType<
|
|
12
|
+
"final",
|
|
13
|
+
{
|
|
14
|
+
// Custom metadata in the case it was dismissed
|
|
15
|
+
dismissedMetadata?: ModalStepMetadata["metadata"];
|
|
16
|
+
// Action to perform on this final step
|
|
17
|
+
action: FinalActionType;
|
|
18
|
+
// Do we want to auto skip this step (don't display anything to the user, once we reached it we exit)
|
|
19
|
+
autoSkip?: boolean;
|
|
20
|
+
},
|
|
21
|
+
object
|
|
22
|
+
>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The different types of final actions we can display in the final step
|
|
26
|
+
* @group Modal Display
|
|
27
|
+
*/
|
|
28
|
+
export type FinalActionType =
|
|
29
|
+
| {
|
|
30
|
+
key: "sharing";
|
|
31
|
+
options?: {
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated Use the top level `config.metadata.i18n` instead
|
|
34
|
+
*/
|
|
35
|
+
popupTitle?: string;
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Use the top level `config.metadata.i18n` instead
|
|
38
|
+
*/
|
|
39
|
+
text?: string;
|
|
40
|
+
link?: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
| {
|
|
44
|
+
key: "reward";
|
|
45
|
+
options?: never;
|
|
46
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represent a generic modal step type
|
|
3
|
+
* @ignore
|
|
4
|
+
* @inline
|
|
5
|
+
*/
|
|
6
|
+
export type GenericModalStepType<TKey, TParams, TReturns> = {
|
|
7
|
+
key: TKey;
|
|
8
|
+
params: TParams extends never
|
|
9
|
+
? ModalStepMetadata
|
|
10
|
+
: ModalStepMetadata & TParams;
|
|
11
|
+
returns: TReturns;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Metadata that can be used to customize a modal step
|
|
16
|
+
* @group Modal Display
|
|
17
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
18
|
+
*/
|
|
19
|
+
export type ModalStepMetadata = {
|
|
20
|
+
metadata?: {
|
|
21
|
+
/**
|
|
22
|
+
* Custom title for the step
|
|
23
|
+
* If none provided, it will use an internationalized text
|
|
24
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
25
|
+
*/
|
|
26
|
+
title?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Custom description for the step
|
|
29
|
+
* If none provided, it will use an internationalized text
|
|
30
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
31
|
+
*/
|
|
32
|
+
description?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Custom text for the primary action of the step
|
|
35
|
+
* If none provided, it will use an internationalized text
|
|
36
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
37
|
+
*/
|
|
38
|
+
primaryActionText?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Custom text for the secondary action of the step
|
|
41
|
+
* If none provided, it will use an internationalized text
|
|
42
|
+
* @deprecated Use the top level `config.customizations.i18n`, or `metadata.i18n` instead
|
|
43
|
+
*/
|
|
44
|
+
secondaryActionText?: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
FinalActionType,
|
|
3
|
+
FinalModalStepType,
|
|
4
|
+
} from "./final";
|
|
5
|
+
export type { ModalStepMetadata } from "./generic";
|
|
6
|
+
export type { LoginModalStepType } from "./login";
|
|
7
|
+
export type {
|
|
8
|
+
OpenInteractionSessionModalStepType,
|
|
9
|
+
OpenInteractionSessionReturnType,
|
|
10
|
+
} from "./openSession";
|
|
11
|
+
export type {
|
|
12
|
+
SiweAuthenticateModalStepType,
|
|
13
|
+
SiweAuthenticateReturnType,
|
|
14
|
+
SiweAuthenticationParams,
|
|
15
|
+
} from "./siweAuthenticate";
|
|
16
|
+
export type {
|
|
17
|
+
SendTransactionModalStepType,
|
|
18
|
+
SendTransactionReturnType,
|
|
19
|
+
SendTransactionTxType,
|
|
20
|
+
} from "./transaction";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import type { SsoMetadata } from "../sso";
|
|
3
|
+
import type { GenericModalStepType } from "./generic";
|
|
4
|
+
|
|
5
|
+
/** @inline */
|
|
6
|
+
type LoginWithSso = {
|
|
7
|
+
allowSso: true;
|
|
8
|
+
// Optional metadata for the SSO (if not provided, will be recomputed from the top level wallet sdk)
|
|
9
|
+
ssoMetadata?: SsoMetadata;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/** @inline */
|
|
13
|
+
type LoginWithoutSso = {
|
|
14
|
+
allowSso?: false;
|
|
15
|
+
ssoMetadata?: never;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The login step for a Modal
|
|
20
|
+
*
|
|
21
|
+
* **Input**: Do we allow SSO or not? Is yes then the SSO metadata
|
|
22
|
+
* **Output**: The logged in wallet address
|
|
23
|
+
*
|
|
24
|
+
* @group Modal Display
|
|
25
|
+
*/
|
|
26
|
+
export type LoginModalStepType = GenericModalStepType<
|
|
27
|
+
"login",
|
|
28
|
+
LoginWithSso | LoginWithoutSso,
|
|
29
|
+
{
|
|
30
|
+
wallet: Address;
|
|
31
|
+
}
|
|
32
|
+
>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { GenericModalStepType } from "./generic";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Return type of the open session modal step
|
|
5
|
+
* @inline
|
|
6
|
+
* @ignore
|
|
7
|
+
*/
|
|
8
|
+
export type OpenInteractionSessionReturnType = {
|
|
9
|
+
startTimestamp: number;
|
|
10
|
+
endTimestamp: number;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The open interaction session step for a Modal
|
|
15
|
+
*
|
|
16
|
+
* **Input**: None
|
|
17
|
+
* **Output**: The interactions session period (start and end timestamp)
|
|
18
|
+
*
|
|
19
|
+
* @group Modal Display
|
|
20
|
+
*/
|
|
21
|
+
export type OpenInteractionSessionModalStepType = GenericModalStepType<
|
|
22
|
+
"openSession",
|
|
23
|
+
object,
|
|
24
|
+
OpenInteractionSessionReturnType
|
|
25
|
+
>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
2
|
+
import type { SiweMessage } from "viem/siwe";
|
|
3
|
+
import type { GenericModalStepType } from "./generic";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parameters used send a SIWE rpc request
|
|
7
|
+
*/
|
|
8
|
+
export type SiweAuthenticationParams = Omit<
|
|
9
|
+
SiweMessage,
|
|
10
|
+
"address" | "chainId" | "expirationTime" | "issuedAt" | "notBefore"
|
|
11
|
+
> & {
|
|
12
|
+
expirationTimeTimestamp?: number;
|
|
13
|
+
notBeforeTimestamp?: number;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Return type of the Siwe transaction rpc request
|
|
18
|
+
* @inline
|
|
19
|
+
*/
|
|
20
|
+
export type SiweAuthenticateReturnType = {
|
|
21
|
+
signature: Hex;
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The SIWE authentication step for a Modal
|
|
27
|
+
*
|
|
28
|
+
* **Input**: SIWE message parameters
|
|
29
|
+
* **Output**: SIWE result (message signed and wallet signature)
|
|
30
|
+
*
|
|
31
|
+
* @group Modal Display
|
|
32
|
+
*/
|
|
33
|
+
export type SiweAuthenticateModalStepType = GenericModalStepType<
|
|
34
|
+
"siweAuthenticate",
|
|
35
|
+
{ siwe: SiweAuthenticationParams },
|
|
36
|
+
SiweAuthenticateReturnType
|
|
37
|
+
>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import type { GenericModalStepType } from "./generic";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generic format representing a tx to be sent
|
|
6
|
+
*/
|
|
7
|
+
export type SendTransactionTxType = {
|
|
8
|
+
to: Address;
|
|
9
|
+
data?: Hex;
|
|
10
|
+
value?: Hex;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Return type of the send transaction rpc request
|
|
15
|
+
* @inline
|
|
16
|
+
*/
|
|
17
|
+
export type SendTransactionReturnType = {
|
|
18
|
+
hash: Hex;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The send transaction step for a Modal
|
|
23
|
+
*
|
|
24
|
+
* **Input**: Either a single tx or an array of tx to be sent
|
|
25
|
+
* **Output**: The hash of the tx(s) hash (in case of multiple tx, still returns a single hash because it's bundled on the wallet level)
|
|
26
|
+
*
|
|
27
|
+
* @group Modal Display
|
|
28
|
+
*/
|
|
29
|
+
export type SendTransactionModalStepType = GenericModalStepType<
|
|
30
|
+
"sendTransaction",
|
|
31
|
+
{ tx: SendTransactionTxType | SendTransactionTxType[] },
|
|
32
|
+
SendTransactionReturnType
|
|
33
|
+
>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import type { FullInteractionTypesKey } from "../../constants/interactionTypes";
|
|
3
|
+
import type { ProductTypesKey } from "../../constants/productTypes";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The type for the amount of tokens
|
|
7
|
+
*/
|
|
8
|
+
export type TokenAmountType = {
|
|
9
|
+
amount: number;
|
|
10
|
+
eurAmount: number;
|
|
11
|
+
usdAmount: number;
|
|
12
|
+
gbpAmount: number;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Response of the `frak_getProductInformation` RPC method
|
|
17
|
+
* @group RPC Schema
|
|
18
|
+
*/
|
|
19
|
+
export type GetProductInformationReturnType = {
|
|
20
|
+
/**
|
|
21
|
+
* Current product id
|
|
22
|
+
*/
|
|
23
|
+
id: Hex;
|
|
24
|
+
/**
|
|
25
|
+
* Some metadata
|
|
26
|
+
*/
|
|
27
|
+
onChainMetadata: {
|
|
28
|
+
/**
|
|
29
|
+
* Name of the product on-chain
|
|
30
|
+
*/
|
|
31
|
+
name: string;
|
|
32
|
+
/**
|
|
33
|
+
* Domain of the product on-chain
|
|
34
|
+
*/
|
|
35
|
+
domain: string;
|
|
36
|
+
/**
|
|
37
|
+
* The supported product types
|
|
38
|
+
*/
|
|
39
|
+
productTypes: ProductTypesKey[];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* The max potential reward for the referrer
|
|
43
|
+
*/
|
|
44
|
+
maxReferrer?: TokenAmountType;
|
|
45
|
+
/**
|
|
46
|
+
* The max potential reward for the referee
|
|
47
|
+
*/
|
|
48
|
+
maxReferee?: TokenAmountType;
|
|
49
|
+
/**
|
|
50
|
+
* List of all the potentials reward arround this product
|
|
51
|
+
*/
|
|
52
|
+
rewards: {
|
|
53
|
+
token: Address;
|
|
54
|
+
campaign: Address;
|
|
55
|
+
interactionTypeKey: FullInteractionTypesKey;
|
|
56
|
+
referrer: TokenAmountType;
|
|
57
|
+
referee: TokenAmountType;
|
|
58
|
+
}[];
|
|
59
|
+
};
|