@solomon-tech/events-eitri 0.0.0-stage → 0.1.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.
Files changed (98) hide show
  1. package/README.md +70 -2
  2. package/dist/attribution/deep-link.d.ts +24 -0
  3. package/dist/attribution/deep-link.d.ts.map +1 -0
  4. package/dist/attribution/deep-link.js +139 -0
  5. package/dist/attribution/deep-link.js.map +1 -0
  6. package/dist/attribution/touchpoint.d.ts +14 -0
  7. package/dist/attribution/touchpoint.d.ts.map +1 -0
  8. package/dist/attribution/touchpoint.js +28 -0
  9. package/dist/attribution/touchpoint.js.map +1 -0
  10. package/dist/attribution/utm.d.ts +19 -0
  11. package/dist/attribution/utm.d.ts.map +1 -0
  12. package/dist/attribution/utm.js +47 -0
  13. package/dist/attribution/utm.js.map +1 -0
  14. package/dist/core/client.d.ts +34 -0
  15. package/dist/core/client.d.ts.map +1 -0
  16. package/dist/core/client.js +332 -0
  17. package/dist/core/client.js.map +1 -0
  18. package/dist/core/events.d.ts +54 -0
  19. package/dist/core/events.d.ts.map +1 -0
  20. package/dist/core/events.js +2 -0
  21. package/dist/core/events.js.map +1 -0
  22. package/dist/core/types.d.ts +29 -0
  23. package/dist/core/types.d.ts.map +1 -0
  24. package/dist/core/types.js +2 -0
  25. package/dist/core/types.js.map +1 -0
  26. package/dist/device/info.d.ts +17 -0
  27. package/dist/device/info.d.ts.map +1 -0
  28. package/dist/device/info.js +69 -0
  29. package/dist/device/info.js.map +1 -0
  30. package/dist/device/install-referrer.d.ts +3 -0
  31. package/dist/device/install-referrer.d.ts.map +1 -0
  32. package/dist/device/install-referrer.js +4 -0
  33. package/dist/device/install-referrer.js.map +1 -0
  34. package/dist/events/builder.d.ts +17 -0
  35. package/dist/events/builder.d.ts.map +1 -0
  36. package/dist/events/builder.js +17 -0
  37. package/dist/events/builder.js.map +1 -0
  38. package/dist/events/touchpoint-builder.d.ts +18 -0
  39. package/dist/events/touchpoint-builder.d.ts.map +1 -0
  40. package/dist/events/touchpoint-builder.js +27 -0
  41. package/dist/events/touchpoint-builder.js.map +1 -0
  42. package/dist/host.d.ts +22 -0
  43. package/dist/host.d.ts.map +1 -0
  44. package/dist/host.js +33 -0
  45. package/dist/host.js.map +1 -0
  46. package/dist/identity/durable-id.d.ts +8 -0
  47. package/dist/identity/durable-id.d.ts.map +1 -0
  48. package/dist/identity/durable-id.js +25 -0
  49. package/dist/identity/durable-id.js.map +1 -0
  50. package/dist/identity/legacy.d.ts +4 -0
  51. package/dist/identity/legacy.d.ts.map +1 -0
  52. package/dist/identity/legacy.js +10 -0
  53. package/dist/identity/legacy.js.map +1 -0
  54. package/dist/identity/session.d.ts +3 -0
  55. package/dist/identity/session.d.ts.map +1 -0
  56. package/dist/identity/session.js +15 -0
  57. package/dist/identity/session.js.map +1 -0
  58. package/dist/identity/stable-id.d.ts +11 -0
  59. package/dist/identity/stable-id.d.ts.map +1 -0
  60. package/dist/identity/stable-id.js +23 -0
  61. package/dist/identity/stable-id.js.map +1 -0
  62. package/dist/identity/user.d.ts +3 -0
  63. package/dist/identity/user.d.ts.map +1 -0
  64. package/dist/identity/user.js +11 -0
  65. package/dist/identity/user.js.map +1 -0
  66. package/dist/identity/uuid.d.ts +3 -0
  67. package/dist/identity/uuid.d.ts.map +1 -0
  68. package/dist/identity/uuid.js +18 -0
  69. package/dist/identity/uuid.js.map +1 -0
  70. package/dist/index.d.ts +11 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +7 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/network/endpoints.d.ts +3 -0
  75. package/dist/network/endpoints.d.ts.map +1 -0
  76. package/dist/network/endpoints.js +3 -0
  77. package/dist/network/endpoints.js.map +1 -0
  78. package/dist/network/publisher.d.ts +3 -0
  79. package/dist/network/publisher.d.ts.map +1 -0
  80. package/dist/network/publisher.js +51 -0
  81. package/dist/network/publisher.js.map +1 -0
  82. package/dist/storage/adapter.d.ts +6 -0
  83. package/dist/storage/adapter.d.ts.map +1 -0
  84. package/dist/storage/adapter.js +2 -0
  85. package/dist/storage/adapter.js.map +1 -0
  86. package/dist/storage/eitri-storage.d.ts +10 -0
  87. package/dist/storage/eitri-storage.d.ts.map +1 -0
  88. package/dist/storage/eitri-storage.js +17 -0
  89. package/dist/storage/eitri-storage.js.map +1 -0
  90. package/dist/storage/timed-value.d.ts +5 -0
  91. package/dist/storage/timed-value.d.ts.map +1 -0
  92. package/dist/storage/timed-value.js +39 -0
  93. package/dist/storage/timed-value.js.map +1 -0
  94. package/dist/wiring.d.ts +3 -0
  95. package/dist/wiring.d.ts.map +1 -0
  96. package/dist/wiring.js +21 -0
  97. package/dist/wiring.js.map +1 -0
  98. package/package.json +42 -4
