@databuddy/sdk 2.1.4 → 2.1.6
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/core/index.mjs +3 -3
- package/dist/react/index.mjs +43 -191
- package/dist/shared/@databuddy/{sdk.Bw8x6D82.mjs → sdk.CG1QeYl0.mjs} +1 -1
- package/dist/shared/@databuddy/{sdk.DEhMQIwL.mjs → sdk.RYpOP8Ko.mjs} +1 -1
- package/dist/vue/index.d.mts +1 -1
- package/dist/vue/index.d.ts +1 -1
- package/dist/vue/index.mjs +1 -1
- package/package.json +6 -10
package/dist/core/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { D as Databuddy$1 } from '../shared/@databuddy/sdk.
|
|
2
|
-
export { d as detectClientId } from '../shared/@databuddy/sdk.
|
|
3
|
-
export { c as createScript, i as isScriptInjected } from '../shared/@databuddy/sdk.
|
|
1
|
+
import { D as Databuddy$1 } from '../shared/@databuddy/sdk.CG1QeYl0.mjs';
|
|
2
|
+
export { d as detectClientId } from '../shared/@databuddy/sdk.CG1QeYl0.mjs';
|
|
3
|
+
export { c as createScript, i as isScriptInjected } from '../shared/@databuddy/sdk.RYpOP8Ko.mjs';
|
|
4
4
|
|
|
5
5
|
function isTrackerAvailable() {
|
|
6
6
|
return typeof window !== "undefined" && (!!window.databuddy || !!window.db);
|
package/dist/react/index.mjs
CHANGED
|
@@ -1,118 +1,42 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
export { D as Databuddy } from '../shared/@databuddy/sdk.
|
|
3
|
+
export { D as Databuddy } from '../shared/@databuddy/sdk.CG1QeYl0.mjs';
|
|
4
4
|
import { createStore, atom, Provider, useAtom } from 'jotai';
|
|
5
5
|
import { useEffect, createElement } from 'react';
|
|
6
|
-
import '../shared/@databuddy/sdk.
|
|
6
|
+
import '../shared/@databuddy/sdk.RYpOP8Ko.mjs';
|
|
7
7
|
|
|
8
8
|
class FlagStorage {
|
|
9
|
-
dbName = "databuddy-flags";
|
|
10
|
-
version = 1;
|
|
11
|
-
storeName = "flags";
|
|
12
9
|
ttl = 24 * 60 * 60 * 1e3;
|
|
13
10
|
// 24 hours in milliseconds
|
|
14
11
|
async get(key) {
|
|
15
|
-
|
|
16
|
-
const db = await this.openDB();
|
|
17
|
-
const transaction = db.transaction(this.storeName, "readonly");
|
|
18
|
-
const store = transaction.objectStore(this.storeName);
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
const request = store.get(key);
|
|
21
|
-
request.onsuccess = () => {
|
|
22
|
-
const result = request.result;
|
|
23
|
-
if (result && this.isExpired(result.expiresAt)) {
|
|
24
|
-
this.delete(key);
|
|
25
|
-
resolve(null);
|
|
26
|
-
} else {
|
|
27
|
-
resolve(result?.value);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
request.onerror = () => resolve(null);
|
|
31
|
-
});
|
|
32
|
-
} catch {
|
|
33
|
-
return this.getFromLocalStorage(key);
|
|
34
|
-
}
|
|
12
|
+
return this.getFromLocalStorage(key);
|
|
35
13
|
}
|
|
36
14
|
async set(key, value) {
|
|
37
|
-
|
|
38
|
-
const db = await this.openDB();
|
|
39
|
-
const transaction = db.transaction(this.storeName, "readwrite");
|
|
40
|
-
const store = transaction.objectStore(this.storeName);
|
|
41
|
-
const expiresAt = Date.now() + this.ttl;
|
|
42
|
-
store.put({ key, value, timestamp: Date.now(), expiresAt });
|
|
43
|
-
} catch {
|
|
44
|
-
this.setToLocalStorage(key, value);
|
|
45
|
-
}
|
|
15
|
+
this.setToLocalStorage(key, value);
|
|
46
16
|
}
|
|
47
17
|
async getAll() {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
} else {
|
|
61
|
-
result[item.key] = item.value;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (expiredKeys.length > 0) {
|
|
65
|
-
this.deleteMultiple(expiredKeys);
|
|
66
|
-
}
|
|
67
|
-
resolve(result);
|
|
68
|
-
};
|
|
69
|
-
request.onerror = () => resolve({});
|
|
70
|
-
});
|
|
71
|
-
} catch {
|
|
72
|
-
const result = {};
|
|
73
|
-
const now = Date.now();
|
|
74
|
-
Object.keys(localStorage).filter((key) => key.startsWith("db-flag-")).forEach((key) => {
|
|
75
|
-
const flagKey = key.replace("db-flag-", "");
|
|
76
|
-
try {
|
|
77
|
-
const item = localStorage.getItem(key);
|
|
78
|
-
if (item) {
|
|
79
|
-
const parsed = JSON.parse(item);
|
|
80
|
-
if (parsed.expiresAt && now > parsed.expiresAt) {
|
|
81
|
-
localStorage.removeItem(key);
|
|
82
|
-
} else {
|
|
83
|
-
result[flagKey] = parsed.value || parsed;
|
|
84
|
-
}
|
|
18
|
+
const result = {};
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
Object.keys(localStorage).filter((key) => key.startsWith("db-flag-")).forEach((key) => {
|
|
21
|
+
const flagKey = key.replace("db-flag-", "");
|
|
22
|
+
try {
|
|
23
|
+
const item = localStorage.getItem(key);
|
|
24
|
+
if (item) {
|
|
25
|
+
const parsed = JSON.parse(item);
|
|
26
|
+
if (parsed.expiresAt && now > parsed.expiresAt) {
|
|
27
|
+
localStorage.removeItem(key);
|
|
28
|
+
} else {
|
|
29
|
+
result[flagKey] = parsed.value || parsed;
|
|
85
30
|
}
|
|
86
|
-
} catch {
|
|
87
31
|
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
}
|
|
32
|
+
} catch {
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return result;
|
|
91
36
|
}
|
|
92
37
|
async clear() {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const transaction = db.transaction(this.storeName, "readwrite");
|
|
96
|
-
const store = transaction.objectStore(this.storeName);
|
|
97
|
-
store.clear();
|
|
98
|
-
} catch {
|
|
99
|
-
Object.keys(localStorage).filter((key) => key.startsWith("db-flag-")).forEach((key) => {
|
|
100
|
-
localStorage.removeItem(key);
|
|
101
|
-
});
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async openDB() {
|
|
106
|
-
return new Promise((resolve, reject) => {
|
|
107
|
-
const request = indexedDB.open(this.dbName, this.version);
|
|
108
|
-
request.onerror = () => reject(request.error);
|
|
109
|
-
request.onsuccess = () => resolve(request.result);
|
|
110
|
-
request.onupgradeneeded = () => {
|
|
111
|
-
const db = request.result;
|
|
112
|
-
if (!db.objectStoreNames.contains(this.storeName)) {
|
|
113
|
-
db.createObjectStore(this.storeName, { keyPath: "key" });
|
|
114
|
-
}
|
|
115
|
-
};
|
|
38
|
+
Object.keys(localStorage).filter((key) => key.startsWith("db-flag-")).forEach((key) => {
|
|
39
|
+
localStorage.removeItem(key);
|
|
116
40
|
});
|
|
117
41
|
}
|
|
118
42
|
getFromLocalStorage(key) {
|
|
@@ -152,27 +76,11 @@ class FlagStorage {
|
|
|
152
76
|
return Date.now() > expiresAt;
|
|
153
77
|
}
|
|
154
78
|
async delete(key) {
|
|
155
|
-
|
|
156
|
-
const db = await this.openDB();
|
|
157
|
-
const transaction = db.transaction(this.storeName, "readwrite");
|
|
158
|
-
const store = transaction.objectStore(this.storeName);
|
|
159
|
-
store.delete(key);
|
|
160
|
-
} catch {
|
|
161
|
-
localStorage.removeItem(`db-flag-${key}`);
|
|
162
|
-
}
|
|
79
|
+
localStorage.removeItem(`db-flag-${key}`);
|
|
163
80
|
}
|
|
164
81
|
async deleteMultiple(keys) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const transaction = db.transaction(this.storeName, "readwrite");
|
|
168
|
-
const store = transaction.objectStore(this.storeName);
|
|
169
|
-
for (const key of keys) {
|
|
170
|
-
store.delete(key);
|
|
171
|
-
}
|
|
172
|
-
} catch {
|
|
173
|
-
for (const key of keys) {
|
|
174
|
-
localStorage.removeItem(`db-flag-${key}`);
|
|
175
|
-
}
|
|
82
|
+
for (const key of keys) {
|
|
83
|
+
localStorage.removeItem(`db-flag-${key}`);
|
|
176
84
|
}
|
|
177
85
|
}
|
|
178
86
|
async setAll(flags) {
|
|
@@ -188,44 +96,20 @@ class FlagStorage {
|
|
|
188
96
|
}
|
|
189
97
|
}
|
|
190
98
|
async cleanupExpired() {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
for (const item of request.result || []) {
|
|
200
|
-
if (this.isExpired(item.expiresAt)) {
|
|
201
|
-
expiredKeys.push(item.key);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (expiredKeys.length > 0) {
|
|
205
|
-
this.deleteMultiple(expiredKeys).then(() => resolve()).catch(() => resolve());
|
|
206
|
-
} else {
|
|
207
|
-
resolve();
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
request.onerror = () => resolve();
|
|
211
|
-
});
|
|
212
|
-
} catch {
|
|
213
|
-
this.cleanupExpired();
|
|
214
|
-
const now = Date.now();
|
|
215
|
-
Object.keys(localStorage).filter((key) => key.startsWith("db-flag-")).forEach((key) => {
|
|
216
|
-
try {
|
|
217
|
-
const item = localStorage.getItem(key);
|
|
218
|
-
if (item) {
|
|
219
|
-
const parsed = JSON.parse(item);
|
|
220
|
-
if (parsed.expiresAt && now > parsed.expiresAt) {
|
|
221
|
-
localStorage.removeItem(key);
|
|
222
|
-
}
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
Object.keys(localStorage).filter((key) => key.startsWith("db-flag-")).forEach((key) => {
|
|
101
|
+
try {
|
|
102
|
+
const item = localStorage.getItem(key);
|
|
103
|
+
if (item) {
|
|
104
|
+
const parsed = JSON.parse(item);
|
|
105
|
+
if (parsed.expiresAt && now > parsed.expiresAt) {
|
|
106
|
+
localStorage.removeItem(key);
|
|
223
107
|
}
|
|
224
|
-
} catch {
|
|
225
|
-
localStorage.removeItem(key);
|
|
226
108
|
}
|
|
227
|
-
}
|
|
228
|
-
|
|
109
|
+
} catch {
|
|
110
|
+
localStorage.removeItem(key);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
229
113
|
}
|
|
230
114
|
}
|
|
231
115
|
const flagStorage = new FlagStorage();
|
|
@@ -285,54 +169,22 @@ function FlagsProvider({ children, ...config }) {
|
|
|
285
169
|
if (config2.skipStorage) {
|
|
286
170
|
return;
|
|
287
171
|
}
|
|
288
|
-
try {
|
|
289
|
-
const cachedFlags = {};
|
|
290
|
-
const flagKeys = Object.keys(localStorage).filter(
|
|
291
|
-
(key) => key.startsWith("db-flag-")
|
|
292
|
-
);
|
|
293
|
-
for (const key of flagKeys) {
|
|
294
|
-
const flagKey = key.replace("db-flag-", "");
|
|
295
|
-
try {
|
|
296
|
-
const value = localStorage.getItem(key);
|
|
297
|
-
if (value) {
|
|
298
|
-
cachedFlags[flagKey] = JSON.parse(value);
|
|
299
|
-
}
|
|
300
|
-
} catch {
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
if (Object.keys(cachedFlags).length > 0) {
|
|
304
|
-
flagsStore.set(memoryFlagsAtom, cachedFlags);
|
|
305
|
-
if (config2.debug) {
|
|
306
|
-
console.log(
|
|
307
|
-
"[Databuddy Flags] Loaded cached flags immediately:",
|
|
308
|
-
Object.keys(cachedFlags)
|
|
309
|
-
);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
} catch (err) {
|
|
313
|
-
if (config2.debug) {
|
|
314
|
-
console.warn(
|
|
315
|
-
"[Databuddy Flags] Error loading cached flags immediately:",
|
|
316
|
-
err
|
|
317
|
-
);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
172
|
flagStorage.getAll().then((cachedFlags) => {
|
|
321
173
|
if (Object.keys(cachedFlags).length > 0) {
|
|
322
|
-
flagsStore.set(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
174
|
+
flagsStore.set(
|
|
175
|
+
memoryFlagsAtom,
|
|
176
|
+
cachedFlags
|
|
177
|
+
);
|
|
326
178
|
if (config2.debug) {
|
|
327
179
|
console.log(
|
|
328
|
-
"[Databuddy Flags] Loaded cached flags
|
|
180
|
+
"[Databuddy Flags] Loaded cached flags:",
|
|
329
181
|
Object.keys(cachedFlags)
|
|
330
182
|
);
|
|
331
183
|
}
|
|
332
184
|
}
|
|
333
185
|
}).catch((err) => {
|
|
334
186
|
if (config2.debug) {
|
|
335
|
-
console.warn("[Databuddy Flags] Error loading
|
|
187
|
+
console.warn("[Databuddy Flags] Error loading cached flags:", err);
|
|
336
188
|
}
|
|
337
189
|
});
|
|
338
190
|
};
|
package/dist/vue/index.d.mts
CHANGED
|
@@ -146,11 +146,11 @@ declare const Databuddy: vue.DefineComponent<{
|
|
|
146
146
|
required: false;
|
|
147
147
|
} | undefined;
|
|
148
148
|
}, () => null, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<{} & {
|
|
149
|
+
sdk?: string | undefined;
|
|
149
150
|
clientId?: string | undefined;
|
|
150
151
|
clientSecret?: string | undefined;
|
|
151
152
|
apiUrl?: string | undefined;
|
|
152
153
|
scriptUrl?: string | undefined;
|
|
153
|
-
sdk?: string | undefined;
|
|
154
154
|
sdkVersion?: string | undefined;
|
|
155
155
|
disabled?: boolean | undefined;
|
|
156
156
|
debug?: boolean | undefined;
|
package/dist/vue/index.d.ts
CHANGED
|
@@ -146,11 +146,11 @@ declare const Databuddy: vue.DefineComponent<{
|
|
|
146
146
|
required: false;
|
|
147
147
|
} | undefined;
|
|
148
148
|
}, () => null, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<{} & {
|
|
149
|
+
sdk?: string | undefined;
|
|
149
150
|
clientId?: string | undefined;
|
|
150
151
|
clientSecret?: string | undefined;
|
|
151
152
|
apiUrl?: string | undefined;
|
|
152
153
|
scriptUrl?: string | undefined;
|
|
153
|
-
sdk?: string | undefined;
|
|
154
154
|
sdkVersion?: string | undefined;
|
|
155
155
|
disabled?: boolean | undefined;
|
|
156
156
|
debug?: boolean | undefined;
|
package/dist/vue/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, onMounted, onUnmounted, watch } from 'vue';
|
|
2
|
-
import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.
|
|
2
|
+
import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.RYpOP8Ko.mjs';
|
|
3
3
|
|
|
4
4
|
const Databuddy = defineComponent({
|
|
5
5
|
props: {},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@databuddy/sdk",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.6",
|
|
4
4
|
"description": "Official Databuddy Analytics SDK",
|
|
5
5
|
"main": "./dist/core/index.mjs",
|
|
6
6
|
"types": "./dist/core/index.d.ts",
|
|
@@ -9,19 +9,18 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "unbuild"
|
|
11
11
|
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"jotai": ">=2.0.0"
|
|
14
|
+
},
|
|
12
15
|
"devDependencies": {
|
|
13
16
|
"@types/node": "^20.0.0",
|
|
14
17
|
"@vitejs/plugin-react": "^5.0.0",
|
|
15
|
-
"react": "18.0.0",
|
|
16
18
|
"typescript": "catalog:",
|
|
17
|
-
"unbuild": "^3.6.1"
|
|
18
|
-
"vue": "3.0.0",
|
|
19
|
-
"vue-sfc-transformer": "^0.1.16"
|
|
19
|
+
"unbuild": "^3.6.1"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"react": ">=18",
|
|
23
|
-
"vue": ">=3"
|
|
24
|
-
"jotai": ">=2.0.0"
|
|
23
|
+
"vue": ">=3"
|
|
25
24
|
},
|
|
26
25
|
"peerDependenciesMeta": {
|
|
27
26
|
"react": {
|
|
@@ -29,9 +28,6 @@
|
|
|
29
28
|
},
|
|
30
29
|
"vue": {
|
|
31
30
|
"optional": true
|
|
32
|
-
},
|
|
33
|
-
"jotai": {
|
|
34
|
-
"optional": true
|
|
35
31
|
}
|
|
36
32
|
},
|
|
37
33
|
"exports": {
|