@getvitops/utils 8.0.1 → 8.2.0-alpha.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/CHANGELOG.md +289 -8
- package/dist/{adc-BFrzpMHq.d.mts → adc-BoEoogyo.d.mts} +2 -3
- package/dist/adc-BoEoogyo.d.mts.map +1 -0
- package/dist/ads/index.d.mts +50 -17
- package/dist/ads/index.d.mts.map +1 -1
- package/dist/ads/index.mjs +77 -8
- package/dist/ads/index.mjs.map +1 -1
- package/dist/cloudflare-BiK61Oq4.d.mts.map +1 -1
- package/dist/{cloudflare-CgAsXiqe.mjs → cloudflare-CD8vwrgj.mjs} +2 -24
- package/dist/cloudflare-CD8vwrgj.mjs.map +1 -0
- package/dist/color/index.d.mts +34 -35
- package/dist/color/index.d.mts.map +1 -1
- package/dist/color/index.mjs +3 -1
- package/dist/color/index.mjs.map +1 -1
- package/dist/crm/index.d.mts +288 -0
- package/dist/crm/index.d.mts.map +1 -0
- package/dist/crm/index.mjs +731 -0
- package/dist/crm/index.mjs.map +1 -0
- package/dist/email/index.d.mts +216 -0
- package/dist/email/index.d.mts.map +1 -0
- package/dist/email/index.mjs +331 -0
- package/dist/email/index.mjs.map +1 -0
- package/dist/favicon.d.mts +8 -9
- package/dist/favicon.d.mts.map +1 -1
- package/dist/git/index.d.mts +65 -0
- package/dist/git/index.d.mts.map +1 -0
- package/dist/git/index.mjs +107 -0
- package/dist/git/index.mjs.map +1 -0
- package/dist/hosting/index.d.mts +184 -0
- package/dist/hosting/index.d.mts.map +1 -0
- package/dist/hosting/index.mjs +553 -0
- package/dist/hosting/index.mjs.map +1 -0
- package/dist/identity-BoRddTx3.mjs +35 -0
- package/dist/identity-BoRddTx3.mjs.map +1 -0
- package/dist/index.d.mts +24 -25
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/dist/indexing/index.d.mts +23 -24
- package/dist/indexing/index.d.mts.map +1 -1
- package/dist/media/index.d.mts +24 -24
- package/dist/media/index.d.mts.map +1 -1
- package/dist/media/index.mjs +3 -3
- package/dist/media/index.mjs.map +1 -1
- package/dist/notify/index.d.mts +26 -15
- package/dist/notify/index.d.mts.map +1 -1
- package/dist/notify/index.mjs +50 -20
- package/dist/notify/index.mjs.map +1 -1
- package/dist/onboarding/index.d.mts +10 -141
- package/dist/onboarding/index.d.mts.map +1 -1
- package/dist/onboarding/index.mjs +2 -144
- package/dist/onboarding/index.mjs.map +1 -1
- package/dist/plan-BLKikoOG.mjs +150 -0
- package/dist/plan-BLKikoOG.mjs.map +1 -0
- package/dist/plan-Hq8Pb0Uw.d.mts +133 -0
- package/dist/plan-Hq8Pb0Uw.d.mts.map +1 -0
- package/dist/plan-format-A18SvJ7C.mjs +24 -0
- package/dist/plan-format-A18SvJ7C.mjs.map +1 -0
- package/dist/reviews/index.d.mts +12 -13
- package/dist/reviews/index.d.mts.map +1 -1
- package/dist/schema/index.d.mts +7 -7
- package/dist/schema/index.d.mts.map +1 -1
- package/dist/security/index.d.mts +2 -2
- package/dist/security/index.d.mts.map +1 -1
- package/dist/{token-Bz_-igw-.d.mts → token-DmmoQ7um.d.mts} +6 -3
- package/dist/token-DmmoQ7um.d.mts.map +1 -0
- package/dist/tracking/index.d.mts +43 -17
- package/dist/tracking/index.d.mts.map +1 -1
- package/dist/tracking/index.mjs +2 -1
- package/dist/tracking/index.mjs.map +1 -1
- package/dist/{types-CHHjzRrv.d.mts → types-7ELci8RQ.d.mts} +4 -2
- package/dist/types-7ELci8RQ.d.mts.map +1 -0
- package/package.json +18 -4
- package/dist/adc-BFrzpMHq.d.mts.map +0 -1
- package/dist/cloudflare-CgAsXiqe.mjs.map +0 -1
- package/dist/token-Bz_-igw-.d.mts.map +0 -1
- package/dist/types-CHHjzRrv.d.mts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/reviews/types.ts","../../src/reviews/plan.ts","../../src/reviews/cache.ts","../../src/reviews/gbp.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/reviews/types.ts","../../src/reviews/plan.ts","../../src/reviews/cache.ts","../../src/reviews/gbp.ts"],"mappings":";;;;;;;;;;;;UAgBiB;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;;UAIe;;EAEf;;EAEA,WAAW,eAAe;;;UAIX;EACf;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;IAAU;IAAc;;;EAExB;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA,SAAS;;;UAIM;EACf;EACA,WAAW,eAAe;;;;;UClDX;EACf;EACA;EACA;;EAEA;;UAGe;;EAEf;EACA,WAAW;EACX;;UAGe;EACf,QAAQ;;EAER,gBAAgB;;EAEhB;;EAEA;;;wBAIc,KAAK,OAAO,YAAY;;wBAuDxB,WAAW,GAAG;;;;;;;;;;wBAmBd,cAAc,SAAS,UAAU,QAAQ,uBAAuB;;;;;;;;;wBA2BhE,WACd,UAAU,yBACV,SAAS,eAAe,mBACvB;;;;qBCvIU;;;;;;;;;wBAUG,UAAU,eAAe;;wBAKzB,QAAQ,WAAW,eAAe,mBAAmB;;wBAarD,WAAW,cAAc,OAAO;;;;UCoB/B;EACf;EACA,SAAS;EACT;EACA;EACA;EACA;;;;;;;;;wBAUoB,aACpB,MAAM,gBACN,mBACA,oBACA,mBAAkB,QACjB,QAAQ"}
|
package/dist/schema/index.d.mts
CHANGED
|
@@ -20,7 +20,7 @@ interface ArticleGraphOptions {
|
|
|
20
20
|
keywords?: string[];
|
|
21
21
|
}
|
|
22
22
|
/** Build a schema.org Article JSON-LD graph. */
|
|
23
|
-
declare function articleGraph(options: ArticleGraphOptions): Record<string, unknown>;
|
|
23
|
+
export declare function articleGraph(options: ArticleGraphOptions): Record<string, unknown>;
|
|
24
24
|
//#endregion
|
|
25
25
|
//#region src/schema/breadcrumb.d.ts
|
|
26
26
|
interface BreadcrumbItem {
|
|
@@ -31,7 +31,7 @@ interface BreadcrumbGraphOptions {
|
|
|
31
31
|
items: BreadcrumbItem[];
|
|
32
32
|
}
|
|
33
33
|
/** Build a schema.org BreadcrumbList JSON-LD graph. */
|
|
34
|
-
declare function breadcrumbGraph(options: BreadcrumbGraphOptions): Record<string, unknown>;
|
|
34
|
+
export declare function breadcrumbGraph(options: BreadcrumbGraphOptions): Record<string, unknown>;
|
|
35
35
|
//#endregion
|
|
36
36
|
//#region src/schema/faq.d.ts
|
|
37
37
|
interface FAQItem {
|
|
@@ -47,7 +47,7 @@ interface FAQGraphOptions {
|
|
|
47
47
|
* NOTE: Google recommends FAQ markup only for authoritative government
|
|
48
48
|
* and health sites. For other sites, consider using QAPage schema instead.
|
|
49
49
|
*/
|
|
50
|
-
declare function faqGraph(options: FAQGraphOptions): Record<string, unknown>;
|
|
50
|
+
export declare function faqGraph(options: FAQGraphOptions): Record<string, unknown>;
|
|
51
51
|
//#endregion
|
|
52
52
|
//#region src/schema/itemList.d.ts
|
|
53
53
|
type ItemListEntryType = 'Article' | 'Recipe' | 'Movie' | 'Course' | 'Restaurant' | 'Product' | (string & {});
|
|
@@ -69,7 +69,7 @@ interface ItemListGraphOptions {
|
|
|
69
69
|
name?: string;
|
|
70
70
|
}
|
|
71
71
|
/** Build a schema.org ItemList JSON-LD graph (e.g. for a carousel rich result). */
|
|
72
|
-
declare function itemListGraph(options: ItemListGraphOptions): Record<string, unknown>;
|
|
72
|
+
export declare function itemListGraph(options: ItemListGraphOptions): Record<string, unknown>;
|
|
73
73
|
//#endregion
|
|
74
74
|
//#region src/schema/localBusiness.d.ts
|
|
75
75
|
interface OpeningHoursSpecification {
|
|
@@ -136,7 +136,7 @@ interface LocalBusinessGraphOptions {
|
|
|
136
136
|
knowsLanguage?: string[];
|
|
137
137
|
}
|
|
138
138
|
/** Build a schema.org LocalBusiness (or subtype) JSON-LD graph. */
|
|
139
|
-
declare function localBusinessGraph(options: LocalBusinessGraphOptions): Record<string, unknown>;
|
|
139
|
+
export declare function localBusinessGraph(options: LocalBusinessGraphOptions): Record<string, unknown>;
|
|
140
140
|
//#endregion
|
|
141
141
|
//#region src/schema/organization.d.ts
|
|
142
142
|
interface OrganizationGraphOptions {
|
|
@@ -185,7 +185,7 @@ interface OrganizationGraphOptions {
|
|
|
185
185
|
}[];
|
|
186
186
|
}
|
|
187
187
|
/** Build a schema.org Organization JSON-LD graph. */
|
|
188
|
-
declare function organizationGraph(options: OrganizationGraphOptions): Record<string, unknown>;
|
|
188
|
+
export declare function organizationGraph(options: OrganizationGraphOptions): Record<string, unknown>;
|
|
189
189
|
//#endregion
|
|
190
|
-
export {
|
|
190
|
+
export type { ArticleAuthor, ArticleGraphOptions, BreadcrumbGraphOptions, BreadcrumbItem, FAQGraphOptions, FAQItem, ItemListEntry, ItemListEntryType, ItemListGraphOptions, LocalBusinessGraphOptions, OpeningHoursSpecification, OrganizationGraphOptions, SpecialHoursSpecification };
|
|
191
191
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/schema/article.ts","../../src/schema/breadcrumb.ts","../../src/schema/faq.ts","../../src/schema/itemList.ts","../../src/schema/localBusiness.ts","../../src/schema/organization.ts"],"mappings":";UAAiB
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/schema/article.ts","../../src/schema/breadcrumb.ts","../../src/schema/faq.ts","../../src/schema/itemList.ts","../../src/schema/localBusiness.ts","../../src/schema/organization.ts"],"mappings":";UAAiB;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA,QAAQ,gBAAgB;EACxB;IACE;IACA;;EAEF;EACA;EACA;EACA;;;wBAIc,aAAa,SAAS,sBAAsB;;;UCvB3C;EACf;EACA;;UAGe;EACf,OAAO;;;wBAIO,gBAAgB,SAAS,yBAAyB;;;UCVjD;EACf;EACA;;UAGe;EACf,OAAO;;;;;;;;wBASO,SAAS,SAAS,kBAAkB;;;KCfxC;UAWK;EACf,MAAM;EACN;;;;;;EAMA;EACA;EACA;;UAGe;EACf,OAAO;;EAEP;;;wBAIc,cAAc,SAAS,uBAAuB;;;UC/B7C;EACf;EACA;EACA;;;;;;;;UASe;EACf;EACA;EACA;EACA;;UAGe;;EAEf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACE;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;;EAEF,4BAA4B;EAC5B,mCAAmC;EACnC;IACE;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;MACE;MACA;MACA;;;EAGJ;EACA;EACA;EACA;EACA;;;wBAIc,mBAAmB,SAAS,4BAA4B;;;UCnEvD;EACf;EACA;EACA;EACA;EACA;EACA;EACA;IACE;IACA;IACA;IACA;IACA;;EAEF;EACA;EACA;EACA;IAA+B;IAAkB;;EACjD;IACE;IACA;;EAEF;IACE;IACA;;EAEF;IACE;IACA;IACA;IACA;IACA;IACA;;EAEF;EACA;EACA;EACA;IACE;IACA;;;;wBAKY,kBAAkB,SAAS,2BAA2B"}
|
|
@@ -42,7 +42,7 @@ interface TurnstileVerifyResult {
|
|
|
42
42
|
* failed verification is not this module's business to act on; the caller
|
|
43
43
|
* (`createConversionRoute`) decides what a failure means for the request.
|
|
44
44
|
*/
|
|
45
|
-
declare function verifyTurnstileToken(token: string, secretKey: string, remoteIp?: string, fetchImpl?: typeof fetch): Promise<TurnstileVerifyResult>;
|
|
45
|
+
export declare function verifyTurnstileToken(token: string, secretKey: string, remoteIp?: string, fetchImpl?: typeof fetch): Promise<TurnstileVerifyResult>;
|
|
46
46
|
//#endregion
|
|
47
|
-
export {
|
|
47
|
+
export type { TurnstileVerifyResult };
|
|
48
48
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/security/turnstile.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/security/turnstile.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA+BiB;EACf;;EAEA;;;;;;;;;;;;wBAaoB,qBACpB,eACA,mBACA,mBACA,mBAAkB,QACjB,QAAQ"}
|
|
@@ -65,10 +65,13 @@ type GoogleAuthLike = string | GoogleAuth;
|
|
|
65
65
|
declare function googleHeaders(auth: GoogleAuthLike, extra?: Record<string, string>): Record<string, string>;
|
|
66
66
|
/** Scopes, named once so a caller never spells one out. */
|
|
67
67
|
declare const SCOPES: {
|
|
68
|
-
/** Search Console (`sitemaps.submit`, `urlInspection`, `sites`). */
|
|
69
|
-
readonly
|
|
68
|
+
/** Search Console (`sitemaps.submit`, `urlInspection`, `sites`). */
|
|
69
|
+
readonly webmasters: "https://www.googleapis.com/auth/webmasters";
|
|
70
|
+
/** Site Verification API. */
|
|
71
|
+
readonly siteVerification: "https://www.googleapis.com/auth/siteverification";
|
|
72
|
+
/** Business Profile (reviews). The GCP project must be allowlisted by Google. */
|
|
70
73
|
readonly businessProfile: "https://www.googleapis.com/auth/business.manage";
|
|
71
74
|
};
|
|
72
75
|
//#endregion
|
|
73
76
|
export { SCOPES as a, googleHeaders as c, GoogleOAuth as i, GoogleAuthLike as n, ServiceAccount as o, GoogleCredential as r, googleAccessToken as s, GoogleAuth as t };
|
|
74
|
-
//# sourceMappingURL=token-
|
|
77
|
+
//# sourceMappingURL=token-DmmoQ7um.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-DmmoQ7um.d.mts","names":[],"sources":["../src/google/token.ts"],"mappings":";;UAkCiB;EACf;EACA;;;UAIe;EACf;EACA;EACA;;;;;;;;;;KAWU;EACN;EAAyB,SAAS;EAAgB;;EAClD;EAAe,OAAO;;;;;;;;;;;iBA8CZ,kBACd,YAAY,kBACZ,mBAAkB,OAClB,eACC;;;;;;;;;;;;;;UA6Bc;EACf;EACA;;;;;;;;;KAUU,0BAA0B;;iBAGtB,cACd,MAAM,gBACN,QAAQ,yBACP;;cA2BU"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { i as TrackingData, n as TrackingCategory, r as TrackingConfig, t as ConversionEvent } from "../types-
|
|
2
|
-
|
|
1
|
+
import { i as TrackingData, n as TrackingCategory, r as TrackingConfig, t as ConversionEvent } from "../types-7ELci8RQ.mjs";
|
|
3
2
|
//#region src/tracking/params.d.ts
|
|
4
3
|
/**
|
|
5
4
|
* The ad-platform vocabulary — the one place that says which URL parameters mean
|
|
@@ -23,12 +22,12 @@ import { i as TrackingData, n as TrackingCategory, r as TrackingConfig, t as Con
|
|
|
23
22
|
* unattributed — silently, since an unattributed conversion looks exactly like an
|
|
24
23
|
* organic one. `li_fat_id` and `epik` were missing for precisely that reason.
|
|
25
24
|
*/
|
|
26
|
-
declare const PLATFORM_PARAMS: Readonly<Record<string, string>>;
|
|
25
|
+
export declare const PLATFORM_PARAMS: Readonly<Record<string, string>>;
|
|
27
26
|
/** Just the parameter names, in the same precedence order. */
|
|
28
|
-
declare const CLICK_ID_PARAMS: readonly string[];
|
|
29
|
-
declare const UTM_PARAMS: readonly ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term"];
|
|
27
|
+
export declare const CLICK_ID_PARAMS: readonly string[];
|
|
28
|
+
export declare const UTM_PARAMS: readonly ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term"];
|
|
30
29
|
/** Everything the capture script pulls off the landing URL. */
|
|
31
|
-
declare const TRACKED_PARAMS: readonly string[];
|
|
30
|
+
export declare const TRACKED_PARAMS: readonly string[];
|
|
32
31
|
/**
|
|
33
32
|
* The attribution cookie.
|
|
34
33
|
*
|
|
@@ -36,15 +35,15 @@ declare const TRACKED_PARAMS: readonly string[];
|
|
|
36
35
|
* never sent anywhere. It is still a persistent identifier, which is why writing
|
|
37
36
|
* it waits on consent.
|
|
38
37
|
*/
|
|
39
|
-
declare const TRACKING_COOKIE = "_ac";
|
|
38
|
+
export declare const TRACKING_COOKIE = "_ac";
|
|
40
39
|
/** 90 days — an ad click and the conversion it produces are rarely further apart. */
|
|
41
|
-
declare const TRACKING_COOKIE_DAYS = 90;
|
|
40
|
+
export declare const TRACKING_COOKIE_DAYS = 90;
|
|
42
41
|
/** The A/B variant cookie, assigned by the router when a site runs experiments. */
|
|
43
|
-
declare const AB_COOKIE = "_ab";
|
|
42
|
+
export declare const AB_COOKIE = "_ab";
|
|
44
43
|
//#endregion
|
|
45
44
|
//#region src/tracking/cookie.d.ts
|
|
46
45
|
/** Read one cookie out of a `document.cookie`-shaped string. */
|
|
47
|
-
declare function readCookie(cookieString: string | null | undefined, name: string): string | null;
|
|
46
|
+
export declare function readCookie(cookieString: string | null | undefined, name: string): string | null;
|
|
48
47
|
/**
|
|
49
48
|
* Cookie header → attribution, or `null`.
|
|
50
49
|
*
|
|
@@ -53,9 +52,9 @@ declare function readCookie(cookieString: string | null | undefined, name: strin
|
|
|
53
52
|
* fields happened to survive, which is worse than reporting it unattributed:
|
|
54
53
|
* "we don't know" is actionable, a wrong campaign is not.
|
|
55
54
|
*/
|
|
56
|
-
declare function parseTrackingCookie(cookieHeader: string | null | undefined): TrackingData | null;
|
|
55
|
+
export declare function parseTrackingCookie(cookieHeader: string | null | undefined): TrackingData | null;
|
|
57
56
|
/** Attribution → cookie value (not the full `Set-Cookie` — see `cookieAttributes`). */
|
|
58
|
-
declare function serializeTrackingCookie(data: TrackingData): string;
|
|
57
|
+
export declare function serializeTrackingCookie(data: TrackingData): string;
|
|
59
58
|
/**
|
|
60
59
|
* Attributes for the attribution cookie.
|
|
61
60
|
*
|
|
@@ -64,7 +63,7 @@ declare function serializeTrackingCookie(data: TrackingData): string;
|
|
|
64
63
|
* cross-site navigation — so a returning click would read as a fresh one. No
|
|
65
64
|
* `HttpOnly`, because the capture script has to write it from the page.
|
|
66
65
|
*/
|
|
67
|
-
declare function cookieAttributes(now: number, secure: boolean): string;
|
|
66
|
+
export declare function cookieAttributes(now: number, secure: boolean): string;
|
|
68
67
|
/**
|
|
69
68
|
* Fold a fresh capture into whatever was already stored.
|
|
70
69
|
*
|
|
@@ -73,7 +72,7 @@ declare function cookieAttributes(now: number, secure: boolean): string;
|
|
|
73
72
|
* Taking the latest would restart the window on every visit and make the cookie
|
|
74
73
|
* outlive the click it represents.
|
|
75
74
|
*/
|
|
76
|
-
declare function mergeTracking(existing: TrackingData | null, captured: TrackingData, now: number): TrackingData;
|
|
75
|
+
export declare function mergeTracking(existing: TrackingData | null, captured: TrackingData, now: number): TrackingData;
|
|
77
76
|
//#endregion
|
|
78
77
|
//#region src/tracking/platform.d.ts
|
|
79
78
|
/**
|
|
@@ -83,12 +82,39 @@ declare function mergeTracking(existing: TrackingData | null, captured: Tracking
|
|
|
83
82
|
* a newsletter or a partner site is still attribution, just self-declared rather
|
|
84
83
|
* than platform-issued. Returns null when there is nothing to go on.
|
|
85
84
|
*/
|
|
86
|
-
declare function identifyPlatform(data: TrackingData): string | null;
|
|
85
|
+
export declare function identifyPlatform(data: TrackingData): string | null;
|
|
87
86
|
/** The click ID to quote, with the parameter it came from. */
|
|
88
|
-
declare function getPrimaryClickId(data: TrackingData): {
|
|
87
|
+
export declare function getPrimaryClickId(data: TrackingData): {
|
|
89
88
|
param: string;
|
|
90
89
|
value: string;
|
|
91
90
|
} | null;
|
|
92
91
|
//#endregion
|
|
93
|
-
|
|
92
|
+
//#region src/tracking/identity.d.ts
|
|
93
|
+
/**
|
|
94
|
+
* Pulling a submitter's identity out of a form's fields.
|
|
95
|
+
*
|
|
96
|
+
* Extracted from `notify/render.ts`'s `submitterName()`, which needed only the
|
|
97
|
+
* display name for a subject line. `crm/map.ts` needs the whole set — first
|
|
98
|
+
* name, last name, email, phone, company — to fill a CRM record, and a form's
|
|
99
|
+
* field names vary the same way `submitterName()` already accounted for
|
|
100
|
+
* (`name` vs `first_name`/`last_name` vs neither). Two independent cascades
|
|
101
|
+
* over the same handful of aliases is exactly the failure `render.ts`'s own
|
|
102
|
+
* comment records: a downstream site had five of six forms carrying
|
|
103
|
+
* `first_name`/`last_name`, and a cascade that only checked `name` read every
|
|
104
|
+
* one of them as "Unknown". Keep this the one place that knows the aliases;
|
|
105
|
+
* `submitterName()` and `crm/map.ts` both delegate to it.
|
|
106
|
+
*/
|
|
107
|
+
interface SubmitterIdentity {
|
|
108
|
+
firstName?: string | undefined;
|
|
109
|
+
lastName?: string | undefined;
|
|
110
|
+
/** The best available display name — a submitted full name, first + last
|
|
111
|
+
* joined, or the email address as a last resort. Never empty. */
|
|
112
|
+
fullName: string;
|
|
113
|
+
email?: string | undefined;
|
|
114
|
+
phone?: string | undefined;
|
|
115
|
+
company?: string | undefined;
|
|
116
|
+
}
|
|
117
|
+
export declare function identifySubmitter(formData: Record<string, string>): SubmitterIdentity;
|
|
118
|
+
//#endregion
|
|
119
|
+
export type { ConversionEvent, SubmitterIdentity, TrackingCategory, TrackingConfig, TrackingData };
|
|
94
120
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/tracking/params.ts","../../src/tracking/cookie.ts","../../src/tracking/platform.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/tracking/params.ts","../../src/tracking/cookie.ts","../../src/tracking/platform.ts","../../src/tracking/identity.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;qBAuBa,iBAAiB,SAAS;;qBAc1B;qBAEA;;qBASA;;;;;;;;qBASA;;qBAGA;;qBAGA;;;;wBChDG,WAAW,yCAAyC;;;;;;;;;wBAiBpD,oBAAoB,0CAA0C;;wBAa9D,wBAAwB,MAAM;;;;;;;;;wBAe9B,iBAAiB,aAAa;;;;;;;;;wBAa9B,cACd,UAAU,qBACV,UAAU,cACV,cACC;;;;;;;;;;wBC3Da,iBAAiB,MAAM;;wBASvB,kBAAkB,MAAM;EAAiB;EAAe;;;;;;;;;;;;;;;;;;UCZvD;EACf;EACA;;;EAGA;EACA;EACA;EACA;;wBAWc,kBAAkB,UAAU,yBAAyB"}
|
package/dist/tracking/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t as identifySubmitter } from "../identity-BoRddTx3.mjs";
|
|
1
2
|
import { a as PLATFORM_PARAMS, c as TRACKING_COOKIE_DAYS, i as CLICK_ID_PARAMS, l as UTM_PARAMS, n as identifyPlatform, o as TRACKED_PARAMS, r as AB_COOKIE, s as TRACKING_COOKIE, t as getPrimaryClickId } from "../platform-0nlOIy8h.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/tracking/cookie.ts
|
|
@@ -73,5 +74,5 @@ function mergeTracking(existing, captured, now) {
|
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
//#endregion
|
|
76
|
-
export { AB_COOKIE, CLICK_ID_PARAMS, PLATFORM_PARAMS, TRACKED_PARAMS, TRACKING_COOKIE, TRACKING_COOKIE_DAYS, UTM_PARAMS, cookieAttributes, getPrimaryClickId, identifyPlatform, mergeTracking, parseTrackingCookie, readCookie, serializeTrackingCookie };
|
|
77
|
+
export { AB_COOKIE, CLICK_ID_PARAMS, PLATFORM_PARAMS, TRACKED_PARAMS, TRACKING_COOKIE, TRACKING_COOKIE_DAYS, UTM_PARAMS, cookieAttributes, getPrimaryClickId, identifyPlatform, identifySubmitter, mergeTracking, parseTrackingCookie, readCookie, serializeTrackingCookie };
|
|
77
78
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/tracking/cookie.ts"],"sourcesContent":["/**\n * Reading and writing the `_ac` cookie, as functions over a cookie **string**.\n *\n * String in, string out, so one implementation serves both ends: the browser\n * passes `document.cookie`, the conversion handler passes the request's `Cookie`\n * header. A separate server-side parser would be a second thing to keep in step\n * with the writer, and the failure — attribution silently absent from a\n * notification — looks identical to a visitor who arrived organically.\n *\n * The same shape, for the same reason, as `@getvitops/core`'s consent store.\n */\nimport { TRACKING_COOKIE, TRACKING_COOKIE_DAYS } from './params.ts';\nimport type { TrackingData } from './types.ts';\n\n/** Read one cookie out of a `document.cookie`-shaped string. */\nexport function readCookie(cookieString: string | null | undefined, name: string): string | null {\n if (!cookieString) return null;\n for (const part of cookieString.split(';')) {\n const raw = part.trim();\n if (raw.slice(0, name.length + 1) === `${name}=`) return raw.slice(name.length + 1);\n }\n return null;\n}\n\n/**\n * Cookie header → attribution, or `null`.\n *\n * Anything unparseable reads as `null` — no attribution — rather than as a\n * partial record. A half-read cookie would attribute a conversion to whichever\n * fields happened to survive, which is worse than reporting it unattributed:\n * \"we don't know\" is actionable, a wrong campaign is not.\n */\nexport function parseTrackingCookie(cookieHeader: string | null | undefined): TrackingData | null {\n const raw = readCookie(cookieHeader, TRACKING_COOKIE);\n if (!raw) return null;\n try {\n const data: unknown = JSON.parse(decodeURIComponent(raw));\n if (typeof data !== 'object' || data === null || Array.isArray(data)) return null;\n return data as TrackingData;\n } catch {\n return null;\n }\n}\n\n/** Attribution → cookie value (not the full `Set-Cookie` — see `cookieAttributes`). */\nexport function serializeTrackingCookie(data: TrackingData): string {\n // Undefined values would serialize as absent keys anyway; dropping them first\n // keeps the cookie small and the round-trip exact.\n const clean = Object.fromEntries(Object.entries(data).filter(([, v]) => v !== undefined));\n return encodeURIComponent(JSON.stringify(clean));\n}\n\n/**\n * Attributes for the attribution cookie.\n *\n * `SameSite=Lax` rather than `Strict`: the visitor arrives here by following a\n * link from the ad platform, and `Strict` withholds the cookie on exactly that\n * cross-site navigation — so a returning click would read as a fresh one. No\n * `HttpOnly`, because the capture script has to write it from the page.\n */\nexport function cookieAttributes(now: number, secure: boolean): string {\n const expires = new Date(now + TRACKING_COOKIE_DAYS * 864e5).toUTCString();\n return `;expires=${expires};path=/;SameSite=Lax${secure ? ';Secure' : ''}`;\n}\n\n/**\n * Fold a fresh capture into whatever was already stored.\n *\n * New values win, but `ts` is the **first** capture's — it dates the visitor's\n * original arrival, which is what a 90-day attribution window is measured from.\n * Taking the latest would restart the window on every visit and make the cookie\n * outlive the click it represents.\n */\nexport function mergeTracking(\n existing: TrackingData | null,\n captured: TrackingData,\n now: number,\n): TrackingData {\n return { ...existing, ...captured, ts: existing?.ts ?? now };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/tracking/cookie.ts"],"sourcesContent":["/**\n * Reading and writing the `_ac` cookie, as functions over a cookie **string**.\n *\n * String in, string out, so one implementation serves both ends: the browser\n * passes `document.cookie`, the conversion handler passes the request's `Cookie`\n * header. A separate server-side parser would be a second thing to keep in step\n * with the writer, and the failure — attribution silently absent from a\n * notification — looks identical to a visitor who arrived organically.\n *\n * The same shape, for the same reason, as `@getvitops/core`'s consent store.\n */\nimport { TRACKING_COOKIE, TRACKING_COOKIE_DAYS } from './params.ts';\nimport type { TrackingData } from './types.ts';\n\n/** Read one cookie out of a `document.cookie`-shaped string. */\nexport function readCookie(cookieString: string | null | undefined, name: string): string | null {\n if (!cookieString) return null;\n for (const part of cookieString.split(';')) {\n const raw = part.trim();\n if (raw.slice(0, name.length + 1) === `${name}=`) return raw.slice(name.length + 1);\n }\n return null;\n}\n\n/**\n * Cookie header → attribution, or `null`.\n *\n * Anything unparseable reads as `null` — no attribution — rather than as a\n * partial record. A half-read cookie would attribute a conversion to whichever\n * fields happened to survive, which is worse than reporting it unattributed:\n * \"we don't know\" is actionable, a wrong campaign is not.\n */\nexport function parseTrackingCookie(cookieHeader: string | null | undefined): TrackingData | null {\n const raw = readCookie(cookieHeader, TRACKING_COOKIE);\n if (!raw) return null;\n try {\n const data: unknown = JSON.parse(decodeURIComponent(raw));\n if (typeof data !== 'object' || data === null || Array.isArray(data)) return null;\n return data as TrackingData;\n } catch {\n return null;\n }\n}\n\n/** Attribution → cookie value (not the full `Set-Cookie` — see `cookieAttributes`). */\nexport function serializeTrackingCookie(data: TrackingData): string {\n // Undefined values would serialize as absent keys anyway; dropping them first\n // keeps the cookie small and the round-trip exact.\n const clean = Object.fromEntries(Object.entries(data).filter(([, v]) => v !== undefined));\n return encodeURIComponent(JSON.stringify(clean));\n}\n\n/**\n * Attributes for the attribution cookie.\n *\n * `SameSite=Lax` rather than `Strict`: the visitor arrives here by following a\n * link from the ad platform, and `Strict` withholds the cookie on exactly that\n * cross-site navigation — so a returning click would read as a fresh one. No\n * `HttpOnly`, because the capture script has to write it from the page.\n */\nexport function cookieAttributes(now: number, secure: boolean): string {\n const expires = new Date(now + TRACKING_COOKIE_DAYS * 864e5).toUTCString();\n return `;expires=${expires};path=/;SameSite=Lax${secure ? ';Secure' : ''}`;\n}\n\n/**\n * Fold a fresh capture into whatever was already stored.\n *\n * New values win, but `ts` is the **first** capture's — it dates the visitor's\n * original arrival, which is what a 90-day attribution window is measured from.\n * Taking the latest would restart the window on every visit and make the cookie\n * outlive the click it represents.\n */\nexport function mergeTracking(\n existing: TrackingData | null,\n captured: TrackingData,\n now: number,\n): TrackingData {\n return { ...existing, ...captured, ts: existing?.ts ?? now };\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,SAAgB,WAAW,cAAyC,MAA6B;CAC/F,IAAI,CAAC,cAAc,OAAO;CAC1B,KAAK,MAAM,QAAQ,aAAa,MAAM,GAAG,GAAG;EAC1C,MAAM,MAAM,KAAK,KAAK;EACtB,IAAI,IAAI,MAAM,GAAG,KAAK,SAAS,CAAC,MAAM,GAAG,KAAK,IAAI,OAAO,IAAI,MAAM,KAAK,SAAS,CAAC;CACpF;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,oBAAoB,cAA8D;CAChG,MAAM,MAAM,WAAW,mBAA6B;CACpD,IAAI,CAAC,KAAK,OAAO;CACjB,IAAI;EACF,MAAM,OAAgB,KAAK,MAAM,mBAAmB,GAAG,CAAC;EACxD,IAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,MAAM,QAAQ,IAAI,GAAG,OAAO;EAC7E,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;AAGA,SAAgB,wBAAwB,MAA4B;CAGlE,MAAM,QAAQ,OAAO,YAAY,OAAO,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,OAAO,MAAM,MAAS,CAAC;CACxF,OAAO,mBAAmB,KAAK,UAAU,KAAK,CAAC;AACjD;;;;;;;;;AAUA,SAAgB,iBAAiB,KAAa,QAAyB;CAErE,OAAO,YADS,IAAI,KAAK,WAA6B,KAAK,CAAC,CAAC,YACpC,EAAE,sBAAsB,SAAS,YAAY;AACxE;;;;;;;;;AAUA,SAAgB,cACd,UACA,UACA,KACc;CACd,OAAO;EAAE,GAAG;EAAU,GAAG;EAAU,IAAI,UAAU,MAAM;CAAI;AAC7D"}
|
|
@@ -52,10 +52,12 @@ interface TrackingData {
|
|
|
52
52
|
* and their tests need no fake timers.
|
|
53
53
|
*/
|
|
54
54
|
interface ConversionEvent {
|
|
55
|
-
type: 'form' | 'call';
|
|
55
|
+
type: 'form' | 'call' | 'email';
|
|
56
56
|
/** Submitted fields, for `type: 'form'`. Honeypots are stripped before this. */
|
|
57
57
|
formData?: Record<string, string> | undefined;
|
|
58
58
|
phone?: string | undefined;
|
|
59
|
+
/** The `mailto:` address, for `type: 'email'`. */
|
|
60
|
+
email?: string | undefined;
|
|
59
61
|
/** Attribution from the `_ac` cookie, or null when the visitor arrived cold. */
|
|
60
62
|
tracking: TrackingData | null;
|
|
61
63
|
userAgent?: string | undefined;
|
|
@@ -65,4 +67,4 @@ interface ConversionEvent {
|
|
|
65
67
|
}
|
|
66
68
|
//#endregion
|
|
67
69
|
export { TrackingData as i, TrackingCategory as n, TrackingConfig as r, ConversionEvent as t };
|
|
68
|
-
//# sourceMappingURL=types-
|
|
70
|
+
//# sourceMappingURL=types-7ELci8RQ.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-7ELci8RQ.d.mts","names":[],"sources":["../src/tracking/types.ts"],"mappings":";;;;;;;;;;KAiBY;UAEK;EACf;;;;;;;EAOA,WAAW;EACX;;;;;;;;;;UAWe;GACd;;EAED;;EAEA;;EAEA;;EAEA;;;;;;;;;;;;;;UAee;EACf;;EAEA,WAAW;EACX;;EAEA;;EAEA,UAAU;EACV;EACA;;EAEA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getvitops/utils",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.2.0-alpha.0",
|
|
4
4
|
"description": "Shared build-time utilities for the Vitops toolchain — favicon generation and friends.",
|
|
5
5
|
"homepage": "https://docs.vitops.ca",
|
|
6
6
|
"bugs": "https://github.com/getvitops/design-system/issues",
|
|
@@ -54,6 +54,10 @@
|
|
|
54
54
|
"types": "./dist/notify/index.d.mts",
|
|
55
55
|
"import": "./dist/notify/index.mjs"
|
|
56
56
|
},
|
|
57
|
+
"./crm": {
|
|
58
|
+
"types": "./dist/crm/index.d.mts",
|
|
59
|
+
"import": "./dist/crm/index.mjs"
|
|
60
|
+
},
|
|
57
61
|
"./tracking": {
|
|
58
62
|
"types": "./dist/tracking/index.d.mts",
|
|
59
63
|
"import": "./dist/tracking/index.mjs"
|
|
@@ -65,6 +69,18 @@
|
|
|
65
69
|
"./schema": {
|
|
66
70
|
"types": "./dist/schema/index.d.mts",
|
|
67
71
|
"import": "./dist/schema/index.mjs"
|
|
72
|
+
},
|
|
73
|
+
"./hosting": {
|
|
74
|
+
"types": "./dist/hosting/index.d.mts",
|
|
75
|
+
"import": "./dist/hosting/index.mjs"
|
|
76
|
+
},
|
|
77
|
+
"./email": {
|
|
78
|
+
"types": "./dist/email/index.d.mts",
|
|
79
|
+
"import": "./dist/email/index.mjs"
|
|
80
|
+
},
|
|
81
|
+
"./git": {
|
|
82
|
+
"types": "./dist/git/index.d.mts",
|
|
83
|
+
"import": "./dist/git/index.mjs"
|
|
68
84
|
}
|
|
69
85
|
},
|
|
70
86
|
"publishConfig": {
|
|
@@ -76,9 +92,7 @@
|
|
|
76
92
|
"png-to-ico": "^3.0.2",
|
|
77
93
|
"sharp": "^0.35.3"
|
|
78
94
|
},
|
|
79
|
-
"devDependencies": {
|
|
80
|
-
"vitest": "4.1.9"
|
|
81
|
-
},
|
|
95
|
+
"devDependencies": {},
|
|
82
96
|
"engines": {
|
|
83
97
|
"node": ">=24"
|
|
84
98
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adc-BFrzpMHq.d.mts","names":[],"sources":["../src/google/adc.ts"],"mappings":";;;;iBAkBgB,YAAA,CAAa,GAAA,WAAc,WAAW;;iBAwBtC,eAAA,CAAgB,GAAW;;;;;;AAsB1C;;;;iBALe,kBAAA,CAAmB,IAAA;EACjC,GAAA,EAAK,MAAM;EACX,QAAA;EACA,IAAA;EACA,IAAA,MAAU,KAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-CgAsXiqe.mjs","names":[],"sources":["../src/plan-format.ts","../src/onboarding/cloudflare.ts"],"sourcesContent":["/**\n * The end-of-run summary table shared by `onboarding/plan.ts`'s and `ads/plan.ts`'s\n * `formatSummary` — same header row, same column padding, same \"Reminders\n * (manual — no API):\" tail. Their `StepAction`/`StepPlan`/`formatPlan` glyph\n * renderers stay separate: onboarding's steps are `create | update | skip`\n * with no `blocked` state, ads' are `create | skip | blocked` with a `needs`\n * field, and collapsing those two shapes into one would blur a real\n * difference rather than remove duplication.\n */\nconst pad = (s: string, n: number) => s.padEnd(n);\n\n/** Render a fixed-width table, then a \"Reminders\" section if any were passed. */\nexport function table(headers: string[], rows: string[][], reminders: string[]): string {\n const widths = headers.map((h, i) =>\n Math.max(h.length, ...rows.map((row) => row[i]?.length ?? 0)),\n );\n const line = (cells: string[]) =>\n cells\n .map((c, i) => pad(c, widths[i] ?? 0))\n .join(' ')\n .trimEnd();\n\n const out = [line(headers), widths.map((w) => '─'.repeat(w)).join(' ')];\n for (const row of rows) out.push(line(row));\n if (reminders.length) out.push('', 'Reminders (manual — no API):', ...reminders);\n return out.join('\\n');\n}\n","/**\n * Cloudflare DNS — the one thing this command writes.\n *\n * Scoped to exactly what onboarding needs and nothing more: find a zone by name,\n * read the apex TXT records, and *create* the verification TXT when it is missing.\n * There is deliberately no update and no delete — the command's contract is that it\n * never removes a DNS record, so the destructive verbs are simply absent rather\n * than guarded.\n *\n * The token is a `Zone:DNS:Edit` credential from the environment\n * (`CLOUDFLARE_API_TOKEN`); listing a zone by name also needs `Zone:Read`, which\n * Cloudflare's standard \"Edit zone DNS\" token template already bundles. As with the\n * indexing executors, `fetchImpl` is injected so the request shape is testable\n * without the network, and every call returns a structured result rather than\n * throwing — the caller decides what a failure means per domain.\n */\nconst API = 'https://api.cloudflare.com/client/v4';\n\ninterface CfEnvelope<T> {\n success: boolean;\n errors?: { code: number; message: string }[];\n result?: T;\n}\n\nconst cfError = (status: number, body: CfEnvelope<unknown>): string => {\n const first = body.errors?.[0];\n return first ? `${first.code} ${first.message}` : `HTTP ${status}`;\n};\n\n/** Find the zone id for a domain (`GET /zones?name=`). */\nexport async function findZoneId(\n token: string,\n domain: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<{ ok: boolean; status: number; zoneId?: string; message?: string }> {\n const res = await fetchImpl(`${API}/zones?name=${encodeURIComponent(domain)}`, {\n headers: { authorization: `Bearer ${token}` },\n });\n const body = (await res.json()) as CfEnvelope<{ id: string; name: string }[]>;\n if (!res.ok || !body.success)\n return { ok: false, status: res.status, message: cfError(res.status, body) };\n const zone = body.result?.[0];\n if (!zone)\n return {\n ok: false,\n status: res.status,\n // Name the scope: this lookup is a GET /zones?name=, which needs\n // `Zone:Read` — a token carrying only `Zone:DNS:Edit` reaches here and\n // reads as \"the zone isn't in this account\", which sends you to the\n // wrong dashboard.\n message: `no Cloudflare zone named \"${domain}\" (is it in this account, and does the token carry Zone:Read as well as Zone:DNS:Edit? The \"Edit zone DNS\" template covers both.)`,\n };\n return { ok: true, status: res.status, zoneId: zone.id };\n}\n\n/** List the apex TXT record contents for a zone. */\nexport async function listApexTxt(\n token: string,\n zoneId: string,\n domain: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<{ ok: boolean; status: number; contents: string[]; message?: string }> {\n const res = await fetchImpl(\n `${API}/zones/${zoneId}/dns_records?type=TXT&name=${encodeURIComponent(domain)}`,\n { headers: { authorization: `Bearer ${token}` } },\n );\n const body = (await res.json()) as CfEnvelope<{ content: string }[]>;\n if (!res.ok || !body.success)\n return { ok: false, status: res.status, contents: [], message: cfError(res.status, body) };\n // Cloudflare returns TXT content quoted; normalise so an exact compare works.\n const contents = (body.result ?? []).map((r) => r.content.replace(/^\"|\"$/g, ''));\n return { ok: true, status: res.status, contents };\n}\n\n/**\n * Create an apex TXT record. **Create only** — never called when one already\n * exists (the planner decides that), and there is no sibling that edits or removes.\n */\nexport async function createApexTxt(\n token: string,\n zoneId: string,\n domain: string,\n content: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<{ ok: boolean; status: number; message?: string }> {\n const res = await fetchImpl(`${API}/zones/${zoneId}/dns_records`, {\n method: 'POST',\n headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },\n body: JSON.stringify({ type: 'TXT', name: domain, content }),\n });\n const body = (await res.json()) as CfEnvelope<{ id: string }>;\n if (!res.ok || !body.success)\n return { ok: false, status: res.status, message: cfError(res.status, body) };\n return { ok: true, status: res.status };\n}\n"],"mappings":";;;;;;;;;;AASA,MAAM,OAAO,GAAW,MAAc,EAAE,OAAO,CAAC;;AAGhD,SAAgB,MAAM,SAAmB,MAAkB,WAA6B;CACtF,MAAM,SAAS,QAAQ,KAAK,GAAG,MAC7B,KAAK,IAAI,EAAE,QAAQ,GAAG,KAAK,KAAK,QAAQ,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC,CAC9D;CACA,MAAM,QAAQ,UACZ,MACG,KAAK,GAAG,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,CACrC,KAAK,IAAI,CAAC,CACV,QAAQ;CAEb,MAAM,MAAM,CAAC,KAAK,OAAO,GAAG,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACvE,KAAK,MAAM,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;CAC1C,IAAI,UAAU,QAAQ,IAAI,KAAK,IAAI,gCAAgC,GAAG,SAAS;CAC/E,OAAO,IAAI,KAAK,IAAI;AACtB;;;;;;;;;;;;;;;;;;;;ACVA,MAAM,MAAM;AAQZ,MAAM,WAAW,QAAgB,SAAsC;CACrE,MAAM,QAAQ,KAAK,SAAS;CAC5B,OAAO,QAAQ,GAAG,MAAM,KAAK,GAAG,MAAM,YAAY,QAAQ;AAC5D;;AAGA,eAAsB,WACpB,OACA,QACA,YAA0B,OACmD;CAC7E,MAAM,MAAM,MAAM,UAAU,GAAG,IAAI,cAAc,mBAAmB,MAAM,KAAK,EAC7E,SAAS,EAAE,eAAe,UAAU,QAAQ,EAC9C,CAAC;CACD,MAAM,OAAQ,MAAM,IAAI,KAAK;CAC7B,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,SACnB,OAAO;EAAE,IAAI;EAAO,QAAQ,IAAI;EAAQ,SAAS,QAAQ,IAAI,QAAQ,IAAI;CAAE;CAC7E,MAAM,OAAO,KAAK,SAAS;CAC3B,IAAI,CAAC,MACH,OAAO;EACL,IAAI;EACJ,QAAQ,IAAI;EAKZ,SAAS,6BAA6B,OAAO;CAC/C;CACF,OAAO;EAAE,IAAI;EAAM,QAAQ,IAAI;EAAQ,QAAQ,KAAK;CAAG;AACzD;;AAGA,eAAsB,YACpB,OACA,QACA,QACA,YAA0B,OACsD;CAChF,MAAM,MAAM,MAAM,UAChB,GAAG,IAAI,SAAS,OAAO,6BAA6B,mBAAmB,MAAM,KAC7E,EAAE,SAAS,EAAE,eAAe,UAAU,QAAQ,EAAE,CAClD;CACA,MAAM,OAAQ,MAAM,IAAI,KAAK;CAC7B,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,SACnB,OAAO;EAAE,IAAI;EAAO,QAAQ,IAAI;EAAQ,UAAU,CAAC;EAAG,SAAS,QAAQ,IAAI,QAAQ,IAAI;CAAE;CAE3F,MAAM,YAAY,KAAK,UAAU,CAAC,EAAC,CAAE,KAAK,MAAM,EAAE,QAAQ,QAAQ,UAAU,EAAE,CAAC;CAC/E,OAAO;EAAE,IAAI;EAAM,QAAQ,IAAI;EAAQ;CAAS;AAClD;;;;;AAMA,eAAsB,cACpB,OACA,QACA,QACA,SACA,YAA0B,OACkC;CAC5D,MAAM,MAAM,MAAM,UAAU,GAAG,IAAI,SAAS,OAAO,eAAe;EAChE,QAAQ;EACR,SAAS;GAAE,eAAe,UAAU;GAAS,gBAAgB;EAAmB;EAChF,MAAM,KAAK,UAAU;GAAE,MAAM;GAAO,MAAM;GAAQ;EAAQ,CAAC;CAC7D,CAAC;CACD,MAAM,OAAQ,MAAM,IAAI,KAAK;CAC7B,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,SACnB,OAAO;EAAE,IAAI;EAAO,QAAQ,IAAI;EAAQ,SAAS,QAAQ,IAAI,QAAQ,IAAI;CAAE;CAC7E,OAAO;EAAE,IAAI;EAAM,QAAQ,IAAI;CAAO;AACxC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-Bz_-igw-.d.mts","names":[],"sources":["../src/google/token.ts"],"mappings":";;UAkCiB,cAAA;EACf,YAAA;EACA,WAAW;AAAA;AAAA;AAAA,UAII,WAAA;EACf,QAAA;EACA,YAAA;EACA,YAAA;AAAA;;;;AAAY;AAWd;;;;KAAY,gBAAA;EACN,IAAA;EAAyB,OAAA,EAAS,cAAA;EAAgB,KAAA;AAAA;EAClD,IAAA;EAAe,KAAA,EAAO,WAAW;AAAA;AAAA;AA8CvC;;;;;;;;AA9CuC,iBA8CvB,iBAAA,CACd,UAAA,EAAY,gBAAA,EACZ,SAAA,UAAkB,KAAA,EAClB,GAAA,YACC,OAAA;;;;;;;AAAO;AA6BV;;;;AAEc;AAUd;UAZiB,UAAA;EACf,KAAA;EACA,YAAY;AAAA;AAad;;;;;;;AAAA,KAHY,cAAA,YAA0B,UAAU;;iBAGhC,aAAA,CACd,IAAA,EAAM,cAAA,EACN,KAAA,GAAQ,MAAA,mBACP,MAAA;;cA2BU,MAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-CHHjzRrv.d.mts","names":[],"sources":["../src/tracking/types.ts"],"mappings":";;AAiBA;;;;AAA4B;AAE5B;;;KAFY,gBAAA;AAAA,UAEK,cAAA;EACf,OAAA;EAOW;;;AACF;AAWX;;EAZE,QAAA,GAAW,gBAAgB;EAC3B,SAAA;AAAA;;;;;;AAoBU;AAeZ;;UAxBiB,YAAA;EAAA,CACd,KAAA;EAwBD;EAtBA,WAAA;EAwBW;EAtBX,QAAA;EAyBA;EAvBA,EAAA;EAwBA;EAtBA,UAAA;AAAA;;AAyBE;;;;;;;;;;;UAVa,eAAA;EACf,IAAA;;EAEA,QAAA,GAAW,MAAA;EACX,KAAA;;EAEA,QAAA,EAAU,YAAY;EACtB,SAAA;EACA,EAAA;;EAEA,EAAA;AAAA"}
|