package/README.md CHANGED
@@ -1,3 +1,71 @@
1
- # Temporary Holding Version
1
+ # @solomon-tech/events-eitri
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ SDK de analytics da Solomon para **apps Eitri** (TypeScript, sobre o Bifrost).
4
+
5
+ Emite os mesmos eventos de funil de e-commerce que os SDKs React Native e Flutter da Solomon, com **payloads idênticos** — o backend (pixel + webanalytics) atribui sem qualquer mudança no servidor. É um módulo TS puro que roda no runtime do eitri-app e usa a API `Eitri.*` (`eitri-bifrost`) para rede, storage e device.
6
+
7
+ ## Instalação
8
+
9
+ ```bash
10
+ npm install @solomon-tech/events-eitri
11
+ ```
12
+
13
+ `eitri-bifrost` é uma `peerDependency` — já está disponível no runtime do eitri-app.
14
+
15
+ ## Uso
16
+
17
+ ```ts
18
+ import SolomonSDK, { registerSolomonHost } from '@solomon-tech/events-eitri';
19
+
20
+ const solomon = new SolomonSDK({
21
+ companyId: 'SEU_COMPANY_ID',
22
+ useTouchpoint: true, // default true
23
+ installStateFromHost: true, // o host (Eitri) informa install/reinstall
24
+ onDeepLink: (deepLinkValue, params) => {
25
+ // rotear a navegação do app com base no deep link
26
+ },
27
+ });
28
+
29
+ // Expõe o SDK para o host (Eitri) chamar os métodos de sessão/instalação:
30
+ registerSolomonHost(solomon);
31
+
32
+ // Rastreio de tela + eventos:
33
+ solomon.setScreenName('ProductScreen');
34
+ solomon.track('ADD_TO_CART', { item_id: '123', item_quantity: 2 }, { email: 'x@y.com' });
35
+ ```
36
+
37
+ ## Integração com o host (Eitri)
38
+
39
+ A Eitri resolve o deep link e o lifecycle de instalação e **chama** o SDK:
40
+
41
+ ```ts
42
+ // Params de todos os query params da URL que abriu/reativou o app
43
+ // (utm_*, sol_*, click_id, fbclid, deep_link_value). Cold start E runtime.
44
+ solomon.setSessionAttributes(urlParams);
45
+
46
+ // Lifecycle vindo do host (install referrer / ciclo de vida nativo).
47
+ solomon.setInstallState({ isInstall, isReinstall });
48
+ ```
49
+
50
+ Se o host chamar por um ponto global em vez da instância, `registerSolomonHost(solomon)`
51
+ expõe `globalThis.__SOLOMON_EITRI__` com os mesmos dois métodos.
52
+
53
+ ## Eventos
54
+
55
+ `VIEW_PAGE`, `CONTENT_VIEW`, `ADD_TO_CART`, `INITIATE_CHECKOUT`, `ADD_SHIPPING_INFO`,
56
+ `ADD_CUSTOMER_INFO`, `ADD_PAYMENT_INFO`, `CHECKOUT_COMPLETED`, além de `APP_INSTALL` /
57
+ `APP_REINSTALL` (automáticos).
58
+
59
+ ## Notas
60
+
61
+ - **Paridade de payload**: o núcleo (builders, identidade, atribuição, UTMs, deep-link parsing,
62
+ endpoints) é cópia byte-idêntica do SDK React Native. Toda mudança de payload/endpoint precisa
63
+ entrar nos três SDKs (RN + Flutter + Eitri).
64
+ - **Install referrer**: o Bifrost não expõe install referrer; a atribuição de instalação usa
65
+ `click_id` + fingerprint (fallback). `id_source='shared_storage'`.
66
+ - Campos de enriquecimento ausentes no runtime (locale/timezone/dimensões de tela) degradam para
67
+ `''`/`0` sem quebrar os eventos.
68
+
69
+ ## Licença
70
+
71
+ MIT
@@ -0,0 +1,24 @@
1
+ export interface DeepLinkParams {
2
+ utm_source: string;
3
+ utm_medium: string;
4
+ utm_campaign: string;
5
+ utm_term: string;
6
+ utm_content: string;
7
+ sol_source: string;
8
+ sol_medium: string;
9
+ sol_campaign: string;
10
+ sol_content: string;
11
+ fbclid: string;
12
+ click_id: string;
13
+ queryString: string;
14
+ }
15
+ export declare function parseDeepLinkUrl(url: string): DeepLinkParams;
16
+ /** True se a URL é um link do link-service (host = linkDomain) com slug — ex.: l.solomon.com.br/2leihlnl */
17
+ export declare function isSolomonLink(url: string, linkDomain: string): boolean;
18
+ export interface ResolvedLink {
19
+ params: DeepLinkParams;
20
+ deep_link_value: string;
21
+ }
22
+ export declare function resolveSolomonLink(url: string): Promise<ResolvedLink | null>;
23
+ export declare function parseInstallReferrer(referrer: string): DeepLinkParams;
24
+ //# sourceMappingURL=deep-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-link.d.ts","sourceRoot":"","sources":["../../src/attribution/deep-link.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AA8CD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAY5D;AAED,4GAA4G;AAC5G,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAMtE;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAeD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsBlF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAWrE"}
@@ -0,0 +1,139 @@
1
+ import Eitri from 'eitri-bifrost';
2
+ const CLICK_ID_RE = /^[a-f0-9]{16,}$|^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
3
+ function emptyParams() {
4
+ return {
5
+ utm_source: '', utm_medium: '', utm_campaign: '', utm_term: '', utm_content: '',
6
+ sol_source: '', sol_medium: '', sol_campaign: '', sol_content: '',
7
+ fbclid: '', click_id: '', queryString: '',
8
+ };
9
+ }
10
+ function parseQueryString(query) {
11
+ const params = emptyParams();
12
+ if (!query)
13
+ return params;
14
+ const pairs = query.split('&');
15
+ for (const pair of pairs) {
16
+ const eqIdx = pair.indexOf('=');
17
+ if (eqIdx === -1)
18
+ continue;
19
+ let key;
20
+ let value;
21
+ try {
22
+ key = decodeURIComponent(pair.substring(0, eqIdx));
23
+ value = decodeURIComponent(pair.substring(eqIdx + 1));
24
+ }
25
+ catch (_a) {
26
+ continue;
27
+ }
28
+ switch (key) {
29
+ case 'utm_source':
30
+ params.utm_source = value;
31
+ break;
32
+ case 'utm_medium':
33
+ params.utm_medium = value;
34
+ break;
35
+ case 'utm_campaign':
36
+ params.utm_campaign = value;
37
+ break;
38
+ case 'utm_term':
39
+ params.utm_term = value;
40
+ break;
41
+ case 'utm_content':
42
+ params.utm_content = value;
43
+ break;
44
+ case 'sol_source':
45
+ params.sol_source = value;
46
+ break;
47
+ case 'sol_medium':
48
+ params.sol_medium = value;
49
+ break;
50
+ case 'sol_campaign':
51
+ params.sol_campaign = value;
52
+ break;
53
+ case 'sol_content':
54
+ params.sol_content = value;
55
+ break;
56
+ case 'fbclid':
57
+ params.fbclid = value;
58
+ break;
59
+ case 'click_id':
60
+ params.click_id = value;
61
+ break;
62
+ }
63
+ }
64
+ return params;
65
+ }
66
+ export function parseDeepLinkUrl(url) {
67
+ let queryString = '';
68
+ const questionIdx = url.indexOf('?');
69
+ if (questionIdx !== -1) {
70
+ queryString = url.substring(questionIdx + 1);
71
+ const hashIdx = queryString.indexOf('#');
72
+ if (hashIdx !== -1)
73
+ queryString = queryString.substring(0, hashIdx);
74
+ }
75
+ const params = parseQueryString(queryString);
76
+ params.queryString = queryString ? '?' + queryString : '';
77
+ return params;
78
+ }
79
+ /** True se a URL é um link do link-service (host = linkDomain) com slug — ex.: l.solomon.com.br/2leihlnl */
80
+ export function isSolomonLink(url, linkDomain) {
81
+ if (!url || !linkDomain)
82
+ return false;
83
+ const noScheme = url.replace(/^https?:\/\//i, '');
84
+ const host = noScheme.split('/')[0].split('?')[0].toLowerCase();
85
+ const path = noScheme.split('/').slice(1).join('/').split('?')[0];
86
+ return host === linkDomain.toLowerCase() && !!path && !path.startsWith('.well-known');
87
+ }
88
+ /** Extrai o corpo JSON de uma HttpResponse do Bifrost (axios-like `data`, ou `body`/string). */
89
+ function extractJson(resp) {
90
+ var _a, _b, _c;
91
+ if (!resp)
92
+ return null;
93
+ const status = (_a = resp.status) !== null && _a !== void 0 ? _a : resp.statusCode;
94
+ if (typeof status === 'number' && (status < 200 || status >= 300))
95
+ return null;
96
+ const raw = (_c = (_b = resp.data) !== null && _b !== void 0 ? _b : resp.body) !== null && _c !== void 0 ? _c : resp;
97
+ if (raw && typeof raw === 'object')
98
+ return raw;
99
+ if (typeof raw === 'string') {
100
+ try {
101
+ return JSON.parse(raw);
102
+ }
103
+ catch (_d) {
104
+ return null;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ export async function resolveSolomonLink(url) {
110
+ try {
111
+ const sep = url.includes('?') ? '&' : '?';
112
+ const resp = await Eitri.http.get(`${url}${sep}mode=resolve`, {
113
+ headers: { Accept: 'application/json' },
114
+ });
115
+ const d = extractJson(resp);
116
+ if (!d)
117
+ return null;
118
+ return {
119
+ params: Object.assign(Object.assign({}, emptyParams()), { utm_source: d.utm_source || '', utm_medium: d.utm_medium || '', utm_campaign: d.utm_campaign || '', utm_term: d.utm_term || '', utm_content: d.utm_content || '', sol_source: d.sol_source || '', sol_medium: d.sol_medium || '', sol_campaign: d.sol_campaign || '', sol_content: d.sol_content || '', click_id: d.click_id || '' }),
120
+ deep_link_value: d.deep_link_value || '',
121
+ };
122
+ }
123
+ catch (_a) {
124
+ return null;
125
+ }
126
+ }
127
+ export function parseInstallReferrer(referrer) {
128
+ if (!referrer)
129
+ return emptyParams();
130
+ const trimmed = referrer.trim();
131
+ if (trimmed.includes('=')) {
132
+ return parseQueryString(trimmed);
133
+ }
134
+ if (CLICK_ID_RE.test(trimmed)) {
135
+ return Object.assign(Object.assign({}, emptyParams()), { click_id: trimmed });
136
+ }
137
+ return emptyParams();
138
+ }
139
+ //# sourceMappingURL=deep-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-link.js","sourceRoot":"","sources":["../../src/attribution/deep-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { StorageAdapter } from '../storage/adapter';
2
+ export declare function updateUtmsTrack(storage: StorageAdapter, eventData: {
3
+ utm_source: string;
4
+ utm_medium: string;
5
+ utm_campaign: string;
6
+ utm_term: string;
7
+ utm_content: string;
8
+ sol_source: string;
9
+ sol_medium: string;
10
+ sol_campaign: string;
11
+ sol_content: string;
12
+ }): Promise<string>;
13
+ export declare function getUtmsTrack(storage: StorageAdapter): Promise<string>;
14
+ //# sourceMappingURL=touchpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchpoint.d.ts","sourceRoot":"","sources":["../../src/attribution/touchpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E"}
@@ -0,0 +1,28 @@
1
+ const UTMS_TRACK_KEY = '@solomon/utms_track';
2
+ export async function updateUtmsTrack(storage, eventData) {
3
+ const utmEntries = {
4
+ utm_source: eventData.utm_source,
5
+ utm_medium: eventData.utm_medium,
6
+ utm_campaign: eventData.utm_campaign,
7
+ utm_term: eventData.utm_term,
8
+ utm_content: eventData.utm_content,
9
+ sol_source: eventData.sol_source,
10
+ sol_medium: eventData.sol_medium,
11
+ sol_campaign: eventData.sol_campaign,
12
+ sol_content: eventData.sol_content,
13
+ };
14
+ // Build utmsTrack string only from eventData (which comes from getAllUtms, the single source of truth)
15
+ const parts = [];
16
+ for (const key in utmEntries) {
17
+ if (utmEntries[key]) {
18
+ parts.push(key + '=' + utmEntries[key]);
19
+ }
20
+ }
21
+ const utmsTrackString = parts.join('&');
22
+ await storage.setItem(UTMS_TRACK_KEY, utmsTrackString);
23
+ return utmsTrackString;
24
+ }
25
+ export async function getUtmsTrack(storage) {
26
+ return (await storage.getItem(UTMS_TRACK_KEY)) || '';
27
+ }
28
+ //# sourceMappingURL=touchpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchpoint.js","sourceRoot":"","sources":["../../src/attribution/touchpoint.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,SAUC;IAED,MAAM,UAAU,GAA2B;QACzC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,WAAW,EAAE,SAAS,CAAC,WAAW;KACnC,CAAC;IAEF,uGAAuG;IACvG,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAEvD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAuB;IACxD,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { StorageAdapter } from '../storage/adapter';
2
+ import { DeepLinkParams } from './deep-link';
3
+ export declare function storeUtms(storage: StorageAdapter, params: DeepLinkParams): Promise<void>;
4
+ export declare function getUtm(storage: StorageAdapter, key: string): Promise<string>;
5
+ export interface AllUtms {
6
+ utm_source: string;
7
+ utm_medium: string;
8
+ utm_campaign: string;
9
+ utm_term: string;
10
+ utm_content: string;
11
+ sol_source: string;
12
+ sol_medium: string;
13
+ sol_campaign: string;
14
+ sol_content: string;
15
+ fbclid: string;
16
+ click_id: string;
17
+ }
18
+ export declare function getAllUtms(storage: StorageAdapter): Promise<AllUtms>;
19
+ //# sourceMappingURL=utm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utm.d.ts","sourceRoot":"","sources":["../../src/attribution/utm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,wBAAsB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB9F;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlF;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB1E"}
@@ -0,0 +1,47 @@
1
+ const UTM_KEYS = [
2
+ 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
3
+ 'sol_source', 'sol_medium', 'sol_campaign', 'sol_content',
4
+ ];
5
+ const STORAGE_PREFIX = '@solomon/';
6
+ const FBCLID_KEY = '@solomon/fbclid';
7
+ const CLICK_ID_KEY = '@solomon/click_id';
8
+ export async function storeUtms(storage, params) {
9
+ const promises = [];
10
+ for (const key of UTM_KEYS) {
11
+ if (params[key]) {
12
+ promises.push(storage.setItem(STORAGE_PREFIX + key, params[key]));
13
+ }
14
+ }
15
+ if (params.fbclid) {
16
+ promises.push(storage.setItem(FBCLID_KEY, params.fbclid));
17
+ }
18
+ if (params.click_id) {
19
+ promises.push(storage.setItem(CLICK_ID_KEY, params.click_id));
20
+ }
21
+ await Promise.all(promises);
22
+ }
23
+ export async function getUtm(storage, key) {
24
+ const value = await storage.getItem(STORAGE_PREFIX + key);
25
+ return value || '';
26
+ }
27
+ export async function getAllUtms(storage) {
28
+ const [utm_source, utm_medium, utm_campaign, utm_term, utm_content, sol_source, sol_medium, sol_campaign, sol_content, fbclid, click_id,] = await Promise.all([
29
+ getUtm(storage, 'utm_source'),
30
+ getUtm(storage, 'utm_medium'),
31
+ getUtm(storage, 'utm_campaign'),
32
+ getUtm(storage, 'utm_term'),
33
+ getUtm(storage, 'utm_content'),
34
+ getUtm(storage, 'sol_source'),
35
+ getUtm(storage, 'sol_medium'),
36
+ getUtm(storage, 'sol_campaign'),
37
+ getUtm(storage, 'sol_content'),
38
+ storage.getItem(FBCLID_KEY).then((v) => v || ''),
39
+ storage.getItem(CLICK_ID_KEY).then((v) => v || ''),
40
+ ]);
41
+ return {
42
+ utm_source, utm_medium, utm_campaign, utm_term, utm_content,
43
+ sol_source, sol_medium, sol_campaign, sol_content,
44
+ fbclid, click_id,
45
+ };
46
+ }
47
+ //# sourceMappingURL=utm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utm.js","sourceRoot":"","sources":["../../src/attribution/utm.ts"],"names":[],"mappings":"AAGA,MAAM,QAAQ,GAAG;IACf,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa;IACrE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa;CACjD,CAAC;AAEX,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB,EAAE,MAAsB;IAC7E,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAuB,EAAE,GAAW;IAC/D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;IAC1D,OAAO,KAAK,IAAI,EAAE,CAAC;AACrB,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB;IACtD,MAAM,CACJ,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAC3D,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EACjD,MAAM,EAAE,QAAQ,EACjB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;QAC/B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3B,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;QAC/B,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KACnD,CAAC,CAAC;IAEH,OAAO;QACL,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW;QAC3D,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW;QACjD,MAAM,EAAE,QAAQ;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { SDKConfig, CustomAliases } from './types';
2
+ import { SolomonEvent, SolomonPayload } from './events';
3
+ export declare class SolomonSDK {
4
+ private config;
5
+ private storage;
6
+ private appIdentifier;
7
+ private currentScreen;
8
+ private previousScreen;
9
+ private queryString;
10
+ private deepLinkValue;
11
+ private installReferrer;
12
+ private deviceInfoCache;
13
+ private stableId;
14
+ private initPromise;
15
+ private installEmitted;
16
+ constructor(config: SDKConfig);
17
+ private _init;
18
+ private _emitInstallEvent;
19
+ setScreenName(name: string): void;
20
+ setSessionAttributes(attributes: Record<string, any> | null | undefined): Promise<void>;
21
+ applyInitParams(info: Record<string, any> | null | undefined): Promise<void>;
22
+ private _buildQueryString;
23
+ handleDeepLink(url: string): void;
24
+ getDeepLinkValue(): string;
25
+ setInstallState(state: {
26
+ isInstall?: boolean;
27
+ isReinstall?: boolean;
28
+ } | null | undefined): Promise<void>;
29
+ track<E extends SolomonEvent>(event: E, payload?: SolomonPayload<E>, aliases?: CustomAliases): Promise<void>;
30
+ private _buildEventPayload;
31
+ flush(): Promise<void>;
32
+ destroy(): void;
33
+ }
34
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA2BxD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,cAAc,CAAkB;gBAE5B,MAAM,EAAE,SAAS;YAaf,KAAK;YAiDL,iBAAiB;IA8C/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU3B,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CvF,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlF,OAAO,CAAC,iBAAiB;IAWzB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAoCjC,gBAAgB,IAAI,MAAM;IAIpB,eAAe,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxG,KAAK,CAAC,CAAC,SAAS,YAAY,EAChC,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC;IAsDhB,OAAO,CAAC,kBAAkB;IA0BpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,IAAI,IAAI;CAKhB"}