@adriangalilea/utils 1.1.0 → 1.3.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
@@ -359,6 +359,17 @@ await ctx.say.edit({ en: 'Done', es: 'Listo' }) // → ctx.editText (callback
359
359
  await ctx.say.answer({ en: 'OK', es: 'OK' }) // → ctx.answer (callback only)
360
360
  ```
361
361
 
362
+ ### Telegram HTML (`tg-html`)
363
+
364
+ Transform arbitrary (LLM-emitted) HTML into Telegram-compatible `parse_mode=HTML` with opinionated, consistent spacing. Telegram's HTML subset has no headings, lists, or block layout — send it `<h1>`/`<ul>` and the API rejects the whole message. `transform()` accepts the HTML a model naturally writes and renders the structure typographically: `h1` → bold+underline + blank line, `h2…h6` → bold + blank line, `ul/li` → `• ` bullets, blocks get blank lines, blockquotes keep their internal line breaks, allowed tags pass through with attributes filtered, unknown tags drop their markup (content kept), and stray `<`/`>` escape instead of vanishing. Zero dependencies, no DOM, Worker-safe. Successor of the standalone `tghtml` package (jsr, archived).
365
+
366
+ ```typescript
367
+ import { transform } from '@adriangalilea/utils/tg-html'
368
+
369
+ transform('<h1>Title</h1><ul><li>Point one</li><li>Point two</li></ul>')
370
+ // '<b><u>Title</u></b>\n\n• Point one\n• Point two'
371
+ ```
372
+
362
373
  ### Telegram bot plugins (GramIO)
363
374
 
364
375
  Plugins for personal Telegram bots built on [GramIO](https://gramio.dev). Each plugin lives at its own subpath; peer deps (`gramio`, `@gramio/storage`, `@gramio/session`, `@gramio/format`, `marked`) are **all optional** — install only what you import.
@@ -434,7 +445,7 @@ Then `pnpm install`. Every `ctx.send` / `ctx.sendDocument` / `ctx.reply` / etc.
434
445
  | `@adriangalilea/utils/bot/coalesce` | Joins client-split inbound messages back into one. When a user pastes >4096 chars, Telegram clients fragment it into separate `message` updates with no marker. Middleware detects the burst and emits one combined event. |
435
446
  | `@adriangalilea/utils/bot/llm` | The full LLM-chatbot pipeline in one module. **Input:** `streamChat(response)` parses OpenAI-compatible SSE (OpenAI, vllm, mlx-lm, llama.cpp, Together, Groq, …) into a typed `AsyncGenerator<{type: 'content' \| 'reasoning', text}>`. **Output:** `ctx.startStream()` (low-level: debounced markdown to Telegram, 4000-char split, exposes `wasPartial` after `.end()`). `ctx.startChatStream(response)` (high-level: consumes the stream, renders reasoning as a Telegram `expandable_blockquote` entity + content as streamed markdown — both go through `markdownToFormattable` with graceful degradation — returns `{ content, reasoning }`). **History:** `llmHistory({...})` returns `.plugin` (decorates `ctx.llm` with `.add() / .get() / .clear() / .all() / .clearAll()`, per-(user, thread) OpenAI `ChatMessage` shape, persisted in the shared session record so the menu's 🗑 Forget wipes it automatically) AND `.menuItem` (drop-in "🗑 Delete this thread" for `botMenu` — wipes the LLM history AND calls `deleteForumTopic` so the Telegram thread + all its messages disappear from the chat; falls back to Redis-only clear when no `threadId` is present). |
436
447
  | `@adriangalilea/utils/bot/menu` | `botMenu({ command, description, items, privacy?, personalData?, adminContact })` — `/settings` command + InlineKeyboard router. Root view always renders a `🛡️ Privacy & data` submenu button that wraps the privacy policy link plus (if `personalData: { storage }`) 🗑 Forget + 📥 Export buttons. Items take `keepRow` (render on the same row as the next item — e.g. a two-per-row language picker) and `rootExtra` (render at the bottom of the root menu, below Privacy & data). `label` / `header` / `style` / `visible` resolvers may be **async** (read your db at render time — never cache render strings in the session); `parseMode: 'HTML'` renders the header formatted (you own escaping); `personalData.onForget(ctx, userId)` wipes YOUR tables inside the same try as the session delete, so Forget either forgets everything or reports failure. `toggleMenuItem({ id, read, write, label: { off, on }, toast? })` — convenience factory for boolean-toggle items with dynamic label + optional toast, storage-agnostic via `read`/`write` closures. |
437
- | `@adriangalilea/utils/bot/payments` | `botPayments({ session, storage, paysupport, paysupportHint?, legal, waiver, vip?, credits?, perks? })` — Telegram Stars monetization in one drop-in plugin. **Three axes, all optional:** `vip` (positional tier ladder — single rung in v1 is just `vip: [{...}]`, ladder is `vip: [{...}, {...}]`; ids are `vip.1`, `vip.2`, …), `credits` (consumable balance + top-up packs `credits.1`, `credits.2`, …), `perks` (orthogonal one-shot unlocks `perks.<key>`). **Surface:** `ctx.payments.atLeast('vip')` / `atLeast('vip.2')` (typed rank check), `ctx.payments.tier()` / `.tier.level()` / `.tier.label()`, `ctx.payments.credits.{balance, consume, tryConsume}` (throws `InsufficientCredits`), `ctx.payments.has(perkId)`, `await ctx.payments.require('vip', { feature? })` (gate that sends a localized upgrade prompt deep-linked to `/settings → 💎 VIP`), `await ctx.payments.invoice(productKey)` (threads Art. 103(m) TRLGDCU consent inline before `sendInvoice`). **Owns:** waiver consent flow (versioned text → forces re-consent on bump, snapshotted on every charge for audit), `/paysupport` slash command (Telegram ToS §6.5; `paysupportHint` overrides the where-to-manage-charges line when your menu isn't `/settings`), idempotent `successful_payment` fulfillment via `pay:idempotency:{chargeId}` sentinel, lazy subscription expiry (no cron needed), tier upgrade auto-cancel of the lower rung's renewal, and admin-DM refund approval (mirror of `accessControl`'s [✅ Aprobar][❌ Denegar] pattern). **Returns:** `{ plugin, menuItem, payouts, onFulfilled }` — `menuItem` is the drop-in `💎 VIP` entry for `botMenu`; `payouts.{record, list, export, exportForUsers}` is the Fragment payout ledger (you receive TON, log the EUR conversion, export time-windowed CSV/JSON for your gestor); `onFulfilled(productKey \| '*', handler)` registers fire-and-forget hooks. **Stars-only by design** — Telegram ToS §6.2 forbids third-party payment providers for digital goods. Crypto Pay deferred (MiCA risk); Stripe-outside-Telegram is a future v2 channel. Full compliance memo (Spanish-autónomo seller-of-record analysis, Verifactu vs Crea y Crece, MiCA, Art. 103(m) waiver text, GDPR retention) in `src/bot/payments/CLAUDE.md`. |
448
+ | `@adriangalilea/utils/bot/payments` | `botPayments({ session, storage, paysupport, paysupportHint?, legal, waiver, vip?, credits?, perks? })` — Telegram Stars monetization in one drop-in plugin. **Three axes, all optional:** `vip` (positional tier ladder — single rung in v1 is just `vip: [{...}]`, ladder is `vip: [{...}, {...}]`; ids are `vip.1`, `vip.2`, …), `credits` (consumable balance + top-up packs `credits.1`, `credits.2`, …), `perks` (orthogonal one-shot unlocks `perks.<key>`). **Surface:** `ctx.payments.atLeast('vip')` / `atLeast('vip.2')` (typed rank check), `ctx.payments.tier()` / `.tier.level()` / `.tier.label()`, `ctx.payments.credits.{balance, consume, tryConsume}` (throws `InsufficientCredits`), `ctx.payments.has(perkId)`, `await ctx.payments.require('vip', { feature? })` (gate that sends a localized upgrade prompt deep-linked to `/settings → 💎 VIP`), `await ctx.payments.invoice(productKey)` (threads Art. 103(m) TRLGDCU consent inline before `sendInvoice`). **Owns:** waiver consent flow (versioned text → forces re-consent on bump, snapshotted on every charge for audit), `/paysupport` slash command (Telegram ToS §6.5; `paysupportHint` overrides the where-to-manage-charges line when your menu isn't `/settings`), idempotent `successful_payment` fulfillment via `pay:idempotency:{chargeId}` sentinel, lazy subscription expiry (no cron needed), tier upgrade auto-cancel of the lower rung's renewal, and admin-DM refund approval (mirror of `accessControl`'s [✅ Aprobar][❌ Denegar] pattern). **Returns:** `{ plugin, menuItem, payouts, onFulfilled }` — `menuItem` is the drop-in `💎 VIP` entry for `botMenu`; `payouts.{record, list, export, exportForUsers}` is the Fragment payout ledger (you receive TON, log the EUR conversion, export time-windowed CSV/JSON for your gestor); `onFulfilled(productKey \| '*', handler)` / `onRefunded(...)` register fire-and-forget hooks (purchase applied / admin-approved refund — a revenue ledger writes on one, reverses on the other). **Stars-only by design** — Telegram ToS §6.2 forbids third-party payment providers for digital goods. Crypto Pay deferred (MiCA risk); Stripe-outside-Telegram is a future v2 channel. Full compliance memo (Spanish-autónomo seller-of-record analysis, Verifactu vs Crea y Crece, MiCA, Art. 103(m) waiver text, GDPR retention) in `src/bot/payments/CLAUDE.md`. |
438
449
  | `@adriangalilea/utils/bot/create` | `createBot<S>({ token?, storage?, initial?, admins?, language?, menu?, access?, payments?, handlers?, worker? })` — the composer (see "One bot file, ideation → production" above). Returns `{ build, session, poll, isMain, fetch }`: `poll()` long-polls, `export default app` is a complete Worker, `app.session(ctx)` / the `handlers` callback's `session(ctx)` is the TYPED accessor for your `S` fields. Owns storage+session wiring; resolves storage per environment (D1 binding → `bot/storage-d1`; `BOT_PERSIST` path → sqlite, `redis://` → redis, lazily-imported optional peers; else announced-ephemeral memory) — or pass `storage: (env) => Storage` when the choice is env-dependent (e.g. a D1 binding not named `DB`). Boot NARRATES the composition (`session: memory …`, `features: language(en,es) · menu(/settings)`) so every implicit decision is visible where you're looking. Runnable demo: `pnpm demo:bot`. |
