@adriangalilea/utils 2.8.0 → 2.10.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/README.md CHANGED
@@ -99,6 +99,38 @@ btc(0.00001234) // "0.00001234 ₿"
99
99
  money(100, 'EUR') // "€100.00"
100
100
  ```
101
101
 
102
+ ### URL (`url`)
103
+
104
+ Tracking-parameter stripping and canonical cache keys, on the WHATWG URL API.
105
+ The knowledge of WHICH params are tracking is vendored from
106
+ [@protontech/tidy-url](https://www.npmjs.com/package/@protontech/tidy-url)
107
+ (Proton's maintained fork of DrKain/tidy-url, MIT; refresh with
108
+ `pnpm update-url-rules`) plus a small tested overlay: global rules only for
109
+ unambiguous trackers (utm_*, fbclid, gclid, …), ambiguous names per-host —
110
+ `si` is junk on YouTube/Spotify but `ref` on GitHub names a branch and
111
+ survives. Two verbs for two jobs:
112
+
113
+ ```typescript
114
+ import { cleanUrl, urlKey } from '@adriangalilea/utils/url'
115
+
116
+ // The SAME resource minus tracking — safe to fetch, share, display.
117
+ // Keeps scheme, www., param order, and the fragment (a real anchor).
118
+ cleanUrl('https://www.youtube.com/watch?v=abc&t=120s&si=junk&utm_source=x')
119
+ // 'https://www.youtube.com/watch?v=abc&t=120s'
120
+
121
+ // The resource's IDENTITY — for cache keys and dedupe. Scheme-agnostic,
122
+ // www-less lowercase host, no trailing slash, params stripped + sorted,
123
+ // fragment dropped: every spelling of one page collides, different pages never do.
124
+ urlKey('https://www.theverge.com/2026/1/1/story/?utm_source=twitter#comments')
125
+ // 'theverge.com/2026/1/1/story'
126
+
127
+ // App-specific junk rides along per call
128
+ urlKey(url, { strip: ['session_id'] })
129
+ ```
130
+
131
+ Unparseable or non-http(s) input passes through unchanged — these are hygiene
132
+ functions over user-pasted text, not validators.
133
+
102
134
  ### CLI presentation (`cli`)
103
135
 
104
136
  Terminal output: aligned tables, key/value blocks, trees, and a semantic color
@@ -28,10 +28,23 @@ export type WorkerBot = {
28
28
  type WaitUntilCtx = {
29
29
  waitUntil(promise: Promise<unknown>): void;
30
30
  };
31
+ /**
32
+ * True when the update is the bot's own voice: a message it authored, or a forward of one of
33
+ * its messages (forward_origin type "user" pointing back at it). Replies TO the bot are NOT
34
+ * echoes — they're the conversation.
35
+ */
36
+ export declare function isSelfEcho(update: unknown, selfId: number): boolean;
31
37
  export type BotWorkerRuntime = {
32
38
  bot: WorkerBot;
33
39
  /** Telegram webhook secret; unset → webhook/setup respond 500 (a misconfigured prod must scream). */
34
40
  webhookSecret?: string;
41
+ /**
42
+ * The bot's own user id (the digits before the token's colon). When set, updates that are
43
+ * the bot's OWN VOICE echoed back — a message it authored (channels/business echo their own
44
+ * posts) or a FORWARD of one of its messages (a forwarded summary still carries live links) —
45
+ * are acked and dropped before dispatch: a bot must never listen to itself, or it loops.
46
+ */
47
+ selfId?: number;
35
48
  /** Bearer for /pause, /resume, /webhook-status; unset → those 404 (surface disabled). */
36
49
  operatorSecret?: string;
37
50
  /** Deployment label echoed in responses/DMs (e.g. the wrangler env name). */
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/bot/worker.ts"],"names":[],"mappings":"AA2CA,OAAO,EACN,KAAK,aAAa,EAIlB,MAAM,aAAa,CAAC;AAIrB,6FAA6F;AAC7F,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC7D,GAAG,EAAE;QACJ,UAAU,CAAC,MAAM,EAAE;YAClB,GAAG,EAAE,MAAM,CAAC;YACZ,YAAY,EAAE,MAAM,CAAC;YACrB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,cAAc,IAAI,OAAO,CAAC;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;QAClE,+DAA+D;QAC/D,WAAW,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACzE,CAAC;CACF,CAAC;AAEF,KAAK,YAAY,GAAG;IAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC5C,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,mFAAmF;IACnF,MAAM,CAAC,EAAE,CACR,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,YAAY,KACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;IAChD,qFAAqF;IACrF,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EACjC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,GACjE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAkLtE"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/bot/worker.ts"],"names":[],"mappings":"AA2CA,OAAO,EACN,KAAK,aAAa,EAIlB,MAAM,aAAa,CAAC;AAIrB,6FAA6F;AAC7F,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC7D,GAAG,EAAE;QACJ,UAAU,CAAC,MAAM,EAAE;YAClB,GAAG,EAAE,MAAM,CAAC;YACZ,YAAY,EAAE,MAAM,CAAC;YACrB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,cAAc,IAAI,OAAO,CAAC;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;QAClE,+DAA+D;QAC/D,WAAW,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACzE,CAAC;CACF,CAAC;AAEF,KAAK,YAAY,GAAG;IAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,CAAC;AAgBnE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CASnE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC5C,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,mFAAmF;IACnF,MAAM,CAAC,EAAE,CACR,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,YAAY,KACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;IAChD,qFAAqF;IACrF,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EACjC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,GACjE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAsLtE"}
@@ -43,6 +43,32 @@ import { buildAllowedUpdates } from "gramio";
43
43
  import { createLogger } from "../universal/log.js";
44
44
  import { alertAdminError, alertThrottle, notifyAdmins, } from "./notify.js";
45
45
  const log = createLogger("bot/worker");
46
+ const MESSAGE_KEYS = [
47
+ "message",
48
+ "edited_message",
49
+ "channel_post",
50
+ "edited_channel_post",
51
+ "business_message",
52
+ "edited_business_message",
53
+ ];
54
+ /**
55
+ * True when the update is the bot's own voice: a message it authored, or a forward of one of
56
+ * its messages (forward_origin type "user" pointing back at it). Replies TO the bot are NOT
57
+ * echoes — they're the conversation.
58
+ */
59
+ export function isSelfEcho(update, selfId) {
60
+ const u = update;
61
+ for (const key of MESSAGE_KEYS) {
62
+ const m = u?.[key];
63
+ if (!m)
64
+ continue;
65
+ if (m.from?.id === selfId)
66
+ return true;
67
+ if (m.forward_origin?.sender_user?.id === selfId)
68
+ return true;
69
+ }
70
+ return false;
71
+ }
46
72
  /**
47
73
  * Build the Worker `fetch` handler. `resolve` runs per request — memoize your
48
74
  * bot construction inside it (the classic `let botPromise` pattern) so the
@@ -82,6 +108,10 @@ export function botWorkerFetch(resolve) {
82
108
  catch {
83
109
  return new Response("Bad Request", { status: 400 });
84
110
  }
111
+ // The bot never listens to itself (see isSelfEcho): ack and drop.
112
+ if (rt.selfId !== undefined && isSelfEcho(update, rt.selfId)) {
113
+ return new Response("OK");
114
+ }
85
115
  // Ack Telegram immediately, then keep the Worker alive for the slow
86
116
  // work (avoids GramIO's 30s webhook timeout).
87
117
  ctx.waitUntil((async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/bot/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/bot/worker.ts"],"names":[],"mappings":"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"}
package/dist/browser.d.ts CHANGED
@@ -11,4 +11,5 @@ export { runtime } from "./runtime.js";
11
11
  export * from "./universal/currency/index.js";
12
12
  export * from "./universal/format.js";
13
13
  export * from "./universal/log.js";
14
+ export * from "./universal/url/index.js";
14
15
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
package/dist/browser.js CHANGED
@@ -13,6 +13,7 @@ export * from "./universal/currency/index.js";
13
13
  export * from "./universal/format.js";
14
14
  // Universal utilities that work in browser
15
15
  export * from "./universal/log.js";
16
+ export * from "./universal/url/index.js";
16
17
  // Note: file, dir, path, project, and kev are NOT exported here
17
18
  // because they depend on Node.js file system APIs
18
19
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,2CAA2C;AAC3C,cAAc,oBAAoB,CAAC;AAEnC,gEAAgE;AAChE,kDAAkD"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,2CAA2C;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AAEzC,gEAAgE;AAChE,kDAAkD"}
package/dist/index.d.ts CHANGED
@@ -16,4 +16,5 @@ export * from "./say/index.js";
16
16
  export * from "./universal/currency/index.js";
17
17
  export * from "./universal/format.js";
18
18
  export * from "./universal/log.js";
19
+ export * from "./universal/url/index.js";
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -21,4 +21,5 @@ export * from "./universal/currency/index.js";
21
21
  export * from "./universal/format.js";
22
22
  // Universal utilities - work everywhere
23
23
  export * from "./universal/log.js";
24
+ export * from "./universal/url/index.js";
24
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yDAAyD;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,8BAA8B;AAC9B,mEAAmE;AACnE,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzD,uDAAuD;AACvD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,wCAAwC;AACxC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yDAAyD;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,8BAA8B;AAC9B,mEAAmE;AACnE,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzD,uDAAuD;AACvD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,wCAAwC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,24 @@
1
+ export { TIDY_RULES, TIDY_VERSION, type TrackingProvider } from "./tidy-rules.js";
2
+ export { OVERLAY_RULES } from "./overlay.js";
3
+ export interface StripOptions {
4
+ /** Extra param names to strip (compared lowercased), for app-specific junk. */
5
+ strip?: readonly string[];
6
+ }
7
+ /**
8
+ * The same URL minus tracking params: safe to fetch, share, and display.
9
+ * Unparseable or non-http(s) input is returned unchanged.
10
+ */
11
+ export declare function cleanUrl(url: string, opts?: StripOptions): string;
12
+ /**
13
+ * A canonical identity for the resource behind `url` — `host/path?sortedQuery`
14
+ * — for cache keys and dedupe. Unparseable or non-http(s) input is returned
15
+ * unchanged so it still keys consistently.
16
+ */
17
+ export declare function urlKey(url: string, opts?: StripOptions): string;
18
+ /**
19
+ * True if `name` is a tracking param — globally, or on `host` specifically.
20
+ * Providers that match on the full URL (matchHref) need more context than a
21
+ * host and are skipped here; `cleanUrl`/`urlKey` do honor them.
22
+ */
23
+ export declare function isTrackingParam(name: string, host?: string): boolean;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/universal/url/index.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAU/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAUhE"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * URL hygiene: tracking-parameter stripping and canonical cache keys.
3
+ * Pure and dependency-free — safe in Node, Workers, and browsers.
4
+ *
5
+ * Two verbs for two jobs:
6
+ * - `cleanUrl(url)`: the SAME resource, minus tracking params. Safe to fetch,
7
+ * share, and display. Keeps scheme, www., remaining param order, and the
8
+ * fragment (a fragment can be a real anchor).
9
+ * - `urlKey(url)`: the resource's IDENTITY, for cache keys and dedupe.
10
+ * Scheme-agnostic, lowercase host without www. or a trailing dot, no
11
+ * trailing slash, tracking params stripped, surviving params sorted,
12
+ * fragment dropped. Two spellings of one page collide; two different
13
+ * pages never do.
14
+ *
15
+ * The knowledge of WHICH params are tracking is not ours: it's vendored from
16
+ * @protontech/tidy-url (Proton's maintained fork of DrKain/tidy-url, MIT; see
17
+ * tidy-rules.ts, refresh with `pnpm update-url-rules`) plus a small tested
18
+ * overlay for gaps (overlay.ts). URLs are parsed with the WHATWG URL API,
19
+ * never regexes; the dataset's per-provider matchers select which rules apply
20
+ * to a host, and param names are compared literally (lowercased).
21
+ *
22
+ * Unparseable or non-http(s) input passes through unchanged: these are hygiene
23
+ * functions over user-pasted text, not validators.
24
+ */
25
+ import { OVERLAY_RULES } from "./overlay.js";
26
+ import { TIDY_RULES } from "./tidy-rules.js";
27
+ export { TIDY_RULES, TIDY_VERSION } from "./tidy-rules.js";
28
+ export { OVERLAY_RULES } from "./overlay.js";
29
+ /**
30
+ * The same URL minus tracking params: safe to fetch, share, and display.
31
+ * Unparseable or non-http(s) input is returned unchanged.
32
+ */
33
+ export function cleanUrl(url, opts) {
34
+ const u = parseHttp(url);
35
+ if (!u)
36
+ return url;
37
+ deleteTracking(u, opts);
38
+ return u.toString();
39
+ }
40
+ /**
41
+ * A canonical identity for the resource behind `url` — `host/path?sortedQuery`
42
+ * — for cache keys and dedupe. Unparseable or non-http(s) input is returned
43
+ * unchanged so it still keys consistently.
44
+ */
45
+ export function urlKey(url, opts) {
46
+ const u = parseHttp(url);
47
+ if (!u)
48
+ return url;
49
+ deleteTracking(u, opts);
50
+ u.searchParams.sort();
51
+ const host = u.hostname.toLowerCase().replace(/^www\./, "").replace(/\.$/, "");
52
+ const port = u.port ? `:${u.port}` : ""; // default ports never survive URL parsing
53
+ const path = u.pathname.replace(/\/+$/, "") || "/";
54
+ const query = u.searchParams.toString();
55
+ return `${host}${port}${path}${query ? `?${query}` : ""}`;
56
+ }
57
+ /**
58
+ * True if `name` is a tracking param — globally, or on `host` specifically.
59
+ * Providers that match on the full URL (matchHref) need more context than a
60
+ * host and are skipped here; `cleanUrl`/`urlKey` do honor them.
61
+ */
62
+ export function isTrackingParam(name, host = "") {
63
+ const n = name.toLowerCase();
64
+ const doomed = new Set();
65
+ const allowed = new Set();
66
+ for (const p of compiled()) {
67
+ if (p.provider.matchHref)
68
+ continue;
69
+ if (!p.match.test(host))
70
+ continue;
71
+ collect(p.provider, doomed, allowed);
72
+ }
73
+ return doomed.has(n) && !allowed.has(n);
74
+ }
75
+ let cache = null;
76
+ /** All providers (vendored + overlay), matchers compiled once per process. */
77
+ function compiled() {
78
+ cache ??= [...TIDY_RULES, ...OVERLAY_RULES].map((provider) => ({
79
+ provider,
80
+ match: new RegExp(provider.match, provider.flags),
81
+ exclude: (provider.exclude ?? []).map((e) => new RegExp(e.match, e.flags)),
82
+ }));
83
+ return cache;
84
+ }
85
+ /** Parse as a WHATWG URL, but only for http(s); anything else → null. */
86
+ function parseHttp(url) {
87
+ let u;
88
+ try {
89
+ u = new URL(url);
90
+ }
91
+ catch {
92
+ return null;
93
+ }
94
+ return u.protocol === "http:" || u.protocol === "https:" ? u : null;
95
+ }
96
+ /** Fold one provider's rules/allow into the doomed/allowed sets (lowercased). */
97
+ function collect(provider, doomed, allowed) {
98
+ for (const r of provider.rules)
99
+ doomed.add(r.toLowerCase());
100
+ for (const a of provider.allow ?? [])
101
+ allowed.add(a.toLowerCase());
102
+ }
103
+ /** Remove tracking params (dataset + overlay + caller extras) from `u` in place. */
104
+ function deleteTracking(u, opts) {
105
+ const doomed = new Set();
106
+ const allowed = new Set();
107
+ for (const p of compiled()) {
108
+ // Upstream semantics: providers match on the host (href when matchHref),
109
+ // and an exclude pattern opts the whole URL out of that provider.
110
+ if (!p.match.test(p.provider.matchHref ? u.href : u.host))
111
+ continue;
112
+ if (p.exclude.some((x) => x.test(u.href)))
113
+ continue;
114
+ collect(p.provider, doomed, allowed);
115
+ }
116
+ for (const extra of opts?.strip ?? [])
117
+ doomed.add(extra.toLowerCase());
118
+ for (const a of allowed)
119
+ doomed.delete(a);
120
+ if (doomed.size === 0)
121
+ return;
122
+ // Collect first: deleting while iterating URLSearchParams skips entries.
123
+ const keys = [...new Set(u.searchParams.keys())];
124
+ for (const k of keys) {
125
+ if (doomed.has(k.toLowerCase()))
126
+ u.searchParams.delete(k);
127
+ }
128
+ }
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/universal/url/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Curated additions the vendored ruleset lacks, in the same TrackingProvider
3
+ * shape so the engine treats both identically. Everything here is covered by
4
+ * tests/url-test.ts; entries that land upstream can be deleted on the next
5
+ * `pnpm update-url-rules`.
6
+ *
7
+ * The bar for the global entry is UNAMBIGUOUS: ad-platform click ids and
8
+ * analytics linkers that never carry meaning anywhere. Ambiguous names
9
+ * (`ref`, `source`, `si`, `t`) go under a host — a global strip of `ref`
10
+ * would corrupt GitHub URLs, where it names a branch.
11
+ */
12
+ import type { TrackingProvider } from "./tidy-rules.js";
13
+ export declare const OVERLAY_RULES: readonly TrackingProvider[];
14
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/universal/url/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,eAAO,MAAM,aAAa,EAAE,SAAS,gBAAgB,EA6DpD,CAAC"}
@@ -0,0 +1,63 @@
1
+ export const OVERLAY_RULES = [
2
+ {
3
+ name: "overlay:global",
4
+ match: ".*",
5
+ flags: "",
6
+ rules: [
7
+ // Ad-platform click ids upstream's Global list misses
8
+ "msclkid", // Microsoft Ads
9
+ "dclid", // Google DoubleClick
10
+ "yclid", // Yandex
11
+ "twclid", // Twitter Ads
12
+ "ttclid", // TikTok Ads
13
+ "li_fat_id", // LinkedIn
14
+ "epik", // Pinterest
15
+ "irclickid", // Impact Radius
16
+ "srsltid", // Google Merchant / shopping results
17
+ "gbraid", // Google Ads (iOS attribution)
18
+ "wbraid",
19
+ // Google Analytics cross-domain linker
20
+ "_ga",
21
+ "_gl",
22
+ "_gid",
23
+ // Openstat (mail.ru / rambler analytics)
24
+ "_openstat",
25
+ ],
26
+ },
27
+ {
28
+ // Upstream's youtube matcher (`.*.youtube.com`) misses the bare host, and its
29
+ // rules miss the share/attribution params — carry a superset that covers both.
30
+ name: "overlay:youtube.com",
31
+ match: "(^|\\.)youtube\\.com$",
32
+ flags: "i",
33
+ rules: ["si", "pp", "ab_channel", "kw", "feature", "app", "embeds_referring_euri", "embeds_referring_origin"],
34
+ },
35
+ {
36
+ name: "overlay:youtu.be",
37
+ match: "(^|\\.)youtu\\.be$",
38
+ flags: "i",
39
+ rules: ["si", "feature"],
40
+ },
41
+ {
42
+ // Upstream covers twitter.com but not the x.com rename; `t` (share token) is
43
+ // missing on both. `s` and `t` are share residue here, meaningful elsewhere.
44
+ name: "overlay:x.com",
45
+ match: "(^|\\.)x\\.com$",
46
+ flags: "i",
47
+ rules: ["s", "t", "src", "ref_url", "ref_src", "mx"],
48
+ },
49
+ {
50
+ name: "overlay:twitter.com",
51
+ match: "(^|\\.)twitter\\.com$",
52
+ flags: "i",
53
+ rules: ["t"],
54
+ },
55
+ {
56
+ // Substack share links: `r` is the referrer handle, the rest is signup routing.
57
+ name: "overlay:substack.com",
58
+ match: "(^|\\.)substack\\.com$",
59
+ flags: "i",
60
+ rules: ["r", "triedRedirect", "freeWelcomeReferral", "isFreemail"],
61
+ },
62
+ ];
63
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/universal/url/overlay.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,aAAa,GAAgC;IACzD;QACC,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,EAAE;QACT,KAAK,EAAE;YACN,sDAAsD;YACtD,SAAS,EAAE,gBAAgB;YAC3B,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,aAAa;YACvB,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,qCAAqC;YAChD,QAAQ,EAAE,+BAA+B;YACzC,QAAQ;YACR,uCAAuC;YACvC,KAAK;YACL,KAAK;YACL,MAAM;YACN,yCAAyC;YACzC,WAAW;SACX;KACD;IACD;QACC,8EAA8E;QAC9E,+EAA+E;QAC/E,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,CAAC;KAC7G;IACD;QACC,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,oBAAoB;QAC3B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;KACxB;IACD;QACC,6EAA6E;QAC7E,6EAA6E;QAC7E,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;KACpD;IACD;QACC,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,GAAG,CAAC;KACZ;IACD;QACC,gFAAgF;QAChF,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,CAAC;KAClE;CACD,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface TrackingProvider {
2
+ name: string;
3
+ /** Host-matcher regex source; tested against the URL host (href when matchHref). */
4
+ match: string;
5
+ flags: string;
6
+ matchHref?: boolean;
7
+ /** Param names to strip (compared lowercased). */
8
+ rules: readonly string[];
9
+ /** Param names protected from ANY rule on this provider's URLs. */
10
+ allow?: readonly string[];
11
+ /** URL patterns that opt a URL out of this provider entirely. */
12
+ exclude?: readonly {
13
+ match: string;
14
+ flags: string;
15
+ }[];
16
+ }
17
+ export declare const TIDY_VERSION = "1.18.5";
18
+ export declare const TIDY_RULES: readonly TrackingProvider[];
19
+ //# sourceMappingURL=tidy-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tidy-rules.d.ts","sourceRoot":"","sources":["../../../src/universal/url/tidy-rules.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtD;AAED,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,UAAU,EAAE,SAAS,gBAAgB,EAiLjD,CAAC"}
@@ -0,0 +1,192 @@
1
+ // GENERATED FILE — do not edit; refresh with `pnpm update-url-rules`.
2
+ //
3
+ // Tracking-parameter ruleset vendored from @protontech/tidy-url@1.18.5 (data/rules.js),
4
+ // Proton's maintained fork of https://github.com/DrKain/tidy-url.
5
+ // Upstream license: MIT — Copyright (c) 2021 DrKain (https://github.com/DrKain)
6
+ //
7
+ // Carried fields: the host matcher (match/flags; tested against the URL host,
8
+ // or the full href when matchHref), the param names to strip (rules), params
9
+ // protected from any rule (allow), and URL patterns that opt a URL out of the
10
+ // provider (exclude). Upstream's redirect/AMP/decode features are out of scope;
11
+ // 56 providers that only did those were dropped (176 kept).
12
+ // Generated 2026-07-13.
13
+ export const TIDY_VERSION = "1.18.5";
14
+ export const TIDY_RULES = [
15
+ { "name": "Global", "match": ".*", "flags": "", "rules": ["utm_source", "utm_medium", "utm_term", "utm_campaign", "utm_content", "utm_name", "utm_cid", "utm_reader", "utm_viz_id", "utm_pubreferrer", "utm_swu", "utm_social-type", "utm_brand", "utm_team", "utm_feeditemid", "utm_id", "utm_marketing_tactic", "utm_creative_format", "utm_campaign_id", "utm_source_platform", "utm_timestamp", "utm_souce", "utm_couponvalue", "itm_source", "itm_medium", "itm_term", "itm_campaign", "itm_content", "itm_channel", "itm_source_s", "itm_medium_s", "itm_campaign_s", "itm_audience", "int_source", "int_cmp_name", "int_cmp_id", "int_cmp_creative", "int_medium", "int_campaign", "int_content", "pk_campaign", "pk_cpn", "pk_source", "pk_medium", "pk_keyword", "pk_kwd", "pk_content", "pk_cid", "piwik_campaign", "piwik_cpn", "piwik_source", "piwik_medium", "piwik_keyword", "piwik_kwd", "piwik_content", "piwik_cid", "gclid", "ga_source", "ga_medium", "ga_term", "ga_content", "ga_campaign", "ga_place", "gclid", "gclsrc", "hsa_cam", "hsa_grp", "hsa_mt", "hsa_src", "hsa_ad", "hsa_acc", "hsa_net", "hsa_kw", "hsa_tgt", "hsa_ver", "hsa_la", "hsa_ol", "fbclid", "oly_enc_id", "oly_anon_id", "vero_id", "vero_conv", "__s", "_hsenc", "_hsmi", "__hssc", "__hstc", "__hsfp", "hsCtaTracking", "mkt_tok", "mtm_campaign", "mtm_keyword", "mtm_kwd", "mtm_source", "mtm_medium", "mtm_content", "mtm_cid", "mtm_group", "mtm_placement", "elqTrackId", "elq", "elqak", "elqaid", "elqat", "elqCampaignId", "elqTrack", "mc_cid", "mc_eid", "ncid", "cmpid", "mbid", "rdt_cid"] },
16
+ { "name": "audible.com", "match": "www.audible.com", "flags": "i", "rules": ["qid", "sr", "pf_rd_p", "pf_rd_r", "plink", "ref"] },
17
+ { "name": "bandcamp.com", "match": ".*.bandcamp.com", "flags": "i", "rules": ["from", "search_item_id", "search_item_type", "search_match_part", "search_page_id", "search_page_no", "search_rank", "search_sig"] },
18
+ { "name": "amazon.com", "match": "amazon\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["psc", "colid", "coliid", "linkId", "tag", "linkCode", "ms3_c", "pf_rd_s", "pf_rd_t", " pf_rd_i", "pf_rd_m", "pd_rd_w", "qid", "sr", "keywords", "dchild", "ref", "ref_", "rnid", "pf_rd_r", "pf_rd_p", "pd_rd_r", "smid", "pd_rd_wg", "content-id", "spLa", "crid", "sprefix", "hvlocint", "hvdvcmdl", "hvptwo", "hvpone", "hvpos", "qu", "pd_rd_i", "nc2", "nc1", "trk", "sc_icampaign", "trkCampaign", "ufe", "sc_icontent", "sc_ichannel", "sc_iplace", "sc_country", "sc_outcome", "sc_geo", "sc_campaign", "sc_channel"] },
19
+ { "name": "reddit.com", "match": ".*.reddit.com", "flags": "i", "rules": ["ref_campaign", "ref_source", "tags", "keyword", "channel", "campaign", "user_agent", "domain", "base_url", "$android_deeplink_path", "$deeplink_path", "$og_redirect", "share_id", "correlation_id", "ref", "rdt"] },
20
+ { "name": "app.link", "match": ".*\\.app\\.link", "flags": "i", "rules": ["tags", "keyword", "channel", "campaign", "user_agent", "domain", "base_url", "$android_deeplink_path", "$deeplink_path", "$og_redirect", "compact_view", "dnt", "adblock", "geoip_country", "referrer_domain", "referrer_url"] },
21
+ { "name": "twitch.tv", "match": "www.twitch.tv", "flags": "i", "rules": ["tt_medium", "tt_content", "tt_email_id"] },
22
+ { "name": "blog.twitch.tv", "match": "blog.twitch.tv", "flags": "i", "rules": ["utm_referrer"] },
23
+ { "name": "pixiv.net", "match": "www.pixiv.net", "flags": "i", "rules": ["p", "i", "g"] },
24
+ { "name": "spotify.com", "match": "open.spotify.com", "flags": "i", "rules": ["si", "utm_source", "context", "sp_cid", "_branch_match_id", "_branch_referrer"], "allow": ["go", "nd"] },
25
+ { "name": "aliexpress.com", "match": "^(?:https?:\\/\\/)?(?:[^.]+\\.)?aliexpress\\.(?:[a-z]{2,}){1,}", "flags": "i", "rules": ["_t", "spm", "algo_pvid", "algo_expid", "btsid", "ws_ab_test", "initiative_id", "origin", "widgetId", "tabType", "productId", "productIds", "gps-id", "scm", "scm_id", "scm-url", "pvid", "algo_exp_id", "pdp_pi", "fromRankId", "sourceType", "utparam", "gatewayAdapt", "_evo_buckets", "tpp_rcmd_bucket_id", "scenario", "pdp_npi", "tt", "spreadType", "srcSns", "bizType", "social_params", "aff_fcid", "aff_fsk", "aff_platform", "aff_trace_key", "shareId", "platform", "businessType", "terminal_id", "afSmartRedirect", "sk", "gbraid"], "allow": ["sku_id", "pdp_ext_f"] },
26
+ { "name": "google.com", "match": "www.google\\..*", "flags": "i", "rules": ["sourceid", "client", "aqs", "sxsrf", "uact", "ved", "iflsig", "source", "ei", "oq", "gs_lcp", "sclient", "bih", "biw", "sa", "dpr", "rlz", "gs_lp", "sca_esv", "si", "gs_l", "gs_lcrp"] },
27
+ { "name": "youtube.com", "match": ".*.youtube.com", "flags": "i", "rules": ["gclid", "feature", "app", "src", "lId", "cId", "embeds_referring_euri"] },
28
+ { "name": "humblebundle.com", "match": "www.humblebundle.com", "flags": "i", "rules": ["hmb_source", "hmb_medium", "hmb_campaign", "mcID", "linkID"], "allow": ["partner"] },
29
+ { "name": "greenmangaming.com", "match": "www.greenmangaming.com", "flags": "i", "rules": ["CJEVENT", "cjevent", "irclickid", "irgwc", "pdpgatetoken"] },
30
+ { "name": "fanatical.com", "match": "www.fanatical.com", "flags": "i", "rules": ["cj_pid", "cj_aid", "aff_track", "CJEVENT", "cjevent"] },
31
+ { "name": "newsweek.com", "match": "www.newsweek.com", "flags": "i", "rules": ["subref", "amp"] },
32
+ { "name": "imgur.com", "match": "imgur.com", "flags": "i", "rules": ["source"] },
33
+ { "name": "plex.tv", "match": ".*.plex.tv", "flags": "i", "rules": ["origin", "plex_utm", "sl", "ckhid"] },
34
+ { "name": "imdb.com", "match": "^.*\\.imdb\\.com", "flags": "i", "rules": ["ref_", "ref\\_", "pf_rd_m", "pf_rd_r", "pf_rd_p", "pf_rd_s", "pf_rd_t", "pf_rd_i", "ref_hp_hp_e_2", "rf", "ref"] },
35
+ { "name": "gog.com", "match": "www.gog.com", "flags": "i", "rules": ["at_gd", "rec_scenario_id", "rec_sub_source_id", "rec_item_id", "vds_id", "prod_id", "rec_source"] },
36
+ { "name": "tiktok.com", "match": "www.tiktok.com", "flags": "i", "rules": ["is_copy_url", "is_from_webapp", "sender_device", "sender_web_id", "sec_user_id", "share_app_id", "share_item_id", "share_link_id", "social_sharing", "_r", "source", "user_id", "u_code", "tt_from", "share_author_id", "sec_uid", "checksum", "_d", "refer", "enter_from", "enter_method", "attr_medium", "attr_source"], "allow": ["lang"] },
37
+ { "name": "facebook.com", "match": ".*.facebook.com", "flags": "i", "rules": ["fbclid", "fb_ref", "fb_source", "referral_code", "referral_story_type", "tracking", "ref"], "exclude": [{ "match": "www\\.facebook\\.com\\/sharer", "flags": "i" }] },
38
+ { "name": "yandex.com", "match": "yandex.com", "flags": "i", "rules": ["lr", "from", "grhow", "origin", "_openstat"] },
39
+ { "name": "store.steampowered.com", "match": "store.steampowered.com", "flags": "i", "rules": ["snr"] },
40
+ { "name": "findojobs.co.nz", "match": "www.findojobs.co.nz", "flags": "i", "rules": ["source"] },
41
+ { "name": "linkedin.com", "match": ".*.linkedin.com", "flags": "i", "rules": ["contextUrn", "destRedirectURL", "lipi", "licu", "trk", "trkInfo", "originalReferer", "upsellOrderOrigin", "upsellTrk", "upsellTrackingId", "src", "trackingId", "midToken", "midSig", "trkEmail", "eid"], "allow": ["otpToken"] },
42
+ { "name": "indeed.com", "match": ".*.indeed.com", "flags": "i", "rules": ["from", "attributionid"] },
43
+ { "name": "discord.com", "match": "(?:.*\\.)?discord\\.com", "flags": "i", "rules": ["source", "ref"] },
44
+ { "name": "medium.com", "match": "medium.com", "flags": "i", "rules": ["source"] },
45
+ { "name": "twitter.com", "match": "twitter.com", "flags": "i", "rules": ["s", "src", "ref_url", "ref_src"] },
46
+ { "name": "voidu.com", "match": "voidu.com", "flags": "i", "rules": ["affiliate"] },
47
+ { "name": "wingamestore.com", "match": "wingamestore.com", "flags": "i", "rules": ["ars"] },
48
+ { "name": "gamebillet.com", "match": "gamebillet.com", "flags": "i", "rules": ["affiliate"] },
49
+ { "name": "gamesload.com", "match": "^www.gamesload.com", "flags": "i", "rules": ["affil"], "allow": ["REF"] },
50
+ { "name": "mightyape", "match": "mightyape.(co.nz|com.au)", "flags": "i", "rules": ["m"] },
51
+ { "name": "apple.com", "match": ".*.apple.com", "flags": "i", "rules": ["uo", "app", "at", "ct", "ls", "pt", "mt", "itsct", "itscg", "referrer", "src", "cid"] },
52
+ { "name": "music.apple.com", "match": "music.apple.com", "flags": "i", "rules": ["i", "lId", "cId", "sr", "src"] },
53
+ { "name": "play.google.com", "match": "play.google.com", "flags": "i", "rules": ["referrer", "pcampaignid"] },
54
+ { "name": "lenovo.com", "match": ".*.lenovo.com", "flags": "i", "rules": ["PID", "clickid", "irgwc", "cid", "acid", "linkTrack"] },
55
+ { "name": "itch.io", "match": "itch.io", "flags": "i", "rules": ["fbclid"] },
56
+ { "name": "microsoft.com", "match": "microsoft.com", "flags": "i", "rules": ["refd", "icid"] },
57
+ { "name": "berrybase.de", "match": "berrybase.de", "flags": "i", "rules": ["sPartner"] },
58
+ { "name": "instagram.com", "match": "instagram.com", "flags": "i", "rules": ["igshid", "igsh", "source"] },
59
+ { "name": "hubspot.com", "match": "hubspot.com", "flags": "i", "rules": ["hubs_content-cta", "hubs_content"] },
60
+ { "name": "ebay.com", "match": "^(?:https?:\\/\\/)?(?:[^.]+\\.)?ebay\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["amdata", "var", "hash", "_trkparms", "_trksid", "_from", "mkcid", "mkrid", "campid", "toolid", "mkevt", "customid", "siteid", "ufes_redirect", "ff3", "pub", "media", "widget_ver", "ssspo", "sssrc", "ssuid"], "allow": ["epid", "_nkw"] },
61
+ { "name": "shopee.com", "match": "^(?:https?:\\/\\/)?(?:[^.]+\\.)?shopee\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["af_siteid", "pid", "af_click_lookback", "af_viewthrough_lookback", "is_retargeting", "af_reengagement_window", "af_sub_siteid", "c"] },
62
+ { "name": "msn.com", "match": "www.msn.com", "flags": "i", "rules": ["ocid", "cvid", "pc"] },
63
+ { "name": "nuuvem.com", "match": "www.nuuvem.com", "flags": "i", "rules": ["ranMID", "ranEAID", "ranSiteID"] },
64
+ { "name": "linksynergy.com", "match": ".*.linksynergy.com", "flags": "i", "rules": ["id", "mid"] },
65
+ { "name": "cnbc.com", "match": "www.cnbc.com", "flags": "i", "rules": ["__source"] },
66
+ { "name": "yahoo.com", "match": "yahoo.com", "flags": "i", "rules": ["guce_referrer", "guce_referrer_sig", "guccounter", "soc_src", "soc_trk", "tsrc"] },
67
+ { "name": "techcrunch.com", "match": "techcrunch.com", "flags": "i", "rules": ["guce_referrer", "guce_referrer_sig", "guccounter"] },
68
+ { "name": "office.com", "match": "office.com", "flags": "i", "rules": ["from"] },
69
+ { "name": "ticketmaster.co.nz", "match": "ticketmaster.co.nz", "flags": "i", "rules": ["tm_link"] },
70
+ { "name": "bostonglobe.com", "match": "bostonglobe.com", "flags": "i", "rules": ["p1"] },
71
+ { "name": "ampproject.org", "match": "cdn.ampproject.org", "flags": "i", "rules": ["amp_gsa", "amp_js_v", "usqp", "outputType"] },
72
+ { "name": "nbcnews.com", "match": "nbcnews.com", "flags": "i", "rules": ["fbclid"] },
73
+ { "name": "countdown.co.nz", "match": "www.countdown.co.nz", "flags": "i", "rules": ["promo_name", "promo_creative", "promo_position", "itemID"] },
74
+ { "name": "etsy.com", "match": "www.etsy.com", "flags": "i", "rules": ["click_key", "click_sum", "rec_type", "ref", "frs", "sts", "dd_referrer"] },
75
+ { "name": "wattpad.com", "match": "www.wattpad.com", "flags": "i", "rules": ["wp_page", "wp_uname", "wp_originator"] },
76
+ { "name": "noctre.com", "match": "www.noctre.com", "flags": "i", "rules": ["aff"] },
77
+ { "name": "dreamgame.com", "match": "www.dreamgame.com", "flags": "i", "rules": ["affiliate"] },
78
+ { "name": "startpage.com", "match": ".*.startpage.com", "flags": "i", "rules": ["source"] },
79
+ { "name": "2game.com", "match": "^2game.com", "flags": "i", "rules": ["ref"] },
80
+ { "name": "gamesplanet.com", "match": "^(?:.*\\.|)gamesplanet\\.com", "flags": "i", "rules": ["ref"] },
81
+ { "name": "gamersgate.com", "match": "www.gamersgate.com", "flags": "i", "rules": ["aff"] },
82
+ { "name": "ranker.com", "match": "^(www|blog).ranker.com", "flags": "i", "rules": ["ref", "rlf", "l", "li_source", "li_medium"] },
83
+ { "name": "watchworthy.app", "match": "^watchworthy.app", "flags": "i", "rules": ["ref"] },
84
+ { "name": "squarespace.com", "match": "^.*.squarespace.com", "flags": "i", "rules": ["subchannel", "source", "subcampaign", "campaign", "channel", "_ga"] },
85
+ { "name": "baidu.com", "match": "^www.baidu.com", "flags": "i", "rules": ["rsv_spt", "rsv_idx", "rsv_pq", "rsv_t", "rsv_bp", "rsv_dl", "rsv_iqid", "rsv_enter", "rsv_sug1", "rsv_sug2", "rsv_sug3", "rsv_sug4", "rsv_sug5", "rsv_sug6", "rsv_sug7", "rsv_sug8", "rsv_sug9", "rsv_sug7", "rsv_btype", "tn", "sa", "rsf", "rqid", "usm", "__pc2ps_ab", "p_signature", "p_sign", "p_timestamp", "p_tk", "oq"], "allow": ["wd", "ie"] },
86
+ { "name": "primevideo.com", "match": "^www.primevideo.com", "flags": "i", "rules": ["dclid"] },
87
+ { "name": "threadless.com", "match": "^www.threadless.com", "flags": "i", "rules": ["itm_source_s", "itm_medium_s", "itm_campaign_s"] },
88
+ { "name": "wsj.com", "match": "^www.wsj.com", "flags": "i", "rules": ["mod"] },
89
+ { "name": "thewarehouse.co.nz", "match": "^www.thewarehouse.co.nz", "flags": "i", "rules": ["sfmc_j", "sfmc_id", "sfmc_mid", "sfmc_uid", "sfmc_id", "sfmc_activityid"] },
90
+ { "name": "ko-fi.com", "match": "^ko-fi.com", "flags": "i", "rules": ["ref", "src"] },
91
+ { "name": "indiegala.com", "match": "^www.indiegala.com", "flags": "i", "rules": ["ref"] },
92
+ { "name": "transparency.fb.com", "match": "^transparency.fb.com", "flags": "i", "rules": ["source"] },
93
+ { "name": "manymorestores.com", "match": "^www.manymorestores.com", "flags": "i", "rules": ["ref"] },
94
+ { "name": "macgamestore.com", "match": "^www.macgamestore.com", "flags": "i", "rules": ["ars"] },
95
+ { "name": "blizzardgearstore.com", "match": "^www.blizzardgearstore.com", "flags": "i", "rules": ["_s"] },
96
+ { "name": "playbook.com", "match": "^www.playbook.com", "flags": "i", "rules": ["p"] },
97
+ { "name": "cookiepro.com", "match": "^.*.cookiepro.com", "flags": "i", "rules": ["source", "referral"] },
98
+ { "name": "pinterest.com", "match": "^www\\.pinterest\\..*", "flags": "i", "rules": ["rs"] },
99
+ { "name": "bing.com", "match": "^www\\.bing\\.com", "flags": "i", "rules": ["qs", "form", "sp", "pq", "sc", "sk", "cvid", "FORM", "ck", "simid", "thid", "cdnurl", "pivotparams", "ghsh", "ghacc", "ccid", "", "ru"], "allow": ["q", "tsc", "iss", "id", "view", "setlang"] },
100
+ { "name": "jf79.net", "match": "^jf79\\.net", "flags": "i", "rules": ["li", "wi", "ws", "ws2"] },
101
+ { "name": "frankenergie.nl", "match": "^www\\.frankenergie\\.nl", "flags": "i", "rules": ["aff_id"] },
102
+ { "name": "nova.cz", "match": "^.*\\.nova\\.cz", "flags": "i", "rules": ["sznclid"] },
103
+ { "name": "cnn.com", "match": ".*.cnn.com", "flags": "i", "rules": ["hpt", "iid"], "exclude": [{ "match": "e.newsletters.cnn.com", "flags": "i" }] },
104
+ { "name": "justwatch.com", "match": "click\\.justwatch\\.com", "flags": "i", "rules": ["cx", "uct_country", "uct_buybox", "sid"] },
105
+ { "name": "psychologytoday.com", "match": "www\\.psychologytoday\\.com", "flags": "i", "rules": ["amp"] },
106
+ { "name": "mouser.com", "match": "www\\.mouser\\.com", "flags": "i", "rules": ["qs"] },
107
+ { "name": "awin1.com", "match": "www\\.awin1\\.com", "flags": "i", "rules": ["awinmid", "awinaffid", "clickref"] },
108
+ { "name": "castorama.fr", "match": "www\\.castorama\\.fr", "flags": "i", "rules": ["syte_ref"] },
109
+ { "name": "quizlet.com", "match": "quizlet\\.com", "flags": "i", "rules": ["funnelUUID", "source"] },
110
+ { "name": "pbtech.co.nz", "match": "www\\.pbtech\\.co\\.nz", "flags": "i", "rules": ["qr"] },
111
+ { "name": "matomo.org", "match": "matomo\\.org", "flags": "i", "rules": ["menu", "footer", "header", "hp-reasons-learn", "hp-top", "above-fold", "step1-hp", "mid-hp", "take-back-control-hp", "hp-reasons-icon", "hp-reasons-heading", "hp-reasons-p", "hp-bottom", "footer", "menu"] },
112
+ { "name": "eufy.com", "match": "eufy\\.com", "flags": "i", "rules": ["ref"] },
113
+ { "name": "newsflare.com", "match": "www\\.newsflare\\.com", "flags": "i", "rules": ["jwsource"] },
114
+ { "name": "wish.com", "match": "www\\.wish\\.com", "flags": "i", "rules": ["share"] },
115
+ { "name": "change.org", "match": "www\\.change\\.org", "flags": "i", "rules": ["source_location"] },
116
+ { "name": "washingtonpost.com", "match": ".*\\.washingtonpost\\.com", "flags": "i", "rules": ["itid", "s_l"] },
117
+ { "name": "lowes.com", "match": "www\\.lowes\\.com", "flags": "i", "rules": ["cm_mmc", "ds_rl", "gbraid"] },
118
+ { "name": "stacks.wellcomecollection.org", "match": "stacks\\.wellcomecollection\\.org", "flags": "i", "rules": ["source"] },
119
+ { "name": "redbubble.com", "match": ".*\\.redbubble\\.com", "flags": "i", "rules": ["ref"] },
120
+ { "name": "inyourarea.co.uk", "match": "inyourarea.co.uk", "flags": "i", "rules": ["from_reach_primary_nav", "from_reach_footer_nav", "branding"] },
121
+ { "name": "fiverr.com", "match": ".*\\.fiverr\\.com", "flags": "i", "rules": ["source", "context_referrer", "referrer_gig_slug", "ref_ctx_id", "funnel", "imp_id"] },
122
+ { "name": "kqzyfj.com", "match": "www\\.kqzyfj\\.com", "flags": "i", "rules": ["cjsku", "pubdata"] },
123
+ { "name": "marca.com", "match": ".*\\.marca\\.com", "flags": "i", "rules": ["intcmp", "s_kw", "emk"] },
124
+ { "name": "marcaentradas.com", "match": ".*\\.marcaentradas\\.com", "flags": "i", "rules": ["intcmp", "s_kw"] },
125
+ { "name": "honeycode.aws", "match": ".*\\.honeycode\\.aws", "flags": "i", "rules": ["trackingId", "sc_icampaign", "sc_icontent", "sc_ichannel", "sc_iplace", "sc_country", "sc_outcome", "sc_geo", "sc_campaign", "sc_channel", "trkCampaign", "trk"] },
126
+ { "name": "studentbeans.com", "match": "www\\.studentbeans\\.com", "flags": "i", "rules": ["source"] },
127
+ { "name": "boxofficemojo.com", "match": "boxofficemojo.com", "flags": "i", "rules": ["ref_"] },
128
+ { "name": "solodeportes.com.ar", "match": "www.solodeportes.com.ar", "flags": "i", "rules": ["nosto", "refSrc"] },
129
+ { "name": "joybuggy.com", "match": "joybuggy.com", "flags": "i", "rules": ["ref"] },
130
+ { "name": "etail.market", "match": "etail.market", "flags": "i", "rules": ["tracking"] },
131
+ { "name": "myanimelist.net", "match": "myanimelist.net", "flags": "i", "rules": ["_location", "click_type", "click_param"] },
132
+ { "name": "support-dev.discord.com", "match": "support-dev.discord.com", "flags": "i", "rules": ["ref"] },
133
+ { "name": "dlgamer.com", "match": "dlgamer.com", "flags": "i", "rules": ["affil"] },
134
+ { "name": "newsletter.manor.ch", "match": "newsletter.manor.ch", "flags": "i", "rules": ["user_id_1"] },
135
+ { "name": "producthunt.com", "match": "producthunt.com", "flags": "i", "rules": ["ref"] },
136
+ { "name": "cbsnews.com", "match": "www.cbsnews.com", "flags": "i", "rules": ["ftag", "intcid"] },
137
+ { "name": "jobs.venturebeat.com", "match": "jobs.venturebeat.com", "flags": "i", "rules": ["source"] },
138
+ { "name": "wfaa.com", "match": "www.wfaa.com", "flags": "i", "rules": ["ref"] },
139
+ { "name": "buyatoyota.com", "match": "www.buyatoyota.com", "flags": "i", "rules": ["siteid"] },
140
+ { "name": "independent.co.uk", "match": "www.independent.co.uk", "flags": "i", "rules": ["amp", "regSourceMethod"] },
141
+ { "name": "cooking.nytimes.com", "match": "cooking.nytimes.com", "flags": "i", "rules": ["smid", "variant", "algo", "req_id", "surface", "imp_id", "action", "region", "module", "pgType"] },
142
+ { "name": "optigruen.com", "match": "www\\.optigruen\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["cHash", "chash", "mdrv"] },
143
+ { "name": "osi.rosenberger.com", "match": "osi.rosenberger.com", "flags": "i", "rules": ["cHash", "chash"] },
144
+ { "name": "cbc.ca", "match": "cbc.ca", "flags": "i", "rules": ["__vfz", "cmp", "referrer"] },
145
+ { "name": "local12.com", "match": "local12.com", "flags": "i", "rules": ["_gl"] },
146
+ { "name": "eufylife.com", "match": "eufylife.com", "flags": "i", "rules": ["ref"] },
147
+ { "name": "walmart.com", "match": "walmart.com", "flags": "i", "rules": ["athAsset", "povid", "wmlspartner", "athcpid", "athpgid", "athznid", "athmtid", "athstid", "athguid", "athwpid", "athtvid", "athcgid", "athieid", "athancid", "athbdg", "campaign_id", "eventST", "bt", "pos", "rdf", "tax", "plmt", "mloc", "pltfm", "pgId", "pt", "spQs", "adUid", "adsRedirect"] },
148
+ { "name": "dyno.gg", "match": "dyno.gg", "flags": "i", "rules": ["ref"] },
149
+ { "name": "eufylife.com", "match": "eufylife.com", "flags": "i", "rules": ["ref"] },
150
+ { "name": "connect.studentbeans.com", "match": "connect.studentbeans.com", "flags": "i", "rules": ["ref"] },
151
+ { "name": "s.pemsrv.com", "match": "s.pemsrv.com", "flags": "i", "rules": ["cat", "idzone", "type", "sub", "block", "el", "tags", "cookieconsent", "scr_info"] },
152
+ { "name": "chess.com", "match": "www.chess.com", "flags": "i", "rules": ["c"] },
153
+ { "name": "porndude.link", "match": "porndude.link", "flags": "i", "rules": ["ref"] },
154
+ { "name": "xvideos.com", "match": "xvideos.com", "flags": "i", "rules": ["sxcaf"] },
155
+ { "name": "xvideos.red", "match": "xvideos.red", "flags": "i", "rules": ["sxcaf", "pmsc", "pmln"] },
156
+ { "name": "xhamster.com", "match": "xhamster.com", "flags": "i", "rules": ["source"] },
157
+ { "name": "milkrun.com", "match": "milkrun.com", "flags": "i", "rules": ["_branch_match_id", "_branch_referrer"] },
158
+ { "name": "gog.salesmanago.com", "match": "gog.salesmanago.com", "flags": "i", "rules": ["smclient", "smconv", "smlid"] },
159
+ { "name": "dailymail.co.uk", "match": "dailymail.co.uk", "flags": "i", "rules": ["reg_source", "ito"] },
160
+ { "name": "hashnode.com", "match": "(?:.*\\.)?hashnode\\.com", "flags": "i", "rules": ["source"] },
161
+ { "name": "s.amazon-adsystem.com", "match": "s.amazon-adsystem.com", "flags": "i", "rules": ["dsig", "d", "ex-fch", "ex-fargs", "cb"] },
162
+ { "name": "theguardian.com", "match": "theguardian.com", "flags": "i", "rules": ["INTCMP", "acquisitionData", "REFPVID"] },
163
+ { "name": "seek.co.nz", "match": "www.seek.co.nz", "flags": "i", "rules": ["tracking", "sc_trk"] },
164
+ { "name": "seekvolunteer.co.nz", "match": "seekvolunteer.co.nz", "flags": "i", "rules": ["tracking", "sc_trk"] },
165
+ { "name": "seekbusiness.com.au", "match": "www.seekbusiness.com.au", "flags": "i", "rules": ["tracking", "cid"] },
166
+ { "name": "garageclothing.com", "match": "www.garageclothing.com", "flags": "i", "rules": ["syte_ref", "site_ref"] },
167
+ { "name": "urbandictionary.com", "match": "urbandictionary.com", "flags": "i", "rules": ["amp"] },
168
+ { "name": "norml.org", "match": "norml.org", "flags": "i", "rules": ["amp"] },
169
+ { "name": "nbcconnecticut.com", "match": "www.nbcconnecticut.com", "flags": "i", "rules": ["amp"] },
170
+ { "name": "ladysmithchronicle.com", "match": "www.ladysmithchronicle.com", "flags": "i", "rules": ["ref"] },
171
+ { "name": "m10news.com", "match": "m10news.com", "flags": "i", "rules": ["amp"] },
172
+ { "name": "libretro.com", "match": "www.libretro.com", "flags": "i", "rules": ["amp"] },
173
+ { "name": "bostonherald.com", "match": "bostonherald.com", "flags": "i", "rules": ["g2i_source", "g2i_medium", "g2i_campaign"] },
174
+ { "name": "playshoptitans.com", "match": "playshoptitans.com", "flags": "i", "rules": ["af_ad", "pid", "source_caller", "shortlink", "c"] },
175
+ { "name": "news.com.au", "match": "www.news.com.au", "flags": "i", "rules": ["sourceCode"] },
176
+ { "name": "wvva.com", "match": "www.wvva.com", "flags": "i", "rules": ["outputType"] },
177
+ { "name": "realestate.com.au", "match": "www.realestate.com.au", "flags": "i", "rules": ["campaignType", "campaignChannel", "campaignName", "campaignContent", "campaignSource", "campaignPlacement", "sourcePage", "sourceElement", "cid"] },
178
+ { "name": "redirectingat.com", "match": "redirectingat.com", "flags": "i", "rules": ["id", "xcust", "xs"] },
179
+ { "name": "map.sewoon.org", "match": "map.sewoon.org", "flags": "i", "rules": ["cid"] },
180
+ { "name": "vi-control.net", "match": "[&?]source=https:\\/\\/vi-control\\.net\\/community$", "flags": "", "matchHref": true, "rules": ["source"] },
181
+ { "name": "rosequake.com", "match": "www.rosequake.com", "flags": "i", "rules": ["edmID", "linkID", "userID", "em", "taskItemID"] },
182
+ { "name": "rekrute.com", "match": "www.rekrute.com", "flags": "i", "rules": ["clear"] },
183
+ { "name": "go.skimresources.com", "match": "go.skimresources.com", "flags": "i", "rules": ["id", "xs", "xcust"] },
184
+ { "name": "khnum-ezi.com", "match": "khnum-ezi.com", "flags": "i", "rules": ["browserWidth", "browserHeight", "iframeDetected", "webdriverDetected", "gpu", "timezone", "visitid", "type", "timezoneName"] },
185
+ { "name": "theatlantic.com", "match": "(?:www|accounts)\\.theatlantic\\.com", "flags": "i", "rules": ["source", "referral"] },
186
+ { "name": "rumble.com", "match": "rumble.com", "flags": "i", "rules": ["e9s"] },
187
+ { "name": "cointiply.com", "match": "cointiply.com", "flags": "i", "rules": ["source_cta"] },
188
+ { "name": "dev.to", "match": "dev.to", "flags": "", "rules": ["t", "s", "u"] },
189
+ { "name": "milda-clq.com", "match": "milda-clq.com", "flags": "", "rules": ["visitid", "type", "browserWidth", "browserHeight", "webdriverDetected", "timezone", "gpu", "iframeDetected", "timezoneName"] },
190
+ { "name": "app.message.asce", "match": ".*.app\\.message\\.asce\\.org", "flags": "i", "rules": [], "allow": ["elq"] },
191
+ ];
192
+ //# sourceMappingURL=tidy-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tidy-rules.js","sourceRoot":"","sources":["../../../src/universal/url/tidy-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Vendors the tracking-parameter ruleset from @protontech/tidy-url (Proton's
4
+ * maintained fork of DrKain/tidy-url, MIT) into ./tidy-rules.ts. Same pattern
5
+ * as currency's download-crypto-list.ts: dataset knowledge is community-
6
+ * maintained upstream; we vendor a snapshot instead of taking a runtime dep.
7
+ *
8
+ * Only the param-stripping fields are carried over (name, match, match_href,
9
+ * rules, allow, exclude). Upstream's redirect-unwrapping, AMP, and base64-
10
+ * decode features are out of scope — providers that ONLY do those are dropped.
11
+ *
12
+ * Usage: pnpm update-url-rules
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=update-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-rules.d.ts","sourceRoot":"","sources":["../../../src/universal/url/update-rules.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Vendors the tracking-parameter ruleset from @protontech/tidy-url (Proton's
4
+ * maintained fork of DrKain/tidy-url, MIT) into ./tidy-rules.ts. Same pattern
5
+ * as currency's download-crypto-list.ts: dataset knowledge is community-
6
+ * maintained upstream; we vendor a snapshot instead of taking a runtime dep.
7
+ *
8
+ * Only the param-stripping fields are carried over (name, match, match_href,
9
+ * rules, allow, exclude). Upstream's redirect-unwrapping, AMP, and base64-
10
+ * decode features are out of scope — providers that ONLY do those are dropped.
11
+ *
12
+ * Usage: pnpm update-url-rules
13
+ */
14
+ import { execSync } from "node:child_process";
15
+ import { mkdtempSync, readFileSync, writeFileSync } from "node:fs";
16
+ import { createRequire } from "node:module";
17
+ import { tmpdir } from "node:os";
18
+ import { dirname, join } from "node:path";
19
+ import { fileURLToPath } from "node:url";
20
+ const OUT = join(dirname(fileURLToPath(import.meta.url)), "tidy-rules.ts");
21
+ const PACKAGE = "@protontech/tidy-url";
22
+ function fetchUpstream() {
23
+ const dir = mkdtempSync(join(tmpdir(), "tidy-url-"));
24
+ console.log(`Packing ${PACKAGE}@latest ...`);
25
+ const tarball = execSync(`npm pack ${PACKAGE}@latest --pack-destination ${JSON.stringify(dir)}`, {
26
+ encoding: "utf8",
27
+ })
28
+ .trim()
29
+ .split("\n")
30
+ .at(-1);
31
+ if (!tarball)
32
+ throw new Error("npm pack produced no tarball name");
33
+ execSync(`tar xzf ${JSON.stringify(join(dir, tarball))} -C ${JSON.stringify(dir)}`);
34
+ const pkg = JSON.parse(readFileSync(join(dir, "package/package.json"), "utf8"));
35
+ // data/rules.js is CommonJS (`module.exports = [...]`) with RegExp literals;
36
+ // requiring it yields real RegExp objects — no parsing of our own.
37
+ const rules = createRequire(import.meta.url)(join(dir, "package/data/rules.js"));
38
+ const copyright = readFileSync(join(dir, "package/LICENSE"), "utf8")
39
+ .split("\n")
40
+ .find((l) => l.startsWith("Copyright"));
41
+ if (!Array.isArray(rules) || rules.length === 0)
42
+ throw new Error("upstream rules did not load");
43
+ if (pkg.license !== "MIT")
44
+ throw new Error(`upstream license changed to ${pkg.license} — review before vendoring`);
45
+ return { rules, version: pkg.version, license: `${pkg.license} — ${copyright ?? ""}`.trim() };
46
+ }
47
+ /** A regex serialized for the generated file; `g`/`y` are dropped (statefulness). */
48
+ function serializeRegex(re) {
49
+ return { match: re.source, flags: re.flags.replace(/[gy]/g, "") };
50
+ }
51
+ function assertStrings(list, where) {
52
+ for (const item of list) {
53
+ if (typeof item !== "string")
54
+ throw new Error(`non-string entry in ${where}: ${JSON.stringify(item)}`);
55
+ }
56
+ return list;
57
+ }
58
+ function generate() {
59
+ const { rules, version, license } = fetchUpstream();
60
+ const kept = rules
61
+ .filter((r) => (r.rules?.length ?? 0) > 0 || (r.allow?.length ?? 0) > 0)
62
+ .map((r) => {
63
+ if (typeof r.name !== "string" || !(r.match instanceof RegExp)) {
64
+ throw new Error(`malformed provider: ${JSON.stringify(r.name)}`);
65
+ }
66
+ return {
67
+ name: r.name,
68
+ ...serializeRegex(r.match),
69
+ ...(r.match_href === true ? { matchHref: true } : {}),
70
+ rules: assertStrings(r.rules ?? [], r.name),
71
+ ...(r.allow?.length ? { allow: assertStrings(r.allow, `${r.name}.allow`) } : {}),
72
+ ...(r.exclude?.length ? { exclude: r.exclude.map(serializeRegex) } : {}),
73
+ };
74
+ });
75
+ const dropped = rules.length - kept.length;
76
+ const body = kept.map((p) => `\t${JSON.stringify(p)},`).join("\n");
77
+ const file = `// GENERATED FILE — do not edit; refresh with \`pnpm update-url-rules\`.
78
+ //
79
+ // Tracking-parameter ruleset vendored from ${PACKAGE}@${version} (data/rules.js),
80
+ // Proton's maintained fork of https://github.com/DrKain/tidy-url.
81
+ // Upstream license: ${license}
82
+ //
83
+ // Carried fields: the host matcher (match/flags; tested against the URL host,
84
+ // or the full href when matchHref), the param names to strip (rules), params
85
+ // protected from any rule (allow), and URL patterns that opt a URL out of the
86
+ // provider (exclude). Upstream's redirect/AMP/decode features are out of scope;
87
+ // ${dropped} providers that only did those were dropped (${kept.length} kept).
88
+ // Generated ${new Date().toISOString().slice(0, 10)}.
89
+
90
+ export interface TrackingProvider {
91
+ name: string;
92
+ /** Host-matcher regex source; tested against the URL host (href when matchHref). */
93
+ match: string;
94
+ flags: string;
95
+ matchHref?: boolean;
96
+ /** Param names to strip (compared lowercased). */
97
+ rules: readonly string[];
98
+ /** Param names protected from ANY rule on this provider's URLs. */
99
+ allow?: readonly string[];
100
+ /** URL patterns that opt a URL out of this provider entirely. */
101
+ exclude?: readonly { match: string; flags: string }[];
102
+ }
103
+
104
+ export const TIDY_VERSION = ${JSON.stringify(version)};
105
+
106
+ export const TIDY_RULES: readonly TrackingProvider[] = [
107
+ ${body}
108
+ ];
109
+ `;
110
+ writeFileSync(OUT, file);
111
+ console.log(`Wrote ${kept.length} providers (${dropped} dropped) from ${PACKAGE}@${version} → ${OUT}`);
112
+ }
113
+ generate();
114
+ //# sourceMappingURL=update-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-rules.js","sourceRoot":"","sources":["../../../src/universal/url/update-rules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adriangalilea/utils",
3
- "version": "2.8.0",
3
+ "version": "2.10.0",
4
4
  "description": "TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -24,6 +24,10 @@
24
24
  "types": "./dist/universal/format.d.ts",
25
25
  "default": "./dist/universal/format.js"
26
26
  },
27
+ "./url": {
28
+ "types": "./dist/universal/url/index.d.ts",
29
+ "default": "./dist/universal/url/index.js"
30
+ },
27
31
  "./log": {
28
32
  "types": "./dist/universal/log.d.ts",
29
33
  "default": "./dist/universal/log.js"
@@ -169,6 +173,7 @@
169
173
  "test:browser": "open tests/browser-test.html",
170
174
  "example": "tsx tests/example.ts",
171
175
  "update-crypto": "tsx src/universal/currency/download-crypto-list.ts",
176
+ "update-url-rules": "tsx src/universal/url/update-rules.ts",
172
177
  "type-check": "tsc --noEmit",
173
178
  "lint": "biome lint",
174
179
  "format": "biome format",
@@ -184,7 +189,9 @@
184
189
  "test:user": "tsx tests/user-test.ts",
185
190
  "test:language-picker": "tsx tests/language-picker-test.ts",
186
191
  "test:llm": "tsx tests/llm-live-test.ts",
187
- "test:tg-md": "tsx tests/tg-md-test.ts"
192
+ "test:tg-md": "tsx tests/tg-md-test.ts",
193
+ "test:self-echo": "tsx tests/self-echo-test.ts",
194
+ "test:url": "tsx tests/url-test.ts"
188
195
  },
189
196
  "keywords": [
190
197
  "typescript",