@etohq/utils 1.5.1-alpha.2 → 1.5.1-alpha.4
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/access-link/case-sensitivity.d.ts +14 -0
- package/dist/access-link/case-sensitivity.d.ts.map +1 -0
- package/dist/access-link/case-sensitivity.js +57 -0
- package/dist/access-link/case-sensitivity.js.map +1 -0
- package/dist/access-link/check-if-key-exists.d.ts +7 -0
- package/dist/access-link/check-if-key-exists.d.ts.map +1 -0
- package/dist/access-link/check-if-key-exists.js +36 -0
- package/dist/access-link/check-if-key-exists.js.map +1 -0
- package/dist/access-link/index.d.ts +11 -0
- package/dist/access-link/index.d.ts.map +1 -0
- package/dist/access-link/index.js +27 -0
- package/dist/access-link/index.js.map +1 -0
- package/dist/access-link/key-checks.d.ts +12 -0
- package/dist/access-link/key-checks.d.ts.map +1 -0
- package/dist/access-link/key-checks.js +78 -0
- package/dist/access-link/key-checks.js.map +1 -0
- package/dist/access-link/link-resolution.d.ts +26 -0
- package/dist/access-link/link-resolution.d.ts.map +1 -0
- package/dist/access-link/link-resolution.js +111 -0
- package/dist/access-link/link-resolution.js.map +1 -0
- package/dist/access-link/link-utils.d.ts +23 -0
- package/dist/access-link/link-utils.d.ts.map +1 -0
- package/dist/access-link/link-utils.js +61 -0
- package/dist/access-link/link-utils.js.map +1 -0
- package/dist/access-link/process-key.d.ts +5 -0
- package/dist/access-link/process-key.d.ts.map +1 -0
- package/dist/access-link/process-key.js +58 -0
- package/dist/access-link/process-key.js.map +1 -0
- package/dist/access-link/process-utils.d.ts +19 -0
- package/dist/access-link/process-utils.d.ts.map +1 -0
- package/dist/access-link/process-utils.js +52 -0
- package/dist/access-link/process-utils.js.map +1 -0
- package/dist/access-link/transform-link.d.ts +47 -0
- package/dist/access-link/transform-link.d.ts.map +1 -0
- package/dist/access-link/transform-link.js +25 -0
- package/dist/access-link/transform-link.js.map +1 -0
- package/dist/access-link/url-detection.d.ts +10 -0
- package/dist/access-link/url-detection.d.ts.map +1 -0
- package/dist/access-link/url-detection.js +63 -0
- package/dist/access-link/url-detection.js.map +1 -0
- package/dist/access-link/validation-utils.d.ts +23 -0
- package/dist/access-link/validation-utils.d.ts.map +1 -0
- package/dist/access-link/validation-utils.js +57 -0
- package/dist/access-link/validation-utils.js.map +1 -0
- package/dist/analytics/detect-bot.d.ts +2 -0
- package/dist/analytics/detect-bot.d.ts.map +1 -0
- package/dist/analytics/detect-bot.js +21 -0
- package/dist/analytics/detect-bot.js.map +1 -0
- package/dist/analytics/detect-qr.d.ts +2 -0
- package/dist/analytics/detect-qr.d.ts.map +1 -0
- package/dist/analytics/detect-qr.js +10 -0
- package/dist/analytics/detect-qr.js.map +1 -0
- package/dist/analytics/get-click-event.d.ts +8 -0
- package/dist/analytics/get-click-event.d.ts.map +1 -0
- package/dist/analytics/get-click-event.js +24 -0
- package/dist/analytics/get-click-event.js.map +1 -0
- package/dist/analytics/get-geolocation.d.ts +12 -0
- package/dist/analytics/get-geolocation.d.ts.map +1 -0
- package/dist/analytics/get-geolocation.js +51 -0
- package/dist/analytics/get-geolocation.js.map +1 -0
- package/dist/analytics/get-grant-event.d.ts +8 -0
- package/dist/analytics/get-grant-event.d.ts.map +1 -0
- package/dist/analytics/get-grant-event.js +24 -0
- package/dist/analytics/get-grant-event.js.map +1 -0
- package/dist/analytics/get-import-error-logs.d.ts +17 -0
- package/dist/analytics/get-import-error-logs.d.ts.map +1 -0
- package/dist/analytics/get-import-error-logs.js +23 -0
- package/dist/analytics/get-import-error-logs.js.map +1 -0
- package/dist/analytics/get-lead-events.d.ts +17 -0
- package/dist/analytics/get-lead-events.d.ts.map +1 -0
- package/dist/analytics/get-lead-events.js +17 -0
- package/dist/analytics/get-lead-events.js.map +1 -0
- package/dist/analytics/get-webhook-events.d.ts +17 -0
- package/dist/analytics/get-webhook-events.d.ts.map +1 -0
- package/dist/analytics/get-webhook-events.js +22 -0
- package/dist/analytics/get-webhook-events.js.map +1 -0
- package/dist/analytics/index.d.ts +18 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +18 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/log-conversion-events.d.ts +6 -0
- package/dist/analytics/log-conversion-events.d.ts.map +1 -0
- package/dist/analytics/log-conversion-events.js +20 -0
- package/dist/analytics/log-conversion-events.js.map +1 -0
- package/dist/analytics/log-import-error.d.ts +6 -0
- package/dist/analytics/log-import-error.d.ts.map +1 -0
- package/dist/analytics/log-import-error.js +18 -0
- package/dist/analytics/log-import-error.js.map +1 -0
- package/dist/analytics/parse-user-agent.d.ts +13 -0
- package/dist/analytics/parse-user-agent.d.ts.map +1 -0
- package/dist/analytics/parse-user-agent.js +174 -0
- package/dist/analytics/parse-user-agent.js.map +1 -0
- package/dist/analytics/record-approval.d.ts +56 -0
- package/dist/analytics/record-approval.d.ts.map +1 -0
- package/dist/analytics/record-approval.js +32 -0
- package/dist/analytics/record-approval.js.map +1 -0
- package/dist/analytics/record-click.d.ts +32 -0
- package/dist/analytics/record-click.d.ts.map +1 -0
- package/dist/analytics/record-click.js +136 -0
- package/dist/analytics/record-click.js.map +1 -0
- package/dist/analytics/record-lead.d.ts +24 -0
- package/dist/analytics/record-lead.d.ts.map +1 -0
- package/dist/analytics/record-lead.js +72 -0
- package/dist/analytics/record-lead.js.map +1 -0
- package/dist/analytics/record-link.d.ts +106 -0
- package/dist/analytics/record-link.d.ts.map +1 -0
- package/dist/analytics/record-link.js +78 -0
- package/dist/analytics/record-link.js.map +1 -0
- package/dist/analytics/record-sale.d.ts +10 -0
- package/dist/analytics/record-sale.d.ts.map +1 -0
- package/dist/analytics/record-sale.js +35 -0
- package/dist/analytics/record-sale.js.map +1 -0
- package/dist/analytics/record-webhook-event.d.ts +26 -0
- package/dist/analytics/record-webhook-event.d.ts.map +1 -0
- package/dist/analytics/record-webhook-event.js +22 -0
- package/dist/analytics/record-webhook-event.js.map +1 -0
- package/dist/analytics/schemas.d.ts +257 -0
- package/dist/analytics/schemas.d.ts.map +1 -0
- package/dist/analytics/schemas.js +99 -0
- package/dist/analytics/schemas.js.map +1 -0
- package/dist/analytics/tinybird-client.d.ts +6 -0
- package/dist/analytics/tinybird-client.d.ts.map +1 -0
- package/dist/analytics/tinybird-client.js +11 -0
- package/dist/analytics/tinybird-client.js.map +1 -0
- package/dist/common/constants.d.ts +24 -0
- package/dist/common/constants.d.ts.map +1 -0
- package/dist/common/constants.js +196 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/domains.d.ts +8 -0
- package/dist/common/domains.d.ts.map +1 -0
- package/dist/common/domains.js +88 -0
- package/dist/common/domains.js.map +1 -0
- package/dist/common/dynamic-import.d.ts.map +1 -1
- package/dist/common/dynamic-import.js +24 -1
- package/dist/common/dynamic-import.js.map +1 -1
- package/dist/common/fetch-with-retry.d.ts +6 -0
- package/dist/common/fetch-with-retry.d.ts.map +1 -0
- package/dist/common/fetch-with-retry.js +63 -0
- package/dist/common/fetch-with-retry.js.map +1 -0
- package/dist/common/get-identity-hash.d.ts +2 -0
- package/dist/common/get-identity-hash.d.ts.map +1 -0
- package/dist/common/get-identity-hash.js +19 -0
- package/dist/common/get-identity-hash.js.map +1 -0
- package/dist/common/index.d.ts +3 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +3 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/is-valid-url.d.ts +2 -0
- package/dist/common/is-valid-url.d.ts.map +1 -0
- package/dist/common/is-valid-url.js +14 -0
- package/dist/common/is-valid-url.js.map +1 -0
- package/dist/common/reserved-slugs.d.ts +7 -0
- package/dist/common/reserved-slugs.d.ts.map +1 -0
- package/dist/common/reserved-slugs.js +64 -0
- package/dist/common/reserved-slugs.js.map +1 -0
- package/dist/common/to-snake-case.d.ts +5 -0
- package/dist/common/to-snake-case.d.ts.map +1 -0
- package/dist/common/to-snake-case.js +14 -0
- package/dist/common/to-snake-case.js.map +1 -0
- package/dist/dml/entity-builder.d.ts +68 -0
- package/dist/dml/entity-builder.d.ts.map +1 -1
- package/dist/dml/entity-builder.js +76 -0
- package/dist/dml/entity-builder.js.map +1 -1
- package/dist/dml/helpers/entity-builder/define-property.d.ts.map +1 -1
- package/dist/dml/helpers/entity-builder/define-property.js +77 -0
- package/dist/dml/helpers/entity-builder/define-property.js.map +1 -1
- package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.d.ts +10 -0
- package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.d.ts.map +1 -0
- package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.js +31 -0
- package/dist/dml/helpers/mikro-orm/custom-type/geo-json-geometry.js.map +1 -0
- package/dist/dml/properties/enum.d.ts.map +1 -1
- package/dist/dml/properties/enum.js +0 -1
- package/dist/dml/properties/enum.js.map +1 -1
- package/dist/dml/properties/geometry.d.ts +8 -0
- package/dist/dml/properties/geometry.d.ts.map +1 -0
- package/dist/dml/properties/geometry.js +14 -0
- package/dist/dml/properties/geometry.js.map +1 -0
- package/dist/dml/properties/index.d.ts +4 -0
- package/dist/dml/properties/index.d.ts.map +1 -1
- package/dist/dml/properties/index.js +4 -0
- package/dist/dml/properties/index.js.map +1 -1
- package/dist/dml/properties/multipolygon.d.ts +8 -0
- package/dist/dml/properties/multipolygon.d.ts.map +1 -0
- package/dist/dml/properties/multipolygon.js +14 -0
- package/dist/dml/properties/multipolygon.js.map +1 -0
- package/dist/dml/properties/point.d.ts +8 -0
- package/dist/dml/properties/point.d.ts.map +1 -0
- package/dist/dml/properties/point.js +14 -0
- package/dist/dml/properties/point.js.map +1 -0
- package/dist/dml/properties/polygon.d.ts +8 -0
- package/dist/dml/properties/polygon.d.ts.map +1 -0
- package/dist/dml/properties/polygon.js +14 -0
- package/dist/dml/properties/polygon.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/modules-sdk/build-query.d.ts.map +1 -1
- package/dist/modules-sdk/build-query.js +3 -1
- package/dist/modules-sdk/build-query.js.map +1 -1
- package/dist/modules-sdk/definition.d.ts +18 -0
- package/dist/modules-sdk/definition.d.ts.map +1 -1
- package/dist/modules-sdk/definition.js +12 -0
- package/dist/modules-sdk/definition.js.map +1 -1
- package/dist/modules-sdk/spatial-query-processor.d.ts +2 -0
- package/dist/modules-sdk/spatial-query-processor.d.ts.map +1 -0
- package/dist/modules-sdk/spatial-query-processor.js +105 -0
- package/dist/modules-sdk/spatial-query-processor.js.map +1 -0
- package/dist/permissions/ability.d.ts +39 -0
- package/dist/permissions/ability.d.ts.map +1 -0
- package/dist/permissions/ability.js +51 -0
- package/dist/permissions/ability.js.map +1 -0
- package/dist/permissions/context-builder.d.ts +24 -0
- package/dist/permissions/context-builder.d.ts.map +1 -0
- package/dist/permissions/context-builder.js +30 -0
- package/dist/permissions/context-builder.js.map +1 -0
- package/dist/permissions/index.d.ts +4 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +20 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/permission-service.d.ts +8 -0
- package/dist/permissions/permission-service.d.ts.map +1 -0
- package/dist/permissions/permission-service.js +20 -0
- package/dist/permissions/permission-service.js.map +1 -0
- package/dist/permissions/types.d.ts +17 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +11 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/zod/schemas/approvals.d.ts +91 -0
- package/dist/zod/schemas/approvals.d.ts.map +1 -0
- package/dist/zod/schemas/approvals.js +38 -0
- package/dist/zod/schemas/approvals.js.map +1 -0
- package/dist/zod/schemas/clicks.d.ts +394 -0
- package/dist/zod/schemas/clicks.d.ts.map +1 -0
- package/dist/zod/schemas/clicks.js +85 -0
- package/dist/zod/schemas/clicks.js.map +1 -0
- package/dist/zod/schemas/leads.d.ts +423 -0
- package/dist/zod/schemas/leads.d.ts.map +1 -0
- package/dist/zod/schemas/leads.js +58 -0
- package/dist/zod/schemas/leads.js.map +1 -0
- package/package.json +8 -2
- package/dist/feature-flags/eto-v2.d.ts +0 -3
- package/dist/feature-flags/eto-v2.d.ts.map +0 -1
- package/dist/feature-flags/eto-v2.js +0 -10
- package/dist/feature-flags/eto-v2.js.map +0 -1
- package/dist/feature-flags/order-editing.d.ts +0 -3
- package/dist/feature-flags/order-editing.d.ts.map +0 -1
- package/dist/feature-flags/order-editing.js +0 -10
- package/dist/feature-flags/order-editing.js.map +0 -1
- package/dist/feature-flags/product-categories.d.ts +0 -3
- package/dist/feature-flags/product-categories.d.ts.map +0 -1
- package/dist/feature-flags/product-categories.js +0 -10
- package/dist/feature-flags/product-categories.js.map +0 -1
- package/dist/feature-flags/sales-channels.d.ts +0 -3
- package/dist/feature-flags/sales-channels.d.ts.map +0 -1
- package/dist/feature-flags/sales-channels.js +0 -10
- package/dist/feature-flags/sales-channels.js.map +0 -1
- package/dist/feature-flags/tax-inclusive-pricing.d.ts +0 -3
- package/dist/feature-flags/tax-inclusive-pricing.d.ts.map +0 -1
- package/dist/feature-flags/tax-inclusive-pricing.js +0 -10
- package/dist/feature-flags/tax-inclusive-pricing.js.map +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordClick = recordClick;
|
|
4
|
+
const fetch_with_retry_1 = require("../common/fetch-with-retry");
|
|
5
|
+
const detect_qr_1 = require("./detect-qr");
|
|
6
|
+
const detect_bot_1 = require("./detect-bot");
|
|
7
|
+
const parse_user_agent_1 = require("./parse-user-agent");
|
|
8
|
+
const get_geolocation_1 = require("./get-geolocation");
|
|
9
|
+
const get_identity_hash_1 = require("../common/get-identity-hash");
|
|
10
|
+
/**
|
|
11
|
+
* Recording access link clicks with geo, ua, referer and timestamp data
|
|
12
|
+
* Following Dub's recordClick pattern exactly, adapted for ETO access links
|
|
13
|
+
**/
|
|
14
|
+
async function recordClick({ req, clickId, linkId, domain, key, url, userId, projectId, skipRatelimit, timestamp, referrer, trigger = "link", eventName = "click_events", tinybirdConfig,
|
|
15
|
+
// Raw data options (for workflows/API endpoints)
|
|
16
|
+
ip, userAgent, country, region, city, continent, latitude, longitude, }) {
|
|
17
|
+
if (!clickId) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
let searchParams;
|
|
21
|
+
let finalUserAgent = "";
|
|
22
|
+
let finalIP = "";
|
|
23
|
+
let finalReferrer = "";
|
|
24
|
+
let isBot = false;
|
|
25
|
+
let isQr = false;
|
|
26
|
+
let geo = {};
|
|
27
|
+
let fallbackGeo = {};
|
|
28
|
+
if (req) {
|
|
29
|
+
searchParams = new URL(req.url).searchParams;
|
|
30
|
+
if (req.headers.has("eto-no-track") || searchParams.has("eto-no-track")) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
if (req.method === "HEAD") {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
finalUserAgent = req.headers.get("user-agent") || "";
|
|
37
|
+
// @ts-ignore - Headers.entries() is not available in the type definitions
|
|
38
|
+
finalIP = (0, get_geolocation_1.getIPFromRequest)(Object.fromEntries(req.headers.entries())) || "";
|
|
39
|
+
finalReferrer = referrer || req.headers.get("referer") || "";
|
|
40
|
+
isBot = (0, detect_bot_1.detectBot)(req);
|
|
41
|
+
isQr = (0, detect_qr_1.detectQr)(req);
|
|
42
|
+
// @ts-ignore - Headers.entries() is not available in the type definitions
|
|
43
|
+
geo = (0, get_geolocation_1.getGeolocationFromHeaders)(Object.fromEntries(req.headers.entries()));
|
|
44
|
+
if (finalIP) {
|
|
45
|
+
fallbackGeo = await (0, get_geolocation_1.getGeolocationFromIP)(finalIP);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
searchParams = new URLSearchParams();
|
|
50
|
+
finalUserAgent = userAgent || "";
|
|
51
|
+
finalIP = ip || "";
|
|
52
|
+
finalReferrer = referrer || "";
|
|
53
|
+
isBot = false;
|
|
54
|
+
isQr = false;
|
|
55
|
+
geo = {
|
|
56
|
+
continent: continent || "",
|
|
57
|
+
country: country || "Unknown",
|
|
58
|
+
region: region || "Unknown",
|
|
59
|
+
city: city || "Unknown",
|
|
60
|
+
latitude: latitude || "Unknown",
|
|
61
|
+
longitude: longitude || "Unknown",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const ua = (0, parse_user_agent_1.parseUserAgent)(finalUserAgent);
|
|
65
|
+
if (isBot) {
|
|
66
|
+
console.log(`Access not recorded ❌ – Bot detected.`, {
|
|
67
|
+
ua,
|
|
68
|
+
isBot,
|
|
69
|
+
});
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
let triggerFinal = trigger;
|
|
73
|
+
if (isQr) {
|
|
74
|
+
triggerFinal = "qr";
|
|
75
|
+
}
|
|
76
|
+
const identityHash = req ? await (0, get_identity_hash_1.getIdentityHash)(req) : "";
|
|
77
|
+
const clickData = {
|
|
78
|
+
timestamp: timestamp || new Date(Date.now()).toISOString(),
|
|
79
|
+
identity_hash: identityHash,
|
|
80
|
+
click_id: clickId,
|
|
81
|
+
link_id: linkId,
|
|
82
|
+
url: url || "",
|
|
83
|
+
ip: finalIP || "",
|
|
84
|
+
continent: geo.continent || fallbackGeo.continent || "",
|
|
85
|
+
country: geo.country || fallbackGeo.country || "Unknown",
|
|
86
|
+
region: geo.region || fallbackGeo.region || "Unknown",
|
|
87
|
+
city: geo.city || fallbackGeo.city || "Unknown",
|
|
88
|
+
latitude: geo.latitude || fallbackGeo.latitude || "Unknown",
|
|
89
|
+
longitude: geo.longitude || fallbackGeo.longitude || "Unknown",
|
|
90
|
+
device: ua.device || "Desktop",
|
|
91
|
+
device_vendor: ua.vendor || "Unknown",
|
|
92
|
+
device_model: ua.model || "Unknown",
|
|
93
|
+
browser: ua.browser || "Unknown",
|
|
94
|
+
browser_version: ua.version || "Unknown",
|
|
95
|
+
engine: ua.engine || "Unknown",
|
|
96
|
+
engine_version: ua.engineVersion || "Unknown",
|
|
97
|
+
os: ua.os || "Unknown",
|
|
98
|
+
os_version: ua.osVersion || "Unknown",
|
|
99
|
+
cpu_architecture: ua.cpu || "Unknown",
|
|
100
|
+
ua: finalUserAgent || "Unknown",
|
|
101
|
+
bot: isBot ? 1 : 0,
|
|
102
|
+
qr: isQr ? 1 : 0,
|
|
103
|
+
referer: finalReferrer
|
|
104
|
+
? getDomainWithoutWWW(finalReferrer) || "(direct)"
|
|
105
|
+
: "(direct)",
|
|
106
|
+
referer_url: finalReferrer || "(direct)",
|
|
107
|
+
trigger: triggerFinal,
|
|
108
|
+
user_id: userId,
|
|
109
|
+
project_id: projectId || "",
|
|
110
|
+
};
|
|
111
|
+
try {
|
|
112
|
+
const response = await (0, fetch_with_retry_1.fetchWithRetry)(`${tinybirdConfig.apiUrl}/v0/events?name=${eventName}&wait=true`, {
|
|
113
|
+
method: "POST",
|
|
114
|
+
headers: {
|
|
115
|
+
Authorization: `Bearer ${tinybirdConfig.apiKey}`,
|
|
116
|
+
"Content-Type": "application/json",
|
|
117
|
+
},
|
|
118
|
+
body: JSON.stringify(clickData),
|
|
119
|
+
});
|
|
120
|
+
return await response.json();
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error("Failed to record access event:", error);
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function getDomainWithoutWWW(url) {
|
|
128
|
+
try {
|
|
129
|
+
const domain = new URL(url).hostname;
|
|
130
|
+
return domain.startsWith("www.") ? domain.slice(4) : domain;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return url;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=record-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-click.js","sourceRoot":"","sources":["../../src/analytics/record-click.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare function recordLead({ tinybirdConfig, eventName, // Fixed: lead_events not access_lead_events
|
|
2
|
+
eventId, eventNameValue, clickId, linkId, customerId, // ETO: user_id as customer_id
|
|
3
|
+
projectId, resourceType, resourceId, role, grantType, autoGranted, headers, metadata, timestamp, }: {
|
|
4
|
+
tinybirdConfig: {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
};
|
|
8
|
+
eventName?: string;
|
|
9
|
+
eventId: string;
|
|
10
|
+
eventNameValue: string;
|
|
11
|
+
clickId: string;
|
|
12
|
+
linkId: string;
|
|
13
|
+
customerId: string;
|
|
14
|
+
projectId?: string;
|
|
15
|
+
resourceType: string;
|
|
16
|
+
resourceId: string;
|
|
17
|
+
role: string;
|
|
18
|
+
grantType: "primary" | "dependency";
|
|
19
|
+
autoGranted: boolean;
|
|
20
|
+
headers?: Record<string, string>;
|
|
21
|
+
metadata?: string;
|
|
22
|
+
timestamp?: string;
|
|
23
|
+
}): Promise<any>;
|
|
24
|
+
//# sourceMappingURL=record-lead.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-lead.d.ts","sourceRoot":"","sources":["../../src/analytics/record-lead.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAAC,EAC/B,cAAc,EACd,SAAyB,EAAE,4CAA4C;AACvE,OAAO,EACP,cAAc,EACd,OAAO,EACP,MAAM,EACN,UAAU,EAAE,8BAA8B;AAC1C,SAAS,EACT,YAAY,EACZ,UAAU,EACV,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,QAAa,EACb,SAAS,GACV,EAAE;IACD,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,GAAG,YAAY,CAAA;IACnC,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,gBAoEA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordLead = recordLead;
|
|
4
|
+
const fetch_with_retry_1 = require("../common/fetch-with-retry");
|
|
5
|
+
const get_geolocation_1 = require("./get-geolocation");
|
|
6
|
+
async function recordLead({ tinybirdConfig, eventName = "lead_events", // Fixed: lead_events not access_lead_events
|
|
7
|
+
eventId, eventNameValue, clickId, linkId, customerId, // ETO: user_id as customer_id
|
|
8
|
+
projectId, resourceType, resourceId, role, grantType, autoGranted, headers, metadata = "", timestamp, }) {
|
|
9
|
+
const ip = headers ? (0, get_geolocation_1.getIPFromRequest)(headers) : null;
|
|
10
|
+
const geo = headers ? (0, get_geolocation_1.getGeolocationFromHeaders)(headers) : {};
|
|
11
|
+
const fallbackGeo = ip ? await (0, get_geolocation_1.getGeolocationFromIP)(ip) : {};
|
|
12
|
+
// Following Dub's leadEventSchemaTB structure exactly
|
|
13
|
+
const leadData = {
|
|
14
|
+
// Inherited from clickEventSchemaTB (without timestamp)
|
|
15
|
+
click_id: clickId,
|
|
16
|
+
link_id: linkId,
|
|
17
|
+
user_id: customerId, // ETO addition
|
|
18
|
+
project_id: projectId || "", // ETO addition
|
|
19
|
+
url: "",
|
|
20
|
+
continent: geo.continent || fallbackGeo.continent || "",
|
|
21
|
+
country: geo.country || fallbackGeo.country || "Unknown",
|
|
22
|
+
region: geo.region || fallbackGeo.region || "Unknown",
|
|
23
|
+
city: geo.city || fallbackGeo.city || "Unknown",
|
|
24
|
+
latitude: geo.latitude || fallbackGeo.latitude || "Unknown",
|
|
25
|
+
longitude: geo.longitude || fallbackGeo.longitude || "Unknown",
|
|
26
|
+
device: "Unknown",
|
|
27
|
+
device_model: "Unknown",
|
|
28
|
+
device_vendor: "Unknown",
|
|
29
|
+
browser: "Unknown",
|
|
30
|
+
browser_version: "Unknown",
|
|
31
|
+
os: "Unknown",
|
|
32
|
+
os_version: "Unknown",
|
|
33
|
+
trigger: "grant",
|
|
34
|
+
engine: "Unknown",
|
|
35
|
+
engine_version: "Unknown",
|
|
36
|
+
cpu_architecture: "Unknown",
|
|
37
|
+
ua: "Unknown",
|
|
38
|
+
bot: 0,
|
|
39
|
+
referer: "Unknown",
|
|
40
|
+
referer_url: "Unknown",
|
|
41
|
+
ip: ip || "",
|
|
42
|
+
qr: 0,
|
|
43
|
+
// Lead-specific fields
|
|
44
|
+
event_id: eventId,
|
|
45
|
+
event_name: eventNameValue,
|
|
46
|
+
customer_id: customerId,
|
|
47
|
+
metadata: JSON.stringify({
|
|
48
|
+
resourceType,
|
|
49
|
+
resourceId,
|
|
50
|
+
role,
|
|
51
|
+
grantType,
|
|
52
|
+
autoGranted,
|
|
53
|
+
...JSON.parse(metadata || "{}")
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
try {
|
|
57
|
+
const response = await (0, fetch_with_retry_1.fetchWithRetry)(`${tinybirdConfig.apiUrl}/v0/events?name=${eventName}&wait=true`, {
|
|
58
|
+
method: "POST",
|
|
59
|
+
headers: {
|
|
60
|
+
Authorization: `Bearer ${tinybirdConfig.apiKey}`,
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
},
|
|
63
|
+
body: JSON.stringify(leadData),
|
|
64
|
+
});
|
|
65
|
+
return await response.json();
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error("Failed to record lead event:", error);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=record-lead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-lead.js","sourceRoot":"","sources":["../../src/analytics/record-lead.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Tinybird } from "@chronark/zod-bird";
|
|
3
|
+
import { AccessLinkDTO } from "@etohq/types";
|
|
4
|
+
export declare const accessLinksMetadataSchema: z.ZodObject<{
|
|
5
|
+
link_id: z.ZodString;
|
|
6
|
+
domain: z.ZodString;
|
|
7
|
+
key: z.ZodString;
|
|
8
|
+
url: z.ZodString;
|
|
9
|
+
short_link: z.ZodString;
|
|
10
|
+
project_id: z.ZodString;
|
|
11
|
+
external_id: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
12
|
+
tenant_id: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
13
|
+
target_resource_type: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
14
|
+
target_resource_id: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
15
|
+
access_role: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
16
|
+
max_uses: z.ZodEffects<z.ZodNullable<z.ZodNumber>, number, number | null>;
|
|
17
|
+
current_uses: z.ZodNumber;
|
|
18
|
+
expires_at: z.ZodEffects<z.ZodNullable<z.ZodDate>, string, Date | null>;
|
|
19
|
+
creator_user_id: z.ZodString;
|
|
20
|
+
creator_role: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
21
|
+
purpose: z.ZodString;
|
|
22
|
+
auto_approve: z.ZodEffects<z.ZodBoolean, 0 | 1, boolean>;
|
|
23
|
+
requires_approval: z.ZodEffects<z.ZodBoolean, 0 | 1, boolean>;
|
|
24
|
+
password_protected: z.ZodEffects<z.ZodBoolean, 0 | 1, boolean>;
|
|
25
|
+
created_at: z.ZodEffects<z.ZodDate, string, Date>;
|
|
26
|
+
deleted: z.ZodEffects<z.ZodDefault<z.ZodBoolean>, 0 | 1, boolean | undefined>;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
domain: string;
|
|
29
|
+
key: string;
|
|
30
|
+
url: string;
|
|
31
|
+
link_id: string;
|
|
32
|
+
project_id: string;
|
|
33
|
+
short_link: string;
|
|
34
|
+
external_id: string;
|
|
35
|
+
tenant_id: string;
|
|
36
|
+
target_resource_type: string;
|
|
37
|
+
target_resource_id: string;
|
|
38
|
+
access_role: string;
|
|
39
|
+
max_uses: number;
|
|
40
|
+
current_uses: number;
|
|
41
|
+
expires_at: string;
|
|
42
|
+
creator_user_id: string;
|
|
43
|
+
creator_role: string;
|
|
44
|
+
purpose: string;
|
|
45
|
+
auto_approve: 0 | 1;
|
|
46
|
+
requires_approval: 0 | 1;
|
|
47
|
+
password_protected: 0 | 1;
|
|
48
|
+
created_at: string;
|
|
49
|
+
deleted: 0 | 1;
|
|
50
|
+
}, {
|
|
51
|
+
domain: string;
|
|
52
|
+
key: string;
|
|
53
|
+
url: string;
|
|
54
|
+
link_id: string;
|
|
55
|
+
project_id: string;
|
|
56
|
+
short_link: string;
|
|
57
|
+
external_id: string | null;
|
|
58
|
+
tenant_id: string | null;
|
|
59
|
+
target_resource_type: string | null;
|
|
60
|
+
target_resource_id: string | null;
|
|
61
|
+
access_role: string | null;
|
|
62
|
+
max_uses: number | null;
|
|
63
|
+
current_uses: number;
|
|
64
|
+
expires_at: Date | null;
|
|
65
|
+
creator_user_id: string;
|
|
66
|
+
creator_role: string | null;
|
|
67
|
+
purpose: string;
|
|
68
|
+
auto_approve: boolean;
|
|
69
|
+
requires_approval: boolean;
|
|
70
|
+
password_protected: boolean;
|
|
71
|
+
created_at: Date;
|
|
72
|
+
deleted?: boolean | undefined;
|
|
73
|
+
}>;
|
|
74
|
+
export declare function createRecordLink(tb: Tinybird): (events: any) => Promise<{
|
|
75
|
+
successful_rows: number;
|
|
76
|
+
quarantined_rows: number;
|
|
77
|
+
}>;
|
|
78
|
+
export declare const transformLinkTB: (link: AccessLinkDTO) => {
|
|
79
|
+
link_id: string;
|
|
80
|
+
domain: string;
|
|
81
|
+
key: string;
|
|
82
|
+
url: string;
|
|
83
|
+
short_link: string;
|
|
84
|
+
project_id: string;
|
|
85
|
+
external_id: string;
|
|
86
|
+
tenant_id: string;
|
|
87
|
+
target_resource_type: string;
|
|
88
|
+
target_resource_id: string;
|
|
89
|
+
access_role: string;
|
|
90
|
+
max_uses: number;
|
|
91
|
+
current_uses: number;
|
|
92
|
+
expires_at: Date | null;
|
|
93
|
+
creator_user_id: string;
|
|
94
|
+
creator_role: string;
|
|
95
|
+
purpose: string;
|
|
96
|
+
auto_approve: boolean;
|
|
97
|
+
requires_approval: boolean;
|
|
98
|
+
password_protected: boolean;
|
|
99
|
+
created_at: Date;
|
|
100
|
+
deleted: boolean;
|
|
101
|
+
};
|
|
102
|
+
export declare const recordLink: (tb: Tinybird, payload: AccessLinkDTO | AccessLinkDTO[]) => Promise<{
|
|
103
|
+
successful_rows: number;
|
|
104
|
+
quarantined_rows: number;
|
|
105
|
+
}>;
|
|
106
|
+
//# sourceMappingURL=record-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-link.d.ts","sourceRoot":"","sources":["../../src/analytics/record-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG5C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpC,CAAA;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ;;;GAO5C;AAGD,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;CAyBlD,CAAA;AAGD,eAAO,MAAM,UAAU,GACrB,IAAI,QAAQ,EACZ,SAAS,aAAa,GAAG,aAAa,EAAE;;;EASzC,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordLink = exports.transformLinkTB = exports.accessLinksMetadataSchema = void 0;
|
|
4
|
+
exports.createRecordLink = createRecordLink;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
// ETO access links metadata schema (following Dub's dubLinksMetadataSchema pattern)
|
|
7
|
+
exports.accessLinksMetadataSchema = zod_1.z.object({
|
|
8
|
+
link_id: zod_1.z.string(),
|
|
9
|
+
domain: zod_1.z.string(),
|
|
10
|
+
key: zod_1.z.string(),
|
|
11
|
+
url: zod_1.z.string(),
|
|
12
|
+
short_link: zod_1.z.string(),
|
|
13
|
+
project_id: zod_1.z.string(),
|
|
14
|
+
external_id: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
15
|
+
tenant_id: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
16
|
+
target_resource_type: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
17
|
+
target_resource_id: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
18
|
+
access_role: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
19
|
+
max_uses: zod_1.z.number().nullable().transform((v) => v || 0),
|
|
20
|
+
current_uses: zod_1.z.number(),
|
|
21
|
+
expires_at: zod_1.z.date().nullable().transform((v) => v ? v.toISOString() : ""),
|
|
22
|
+
creator_user_id: zod_1.z.string(),
|
|
23
|
+
creator_role: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
24
|
+
purpose: zod_1.z.string(),
|
|
25
|
+
auto_approve: zod_1.z.boolean().transform((v) => v ? 1 : 0),
|
|
26
|
+
requires_approval: zod_1.z.boolean().transform((v) => v ? 1 : 0),
|
|
27
|
+
password_protected: zod_1.z.boolean().transform((v) => v ? 1 : 0),
|
|
28
|
+
created_at: zod_1.z.date().transform((v) => v.toISOString().replace("T", " ").replace("Z", "")),
|
|
29
|
+
deleted: zod_1.z.boolean().default(false).transform((v) => v ? 1 : 0),
|
|
30
|
+
});
|
|
31
|
+
function createRecordLink(tb) {
|
|
32
|
+
return tb.buildIngestEndpoint({
|
|
33
|
+
datasource: "links_metadata", // Fixed: links_metadata not access_links_metadata
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
event: exports.accessLinksMetadataSchema,
|
|
36
|
+
wait: true,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Transform ETO AccessLinkDTO to Tinybird format (following Dub's transformLinkTB pattern)
|
|
40
|
+
const transformLinkTB = (link) => {
|
|
41
|
+
return {
|
|
42
|
+
link_id: link.id,
|
|
43
|
+
domain: link.domain,
|
|
44
|
+
key: link.key,
|
|
45
|
+
url: link.url,
|
|
46
|
+
short_link: link.short_link,
|
|
47
|
+
project_id: link.project_id,
|
|
48
|
+
external_id: link.external_id ?? "",
|
|
49
|
+
tenant_id: link.tenant_id ?? "",
|
|
50
|
+
target_resource_type: link.target_resource_type ?? "",
|
|
51
|
+
target_resource_id: link.target_resource_id ?? "",
|
|
52
|
+
access_role: link.access_role ?? "",
|
|
53
|
+
max_uses: link.max_uses ?? 0,
|
|
54
|
+
current_uses: link.current_uses,
|
|
55
|
+
expires_at: link.expires_at,
|
|
56
|
+
creator_user_id: link.creator_user_id,
|
|
57
|
+
creator_role: link.creator_role ?? "",
|
|
58
|
+
purpose: link.purpose,
|
|
59
|
+
auto_approve: link.auto_approve,
|
|
60
|
+
requires_approval: link.requires_approval,
|
|
61
|
+
password_protected: link.password_protected,
|
|
62
|
+
created_at: link.created_at,
|
|
63
|
+
deleted: link.deleted_at ? true : false,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.transformLinkTB = transformLinkTB;
|
|
67
|
+
// Record link wrapper (following Dub's recordLink pattern)
|
|
68
|
+
const recordLink = async (tb, payload) => {
|
|
69
|
+
const recordLinkTB = createRecordLink(tb);
|
|
70
|
+
if (Array.isArray(payload)) {
|
|
71
|
+
return await recordLinkTB(payload.map(exports.transformLinkTB));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return await recordLinkTB((0, exports.transformLinkTB)(payload));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.recordLink = recordLink;
|
|
78
|
+
//# sourceMappingURL=record-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-link.js","sourceRoot":"","sources":["../../src/analytics/record-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Tinybird } from "@chronark/zod-bird";
|
|
2
|
+
export declare function createRecordSale(tb: Tinybird): (events: any) => Promise<{
|
|
3
|
+
successful_rows: number;
|
|
4
|
+
quarantined_rows: number;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function createRecordSaleWithTimestamp(tb: Tinybird): (events: any) => Promise<{
|
|
7
|
+
successful_rows: number;
|
|
8
|
+
quarantined_rows: number;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=record-sale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sale.d.ts","sourceRoot":"","sources":["../../src/analytics/record-sale.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAgB7C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ;;;GAM5C;AAED,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,QAAQ;;;GAQzD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRecordSale = createRecordSale;
|
|
4
|
+
exports.createRecordSaleWithTimestamp = createRecordSaleWithTimestamp;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
// ETO sale/conversion event schema (following Dub's pattern)
|
|
7
|
+
const saleEventSchemaTB = zod_1.z.object({
|
|
8
|
+
click_id: zod_1.z.string(),
|
|
9
|
+
link_id: zod_1.z.string(),
|
|
10
|
+
user_id: zod_1.z.string().nullable(),
|
|
11
|
+
project_id: zod_1.z.string().nullable(),
|
|
12
|
+
event_id: zod_1.z.string(),
|
|
13
|
+
event_name: zod_1.z.string(),
|
|
14
|
+
customer_id: zod_1.z.string(),
|
|
15
|
+
sale_amount: zod_1.z.number(),
|
|
16
|
+
currency: zod_1.z.string().default("USD"),
|
|
17
|
+
metadata: zod_1.z.string().default(""),
|
|
18
|
+
});
|
|
19
|
+
function createRecordSale(tb) {
|
|
20
|
+
return tb.buildIngestEndpoint({
|
|
21
|
+
datasource: "sale_events", // Fixed: sale_events not access_sale_events
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
event: saleEventSchemaTB,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function createRecordSaleWithTimestamp(tb) {
|
|
27
|
+
return tb.buildIngestEndpoint({
|
|
28
|
+
datasource: "sale_events", // Fixed: sale_events not access_sale_events
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
event: saleEventSchemaTB.extend({
|
|
31
|
+
timestamp: zod_1.z.string(),
|
|
32
|
+
}),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=record-sale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sale.js","sourceRoot":"","sources":["../../src/analytics/record-sale.ts"],"names":[],"mappings":";;AAiBA,4CAMC;AAED,sEAQC;AAjCD,6BAAuB;AAGvB,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACjC,CAAC,CAAA;AAEF,SAAgB,gBAAgB,CAAC,EAAY;IAC3C,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC5B,UAAU,EAAE,aAAa,EAAE,4CAA4C;QACvE,aAAa;QACb,KAAK,EAAE,iBAAiB;KACzB,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,6BAA6B,CAAC,EAAY;IACxD,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC5B,UAAU,EAAE,aAAa,EAAE,4CAA4C;QACvE,aAAa;QACb,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC;YAC9B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;SACtB,CAAC;KACH,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Tinybird } from "@chronark/zod-bird";
|
|
3
|
+
export declare const webhookEventSchemaTB: z.ZodObject<{
|
|
4
|
+
webhook_id: z.ZodString;
|
|
5
|
+
event_type: z.ZodString;
|
|
6
|
+
payload: z.ZodString;
|
|
7
|
+
status: z.ZodString;
|
|
8
|
+
project_id: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
project_id: string;
|
|
11
|
+
status: string;
|
|
12
|
+
webhook_id: string;
|
|
13
|
+
event_type: string;
|
|
14
|
+
payload: string;
|
|
15
|
+
}, {
|
|
16
|
+
project_id: string | null;
|
|
17
|
+
status: string;
|
|
18
|
+
webhook_id: string;
|
|
19
|
+
event_type: string;
|
|
20
|
+
payload: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function createRecordWebhookEvent(tb: Tinybird): (events: any) => Promise<{
|
|
23
|
+
successful_rows: number;
|
|
24
|
+
quarantined_rows: number;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=record-webhook-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-webhook-event.d.ts","sourceRoot":"","sources":["../../src/analytics/record-webhook-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAA;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ;;;GAOpD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.webhookEventSchemaTB = void 0;
|
|
4
|
+
exports.createRecordWebhookEvent = createRecordWebhookEvent;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
// ETO webhook event schema (following Dub's pattern)
|
|
7
|
+
exports.webhookEventSchemaTB = zod_1.z.object({
|
|
8
|
+
webhook_id: zod_1.z.string(),
|
|
9
|
+
event_type: zod_1.z.string(),
|
|
10
|
+
payload: zod_1.z.string(),
|
|
11
|
+
status: zod_1.z.string(),
|
|
12
|
+
project_id: zod_1.z.string().nullable().transform((v) => v || ""),
|
|
13
|
+
});
|
|
14
|
+
function createRecordWebhookEvent(tb) {
|
|
15
|
+
return tb.buildIngestEndpoint({
|
|
16
|
+
datasource: "access_webhook_events",
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
event: exports.webhookEventSchemaTB,
|
|
19
|
+
wait: true,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=record-webhook-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-webhook-event.js","sourceRoot":"","sources":["../../src/analytics/record-webhook-event.ts"],"names":[],"mappings":";;;AAYA,4DAOC;AAnBD,6BAAuB;AAGvB,qDAAqD;AACxC,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;CAC5D,CAAC,CAAA;AAEF,SAAgB,wBAAwB,CAAC,EAAY;IACnD,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC5B,UAAU,EAAE,uBAAuB;QACnC,aAAa;QACb,KAAK,EAAE,4BAAoB;QAC3B,IAAI,EAAE,IAAI;KACX,CAAC,CAAA;AACJ,CAAC"}
|