@opentag/telegram 0.3.0 → 0.3.1

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/dist/index.js CHANGED
@@ -173,11 +173,7 @@ function normalizeTelegramMessage(input) {
173
173
  }
174
174
 
175
175
  // src/render.ts
176
- function nextActionSummary(result) {
177
- if (!result.nextAction) return void 0;
178
- if (typeof result.nextAction === "string") return result.nextAction;
179
- return result.nextAction.summary;
180
- }
176
+ import { createFinalSummaryPresentation } from "@opentag/core";
181
177
  function renderTelegramAcknowledgement(runId) {
182
178
  return `I picked this up: ${runId}`;
183
179
  }
@@ -187,17 +183,27 @@ function renderTelegramProgress(message) {
187
183
  }
188
184
  return "Working...";
189
185
  }
190
- function renderTelegramFinalResult(result) {
191
- const lines = [`Finished with ${result.conclusion}.`, "", result.summary];
192
- if (result.verification?.length) {
186
+ function renderTelegramFinalResult(result, options = {}) {
187
+ return renderTelegramFinalSummaryPresentation(
188
+ createFinalSummaryPresentation({
189
+ result,
190
+ ...options.auditRunId ? { auditRunId: options.auditRunId } : {}
191
+ })
192
+ );
193
+ }
194
+ function renderTelegramFinalSummaryPresentation(presentation) {
195
+ const lines = [`Finished with ${presentation.outcome}.`, "", presentation.summary];
196
+ if (presentation.verification?.length) {
193
197
  lines.push("", "Verification:");
194
- for (const check of result.verification) {
198
+ for (const check of presentation.verification) {
195
199
  lines.push(`- ${check.command}: ${check.outcome}`);
196
200
  }
197
201
  }
198
- const nextAction = nextActionSummary(result);
199
- if (nextAction) {
200
- lines.push("", `Next action: ${nextAction}`);
202
+ if (presentation.nextActions?.length) {
203
+ lines.push("", `Next action: ${presentation.nextActions[0]}`);
204
+ }
205
+ if (presentation.auditRunId) {
206
+ lines.push("", `Audit: opentag status --run ${presentation.auditRunId}`);
201
207
  }
202
208
  return lines.join("\n");
203
209
  }
@@ -225,6 +231,7 @@ export {
225
231
  parseTelegramThreadKey,
226
232
  renderTelegramAcknowledgement,
227
233
  renderTelegramFinalResult,
234
+ renderTelegramFinalSummaryPresentation,
228
235
  renderTelegramProgress,
229
236
  stripTelegramInvocation
230
237
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/normalize.ts","../src/render.ts"],"sourcesContent":["import { commandFromRawText, type ContextPointer, type OpenTagCommand, type OpenTagEvent, type PermissionGrant } from \"@opentag/core\";\n\nexport type TelegramChannelBinding = {\n botId: string;\n chatId: string;\n repoProvider?: string;\n owner: string;\n repo: string;\n};\n\nexport type TelegramMessageInput = {\n botId: string;\n botUsername?: string;\n chatId: string;\n chatType: \"private\" | \"group\" | \"supergroup\" | \"channel\";\n userId: string;\n username?: string;\n text: string;\n messageId: number;\n updateId?: number;\n messageThreadId?: number;\n receivedAt?: string;\n agentId?: string;\n callbackUri?: string;\n binding: TelegramChannelBinding;\n};\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function stripTelegramInvocation(input: {\n text: string;\n chatType: TelegramMessageInput[\"chatType\"];\n botUsername?: string;\n}): string | null {\n const trimmed = input.text.trim();\n if (!trimmed) return null;\n if (input.chatType === \"private\") return trimmed;\n\n const username = input.botUsername?.replace(/^@/, \"\");\n const patterns = username\n ? [\n new RegExp(`^@${escapeRegExp(username)}\\\\s+`, \"i\"),\n new RegExp(`^/opentag@${escapeRegExp(username)}\\\\s+`, \"i\"),\n /^\\/opentag\\s+/i\n ]\n : [/^\\/opentag\\s+/i];\n\n for (const pattern of patterns) {\n const stripped = trimmed.replace(pattern, \"\").trim();\n if (stripped !== trimmed) {\n return stripped.length > 0 ? stripped : null;\n }\n }\n\n return null;\n}\n\nexport function encodeTelegramThreadKey(input: {\n botId: string;\n chatId: string;\n replyToMessageId: number;\n messageThreadId?: number;\n}): string {\n return [input.botId, input.chatId, String(input.replyToMessageId), input.messageThreadId ? String(input.messageThreadId) : \"\"].join(\"|\");\n}\n\nexport function parseTelegramThreadKey(threadKey: string): {\n botId: string;\n chatId: string;\n replyToMessageId: number;\n messageThreadId?: number;\n} {\n const [botId, chatId, replyToMessageIdRaw, messageThreadIdRaw] = threadKey.split(\"|\");\n const replyToMessageId = Number(replyToMessageIdRaw);\n if (!botId || !chatId || !Number.isInteger(replyToMessageId) || replyToMessageId <= 0) {\n throw new Error(`Invalid Telegram thread key: ${threadKey}`);\n }\n const messageThreadId = messageThreadIdRaw ? Number(messageThreadIdRaw) : undefined;\n return {\n botId,\n chatId,\n replyToMessageId,\n ...(messageThreadId && Number.isInteger(messageThreadId) && messageThreadId > 0 ? { messageThreadId } : {})\n };\n}\n\nfunction permissionsForIntent(intent: OpenTagCommand[\"intent\"]): PermissionGrant[] {\n const permissions: PermissionGrant[] = [\n {\n scope: \"chat:postMessage\",\n reason: \"reply in the originating Telegram thread\"\n },\n {\n scope: \"runner:local\",\n reason: \"execute the run on a paired local daemon\"\n }\n ];\n\n if (intent === \"fix\" || intent === \"run\") {\n permissions.push(\n {\n scope: \"repo:read\",\n reason: \"inspect the repository in the paired local checkout\"\n },\n {\n scope: \"repo:write\",\n reason: \"commit code changes on an isolated run branch\"\n },\n {\n scope: \"pr:create\",\n reason: \"open a pull request for completed code changes\"\n }\n );\n }\n\n return permissions;\n}\n\nfunction referenceTitle(reference: NonNullable<OpenTagCommand[\"parsed\"]>[\"references\"][number]): string {\n return reference.title ?? \"Command file reference\";\n}\n\nfunction contextPointersForCommand(command: OpenTagCommand): ContextPointer[] {\n const context: ContextPointer[] = [];\n for (const reference of command.parsed?.references ?? []) {\n if (reference.kind === \"url\") {\n context.push({\n kind: \"url\",\n uri: reference.uri,\n visibility: \"organization\",\n title: reference.title ?? \"Command URL reference\"\n });\n continue;\n }\n if (reference.kind === \"file\" || reference.kind === \"path\") {\n context.push({\n kind: \"file\",\n uri: reference.uri,\n ...(reference.line ? { line: reference.line } : {}),\n ...(reference.startLine ? { startLine: reference.startLine } : {}),\n ...(reference.endLine ? { endLine: reference.endLine } : {}),\n visibility: \"organization\",\n title: referenceTitle(reference)\n });\n }\n }\n return context;\n}\n\nfunction commandMetadata(command: OpenTagCommand): Record<string, unknown> {\n if (!command.parsed) return {};\n return {\n commandParser: command.parsed.version,\n commandDiagnostics: command.parsed.diagnostics,\n ...(command.parsed.approval ? { approval: command.parsed.approval } : {}),\n ...(command.parsed.network ? { network: command.parsed.network } : {})\n };\n}\n\nexport function normalizeTelegramMessage(input: TelegramMessageInput): OpenTagEvent | null {\n const rawText = stripTelegramInvocation({\n text: input.text,\n chatType: input.chatType,\n ...(input.botUsername ? { botUsername: input.botUsername } : {})\n });\n if (!rawText) return null;\n\n const command = commandFromRawText(rawText);\n const agentId = input.agentId ?? \"opentag\";\n\n return {\n id: `evt_telegram_${input.updateId ?? `${input.botId}_${input.chatId}_${input.messageId}`}`,\n source: \"telegram\",\n sourceEventId: String(input.updateId ?? input.messageId),\n receivedAt: input.receivedAt ?? new Date().toISOString(),\n actor: {\n provider: \"telegram\",\n providerUserId: input.userId,\n ...(input.username ? { handle: input.username } : {})\n },\n target: {\n mention: input.botUsername ? `@${input.botUsername.replace(/^@/, \"\")}` : \"/opentag\",\n agentId,\n ...(command.parsed?.executorHint ? { executorHint: command.parsed.executorHint } : {})\n },\n command,\n context: [\n {\n provider: \"telegram\",\n kind: \"message\",\n uri: `telegram://bot/${input.botId}/chat/${input.chatId}/message/${input.messageId}`,\n visibility: \"organization\",\n title: \"Telegram message\"\n },\n {\n kind: \"text\",\n uri: input.text,\n visibility: \"organization\",\n title: \"Telegram message text\"\n },\n ...contextPointersForCommand(command)\n ],\n permissions: permissionsForIntent(command.intent),\n callback: {\n provider: \"telegram\",\n uri: input.callbackUri ?? \"https://api.telegram.org/sendMessage\",\n threadKey: encodeTelegramThreadKey({\n botId: input.botId,\n chatId: input.chatId,\n replyToMessageId: input.messageId,\n ...(input.messageThreadId ? { messageThreadId: input.messageThreadId } : {})\n })\n },\n metadata: {\n botId: input.botId,\n chatId: input.chatId,\n messageId: input.messageId,\n chatType: input.chatType,\n ...(input.messageThreadId ? { messageThreadId: input.messageThreadId } : {}),\n ...(input.botUsername ? { telegramBotUsername: input.botUsername.replace(/^@/, \"\") } : {}),\n ...commandMetadata(command),\n repoProvider: input.binding.repoProvider ?? \"github\",\n owner: input.binding.owner,\n repo: input.binding.repo\n }\n };\n}\n","import type { OpenTagRunResult } from \"@opentag/core\";\n\nfunction nextActionSummary(result: OpenTagRunResult): string | undefined {\n if (!result.nextAction) return undefined;\n if (typeof result.nextAction === \"string\") return result.nextAction;\n return result.nextAction.summary;\n}\n\nexport function renderTelegramAcknowledgement(runId: string): string {\n return `I picked this up: ${runId}`;\n}\n\nexport function renderTelegramProgress(message: string): string {\n if (/starting claude --print|thinking/i.test(message)) {\n return \"Thinking...\";\n }\n\n return \"Working...\";\n}\n\nexport function renderTelegramFinalResult(result: OpenTagRunResult): string {\n const lines = [`Finished with ${result.conclusion}.`, \"\", result.summary];\n\n if (result.verification?.length) {\n lines.push(\"\", \"Verification:\");\n for (const check of result.verification) {\n lines.push(`- ${check.command}: ${check.outcome}`);\n }\n }\n\n const nextAction = nextActionSummary(result);\n if (nextAction) {\n lines.push(\"\", `Next action: ${nextAction}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nexport type TelegramSendMessagePayload = {\n chat_id: string;\n text: string;\n reply_to_message_id?: number;\n message_thread_id?: number;\n allow_sending_without_reply?: boolean;\n};\n\nexport type TelegramSendMessageDraftPayload = {\n chat_id: string;\n text: string;\n draft_id: number;\n message_thread_id?: number;\n};\n\nexport function createTelegramSendMessagePayload(input: {\n chatId: string;\n text: string;\n replyToMessageId?: number;\n messageThreadId?: number;\n}): TelegramSendMessagePayload {\n return {\n chat_id: input.chatId,\n text: input.text,\n ...(input.replyToMessageId ? { reply_to_message_id: input.replyToMessageId, allow_sending_without_reply: true } : {}),\n ...(input.messageThreadId ? { message_thread_id: input.messageThreadId } : {})\n };\n}\n\nexport function createTelegramSendMessageDraftPayload(input: {\n chatId: string;\n text: string;\n draftId: number;\n messageThreadId?: number;\n}): TelegramSendMessageDraftPayload {\n return {\n chat_id: input.chatId,\n text: input.text,\n draft_id: input.draftId,\n ...(input.messageThreadId ? { message_thread_id: input.messageThreadId } : {})\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/normalize.ts","../src/render.ts"],"sourcesContent":["import { commandFromRawText, type ContextPointer, type OpenTagCommand, type OpenTagEvent, type PermissionGrant } from \"@opentag/core\";\n\nexport type TelegramChannelBinding = {\n botId: string;\n chatId: string;\n repoProvider?: string;\n owner: string;\n repo: string;\n};\n\nexport type TelegramMessageInput = {\n botId: string;\n botUsername?: string;\n chatId: string;\n chatType: \"private\" | \"group\" | \"supergroup\" | \"channel\";\n userId: string;\n username?: string;\n text: string;\n messageId: number;\n updateId?: number;\n messageThreadId?: number;\n receivedAt?: string;\n agentId?: string;\n callbackUri?: string;\n binding: TelegramChannelBinding;\n};\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function stripTelegramInvocation(input: {\n text: string;\n chatType: TelegramMessageInput[\"chatType\"];\n botUsername?: string;\n}): string | null {\n const trimmed = input.text.trim();\n if (!trimmed) return null;\n if (input.chatType === \"private\") return trimmed;\n\n const username = input.botUsername?.replace(/^@/, \"\");\n const patterns = username\n ? [\n new RegExp(`^@${escapeRegExp(username)}\\\\s+`, \"i\"),\n new RegExp(`^/opentag@${escapeRegExp(username)}\\\\s+`, \"i\"),\n /^\\/opentag\\s+/i\n ]\n : [/^\\/opentag\\s+/i];\n\n for (const pattern of patterns) {\n const stripped = trimmed.replace(pattern, \"\").trim();\n if (stripped !== trimmed) {\n return stripped.length > 0 ? stripped : null;\n }\n }\n\n return null;\n}\n\nexport function encodeTelegramThreadKey(input: {\n botId: string;\n chatId: string;\n replyToMessageId: number;\n messageThreadId?: number;\n}): string {\n return [input.botId, input.chatId, String(input.replyToMessageId), input.messageThreadId ? String(input.messageThreadId) : \"\"].join(\"|\");\n}\n\nexport function parseTelegramThreadKey(threadKey: string): {\n botId: string;\n chatId: string;\n replyToMessageId: number;\n messageThreadId?: number;\n} {\n const [botId, chatId, replyToMessageIdRaw, messageThreadIdRaw] = threadKey.split(\"|\");\n const replyToMessageId = Number(replyToMessageIdRaw);\n if (!botId || !chatId || !Number.isInteger(replyToMessageId) || replyToMessageId <= 0) {\n throw new Error(`Invalid Telegram thread key: ${threadKey}`);\n }\n const messageThreadId = messageThreadIdRaw ? Number(messageThreadIdRaw) : undefined;\n return {\n botId,\n chatId,\n replyToMessageId,\n ...(messageThreadId && Number.isInteger(messageThreadId) && messageThreadId > 0 ? { messageThreadId } : {})\n };\n}\n\nfunction permissionsForIntent(intent: OpenTagCommand[\"intent\"]): PermissionGrant[] {\n const permissions: PermissionGrant[] = [\n {\n scope: \"chat:postMessage\",\n reason: \"reply in the originating Telegram thread\"\n },\n {\n scope: \"runner:local\",\n reason: \"execute the run on a paired local daemon\"\n }\n ];\n\n if (intent === \"fix\" || intent === \"run\") {\n permissions.push(\n {\n scope: \"repo:read\",\n reason: \"inspect the repository in the paired local checkout\"\n },\n {\n scope: \"repo:write\",\n reason: \"commit code changes on an isolated run branch\"\n },\n {\n scope: \"pr:create\",\n reason: \"open a pull request for completed code changes\"\n }\n );\n }\n\n return permissions;\n}\n\nfunction referenceTitle(reference: NonNullable<OpenTagCommand[\"parsed\"]>[\"references\"][number]): string {\n return reference.title ?? \"Command file reference\";\n}\n\nfunction contextPointersForCommand(command: OpenTagCommand): ContextPointer[] {\n const context: ContextPointer[] = [];\n for (const reference of command.parsed?.references ?? []) {\n if (reference.kind === \"url\") {\n context.push({\n kind: \"url\",\n uri: reference.uri,\n visibility: \"organization\",\n title: reference.title ?? \"Command URL reference\"\n });\n continue;\n }\n if (reference.kind === \"file\" || reference.kind === \"path\") {\n context.push({\n kind: \"file\",\n uri: reference.uri,\n ...(reference.line ? { line: reference.line } : {}),\n ...(reference.startLine ? { startLine: reference.startLine } : {}),\n ...(reference.endLine ? { endLine: reference.endLine } : {}),\n visibility: \"organization\",\n title: referenceTitle(reference)\n });\n }\n }\n return context;\n}\n\nfunction commandMetadata(command: OpenTagCommand): Record<string, unknown> {\n if (!command.parsed) return {};\n return {\n commandParser: command.parsed.version,\n commandDiagnostics: command.parsed.diagnostics,\n ...(command.parsed.approval ? { approval: command.parsed.approval } : {}),\n ...(command.parsed.network ? { network: command.parsed.network } : {})\n };\n}\n\nexport function normalizeTelegramMessage(input: TelegramMessageInput): OpenTagEvent | null {\n const rawText = stripTelegramInvocation({\n text: input.text,\n chatType: input.chatType,\n ...(input.botUsername ? { botUsername: input.botUsername } : {})\n });\n if (!rawText) return null;\n\n const command = commandFromRawText(rawText);\n const agentId = input.agentId ?? \"opentag\";\n\n return {\n id: `evt_telegram_${input.updateId ?? `${input.botId}_${input.chatId}_${input.messageId}`}`,\n source: \"telegram\",\n sourceEventId: String(input.updateId ?? input.messageId),\n receivedAt: input.receivedAt ?? new Date().toISOString(),\n actor: {\n provider: \"telegram\",\n providerUserId: input.userId,\n ...(input.username ? { handle: input.username } : {})\n },\n target: {\n mention: input.botUsername ? `@${input.botUsername.replace(/^@/, \"\")}` : \"/opentag\",\n agentId,\n ...(command.parsed?.executorHint ? { executorHint: command.parsed.executorHint } : {})\n },\n command,\n context: [\n {\n provider: \"telegram\",\n kind: \"message\",\n uri: `telegram://bot/${input.botId}/chat/${input.chatId}/message/${input.messageId}`,\n visibility: \"organization\",\n title: \"Telegram message\"\n },\n {\n kind: \"text\",\n uri: input.text,\n visibility: \"organization\",\n title: \"Telegram message text\"\n },\n ...contextPointersForCommand(command)\n ],\n permissions: permissionsForIntent(command.intent),\n callback: {\n provider: \"telegram\",\n uri: input.callbackUri ?? \"https://api.telegram.org/sendMessage\",\n threadKey: encodeTelegramThreadKey({\n botId: input.botId,\n chatId: input.chatId,\n replyToMessageId: input.messageId,\n ...(input.messageThreadId ? { messageThreadId: input.messageThreadId } : {})\n })\n },\n metadata: {\n botId: input.botId,\n chatId: input.chatId,\n messageId: input.messageId,\n chatType: input.chatType,\n ...(input.messageThreadId ? { messageThreadId: input.messageThreadId } : {}),\n ...(input.botUsername ? { telegramBotUsername: input.botUsername.replace(/^@/, \"\") } : {}),\n ...commandMetadata(command),\n repoProvider: input.binding.repoProvider ?? \"github\",\n owner: input.binding.owner,\n repo: input.binding.repo\n }\n };\n}\n","import { createFinalSummaryPresentation, type OpenTagFinalSummaryPresentation, type OpenTagRunResult } from \"@opentag/core\";\n\nexport type TelegramRenderOptions = {\n auditRunId?: string;\n};\n\nexport function renderTelegramAcknowledgement(runId: string): string {\n return `I picked this up: ${runId}`;\n}\n\nexport function renderTelegramProgress(message: string): string {\n if (/starting claude --print|thinking/i.test(message)) {\n return \"Thinking...\";\n }\n\n return \"Working...\";\n}\n\nexport function renderTelegramFinalResult(result: OpenTagRunResult, options: TelegramRenderOptions = {}): string {\n return renderTelegramFinalSummaryPresentation(\n createFinalSummaryPresentation({\n result,\n ...(options.auditRunId ? { auditRunId: options.auditRunId } : {})\n })\n );\n}\n\nexport function renderTelegramFinalSummaryPresentation(presentation: OpenTagFinalSummaryPresentation): string {\n const lines = [`Finished with ${presentation.outcome}.`, \"\", presentation.summary];\n\n if (presentation.verification?.length) {\n lines.push(\"\", \"Verification:\");\n for (const check of presentation.verification) {\n lines.push(`- ${check.command}: ${check.outcome}`);\n }\n }\n\n if (presentation.nextActions?.length) {\n lines.push(\"\", `Next action: ${presentation.nextActions[0]}`);\n }\n if (presentation.auditRunId) {\n lines.push(\"\", `Audit: opentag status --run ${presentation.auditRunId}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nexport type TelegramSendMessagePayload = {\n chat_id: string;\n text: string;\n reply_to_message_id?: number;\n message_thread_id?: number;\n allow_sending_without_reply?: boolean;\n};\n\nexport type TelegramSendMessageDraftPayload = {\n chat_id: string;\n text: string;\n draft_id: number;\n message_thread_id?: number;\n};\n\nexport function createTelegramSendMessagePayload(input: {\n chatId: string;\n text: string;\n replyToMessageId?: number;\n messageThreadId?: number;\n}): TelegramSendMessagePayload {\n return {\n chat_id: input.chatId,\n text: input.text,\n ...(input.replyToMessageId ? { reply_to_message_id: input.replyToMessageId, allow_sending_without_reply: true } : {}),\n ...(input.messageThreadId ? { message_thread_id: input.messageThreadId } : {})\n };\n}\n\nexport function createTelegramSendMessageDraftPayload(input: {\n chatId: string;\n text: string;\n draftId: number;\n messageThreadId?: number;\n}): TelegramSendMessageDraftPayload {\n return {\n chat_id: input.chatId,\n text: input.text,\n draft_id: input.draftId,\n ...(input.messageThreadId ? { message_thread_id: input.messageThreadId } : {})\n };\n}\n"],"mappings":"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","names":[]}
package/dist/render.d.ts CHANGED
@@ -1,7 +1,11 @@
1
- import type { OpenTagRunResult } from "@opentag/core";
1
+ import { type OpenTagFinalSummaryPresentation, type OpenTagRunResult } from "@opentag/core";
2
+ export type TelegramRenderOptions = {
3
+ auditRunId?: string;
4
+ };
2
5
  export declare function renderTelegramAcknowledgement(runId: string): string;
3
6
  export declare function renderTelegramProgress(message: string): string;
4
- export declare function renderTelegramFinalResult(result: OpenTagRunResult): string;
7
+ export declare function renderTelegramFinalResult(result: OpenTagRunResult, options?: TelegramRenderOptions): string;
8
+ export declare function renderTelegramFinalSummaryPresentation(presentation: OpenTagFinalSummaryPresentation): string;
5
9
  export type TelegramSendMessagePayload = {
6
10
  chat_id: string;
7
11
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAQtD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgB1E;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,0BAA0B,CAO7B;AAED,wBAAgB,qCAAqC,CAAC,KAAK,EAAE;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,+BAA+B,CAOlC"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,+BAA+B,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE5H,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAO/G;AAED,wBAAgB,sCAAsC,CAAC,YAAY,EAAE,+BAA+B,GAAG,MAAM,CAkB5G;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,0BAA0B,CAO7B;AAED,wBAAgB,qCAAqC,CAAC,KAAK,EAAE;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,+BAA+B,CAOlC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentag/telegram",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Telegram message normalization and callback helpers for OpenTag.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -31,7 +31,7 @@
31
31
  ],
32
32
  "license": "MIT",
33
33
  "dependencies": {
34
- "@opentag/core": "0.3.0"
34
+ "@opentag/core": "0.3.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "tsup": "^8.5.1",