@adriangalilea/utils 7.1.0 → 8.0.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 +13 -23
- package/dist/bot/access-control.d.ts +89 -31
- package/dist/bot/access-control.d.ts.map +1 -1
- package/dist/bot/access-control.js +10 -28
- package/dist/bot/access-control.js.map +1 -1
- package/dist/bot/callbacks.d.ts +0 -13
- package/dist/bot/callbacks.d.ts.map +1 -1
- package/dist/bot/callbacks.js +0 -16
- package/dist/bot/callbacks.js.map +1 -1
- package/dist/bot/kit.d.ts +4 -9
- package/dist/bot/kit.d.ts.map +1 -1
- package/dist/bot/kit.js +0 -1
- package/dist/bot/kit.js.map +1 -1
- package/dist/bot/lang.d.ts +46 -0
- package/dist/bot/lang.d.ts.map +1 -0
- package/dist/bot/lang.js +29 -0
- package/dist/bot/lang.js.map +1 -0
- package/dist/bot/language.d.ts +0 -2
- package/dist/bot/language.d.ts.map +1 -1
- package/dist/bot/language.js +0 -12
- package/dist/bot/language.js.map +1 -1
- package/dist/bot/llm.d.ts +1 -2
- package/dist/bot/llm.d.ts.map +1 -1
- package/dist/bot/llm.js +1 -2
- package/dist/bot/llm.js.map +1 -1
- package/dist/bot/menu.d.ts +7 -0
- package/dist/bot/menu.d.ts.map +1 -1
- package/dist/bot/menu.js +8 -2
- package/dist/bot/menu.js.map +1 -1
- package/dist/bot/payments/callbacks.d.ts +1 -1
- package/dist/bot/payments/callbacks.d.ts.map +1 -1
- package/dist/bot/payments/callbacks.js +9 -11
- package/dist/bot/payments/callbacks.js.map +1 -1
- package/dist/bot/payments/commands.d.ts +1 -1
- package/dist/bot/payments/commands.d.ts.map +1 -1
- package/dist/bot/payments/commands.js +2 -2
- package/dist/bot/payments/commands.js.map +1 -1
- package/dist/bot/payments/derive.d.ts.map +1 -1
- package/dist/bot/payments/derive.js +7 -6
- package/dist/bot/payments/derive.js.map +1 -1
- package/dist/bot/payments/handlers.d.ts +1 -5
- package/dist/bot/payments/handlers.d.ts.map +1 -1
- package/dist/bot/payments/handlers.js +1 -2
- package/dist/bot/payments/handlers.js.map +1 -1
- package/dist/bot/payments/invoice.d.ts.map +1 -1
- package/dist/bot/payments/invoice.js +1 -2
- package/dist/bot/payments/invoice.js.map +1 -1
- package/dist/bot/payments/menu-item.d.ts.map +1 -1
- package/dist/bot/payments/menu-item.js +2 -2
- package/dist/bot/payments/menu-item.js.map +1 -1
- package/dist/bot/payments/payouts.d.ts +3 -3
- package/dist/bot/payments/payouts.js +3 -3
- package/dist/bot/payments/plugin.d.ts +87 -29
- package/dist/bot/payments/plugin.d.ts.map +1 -1
- package/dist/bot/payments/refund.d.ts +1 -5
- package/dist/bot/payments/refund.d.ts.map +1 -1
- package/dist/bot/payments/refund.js +6 -32
- package/dist/bot/payments/refund.js.map +1 -1
- package/dist/bot/payments/types.d.ts +2 -9
- package/dist/bot/payments/types.d.ts.map +1 -1
- package/dist/bot/payments/types.js +0 -7
- package/dist/bot/payments/types.js.map +1 -1
- package/dist/bot/payments/waiver.d.ts +1 -17
- package/dist/bot/payments/waiver.d.ts.map +1 -1
- package/dist/bot/payments/waiver.js +2 -30
- package/dist/bot/payments/waiver.js.map +1 -1
- package/dist/bot/reactions.d.ts +0 -2
- package/dist/bot/reactions.d.ts.map +1 -1
- package/dist/bot/reactions.js +0 -16
- package/dist/bot/reactions.js.map +1 -1
- package/dist/bot/session.d.ts +1 -21
- package/dist/bot/session.d.ts.map +1 -1
- package/dist/bot/session.js +1 -29
- package/dist/bot/session.js.map +1 -1
- package/dist/bot/storage.d.ts +1 -1
- package/dist/bot/storage.js +1 -1
- package/dist/bot/worker.d.ts.map +1 -1
- package/dist/bot/worker.js +1 -4
- package/dist/bot/worker.js.map +1 -1
- package/dist/cli/text.d.ts.map +1 -1
- package/dist/cli/text.js +2 -3
- package/dist/cli/text.js.map +1 -1
- package/dist/llm/index.js +5 -5
- package/dist/llm/index.js.map +1 -1
- package/dist/runtime.d.ts +0 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +0 -17
- package/dist/runtime.js.map +1 -1
- package/dist/tg-html/index.d.ts +11 -4
- package/dist/tg-html/index.d.ts.map +1 -1
- package/dist/tg-html/index.js +13 -8
- package/dist/tg-html/index.js.map +1 -1
- package/dist/tg-md/index.d.ts +6 -6
- package/dist/tg-md/index.d.ts.map +1 -1
- package/dist/tg-md/index.js +9 -19
- package/dist/tg-md/index.js.map +1 -1
- package/dist/universal/time.d.ts +11 -2
- package/dist/universal/time.d.ts.map +1 -1
- package/dist/universal/time.js +22 -2
- package/dist/universal/time.js.map +1 -1
- package/package.json +9 -15
- package/dist/bot/index.d.ts +0 -31
- package/dist/bot/index.d.ts.map +0 -1
- package/dist/bot/index.js +0 -31
- package/dist/bot/index.js.map +0 -1
- package/dist/universal/currency/download-crypto-list.d.ts +0 -10
- package/dist/universal/currency/download-crypto-list.d.ts.map +0 -1
- package/dist/universal/currency/download-crypto-list.js +0 -69
- package/dist/universal/currency/download-crypto-list.js.map +0 -1
- package/dist/universal/url/update-rules.d.ts +0 -15
- package/dist/universal/url/update-rules.d.ts.map +0 -1
- package/dist/universal/url/update-rules.js +0 -122
- package/dist/universal/url/update-rules.js.map +0 -1
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-rules.d.ts","sourceRoot":"","sources":["../../../src/universal/url/update-rules.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
|
@@ -1,122 +0,0 @@
|
|
|
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 {
|
|
46
|
-
rules,
|
|
47
|
-
version: pkg.version,
|
|
48
|
-
license: `${pkg.license} — ${copyright ?? ""}`.trim(),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/** A regex serialized for the generated file; `g`/`y` are dropped (statefulness). */
|
|
52
|
-
function serializeRegex(re) {
|
|
53
|
-
return { match: re.source, flags: re.flags.replace(/[gy]/g, "") };
|
|
54
|
-
}
|
|
55
|
-
function assertStrings(list, where) {
|
|
56
|
-
for (const item of list) {
|
|
57
|
-
if (typeof item !== "string")
|
|
58
|
-
throw new Error(`non-string entry in ${where}: ${JSON.stringify(item)}`);
|
|
59
|
-
}
|
|
60
|
-
return list;
|
|
61
|
-
}
|
|
62
|
-
function generate() {
|
|
63
|
-
const { rules, version, license } = fetchUpstream();
|
|
64
|
-
const kept = rules
|
|
65
|
-
.filter((r) => (r.rules?.length ?? 0) > 0 || (r.allow?.length ?? 0) > 0)
|
|
66
|
-
.map((r) => {
|
|
67
|
-
if (typeof r.name !== "string" || !(r.match instanceof RegExp)) {
|
|
68
|
-
throw new Error(`malformed provider: ${JSON.stringify(r.name)}`);
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
name: r.name,
|
|
72
|
-
...serializeRegex(r.match),
|
|
73
|
-
...(r.match_href === true ? { matchHref: true } : {}),
|
|
74
|
-
rules: assertStrings(r.rules ?? [], r.name),
|
|
75
|
-
...(r.allow?.length
|
|
76
|
-
? { allow: assertStrings(r.allow, `${r.name}.allow`) }
|
|
77
|
-
: {}),
|
|
78
|
-
...(r.exclude?.length
|
|
79
|
-
? { exclude: r.exclude.map(serializeRegex) }
|
|
80
|
-
: {}),
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
const dropped = rules.length - kept.length;
|
|
84
|
-
const body = kept.map((p) => `\t${JSON.stringify(p)},`).join("\n");
|
|
85
|
-
const file = `// GENERATED FILE — do not edit; refresh with \`pnpm update-url-rules\`.
|
|
86
|
-
//
|
|
87
|
-
// Tracking-parameter ruleset vendored from ${PACKAGE}@${version} (data/rules.js),
|
|
88
|
-
// Proton's maintained fork of https://github.com/DrKain/tidy-url.
|
|
89
|
-
// Upstream license: ${license}
|
|
90
|
-
//
|
|
91
|
-
// Carried fields: the host matcher (match/flags; tested against the URL host,
|
|
92
|
-
// or the full href when matchHref), the param names to strip (rules), params
|
|
93
|
-
// protected from any rule (allow), and URL patterns that opt a URL out of the
|
|
94
|
-
// provider (exclude). Upstream's redirect/AMP/decode features are out of scope;
|
|
95
|
-
// ${dropped} providers that only did those were dropped (${kept.length} kept).
|
|
96
|
-
// Generated ${new Date().toISOString().slice(0, 10)}.
|
|
97
|
-
|
|
98
|
-
export interface TrackingProvider {
|
|
99
|
-
name: string;
|
|
100
|
-
/** Host-matcher regex source; tested against the URL host (href when matchHref). */
|
|
101
|
-
match: string;
|
|
102
|
-
flags: string;
|
|
103
|
-
matchHref?: boolean;
|
|
104
|
-
/** Param names to strip (compared lowercased). */
|
|
105
|
-
rules: readonly string[];
|
|
106
|
-
/** Param names protected from ANY rule on this provider's URLs. */
|
|
107
|
-
allow?: readonly string[];
|
|
108
|
-
/** URL patterns that opt a URL out of this provider entirely. */
|
|
109
|
-
exclude?: readonly { match: string; flags: string }[];
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export const TIDY_VERSION = ${JSON.stringify(version)};
|
|
113
|
-
|
|
114
|
-
export const TIDY_RULES: readonly TrackingProvider[] = [
|
|
115
|
-
${body}
|
|
116
|
-
];
|
|
117
|
-
`;
|
|
118
|
-
writeFileSync(OUT, file);
|
|
119
|
-
console.log(`Wrote ${kept.length} providers (${dropped} dropped) from ${PACKAGE}@${version} → ${OUT}`);
|
|
120
|
-
}
|
|
121
|
-
generate();
|
|
122
|
-
//# sourceMappingURL=update-rules.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-rules.js","sourceRoot":"","sources":["../../../src/universal/url/update-rules.ts"],"names":[],"mappings":"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"}
|