439
450
  | `@adriangalilea/utils/bot/worker` | `botWorkerFetch(resolve)` — the Cloudflare Worker cap: secret-checked webhook (ack fast, work + storage flush ride `ctx.waitUntil`, errors DM admins throttled), `POST /setup` (webhook registration with handler-derived `allowed_updates` + a commit-narrating 🚀 deploy DM from the request body), `POST /deploy-started` (the 🛳 "what is shipping" DM — curl it from your deploy script on the still-live version, body `{sha, author, message, etaSeconds?}`), operator-authed `/pause` `/resume` `/webhook-status` (+ `statusExtra`), and a `routes` escape hatch tried before the built-ins. Structural bot type — no workers-types dependency. |
440
451
  | `@adriangalilea/utils/bot/storage-d1` | `d1Storage({ db, table? })` — `@gramio/storage` adapter over a D1 `session` table (schema in the module doc). `flush()` matters: the session plugin writes un-awaited and workerd freezes the isolate the instant `fetch()` returns — hand `flush` to `bot/worker` (automatic via `createBot`) so writes survive. |
@@ -12,6 +12,6 @@
12
12
  export type { ExportInput, ExportResult, PayoutsApi, RecordPayoutInput, } from "./payouts.js";
13
13
  export type { BotPaymentsOptions, BotPaymentsResult, PaymentsCtx, } from "./plugin.js";
