@onramp-sdk/web 0.2.3 → 0.2.5
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/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +128 -50
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ interface InitConfig {
|
|
|
2
2
|
apiKey: string;
|
|
3
3
|
host?: string;
|
|
4
4
|
appVersion?: string;
|
|
5
|
+
/** Quit-and-return within this window continues the same session. Default 30 min. */
|
|
6
|
+
sessionTimeoutMs?: number;
|
|
7
|
+
/** Anonymous ID is rotated after this many milliseconds. Default 365 days. */
|
|
8
|
+
anonymousIdMaxAgeMs?: number;
|
|
5
9
|
}
|
|
6
10
|
export declare const OnRamp: {
|
|
7
11
|
init(config: InitConfig): void;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4GA,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,8EAA8E;IAC9E,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAUD,eAAO,MAAM,MAAM;iBACJ,UAAU,GAAG,IAAI;mBAyDlB,MAAM,YACN;QACR,wEAAwE;QACxE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;KACvD,GACA,IAAI;kBA4BO,IAAI;aAIT,OAAO,CAAC,IAAI,CAAC;IAItB;;;;OAIG;cACO;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;4BAI7C,OAAO;CAG7B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OnRamp = void 0;
|
|
4
4
|
const core_1 = require("@onramp-sdk/core");
|
|
5
|
-
const
|
|
5
|
+
const ANON_KEY = '@onramp/anonymous_id';
|
|
6
|
+
const SESSION_KEY = '@onramp/session';
|
|
7
|
+
const DEFAULT_SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 min
|
|
8
|
+
const DEFAULT_ANON_MAX_AGE_MS = 365 * 24 * 60 * 60 * 1000; // 365 days
|
|
6
9
|
function uuid() {
|
|
7
10
|
if (typeof crypto !== 'undefined' && crypto.randomUUID)
|
|
8
11
|
return crypto.randomUUID();
|
|
@@ -11,26 +14,71 @@ function uuid() {
|
|
|
11
14
|
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
|
12
15
|
});
|
|
13
16
|
}
|
|
14
|
-
function
|
|
17
|
+
function safeGet(key) {
|
|
15
18
|
try {
|
|
16
|
-
|
|
17
|
-
if (existing)
|
|
18
|
-
return existing;
|
|
19
|
-
const id = uuid();
|
|
20
|
-
localStorage.setItem(STORAGE_KEY, id);
|
|
21
|
-
return id;
|
|
19
|
+
return localStorage.getItem(key);
|
|
22
20
|
}
|
|
23
21
|
catch {
|
|
24
|
-
|
|
25
|
-
return uuid();
|
|
22
|
+
return null;
|
|
26
23
|
}
|
|
27
24
|
}
|
|
25
|
+
function safeSet(key, value) {
|
|
26
|
+
try {
|
|
27
|
+
localStorage.setItem(key, value);
|
|
28
|
+
}
|
|
29
|
+
catch { /* private mode / quota */ }
|
|
30
|
+
}
|
|
31
|
+
function getOrCreateAnonymousId(maxAgeMs) {
|
|
32
|
+
const raw = safeGet(ANON_KEY);
|
|
33
|
+
if (raw) {
|
|
34
|
+
try {
|
|
35
|
+
const parsed = JSON.parse(raw);
|
|
36
|
+
if (Date.now() - parsed.createdAt < maxAgeMs)
|
|
37
|
+
return parsed.id;
|
|
38
|
+
// expired — fall through to generate a new one
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// legacy plain-string ID — migrate to JSON format, age clock starts now
|
|
42
|
+
const migrated = { id: raw, createdAt: Date.now() };
|
|
43
|
+
safeSet(ANON_KEY, JSON.stringify(migrated));
|
|
44
|
+
return migrated.id;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const newId = { id: uuid(), createdAt: Date.now() };
|
|
48
|
+
safeSet(ANON_KEY, JSON.stringify(newId));
|
|
49
|
+
return newId.id;
|
|
50
|
+
}
|
|
51
|
+
function loadSession() {
|
|
52
|
+
const raw = safeGet(SESSION_KEY);
|
|
53
|
+
if (!raw)
|
|
54
|
+
return null;
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(raw);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function persistSession() {
|
|
63
|
+
if (!currentSessionId)
|
|
64
|
+
return;
|
|
65
|
+
safeSet(SESSION_KEY, JSON.stringify({ id: currentSessionId, lastActive, stepCounter }));
|
|
66
|
+
}
|
|
67
|
+
function rotateSession() {
|
|
68
|
+
currentSessionId = uuid();
|
|
69
|
+
stepCounter = 0;
|
|
70
|
+
lastActive = Date.now();
|
|
71
|
+
persistSession();
|
|
72
|
+
}
|
|
73
|
+
function ensureSessionFresh() {
|
|
74
|
+
if (!currentSessionId || Date.now() - lastActive > sessionTimeoutMs)
|
|
75
|
+
rotateSession();
|
|
76
|
+
}
|
|
28
77
|
function parseUA() {
|
|
29
78
|
if (typeof navigator === 'undefined')
|
|
30
79
|
return { osVersion: 'web', browser: '' };
|
|
31
80
|
const ua = navigator.userAgent;
|
|
32
|
-
let os = 'web';
|
|
33
|
-
let osVer = '';
|
|
81
|
+
let os = 'web', osVer = '';
|
|
34
82
|
if (/iPad/.test(ua)) {
|
|
35
83
|
os = 'ipados';
|
|
36
84
|
osVer = (ua.match(/OS (\d+[_.]\d+)/) ?? [])[1]?.replace('_', '.') ?? '';
|
|
@@ -56,36 +104,53 @@ function parseUA() {
|
|
|
56
104
|
os = 'linux';
|
|
57
105
|
}
|
|
58
106
|
let browser = '';
|
|
59
|
-
if (/Edg\/(\d+)/.test(ua))
|
|
107
|
+
if (/Edg\/(\d+)/.test(ua))
|
|
60
108
|
browser = `Edge ${(ua.match(/Edg\/(\d+)/) ?? [])[1] ?? ''}`;
|
|
61
|
-
|
|
62
|
-
else if (/OPR\/(\d+)/.test(ua)) {
|
|
109
|
+
else if (/OPR\/(\d+)/.test(ua))
|
|
63
110
|
browser = `Opera ${(ua.match(/OPR\/(\d+)/) ?? [])[1] ?? ''}`;
|
|
64
|
-
|
|
65
|
-
else if (/Firefox\/(\d+)/.test(ua)) {
|
|
111
|
+
else if (/Firefox\/(\d+)/.test(ua))
|
|
66
112
|
browser = `Firefox ${(ua.match(/Firefox\/(\d+)/) ?? [])[1] ?? ''}`;
|
|
67
|
-
|
|
68
|
-
else if (/Chrome\/(\d+)/.test(ua)) {
|
|
113
|
+
else if (/Chrome\/(\d+)/.test(ua))
|
|
69
114
|
browser = `Chrome ${(ua.match(/Chrome\/(\d+)/) ?? [])[1] ?? ''}`;
|
|
70
|
-
|
|
71
|
-
else if (/Version\/(\d+).*Safari/.test(ua)) {
|
|
115
|
+
else if (/Version\/(\d+).*Safari/.test(ua))
|
|
72
116
|
browser = `Safari ${(ua.match(/Version\/(\d+)/) ?? [])[1] ?? ''}`;
|
|
73
|
-
|
|
74
|
-
else if (/Safari\//.test(ua)) {
|
|
117
|
+
else if (/Safari\//.test(ua))
|
|
75
118
|
browser = 'Safari';
|
|
76
|
-
}
|
|
77
119
|
return { osVersion: osVer ? `${os} ${osVer}` : os, browser };
|
|
78
120
|
}
|
|
121
|
+
function getDeviceType() {
|
|
122
|
+
if (typeof navigator === 'undefined')
|
|
123
|
+
return 'desktop';
|
|
124
|
+
const ua = navigator.userAgent;
|
|
125
|
+
if (/iPad|Tablet|(Android(?!.*Mobile))/i.test(ua))
|
|
126
|
+
return 'tablet';
|
|
127
|
+
if (/Mobi|Android|iPhone|iPod/i.test(ua))
|
|
128
|
+
return 'phone';
|
|
129
|
+
return 'desktop';
|
|
130
|
+
}
|
|
79
131
|
let client = null;
|
|
80
132
|
let currentSessionId = null;
|
|
81
133
|
let anonymousId = null;
|
|
82
134
|
let stepCounter = 0;
|
|
135
|
+
let lastActive = 0;
|
|
83
136
|
let lastHeartbeatTs = 0;
|
|
137
|
+
let sessionTimeoutMs = DEFAULT_SESSION_TIMEOUT_MS;
|
|
84
138
|
exports.OnRamp = {
|
|
85
139
|
init(config) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
140
|
+
if (typeof window === 'undefined')
|
|
141
|
+
return; // SSR guard
|
|
142
|
+
sessionTimeoutMs = config.sessionTimeoutMs ?? DEFAULT_SESSION_TIMEOUT_MS;
|
|
143
|
+
anonymousId = getOrCreateAnonymousId(config.anonymousIdMaxAgeMs ?? DEFAULT_ANON_MAX_AGE_MS);
|
|
144
|
+
// Resume previous session if user returned within the timeout window
|
|
145
|
+
const stored = loadSession();
|
|
146
|
+
if (stored && Date.now() - stored.lastActive < sessionTimeoutMs) {
|
|
147
|
+
currentSessionId = stored.id;
|
|
148
|
+
stepCounter = stored.stepCounter;
|
|
149
|
+
lastActive = stored.lastActive;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
rotateSession();
|
|
153
|
+
}
|
|
89
154
|
client = new core_1.OnRampClient({
|
|
90
155
|
apiKey: config.apiKey,
|
|
91
156
|
host: config.host,
|
|
@@ -93,33 +158,47 @@ exports.OnRamp = {
|
|
|
93
158
|
appVersion: config.appVersion ?? null,
|
|
94
159
|
uuidFn: uuid,
|
|
95
160
|
});
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
161
|
+
function sendHeartbeat() {
|
|
162
|
+
if (!client || !currentSessionId || !anonymousId)
|
|
163
|
+
return;
|
|
164
|
+
const now = Date.now();
|
|
165
|
+
if (now - lastHeartbeatTs < 500)
|
|
166
|
+
return;
|
|
167
|
+
lastHeartbeatTs = now;
|
|
168
|
+
client.beacon({ sessionId: currentSessionId, anonymousId });
|
|
169
|
+
}
|
|
170
|
+
window.addEventListener('pagehide', () => {
|
|
171
|
+
lastActive = Date.now();
|
|
172
|
+
persistSession();
|
|
173
|
+
sendHeartbeat();
|
|
174
|
+
client?.flush();
|
|
175
|
+
});
|
|
176
|
+
document.addEventListener('visibilitychange', () => {
|
|
177
|
+
if (document.visibilityState === 'hidden') {
|
|
178
|
+
lastActive = Date.now();
|
|
179
|
+
persistSession();
|
|
107
180
|
sendHeartbeat();
|
|
108
181
|
client?.flush();
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
ensureSessionFresh();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
// Periodic heartbeat so session duration is accurate on long-idle tabs
|
|
188
|
+
setInterval(() => {
|
|
189
|
+
if (document.visibilityState !== 'hidden')
|
|
190
|
+
sendHeartbeat();
|
|
191
|
+
}, 5_000);
|
|
117
192
|
},
|
|
118
193
|
step(stepName, options) {
|
|
119
194
|
if (!client || !currentSessionId || !anonymousId) {
|
|
120
195
|
console.warn('[OnRamp] call OnRamp.init() before tracking steps');
|
|
121
196
|
return;
|
|
122
197
|
}
|
|
198
|
+
ensureSessionFresh();
|
|
199
|
+
const index = stepCounter++;
|
|
200
|
+
lastActive = Date.now();
|
|
201
|
+
persistSession();
|
|
123
202
|
const { osVersion, browser } = parseUA();
|
|
124
203
|
const extraProps = {};
|
|
125
204
|
if (browser)
|
|
@@ -128,17 +207,16 @@ exports.OnRamp = {
|
|
|
128
207
|
sessionId: currentSessionId,
|
|
129
208
|
anonymousId,
|
|
130
209
|
stepName,
|
|
131
|
-
stepIndex:
|
|
210
|
+
stepIndex: index,
|
|
132
211
|
osVersion,
|
|
133
|
-
deviceType:
|
|
212
|
+
deviceType: getDeviceType(),
|
|
134
213
|
properties: Object.keys(extraProps).length || options?.properties
|
|
135
214
|
? { ...extraProps, ...options?.properties }
|
|
136
215
|
: null,
|
|
137
216
|
});
|
|
138
217
|
},
|
|
139
218
|
newSession() {
|
|
140
|
-
|
|
141
|
-
stepCounter = 0;
|
|
219
|
+
rotateSession();
|
|
142
220
|
},
|
|
143
221
|
flush() {
|
|
144
222
|
return client?.flush() ?? Promise.resolve();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAE/C,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|