@jant/core 0.5.3 → 0.6.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/bin/commands/telegram/register-webhooks.js +93 -0
- package/dist/{app-C481ssbr.js → app-BIkkbVQk.js} +2252 -383
- package/dist/app-Bcr5_wZI.js +6 -0
- package/dist/client/.vite/manifest.json +3 -3
- package/dist/client/_assets/client-Bo7sKkAQ.js +274 -0
- package/dist/client/_assets/client-QHRvzZwk.css +2 -0
- package/dist/client/_assets/{client-auth-CfBiCAB7.js → client-auth-D1jDQgbH.js} +49 -49
- package/dist/{env-CgaH9Mut.js → env-C7e2Nlnt.js} +30 -1
- package/dist/{export-CR9Megtb.js → export-Bbn86HmS.js} +1 -1
- package/dist/{github-sync-DYZq9rQp.js → github-sync-CBQPRZ8H.js} +1 -1
- package/dist/{github-sync-8Vv06aCr.js → github-sync-dXsiZa_e.js} +2 -2
- package/dist/index.js +4 -4
- package/dist/node.js +61 -5
- package/package.json +2 -1
- package/src/__tests__/helpers/app.ts +15 -2
- package/src/app.tsx +3 -0
- package/src/client/components/jant-compose-editor.ts +72 -0
- package/src/client/thread-context.ts +146 -2
- package/src/client/tiptap/__tests__/link-toolbar.test.ts +1 -1
- package/src/client/tiptap/bubble-menu.ts +1 -16
- package/src/client/tiptap/extensions.ts +2 -6
- package/src/client/tiptap/link-toolbar.ts +0 -21
- package/src/client/tiptap/paste-media.ts +49 -33
- package/src/client/tiptap/toolbar-mode.ts +0 -43
- package/src/client/video-processor.ts +9 -0
- package/src/db/migrations/0022_old_gressill.sql +24 -0
- package/src/db/migrations/0023_broad_terror.sql +20 -0
- package/src/db/migrations/0024_red_the_twelve.sql +3 -0
- package/src/db/migrations/0025_exotic_wendell_rand.sql +1 -0
- package/src/db/migrations/meta/0022_snapshot.json +2267 -0
- package/src/db/migrations/meta/0023_snapshot.json +2396 -0
- package/src/db/migrations/meta/0024_snapshot.json +2417 -0
- package/src/db/migrations/meta/0025_snapshot.json +2424 -0
- package/src/db/migrations/meta/_journal.json +28 -0
- package/src/db/migrations/pg/0020_bizarre_smasher.sql +24 -0
- package/src/db/migrations/pg/0021_sharp_puppet_master.sql +20 -0
- package/src/db/migrations/pg/0022_blushing_blue_shield.sql +3 -0
- package/src/db/migrations/pg/0023_organic_zemo.sql +1 -0
- package/src/db/migrations/pg/meta/0020_snapshot.json +2904 -0
- package/src/db/migrations/pg/meta/0021_snapshot.json +3060 -0
- package/src/db/migrations/pg/meta/0022_snapshot.json +3078 -0
- package/src/db/migrations/pg/meta/0023_snapshot.json +3084 -0
- package/src/db/migrations/pg/meta/_journal.json +28 -0
- package/src/db/pg/schema.ts +82 -0
- package/src/db/schema.ts +90 -0
- package/src/i18n/coverage.generated.ts +2 -2
- package/src/i18n/locales/public/en.po +8 -0
- package/src/i18n/locales/public/zh-Hans.po +8 -0
- package/src/i18n/locales/public/zh-Hant.po +8 -0
- package/src/i18n/locales/settings/en.po +135 -0
- package/src/i18n/locales/settings/en.ts +1 -1
- package/src/i18n/locales/settings/zh-Hans.po +136 -1
- package/src/i18n/locales/settings/zh-Hans.ts +1 -1
- package/src/i18n/locales/settings/zh-Hant.po +136 -1
- package/src/i18n/locales/settings/zh-Hant.ts +1 -1
- package/src/lib/__tests__/image-dimensions.test.ts +314 -0
- package/src/lib/__tests__/mp4-track-flags.test.ts +117 -0
- package/src/lib/__tests__/telegram-entities.test.ts +180 -0
- package/src/lib/__tests__/telegram-pool-webhooks.test.ts +127 -0
- package/src/lib/env.ts +45 -0
- package/src/lib/ids.ts +3 -0
- package/src/lib/image-dimensions.ts +258 -0
- package/src/lib/mp4-track-flags.ts +71 -0
- package/src/lib/telegram-entities.ts +240 -0
- package/src/lib/telegram-pool-webhooks.ts +86 -0
- package/src/lib/telegram-settings-status.tsx +109 -0
- package/src/lib/telegram.ts +363 -0
- package/src/node/runtime.ts +6 -0
- package/src/routes/api/__tests__/telegram.test.ts +612 -0
- package/src/routes/api/telegram.ts +782 -0
- package/src/routes/api/upload-multipart.ts +34 -12
- package/src/routes/api/upload.ts +23 -2
- package/src/routes/dash/settings.tsx +131 -1
- package/src/routes/pages/__tests__/post-page-title.test.ts +70 -0
- package/src/routes/pages/page.tsx +3 -2
- package/src/runtime/cloudflare.ts +20 -9
- package/src/runtime/node.ts +20 -9
- package/src/runtime/site.ts +2 -1
- package/src/services/__tests__/telegram.test.ts +148 -0
- package/src/services/index.ts +9 -0
- package/src/services/telegram.ts +613 -0
- package/src/services/upload-session.ts +39 -12
- package/src/styles/tokens.css +1 -0
- package/src/styles/ui.css +134 -38
- package/src/types/app-context.ts +6 -0
- package/src/types/bindings.ts +3 -0
- package/src/types/config.ts +40 -0
- package/src/ui/dash/settings/SettingsRootContent.tsx +48 -17
- package/src/ui/dash/settings/TelegramContent.tsx +549 -0
- package/src/ui/feed/ThreadPreview.tsx +91 -38
- package/src/ui/feed/__tests__/thread-preview.test.ts +67 -5
- package/src/ui/pages/PostPage.tsx +78 -15
- package/dist/app-BgMwEN-M.js +0 -6
- package/dist/client/_assets/client-CJQYvkEx.js +0 -274
- package/dist/client/_assets/client-CQvi1Buw.css +0 -2
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
import { autoloadNodeEnv } from "../../lib/node-env.js";
|
|
3
|
+
|
|
4
|
+
const TELEGRAM_API_BASE = "https://api.telegram.org";
|
|
5
|
+
|
|
6
|
+
async function callTelegram(token, method, body) {
|
|
7
|
+
const response = await fetch(`${TELEGRAM_API_BASE}/bot${token}/${method}`, {
|
|
8
|
+
method: "POST",
|
|
9
|
+
headers: { "content-type": "application/json" },
|
|
10
|
+
body: JSON.stringify(body ?? {}),
|
|
11
|
+
});
|
|
12
|
+
const payload = await response.json();
|
|
13
|
+
if (!payload.ok) {
|
|
14
|
+
throw new Error(payload.description ?? `Telegram ${method} failed`);
|
|
15
|
+
}
|
|
16
|
+
return payload.result;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function run(argv) {
|
|
20
|
+
const { values } = parseArgs({
|
|
21
|
+
args: argv,
|
|
22
|
+
options: {
|
|
23
|
+
"base-url": { type: "string" },
|
|
24
|
+
help: { type: "boolean", short: "h" },
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (values.help || !values["base-url"]) {
|
|
29
|
+
console.log(
|
|
30
|
+
"Usage: jant telegram register-webhooks --base-url <public-url>",
|
|
31
|
+
);
|
|
32
|
+
console.log("");
|
|
33
|
+
console.log(
|
|
34
|
+
"Registers a webhook for every bot in TELEGRAM_BOT_TOKENS, pointing at",
|
|
35
|
+
);
|
|
36
|
+
console.log("<base-url>/api/telegram/webhook/<bot_id> with the shared");
|
|
37
|
+
console.log("TELEGRAM_WEBHOOK_SECRET. Run once after configuring the pool.");
|
|
38
|
+
console.log("");
|
|
39
|
+
console.log("Environment (also read from .env.node):");
|
|
40
|
+
console.log(" TELEGRAM_BOT_TOKENS Comma-separated <bot_id>:<secret> tokens");
|
|
41
|
+
console.log(" TELEGRAM_WEBHOOK_SECRET Shared secret_token for the webhooks");
|
|
42
|
+
process.exit(values.help ? 0 : 1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
autoloadNodeEnv();
|
|
46
|
+
|
|
47
|
+
const rawTokens = process.env.TELEGRAM_BOT_TOKENS ?? "";
|
|
48
|
+
const secret = process.env.TELEGRAM_WEBHOOK_SECRET ?? "";
|
|
49
|
+
if (!rawTokens.trim()) {
|
|
50
|
+
console.error("TELEGRAM_BOT_TOKENS is not set.");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
if (!secret.trim()) {
|
|
54
|
+
console.error("TELEGRAM_WEBHOOK_SECRET is not set.");
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const baseUrl = values["base-url"].replace(/\/+$/, "");
|
|
59
|
+
const tokens = rawTokens
|
|
60
|
+
.split(",")
|
|
61
|
+
.map((entry) => entry.trim())
|
|
62
|
+
.filter((entry) => entry.length > 0);
|
|
63
|
+
|
|
64
|
+
let failures = 0;
|
|
65
|
+
for (const token of tokens) {
|
|
66
|
+
const botId = token.split(":")[0]?.trim() ?? "";
|
|
67
|
+
if (!/^\d+$/.test(botId)) {
|
|
68
|
+
console.error(`Skipping malformed token (no numeric bot id).`);
|
|
69
|
+
failures += 1;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const webhookUrl = `${baseUrl}/api/telegram/webhook/${botId}`;
|
|
73
|
+
try {
|
|
74
|
+
const identity = await callTelegram(token, "getMe");
|
|
75
|
+
await callTelegram(token, "setWebhook", {
|
|
76
|
+
url: webhookUrl,
|
|
77
|
+
secret_token: secret,
|
|
78
|
+
allowed_updates: ["message", "callback_query"],
|
|
79
|
+
});
|
|
80
|
+
console.log(`@${identity.username} (${botId}) -> ${webhookUrl}`);
|
|
81
|
+
} catch (err) {
|
|
82
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
83
|
+
console.error(`Bot ${botId} failed: ${detail}`);
|
|
84
|
+
failures += 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (failures > 0) {
|
|
89
|
+
console.error(`${failures} bot(s) failed to register.`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
console.log(`Registered ${tokens.length} webhook(s).`);
|
|
93
|
+
}
|