14
14
  export { botPayments } from "./plugin.js";
15
- export type { AtLeastKey, BotPaymentsConfig, ChargeRecord, CreditsConfig, CreditsPack, DerivedPaymentsState, FulfillmentEvent, LegalConfig, PaymentsSession, PayoutRecord, PaysupportState, Perk, PerkState, PerksConfig, ProductKey, SubscriptionPeriod, TierKey, VipRung, VipState, WaiverConfig, WaiverRecord, } from "./types.js";
15
+ export type { AtLeastKey, BotPaymentsConfig, ChargeRecord, CreditsConfig, CreditsPack, DerivedPaymentsState, FulfillmentEvent, LegalConfig, PaymentsSession, PayoutRecord, PaysupportState, Perk, PerkState, PerksConfig, ProductKey, RefundEvent, SubscriptionPeriod, TierKey, VipRung, VipState, WaiverConfig, WaiverRecord, } from "./types.js";
16
16
  export { InsufficientCredits } from "./types.js";
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACX,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,SAAS,EACT,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACX,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bot/payments/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bot/payments/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -31,7 +31,7 @@ import { type PaymentsDerived } from "./derive.js";
31
31
  import { buildPaymentsMenuItem } from "./menu-item.js";
32
32
  import { type PayoutsApi } from "./payouts.js";
33
33
  import { type PaymentsStores } from "./stores.js";
34
- import type { AtLeastKey, BotPaymentsConfig, ChargeRecord, FulfillmentEvent, ProductKey, SessionLike, TierKey } from "./types.js";
34
+ import type { AtLeastKey, BotPaymentsConfig, ChargeRecord, FulfillmentEvent, ProductKey, RefundEvent, SessionLike, TierKey } from "./types.js";
35
35
  type PaySessionPluginRef = ReturnType<typeof session<SessionLike, "session">>;
