@frak-labs/core-sdk 0.1.0-beta.6e0d8026 → 0.1.0-beta.8d103039

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 (72) hide show
  1. package/package.json +3 -2
  2. package/src/actions/displayEmbeddedWallet.ts +20 -0
  3. package/src/actions/displayModal.ts +131 -0
  4. package/src/actions/getProductInformation.ts +14 -0
  5. package/src/actions/index.ts +29 -0
  6. package/src/actions/openSso.ts +116 -0
  7. package/src/actions/prepareSso.ts +48 -0
  8. package/src/actions/referral/processReferral.ts +230 -0
  9. package/src/actions/referral/referralInteraction.ts +57 -0
  10. package/src/actions/sendInteraction.ts +32 -0
  11. package/src/actions/trackPurchaseStatus.ts +53 -0
  12. package/src/actions/watchWalletStatus.ts +94 -0
  13. package/src/actions/wrapper/modalBuilder.ts +212 -0
  14. package/src/actions/wrapper/sendTransaction.ts +62 -0
  15. package/src/actions/wrapper/siweAuthenticate.ts +94 -0
  16. package/src/bundle.ts +3 -0
  17. package/src/clients/DebugInfo.ts +182 -0
  18. package/src/clients/createIFrameFrakClient.ts +287 -0
  19. package/src/clients/index.ts +3 -0
  20. package/src/clients/setupClient.ts +71 -0
  21. package/src/clients/transports/iframeLifecycleManager.ts +88 -0
  22. package/src/constants/interactionTypes.ts +44 -0
  23. package/src/constants/locales.ts +14 -0
  24. package/src/constants/productTypes.ts +33 -0
  25. package/src/index.ts +103 -0
  26. package/src/interactions/index.ts +5 -0
  27. package/src/interactions/pressEncoder.ts +53 -0
  28. package/src/interactions/purchaseEncoder.ts +94 -0
  29. package/src/interactions/referralEncoder.ts +47 -0
  30. package/src/interactions/retailEncoder.ts +37 -0
  31. package/src/interactions/webshopEncoder.ts +30 -0
  32. package/src/types/client.ts +14 -0
  33. package/src/types/compression.ts +22 -0
  34. package/src/types/config.ts +111 -0
  35. package/src/types/context.ts +13 -0
  36. package/src/types/index.ts +70 -0
  37. package/src/types/lifecycle/client.ts +46 -0
  38. package/src/types/lifecycle/iframe.ts +35 -0
  39. package/src/types/lifecycle/index.ts +2 -0
  40. package/src/types/rpc/displayModal.ts +84 -0
  41. package/src/types/rpc/embedded/index.ts +68 -0
  42. package/src/types/rpc/embedded/loggedIn.ts +55 -0
  43. package/src/types/rpc/embedded/loggedOut.ts +28 -0
  44. package/src/types/rpc/interaction.ts +43 -0
  45. package/src/types/rpc/modal/final.ts +46 -0
  46. package/src/types/rpc/modal/generic.ts +46 -0
  47. package/src/types/rpc/modal/index.ts +20 -0
  48. package/src/types/rpc/modal/login.ts +32 -0
  49. package/src/types/rpc/modal/openSession.ts +25 -0
  50. package/src/types/rpc/modal/siweAuthenticate.ts +37 -0
  51. package/src/types/rpc/modal/transaction.ts +33 -0
  52. package/src/types/rpc/productInformation.ts +59 -0
  53. package/src/types/rpc/sso.ts +80 -0
  54. package/src/types/rpc/walletStatus.ts +35 -0
  55. package/src/types/rpc.ts +158 -0
  56. package/src/types/transport.ts +34 -0
  57. package/src/utils/FrakContext.ts +152 -0
  58. package/src/utils/compression/b64.ts +29 -0
  59. package/src/utils/compression/compress.ts +11 -0
  60. package/src/utils/compression/decompress.ts +11 -0
  61. package/src/utils/compression/index.ts +3 -0
  62. package/src/utils/computeProductId.ts +11 -0
  63. package/src/utils/constants.ts +4 -0
  64. package/src/utils/formatAmount.ts +18 -0
  65. package/src/utils/getCurrencyAmountKey.ts +15 -0
  66. package/src/utils/getSupportedCurrency.ts +14 -0
  67. package/src/utils/getSupportedLocale.ts +16 -0
  68. package/src/utils/iframeHelper.ts +142 -0
  69. package/src/utils/index.ts +21 -0
  70. package/src/utils/sso.ts +119 -0
  71. package/src/utils/ssoUrlListener.ts +60 -0
  72. package/src/utils/trackEvent.ts +26 -0
@@ -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,2 @@
1
+ export type { IFrameLifecycleEvent } from "./iframe";
2
+ export type { ClientLifecycleEvent } from "./client";
@@ -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 { LoginModalStepType } from "./login";
2
+ export type {
3
+ SiweAuthenticateModalStepType,
4
+ SiweAuthenticationParams,
5
+ SiweAuthenticateReturnType,
6
+ } from "./siweAuthenticate";
7
+ export type {
8
+ SendTransactionModalStepType,
9
+ SendTransactionTxType,
10
+ SendTransactionReturnType,
11
+ } from "./transaction";
12
+ export type {
13
+ OpenInteractionSessionReturnType,
14
+ OpenInteractionSessionModalStepType,
15
+ } from "./openSession";
16
+ export type { ModalStepMetadata } from "./generic";
17
+ export type {
18
+ FinalModalStepType,
19
+ FinalActionType,
20
+ } from "./final";
@@ -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
+ };