@fuul/sdk 4.11.6 → 4.12.1
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/dist/EventService.d.ts +1 -1
- package/dist/EventService.d.ts.map +1 -1
- package/dist/core.d.ts +2 -2
- package/dist/core.d.ts.map +1 -1
- package/dist/index.mjs +47 -40
- package/dist/index.umd.js +1 -1
- package/dist/release.json.d.ts +1 -1
- package/package.json +2 -2
package/dist/EventService.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare class EventService {
|
|
|
10
10
|
private readonly debug;
|
|
11
11
|
private readonly httpClient;
|
|
12
12
|
constructor(settings: EventServiceSettings);
|
|
13
|
-
sendEvent(event: FuulEvent): Promise<void>;
|
|
13
|
+
sendEvent(event: FuulEvent, projectIds?: string[]): Promise<void>;
|
|
14
14
|
isDuplicate(thisEvent: FuulEvent): boolean;
|
|
15
15
|
private getCurrentTimestamp;
|
|
16
16
|
private saveSentEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventService.d.ts","sourceRoot":"","sources":["../src/EventService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,QAAQ,EAAE,oBAAoB;IAK7B,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"EventService.d.ts","sourceRoot":"","sources":["../src/EventService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,QAAQ,EAAE,oBAAoB;IAK7B,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvE,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAyCjD,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa;CAQtB"}
|
package/dist/core.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export declare function sendEvent(name: string, args?: EventArgs): Promise<void>
|
|
|
22
22
|
* sendPageview({ page: '/product/123' })
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
-
export declare function sendPageview(pageName?: string): Promise<void>;
|
|
25
|
+
export declare function sendPageview(pageName?: string, projectIds?: string[]): Promise<void>;
|
|
26
26
|
/**
|
|
27
27
|
* @param {UserMetadata} userMetadata Metadata from the user that connected the wallet
|
|
28
28
|
* @see https://docs.fuul.xyz/technical-guide-for-projects/sending-events-through-the-fuul-sdk#connect-wallet-event
|
|
@@ -45,7 +45,7 @@ export declare function sendPageview(pageName?: string): Promise<void>;
|
|
|
45
45
|
* })
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
|
-
export declare function sendConnectWallet(userMetadata: UserMetadata): Promise<void>;
|
|
48
|
+
export declare function sendConnectWallet(userMetadata: UserMetadata, projectIds?: string[]): Promise<void>;
|
|
49
49
|
/**
|
|
50
50
|
* Creates a code registered to an affiliate address
|
|
51
51
|
* @param {object} params Create affiliate code parameters
|
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,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiBtE,wBAAgB,IAAI,CAAC,QAAQ,EAAE,YAAY,QAsB1C;AAQD;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAc7E;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
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,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiBtE,wBAAgB,IAAI,CAAC,QAAQ,EAAE,YAAY,QAsB1C;AAQD;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAc7E;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1F;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BxG;AAED;;;;;;;;;;;;;;;IAeI;AACJ,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAED;;;;;;;;;;;;;;;IAeI;AACJ,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAED;;;;;;;;IAQI;AACJ,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAG9E;AAED;;;;;;;;;;IAUI;AACJ,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxE;AAED;;;;;;;;;;;;IAYI;AACJ,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBnI;AAED;;;;;;;;IAQI;AACJ,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAE3H;AAED;;;;;;;;IAQI;AACJ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAExH;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iCAAiC,GAAG,OAAO,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC,CAE7I;AAED;;;;;;;;IAQI;AACJ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAExH;AAED;;;;;;;;IAQI;AACJ,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAE7H;AAED;;;;;;;;IAQI;AACJ,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAE1H;AAED;;;;;;;;IAQI;AACJ,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAEjH;AAED;;;;;;;;IAQI;AACJ,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAEjH;AAED;;;;;;;;IAQI;AACJ,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGzF;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAGjG;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAGxG;;;;;;;;;;;;;;;;;;;;;;;AA6BD,wBAqBE"}
|
package/dist/index.mjs
CHANGED
|
@@ -27,7 +27,7 @@ const Pt = ne("string"), _ = ne("function"), Ye = ne("number"), re = (e) => e !=
|
|
|
27
27
|
let t;
|
|
28
28
|
return e && (typeof FormData == "function" && e instanceof FormData || _(e.append) && ((t = te(e)) === "formdata" || // detect form-data instance
|
|
29
29
|
t === "object" && _(e.toString) && e.toString() === "[object FormData]"));
|
|
30
|
-
}, vt = P("URLSearchParams"), [
|
|
30
|
+
}, vt = P("URLSearchParams"), [kt, It, qt, jt] = ["ReadableStream", "Request", "Response", "Headers"].map(P), $t = (e) => e.trim ? e.trim() : e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
|
|
31
31
|
function M(e, t, { allOwnKeys: n = !1 } = {}) {
|
|
32
32
|
if (e === null || typeof e > "u")
|
|
33
33
|
return;
|
|
@@ -186,8 +186,8 @@ const an = (e) => {
|
|
|
186
186
|
isBoolean: xt,
|
|
187
187
|
isObject: re,
|
|
188
188
|
isPlainObject: Y,
|
|
189
|
-
isReadableStream:
|
|
190
|
-
isRequest:
|
|
189
|
+
isReadableStream: kt,
|
|
190
|
+
isRequest: It,
|
|
191
191
|
isResponse: qt,
|
|
192
192
|
isHeaders: jt,
|
|
193
193
|
isUndefined: J,
|
|
@@ -906,7 +906,7 @@ const Z = (e, t, n = 3) => {
|
|
|
906
906
|
return !0;
|
|
907
907
|
};
|
|
908
908
|
}()
|
|
909
|
-
),
|
|
909
|
+
), kn = T.hasStandardBrowserEnv ? (
|
|
910
910
|
// Standard browser envs support document.cookie
|
|
911
911
|
{
|
|
912
912
|
write(e, t, n, r, s, o) {
|
|
@@ -933,17 +933,17 @@ const Z = (e, t, n = 3) => {
|
|
|
933
933
|
}
|
|
934
934
|
}
|
|
935
935
|
);
|
|
936
|
-
function
|
|
936
|
+
function In(e) {
|
|
937
937
|
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(e);
|
|
938
938
|
}
|
|
939
939
|
function qn(e, t) {
|
|
940
940
|
return t ? e.replace(/\/?\/$/, "") + "/" + t.replace(/^\/+/, "") : e;
|
|
941
941
|
}
|
|
942
942
|
function dt(e, t) {
|
|
943
|
-
return e && !
|
|
943
|
+
return e && !In(t) ? qn(e, t) : t;
|
|
944
944
|
}
|
|
945
|
-
const
|
|
946
|
-
function
|
|
945
|
+
const ke = (e) => e instanceof O ? { ...e } : e;
|
|
946
|
+
function I(e, t) {
|
|
947
947
|
t = t || {};
|
|
948
948
|
const n = {};
|
|
949
949
|
function r(u, l, d) {
|
|
@@ -1000,7 +1000,7 @@ function k(e, t) {
|
|
|
1000
1000
|
socketPath: i,
|
|
1001
1001
|
responseEncoding: i,
|
|
1002
1002
|
validateStatus: c,
|
|
1003
|
-
headers: (u, l) => s(
|
|
1003
|
+
headers: (u, l) => s(ke(u), ke(l), !0)
|
|
1004
1004
|
};
|
|
1005
1005
|
return a.forEach(Object.keys(Object.assign({}, e, t)), function(l) {
|
|
1006
1006
|
const d = f[l] || s, y = d(e[l], t[l], l);
|
|
@@ -1008,7 +1008,7 @@ function k(e, t) {
|
|
|
1008
1008
|
}), n;
|
|
1009
1009
|
}
|
|
1010
1010
|
const ht = (e) => {
|
|
1011
|
-
const t =
|
|
1011
|
+
const t = I({}, e);
|
|
1012
1012
|
let { data: n, withXSRFToken: r, xsrfHeaderName: s, xsrfCookieName: o, headers: i, auth: c } = t;
|
|
1013
1013
|
t.headers = i = O.from(i), t.url = at(dt(t.baseURL, t.url), e.params, e.paramsSerializer), c && i.set(
|
|
1014
1014
|
"Authorization",
|
|
@@ -1024,7 +1024,7 @@ const ht = (e) => {
|
|
|
1024
1024
|
}
|
|
1025
1025
|
}
|
|
1026
1026
|
if (T.hasStandardBrowserEnv && (r && a.isFunction(r) && (r = r(t)), r || r !== !1 && vn(t.url))) {
|
|
1027
|
-
const u = s && o &&
|
|
1027
|
+
const u = s && o && kn.read(o);
|
|
1028
1028
|
u && i.set(s, u);
|
|
1029
1029
|
}
|
|
1030
1030
|
return t;
|
|
@@ -1136,7 +1136,7 @@ const ht = (e) => {
|
|
|
1136
1136
|
} finally {
|
|
1137
1137
|
await t.cancel();
|
|
1138
1138
|
}
|
|
1139
|
-
},
|
|
1139
|
+
}, Ie = (e, t, n, r) => {
|
|
1140
1140
|
const s = Vn(e, t);
|
|
1141
1141
|
let o = 0, i, c = (f) => {
|
|
1142
1142
|
i || (i = !0, r && r(f));
|
|
@@ -1241,7 +1241,7 @@ const Wn = async (e) => {
|
|
|
1241
1241
|
p,
|
|
1242
1242
|
Z(ve(f))
|
|
1243
1243
|
);
|
|
1244
|
-
r =
|
|
1244
|
+
r = Ie(A.body, qe, D, G);
|
|
1245
1245
|
}
|
|
1246
1246
|
}
|
|
1247
1247
|
a.isString(d) || (d = d ? "include" : "omit");
|
|
@@ -1267,7 +1267,7 @@ const Wn = async (e) => {
|
|
|
1267
1267
|
Z(ve(c), !0)
|
|
1268
1268
|
) || [];
|
|
1269
1269
|
S = new Response(
|
|
1270
|
-
|
|
1270
|
+
Ie(S.body, qe, D, () => {
|
|
1271
1271
|
G && G(), g && g();
|
|
1272
1272
|
}),
|
|
1273
1273
|
A
|
|
@@ -1406,7 +1406,7 @@ const ye = {
|
|
|
1406
1406
|
assertOptions: Qn,
|
|
1407
1407
|
validators: Re
|
|
1408
1408
|
}, L = ye.validators;
|
|
1409
|
-
let
|
|
1409
|
+
let k = class {
|
|
1410
1410
|
constructor(t) {
|
|
1411
1411
|
this.defaults = t, this.interceptors = {
|
|
1412
1412
|
request: new Fe(),
|
|
@@ -1439,7 +1439,7 @@ let I = class {
|
|
|
1439
1439
|
}
|
|
1440
1440
|
}
|
|
1441
1441
|
_request(t, n) {
|
|
1442
|
-
typeof t == "string" ? (n = n || {}, n.url = t) : n = t || {}, n =
|
|
1442
|
+
typeof t == "string" ? (n = n || {}, n.url = t) : n = t || {}, n = I(this.defaults, n);
|
|
1443
1443
|
const { transitional: r, paramsSerializer: s, headers: o } = n;
|
|
1444
1444
|
r !== void 0 && ye.assertOptions(r, {
|
|
1445
1445
|
silentJSONParsing: L.transitional(L.boolean),
|
|
@@ -1498,14 +1498,14 @@ let I = class {
|
|
|
1498
1498
|
return l;
|
|
1499
1499
|
}
|
|
1500
1500
|
getUri(t) {
|
|
1501
|
-
t =
|
|
1501
|
+
t = I(this.defaults, t);
|
|
1502
1502
|
const n = dt(t.baseURL, t.url);
|
|
1503
1503
|
return at(n, t.params, t.paramsSerializer);
|
|
1504
1504
|
}
|
|
1505
1505
|
};
|
|
1506
1506
|
a.forEach(["delete", "get", "head", "options"], function(t) {
|
|
1507
|
-
|
|
1508
|
-
return this.request(
|
|
1507
|
+
k.prototype[t] = function(n, r) {
|
|
1508
|
+
return this.request(I(r || {}, {
|
|
1509
1509
|
method: t,
|
|
1510
1510
|
url: n,
|
|
1511
1511
|
data: (r || {}).data
|
|
@@ -1515,7 +1515,7 @@ a.forEach(["delete", "get", "head", "options"], function(t) {
|
|
|
1515
1515
|
a.forEach(["post", "put", "patch"], function(t) {
|
|
1516
1516
|
function n(r) {
|
|
1517
1517
|
return function(o, i, c) {
|
|
1518
|
-
return this.request(
|
|
1518
|
+
return this.request(I(c || {}, {
|
|
1519
1519
|
method: t,
|
|
1520
1520
|
headers: r ? {
|
|
1521
1521
|
"Content-Type": "multipart/form-data"
|
|
@@ -1525,7 +1525,7 @@ a.forEach(["post", "put", "patch"], function(t) {
|
|
|
1525
1525
|
}));
|
|
1526
1526
|
};
|
|
1527
1527
|
}
|
|
1528
|
-
|
|
1528
|
+
k.prototype[t] = n(), k.prototype[t + "Form"] = n(!0);
|
|
1529
1529
|
});
|
|
1530
1530
|
let Zn = class wt {
|
|
1531
1531
|
constructor(t) {
|
|
@@ -1677,13 +1677,13 @@ Object.entries(we).forEach(([e, t]) => {
|
|
|
1677
1677
|
we[t] = e;
|
|
1678
1678
|
});
|
|
1679
1679
|
function bt(e) {
|
|
1680
|
-
const t = new
|
|
1681
|
-
return a.extend(n,
|
|
1682
|
-
return bt(
|
|
1680
|
+
const t = new k(e), n = Ge(k.prototype.request, t);
|
|
1681
|
+
return a.extend(n, k.prototype, t, { allOwnKeys: !0 }), a.extend(n, t, null, { allOwnKeys: !0 }), n.create = function(s) {
|
|
1682
|
+
return bt(I(e, s));
|
|
1683
1683
|
}, n;
|
|
1684
1684
|
}
|
|
1685
1685
|
const b = bt(W);
|
|
1686
|
-
b.Axios =
|
|
1686
|
+
b.Axios = k;
|
|
1687
1687
|
b.CanceledError = $;
|
|
1688
1688
|
b.CancelToken = Zn;
|
|
1689
1689
|
b.isCancel = lt;
|
|
@@ -1696,7 +1696,7 @@ b.all = function(t) {
|
|
|
1696
1696
|
};
|
|
1697
1697
|
b.spread = er;
|
|
1698
1698
|
b.isAxiosError = tr;
|
|
1699
|
-
b.mergeConfig =
|
|
1699
|
+
b.mergeConfig = I;
|
|
1700
1700
|
b.AxiosHeaders = O;
|
|
1701
1701
|
b.formToJSON = (e) => ut(a.isHTMLForm(e) ? new FormData(e) : e);
|
|
1702
1702
|
b.getAdapter = gt.getAdapter;
|
|
@@ -1844,12 +1844,19 @@ class ar {
|
|
|
1844
1844
|
R(this, "httpClient");
|
|
1845
1845
|
this.httpClient = t.httpClient, this.debug = !!t.debug;
|
|
1846
1846
|
}
|
|
1847
|
-
async sendEvent(t) {
|
|
1847
|
+
async sendEvent(t, n) {
|
|
1848
1848
|
if (this.isDuplicate(t)) {
|
|
1849
1849
|
this.debug && console.debug("Fuul SDK: Event is considered duplicate and will not be sent");
|
|
1850
1850
|
return;
|
|
1851
1851
|
}
|
|
1852
|
-
|
|
1852
|
+
if (!n || !Array.isArray(n) || n.length === 0)
|
|
1853
|
+
await this.httpClient.post("events", t);
|
|
1854
|
+
else
|
|
1855
|
+
for (const r of n) {
|
|
1856
|
+
const s = structuredClone({ ...t, project_id: r });
|
|
1857
|
+
s.metadata.project_id = r, await this.httpClient.post("events", s);
|
|
1858
|
+
}
|
|
1859
|
+
this.debug && console.debug(`Fuul SDK: Sent '${t.name}' event`), this.saveSentEvent(t);
|
|
1853
1860
|
}
|
|
1854
1861
|
isDuplicate(t) {
|
|
1855
1862
|
const n = `${Me}_${t.name}`, r = localStorage.getItem(n);
|
|
@@ -1871,7 +1878,7 @@ class ar {
|
|
|
1871
1878
|
localStorage.setItem(n, JSON.stringify(s));
|
|
1872
1879
|
}
|
|
1873
1880
|
}
|
|
1874
|
-
const cr = "4.
|
|
1881
|
+
const cr = "4.12.1", ur = {
|
|
1875
1882
|
version: cr
|
|
1876
1883
|
};
|
|
1877
1884
|
class lr {
|
|
@@ -1986,9 +1993,9 @@ async function Or(e, t) {
|
|
|
1986
1993
|
};
|
|
1987
1994
|
await ie.sendEvent(n);
|
|
1988
1995
|
}
|
|
1989
|
-
async function _r(e) {
|
|
1996
|
+
async function _r(e, t) {
|
|
1990
1997
|
x(), Oe(), _e();
|
|
1991
|
-
const
|
|
1998
|
+
const n = {
|
|
1992
1999
|
name: "pageview",
|
|
1993
2000
|
args: {
|
|
1994
2001
|
page: e ?? document.location.pathname,
|
|
@@ -2005,11 +2012,11 @@ async function _r(e) {
|
|
|
2005
2012
|
tag: br() ?? void 0
|
|
2006
2013
|
}
|
|
2007
2014
|
};
|
|
2008
|
-
await ie.sendEvent(t);
|
|
2015
|
+
await ie.sendEvent(n, t);
|
|
2009
2016
|
}
|
|
2010
|
-
async function Pr(e) {
|
|
2017
|
+
async function Pr(e, t) {
|
|
2011
2018
|
x(), Oe(), _e();
|
|
2012
|
-
const
|
|
2019
|
+
const n = {
|
|
2013
2020
|
name: "connect_wallet",
|
|
2014
2021
|
args: {
|
|
2015
2022
|
page: document.location.pathname,
|
|
@@ -2019,7 +2026,7 @@ async function Pr(e) {
|
|
|
2019
2026
|
tracking_id: Ae()
|
|
2020
2027
|
}
|
|
2021
2028
|
};
|
|
2022
|
-
e != null && e.address && (
|
|
2029
|
+
e != null && e.address && (n.user_address = e.address), e != null && e.signature && (n.signature = e == null ? void 0 : e.signature, n.signature_message = e == null ? void 0 : e.message), e != null && e.accountChainId && (n.account_chain_id = e.accountChainId), await ie.sendEvent(n, t);
|
|
2023
2030
|
}
|
|
2024
2031
|
async function xr(e) {
|
|
2025
2032
|
x(), await H.create(e.address, e.code, e.signature, e.accountChainId);
|
|
@@ -2049,10 +2056,10 @@ function Br(e) {
|
|
|
2049
2056
|
function vr(e) {
|
|
2050
2057
|
return ae.getReferredUsersLeaderboard(e);
|
|
2051
2058
|
}
|
|
2052
|
-
function
|
|
2059
|
+
function kr(e) {
|
|
2053
2060
|
return z.getVolumeLeaderboard(e);
|
|
2054
2061
|
}
|
|
2055
|
-
function
|
|
2062
|
+
function Ir(e) {
|
|
2056
2063
|
return z.getUserPayoutsByConversion(e);
|
|
2057
2064
|
}
|
|
2058
2065
|
function qr(e) {
|
|
@@ -2088,7 +2095,7 @@ function Kr() {
|
|
|
2088
2095
|
function Jr(e, t) {
|
|
2089
2096
|
return new lr({
|
|
2090
2097
|
baseURL: e,
|
|
2091
|
-
timeout:
|
|
2098
|
+
timeout: 3e4,
|
|
2092
2099
|
apiKey: Te,
|
|
2093
2100
|
queryParams: t
|
|
2094
2101
|
});
|
|
@@ -2108,12 +2115,12 @@ const fs = {
|
|
|
2108
2115
|
getPointsLeaderboard: Br,
|
|
2109
2116
|
getReferredUsersLeaderboard: vr,
|
|
2110
2117
|
getUserAudiences: Vr,
|
|
2111
|
-
getUserPayoutsByConversion:
|
|
2118
|
+
getUserPayoutsByConversion: Ir,
|
|
2112
2119
|
getUserPointsByConversion: qr,
|
|
2113
2120
|
getUserPointsMovements: $r,
|
|
2114
2121
|
getUserPayoutMovements: jr,
|
|
2115
2122
|
getUserAffiliates: zr,
|
|
2116
|
-
getVolumeLeaderboard:
|
|
2123
|
+
getVolumeLeaderboard: kr
|
|
2117
2124
|
};
|
|
2118
2125
|
export {
|
|
2119
2126
|
Ve as AddressInUseError,
|
package/dist/index.umd.js
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[et]=this[et]={accessors:{}}).accessors,s=this.prototype;function o(i){const c=G(i);r[c]||(_n(s,i),r[c]=!0)}return a.isArray(t)?t.forEach(o):o(t),this}};_.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),a.reduceDescriptors(_.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}}),a.freezeMethods(_);function be(e,t){const n=this||X,r=t||n,s=_.from(r.headers);let o=r.data;return a.forEach(e,function(c){o=c.call(n,o,s.normalize(),t?t.status:void 0)}),s.normalize(),o}function tt(e){return!!(e&&e.__CANCEL__)}function V(e,t,n){m.call(this,e??"canceled",m.ERR_CANCELED,t,n),this.name="CanceledError"}a.inherits(V,m,{__CANCEL__:!0});function nt(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new m("Request failed with status code "+n.status,[m.ERR_BAD_REQUEST,m.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Pn(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function xn(e,t){e=e||10;const n=new Array(e),r=new Array(e);let s=0,o=0,i;return t=t!==void 0?t:1e3,function(f){const u=Date.now(),l=r[o];i||(i=u),n[s]=f,r[s]=u;let d=o,w=0;for(;d!==s;)w+=n[d++],d=d%e;if(s=(s+1)%e,s===o&&(o=(o+1)%e),u-i<t)return;const E=l&&u-l;return E?Math.round(w*1e3/E):void 0}}function Nn(e,t){let n=0,r=1e3/t,s,o;const i=(u,l=Date.now())=>{n=l,s=null,o&&(clearTimeout(o),o=null),e.apply(null,u)};return[(...u)=>{const l=Date.now(),d=l-n;d>=r?i(u,l):(s=u,o||(o=setTimeout(()=>{o=null,i(s)},r-d)))},()=>s&&i(s)]}const se=(e,t,n=3)=>{let r=0;const s=xn(50,250);return Nn(o=>{const i=o.loaded,c=o.lengthComputable?o.total:void 0,f=i-r,u=s(f),l=i<=c;r=i;const d={loaded:i,total:c,progress:c?i/c:void 0,bytes:f,rate:u||void 0,estimated:u&&c&&l?(c-i)/u:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(d)},n)},rt=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},st=e=>(...t)=>a.asap(()=>e(...t)),Un=O.hasStandardBrowserEnv?function(){const t=O.navigator&&/(msie|trident)/i.test(O.navigator.userAgent),n=document.createElement("a");let r;function s(o){let i=o;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=s(window.location.href),function(i){const c=a.isString(i)?s(i):i;return c.protocol===r.protocol&&c.host===r.host}}():function(){return function(){return!0}}(),Ln=O.hasStandardBrowserEnv?{write(e,t,n,r,s,o){const i=[e+"="+encodeURIComponent(t)];a.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),a.isString(r)&&i.push("path="+r),a.isString(s)&&i.push("domain="+s),o===!0&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Fn(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Dn(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function ot(e,t){return e&&!Fn(t)?Dn(e,t):t}const it=e=>e instanceof _?{...e}:e;function I(e,t){t=t||{};const n={};function r(u,l,d){return a.isPlainObject(u)&&a.isPlainObject(l)?a.merge.call({caseless:d},u,l):a.isPlainObject(l)?a.merge({},l):a.isArray(l)?l.slice():l}function s(u,l,d){if(a.isUndefined(l)){if(!a.isUndefined(u))return r(void 0,u,d)}else return r(u,l,d)}function o(u,l){if(!a.isUndefined(l))return r(void 0,l)}function i(u,l){if(a.isUndefined(l)){if(!a.isUndefined(u))return r(void 0,u)}else return r(void 0,l)}function c(u,l,d){if(d in t)return r(u,l);if(d in e)return r(void 0,u)}const f={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:c,headers:(u,l)=>s(it(u),it(l),!0)};return a.forEach(Object.keys(Object.assign({},e,t)),function(l){const d=f[l]||s,w=d(e[l],t[l],l);a.isUndefined(w)&&d!==c||(n[l]=w)}),n}const at=e=>{const t=I({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:s,xsrfCookieName:o,headers:i,auth:c}=t;t.headers=i=_.from(i),t.url=Ge(ot(t.baseURL,t.url),e.params,e.paramsSerializer),c&&i.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let f;if(a.isFormData(n)){if(O.hasStandardBrowserEnv||O.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if((f=i.getContentType())!==!1){const[u,...l]=f?f.split(";").map(d=>d.trim()).filter(Boolean):[];i.setContentType([u||"multipart/form-data",...l].join("; "))}}if(O.hasStandardBrowserEnv&&(r&&a.isFunction(r)&&(r=r(t)),r||r!==!1&&Un(t.url))){const u=s&&o&&Ln.read(o);u&&i.set(s,u)}return t},Bn=typeof XMLHttpRequest<"u"&&function(e){return new Promise(function(n,r){const s=at(e);let o=s.data;const i=_.from(s.headers).normalize();let{responseType:c,onUploadProgress:f,onDownloadProgress:u}=s,l,d,w,E,h;function g(){E&&E(),h&&h(),s.cancelToken&&s.cancelToken.unsubscribe(l),s.signal&&s.signal.removeEventListener("abort",l)}let p=new XMLHttpRequest;p.open(s.method.toUpperCase(),s.url,!0),p.timeout=s.timeout;function b(){if(!p)return;const C=_.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders()),P={data:!c||c==="text"||c==="json"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:C,config:e,request:p};nt(function(j){n(j),g()},function(j){r(j),g()},P),p=null}"onloadend"in p?p.onloadend=b:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf("file:")===0)||setTimeout(b)},p.onabort=function(){p&&(r(new m("Request aborted",m.ECONNABORTED,e,p)),p=null)},p.onerror=function(){r(new m("Network Error",m.ERR_NETWORK,e,p)),p=null},p.ontimeout=function(){let L=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const P=s.transitional||Qe;s.timeoutErrorMessage&&(L=s.timeoutErrorMessage),r(new m(L,P.clarifyTimeoutError?m.ETIMEDOUT:m.ECONNABORTED,e,p)),p=null},o===void 0&&i.setContentType(null),"setRequestHeader"in p&&a.forEach(i.toJSON(),function(L,P){p.setRequestHeader(P,L)}),a.isUndefined(s.withCredentials)||(p.withCredentials=!!s.withCredentials),c&&c!=="json"&&(p.responseType=s.responseType),u&&([w,h]=se(u,!0),p.addEventListener("progress",w)),f&&p.upload&&([d,E]=se(f),p.upload.addEventListener("progress",d),p.upload.addEventListener("loadend",E)),(s.cancelToken||s.signal)&&(l=C=>{p&&(r(!C||C.type?new V(null,e,p):C),p.abort(),p=null)},s.cancelToken&&s.cancelToken.subscribe(l),s.signal&&(s.signal.aborted?l():s.signal.addEventListener("abort",l)));const S=Pn(s.url);if(S&&O.protocols.indexOf(S)===-1){r(new m("Unsupported protocol "+S+":",m.ERR_BAD_REQUEST,e));return}p.send(o||null)})},vn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,s;const o=function(u){if(!s){s=!0,c();const l=u instanceof Error?u:this.reason;r.abort(l instanceof m?l:new V(l instanceof Error?l.message:l))}};let i=t&&setTimeout(()=>{i=null,o(new m(`timeout ${t} of ms exceeded`,m.ETIMEDOUT))},t);const c=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(o):u.removeEventListener("abort",o)}),e=null)};e.forEach(u=>u.addEventListener("abort",o));const{signal:f}=r;return f.unsubscribe=()=>a.asap(c),f}},In=function*(e,t){let n=e.byteLength;if(n<t){yield e;return}let r=0,s;for(;r<n;)s=r+t,yield e.slice(r,s),r=s},kn=async function*(e,t){for await(const n of qn(e))yield*In(n,t)},qn=async function*(e){if(e[Symbol.asyncIterator]){yield*e;return}const t=e.getReader();try{for(;;){const{done:n,value:r}=await t.read();if(n)break;yield r}}finally{await t.cancel()}},ct=(e,t,n,r)=>{const s=kn(e,t);let o=0,i,c=f=>{i||(i=!0,r&&r(f))};return new ReadableStream({async pull(f){try{const{done:u,value:l}=await s.next();if(u){c(),f.close();return}let d=l.byteLength;if(n){let w=o+=d;n(w)}f.enqueue(new Uint8Array(l))}catch(u){throw c(u),u}},cancel(f){return c(f),s.return()}},{highWaterMark:2})},oe=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ut=oe&&typeof ReadableStream=="function",jn=oe&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lt=(e,...t)=>{try{return!!e(...t)}catch{return!1}},$n=ut&<(()=>{let e=!1;const t=new Request(O.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),ft=64*1024,Ee=ut&<(()=>a.isReadableStream(new Response("").body)),ie={stream:Ee&&(e=>e.body)};oe&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!ie[t]&&(ie[t]=a.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new m(`Response type '${t}' is not supported`,m.ERR_NOT_SUPPORT,r)})})})(new Response);const Hn=async e=>{if(e==null)return 0;if(a.isBlob(e))return e.size;if(a.isSpecCompliantForm(e))return(await new Request(O.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(a.isArrayBufferView(e)||a.isArrayBuffer(e))return e.byteLength;if(a.isURLSearchParams(e)&&(e=e+""),a.isString(e))return(await jn(e)).byteLength},Vn=async(e,t)=>{const n=a.toFiniteNumber(e.getContentLength());return n??Hn(t)},Se={http:ln,xhr:Bn,fetch:oe&&(async e=>{let{url:t,method:n,data:r,signal:s,cancelToken:o,timeout:i,onDownloadProgress:c,onUploadProgress:f,responseType:u,headers:l,withCredentials:d="same-origin",fetchOptions:w}=at(e);u=u?(u+"").toLowerCase():"text";let E=vn([s,o&&o.toAbortSignal()],i),h;const g=E&&E.unsubscribe&&(()=>{E.unsubscribe()});let p;try{if(f&&$n&&n!=="get"&&n!=="head"&&(p=await Vn(l,r))!==0){let P=new Request(t,{method:"POST",body:r,duplex:"half"}),B;if(a.isFormData(r)&&(B=P.headers.get("content-type"))&&l.setContentType(B),P.body){const[j,le]=rt(p,se(st(f)));r=ct(P.body,ft,j,le)}}a.isString(d)||(d=d?"include":"omit");const b="credentials"in Request.prototype;h=new Request(t,{...w,signal:E,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,duplex:"half",credentials:b?d:void 0});let S=await fetch(h);const C=Ee&&(u==="stream"||u==="response");if(Ee&&(c||C&&g)){const P={};["status","statusText","headers"].forEach(Rt=>{P[Rt]=S[Rt]});const B=a.toFiniteNumber(S.headers.get("content-length")),[j,le]=c&&rt(B,se(st(c),!0))||[];S=new Response(ct(S.body,ft,j,()=>{le&&le(),g&&g()}),P)}u=u||"text";let L=await ie[a.findKey(ie,u)||"text"](S,e);return!C&&g&&g(),await new Promise((P,B)=>{nt(P,B,{data:L,headers:_.from(S.headers),status:S.status,statusText:S.statusText,config:e,request:h})})}catch(b){throw g&&g(),b&&b.name==="TypeError"&&/fetch/i.test(b.message)?Object.assign(new m("Network Error",m.ERR_NETWORK,e,h),{cause:b.cause||b}):m.from(b,b&&b.code,e,h)}})};a.forEach(Se,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const dt=e=>`- ${e}`,zn=e=>a.isFunction(e)||e===null||e===!1,ht={getAdapter:e=>{e=a.isArray(e)?e:[e];const{length:t}=e;let n,r;const s={};for(let o=0;o<t;o++){n=e[o];let i;if(r=n,!zn(n)&&(r=Se[(i=String(n)).toLowerCase()],r===void 0))throw new m(`Unknown adapter '${i}'`);if(r)break;s[i||"#"+o]=r}if(!r){const o=Object.entries(s).map(([c,f])=>`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let i=t?o.length>1?`since :
|
|
4
4
|
`+o.map(dt).join(`
|
|
5
5
|
`):" "+dt(o[0]):"as no adapter specified";throw new m("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return r},adapters:Se};function Ce(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new V(null,e)}function pt(e){return Ce(e),e.headers=_.from(e.headers),e.data=be.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ht.getAdapter(e.adapter||X.adapter)(e).then(function(r){return Ce(e),r.data=be.call(e,e.transformResponse,r),r.headers=_.from(r.headers),r},function(r){return tt(r)||(Ce(e),r&&r.response&&(r.response.data=be.call(e,e.transformResponse,r.response),r.response.headers=_.from(r.response.headers))),Promise.reject(r)})}const mt="1.7.7",Re={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Re[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const gt={};Re.transitional=function(t,n,r){function s(o,i){return"[Axios v"+mt+"] Transitional option '"+o+"'"+i+(r?". "+r:"")}return(o,i,c)=>{if(t===!1)throw new m(s(i," has been removed"+(n?" in "+n:"")),m.ERR_DEPRECATED);return n&&!gt[i]&&(gt[i]=!0,console.warn(s(i," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,i,c):!0}};function Kn(e,t,n){if(typeof e!="object")throw new m("options must be an object",m.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let s=r.length;for(;s-- >0;){const o=r[s],i=t[o];if(i){const c=e[o],f=c===void 0||i(c,o,e);if(f!==!0)throw new m("option "+o+" must be "+f,m.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new m("Unknown option "+o,m.ERR_BAD_OPTION)}}const Ae={assertOptions:Kn,validators:Re},F=Ae.validators;let k=class{constructor(t){this.defaults=t,this.interceptors={request:new Ye,response:new Ye}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let s;Error.captureStackTrace?Error.captureStackTrace(s={}):s=new Error;const o=s.stack?s.stack.replace(/^.+\n/,""):"";try{r.stack?o&&!String(r.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(r.stack+=`
|
|
6
|
-
`+o):r.stack=o}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=I(this.defaults,n);const{transitional:r,paramsSerializer:s,headers:o}=n;r!==void 0&&Ae.assertOptions(r,{silentJSONParsing:F.transitional(F.boolean),forcedJSONParsing:F.transitional(F.boolean),clarifyTimeoutError:F.transitional(F.boolean)},!1),s!=null&&(a.isFunction(s)?n.paramsSerializer={serialize:s}:Ae.assertOptions(s,{encode:F.function,serialize:F.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&a.merge(o.common,o[n.method]);o&&a.forEach(["delete","get","head","post","put","patch","common"],h=>{delete o[h]}),n.headers=_.concat(i,o);const c=[];let f=!0;this.interceptors.request.forEach(function(g){typeof g.runWhen=="function"&&g.runWhen(n)===!1||(f=f&&g.synchronous,c.unshift(g.fulfilled,g.rejected))});const u=[];this.interceptors.response.forEach(function(g){u.push(g.fulfilled,g.rejected)});let l,d=0,w;if(!f){const h=[pt.bind(this),void 0];for(h.unshift.apply(h,c),h.push.apply(h,u),w=h.length,l=Promise.resolve(n);d<w;)l=l.then(h[d++],h[d++]);return l}w=c.length;let E=n;for(d=0;d<w;){const h=c[d++],g=c[d++];try{E=h(E)}catch(p){g.call(this,p);break}}try{l=pt.call(this,E)}catch(h){return Promise.reject(h)}for(d=0,w=u.length;d<w;)l=l.then(u[d++],u[d++]);return l}getUri(t){t=I(this.defaults,t);const n=ot(t.baseURL,t.url);return Ge(n,t.params,t.paramsSerializer)}};a.forEach(["delete","get","head","options"],function(t){k.prototype[t]=function(n,r){return this.request(I(r||{},{method:t,url:n,data:(r||{}).data}))}}),a.forEach(["post","put","patch"],function(t){function n(r){return function(o,i,c){return this.request(I(c||{},{method:t,headers:r?{"Content-Type":"multipart/form-data"}:{},url:o,data:i}))}}k.prototype[t]=n(),k.prototype[t+"Form"]=n(!0)});let Jn=class At{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(o){n=o});const r=this;this.promise.then(s=>{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](s);r._listeners=null}),this.promise.then=s=>{let o;const i=new Promise(c=>{r.subscribe(c),o=c}).then(s);return i.cancel=function(){r.unsubscribe(o)},i},t(function(o,i,c){r.reason||(r.reason=new V(o,i,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new At(function(s){t=s}),cancel:t}}};function Mn(e){return function(n){return e.apply(null,n)}}function Wn(e){return a.isObject(e)&&e.isAxiosError===!0}const Te={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Te).forEach(([e,t])=>{Te[t]=e});function yt(e){const t=new k(e),n=T(k.prototype.request,t);return a.extend(n,k.prototype,t,{allOwnKeys:!0}),a.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return yt(I(e,s))},n}const y=yt(X);y.Axios=k,y.CanceledError=V,y.CancelToken=Jn,y.isCancel=tt,y.VERSION=mt,y.toFormData=ne,y.AxiosError=m,y.Cancel=y.CanceledError,y.all=function(t){return Promise.all(t)},y.spread=Mn,y.isAxiosError=Wn,y.mergeConfig=I,y.AxiosHeaders=_,y.formToJSON=e=>Ze(a.isHTMLForm(e)?new FormData(e):e),y.getAdapter=ht.getAdapter,y.HttpStatusCode=Te,y.default=y;const{Axios:Wr,AxiosError:ae,CanceledError:Xr,isCancel:Gr,CancelToken:Yr,VERSION:Qr,all:Zr,Cancel:es,isAxiosError:ts,spread:ns,toFormData:rs,AxiosHeaders:ss,HttpStatusCode:os,formToJSON:is,getAdapter:as,mergeConfig:cs}=y;class Oe extends Error{constructor(n){super(n.join(", "));R(this,"errors");this.name="ValidationError",this.errors=n}}class _e extends Error{constructor(n){super("Address already registered.");R(this,"address");this.name="AddressInUseError",this.address=n}}class Pe extends Error{constructor(n){super("Code already registered.");R(this,"code");this.name="CodeInUseError",this.code=n}}class xe extends Error{constructor(){super("Invalid signature provided"),this.name="InvalidSignatureError"}}class Xn{constructor(t){R(this,"httpClient");R(this,"_debug");this.httpClient=t.httpClient,this._debug=t.debug}async create(t,n,r,s){var o;try{await this.httpClient.post("/affiliates",{address:t,name:n,code:n,signature:r,account_chain_id:s})}catch(i){if(i instanceof ae){const c=(o=i.response)==null?void 0:o.data;if(typeof(c==null?void 0:c.message)=="string"){const f=c.message.toLowerCase();throw f=="invalid signature"?new xe:f=="address in use"?new _e(t):f=="code in use"?new Pe(n):new Error(f)}else if((c==null?void 0:c.message)instanceof Array)throw new Oe(c.message)}throw i}}async update(t,n,r,s){var o;try{await this.httpClient.post(`/affiliates/${t}`,{code:n,address:t,signature:r,account_chain_id:s})}catch(i){if(i instanceof ae){const c=(o=i.response)==null?void 0:o.data;if(typeof(c==null?void 0:c.message)=="string"){const f=c.message.toLowerCase();throw f=="invalid signature"?new xe:f=="address in use"?new _e(t):f=="code in use"?new Pe(n):new Error(f)}else if((c==null?void 0:c.message)instanceof Array)throw new Oe(c.message)}throw i}}async isCodeFree(t){var n;try{return await this.httpClient.get(`/affiliates/codes/${t}`),!1}catch(r){if(r instanceof ae&&((n=r.response)==null?void 0:n.status)===404)return!0;throw console.error("Fuul SDK: Could not check affiliate code",r),r}}async getCode(t){var n;try{return(await this.httpClient.get(`/affiliates/${t}`)).data.code}catch(r){if(r instanceof ae&&((n=r.response)==null?void 0:n.status)===404)return null;throw console.error("Fuul SDK: Could not get affiliate code",r),r}}}const Gn="/audiences";class Yn{constructor(t){R(this,"httpClient");R(this,"_debug");this.httpClient=t.httpClient,this._debug=t.debug}async getUserAudiences(t){return(await this.httpClient.get(`${Gn}/user`,t)).data}}class Qn{constructor(t){R(this,"httpClient");this.httpClient=t.httpClient}async getAll(t){const{data:n}=await this.httpClient.get("conversions",t);return n}}const wt="fuul.sent",Zn=60;class er{constructor(t){R(this,"debug");R(this,"httpClient");this.httpClient=t.httpClient,this.debug=!!t.debug}async sendEvent(t){if(this.isDuplicate(t)){this.debug&&console.debug("Fuul SDK: Event is considered duplicate and will not be sent");return}await this.httpClient.post("events",t),this.debug&&console.debug(`Fuul SDK: Sent '${t.name}' event`),this.saveSentEvent(t)}isDuplicate(t){const n=`${wt}_${t.name}`,r=localStorage.getItem(n);if(!r)return!1;const s=JSON.parse(r);if(this.getCurrentTimestamp()-s.timestamp>Zn)return!1;let f=!1;t.metadata&&(f=s.metadata.tracking_id===t.metadata.tracking_id&&s.metadata.project_id===t.metadata.project_id&&s.metadata.referrer===t.metadata.referrer&&s.metadata.source===t.metadata.source&&s.metadata.category===t.metadata.category&&s.metadata.title===t.metadata.title&&s.metadata.tag===t.metadata.tag&&s.user_address===t.user_address&&s.signature===t.signature&&s.signature_message===t.signature_message);let u=!1;return t.args&&s.args&&(u=s.args.page===t.args.page),u&&f}getCurrentTimestamp(){return Date.now()/1e3}saveSentEvent(t){const n=`${wt}_${t.name}`,r=this.getCurrentTimestamp(),s={...t,timestamp:r};localStorage.setItem(n,JSON.stringify(s))}}const tr={version:"4.11.6"};class nr{constructor(t){R(this,"client");R(this,"queryParams");this.client=y.create({...t,headers:{Authorization:`Bearer ${t.apiKey}`,"X-Fuul-Sdk-Version":tr.version}}),this.queryParams=t.queryParams?this.buildQueryParams(t.queryParams):""}buildQueryParams(t){let n="";return Object.keys(t).forEach(r=>{n=n===""?n+`?${r}=${t[r]}`:n+`&${r}=${t[r]}`}),n}async get(t,n){return this.client.get(t+this.queryParams,{params:n})}async post(t,n){return this.client.post(t+this.queryParams,n)}async put(t,n){return this.client.put(t+this.queryParams,n)}async delete(t){return this.client.delete(t+this.queryParams)}}class rr{constructor(t){R(this,"httpClient");this.httpClient=t.httpClient}async getPayoutsLeaderboard(t){return(await this.httpClient.get("/payouts/leaderboard/payouts",t)).data}async getPointsLeaderboard(t){return(await this.httpClient.get("/payouts/leaderboard/points",t)).data}async getReferredUsersLeaderboard(t){return(await this.httpClient.get("/leaderboard/referred",t)).data}}const Y="/payouts";class sr{constructor(t){R(this,"httpClient");R(this,"_debug");this.httpClient=t.httpClient,this._debug=t.debug}async getUserPayoutsByConversion(t){return(await this.httpClient.get(Y,{...t,type:"onchain-currency"})).data}async getUserPointsByConversion(t){return(await this.httpClient.get(Y,{...t,type:"point"})).data}async getUserPayoutMovements(t){return(await this.httpClient.get(`${Y}/movements`,{...t,type:"onchain-currency"})).data}async getUserPointsMovements(t){return(await this.httpClient.get(`${Y}/movements`,{...t,type:"point"})).data}async getVolumeLeaderboard(t){return(await this.httpClient.get(`${Y}/leaderboard/volume`,t)).data}}let or=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,n)=>(n&=63,n<36?t+=n.toString(36):n<62?t+=(n-26).toString(36).toUpperCase():n>62?t+="-":t+="_",t),"");const ir="fuul.tracking_id",Ne=()=>dr(ir,()=>or()),bt=()=>z("af")||z("referrer"),ar=()=>document.referrer,cr=()=>hr(),ur=()=>z("category"),lr=()=>z("title"),fr=()=>z("tag"),dr=(e,t)=>{const n=localStorage.getItem(e);if(n)return n;{const r=t();return r?localStorage.setItem(e,r):localStorage.removeItem(e),r}},z=e=>new URLSearchParams(window.location.search).get(e),hr=()=>{const e=z("source");if(e)return e},pr="/user";class mr{constructor(t){R(this,"httpClient");this.httpClient=t.httpClient}async getUserAffiliates(t){return(await this.httpClient.get(pr,t)).data.affiliates}}const gr="https://api.fuul.xyz/api/v1/";let q=!1,Ue=!1,Le,D,Et,St,K,ce,J,Ct,ue;function yr(e){q=!!e.debug,!Ue&&(Le=e.apiKey,Ir(),D=kr(e.baseApiUrl??gr,e.defaultQueryParams??{}),Et=new Qn({httpClient:D,debug:q}),ce=new er({httpClient:D,debug:q}),K=new Xn({httpClient:D,debug:q}),J=new sr({httpClient:D,debug:q}),St=new mr({httpClient:D}),Ct=new Yn({httpClient:D,debug:q}),ue=new rr({httpClient:D}),Ue=!0,q&&console.debug("Fuul SDK: init() complete"))}function U(){if(!Ue)throw new Error("Fuul SDK: You need to call init() to initialize the library before using any methods")}async function wr(e,t){U(),Fe(),De();const n={name:e,args:t??{},metadata:{tracking_id:Ne()}};await ce.sendEvent(n)}async function br(e){U(),Fe(),De();const t={name:"pageview",args:{page:e??document.location.pathname,locationOrigin:document.location.origin},metadata:{tracking_id:Ne(),referrer_url:ar(),source:cr(),affiliate_id:bt()??void 0,referrer:bt()??void 0,category:ur()??void 0,title:lr()??void 0,tag:fr()??void 0}};await ce.sendEvent(t)}async function Er(e){U(),Fe(),De();const t={name:"connect_wallet",args:{page:document.location.pathname,locationOrigin:document.location.origin},metadata:{tracking_id:Ne()}};e!=null&&e.address&&(t.user_address=e.address),e!=null&&e.signature&&(t.signature=e==null?void 0:e.signature,t.signature_message=e==null?void 0:e.message),e!=null&&e.accountChainId&&(t.account_chain_id=e.accountChainId),await ce.sendEvent(t)}async function Sr(e){U(),await K.create(e.address,e.code,e.signature,e.accountChainId)}async function Cr(e){U(),await K.update(e.address,e.code,e.signature,e.accountChainId)}async function Rr(e){return U(),await K.getCode(e)}async function Ar(e){return U(),await K.isCodeFree(e)}async function Tr(e,t,n){U();const r=await K.getCode(t),s=new URLSearchParams({af:r??t});return n!=null&&n.title&&s.append("af_title",n.title),n!=null&&n.format&&s.append("af_format",n.format),n!=null&&n.place&&s.append("af_place",n.place),`${e}?${s.toString()}`}function Or(e){return ue.getPayoutsLeaderboard(e)}function _r(e){return ue.getPointsLeaderboard(e)}function Pr(e){return ue.getReferredUsersLeaderboard(e)}function xr(e){return J.getVolumeLeaderboard(e)}function Nr(e){return J.getUserPayoutsByConversion(e)}function Ur(e){return J.getUserPointsByConversion(e)}function Lr(e){return J.getUserPayoutMovements(e)}function Fr(e){return J.getUserPointsMovements(e)}async function Dr(e){return U(),Et.getAll(e)}async function Br(e){return U(),St.getUserAffiliates(e)}async function vr(e){return U(),Ct.getUserAudiences(e)}function Fe(){if(typeof window>"u"||typeof document>"u")throw new Error("Fuul SDK: Browser context required")}function De(){if(navigator.webdriver)throw new Error("Fuul SDK: You are using a browser automation tool")}function Ir(){if(!Le)throw new Error("Fuul SDK: Invalid API key")}function kr(e,t){return new nr({baseURL:e,timeout:1e4,apiKey:Le,queryParams:t})}const qr={init:yr,sendEvent:wr,sendPageview:br,sendConnectWallet:Er,generateTrackingLink:Tr,getConversions:Dr,createAffiliateCode:Sr,updateAffiliateCode:Cr,getAffiliateCode:Rr,isAffiliateCodeFree:Ar,getPayoutsLeaderboard:Or,getPointsLeaderboard:_r,getReferredUsersLeaderboard:Pr,getUserAudiences:vr,getUserPayoutsByConversion:Nr,getUserPointsByConversion:Ur,getUserPointsMovements:Fr,getUserPayoutMovements:Lr,getUserAffiliates:Br,getVolumeLeaderboard:xr};A.AddressInUseError=_e,A.CodeInUseError=Pe,A.Fuul=qr,A.InvalidSignatureError=xe,A.ValidationError=Oe,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})});
|
|
6
|
+
`+o):r.stack=o}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=I(this.defaults,n);const{transitional:r,paramsSerializer:s,headers:o}=n;r!==void 0&&Ae.assertOptions(r,{silentJSONParsing:F.transitional(F.boolean),forcedJSONParsing:F.transitional(F.boolean),clarifyTimeoutError:F.transitional(F.boolean)},!1),s!=null&&(a.isFunction(s)?n.paramsSerializer={serialize:s}:Ae.assertOptions(s,{encode:F.function,serialize:F.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&a.merge(o.common,o[n.method]);o&&a.forEach(["delete","get","head","post","put","patch","common"],h=>{delete o[h]}),n.headers=_.concat(i,o);const c=[];let f=!0;this.interceptors.request.forEach(function(g){typeof g.runWhen=="function"&&g.runWhen(n)===!1||(f=f&&g.synchronous,c.unshift(g.fulfilled,g.rejected))});const u=[];this.interceptors.response.forEach(function(g){u.push(g.fulfilled,g.rejected)});let l,d=0,w;if(!f){const h=[pt.bind(this),void 0];for(h.unshift.apply(h,c),h.push.apply(h,u),w=h.length,l=Promise.resolve(n);d<w;)l=l.then(h[d++],h[d++]);return l}w=c.length;let E=n;for(d=0;d<w;){const h=c[d++],g=c[d++];try{E=h(E)}catch(p){g.call(this,p);break}}try{l=pt.call(this,E)}catch(h){return Promise.reject(h)}for(d=0,w=u.length;d<w;)l=l.then(u[d++],u[d++]);return l}getUri(t){t=I(this.defaults,t);const n=ot(t.baseURL,t.url);return Ge(n,t.params,t.paramsSerializer)}};a.forEach(["delete","get","head","options"],function(t){k.prototype[t]=function(n,r){return this.request(I(r||{},{method:t,url:n,data:(r||{}).data}))}}),a.forEach(["post","put","patch"],function(t){function n(r){return function(o,i,c){return this.request(I(c||{},{method:t,headers:r?{"Content-Type":"multipart/form-data"}:{},url:o,data:i}))}}k.prototype[t]=n(),k.prototype[t+"Form"]=n(!0)});let Jn=class At{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(o){n=o});const r=this;this.promise.then(s=>{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](s);r._listeners=null}),this.promise.then=s=>{let o;const i=new Promise(c=>{r.subscribe(c),o=c}).then(s);return i.cancel=function(){r.unsubscribe(o)},i},t(function(o,i,c){r.reason||(r.reason=new V(o,i,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new At(function(s){t=s}),cancel:t}}};function Mn(e){return function(n){return e.apply(null,n)}}function Wn(e){return a.isObject(e)&&e.isAxiosError===!0}const Te={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Te).forEach(([e,t])=>{Te[t]=e});function yt(e){const t=new k(e),n=T(k.prototype.request,t);return a.extend(n,k.prototype,t,{allOwnKeys:!0}),a.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return yt(I(e,s))},n}const y=yt(X);y.Axios=k,y.CanceledError=V,y.CancelToken=Jn,y.isCancel=tt,y.VERSION=mt,y.toFormData=ne,y.AxiosError=m,y.Cancel=y.CanceledError,y.all=function(t){return Promise.all(t)},y.spread=Mn,y.isAxiosError=Wn,y.mergeConfig=I,y.AxiosHeaders=_,y.formToJSON=e=>Ze(a.isHTMLForm(e)?new FormData(e):e),y.getAdapter=ht.getAdapter,y.HttpStatusCode=Te,y.default=y;const{Axios:Wr,AxiosError:ae,CanceledError:Xr,isCancel:Gr,CancelToken:Yr,VERSION:Qr,all:Zr,Cancel:es,isAxiosError:ts,spread:ns,toFormData:rs,AxiosHeaders:ss,HttpStatusCode:os,formToJSON:is,getAdapter:as,mergeConfig:cs}=y;class Oe extends Error{constructor(n){super(n.join(", "));R(this,"errors");this.name="ValidationError",this.errors=n}}class _e extends Error{constructor(n){super("Address already registered.");R(this,"address");this.name="AddressInUseError",this.address=n}}class Pe extends Error{constructor(n){super("Code already registered.");R(this,"code");this.name="CodeInUseError",this.code=n}}class xe extends Error{constructor(){super("Invalid signature provided"),this.name="InvalidSignatureError"}}class Xn{constructor(t){R(this,"httpClient");R(this,"_debug");this.httpClient=t.httpClient,this._debug=t.debug}async create(t,n,r,s){var o;try{await this.httpClient.post("/affiliates",{address:t,name:n,code:n,signature:r,account_chain_id:s})}catch(i){if(i instanceof ae){const c=(o=i.response)==null?void 0:o.data;if(typeof(c==null?void 0:c.message)=="string"){const f=c.message.toLowerCase();throw f=="invalid signature"?new xe:f=="address in use"?new _e(t):f=="code in use"?new Pe(n):new Error(f)}else if((c==null?void 0:c.message)instanceof Array)throw new Oe(c.message)}throw i}}async update(t,n,r,s){var o;try{await this.httpClient.post(`/affiliates/${t}`,{code:n,address:t,signature:r,account_chain_id:s})}catch(i){if(i instanceof ae){const c=(o=i.response)==null?void 0:o.data;if(typeof(c==null?void 0:c.message)=="string"){const f=c.message.toLowerCase();throw f=="invalid signature"?new xe:f=="address in use"?new _e(t):f=="code in use"?new Pe(n):new Error(f)}else if((c==null?void 0:c.message)instanceof Array)throw new Oe(c.message)}throw i}}async isCodeFree(t){var n;try{return await this.httpClient.get(`/affiliates/codes/${t}`),!1}catch(r){if(r instanceof ae&&((n=r.response)==null?void 0:n.status)===404)return!0;throw console.error("Fuul SDK: Could not check affiliate code",r),r}}async getCode(t){var n;try{return(await this.httpClient.get(`/affiliates/${t}`)).data.code}catch(r){if(r instanceof ae&&((n=r.response)==null?void 0:n.status)===404)return null;throw console.error("Fuul SDK: Could not get affiliate code",r),r}}}const Gn="/audiences";class Yn{constructor(t){R(this,"httpClient");R(this,"_debug");this.httpClient=t.httpClient,this._debug=t.debug}async getUserAudiences(t){return(await this.httpClient.get(`${Gn}/user`,t)).data}}class Qn{constructor(t){R(this,"httpClient");this.httpClient=t.httpClient}async getAll(t){const{data:n}=await this.httpClient.get("conversions",t);return n}}const wt="fuul.sent",Zn=60;class er{constructor(t){R(this,"debug");R(this,"httpClient");this.httpClient=t.httpClient,this.debug=!!t.debug}async sendEvent(t,n){if(this.isDuplicate(t)){this.debug&&console.debug("Fuul SDK: Event is considered duplicate and will not be sent");return}if(!n||!Array.isArray(n)||n.length===0)await this.httpClient.post("events",t);else for(const r of n){const s=structuredClone({...t,project_id:r});s.metadata.project_id=r,await this.httpClient.post("events",s)}this.debug&&console.debug(`Fuul SDK: Sent '${t.name}' event`),this.saveSentEvent(t)}isDuplicate(t){const n=`${wt}_${t.name}`,r=localStorage.getItem(n);if(!r)return!1;const s=JSON.parse(r);if(this.getCurrentTimestamp()-s.timestamp>Zn)return!1;let f=!1;t.metadata&&(f=s.metadata.tracking_id===t.metadata.tracking_id&&s.metadata.project_id===t.metadata.project_id&&s.metadata.referrer===t.metadata.referrer&&s.metadata.source===t.metadata.source&&s.metadata.category===t.metadata.category&&s.metadata.title===t.metadata.title&&s.metadata.tag===t.metadata.tag&&s.user_address===t.user_address&&s.signature===t.signature&&s.signature_message===t.signature_message);let u=!1;return t.args&&s.args&&(u=s.args.page===t.args.page),u&&f}getCurrentTimestamp(){return Date.now()/1e3}saveSentEvent(t){const n=`${wt}_${t.name}`,r=this.getCurrentTimestamp(),s={...t,timestamp:r};localStorage.setItem(n,JSON.stringify(s))}}const tr={version:"4.12.1"};class nr{constructor(t){R(this,"client");R(this,"queryParams");this.client=y.create({...t,headers:{Authorization:`Bearer ${t.apiKey}`,"X-Fuul-Sdk-Version":tr.version}}),this.queryParams=t.queryParams?this.buildQueryParams(t.queryParams):""}buildQueryParams(t){let n="";return Object.keys(t).forEach(r=>{n=n===""?n+`?${r}=${t[r]}`:n+`&${r}=${t[r]}`}),n}async get(t,n){return this.client.get(t+this.queryParams,{params:n})}async post(t,n){return this.client.post(t+this.queryParams,n)}async put(t,n){return this.client.put(t+this.queryParams,n)}async delete(t){return this.client.delete(t+this.queryParams)}}class rr{constructor(t){R(this,"httpClient");this.httpClient=t.httpClient}async getPayoutsLeaderboard(t){return(await this.httpClient.get("/payouts/leaderboard/payouts",t)).data}async getPointsLeaderboard(t){return(await this.httpClient.get("/payouts/leaderboard/points",t)).data}async getReferredUsersLeaderboard(t){return(await this.httpClient.get("/leaderboard/referred",t)).data}}const Y="/payouts";class sr{constructor(t){R(this,"httpClient");R(this,"_debug");this.httpClient=t.httpClient,this._debug=t.debug}async getUserPayoutsByConversion(t){return(await this.httpClient.get(Y,{...t,type:"onchain-currency"})).data}async getUserPointsByConversion(t){return(await this.httpClient.get(Y,{...t,type:"point"})).data}async getUserPayoutMovements(t){return(await this.httpClient.get(`${Y}/movements`,{...t,type:"onchain-currency"})).data}async getUserPointsMovements(t){return(await this.httpClient.get(`${Y}/movements`,{...t,type:"point"})).data}async getVolumeLeaderboard(t){return(await this.httpClient.get(`${Y}/leaderboard/volume`,t)).data}}let or=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,n)=>(n&=63,n<36?t+=n.toString(36):n<62?t+=(n-26).toString(36).toUpperCase():n>62?t+="-":t+="_",t),"");const ir="fuul.tracking_id",Ne=()=>dr(ir,()=>or()),bt=()=>z("af")||z("referrer"),ar=()=>document.referrer,cr=()=>hr(),ur=()=>z("category"),lr=()=>z("title"),fr=()=>z("tag"),dr=(e,t)=>{const n=localStorage.getItem(e);if(n)return n;{const r=t();return r?localStorage.setItem(e,r):localStorage.removeItem(e),r}},z=e=>new URLSearchParams(window.location.search).get(e),hr=()=>{const e=z("source");if(e)return e},pr="/user";class mr{constructor(t){R(this,"httpClient");this.httpClient=t.httpClient}async getUserAffiliates(t){return(await this.httpClient.get(pr,t)).data.affiliates}}const gr="https://api.fuul.xyz/api/v1/";let q=!1,Ue=!1,Le,D,Et,St,K,ce,J,Ct,ue;function yr(e){q=!!e.debug,!Ue&&(Le=e.apiKey,Ir(),D=kr(e.baseApiUrl??gr,e.defaultQueryParams??{}),Et=new Qn({httpClient:D,debug:q}),ce=new er({httpClient:D,debug:q}),K=new Xn({httpClient:D,debug:q}),J=new sr({httpClient:D,debug:q}),St=new mr({httpClient:D}),Ct=new Yn({httpClient:D,debug:q}),ue=new rr({httpClient:D}),Ue=!0,q&&console.debug("Fuul SDK: init() complete"))}function U(){if(!Ue)throw new Error("Fuul SDK: You need to call init() to initialize the library before using any methods")}async function wr(e,t){U(),Fe(),De();const n={name:e,args:t??{},metadata:{tracking_id:Ne()}};await ce.sendEvent(n)}async function br(e,t){U(),Fe(),De();const n={name:"pageview",args:{page:e??document.location.pathname,locationOrigin:document.location.origin},metadata:{tracking_id:Ne(),referrer_url:ar(),source:cr(),affiliate_id:bt()??void 0,referrer:bt()??void 0,category:ur()??void 0,title:lr()??void 0,tag:fr()??void 0}};await ce.sendEvent(n,t)}async function Er(e,t){U(),Fe(),De();const n={name:"connect_wallet",args:{page:document.location.pathname,locationOrigin:document.location.origin},metadata:{tracking_id:Ne()}};e!=null&&e.address&&(n.user_address=e.address),e!=null&&e.signature&&(n.signature=e==null?void 0:e.signature,n.signature_message=e==null?void 0:e.message),e!=null&&e.accountChainId&&(n.account_chain_id=e.accountChainId),await ce.sendEvent(n,t)}async function Sr(e){U(),await K.create(e.address,e.code,e.signature,e.accountChainId)}async function Cr(e){U(),await K.update(e.address,e.code,e.signature,e.accountChainId)}async function Rr(e){return U(),await K.getCode(e)}async function Ar(e){return U(),await K.isCodeFree(e)}async function Tr(e,t,n){U();const r=await K.getCode(t),s=new URLSearchParams({af:r??t});return n!=null&&n.title&&s.append("af_title",n.title),n!=null&&n.format&&s.append("af_format",n.format),n!=null&&n.place&&s.append("af_place",n.place),`${e}?${s.toString()}`}function Or(e){return ue.getPayoutsLeaderboard(e)}function _r(e){return ue.getPointsLeaderboard(e)}function Pr(e){return ue.getReferredUsersLeaderboard(e)}function xr(e){return J.getVolumeLeaderboard(e)}function Nr(e){return J.getUserPayoutsByConversion(e)}function Ur(e){return J.getUserPointsByConversion(e)}function Lr(e){return J.getUserPayoutMovements(e)}function Fr(e){return J.getUserPointsMovements(e)}async function Dr(e){return U(),Et.getAll(e)}async function Br(e){return U(),St.getUserAffiliates(e)}async function vr(e){return U(),Ct.getUserAudiences(e)}function Fe(){if(typeof window>"u"||typeof document>"u")throw new Error("Fuul SDK: Browser context required")}function De(){if(navigator.webdriver)throw new Error("Fuul SDK: You are using a browser automation tool")}function Ir(){if(!Le)throw new Error("Fuul SDK: Invalid API key")}function kr(e,t){return new nr({baseURL:e,timeout:3e4,apiKey:Le,queryParams:t})}const qr={init:yr,sendEvent:wr,sendPageview:br,sendConnectWallet:Er,generateTrackingLink:Tr,getConversions:Dr,createAffiliateCode:Sr,updateAffiliateCode:Cr,getAffiliateCode:Rr,isAffiliateCodeFree:Ar,getPayoutsLeaderboard:Or,getPointsLeaderboard:_r,getReferredUsersLeaderboard:Pr,getUserAudiences:vr,getUserPayoutsByConversion:Nr,getUserPointsByConversion:Ur,getUserPointsMovements:Fr,getUserPayoutMovements:Lr,getUserAffiliates:Br,getVolumeLeaderboard:xr};A.AddressInUseError=_e,A.CodeInUseError=Pe,A.Fuul=qr,A.InvalidSignatureError=xe,A.ValidationError=Oe,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})});
|
package/dist/release.json.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fuul/sdk",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.12.1",
|
|
4
4
|
"description": "Fuul SDK",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Fuul",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"nanoid": "^4.0.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@golevelup/ts-jest": "^0.
|
|
37
|
+
"@golevelup/ts-jest": "^0.6.2",
|
|
38
38
|
"@semantic-release/exec": "^6.0.3",
|
|
39
39
|
"@semantic-release/git": "^10.0.1",
|
|
40
40
|
"@semantic-release/npm": "^12.0.1",
|