36
36
  type TierFn<Cfg extends BotPaymentsConfig<string>> = (() => TierKey<Cfg>) & {
37
37
  level: () => number;
@@ -87,6 +87,7 @@ export type BotPaymentsResult<Cfg extends BotPaymentsConfig<string>> = {
87
87
  payouts: PayoutsApi;
88
88
  admin: PaymentsAdmin;
89
89
  onFulfilled: (productKey: ProductKey<Cfg> | "*", handler: (event: FulfillmentEvent, ctx: unknown) => void) => void;
90
+ onRefunded: (productKey: ProductKey<Cfg> | "*", handler: (event: RefundEvent, ctx: unknown) => void) => void;
90
91
  };
91
92
  export type BotPaymentsOptions<Cfg extends BotPaymentsConfig<string>> = Cfg & {
92
93
  /** Shared session plugin. Required — see CLAUDE.md §"Storage layout". */
@@ -104,6 +105,7 @@ declare const buildPlugin: (args: {
104
105
  storage: Storage;
105
106
  stores: PaymentsStores;
106
107
  onFulfilledMap: Map<string, Array<(event: FulfillmentEvent, ctx: unknown) => void>>;
108
+ onRefundedMap: Map<string, Array<(event: RefundEvent, ctx: unknown) => void>>;
107
109
  }) => Plugin<Record<string, never>, DeriveDefinitions & {
108
110
  global: {
109
111
  payments: PaymentsCtx<BotPaymentsConfig<string>>;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/plugin.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,7 @@ import { buildStores } from "./stores.js";
38
38
  import { waiverCancelCb, waiverConsentCb } from "./waiver.js";
39
39
  // ─── plugin assembly ───────────────────────────────────────────────
40
40
  const buildPlugin = (args) => {
41
- const { cfg, catalog, sessionPlugin, storage, stores, onFulfilledMap } = args;
41
+ const { cfg, catalog, sessionPlugin, storage, stores, onFulfilledMap, onRefundedMap, } = args;
42
42
  const paymentsDerive = buildPaymentsDerive({ cfg, catalog });
43
43
  // handler factories (all bodies live in their concern files)
44
44
  const successfulPaymentHandler = buildSuccessfulPaymentHandler({
@@ -49,17 +49,16 @@ const buildPlugin = (args) => {
49
49
  onFulfilled: onFulfilledMap,
50
50
  });
51
51
  const preCheckoutHandler = buildPreCheckoutHandler(catalog);
52
- const refundApproveHandler = buildRefundApproveHandler({
52
+ // Shared by the three refund handlers; only approve fires onRefunded.
53
+ const refundOpts = {
53
54
  stores,
54
55
  storage,
55
56
  cfg,
56
- });
57
- const refundDenyHandler = buildRefundDenyHandler({ stores, storage, cfg });
58
- const refundRequestHandler = buildRefundRequestHandler({
59
- stores,
60
- storage,
61
- cfg,
62
- });
57
+ onRefunded: onRefundedMap,
58
+ };
59
+ const refundApproveHandler = buildRefundApproveHandler(refundOpts);
60
+ const refundDenyHandler = buildRefundDenyHandler(refundOpts);
61
+ const refundRequestHandler = buildRefundRequestHandler(refundOpts);
63
62
  const waiverConsentHandler = buildWaiverConsentHandler({ cfg, catalog });
64
63
  const waiverCancelHandler = buildWaiverCancelHandler();
65
64
  const refundCloseHandler = buildRefundCloseHandler();
@@ -110,6 +109,7 @@ export const botPayments = (opts) => {
110
109
  const catalog = buildCatalog(cfg);
111
110
  const stores = buildStores(storage);
112
111
  const onFulfilledMap = new Map();
112
+ const onRefundedMap = new Map();
113
113
  const plugin = buildPlugin({
114
114
  cfg,
115
115
  catalog,
@@ -117,6 +117,7 @@ export const botPayments = (opts) => {
117
117
  storage,
118
118
  stores,
119
119
  onFulfilledMap,
120
+ onRefundedMap,
120
121
  });
121
122
  const menuItem = buildPaymentsMenuItem({ cfg, catalog });
122
123
  const payouts = buildPayoutsApi(stores);
@@ -139,6 +140,17 @@ export const botPayments = (opts) => {
139
140
  arr.push(handler);
140
141
  onFulfilledMap.set(productKey, arr);
141
142
  };
142
- return { plugin, menuItem, payouts, admin, onFulfilled };
143
+ const onRefunded = (productKey, handler) => {
144
+ if (typeof productKey !== "string" || productKey.length === 0) {
145
+ panic("bot/payments: onRefunded productKey must be a non-empty string");
146
+ }
147
+ if (typeof handler !== "function") {
148
+ panic("bot/payments: onRefunded handler must be a function");
149
+ }
150
+ const arr = onRefundedMap.get(productKey) ?? [];
151
+ arr.push(handler);
152
+ onRefundedMap.set(productKey, arr);
153
+ };
154
+ return { plugin, menuItem, payouts, admin, onFulfilled, onRefunded };
143
155
  };
144
156
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/bot/payments/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/bot/payments/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAA0B,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAwB,MAAM,aAAa,CAAC;AACxE,OAAO,EACN,uBAAuB,EACvB,6BAA6B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAmB,MAAM,cAAc,CAAC;AAChE,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAuB,MAAM,aAAa,CAAC;AAW/D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyF9D,sEAAsE;AAEtE,MAAM,WAAW,GAAG,CAAC,IAWpB,EAAE,EAAE;IACJ,MAAM,EACL,GAAG,EACH,OAAO,EACP,aAAa,EACb,OAAO,EACP,MAAM,EACN,cAAc,EACd,aAAa,GACb,GAAG,IAAI,CAAC;IAIT,MAAM,cAAc,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAE7D,6DAA6D;IAC7D,MAAM,wBAAwB,GAAG,6BAA6B,CAAC;QAC9D,MAAM;QACN,GAAG;QACH,OAAO;QACP,yEAAyE;QACzE,WAAW,EAAE,cAGZ;KACD,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC5D,sEAAsE;IACtE,MAAM,UAAU,GAAG;QAClB,MAAM;QACN,OAAO;QACP,GAAG;QACH,UAAU,EAAE,aAGX;KACD,CAAC;IACF,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,MAAM,mBAAmB,GAAG,wBAAwB,EAAE,CAAC;IACvD,MAAM,kBAAkB,GAAG,uBAAuB,EAAE,CAAC;IACrD,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAEtD,OAAO,CACN,IAAI,MAAM,CAGR,mCAAmC,EAAE;QACtC,YAAY,EAAE,CAAC,gCAAgC,CAAC;KAChD,CAAC;QACD,8DAA8D;QAC9D,yDAAyD;SACxD,MAAM,CAAC,aAAa,CAAC;QACtB,gEAAgE;QAChE,kEAAkE;QAClE,iEAAiE;QACjE,yDAAyD;SACxD,MAAM,CACN,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,CAAC,EACrE,cAA4D,CAC5D;QACD,sDAAsD;SACrD,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,kBAAkB,CACvB,MAAM,CAA2C,GAAG,CAAC,CACrD,CAAC;QACF,MAAM,IAAI,EAAE,CAAC;IACd,CAAC,CAAC;QACF,+DAA+D;QAC/D,6DAA6D;QAC7D,4CAA4C;SAC3C,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,wBAAwB,CAC7B,MAAM,CAAiD,GAAG,CAAC,CAC3D,CAAC;QACF,MAAM,IAAI,EAAE,CAAC;IACd,CAAC,CAAC;QACF,6DAA6D;SAC5D,aAAa,CAAC,eAAe,EAAE,oBAAoB,CAAC;SACpD,aAAa,CAAC,cAAc,EAAE,mBAAmB,CAAC;QACnD,6DAA6D;SAC5D,aAAa,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,CAAC,GAAG,MAAM,CAA6C,GAAG,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC;SACD,aAAa,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAC7C,oBAAoB,CACnB,MAAM,CAA6C,GAAG,CAAC,CACvD,CACD;SACA,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAC1C,iBAAiB,CAAC,MAAM,CAA0C,GAAG,CAAC,CAAC,CACvE;SACA,aAAa,CAAC,aAAa,EAAE,kBAAkB,CAAC;QACjD,8CAA8C;SAC7C,OAAO,CACP,YAAY,EACZ,EAAE,WAAW,EAAE,6BAA6B,EAAE,EAC9C,iBAAiB,CACjB,CACF,CAAC;AACH,CAAC,CAAC;AAEF,sEAAsE;AAEtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAC1B,IAA6B,EACJ,EAAE;IAC3B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAsB,CAAC;IAEnC,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;IACJ,MAAM,aAAa,GAAG,IAAI,GAAG,EAG1B,CAAC;IAEJ,MAAM,MAAM,GAAG,WAAW,CAAC;QAC1B,GAAG;QACH,OAAO;QACP,aAAa;QACb,OAAO;QACP,MAAM;QACN,cAAc;QACd,aAAa;KACb,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAkB;QAC5B,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAC5C,CAAC;YACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAC3E,CAAC;QACD,SAAS,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;KAC/D,CAAC;IAEF,MAAM,WAAW,GAA0C,CAC1D,UAAU,EACV,OAAO,EACN,EAAE;QACH,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClB,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAyC,CACxD,UAAU,EACV,OAAO,EACN,EAAE;QACH,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClB,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACtE,CAAC,CAAC"}
@@ -27,7 +27,7 @@
27
27
  import type { Storage } from "@gramio/storage";
28
28
  import type { BotCallbackCtx } from "../ctx.js";
29
29
  import type { PaymentsStores } from "./stores.js";
30
- import type { BotPaymentsConfig, PaymentsSession } from "./types.js";
30
+ import type { BotPaymentsConfig, PaymentsSession, RefundEvent } from "./types.js";
31
31
  /** User tap on a charge entry — opens confirmation overlay then admin DM. */
32
32
  export declare const refundRequestCb: import("gramio").CallbackData<{
33
33
  cid: string;
@@ -92,6 +92,12 @@ export type RefundHandlersOptions = {
92
92
  */
93
93
  storage: Storage;
94
94
  cfg: BotPaymentsConfig<string>;
95
+ /**
96
+ * `onRefunded` registrations, keyed by productKey (plus the `"*"`
97
+ * catch-all). Fired fire-and-forget after an approved refund — the
98
+ * mirror of `onFulfilled`.
99
+ */
100
+ onRefunded: ReadonlyMap<string, ReadonlyArray<(event: RefundEvent, ctx: unknown) => void>>;
95
101
  };
96
102
  /**
97
103
  * User taps "💸 Request refund" on a charge entry inside the menu's
@@ -1 +1 @@
1
- {"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/refund.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACX,iBAAiB,EAEjB,eAAe,EACf,MAAM,YAAY,CAAC;AASpB,6EAA6E;AAC7E,eAAO,MAAM,eAAe;;;;OAA+C,CAAC;AAC5E,kDAAkD;AAClD,eAAO,MAAM,eAAe;;;;OAA+C,CAAC;AAC5E,+CAA+C;AAC/C,eAAO,MAAM,YAAY;;;;OAA4C,CAAC;AACtE,4DAA4D;AAC5D,eAAO,MAAM,aAAa,iDAA8B,CAAC;AAIzD,oDAAoD;AACpD,KAAK,YAAY,GAAG;IACnB,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,0BAA0B,EAAE,MAAM,CAAC;KACnC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,wBAAwB,EAAE,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,0BAA0B,EAAE,MAAM,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC;KACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,OAAO,CAAC;KACvB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE;;;;;GAKG;AACH,KAAK,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,CAAC,GAAG;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAqIF,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,qBAAqB,MAE3B,KAAK,SAAS,GAAG;IAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAC7C,OAAO,CAAC,MAAM,GAAG,SAAS,CA8D5B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,qBAAqB,MACrB,KAAK,SAAS,GAAG;IAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAiGpE,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,qBAAqB,MACrB,KAAK,SAAS,GAAG;IAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAyCpE,CAAC"}
1
+ {"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/refund.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACX,iBAAiB,EAEjB,eAAe,EACf,WAAW,EACX,MAAM,YAAY,CAAC;AASpB,6EAA6E;AAC7E,eAAO,MAAM,eAAe;;;;OAA+C,CAAC;AAC5E,kDAAkD;AAClD,eAAO,MAAM,eAAe;;;;OAA+C,CAAC;AAC5E,+CAA+C;AAC/C,eAAO,MAAM,YAAY;;;;OAA4C,CAAC;AACtE,4DAA4D;AAC5D,eAAO,MAAM,aAAa,iDAA8B,CAAC;AAIzD,oDAAoD;AACpD,KAAK,YAAY,GAAG;IACnB,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,0BAA0B,EAAE,MAAM,CAAC;KACnC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,wBAAwB,EAAE,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,0BAA0B,EAAE,MAAM,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC;KACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,OAAO,CAAC;KACvB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE;;;;;GAKG;AACH,KAAK,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,CAAC,GAAG;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAqIF,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;OAIG;IACH,UAAU,EAAE,WAAW,CACtB,MAAM,EACN,aAAa,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC,CACzD,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,qBAAqB,MAE3B,KAAK,SAAS,GAAG;IAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAC7C,OAAO,CAAC,MAAM,GAAG,SAAS,CA8D5B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,qBAAqB,MACrB,KAAK,SAAS,GAAG;IAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAuHpE,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,qBAAqB,MACrB,KAAK,SAAS,GAAG;IAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAyCpE,CAAC"}
@@ -240,6 +240,29 @@ export const buildRefundApproveHandler = (opts) => async (ctx) => {
240
240
  charge.refundedAt = Date.now();
241
241
  await opts.stores.charges.set(ctx, charge.chargeId, charge);
242
242
  await applyRefundToUser(opts.stores, opts.storage, ctx, charge.userId, charge);
243
+ // Fire onRefunded hooks (fire-and-forget, mirror of onFulfilled)
244
+ const refundEvent = {
245
+ productKey: charge.productKey,
246
+ userId: charge.userId,
247
+ chargeId: charge.chargeId,
248
+ xtr: charge.xtr,
249
+ refundedAt: charge.refundedAt,
250
+ };
251
+ const fireBucket = (key) => {
252
+ const arr = opts.onRefunded.get(key);
253
+ if (!arr)
254
+ return;
255
+ for (const fn of arr) {
256
+ try {
257
+ fn(refundEvent, ctx);
258
+ }
259
+ catch (e) {
260
+ log.error(`onRefunded handler for "${key}" threw: ${e}`);
261
+ }
262
+ }
263
+ };
264
+ fireBucket(charge.productKey);
265
+ fireBucket("*");
243
266
  // User notification
244
267
  const userFull = await loadFullRecord(opts.storage, ctx, charge.userId);
245
268
  const uLang = userFull.language ?? FALLBACK_LANG;
@@ -1 +1 @@
1
- {"version":3,"file":"refund.js","sourceRoot":"","sources":["../../../src/bot/payments/refund.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refund.js","sourceRoot":"","sources":["../../../src/bot/payments/refund.ts"],"names":[],"mappings":"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"}
@@ -301,6 +301,18 @@ export type FulfillmentEvent = {
301
301
  readonly xtr: number;
302
302
  readonly receivedAt: number;
303
303
  };
304
+ /**
305
+ * Emitted (fire-and-forget, like `onFulfilled`) when an admin approves
306
+ * a refund and Telegram's `refundStarPayment` succeeds. The mirror of
307
+ * `FulfillmentEvent`, so a revenue ledger can reverse the row it wrote.
308
+ */
309
+ export type RefundEvent = {
310
+ readonly productKey: string;
311
+ readonly userId: number;
312
+ readonly chargeId: string;
313
+ readonly xtr: number;
314
+ readonly refundedAt: number;
315
+ };
304
316
  /**
305
317
  * Thrown by `credits.consume(n)` when the balance is below `n`.
306
318
  * `tryConsume(n)` returns `false` instead.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bot/payments/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAInD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEvC,6DAA6D;AAC7D,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CACjD,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAGlC,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACtD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAC5D,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACvB,CAAC;AAIF,MAAM,MAAM,WAAW,GAAG;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC;AAIF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;0EAEsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC;AAUF,KAAK,SAAS,CACb,CAAC,SAAS,MAAM,EAChB,GAAG,SAAS,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAC9B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GACxB,GAAG,CAAC,QAAQ,CAAC,GACb,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAC3E,KAAK,GACL,CAAC,CAAC,QAAQ,CAAC,SAAS,MAAM,GACzB,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GACtB,KAAK,CAAC;AAEV;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,IACzE,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC;AAEjE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,IACtE,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GACzB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAC/B,WAAW,QAAQ,CAAC,CAAC,CAAC,EAAE,GACxB,KAAK,GACN,KAAK,CAAC;AAEV,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,IAC7D,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;AAErE;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,iBAAiB,CAAC,MAAM,CAAC,IACzD,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAC7B,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAC/B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1B;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,GAAG,SAAS,iBAAiB,CAAC,MAAM,CAAC,IACtD,MAAM,GACN,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAEjC;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,iBAAiB,CAAC,MAAM,CAAC,IACzD,KAAK,GACL,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AASjC,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,EAAE,EAAE,WAAW,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAC1B,MAAM,EACN,eAAe,GAAG,mBAAmB,GAAG,YAAY,CACpD,CAAC;CACF,CAAC;AAOF,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,wEAAwE;AACxE,eAAO,MAAM,aAAa,OAAO,CAAC;AAIlC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC1C,CAAC;AAIF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B,CAAC;AAIF;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACf,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAQhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/bot/payments/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAEpC;IACH,KAAK,EAAE,SAAS;CAChB,CAAC;AAwFF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AA2LtE,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAsFlC,sEAAsE;AAEtE;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACpC,SAAS,CAAS;IAClB,SAAS,CAAS;IAC3B,YAAY,SAAiB,EAAE,SAAiB;QAC/C,KAAK,CACJ,kCAAkC,SAAS,eAAe,SAAS,EAAE,CACrE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/bot/payments/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAEpC;IACH,KAAK,EAAE,SAAS;CAChB,CAAC;AAwFF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AA2LtE,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAmGlC,sEAAsE;AAEtE;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACpC,SAAS,CAAS;IAClB,SAAS,CAAS;IAC3B,YAAY,SAAiB,EAAE,SAAiB;QAC/C,KAAK,CACJ,kCAAkC,SAAS,eAAe,SAAS,EAAE,CACrE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;CACD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `tg-html` — transform arbitrary (LLM-emitted) HTML into Telegram-compatible
3
+ * `parse_mode=HTML` with opinionated, consistent spacing.
4
+ *
5
+ * Telegram's HTML subset has no headings, lists, or block layout — send it
6
+ * `<h1>`/`<ul>` and the API rejects the whole message. This module accepts the
7
+ * HTML a model naturally writes and renders the structure typographically:
8
+ *
9
+ * h1 → <b><u>…</u></b> + blank line
10
+ * h2…h6 → <b>…</b> + blank line
11
+ * p/div/section/article/… → content + blank line
12
+ * ul/ol/li → `• ` bullets, blank line after the list
13
+ * br → newline
14
+ * blockquote → kept (newlines inside preserved), newline after
15
+ * b/i/u/s/code/pre/a/… → kept, attributes filtered to Telegram's allow-list
16
+ * spoiler / span.tg-spoiler → <tg-spoiler>
17
+ * unknown letter-tags → dropped, content kept (hallucinated markup)
18
+ * stray < > → escaped, never eaten
19
+ *
20
+ * Zero dependencies, no DOM: a single-pass tokenizer over a small recursive
21
+ * renderer, safe everywhere (Workers included). Successor of the standalone
22
+ * `tghtml` package (jsr:@adriangalilea/tghtml, now archived), with its lossy
23
+ * edge cases fixed: `x<5 and y>10` escapes instead of vanishing, and unknown
24
+ * tags drop their markup instead of leaking `small…/small` fragments.
25
+ *
26
+ * @example
27
+ * import { transform } from '@adriangalilea/utils/tg-html'
28
+ *
29
+ * transform('<h1>Title</h1><ul><li>Point</li></ul>')
30
+ * // '<b><u>Title</u></b>\n\n• Point'
31
+ */
32
+ /**
33
+ * Transform HTML into Telegram-compatible `parse_mode=HTML` with consistent
34
+ * spacing. Never throws; pathological input degrades to escaped plain text.
35
+ */
36
+ export declare function transform(html: string): string;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tg-html/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AA4PH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa9C"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * `tg-html` — transform arbitrary (LLM-emitted) HTML into Telegram-compatible
3
+ * `parse_mode=HTML` with opinionated, consistent spacing.
4
+ *
5
+ * Telegram's HTML subset has no headings, lists, or block layout — send it
6
+ * `<h1>`/`<ul>` and the API rejects the whole message. This module accepts the
7
+ * HTML a model naturally writes and renders the structure typographically:
8
+ *
9
+ * h1 → <b><u>…</u></b> + blank line
10
+ * h2…h6 → <b>…</b> + blank line
11
+ * p/div/section/article/… → content + blank line
12
+ * ul/ol/li → `• ` bullets, blank line after the list
13
+ * br → newline
14
+ * blockquote → kept (newlines inside preserved), newline after
15
+ * b/i/u/s/code/pre/a/… → kept, attributes filtered to Telegram's allow-list
16
+ * spoiler / span.tg-spoiler → <tg-spoiler>
17
+ * unknown letter-tags → dropped, content kept (hallucinated markup)
18
+ * stray < > → escaped, never eaten
19
+ *
20
+ * Zero dependencies, no DOM: a single-pass tokenizer over a small recursive
21
+ * renderer, safe everywhere (Workers included). Successor of the standalone
22
+ * `tghtml` package (jsr:@adriangalilea/tghtml, now archived), with its lossy
23
+ * edge cases fixed: `x<5 and y>10` escapes instead of vanishing, and unknown
24
+ * tags drop their markup instead of leaking `small…/small` fragments.
25
+ *
26
+ * @example
27
+ * import { transform } from '@adriangalilea/utils/tg-html'
28
+ *
29
+ * transform('<h1>Title</h1><ul><li>Point</li></ul>')
30
+ * // '<b><u>Title</u></b>\n\n• Point'
31
+ */
32
+ // Tags Telegram's parse_mode=HTML accepts verbatim.
33
+ const TELEGRAM_TAGS = new Set([
34
+ "b",
35
+ "strong",
36
+ "i",
37
+ "em",
38
+ "u",
39
+ "ins",
40
+ "s",
41
+ "strike",
42
+ "del",
43
+ "span",
44
+ "tg-spoiler",
45
+ "a",
46
+ "code",
47
+ "pre",
48
+ "blockquote",
49
+ "tg-emoji",
50
+ ]);
51
+ // Attributes kept per tag; everything else is dropped.
52
+ const TELEGRAM_ATTRS = {
53
+ a: ["href"],
54
+ span: ["class"],
55
+ blockquote: ["expandable"],
56
+ code: ["class"],
57
+ "tg-emoji": ["emoji-id"],
58
+ };
59
+ // Structural tags this module renders typographically (they can't reach Telegram).
60
+ const STRUCTURAL = new Set([
61
+ "h1",
62
+ "h2",
63
+ "h3",
64
+ "h4",
65
+ "h5",
66
+ "h6",
67
+ "p",
68
+ "div",
69
+ "section",
70
+ "article",
71
+ "header",
72
+ "footer",
73
+ "ul",
74
+ "ol",
75
+ "li",
76
+ "br",
77
+ "spoiler",
78
+ // Document wrappers a model sometimes emits around its answer; rendered transparent.
79
+ "html",
80
+ "head",
81
+ "body",
82
+ ]);
83
+ // Void tags: never expect a closing counterpart.
84
+ const VOID_TAGS = new Set(["br", "meta", "hr", "img", "input"]);
85
+ // A tag token must start with a letter (like real HTML): `<1mb>` or `<5` is text, not markup.
86
+ const TAG_RE = /<(\/?)([a-zA-Z][a-zA-Z0-9-]*)((?:"[^"]*"|'[^']*'|[^>"'])*?)(\/?)>/g;
87
+ const ATTR_RE = /([a-zA-Z][a-zA-Z0-9-]*)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;
88
+ function parseAttrs(raw) {
89
+ const attrs = {};
90
+ for (const m of raw.matchAll(ATTR_RE)) {
91
+ attrs[m[1].toLowerCase()] = m[2] ?? m[3] ?? m[4] ?? "";
92
+ }
93
+ return attrs;
94
+ }
95
+ /** Tokenize + tree-build in one pass. Mismatched closers close intervening elements (recovery). */
96
+ function parse(html) {
97
+ const root = {
98
+ kind: "element",
99
+ tag: "#root",
100
+ attrs: {},
101
+ children: [],
102
+ };
103
+ const stack = [root];
104
+ let last = 0;
105
+ const pushText = (text) => {
106
+ if (text)
107
+ stack[stack.length - 1].children.push({ kind: "text", text });
108
+ };
109
+ for (const m of html.matchAll(TAG_RE)) {
110
+ pushText(html.slice(last, m.index));
111
+ last = (m.index ?? 0) + m[0].length;
112
+ const closing = m[1] === "/";
113
+ const tag = m[2].toLowerCase();
114
+ const selfClosing = m[4] === "/" || VOID_TAGS.has(tag);
115
+ const known = TELEGRAM_TAGS.has(tag) || STRUCTURAL.has(tag);
116
+ if (!known)
117
+ continue; // hallucinated markup: drop the tag, keep surrounding content
118
+ if (closing) {
119
+ // Close up to the matching open element, if any (recovery for mismatches).
120
+ for (let at = stack.length - 1; at > 0; at--) {
121
+ if (stack[at].tag === tag) {
122
+ stack.length = at;
123
+ break;
124
+ }
125
+ }
126
+ continue;
127
+ }
128
+ const el = {
129
+ kind: "element",
130
+ tag,
131
+ attrs: parseAttrs(m[3]),
132
+ children: [],
133
+ };
134
+ stack[stack.length - 1].children.push(el);
135
+ if (!selfClosing)
136
+ stack.push(el);
137
+ }
138
+ pushText(html.slice(last));
139
+ return root.children;
140
+ }
141
+ // ─── rendering ──────────────────────────────────────────────────────
142
+ function escapeText(s) {
143
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
144
+ }
145
+ function escapeAttr(s) {
146
+ return escapeText(s).replace(/"/g, "&quot;");
147
+ }
148
+ function renderText(text, mode) {
149
+ const escaped = escapeText(text);
150
+ if (mode === "verbatim")
151
+ return escaped;
152
+ if (mode === "quote") {
153
+ return escaped
154
+ .replace(/[ \t]+/g, " ")
155
+ .replace(/\n[ \t]+/g, "\n")
156
+ .replace(/[ \t]+\n/g, "\n")
157
+ .replace(/\n{3,}/g, "\n\n");
158
+ }
159
+ return escaped.replace(/\s+/g, " ");
160
+ }
161
+ function renderChildren(el, mode) {
162
+ let out = "";
163
+ for (const child of el.children) {
164
+ out +=
165
+ child.kind === "text"
166
+ ? renderText(child.text, mode)
167
+ : renderElement(child, mode);
168
+ }
169
+ return out;
170
+ }
171
+ function keptAttrs(el) {
172
+ let out = "";
173
+ for (const name of TELEGRAM_ATTRS[el.tag] ?? []) {
174
+ if (!(name in el.attrs))
175
+ continue;
176
+ let value = el.attrs[name];
177
+ // Scheme-less links get https; only http(s)/tg pass through untouched.
178
+ if (el.tag === "a" &&
179
+ name === "href" &&
180
+ value &&
181
+ !/^(https?|tg):/i.test(value)) {
182
+ value = `https://${value}`;
183
+ }
184
+ out += ` ${name}="${escapeAttr(value)}"`;
185
+ }
186
+ return out;
187
+ }
188
+ function renderElement(el, mode) {
189
+ const tag = el.tag;
190
+ if (tag === "br")
191
+ return "\n";
192
+ if (tag === "h1")
193
+ return `<b><u>${renderChildren(el, "collapse").trim()}</u></b>\n\n`;
194
+ if (/^h[2-6]$/.test(tag))
195
+ return `<b>${renderChildren(el, "collapse").trim()}</b>\n\n`;
196
+ if (tag === "ul" || tag === "ol") {
197
+ const items = el.children
198
+ .filter((c) => c.kind === "element" && c.tag === "li")
199
+ .map((li) => `• ${renderChildren(li, "collapse").trim()}`);
200
+ return `${items.join("\n")}\n\n`;
201
+ }
202
+ if (tag === "li")
203
+ return `• ${renderChildren(el, "collapse").trim()}\n`;
204
+ if ([
205
+ "p",
206
+ "div",
207
+ "section",
208
+ "article",
209
+ "header",
210
+ "footer",
211
+ "html",
212
+ "head",
213
+ "body",
214
+ ].includes(tag)) {
215
+ return `${renderChildren(el, mode).trim()}\n\n`;
216
+ }
217
+ if (tag === "blockquote") {
218
+ const expandable = "expandable" in el.attrs ? ' expandable=""' : "";
219
+ return `<blockquote${expandable}>${renderChildren(el, "quote").trim()}</blockquote>\n`;
220
+ }
221
+ if (tag === "spoiler")
222
+ return `<tg-spoiler>${renderChildren(el, "collapse").trim()}</tg-spoiler>`;
223
+ if (tag === "span") {
224
+ // Only the spoiler span means anything to Telegram; other spans are transparent.
225
+ if (el.attrs.class !== "tg-spoiler")
226
+ return renderChildren(el, mode);
227
+ return `<span class="tg-spoiler">${renderChildren(el, "collapse").trim()}</span>`;
228
+ }
229
+ if (TELEGRAM_TAGS.has(tag)) {
230
+ // Quote mode applies to a blockquote's DIRECT text only: an inline tag inside it
231
+ // collapses its own whitespace like anywhere else.
232
+ const inner = tag === "pre" || tag === "code" ? "verbatim" : "collapse";
233
+ return `<${tag}${keptAttrs(el)}>${renderChildren(el, inner).trim()}</${tag}>`;
234
+ }
235
+ return renderChildren(el, mode);
236
+ }
237
+ /**
238
+ * Transform HTML into Telegram-compatible `parse_mode=HTML` with consistent
239
+ * spacing. Never throws; pathological input degrades to escaped plain text.
240
+ */
241
+ export function transform(html) {
242
+ if (!html.trim())
243
+ return "";
244
+ return parse(html)
245
+ .map((n) => n.kind === "text"
246
+ ? renderText(n.text, "collapse")
247
+ : renderElement(n, "collapse"))
248
+ .join("")
249
+ .replace(/\n{3,}/g, "\n\n")
250
+ .replace(/[ \t]+\n/g, "\n")
251
+ .replace(/\n +/g, "\n")
252
+ .trim();
253
+ }
254
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tg-html/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adriangalilea/utils",
3
- "version": "1.1.0",
3
+ "version": "1.3.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",
@@ -40,6 +40,10 @@
40
40
  "types": "./dist/say/index.d.ts",
41
41
  "default": "./dist/say/index.js"
42
42
  },
43
+ "./tg-html": {
44
+ "types": "./dist/tg-html/index.d.ts",
45
+ "default": "./dist/tg-html/index.js"
46
+ },
43
47
  "./bot": {
44
48
  "types": "./dist/bot/index.d.ts",
45
49
  "default": "./dist/bot/index.js"
@@ -137,7 +141,8 @@
137
141
  "ci": "biome ci",
138
142
  "prepublishOnly": "pnpm run build",
139
143
  "test:worker-safe": "pnpm run build && tsx tests/worker-safe-test.ts",
140
- "demo:bot": "tsx tests/create-demo.ts"
144
+ "demo:bot": "tsx tests/create-demo.ts",
145
+ "test:tg-html": "tsx tests/tg-html-test.ts"
141
146
  },
142
147
  "keywords": [
143
148
  "typescript",