@shware/analytics 0.3.18 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/react-router/index.cjs +0 -1
- package/dist/react-router/index.cjs.map +1 -1
- package/dist/react-router/index.mjs +1 -2
- package/dist/react-router/index.mjs.map +1 -1
- package/dist/schema/index.cjs +50 -50
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +28 -151
- package/dist/schema/index.d.ts +28 -151
- package/dist/schema/index.mjs +1 -1
- package/dist/schema/index.mjs.map +1 -1
- package/dist/track/index.cjs +3 -8
- package/dist/track/index.cjs.map +1 -1
- package/dist/track/index.mjs +3 -8
- package/dist/track/index.mjs.map +1 -1
- package/dist/track/types.cjs.map +1 -1
- package/dist/track/types.d.cts +1 -1
- package/dist/track/types.d.ts +1 -1
- package/dist/utils/token-bucket.cjs +73 -0
- package/dist/utils/token-bucket.cjs.map +1 -0
- package/dist/utils/token-bucket.d.cts +20 -0
- package/dist/utils/token-bucket.d.ts +20 -0
- package/dist/utils/token-bucket.mjs +48 -0
- package/dist/utils/token-bucket.mjs.map +1 -0
- package/package.json +7 -8
package/dist/index.d.cts
CHANGED
|
@@ -6,5 +6,5 @@ export { stripeMinorUnits } from './utils/stripe.cjs';
|
|
|
6
6
|
export { AllowedPropertyValues, TrackProperties, TrackTags, UserProvidedData } from './track/types.cjs';
|
|
7
7
|
export { VisitorProperties } from './visitor/types.cjs';
|
|
8
8
|
import 'axios';
|
|
9
|
-
import 'zod';
|
|
9
|
+
import 'zod/v4';
|
|
10
10
|
import './track/gtag.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export { stripeMinorUnits } from './utils/stripe.js';
|
|
|
6
6
|
export { AllowedPropertyValues, TrackProperties, TrackTags, UserProvidedData } from './track/types.js';
|
|
7
7
|
export { VisitorProperties } from './visitor/types.js';
|
|
8
8
|
import 'axios';
|
|
9
|
-
import 'zod';
|
|
9
|
+
import 'zod/v4';
|
|
10
10
|
import './track/gtag.js';
|
|
@@ -34,7 +34,6 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
34
34
|
function useReportWebVitals(reportWebVitalsFn) {
|
|
35
35
|
(0, import_react.useEffect)(() => {
|
|
36
36
|
(0, import_web_vitals.onCLS)(reportWebVitalsFn);
|
|
37
|
-
(0, import_web_vitals.onFID)(reportWebVitalsFn);
|
|
38
37
|
(0, import_web_vitals.onLCP)(reportWebVitalsFn);
|
|
39
38
|
(0, import_web_vitals.onINP)(reportWebVitalsFn);
|
|
40
39
|
(0, import_web_vitals.onFCP)(reportWebVitalsFn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation, useSearchParams } from 'react-router';\nimport { onLCP,
|
|
1
|
+
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation, useSearchParams } from 'react-router';\nimport { onLCP, onCLS, onINP, onFCP, onTTFB, type Metric } from 'web-vitals';\nimport { track } from '../track/index';\nimport { mapFBEvent } from '../track/fbq';\nimport type { Gtag, GaId, GtmId } from '../track/gtag';\nimport type { Pixel, PixelId } from '../track/fbq';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nfunction useReportWebVitals(reportWebVitalsFn: (metric: Metric) => void) {\n useEffect(() => {\n onCLS(reportWebVitalsFn);\n onLCP(reportWebVitalsFn);\n onINP(reportWebVitalsFn);\n onFCP(reportWebVitalsFn);\n onTTFB(reportWebVitalsFn);\n }, [reportWebVitalsFn]);\n}\n\ndeclare global {\n interface Window extends Gtag, Pixel {}\n}\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n pixelId?: PixelId;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n}\n\nexport function sendGAEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (typeof window === 'undefined' || !window.gtag) {\n console.warn('gtag has not been initialized');\n return;\n }\n window.gtag('event', name, properties);\n}\n\nexport function sendFBEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n event_id?: string\n) {\n if (typeof window === 'undefined' || !window.fbq) {\n console.warn('fbq has not been initialized');\n return;\n }\n const { fbq } = window;\n const options = { eventID: event_id };\n const [type, fbEventName, fbEventProperties] = mapFBEvent(name, properties);\n if (type === 'track') {\n fbq(type, fbEventName, fbEventProperties, options);\n } else {\n fbq(type, fbEventName, fbEventProperties, options);\n }\n}\n\nexport function Analytics({ gaId, nonce, debugMode, pixelId, facebookAppId }: Props) {\n const { pathname } = useLocation();\n const [params] = useSearchParams();\n\n useEffect(() => {\n const properties = {\n pathname,\n referrer: document.referrer,\n gclid: params.get('gclid'),\n fbclid: params.get('fbclid'),\n utm_source: params.get('utm_source'),\n utm_medium: params.get('utm_medium'),\n utm_campaign: params.get('utm_campaign'),\n utm_term: params.get('utm_term'),\n utm_content: params.get('utm_content'),\n };\n\n /**\n * Pixel:\n * Each time the Pixel loads, it automatically calls fbq('track', 'PageView') to track a\n * PageView standard event.\n */\n track('page_view', properties, { enableThirdPartyTracking: false });\n }, [pathname, params]);\n\n useReportWebVitals((metric) => {\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <script\n async\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <script\n async\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {pixelId && (\n <>\n <script\n id=\"pixel\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${pixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n </>\n )}\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
// src/react-router/index.tsx
|
|
2
2
|
import { useEffect } from "react";
|
|
3
3
|
import { useLocation, useSearchParams } from "react-router";
|
|
4
|
-
import { onLCP,
|
|
4
|
+
import { onLCP, onCLS, onINP, onFCP, onTTFB } from "web-vitals";
|
|
5
5
|
import { track } from "../track/index.mjs";
|
|
6
6
|
import { mapFBEvent } from "../track/fbq.mjs";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
function useReportWebVitals(reportWebVitalsFn) {
|
|
9
9
|
useEffect(() => {
|
|
10
10
|
onCLS(reportWebVitalsFn);
|
|
11
|
-
onFID(reportWebVitalsFn);
|
|
12
11
|
onLCP(reportWebVitalsFn);
|
|
13
12
|
onINP(reportWebVitalsFn);
|
|
14
13
|
onFCP(reportWebVitalsFn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation, useSearchParams } from 'react-router';\nimport { onLCP,
|
|
1
|
+
{"version":3,"sources":["../../src/react-router/index.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation, useSearchParams } from 'react-router';\nimport { onLCP, onCLS, onINP, onFCP, onTTFB, type Metric } from 'web-vitals';\nimport { track } from '../track/index';\nimport { mapFBEvent } from '../track/fbq';\nimport type { Gtag, GaId, GtmId } from '../track/gtag';\nimport type { Pixel, PixelId } from '../track/fbq';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nfunction useReportWebVitals(reportWebVitalsFn: (metric: Metric) => void) {\n useEffect(() => {\n onCLS(reportWebVitalsFn);\n onLCP(reportWebVitalsFn);\n onINP(reportWebVitalsFn);\n onFCP(reportWebVitalsFn);\n onTTFB(reportWebVitalsFn);\n }, [reportWebVitalsFn]);\n}\n\ndeclare global {\n interface Window extends Gtag, Pixel {}\n}\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n pixelId?: PixelId;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n}\n\nexport function sendGAEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (typeof window === 'undefined' || !window.gtag) {\n console.warn('gtag has not been initialized');\n return;\n }\n window.gtag('event', name, properties);\n}\n\nexport function sendFBEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n event_id?: string\n) {\n if (typeof window === 'undefined' || !window.fbq) {\n console.warn('fbq has not been initialized');\n return;\n }\n const { fbq } = window;\n const options = { eventID: event_id };\n const [type, fbEventName, fbEventProperties] = mapFBEvent(name, properties);\n if (type === 'track') {\n fbq(type, fbEventName, fbEventProperties, options);\n } else {\n fbq(type, fbEventName, fbEventProperties, options);\n }\n}\n\nexport function Analytics({ gaId, nonce, debugMode, pixelId, facebookAppId }: Props) {\n const { pathname } = useLocation();\n const [params] = useSearchParams();\n\n useEffect(() => {\n const properties = {\n pathname,\n referrer: document.referrer,\n gclid: params.get('gclid'),\n fbclid: params.get('fbclid'),\n utm_source: params.get('utm_source'),\n utm_medium: params.get('utm_medium'),\n utm_campaign: params.get('utm_campaign'),\n utm_term: params.get('utm_term'),\n utm_content: params.get('utm_content'),\n };\n\n /**\n * Pixel:\n * Each time the Pixel loads, it automatically calls fbq('track', 'PageView') to track a\n * PageView standard event.\n */\n track('page_view', properties, { enableThirdPartyTracking: false });\n }, [pathname, params]);\n\n useReportWebVitals((metric) => {\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <script\n async\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <script\n async\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {pixelId && (\n <>\n <script\n id=\"pixel\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${pixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n </>\n )}\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/schema/index.cjs
CHANGED
|
@@ -25,63 +25,63 @@ __export(schema_exports, {
|
|
|
25
25
|
updateVisitorSchema: () => updateVisitorSchema
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(schema_exports);
|
|
28
|
-
var
|
|
29
|
-
var items =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
var import_v4 = require("zod/v4");
|
|
29
|
+
var items = import_v4.z.array(
|
|
30
|
+
import_v4.z.record(
|
|
31
|
+
import_v4.z.string().trim().min(1).max(128),
|
|
32
|
+
import_v4.z.union([import_v4.z.string().max(512), import_v4.z.number(), import_v4.z.boolean(), import_v4.z.null()])
|
|
33
33
|
)
|
|
34
34
|
);
|
|
35
|
-
var createTrackEventSchema =
|
|
36
|
-
name:
|
|
37
|
-
visitor_id:
|
|
38
|
-
timestamp:
|
|
39
|
-
tags:
|
|
40
|
-
os:
|
|
41
|
-
os_name:
|
|
42
|
-
os_version:
|
|
43
|
-
browser:
|
|
44
|
-
browser_name:
|
|
45
|
-
browser_version:
|
|
46
|
-
platform:
|
|
47
|
-
device:
|
|
48
|
-
device_id:
|
|
49
|
-
device_type:
|
|
50
|
-
device_vendor:
|
|
51
|
-
device_pixel_ratio:
|
|
52
|
-
screen_resolution:
|
|
53
|
-
release:
|
|
54
|
-
language:
|
|
55
|
-
time_zone:
|
|
56
|
-
environment:
|
|
57
|
-
source_url:
|
|
58
|
-
source:
|
|
59
|
-
fbc:
|
|
60
|
-
fbp:
|
|
61
|
-
gclid:
|
|
62
|
-
advertising_id:
|
|
63
|
-
utm_source:
|
|
64
|
-
utm_medium:
|
|
65
|
-
utm_campaign:
|
|
66
|
-
utm_term:
|
|
67
|
-
utm_content:
|
|
35
|
+
var createTrackEventSchema = import_v4.z.object({
|
|
36
|
+
name: import_v4.z.string().trim().min(1).max(64),
|
|
37
|
+
visitor_id: import_v4.z.coerce.bigint(),
|
|
38
|
+
timestamp: import_v4.z.string().datetime(),
|
|
39
|
+
tags: import_v4.z.object({
|
|
40
|
+
os: import_v4.z.string().optional(),
|
|
41
|
+
os_name: import_v4.z.string().optional(),
|
|
42
|
+
os_version: import_v4.z.string().optional(),
|
|
43
|
+
browser: import_v4.z.string().optional(),
|
|
44
|
+
browser_name: import_v4.z.string().optional(),
|
|
45
|
+
browser_version: import_v4.z.string().optional(),
|
|
46
|
+
platform: import_v4.z.enum(["ios", "android", "web", "macos", "windows", "linux", "unknown"]).optional(),
|
|
47
|
+
device: import_v4.z.string().optional(),
|
|
48
|
+
device_id: import_v4.z.string().trim().min(1).max(36).optional(),
|
|
49
|
+
device_type: import_v4.z.string().optional(),
|
|
50
|
+
device_vendor: import_v4.z.string().optional(),
|
|
51
|
+
device_pixel_ratio: import_v4.z.string().optional(),
|
|
52
|
+
screen_resolution: import_v4.z.string().regex(/^\d+x\d+$/).transform((v) => v).optional(),
|
|
53
|
+
release: import_v4.z.string().optional(),
|
|
54
|
+
language: import_v4.z.string().optional(),
|
|
55
|
+
time_zone: import_v4.z.string().optional(),
|
|
56
|
+
environment: import_v4.z.enum(["development", "production"]).optional(),
|
|
57
|
+
source_url: import_v4.z.string().optional(),
|
|
58
|
+
source: import_v4.z.enum(["web", "app", "offline"]).optional(),
|
|
59
|
+
fbc: import_v4.z.string().optional(),
|
|
60
|
+
fbp: import_v4.z.string().optional(),
|
|
61
|
+
gclid: import_v4.z.string().optional(),
|
|
62
|
+
advertising_id: import_v4.z.string().optional(),
|
|
63
|
+
utm_source: import_v4.z.string().optional(),
|
|
64
|
+
utm_medium: import_v4.z.string().optional(),
|
|
65
|
+
utm_campaign: import_v4.z.string().optional(),
|
|
66
|
+
utm_term: import_v4.z.string().optional(),
|
|
67
|
+
utm_content: import_v4.z.string().optional()
|
|
68
68
|
}),
|
|
69
|
-
properties:
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
properties: import_v4.z.record(
|
|
70
|
+
import_v4.z.string().trim().min(1).max(128),
|
|
71
|
+
import_v4.z.union([import_v4.z.string().max(512), import_v4.z.number(), import_v4.z.boolean(), import_v4.z.null(), items])
|
|
72
72
|
).refine((data) => Object.keys(data).length <= 64).optional()
|
|
73
73
|
}).array().min(1).max(100);
|
|
74
|
-
var createVisitorSchema =
|
|
75
|
-
device_id:
|
|
76
|
-
properties:
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
var createVisitorSchema = import_v4.z.object({
|
|
75
|
+
device_id: import_v4.z.string().trim().min(1).max(36),
|
|
76
|
+
properties: import_v4.z.record(
|
|
77
|
+
import_v4.z.string().trim().min(1).max(128),
|
|
78
|
+
import_v4.z.union([import_v4.z.string().max(512), import_v4.z.number(), import_v4.z.boolean(), import_v4.z.null()])
|
|
79
79
|
).refine((data) => Object.keys(data).length <= 64).optional()
|
|
80
80
|
});
|
|
81
|
-
var updateVisitorSchema =
|
|
82
|
-
properties:
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
var updateVisitorSchema = import_v4.z.object({
|
|
82
|
+
properties: import_v4.z.record(
|
|
83
|
+
import_v4.z.string().trim().min(1).max(128),
|
|
84
|
+
import_v4.z.union([import_v4.z.string().max(512), import_v4.z.number(), import_v4.z.boolean(), import_v4.z.null()])
|
|
85
85
|
).refine((data) => Object.keys(data).length <= 64)
|
|
86
86
|
});
|
|
87
87
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import { z } from 'zod';\n\nconst items = z.array(\n z.record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n);\n\nexport const createTrackEventSchema = z\n .object({\n name: z.string().trim().min(1).max(64),\n visitor_id: z.coerce.bigint(),\n timestamp: z.string().datetime(),\n tags: z.object({\n os: z.string().optional(),\n os_name: z.string().optional(),\n os_version: z.string().optional(),\n browser: z.string().optional(),\n browser_name: z.string().optional(),\n browser_version: z.string().optional(),\n platform: z\n .enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])\n .optional(),\n device: z.string().optional(),\n device_id: z.string().trim().min(1).max(36).optional(),\n device_type: z.string().optional(),\n device_vendor: z.string().optional(),\n device_pixel_ratio: z.string().optional(),\n screen_resolution: z\n .string()\n .regex(/^\\d+x\\d+$/)\n .transform((v) => v as `${number}x${number}`)\n .optional(),\n release: z.string().optional(),\n language: z.string().optional(),\n time_zone: z.string().optional(),\n environment: z.enum(['development', 'production']).optional(),\n source_url: z.string().optional(),\n source: z.enum(['web', 'app', 'offline']).optional(),\n fbc: z.string().optional(),\n fbp: z.string().optional(),\n gclid: z.string().optional(),\n advertising_id: z.string().optional(),\n utm_source: z.string().optional(),\n utm_medium: z.string().optional(),\n utm_campaign: z.string().optional(),\n utm_term: z.string().optional(),\n utm_content: z.string().optional(),\n }),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null(), items])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n })\n .array()\n .min(1)\n .max(100);\n\nexport const createVisitorSchema = z.object({\n device_id: z.string().trim().min(1).max(36),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n});\n\nexport const updateVisitorSchema = z.object({\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nconst items = z.array(\n z.record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n);\n\nexport const createTrackEventSchema = z\n .object({\n name: z.string().trim().min(1).max(64),\n visitor_id: z.coerce.bigint(),\n timestamp: z.string().datetime(),\n tags: z.object({\n os: z.string().optional(),\n os_name: z.string().optional(),\n os_version: z.string().optional(),\n browser: z.string().optional(),\n browser_name: z.string().optional(),\n browser_version: z.string().optional(),\n platform: z\n .enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])\n .optional(),\n device: z.string().optional(),\n device_id: z.string().trim().min(1).max(36).optional(),\n device_type: z.string().optional(),\n device_vendor: z.string().optional(),\n device_pixel_ratio: z.string().optional(),\n screen_resolution: z\n .string()\n .regex(/^\\d+x\\d+$/)\n .transform((v) => v as `${number}x${number}`)\n .optional(),\n release: z.string().optional(),\n language: z.string().optional(),\n time_zone: z.string().optional(),\n environment: z.enum(['development', 'production']).optional(),\n source_url: z.string().optional(),\n source: z.enum(['web', 'app', 'offline']).optional(),\n fbc: z.string().optional(),\n fbp: z.string().optional(),\n gclid: z.string().optional(),\n advertising_id: z.string().optional(),\n utm_source: z.string().optional(),\n utm_medium: z.string().optional(),\n utm_campaign: z.string().optional(),\n utm_term: z.string().optional(),\n utm_content: z.string().optional(),\n }),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null(), items])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n })\n .array()\n .min(1)\n .max(100);\n\nexport const createVisitorSchema = z.object({\n device_id: z.string().trim().min(1).max(36),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n});\n\nexport const updateVisitorSchema = z.object({\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAkB;AAElB,IAAM,QAAQ,YAAE;AAAA,EACd,YAAE;AAAA,IACA,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IAChC,YAAE,MAAM,CAAC,YAAE,OAAO,EAAE,IAAI,GAAG,GAAG,YAAE,OAAO,GAAG,YAAE,QAAQ,GAAG,YAAE,KAAK,CAAC,CAAC;AAAA,EAClE;AACF;AAEO,IAAM,yBAAyB,YACnC,OAAO;AAAA,EACN,MAAM,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EACrC,YAAY,YAAE,OAAO,OAAO;AAAA,EAC5B,WAAW,YAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,MAAM,YAAE,OAAO;AAAA,IACb,IAAI,YAAE,OAAO,EAAE,SAAS;AAAA,IACxB,SAAS,YAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,YAAY,YAAE,OAAO,EAAE,SAAS;AAAA,IAChC,SAAS,YAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,cAAc,YAAE,OAAO,EAAE,SAAS;AAAA,IAClC,iBAAiB,YAAE,OAAO,EAAE,SAAS;AAAA,IACrC,UAAU,YACP,KAAK,CAAC,OAAO,WAAW,OAAO,SAAS,WAAW,SAAS,SAAS,CAAC,EACtE,SAAS;AAAA,IACZ,QAAQ,YAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,WAAW,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACrD,aAAa,YAAE,OAAO,EAAE,SAAS;AAAA,IACjC,eAAe,YAAE,OAAO,EAAE,SAAS;AAAA,IACnC,oBAAoB,YAAE,OAAO,EAAE,SAAS;AAAA,IACxC,mBAAmB,YAChB,OAAO,EACP,MAAM,WAAW,EACjB,UAAU,CAAC,MAAM,CAA0B,EAC3C,SAAS;AAAA,IACZ,SAAS,YAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,UAAU,YAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,WAAW,YAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,aAAa,YAAE,KAAK,CAAC,eAAe,YAAY,CAAC,EAAE,SAAS;AAAA,IAC5D,YAAY,YAAE,OAAO,EAAE,SAAS;AAAA,IAChC,QAAQ,YAAE,KAAK,CAAC,OAAO,OAAO,SAAS,CAAC,EAAE,SAAS;AAAA,IACnD,KAAK,YAAE,OAAO,EAAE,SAAS;AAAA,IACzB,KAAK,YAAE,OAAO,EAAE,SAAS;AAAA,IACzB,OAAO,YAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,gBAAgB,YAAE,OAAO,EAAE,SAAS;AAAA,IACpC,YAAY,YAAE,OAAO,EAAE,SAAS;AAAA,IAChC,YAAY,YAAE,OAAO,EAAE,SAAS;AAAA,IAChC,cAAc,YAAE,OAAO,EAAE,SAAS;AAAA,IAClC,UAAU,YAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,aAAa,YAAE,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,YAAY,YACT;AAAA,IACC,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IAChC,YAAE,MAAM,CAAC,YAAE,OAAO,EAAE,IAAI,GAAG,GAAG,YAAE,OAAO,GAAG,YAAE,QAAQ,GAAG,YAAE,KAAK,GAAG,KAAK,CAAC;AAAA,EACzE,EACC,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,EAAE,UAAU,EAAE,EAC/C,SAAS;AACd,CAAC,EACA,MAAM,EACN,IAAI,CAAC,EACL,IAAI,GAAG;AAEH,IAAM,sBAAsB,YAAE,OAAO;AAAA,EAC1C,WAAW,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC1C,YAAY,YACT;AAAA,IACC,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IAChC,YAAE,MAAM,CAAC,YAAE,OAAO,EAAE,IAAI,GAAG,GAAG,YAAE,OAAO,GAAG,YAAE,QAAQ,GAAG,YAAE,KAAK,CAAC,CAAC;AAAA,EAClE,EACC,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,EAAE,UAAU,EAAE,EAC/C,SAAS;AACd,CAAC;AAEM,IAAM,sBAAsB,YAAE,OAAO;AAAA,EAC1C,YAAY,YACT;AAAA,IACC,YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IAChC,YAAE,MAAM,CAAC,YAAE,OAAO,EAAE,IAAI,GAAG,GAAG,YAAE,OAAO,GAAG,YAAE,QAAQ,GAAG,YAAE,KAAK,CAAC,CAAC;AAAA,EAClE,EACC,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,EAAE,UAAU,EAAE;AACpD,CAAC;","names":[]}
|
package/dist/schema/index.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
2
|
|
|
3
3
|
declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
|
|
4
4
|
name: z.ZodString;
|
|
5
|
-
visitor_id: z.
|
|
5
|
+
visitor_id: z.ZodCoercedBigInt<unknown>;
|
|
6
6
|
timestamp: z.ZodString;
|
|
7
7
|
tags: z.ZodObject<{
|
|
8
8
|
os: z.ZodOptional<z.ZodString>;
|
|
@@ -11,19 +11,34 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
|
|
|
11
11
|
browser: z.ZodOptional<z.ZodString>;
|
|
12
12
|
browser_name: z.ZodOptional<z.ZodString>;
|
|
13
13
|
browser_version: z.ZodOptional<z.ZodString>;
|
|
14
|
-
platform: z.ZodOptional<z.ZodEnum<
|
|
14
|
+
platform: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
ios: "ios";
|
|
16
|
+
android: "android";
|
|
17
|
+
web: "web";
|
|
18
|
+
macos: "macos";
|
|
19
|
+
windows: "windows";
|
|
20
|
+
linux: "linux";
|
|
21
|
+
unknown: "unknown";
|
|
22
|
+
}>>;
|
|
15
23
|
device: z.ZodOptional<z.ZodString>;
|
|
16
24
|
device_id: z.ZodOptional<z.ZodString>;
|
|
17
25
|
device_type: z.ZodOptional<z.ZodString>;
|
|
18
26
|
device_vendor: z.ZodOptional<z.ZodString>;
|
|
19
27
|
device_pixel_ratio: z.ZodOptional<z.ZodString>;
|
|
20
|
-
screen_resolution: z.ZodOptional<z.
|
|
28
|
+
screen_resolution: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<`${number}x${number}`, string>>>;
|
|
21
29
|
release: z.ZodOptional<z.ZodString>;
|
|
22
30
|
language: z.ZodOptional<z.ZodString>;
|
|
23
31
|
time_zone: z.ZodOptional<z.ZodString>;
|
|
24
|
-
environment: z.ZodOptional<z.ZodEnum<
|
|
32
|
+
environment: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
development: "development";
|
|
34
|
+
production: "production";
|
|
35
|
+
}>>;
|
|
25
36
|
source_url: z.ZodOptional<z.ZodString>;
|
|
26
|
-
source: z.ZodOptional<z.ZodEnum<
|
|
37
|
+
source: z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
web: "web";
|
|
39
|
+
app: "app";
|
|
40
|
+
offline: "offline";
|
|
41
|
+
}>>;
|
|
27
42
|
fbc: z.ZodOptional<z.ZodString>;
|
|
28
43
|
fbp: z.ZodOptional<z.ZodString>;
|
|
29
44
|
gclid: z.ZodOptional<z.ZodString>;
|
|
@@ -33,153 +48,15 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
|
|
|
33
48
|
utm_campaign: z.ZodOptional<z.ZodString>;
|
|
34
49
|
utm_term: z.ZodOptional<z.ZodString>;
|
|
35
50
|
utm_content: z.ZodOptional<z.ZodString>;
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
screen_resolution?: `${number}x${number}` | undefined;
|
|
40
|
-
os?: string | undefined;
|
|
41
|
-
os_name?: string | undefined;
|
|
42
|
-
os_version?: string | undefined;
|
|
43
|
-
browser?: string | undefined;
|
|
44
|
-
browser_name?: string | undefined;
|
|
45
|
-
browser_version?: string | undefined;
|
|
46
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
47
|
-
device?: string | undefined;
|
|
48
|
-
device_id?: string | undefined;
|
|
49
|
-
device_type?: string | undefined;
|
|
50
|
-
device_vendor?: string | undefined;
|
|
51
|
-
device_pixel_ratio?: string | undefined;
|
|
52
|
-
release?: string | undefined;
|
|
53
|
-
time_zone?: string | undefined;
|
|
54
|
-
environment?: "development" | "production" | undefined;
|
|
55
|
-
source_url?: string | undefined;
|
|
56
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
57
|
-
fbc?: string | undefined;
|
|
58
|
-
fbp?: string | undefined;
|
|
59
|
-
advertising_id?: string | undefined;
|
|
60
|
-
utm_source?: string | undefined;
|
|
61
|
-
utm_medium?: string | undefined;
|
|
62
|
-
utm_campaign?: string | undefined;
|
|
63
|
-
utm_term?: string | undefined;
|
|
64
|
-
utm_content?: string | undefined;
|
|
65
|
-
}, {
|
|
66
|
-
gclid?: string | undefined;
|
|
67
|
-
language?: string | undefined;
|
|
68
|
-
screen_resolution?: string | undefined;
|
|
69
|
-
os?: string | undefined;
|
|
70
|
-
os_name?: string | undefined;
|
|
71
|
-
os_version?: string | undefined;
|
|
72
|
-
browser?: string | undefined;
|
|
73
|
-
browser_name?: string | undefined;
|
|
74
|
-
browser_version?: string | undefined;
|
|
75
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
76
|
-
device?: string | undefined;
|
|
77
|
-
device_id?: string | undefined;
|
|
78
|
-
device_type?: string | undefined;
|
|
79
|
-
device_vendor?: string | undefined;
|
|
80
|
-
device_pixel_ratio?: string | undefined;
|
|
81
|
-
release?: string | undefined;
|
|
82
|
-
time_zone?: string | undefined;
|
|
83
|
-
environment?: "development" | "production" | undefined;
|
|
84
|
-
source_url?: string | undefined;
|
|
85
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
86
|
-
fbc?: string | undefined;
|
|
87
|
-
fbp?: string | undefined;
|
|
88
|
-
advertising_id?: string | undefined;
|
|
89
|
-
utm_source?: string | undefined;
|
|
90
|
-
utm_medium?: string | undefined;
|
|
91
|
-
utm_campaign?: string | undefined;
|
|
92
|
-
utm_term?: string | undefined;
|
|
93
|
-
utm_content?: string | undefined;
|
|
94
|
-
}>;
|
|
95
|
-
properties: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>, "many">]>>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>>>;
|
|
96
|
-
}, "strip", z.ZodTypeAny, {
|
|
97
|
-
visitor_id: bigint;
|
|
98
|
-
name: string;
|
|
99
|
-
timestamp: string;
|
|
100
|
-
tags: {
|
|
101
|
-
gclid?: string | undefined;
|
|
102
|
-
language?: string | undefined;
|
|
103
|
-
screen_resolution?: `${number}x${number}` | undefined;
|
|
104
|
-
os?: string | undefined;
|
|
105
|
-
os_name?: string | undefined;
|
|
106
|
-
os_version?: string | undefined;
|
|
107
|
-
browser?: string | undefined;
|
|
108
|
-
browser_name?: string | undefined;
|
|
109
|
-
browser_version?: string | undefined;
|
|
110
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
111
|
-
device?: string | undefined;
|
|
112
|
-
device_id?: string | undefined;
|
|
113
|
-
device_type?: string | undefined;
|
|
114
|
-
device_vendor?: string | undefined;
|
|
115
|
-
device_pixel_ratio?: string | undefined;
|
|
116
|
-
release?: string | undefined;
|
|
117
|
-
time_zone?: string | undefined;
|
|
118
|
-
environment?: "development" | "production" | undefined;
|
|
119
|
-
source_url?: string | undefined;
|
|
120
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
121
|
-
fbc?: string | undefined;
|
|
122
|
-
fbp?: string | undefined;
|
|
123
|
-
advertising_id?: string | undefined;
|
|
124
|
-
utm_source?: string | undefined;
|
|
125
|
-
utm_medium?: string | undefined;
|
|
126
|
-
utm_campaign?: string | undefined;
|
|
127
|
-
utm_term?: string | undefined;
|
|
128
|
-
utm_content?: string | undefined;
|
|
129
|
-
};
|
|
130
|
-
properties?: Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null> | undefined;
|
|
131
|
-
}, {
|
|
132
|
-
visitor_id: bigint;
|
|
133
|
-
name: string;
|
|
134
|
-
timestamp: string;
|
|
135
|
-
tags: {
|
|
136
|
-
gclid?: string | undefined;
|
|
137
|
-
language?: string | undefined;
|
|
138
|
-
screen_resolution?: string | undefined;
|
|
139
|
-
os?: string | undefined;
|
|
140
|
-
os_name?: string | undefined;
|
|
141
|
-
os_version?: string | undefined;
|
|
142
|
-
browser?: string | undefined;
|
|
143
|
-
browser_name?: string | undefined;
|
|
144
|
-
browser_version?: string | undefined;
|
|
145
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
146
|
-
device?: string | undefined;
|
|
147
|
-
device_id?: string | undefined;
|
|
148
|
-
device_type?: string | undefined;
|
|
149
|
-
device_vendor?: string | undefined;
|
|
150
|
-
device_pixel_ratio?: string | undefined;
|
|
151
|
-
release?: string | undefined;
|
|
152
|
-
time_zone?: string | undefined;
|
|
153
|
-
environment?: "development" | "production" | undefined;
|
|
154
|
-
source_url?: string | undefined;
|
|
155
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
156
|
-
fbc?: string | undefined;
|
|
157
|
-
fbp?: string | undefined;
|
|
158
|
-
advertising_id?: string | undefined;
|
|
159
|
-
utm_source?: string | undefined;
|
|
160
|
-
utm_medium?: string | undefined;
|
|
161
|
-
utm_campaign?: string | undefined;
|
|
162
|
-
utm_term?: string | undefined;
|
|
163
|
-
utm_content?: string | undefined;
|
|
164
|
-
};
|
|
165
|
-
properties?: Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null> | undefined;
|
|
166
|
-
}>, "many">;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>]>>>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
167
54
|
declare const createVisitorSchema: z.ZodObject<{
|
|
168
55
|
device_id: z.ZodString;
|
|
169
|
-
properties: z.ZodOptional<z.
|
|
170
|
-
},
|
|
171
|
-
device_id: string;
|
|
172
|
-
properties?: Record<string, string | number | boolean | null> | undefined;
|
|
173
|
-
}, {
|
|
174
|
-
device_id: string;
|
|
175
|
-
properties?: Record<string, string | number | boolean | null> | undefined;
|
|
176
|
-
}>;
|
|
56
|
+
properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
57
|
+
}, z.core.$strip>;
|
|
177
58
|
declare const updateVisitorSchema: z.ZodObject<{
|
|
178
|
-
properties: z.
|
|
179
|
-
},
|
|
180
|
-
properties: Record<string, string | number | boolean | null>;
|
|
181
|
-
}, {
|
|
182
|
-
properties: Record<string, string | number | boolean | null>;
|
|
183
|
-
}>;
|
|
59
|
+
properties: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
|
|
60
|
+
}, z.core.$strip>;
|
|
184
61
|
|
|
185
62
|
export { createTrackEventSchema, createVisitorSchema, updateVisitorSchema };
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
2
|
|
|
3
3
|
declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
|
|
4
4
|
name: z.ZodString;
|
|
5
|
-
visitor_id: z.
|
|
5
|
+
visitor_id: z.ZodCoercedBigInt<unknown>;
|
|
6
6
|
timestamp: z.ZodString;
|
|
7
7
|
tags: z.ZodObject<{
|
|
8
8
|
os: z.ZodOptional<z.ZodString>;
|
|
@@ -11,19 +11,34 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
|
|
|
11
11
|
browser: z.ZodOptional<z.ZodString>;
|
|
12
12
|
browser_name: z.ZodOptional<z.ZodString>;
|
|
13
13
|
browser_version: z.ZodOptional<z.ZodString>;
|
|
14
|
-
platform: z.ZodOptional<z.ZodEnum<
|
|
14
|
+
platform: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
ios: "ios";
|
|
16
|
+
android: "android";
|
|
17
|
+
web: "web";
|
|
18
|
+
macos: "macos";
|
|
19
|
+
windows: "windows";
|
|
20
|
+
linux: "linux";
|
|
21
|
+
unknown: "unknown";
|
|
22
|
+
}>>;
|
|
15
23
|
device: z.ZodOptional<z.ZodString>;
|
|
16
24
|
device_id: z.ZodOptional<z.ZodString>;
|
|
17
25
|
device_type: z.ZodOptional<z.ZodString>;
|
|
18
26
|
device_vendor: z.ZodOptional<z.ZodString>;
|
|
19
27
|
device_pixel_ratio: z.ZodOptional<z.ZodString>;
|
|
20
|
-
screen_resolution: z.ZodOptional<z.
|
|
28
|
+
screen_resolution: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<`${number}x${number}`, string>>>;
|
|
21
29
|
release: z.ZodOptional<z.ZodString>;
|
|
22
30
|
language: z.ZodOptional<z.ZodString>;
|
|
23
31
|
time_zone: z.ZodOptional<z.ZodString>;
|
|
24
|
-
environment: z.ZodOptional<z.ZodEnum<
|
|
32
|
+
environment: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
development: "development";
|
|
34
|
+
production: "production";
|
|
35
|
+
}>>;
|
|
25
36
|
source_url: z.ZodOptional<z.ZodString>;
|
|
26
|
-
source: z.ZodOptional<z.ZodEnum<
|
|
37
|
+
source: z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
web: "web";
|
|
39
|
+
app: "app";
|
|
40
|
+
offline: "offline";
|
|
41
|
+
}>>;
|
|
27
42
|
fbc: z.ZodOptional<z.ZodString>;
|
|
28
43
|
fbp: z.ZodOptional<z.ZodString>;
|
|
29
44
|
gclid: z.ZodOptional<z.ZodString>;
|
|
@@ -33,153 +48,15 @@ declare const createTrackEventSchema: z.ZodArray<z.ZodObject<{
|
|
|
33
48
|
utm_campaign: z.ZodOptional<z.ZodString>;
|
|
34
49
|
utm_term: z.ZodOptional<z.ZodString>;
|
|
35
50
|
utm_content: z.ZodOptional<z.ZodString>;
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
screen_resolution?: `${number}x${number}` | undefined;
|
|
40
|
-
os?: string | undefined;
|
|
41
|
-
os_name?: string | undefined;
|
|
42
|
-
os_version?: string | undefined;
|
|
43
|
-
browser?: string | undefined;
|
|
44
|
-
browser_name?: string | undefined;
|
|
45
|
-
browser_version?: string | undefined;
|
|
46
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
47
|
-
device?: string | undefined;
|
|
48
|
-
device_id?: string | undefined;
|
|
49
|
-
device_type?: string | undefined;
|
|
50
|
-
device_vendor?: string | undefined;
|
|
51
|
-
device_pixel_ratio?: string | undefined;
|
|
52
|
-
release?: string | undefined;
|
|
53
|
-
time_zone?: string | undefined;
|
|
54
|
-
environment?: "development" | "production" | undefined;
|
|
55
|
-
source_url?: string | undefined;
|
|
56
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
57
|
-
fbc?: string | undefined;
|
|
58
|
-
fbp?: string | undefined;
|
|
59
|
-
advertising_id?: string | undefined;
|
|
60
|
-
utm_source?: string | undefined;
|
|
61
|
-
utm_medium?: string | undefined;
|
|
62
|
-
utm_campaign?: string | undefined;
|
|
63
|
-
utm_term?: string | undefined;
|
|
64
|
-
utm_content?: string | undefined;
|
|
65
|
-
}, {
|
|
66
|
-
gclid?: string | undefined;
|
|
67
|
-
language?: string | undefined;
|
|
68
|
-
screen_resolution?: string | undefined;
|
|
69
|
-
os?: string | undefined;
|
|
70
|
-
os_name?: string | undefined;
|
|
71
|
-
os_version?: string | undefined;
|
|
72
|
-
browser?: string | undefined;
|
|
73
|
-
browser_name?: string | undefined;
|
|
74
|
-
browser_version?: string | undefined;
|
|
75
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
76
|
-
device?: string | undefined;
|
|
77
|
-
device_id?: string | undefined;
|
|
78
|
-
device_type?: string | undefined;
|
|
79
|
-
device_vendor?: string | undefined;
|
|
80
|
-
device_pixel_ratio?: string | undefined;
|
|
81
|
-
release?: string | undefined;
|
|
82
|
-
time_zone?: string | undefined;
|
|
83
|
-
environment?: "development" | "production" | undefined;
|
|
84
|
-
source_url?: string | undefined;
|
|
85
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
86
|
-
fbc?: string | undefined;
|
|
87
|
-
fbp?: string | undefined;
|
|
88
|
-
advertising_id?: string | undefined;
|
|
89
|
-
utm_source?: string | undefined;
|
|
90
|
-
utm_medium?: string | undefined;
|
|
91
|
-
utm_campaign?: string | undefined;
|
|
92
|
-
utm_term?: string | undefined;
|
|
93
|
-
utm_content?: string | undefined;
|
|
94
|
-
}>;
|
|
95
|
-
properties: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>, "many">]>>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>, Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null>>>;
|
|
96
|
-
}, "strip", z.ZodTypeAny, {
|
|
97
|
-
visitor_id: bigint;
|
|
98
|
-
name: string;
|
|
99
|
-
timestamp: string;
|
|
100
|
-
tags: {
|
|
101
|
-
gclid?: string | undefined;
|
|
102
|
-
language?: string | undefined;
|
|
103
|
-
screen_resolution?: `${number}x${number}` | undefined;
|
|
104
|
-
os?: string | undefined;
|
|
105
|
-
os_name?: string | undefined;
|
|
106
|
-
os_version?: string | undefined;
|
|
107
|
-
browser?: string | undefined;
|
|
108
|
-
browser_name?: string | undefined;
|
|
109
|
-
browser_version?: string | undefined;
|
|
110
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
111
|
-
device?: string | undefined;
|
|
112
|
-
device_id?: string | undefined;
|
|
113
|
-
device_type?: string | undefined;
|
|
114
|
-
device_vendor?: string | undefined;
|
|
115
|
-
device_pixel_ratio?: string | undefined;
|
|
116
|
-
release?: string | undefined;
|
|
117
|
-
time_zone?: string | undefined;
|
|
118
|
-
environment?: "development" | "production" | undefined;
|
|
119
|
-
source_url?: string | undefined;
|
|
120
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
121
|
-
fbc?: string | undefined;
|
|
122
|
-
fbp?: string | undefined;
|
|
123
|
-
advertising_id?: string | undefined;
|
|
124
|
-
utm_source?: string | undefined;
|
|
125
|
-
utm_medium?: string | undefined;
|
|
126
|
-
utm_campaign?: string | undefined;
|
|
127
|
-
utm_term?: string | undefined;
|
|
128
|
-
utm_content?: string | undefined;
|
|
129
|
-
};
|
|
130
|
-
properties?: Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null> | undefined;
|
|
131
|
-
}, {
|
|
132
|
-
visitor_id: bigint;
|
|
133
|
-
name: string;
|
|
134
|
-
timestamp: string;
|
|
135
|
-
tags: {
|
|
136
|
-
gclid?: string | undefined;
|
|
137
|
-
language?: string | undefined;
|
|
138
|
-
screen_resolution?: string | undefined;
|
|
139
|
-
os?: string | undefined;
|
|
140
|
-
os_name?: string | undefined;
|
|
141
|
-
os_version?: string | undefined;
|
|
142
|
-
browser?: string | undefined;
|
|
143
|
-
browser_name?: string | undefined;
|
|
144
|
-
browser_version?: string | undefined;
|
|
145
|
-
platform?: "ios" | "android" | "web" | "macos" | "windows" | "linux" | "unknown" | undefined;
|
|
146
|
-
device?: string | undefined;
|
|
147
|
-
device_id?: string | undefined;
|
|
148
|
-
device_type?: string | undefined;
|
|
149
|
-
device_vendor?: string | undefined;
|
|
150
|
-
device_pixel_ratio?: string | undefined;
|
|
151
|
-
release?: string | undefined;
|
|
152
|
-
time_zone?: string | undefined;
|
|
153
|
-
environment?: "development" | "production" | undefined;
|
|
154
|
-
source_url?: string | undefined;
|
|
155
|
-
source?: "web" | "app" | "offline" | undefined;
|
|
156
|
-
fbc?: string | undefined;
|
|
157
|
-
fbp?: string | undefined;
|
|
158
|
-
advertising_id?: string | undefined;
|
|
159
|
-
utm_source?: string | undefined;
|
|
160
|
-
utm_medium?: string | undefined;
|
|
161
|
-
utm_campaign?: string | undefined;
|
|
162
|
-
utm_term?: string | undefined;
|
|
163
|
-
utm_content?: string | undefined;
|
|
164
|
-
};
|
|
165
|
-
properties?: Record<string, string | number | boolean | Record<string, string | number | boolean | null>[] | null> | undefined;
|
|
166
|
-
}>, "many">;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>]>>>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
167
54
|
declare const createVisitorSchema: z.ZodObject<{
|
|
168
55
|
device_id: z.ZodString;
|
|
169
|
-
properties: z.ZodOptional<z.
|
|
170
|
-
},
|
|
171
|
-
device_id: string;
|
|
172
|
-
properties?: Record<string, string | number | boolean | null> | undefined;
|
|
173
|
-
}, {
|
|
174
|
-
device_id: string;
|
|
175
|
-
properties?: Record<string, string | number | boolean | null> | undefined;
|
|
176
|
-
}>;
|
|
56
|
+
properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
57
|
+
}, z.core.$strip>;
|
|
177
58
|
declare const updateVisitorSchema: z.ZodObject<{
|
|
178
|
-
properties: z.
|
|
179
|
-
},
|
|
180
|
-
properties: Record<string, string | number | boolean | null>;
|
|
181
|
-
}, {
|
|
182
|
-
properties: Record<string, string | number | boolean | null>;
|
|
183
|
-
}>;
|
|
59
|
+
properties: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
|
|
60
|
+
}, z.core.$strip>;
|
|
184
61
|
|
|
185
62
|
export { createTrackEventSchema, createVisitorSchema, updateVisitorSchema };
|
package/dist/schema/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import { z } from 'zod';\n\nconst items = z.array(\n z.record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n);\n\nexport const createTrackEventSchema = z\n .object({\n name: z.string().trim().min(1).max(64),\n visitor_id: z.coerce.bigint(),\n timestamp: z.string().datetime(),\n tags: z.object({\n os: z.string().optional(),\n os_name: z.string().optional(),\n os_version: z.string().optional(),\n browser: z.string().optional(),\n browser_name: z.string().optional(),\n browser_version: z.string().optional(),\n platform: z\n .enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])\n .optional(),\n device: z.string().optional(),\n device_id: z.string().trim().min(1).max(36).optional(),\n device_type: z.string().optional(),\n device_vendor: z.string().optional(),\n device_pixel_ratio: z.string().optional(),\n screen_resolution: z\n .string()\n .regex(/^\\d+x\\d+$/)\n .transform((v) => v as `${number}x${number}`)\n .optional(),\n release: z.string().optional(),\n language: z.string().optional(),\n time_zone: z.string().optional(),\n environment: z.enum(['development', 'production']).optional(),\n source_url: z.string().optional(),\n source: z.enum(['web', 'app', 'offline']).optional(),\n fbc: z.string().optional(),\n fbp: z.string().optional(),\n gclid: z.string().optional(),\n advertising_id: z.string().optional(),\n utm_source: z.string().optional(),\n utm_medium: z.string().optional(),\n utm_campaign: z.string().optional(),\n utm_term: z.string().optional(),\n utm_content: z.string().optional(),\n }),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null(), items])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n })\n .array()\n .min(1)\n .max(100);\n\nexport const createVisitorSchema = z.object({\n device_id: z.string().trim().min(1).max(36),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n});\n\nexport const updateVisitorSchema = z.object({\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nconst items = z.array(\n z.record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n);\n\nexport const createTrackEventSchema = z\n .object({\n name: z.string().trim().min(1).max(64),\n visitor_id: z.coerce.bigint(),\n timestamp: z.string().datetime(),\n tags: z.object({\n os: z.string().optional(),\n os_name: z.string().optional(),\n os_version: z.string().optional(),\n browser: z.string().optional(),\n browser_name: z.string().optional(),\n browser_version: z.string().optional(),\n platform: z\n .enum(['ios', 'android', 'web', 'macos', 'windows', 'linux', 'unknown'])\n .optional(),\n device: z.string().optional(),\n device_id: z.string().trim().min(1).max(36).optional(),\n device_type: z.string().optional(),\n device_vendor: z.string().optional(),\n device_pixel_ratio: z.string().optional(),\n screen_resolution: z\n .string()\n .regex(/^\\d+x\\d+$/)\n .transform((v) => v as `${number}x${number}`)\n .optional(),\n release: z.string().optional(),\n language: z.string().optional(),\n time_zone: z.string().optional(),\n environment: z.enum(['development', 'production']).optional(),\n source_url: z.string().optional(),\n source: z.enum(['web', 'app', 'offline']).optional(),\n fbc: z.string().optional(),\n fbp: z.string().optional(),\n gclid: z.string().optional(),\n advertising_id: z.string().optional(),\n utm_source: z.string().optional(),\n utm_medium: z.string().optional(),\n utm_campaign: z.string().optional(),\n utm_term: z.string().optional(),\n utm_content: z.string().optional(),\n }),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null(), items])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n })\n .array()\n .min(1)\n .max(100);\n\nexport const createVisitorSchema = z.object({\n device_id: z.string().trim().min(1).max(36),\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64)\n .optional(),\n});\n\nexport const updateVisitorSchema = z.object({\n properties: z\n .record(\n z.string().trim().min(1).max(128),\n z.union([z.string().max(512), z.number(), z.boolean(), z.null()])\n )\n .refine((data) => Object.keys(data).length <= 64),\n});\n"],"mappings":"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","names":[]}
|
package/dist/track/index.cjs
CHANGED
|
@@ -24,21 +24,16 @@ __export(track_exports, {
|
|
|
24
24
|
trackAsync: () => trackAsync
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(track_exports);
|
|
27
|
-
var
|
|
27
|
+
var import_token_bucket = require("../utils/token-bucket.cjs");
|
|
28
28
|
var import_setup = require("../setup/index.cjs");
|
|
29
29
|
var import_visitor = require("../visitor/index.cjs");
|
|
30
30
|
var defaultOptions = { enableThirdPartyTracking: true };
|
|
31
|
-
var
|
|
32
|
-
var tokenBucket = new import_limiter.TokenBucket({
|
|
33
|
-
bucketSize: 20,
|
|
34
|
-
interval: "second",
|
|
35
|
-
tokensPerInterval: 1
|
|
36
|
-
});
|
|
31
|
+
var tokenBucket = new import_token_bucket.TokenBucket({ rate: 1, capacity: 20, requested: 2 });
|
|
37
32
|
async function sendEvents(events) {
|
|
38
33
|
var _a;
|
|
39
34
|
try {
|
|
40
35
|
if (events.length === 0) return;
|
|
41
|
-
await tokenBucket.removeTokens(
|
|
36
|
+
await tokenBucket.removeTokens();
|
|
42
37
|
const tags = await import_setup.config.getTags();
|
|
43
38
|
const visitor_id = (await (0, import_visitor.getVisitor)()).id;
|
|
44
39
|
const dto = events.map((event) => ({
|
package/dist/track/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from '
|
|
1
|
+
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from '../utils/token-bucket';\nimport { config } from '../setup/index';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackName,\n TrackProperties,\n TrackEventResponse,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n name: TrackName<any>;\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const headers = await config.getHeaders();\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto, { headers });\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA4B;AAC5B,mBAAuB;AACvB,qBAA2B;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AACtE,IAAM,cAAc,IAAI,gCAAY,EAAE,MAAM,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;AAS3E,eAAe,WAAW,QAAgB;AA3B1C;AA4BE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa;AAE/B,UAAM,OAAO,MAAM,oBAAO,QAAQ;AAClC,UAAM,cAAc,UAAM,2BAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,UAAU,MAAM,oBAAO,WAAW;AACxC,UAAM,EAAE,KAAK,IAAI,MAAM,oBAAO,KAAK,KAAyB,WAAW,KAAK,EAAE,QAAQ,CAAC;AACvF,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,oBAAO,mBAAoB;AACrE,0BAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AAtD3B,UAAAA,KAAA;AAsD8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
|
package/dist/track/index.mjs
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
// src/track/index.ts
|
|
2
|
-
import { TokenBucket } from "
|
|
2
|
+
import { TokenBucket } from "../utils/token-bucket.mjs";
|
|
3
3
|
import { config } from "../setup/index.mjs";
|
|
4
4
|
import { getVisitor } from "../visitor/index.mjs";
|
|
5
5
|
var defaultOptions = { enableThirdPartyTracking: true };
|
|
6
|
-
var
|
|
7
|
-
var tokenBucket = new TokenBucket({
|
|
8
|
-
bucketSize: 20,
|
|
9
|
-
interval: "second",
|
|
10
|
-
tokensPerInterval: 1
|
|
11
|
-
});
|
|
6
|
+
var tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });
|
|
12
7
|
async function sendEvents(events) {
|
|
13
8
|
var _a;
|
|
14
9
|
try {
|
|
15
10
|
if (events.length === 0) return;
|
|
16
|
-
await tokenBucket.removeTokens(
|
|
11
|
+
await tokenBucket.removeTokens();
|
|
17
12
|
const tags = await config.getTags();
|
|
18
13
|
const visitor_id = (await getVisitor()).id;
|
|
19
14
|
const dto = events.map((event) => ({
|
package/dist/track/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from '
|
|
1
|
+
{"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { TokenBucket } from '../utils/token-bucket';\nimport { config } from '../setup/index';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackName,\n TrackProperties,\n TrackEventResponse,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n name: TrackName<any>;\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const headers = await config.getHeaders();\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto, { headers });\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AACtE,IAAM,cAAc,IAAI,YAAY,EAAE,MAAM,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;AAS3E,eAAe,WAAW,QAAgB;AA3B1C;AA4BE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa;AAE/B,UAAM,OAAO,MAAM,OAAO,QAAQ;AAClC,UAAM,cAAc,MAAM,WAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,UAAU,MAAM,OAAO,WAAW;AACxC,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,KAAK,KAAyB,WAAW,KAAK,EAAE,QAAQ,CAAC;AACvF,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,OAAO,mBAAoB;AACrE,aAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AAtD3B,UAAAA,KAAA;AAsD8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
|
package/dist/track/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/track/types.ts"],"sourcesContent":["import type { StandardEvents, UserProvidedData as GAUserProvidedData } from './gtag';\n\nexport type AllowedPropertyValues = string | number | boolean | null;\nexport type EventName = Lowercase<string> | 'CLS' | 'FCP' | '
|
|
1
|
+
{"version":3,"sources":["../../src/track/types.ts"],"sourcesContent":["import type { StandardEvents, UserProvidedData as GAUserProvidedData } from './gtag';\n\nexport type AllowedPropertyValues = string | number | boolean | null;\nexport type EventName = Lowercase<string> | 'CLS' | 'FCP' | 'INP' | 'LCP' | 'TTFB';\n\nexport type TrackName<T extends EventName = EventName> = T extends keyof StandardEvents\n ? T\n : EventName;\nexport type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEvents\n ? StandardEvents[T]\n : Record<Lowercase<string>, AllowedPropertyValues>;\n\nexport interface UserData {\n userId: string;\n email?: string;\n firstName?: string;\n lastName?: string;\n phone?: string;\n dateOfBirth?: string;\n gender?: string;\n city?: string;\n state?: string;\n postal?: string;\n country?: string;\n}\n\nexport interface UserProvidedData extends GAUserProvidedData {\n user_id?: string;\n ip_address?: string;\n user_agent?: string;\n gender?: 'female' | 'male';\n birthday?: { year: number; month: number; day: number };\n // meta specific\n fb_login_id?: string;\n fb_page_id?: string;\n}\n\nexport type ThirdPartyTracker = <T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n event_id?: string\n) => void;\n\nexport interface PlatformInfo {\n os?: string;\n os_name?: string;\n os_version?: string;\n browser?: string;\n browser_name?: string;\n browser_version?: string;\n platform?: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n}\n\nexport interface DeviceInfo {\n device?: string;\n device_id?: string;\n device_type?: string;\n device_vendor?: string;\n device_model_id?: string;\n device_pixel_ratio?: string;\n screen_width?: number;\n screen_height?: number;\n screen_resolution?: `${number}x${number}`;\n}\n\nexport interface AppInfo {\n install_referrer?: string;\n}\n\nexport interface EnvironmentInfo {\n release?: string;\n language?: string;\n time_zone?: string | null;\n environment?: 'development' | 'production';\n}\n\nexport interface SourceInfo {\n source_url?: string;\n source?: 'app' | 'web' | 'offline';\n}\n\nexport interface AdvertisingInfo {\n /**\n * Meta pixel fields\n * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc\n * Stored in the _fbc/_fbp browser cookie under your domain\n */\n fbc?: string;\n fbp?: string;\n /**\n * Google Analytics fields\n */\n gclid?: string;\n /** iOS: IDFA, Android: Android Advertising ID */\n advertising_id?: string;\n}\n\nexport interface UTMParams {\n utm_source?: string;\n utm_medium?: string;\n utm_campaign?: string;\n utm_term?: string;\n utm_content?: string;\n}\n\nexport interface TrackTags\n extends PlatformInfo,\n DeviceInfo,\n AppInfo,\n EnvironmentInfo,\n SourceInfo,\n AdvertisingInfo,\n UTMParams {\n idempotency_key?: string;\n [key: string]: string | number | boolean | null | undefined;\n}\n\nexport type CreateTrackEventDTO<T extends EventName = EventName> = {\n name: TrackName<T>;\n tags: TrackTags;\n visitor_id: string;\n properties?: TrackProperties<T>;\n timestamp: string;\n}[];\n\nexport interface TrackEvent<T extends EventName = EventName> {\n id: string | bigint;\n name: TrackName<T>;\n tags: TrackTags;\n visitor_id: string | bigint;\n properties?: TrackProperties<T>;\n created_at: string;\n}\n\nexport type TrackEventResponse = {\n /**\n * track event id\n * some tracking system will use event_id and event_name for deduplication\n * */\n id: string;\n}[];\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
package/dist/track/types.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StandardEvents, UserProvidedData as UserProvidedData$1 } from './gtag.cjs';
|
|
2
2
|
|
|
3
3
|
type AllowedPropertyValues = string | number | boolean | null;
|
|
4
|
-
type EventName = Lowercase<string> | 'CLS' | 'FCP' | '
|
|
4
|
+
type EventName = Lowercase<string> | 'CLS' | 'FCP' | 'INP' | 'LCP' | 'TTFB';
|
|
5
5
|
type TrackName<T extends EventName = EventName> = T extends keyof StandardEvents ? T : EventName;
|
|
6
6
|
type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEvents ? StandardEvents[T] : Record<Lowercase<string>, AllowedPropertyValues>;
|
|
7
7
|
interface UserData {
|
package/dist/track/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StandardEvents, UserProvidedData as UserProvidedData$1 } from './gtag.js';
|
|
2
2
|
|
|
3
3
|
type AllowedPropertyValues = string | number | boolean | null;
|
|
4
|
-
type EventName = Lowercase<string> | 'CLS' | 'FCP' | '
|
|
4
|
+
type EventName = Lowercase<string> | 'CLS' | 'FCP' | 'INP' | 'LCP' | 'TTFB';
|
|
5
5
|
type TrackName<T extends EventName = EventName> = T extends keyof StandardEvents ? T : EventName;
|
|
6
6
|
type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEvents ? StandardEvents[T] : Record<Lowercase<string>, AllowedPropertyValues>;
|
|
7
7
|
interface UserData {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/utils/token-bucket.ts
|
|
21
|
+
var token_bucket_exports = {};
|
|
22
|
+
__export(token_bucket_exports, {
|
|
23
|
+
TokenBucket: () => TokenBucket
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(token_bucket_exports);
|
|
26
|
+
var INTERVAL_MAP = {
|
|
27
|
+
second: 1e3,
|
|
28
|
+
minute: 60 * 1e3,
|
|
29
|
+
hour: 60 * 60 * 1e3,
|
|
30
|
+
day: 24 * 60 * 60 * 1e3
|
|
31
|
+
};
|
|
32
|
+
var TokenBucket = class {
|
|
33
|
+
rate;
|
|
34
|
+
capacity;
|
|
35
|
+
requested;
|
|
36
|
+
timer;
|
|
37
|
+
tokens;
|
|
38
|
+
constructor({ rate, capacity, requested, interval = "second" }) {
|
|
39
|
+
if (rate <= 0) throw new Error("rate must be greater than 0");
|
|
40
|
+
if (capacity <= 0) throw new Error("capacity must be greater than 0");
|
|
41
|
+
if (requested <= 0) throw new Error("requested must be greater than 0");
|
|
42
|
+
if (requested > capacity) throw new Error("requested must be less than or equal to capacity");
|
|
43
|
+
this.rate = rate;
|
|
44
|
+
this.capacity = capacity;
|
|
45
|
+
this.requested = requested;
|
|
46
|
+
this.tokens = capacity;
|
|
47
|
+
this.timer = setInterval(() => {
|
|
48
|
+
if (this.tokens < this.capacity) {
|
|
49
|
+
const tokens = this.tokens + this.rate;
|
|
50
|
+
this.tokens = Math.min(tokens, this.capacity);
|
|
51
|
+
}
|
|
52
|
+
}, INTERVAL_MAP[interval]);
|
|
53
|
+
}
|
|
54
|
+
wait(ms) {
|
|
55
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
56
|
+
}
|
|
57
|
+
async removeTokens() {
|
|
58
|
+
while (this.tokens < this.requested) {
|
|
59
|
+
const ms = Math.ceil(1e3 * (this.requested - this.tokens) / this.rate);
|
|
60
|
+
await this.wait(ms);
|
|
61
|
+
}
|
|
62
|
+
this.tokens -= this.requested;
|
|
63
|
+
return this.tokens;
|
|
64
|
+
}
|
|
65
|
+
destroy() {
|
|
66
|
+
clearInterval(this.timer);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
70
|
+
0 && (module.exports = {
|
|
71
|
+
TokenBucket
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=token-bucket.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/token-bucket.ts"],"sourcesContent":["type Interval = 'second' | 'minute' | 'hour' | 'day';\n\nconst INTERVAL_MAP: Record<Interval, number> = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n};\n\nexport interface TokenBucketOptions {\n rate: number;\n capacity: number;\n requested: number;\n interval?: Interval;\n}\n\nexport class TokenBucket {\n readonly rate: number;\n readonly capacity: number;\n readonly requested: number;\n private readonly timer: number | NodeJS.Timeout;\n private tokens: number;\n\n constructor({ rate, capacity, requested, interval = 'second' }: TokenBucketOptions) {\n if (rate <= 0) throw new Error('rate must be greater than 0');\n if (capacity <= 0) throw new Error('capacity must be greater than 0');\n if (requested <= 0) throw new Error('requested must be greater than 0');\n if (requested > capacity) throw new Error('requested must be less than or equal to capacity');\n\n this.rate = rate;\n this.capacity = capacity;\n this.requested = requested;\n this.tokens = capacity;\n this.timer = setInterval(() => {\n if (this.tokens < this.capacity) {\n const tokens = this.tokens + this.rate;\n this.tokens = Math.min(tokens, this.capacity);\n }\n }, INTERVAL_MAP[interval]);\n }\n\n private wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n async removeTokens(): Promise<number> {\n while (this.tokens < this.requested) {\n const ms = Math.ceil((1000 * (this.requested - this.tokens)) / this.rate);\n await this.wait(ms);\n }\n this.tokens -= this.requested;\n return this.tokens;\n }\n\n destroy() {\n clearInterval(this.timer);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAM,eAAyC;AAAA,EAC7C,QAAQ;AAAA,EACR,QAAQ,KAAK;AAAA,EACb,MAAM,KAAK,KAAK;AAAA,EAChB,KAAK,KAAK,KAAK,KAAK;AACtB;AASO,IAAM,cAAN,MAAkB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EACT;AAAA,EAER,YAAY,EAAE,MAAM,UAAU,WAAW,WAAW,SAAS,GAAuB;AAClF,QAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,6BAA6B;AAC5D,QAAI,YAAY,EAAG,OAAM,IAAI,MAAM,iCAAiC;AACpE,QAAI,aAAa,EAAG,OAAM,IAAI,MAAM,kCAAkC;AACtE,QAAI,YAAY,SAAU,OAAM,IAAI,MAAM,kDAAkD;AAE5F,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,QAAQ,YAAY,MAAM;AAC7B,UAAI,KAAK,SAAS,KAAK,UAAU;AAC/B,cAAM,SAAS,KAAK,SAAS,KAAK;AAClC,aAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,QAAQ;AAAA,MAC9C;AAAA,IACF,GAAG,aAAa,QAAQ,CAAC;AAAA,EAC3B;AAAA,EAEQ,KAAK,IAA2B;AACtC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA,EAEA,MAAM,eAAgC;AACpC,WAAO,KAAK,SAAS,KAAK,WAAW;AACnC,YAAM,KAAK,KAAK,KAAM,OAAQ,KAAK,YAAY,KAAK,UAAW,KAAK,IAAI;AACxE,YAAM,KAAK,KAAK,EAAE;AAAA,IACpB;AACA,SAAK,UAAU,KAAK;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAU;AACR,kBAAc,KAAK,KAAK;AAAA,EAC1B;AACF;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type Interval = 'second' | 'minute' | 'hour' | 'day';
|
|
2
|
+
interface TokenBucketOptions {
|
|
3
|
+
rate: number;
|
|
4
|
+
capacity: number;
|
|
5
|
+
requested: number;
|
|
6
|
+
interval?: Interval;
|
|
7
|
+
}
|
|
8
|
+
declare class TokenBucket {
|
|
9
|
+
readonly rate: number;
|
|
10
|
+
readonly capacity: number;
|
|
11
|
+
readonly requested: number;
|
|
12
|
+
private readonly timer;
|
|
13
|
+
private tokens;
|
|
14
|
+
constructor({ rate, capacity, requested, interval }: TokenBucketOptions);
|
|
15
|
+
private wait;
|
|
16
|
+
removeTokens(): Promise<number>;
|
|
17
|
+
destroy(): void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { TokenBucket, type TokenBucketOptions };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type Interval = 'second' | 'minute' | 'hour' | 'day';
|
|
2
|
+
interface TokenBucketOptions {
|
|
3
|
+
rate: number;
|
|
4
|
+
capacity: number;
|
|
5
|
+
requested: number;
|
|
6
|
+
interval?: Interval;
|
|
7
|
+
}
|
|
8
|
+
declare class TokenBucket {
|
|
9
|
+
readonly rate: number;
|
|
10
|
+
readonly capacity: number;
|
|
11
|
+
readonly requested: number;
|
|
12
|
+
private readonly timer;
|
|
13
|
+
private tokens;
|
|
14
|
+
constructor({ rate, capacity, requested, interval }: TokenBucketOptions);
|
|
15
|
+
private wait;
|
|
16
|
+
removeTokens(): Promise<number>;
|
|
17
|
+
destroy(): void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { TokenBucket, type TokenBucketOptions };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// src/utils/token-bucket.ts
|
|
2
|
+
var INTERVAL_MAP = {
|
|
3
|
+
second: 1e3,
|
|
4
|
+
minute: 60 * 1e3,
|
|
5
|
+
hour: 60 * 60 * 1e3,
|
|
6
|
+
day: 24 * 60 * 60 * 1e3
|
|
7
|
+
};
|
|
8
|
+
var TokenBucket = class {
|
|
9
|
+
rate;
|
|
10
|
+
capacity;
|
|
11
|
+
requested;
|
|
12
|
+
timer;
|
|
13
|
+
tokens;
|
|
14
|
+
constructor({ rate, capacity, requested, interval = "second" }) {
|
|
15
|
+
if (rate <= 0) throw new Error("rate must be greater than 0");
|
|
16
|
+
if (capacity <= 0) throw new Error("capacity must be greater than 0");
|
|
17
|
+
if (requested <= 0) throw new Error("requested must be greater than 0");
|
|
18
|
+
if (requested > capacity) throw new Error("requested must be less than or equal to capacity");
|
|
19
|
+
this.rate = rate;
|
|
20
|
+
this.capacity = capacity;
|
|
21
|
+
this.requested = requested;
|
|
22
|
+
this.tokens = capacity;
|
|
23
|
+
this.timer = setInterval(() => {
|
|
24
|
+
if (this.tokens < this.capacity) {
|
|
25
|
+
const tokens = this.tokens + this.rate;
|
|
26
|
+
this.tokens = Math.min(tokens, this.capacity);
|
|
27
|
+
}
|
|
28
|
+
}, INTERVAL_MAP[interval]);
|
|
29
|
+
}
|
|
30
|
+
wait(ms) {
|
|
31
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
32
|
+
}
|
|
33
|
+
async removeTokens() {
|
|
34
|
+
while (this.tokens < this.requested) {
|
|
35
|
+
const ms = Math.ceil(1e3 * (this.requested - this.tokens) / this.rate);
|
|
36
|
+
await this.wait(ms);
|
|
37
|
+
}
|
|
38
|
+
this.tokens -= this.requested;
|
|
39
|
+
return this.tokens;
|
|
40
|
+
}
|
|
41
|
+
destroy() {
|
|
42
|
+
clearInterval(this.timer);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export {
|
|
46
|
+
TokenBucket
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=token-bucket.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/token-bucket.ts"],"sourcesContent":["type Interval = 'second' | 'minute' | 'hour' | 'day';\n\nconst INTERVAL_MAP: Record<Interval, number> = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n};\n\nexport interface TokenBucketOptions {\n rate: number;\n capacity: number;\n requested: number;\n interval?: Interval;\n}\n\nexport class TokenBucket {\n readonly rate: number;\n readonly capacity: number;\n readonly requested: number;\n private readonly timer: number | NodeJS.Timeout;\n private tokens: number;\n\n constructor({ rate, capacity, requested, interval = 'second' }: TokenBucketOptions) {\n if (rate <= 0) throw new Error('rate must be greater than 0');\n if (capacity <= 0) throw new Error('capacity must be greater than 0');\n if (requested <= 0) throw new Error('requested must be greater than 0');\n if (requested > capacity) throw new Error('requested must be less than or equal to capacity');\n\n this.rate = rate;\n this.capacity = capacity;\n this.requested = requested;\n this.tokens = capacity;\n this.timer = setInterval(() => {\n if (this.tokens < this.capacity) {\n const tokens = this.tokens + this.rate;\n this.tokens = Math.min(tokens, this.capacity);\n }\n }, INTERVAL_MAP[interval]);\n }\n\n private wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n async removeTokens(): Promise<number> {\n while (this.tokens < this.requested) {\n const ms = Math.ceil((1000 * (this.requested - this.tokens)) / this.rate);\n await this.wait(ms);\n }\n this.tokens -= this.requested;\n return this.tokens;\n }\n\n destroy() {\n clearInterval(this.timer);\n }\n}\n"],"mappings":";AAEA,IAAM,eAAyC;AAAA,EAC7C,QAAQ;AAAA,EACR,QAAQ,KAAK;AAAA,EACb,MAAM,KAAK,KAAK;AAAA,EAChB,KAAK,KAAK,KAAK,KAAK;AACtB;AASO,IAAM,cAAN,MAAkB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EACT;AAAA,EAER,YAAY,EAAE,MAAM,UAAU,WAAW,WAAW,SAAS,GAAuB;AAClF,QAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,6BAA6B;AAC5D,QAAI,YAAY,EAAG,OAAM,IAAI,MAAM,iCAAiC;AACpE,QAAI,aAAa,EAAG,OAAM,IAAI,MAAM,kCAAkC;AACtE,QAAI,YAAY,SAAU,OAAM,IAAI,MAAM,kDAAkD;AAE5F,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,QAAQ,YAAY,MAAM;AAC7B,UAAI,KAAK,SAAS,KAAK,UAAU;AAC/B,cAAM,SAAS,KAAK,SAAS,KAAK;AAClC,aAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,QAAQ;AAAA,MAC9C;AAAA,IACF,GAAG,aAAa,QAAQ,CAAC;AAAA,EAC3B;AAAA,EAEQ,KAAK,IAA2B;AACtC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA,EAEA,MAAM,eAAgC;AACpC,WAAO,KAAK,SAAS,KAAK,WAAW;AACnC,YAAM,KAAK,KAAK,KAAM,OAAQ,KAAK,YAAY,KAAK,UAAW,KAAK,IAAI;AACxE,YAAM,KAAK,KAAK,EAAE;AAAA,IACpB;AACA,SAAK,UAAU,KAAK;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAU;AACR,kBAAc,KAAK,KAAK;AAAA,EAC1B;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shware/analytics",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -45,19 +45,18 @@
|
|
|
45
45
|
"dist"
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"axios": "^1.
|
|
48
|
+
"axios": "^1.9.0",
|
|
49
49
|
"axios-retry": "^4.5.0",
|
|
50
50
|
"bowser": "^2.11.0",
|
|
51
51
|
"cookie": "^1.0.2",
|
|
52
|
-
"limiter": "^3.0.0",
|
|
53
52
|
"uuid": "^11.1.0",
|
|
54
|
-
"web-vitals": "^
|
|
55
|
-
"zod": "^3.
|
|
53
|
+
"web-vitals": "^5.0.2",
|
|
54
|
+
"zod": "^3.25.53"
|
|
56
55
|
},
|
|
57
56
|
"devDependencies": {
|
|
58
|
-
"@types/facebook-nodejs-business-sdk": "^
|
|
59
|
-
"@types/node": "^22.
|
|
60
|
-
"@types/react": "^19.1.
|
|
57
|
+
"@types/facebook-nodejs-business-sdk": "^22.0.0",
|
|
58
|
+
"@types/node": "^22.15.30",
|
|
59
|
+
"@types/react": "^19.1.6",
|
|
61
60
|
"typescript": "^5.8.3"
|
|
62
61
|
},
|
|
63
62
|
"peerDependencies": {
|