@fuul/sdk 4.12.2 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/affiliates/AffiliateService.d.ts +4 -3
- package/dist/affiliates/AffiliateService.d.ts.map +1 -1
- package/dist/core.d.ts +17 -8
- package/dist/core.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +214 -210
- package/dist/index.umd.js +5 -5
- package/dist/release.json.d.ts +1 -1
- package/dist/types/api.d.ts +2 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/sdk.d.ts +4 -1
- package/dist/types/sdk.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,7 +36,6 @@ Now you can start sending events.
|
|
|
36
36
|
|
|
37
37
|
For Fuul to attribute conversion events you'll need to report the "pageview" and "connect wallet" events.
|
|
38
38
|
|
|
39
|
-
|
|
40
39
|
#### Page view event
|
|
41
40
|
|
|
42
41
|
Projects must send this event every time a user visits a page on their website.
|
|
@@ -49,7 +48,7 @@ await Fuul.sendPageview();
|
|
|
49
48
|
|
|
50
49
|
#### Connect wallet event
|
|
51
50
|
|
|
52
|
-
Projects must send this event every time users connect a wallet to their website.
|
|
51
|
+
Projects must send this event every time users connect a wallet to their website.
|
|
53
52
|
|
|
54
53
|
NOTE: Make sure to send the event when connecting a wallet for the first time as well as when changing wallets during the session.
|
|
55
54
|
|
|
@@ -57,8 +56,9 @@ NOTE: Make sure to send the event when connecting a wallet for the first time as
|
|
|
57
56
|
import { Fuul } from ('@fuul/sdk');
|
|
58
57
|
|
|
59
58
|
await Fuul.sendConnectWallet({
|
|
60
|
-
address: "
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
address: "0xe06099DbbF626892397f9A74C7f42F16748292Db",
|
|
60
|
+
blockchain: BlockchainType.Ethereum,
|
|
61
|
+
signature: "0xb823038d78e541470946e5125b74878c226a84f891671946f18fbe7e5995171731b92f569c3e83f1c9fb89c5351245494c5d2ce6273f74c853a2cace6073f09c1c",
|
|
62
|
+
message: "Connect wallet"
|
|
63
63
|
});
|
|
64
64
|
```
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { HttpClient } from '../HttpClient';
|
|
2
|
+
import { BlockchainType } from '../types';
|
|
2
3
|
export type AffiliateServiceSettings = {
|
|
3
4
|
httpClient: HttpClient;
|
|
4
5
|
debug?: boolean;
|
|
@@ -7,9 +8,9 @@ export declare class AffiliateService {
|
|
|
7
8
|
private readonly httpClient;
|
|
8
9
|
private readonly _debug;
|
|
9
10
|
constructor(settings: AffiliateServiceSettings);
|
|
10
|
-
create(address: string, code: string, signature: string, accountChainId?: number): Promise<void>;
|
|
11
|
-
update(address: string, code: string, signature: string, accountChainId?: number): Promise<void>;
|
|
11
|
+
create(address: string, blockchain: BlockchainType, code: string, signature: string, accountChainId?: number): Promise<void>;
|
|
12
|
+
update(address: string, blockchain: BlockchainType, code: string, signature: string, accountChainId?: number): Promise<void>;
|
|
12
13
|
isCodeFree(code: string): Promise<boolean>;
|
|
13
|
-
getCode(address: string): Promise<string | null>;
|
|
14
|
+
getCode(address: string, blockchain: BlockchainType): Promise<string | null>;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=AffiliateService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AffiliateService.d.ts","sourceRoot":"","sources":["../../src/affiliates/AffiliateService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"AffiliateService.d.ts","sourceRoot":"","sources":["../../src/affiliates/AffiliateService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI1C,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEjC,QAAQ,EAAE,wBAAwB;IAKjC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5H,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC5H,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe1C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAc1F"}
|
package/dist/core.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { BlockchainType } from './types';
|
|
1
2
|
import { Conversion, GetConversionsParams, GetPayoutsLeaderboardParams, GetPointsLeaderboardParams, GetReferredUsersLeaderboardParams, GetUserAudiencesParams, GetUserAudiencesResponse, GetUserPayoutMovementsParams, GetUserPayoutsByConversionParams, GetUserPointsByConversionParams, GetUserPointsMovementsParams, GetVolumeLeaderboardParams, LeaderboardResponse, PayoutsLeaderboard, PointsLeaderboard, ReferredUsersLeaderboard, UserPayoutMovementsResponse, UserPayoutsByConversionResponse, UserPointsByConversionResponse, UserPointsMovementsResponse, VolumeLeaderboard } from './types/api';
|
|
2
|
-
import { AffiliateCodeParams, AffiliateLinkParams, EventArgs, FuulSettings
|
|
3
|
+
import { AffiliateCodeParams, AffiliateLinkParams, ConnectWalletEventParams, EventArgs, FuulSettings } from './types/sdk';
|
|
3
4
|
import { GetUserAffiliatesParams, UserAffiliate } from './user/types';
|
|
4
5
|
export declare function init(settings: FuulSettings): void;
|
|
5
6
|
/**
|
|
@@ -14,7 +15,7 @@ export declare function init(settings: FuulSettings): void;
|
|
|
14
15
|
export declare function sendEvent(name: string, args?: EventArgs): Promise<void>;
|
|
15
16
|
/**
|
|
16
17
|
* @param {string} pageName Optional page name, default is document.location.pathname
|
|
17
|
-
* @see https://docs.fuul.xyz/
|
|
18
|
+
* @see https://docs.fuul.xyz/for-devs/tracking-referrals-in-your-app#pageview-event
|
|
18
19
|
* @returns {Promise<void>}
|
|
19
20
|
* @example
|
|
20
21
|
* ```typescript
|
|
@@ -24,13 +25,14 @@ export declare function sendEvent(name: string, args?: EventArgs): Promise<void>
|
|
|
24
25
|
*/
|
|
25
26
|
export declare function sendPageview(pageName?: string, projectIds?: string[]): Promise<void>;
|
|
26
27
|
/**
|
|
27
|
-
* @param {
|
|
28
|
-
* @see https://docs.fuul.xyz/
|
|
28
|
+
* @param {ConnectWalletEventParams} ConnectWalletEventParams Metadata from the user that connected the wallet
|
|
29
|
+
* @see https://docs.fuul.xyz/for-devs/tracking-referrals-in-your-app#connect-wallet-event
|
|
29
30
|
* @returns {Promise<void>}
|
|
30
31
|
* @example
|
|
31
32
|
* ```typescript
|
|
32
33
|
* sendConnectWallet({
|
|
33
34
|
* userAddress: '0x12345',
|
|
35
|
+
* blockchain: BlockchainType.Ethereum,
|
|
34
36
|
* signature: '0xaad9a0b62f87c15a248cb99ca926785b828b5',
|
|
35
37
|
* signatureMessage: 'Accept referral from Fuul'
|
|
36
38
|
* })
|
|
@@ -39,17 +41,19 @@ export declare function sendPageview(pageName?: string, projectIds?: string[]):
|
|
|
39
41
|
* // You can also send the account chain id if you are using a smart contract account (EIP-1271)
|
|
40
42
|
* sendConnectWallet({
|
|
41
43
|
* userAddress: '0x12345',
|
|
44
|
+
* blockchain: BlockchainType.Ethereum,
|
|
42
45
|
* signature: '0xaad9a0b62f87c15a248cb99ca926785b828b5',
|
|
43
46
|
* signatureMessage: 'Accept referral from Fuul'
|
|
44
47
|
* accountChainId: 8453,
|
|
45
48
|
* })
|
|
46
49
|
* ```
|
|
47
50
|
*/
|
|
48
|
-
export declare function sendConnectWallet(
|
|
51
|
+
export declare function sendConnectWallet(params: ConnectWalletEventParams, projectIds?: string[]): Promise<void>;
|
|
49
52
|
/**
|
|
50
53
|
* Creates a code registered to an affiliate address
|
|
51
54
|
* @param {object} params Create affiliate code parameters
|
|
52
55
|
* @param {string} params.address Affiliate wallet address
|
|
56
|
+
* @param {BlockchainType} params.blockchain Blockchain type of the affiliate address
|
|
53
57
|
* @param {string} params.code Affiliate code to map address to
|
|
54
58
|
* @param {string} params.signature Signed message authenticating address ownership. Message to be signed: `I confirm that I am creating the ${code} code on Fuul`
|
|
55
59
|
* @param {number} [params.accountChainId] Account chain id (required for EIP-1271 signature validation)
|
|
@@ -57,6 +61,7 @@ export declare function sendConnectWallet(userMetadata: UserMetadata, projectIds
|
|
|
57
61
|
* ```typescript
|
|
58
62
|
* await Fuul.createAffiliateCode({
|
|
59
63
|
* address: '0x12345',
|
|
64
|
+
* blockchain: BlockchainType.Ethereum,
|
|
60
65
|
* code: 'my-cool-code',
|
|
61
66
|
* signature: '<signature>'
|
|
62
67
|
* })
|
|
@@ -67,6 +72,7 @@ export declare function createAffiliateCode(params: AffiliateCodeParams): Promis
|
|
|
67
72
|
* Updates the code registered to an affiliate address
|
|
68
73
|
* @param {object} params Update affiliate code parameters
|
|
69
74
|
* @param {string} params.address Affiliate wallet address
|
|
75
|
+
* @param {BlockchainType} params.blockchain Blockchain type of the affiliate address
|
|
70
76
|
* @param {string} params.code New affiliate code
|
|
71
77
|
* @param {string} params.signature Signed message authenticating code update. Message to be signed: `I confirm that I am updating my code to ${code} on Fuul`
|
|
72
78
|
* @param {number} [params.accountChainId] Account chain id (required for EIP-1271 signature validation)
|
|
@@ -74,6 +80,7 @@ export declare function createAffiliateCode(params: AffiliateCodeParams): Promis
|
|
|
74
80
|
* ```typescript
|
|
75
81
|
* await Fuul.updateAffiliateCode({
|
|
76
82
|
* address: '0x12345',
|
|
83
|
+
* blockchain: BlockchainType.Ethereum,
|
|
77
84
|
* code: 'my-new-cool-code',
|
|
78
85
|
* signature: '<signature>'
|
|
79
86
|
* })
|
|
@@ -83,13 +90,14 @@ export declare function updateAffiliateCode(params: AffiliateCodeParams): Promis
|
|
|
83
90
|
/**
|
|
84
91
|
* Gets the code registered to an affiliate address
|
|
85
92
|
* @param {string} address Affiliate wallet address
|
|
93
|
+
* @param {BlockchainType} blockchain Blockchain type of the affiliate address
|
|
86
94
|
* @returns {string} Affiliate code
|
|
87
95
|
* @example
|
|
88
96
|
* ```typescript
|
|
89
97
|
* const code = await Fuul.getAffiliateCode('0x12345');
|
|
90
98
|
* ```
|
|
91
99
|
**/
|
|
92
|
-
export declare function getAffiliateCode(address: string): Promise<string | null>;
|
|
100
|
+
export declare function getAffiliateCode(address: string, blockchain: BlockchainType): Promise<string | null>;
|
|
93
101
|
/**
|
|
94
102
|
* Checks if an affiliate code is free to use
|
|
95
103
|
* @param {string} code Affiliate code to check
|
|
@@ -106,6 +114,7 @@ export declare function isAffiliateCodeFree(code: string): Promise<boolean>;
|
|
|
106
114
|
* Generates a tracking link for an affiliate
|
|
107
115
|
* @param {string} baseUrl Base url of the project
|
|
108
116
|
* @param {string} affiliateAddress Affiliate wallet address
|
|
117
|
+
* @param {BlockchainType} blockchain Blockchain type of the affiliate address
|
|
109
118
|
* @param {AffiliateLinkParams} params Optional tracking parameters
|
|
110
119
|
* @returns {string} Tracking link
|
|
111
120
|
* @example
|
|
@@ -113,9 +122,9 @@ export declare function isAffiliateCodeFree(code: string): Promise<boolean>;
|
|
|
113
122
|
* const trackingLink = Fuul.generateTrackingLink('https://myproject.com', '0x12345')
|
|
114
123
|
* console.log(trackingLink) // https://myproject.com?af=0x12345
|
|
115
124
|
* ```
|
|
116
|
-
* @see https://docs.fuul.xyz/
|
|
125
|
+
* @see https://docs.fuul.xyz/for-devs/building-your-incentives-hub-in-your-app-white-label/creating-affiliate-links-or-codes
|
|
117
126
|
**/
|
|
118
|
-
export declare function generateTrackingLink(baseUrl: string, affiliateAddress: string, params?: AffiliateLinkParams): Promise<string>;
|
|
127
|
+
export declare function generateTrackingLink(baseUrl: string, affiliateAddress: string, blockchain: BlockchainType, params?: AffiliateLinkParams): Promise<string>;
|
|
119
128
|
/**
|
|
120
129
|
* Gets the project payouts leaderboard
|
|
121
130
|
* @param {GetPayoutsLeaderboardParams} params The search params
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,UAAU,EAEV,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,EAC1B,iCAAiC,EACjC,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { default as Fuul } from './core';
|
|
2
2
|
export * from './affiliates/errors';
|
|
3
3
|
export type { Conversion } from './types/api';
|
|
4
|
-
export type { EventArgs, FuulSettings,
|
|
4
|
+
export type { EventArgs, FuulSettings, ConnectWalletEventParams } from './types/sdk';
|
|
5
5
|
export { Fuul };
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,cAAc,qBAAqB,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,cAAc,qBAAqB,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAE,IAAI,EAAE,CAAC"}
|