@elizaos/plugin-telegram 1.6.4 → 2.0.0-alpha.2
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/LICENSE +1 -1
- package/dist/index.js +12701 -977
- package/dist/index.js.map +87 -1
- package/package.json +15 -19
- package/README.md +0 -143
- package/dist/constants.d.ts +0 -10
- package/dist/environment.d.ts +0 -17
- package/dist/index.d.ts +0 -6
- package/dist/messageManager.d.ts +0 -131
- package/dist/service.d.ts +0 -218
- package/dist/tests.d.ts +0 -52
- package/dist/types.d.ts +0 -99
- package/dist/utils.d.ts +0 -35
package/dist/index.js.map
CHANGED
|
@@ -1 +1,87 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/service.ts","../src/messageManager.ts","../src/utils.ts","../src/tests.ts","../src/index.ts"],"sourcesContent":["export const MESSAGE_CONSTANTS = {\n MAX_MESSAGES: 50,\n RECENT_MESSAGE_COUNT: 5,\n CHAT_HISTORY_COUNT: 10,\n DEFAULT_SIMILARITY_THRESHOLD: 0.6,\n DEFAULT_SIMILARITY_THRESHOLD_FOLLOW_UPS: 0.4,\n INTEREST_DECAY_TIME: 5 * 60 * 1000, // 5 minutes\n PARTIAL_INTEREST_DECAY: 3 * 60 * 1000, // 3 minutes\n} as const;\n\nexport const TELEGRAM_SERVICE_NAME = 'telegram';\n","import {\n ChannelType,\n type Content,\n type Entity,\n EventType,\n type IAgentRuntime,\n Role,\n type Room,\n Service,\n type TargetInfo,\n type UUID,\n type World,\n createUniqueUuid,\n logger,\n} from '@elizaos/core';\nimport { type Context, Telegraf } from 'telegraf';\nimport { type ChatMemberOwner, type ChatMemberAdministrator, type User } from 'telegraf/types';\nimport { TELEGRAM_SERVICE_NAME } from './constants';\nimport { MessageManager } from './messageManager';\nimport { TelegramEventTypes, type TelegramWorldPayload } from './types';\n\n/**\n * Class representing a Telegram service that allows the agent to send and receive messages on Telegram.\n * This service handles all Telegram-specific functionality including:\n * - Initializing and managing the Telegram bot\n * - Setting up middleware for preprocessing messages\n * - Handling message and reaction events\n * - Synchronizing Telegram chats, users, and entities with the agent runtime\n * - Managing forum topics as separate rooms\n *\n * @extends Service\n */\nexport class TelegramService extends Service {\n static serviceType = TELEGRAM_SERVICE_NAME;\n capabilityDescription = 'The agent is able to send and receive messages on telegram';\n private bot: Telegraf<Context> | null;\n public messageManager: MessageManager | null;\n private options;\n private knownChats: Map<string, any> = new Map();\n private syncedEntityIds: Set<string> = new Set<string>();\n\n /**\n * Constructor for TelegramService class.\n * @param {IAgentRuntime} runtime - The runtime object for the agent.\n */\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n logger.debug({ src: 'plugin:telegram', agentId: runtime.agentId }, 'Constructing TelegramService');\n\n // Check if Telegram bot token is available and valid\n const botToken = runtime.getSetting('TELEGRAM_BOT_TOKEN') as string;\n if (!botToken || botToken.trim() === '') {\n logger.warn({ src: 'plugin:telegram', agentId: runtime.agentId }, 'Bot token not provided, Telegram functionality unavailable');\n this.bot = null;\n this.messageManager = null;\n return;\n }\n\n this.options = {\n telegram: {\n apiRoot:\n runtime.getSetting('TELEGRAM_API_ROOT') ||\n process.env.TELEGRAM_API_ROOT ||\n 'https://api.telegram.org',\n },\n };\n\n try {\n this.bot = new Telegraf(botToken, this.options);\n this.messageManager = new MessageManager(this.bot, this.runtime);\n logger.debug({ src: 'plugin:telegram', agentId: runtime.agentId }, 'TelegramService constructor completed');\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Failed to initialize Telegram bot');\n this.bot = null;\n this.messageManager = null;\n }\n }\n\n /**\n * Starts the Telegram service for the given runtime.\n *\n * @param {IAgentRuntime} runtime - The agent runtime to start the Telegram service for.\n * @returns {Promise<TelegramService>} A promise that resolves with the initialized TelegramService.\n */\n static async start(runtime: IAgentRuntime): Promise<TelegramService> {\n // Remove validateTelegramConfig call to allow service to start without token\n\n const service = new TelegramService(runtime);\n\n // If bot is not initialized (no token), return the service without further initialization\n if (!service.bot) {\n logger.warn({ src: 'plugin:telegram', agentId: runtime.agentId }, 'Service started without bot functionality');\n return service;\n }\n\n const maxRetries = 5;\n let retryCount = 0;\n let lastError: Error | null = null;\n\n while (retryCount < maxRetries) {\n try {\n logger.info({ src: 'plugin:telegram', agentId: runtime.agentId, agentName: runtime.character.name }, 'Starting Telegram bot');\n await service.initializeBot();\n\n // Set up middlewares before message handlers to ensure proper preprocessing\n service.setupMiddlewares();\n\n // Set up message handlers after middlewares\n service.setupMessageHandlers();\n\n // Wait for bot to be ready by testing getMe()\n await service.bot!.telegram.getMe();\n\n logger.success({ src: 'plugin:telegram', agentId: runtime.agentId, agentName: runtime.character.name }, 'Telegram bot started successfully');\n return service;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n logger.error({ src: 'plugin:telegram', agentId: runtime.agentId, attempt: retryCount + 1, error: lastError.message }, 'Initialization attempt failed');\n retryCount++;\n\n if (retryCount < maxRetries) {\n const delay = 2 ** retryCount * 1000; // Exponential backoff\n logger.info({ src: 'plugin:telegram', agentId: runtime.agentId, delaySeconds: delay / 1000 }, 'Retrying initialization');\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n logger.error({ src: 'plugin:telegram', agentId: runtime.agentId, maxRetries, error: lastError?.message }, 'Initialization failed after all attempts');\n\n // Return the service even if initialization failed, to prevent server crash\n return service;\n }\n\n /**\n * Stops the agent runtime.\n * @param {IAgentRuntime} runtime - The agent runtime to stop\n */\n static async stop(runtime: IAgentRuntime) {\n // Implement shutdown if necessary\n const tgClient = runtime.getService(TELEGRAM_SERVICE_NAME);\n if (tgClient) {\n await tgClient.stop();\n }\n }\n\n /**\n * Asynchronously stops the bot.\n *\n * @returns A Promise that resolves once the bot has stopped.\n */\n async stop(): Promise<void> {\n this.bot?.stop();\n }\n\n /**\n * Initializes the Telegram bot by launching it, getting bot info, and setting up message manager.\n * @returns {Promise<void>} A Promise that resolves when the initialization is complete.\n */\n private async initializeBot(): Promise<void> {\n this.bot?.start((ctx) => {\n this.runtime.emitEvent(\n TelegramEventTypes.SLASH_START as string,\n {\n ctx,\n runtime: this.runtime,\n source: 'telegram',\n } as any\n );\n });\n this.bot?.launch({\n dropPendingUpdates: true,\n allowedUpdates: ['message', 'message_reaction'],\n });\n\n // Get bot info for identification purposes\n const botInfo = await this.bot!.telegram.getMe();\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, botId: botInfo.id, botUsername: botInfo.username }, 'Bot info retrieved');\n\n // Handle sigint and sigterm signals to gracefully stop the bot\n process.once('SIGINT', () => this.bot?.stop('SIGINT'));\n process.once('SIGTERM', () => this.bot?.stop('SIGTERM'));\n }\n\n /**\n * Sets up the middleware chain for preprocessing messages before they reach handlers.\n * This critical method establishes a sequential processing pipeline that:\n *\n * 1. Authorization - Verifies if a chat is allowed to interact with the bot based on configured settings\n * 2. Chat Discovery - Ensures chat entities and worlds exist in the runtime, creating them if needed\n * 3. Forum Topics - Handles Telegram forum topics as separate rooms for better conversation management\n * 4. Entity Synchronization - Ensures message senders are properly synchronized as entities\n *\n * The middleware chain runs in sequence for each message, with each step potentially\n * enriching the context or stopping processing if conditions aren't met.\n * This preprocessing is essential for maintaining consistent state before message handlers execute.\n *\n * @private\n */\n private setupMiddlewares(): void {\n // Register the authorization middleware\n this.bot?.use(this.authorizationMiddleware.bind(this));\n\n // Register the chat and entity management middleware\n this.bot?.use(this.chatAndEntityMiddleware.bind(this));\n }\n\n /**\n * Authorization middleware - checks if chat is allowed to interact with the bot\n * based on the TELEGRAM_ALLOWED_CHATS configuration.\n *\n * @param {Context} ctx - The context of the incoming update\n * @param {Function} next - The function to call to proceed to the next middleware\n * @returns {Promise<void>}\n * @private\n */\n private async authorizationMiddleware(ctx: Context, next: Function): Promise<void> {\n if (!(await this.isGroupAuthorized(ctx))) {\n // Skip further processing if chat is not authorized\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId: ctx.chat?.id }, 'Chat not authorized, skipping');\n return;\n }\n await next();\n }\n\n /**\n * Chat and entity management middleware - handles new chats, forum topics, and entity synchronization.\n * This middleware implements decision logic to determine which operations are needed based on\n * the chat type and whether we've seen this chat before.\n *\n * @param {Context} ctx - The context of the incoming update\n * @param {Function} next - The function to call to proceed to the next middleware\n * @returns {Promise<void>}\n * @private\n */\n private async chatAndEntityMiddleware(ctx: Context, next: Function): Promise<void> {\n if (!ctx.chat) return next();\n\n const chatId = ctx.chat.id.toString();\n\n // If we haven't seen this chat before, process it as a new chat\n if (!this.knownChats.has(chatId)) {\n // Process the new chat - creates world, room, topic room (if applicable) and entities\n await this.handleNewChat(ctx);\n // Skip entity synchronization for new chats and proceed to the next middleware\n return next();\n }\n\n // For existing chats, determine the required operations based on chat type\n await this.processExistingChat(ctx);\n\n await next();\n }\n\n /**\n * Process an existing chat based on chat type and message properties.\n * Different chat types require different processing steps.\n *\n * @param {Context} ctx - The context of the incoming update\n * @returns {Promise<void>}\n * @private\n */\n private async processExistingChat(ctx: Context): Promise<void> {\n if (!ctx.chat) return;\n\n const chat = ctx.chat;\n\n // Handle forum topics for supergroups with forums\n if (chat.type === 'supergroup' && chat.is_forum && ctx.message?.message_thread_id) {\n try {\n await this.handleForumTopic(ctx);\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId: chat.id, error: error instanceof Error ? error.message : String(error) }, 'Error handling forum topic');\n }\n }\n\n // For non-private chats, synchronize entity information\n if (ctx.from && ctx.chat.type !== 'private') {\n await this.syncEntity(ctx);\n }\n }\n\n /**\n * Sets up message and reaction handlers for the bot.\n * Configures event handlers to process incoming messages and reactions.\n *\n * @private\n */\n private setupMessageHandlers(): void {\n // Regular message handler\n this.bot?.on('message', async (ctx) => {\n try {\n // Message handling is now simplified since all preprocessing is done by middleware\n await this.messageManager!.handleMessage(ctx);\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error handling message');\n }\n });\n\n // Reaction handler\n this.bot?.on('message_reaction', async (ctx) => {\n try {\n await this.messageManager!.handleReaction(ctx);\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error handling reaction');\n }\n });\n }\n\n /**\n * Checks if a group is authorized, based on the TELEGRAM_ALLOWED_CHATS setting.\n * @param {Context} ctx - The context of the incoming update.\n * @returns {Promise<boolean>} A Promise that resolves with a boolean indicating if the group is authorized.\n */\n private async isGroupAuthorized(ctx: Context): Promise<boolean> {\n const chatId = ctx.chat?.id.toString();\n if (!chatId) return false;\n\n const allowedChats = this.runtime.getSetting('TELEGRAM_ALLOWED_CHATS');\n if (!allowedChats) {\n return true;\n }\n\n try {\n const allowedChatsList = JSON.parse(allowedChats as string);\n return allowedChatsList.includes(chatId);\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error parsing TELEGRAM_ALLOWED_CHATS');\n return false;\n }\n }\n\n /**\n * Synchronizes an entity from a message context with the runtime system.\n * This method handles three cases:\n * 1. Message sender - most common case\n * 2. New chat member - when a user joins the chat\n * 3. Left chat member - when a user leaves the chat\n *\n * @param {Context} ctx - The context of the incoming update\n * @returns {Promise<void>}\n * @private\n */\n private async syncEntity(ctx: Context): Promise<void> {\n if (!ctx.chat) return;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n const worldId = createUniqueUuid(this.runtime, chatId) as UUID;\n const roomId = createUniqueUuid(\n this.runtime,\n ctx.message?.message_thread_id\n ? `${ctx.chat.id}-${ctx.message.message_thread_id}`\n : ctx.chat.id.toString()\n ) as UUID;\n\n // Handle all three entity sync cases separately for clarity\n await this.syncMessageSender(ctx, worldId, roomId, chatId);\n await this.syncNewChatMember(ctx, worldId, roomId, chatId);\n await this.syncLeftChatMember(ctx);\n }\n\n /**\n * Synchronizes the message sender entity with the runtime system.\n * This is the most common entity sync case.\n *\n * @param {Context} ctx - The context of the incoming update\n * @param {UUID} worldId - The ID of the world\n * @param {UUID} roomId - The ID of the room\n * @param {string} chatId - The ID of the chat\n * @returns {Promise<void>}\n * @private\n */\n private async syncMessageSender(\n ctx: Context,\n worldId: UUID,\n roomId: UUID,\n chatId: string\n ): Promise<void> {\n // Handle message sender\n if (ctx.from && !this.syncedEntityIds.has(ctx.from.id.toString())) {\n const telegramId = ctx.from.id.toString();\n const entityId = createUniqueUuid(this.runtime, telegramId) as UUID;\n\n await this.runtime.ensureConnection({\n entityId,\n roomId: roomId,\n userName: ctx.from.username,\n userId: telegramId as UUID,\n name: ctx.from.first_name || ctx.from.username || 'Unknown User',\n source: 'telegram',\n channelId: chatId,\n type: ChannelType.GROUP,\n worldId: worldId,\n });\n\n this.syncedEntityIds.add(entityId);\n }\n }\n\n /**\n * Synchronizes a new chat member entity with the runtime system.\n * Triggered when a user joins the chat.\n *\n * @param {Context} ctx - The context of the incoming update\n * @param {UUID} worldId - The ID of the world\n * @param {UUID} roomId - The ID of the room\n * @param {string} chatId - The ID of the chat\n * @returns {Promise<void>}\n * @private\n */\n private async syncNewChatMember(\n ctx: Context,\n worldId: UUID,\n roomId: UUID,\n chatId: string\n ): Promise<void> {\n // Handle new chat member\n if (ctx.message && 'new_chat_member' in ctx.message) {\n const newMember = ctx.message.new_chat_member as any;\n const telegramId = newMember.id.toString();\n const entityId = createUniqueUuid(this.runtime, telegramId) as UUID;\n\n // Skip if we've already synced this entity\n if (this.syncedEntityIds.has(telegramId)) return;\n\n // We call ensure connection here for this user.\n await this.runtime.ensureConnection({\n entityId,\n roomId: roomId,\n userName: newMember.username,\n userId: telegramId as UUID,\n name: newMember.first_name || newMember.username || 'Unknown User',\n source: 'telegram',\n channelId: chatId,\n type: ChannelType.GROUP,\n worldId: worldId,\n });\n\n this.syncedEntityIds.add(entityId);\n\n this.runtime.emitEvent(\n TelegramEventTypes.ENTITY_JOINED as string,\n {\n runtime: this.runtime,\n entityId,\n worldId,\n source: 'telegram',\n telegramUser: {\n id: newMember.id,\n username: newMember.username,\n first_name: newMember.first_name,\n },\n } as any\n );\n }\n }\n\n /**\n * Updates entity status when a user leaves the chat.\n *\n * @param {Context} ctx - The context of the incoming update\n * @returns {Promise<void>}\n * @private\n */\n private async syncLeftChatMember(ctx: Context): Promise<void> {\n // Handle left chat member\n if (ctx.message && 'left_chat_member' in ctx.message) {\n const leftMember = ctx.message.left_chat_member as any;\n const telegramId = leftMember.id.toString();\n const entityId = createUniqueUuid(this.runtime, telegramId) as UUID;\n\n const existingEntity = await this.runtime.getEntityById(entityId);\n if (existingEntity) {\n existingEntity.metadata = {\n ...existingEntity.metadata,\n status: 'INACTIVE',\n leftAt: Date.now(),\n };\n await this.runtime.updateEntity(existingEntity);\n }\n }\n }\n\n /**\n * Handles forum topics by creating appropriate rooms in the runtime system.\n * This enables proper conversation management for Telegram's forum feature.\n *\n * @param {Context} ctx - The context of the incoming update\n * @returns {Promise<void>}\n * @private\n */\n private async handleForumTopic(ctx: Context): Promise<void> {\n if (!ctx.chat || !ctx.message?.message_thread_id) return;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n const worldId = createUniqueUuid(this.runtime, chatId) as UUID;\n\n const room = await this.buildForumTopicRoom(ctx, worldId);\n if (!room) return;\n\n await this.runtime.ensureRoomExists(room);\n }\n\n /**\n * Builds entity for message sender\n */\n private buildMsgSenderEntity(from: User): Entity | null {\n if (!from) return null;\n\n const userId = createUniqueUuid(this.runtime, from.id.toString()) as UUID;\n const telegramId = from.id.toString();\n\n return {\n id: userId,\n agentId: this.runtime.agentId,\n names: [from.first_name || from.username || 'Unknown User'],\n metadata: {\n telegram: {\n id: telegramId,\n username: from.username,\n name: from.first_name || from.username || 'Unknown User',\n },\n },\n };\n }\n\n /**\n * Handles new chat discovery and emits WORLD_JOINED event.\n * This is a critical function that ensures new chats are properly\n * registered in the runtime system and appropriate events are emitted.\n *\n * @param {Context} ctx - The context of the incoming update\n * @returns {Promise<void>}\n * @private\n */\n private async handleNewChat(ctx: Context): Promise<void> {\n if (!ctx.chat) return;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n\n // Mark this chat as known\n this.knownChats.set(chatId, chat);\n\n // Get chat title and channel type\n const { chatTitle, channelType } = this.getChatTypeInfo(chat);\n\n const worldId = createUniqueUuid(this.runtime, chatId) as UUID;\n\n const existingWorld = await this.runtime.getWorld(worldId);\n if (existingWorld) {\n return;\n }\n\n const userId = ctx.from\n ? (createUniqueUuid(this.runtime, ctx.from.id.toString()) as UUID)\n : null;\n\n // Fetch admin information for proper role assignment\n let admins: (ChatMemberOwner | ChatMemberAdministrator)[] = [];\n let owner: ChatMemberOwner | null = null;\n if (chat.type === 'group' || chat.type === 'supergroup' || chat.type === 'channel') {\n try {\n const chatAdmins = await ctx.getChatAdministrators();\n admins = chatAdmins;\n const foundOwner = admins.find(\n (admin): admin is ChatMemberOwner => admin.status === 'creator'\n );\n owner = foundOwner || null;\n } catch (error) {\n logger.warn({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId, error: error instanceof Error ? error.message : String(error) }, 'Could not get chat administrators');\n }\n }\n\n let ownerId = userId;\n\n if (owner) {\n ownerId = createUniqueUuid(this.runtime, String(owner.user.id)) as UUID;\n }\n\n // Build world representation\n const world: World = {\n id: worldId,\n name: chatTitle,\n agentId: this.runtime.agentId,\n serverId: chatId as UUID,\n metadata: {\n source: 'telegram',\n ...(ownerId && { ownership: { ownerId } }),\n roles: ownerId\n ? {\n [ownerId]: Role.OWNER,\n }\n : {},\n chatType: chat.type,\n isForumEnabled: chat.type === 'supergroup' && chat.is_forum,\n },\n };\n\n // Directly ensure world exists instead of using syncTelegram\n await this.runtime.ensureWorldExists(world);\n\n // Create the main room for the chat\n const generalRoom: Room = {\n id: createUniqueUuid(this.runtime, chatId) as UUID,\n name: chatTitle,\n source: 'telegram',\n type: channelType,\n channelId: chatId,\n serverId: chatId as UUID,\n worldId,\n };\n\n // Directly ensure room exists instead of using syncTelegram\n await this.runtime.ensureRoomExists(generalRoom);\n\n // Prepare the rooms array starting with the main room\n const rooms = [generalRoom];\n\n // If this is a message in a forum topic, add the topic room as well\n if (chat.type === 'supergroup' && chat.is_forum && ctx.message?.message_thread_id) {\n const topicRoom = await this.buildForumTopicRoom(ctx, worldId);\n if (topicRoom) {\n rooms.push(topicRoom);\n await this.runtime.ensureRoomExists(topicRoom);\n }\n }\n\n // Build entities from chat\n const entities = await this.buildStandardizedEntities(chat);\n\n // Add sender if not already in entities\n if (ctx.from) {\n const senderEntity = this.buildMsgSenderEntity(ctx.from);\n if (senderEntity && senderEntity.id && !entities.some((e) => e.id === senderEntity.id)) {\n entities.push(senderEntity);\n this.syncedEntityIds.add(senderEntity.id);\n }\n }\n\n // Use the new batch processing method for entities\n await this.batchProcessEntities(\n entities,\n generalRoom.id!,\n generalRoom.channelId!,\n generalRoom.type,\n worldId\n );\n\n // Create payload for world events\n const telegramWorldPayload: TelegramWorldPayload = {\n runtime: this.runtime,\n world,\n rooms,\n entities,\n source: 'telegram',\n chat,\n botUsername: this.bot?.botInfo?.username,\n };\n\n // Emit telegram-specific world joined event\n if (chat.type !== 'private') {\n await this.runtime.emitEvent(TelegramEventTypes.WORLD_JOINED, telegramWorldPayload);\n }\n\n // Finally emit the standard WORLD_JOINED event\n await this.runtime.emitEvent(EventType.WORLD_JOINED, {\n runtime: this.runtime,\n world,\n rooms,\n entities,\n source: 'telegram',\n });\n }\n\n /**\n * Processes entities in batches to prevent overwhelming the system.\n *\n * @param {Entity[]} entities - The entities to process\n * @param {UUID} roomId - The ID of the room to connect entities to\n * @param {string} channelId - The channel ID\n * @param {ChannelType} roomType - The type of the room\n * @param {UUID} worldId - The ID of the world\n * @returns {Promise<void>}\n * @private\n */\n private async batchProcessEntities(\n entities: Entity[],\n roomId: UUID,\n channelId: string,\n roomType: ChannelType,\n worldId: UUID\n ): Promise<void> {\n const batchSize = 50;\n\n for (let i = 0; i < entities.length; i += batchSize) {\n const entityBatch = entities.slice(i, i + batchSize);\n\n // Process each entity in the batch concurrently\n await Promise.all(\n entityBatch.map(async (entity: Entity) => {\n try {\n if (entity.id) {\n const telegramMetadata = entity.metadata?.telegram as\n | {\n username?: string;\n name?: string;\n id?: string;\n }\n | undefined;\n\n await this.runtime.ensureConnection({\n entityId: entity.id,\n roomId: roomId,\n userName: telegramMetadata?.username,\n name: telegramMetadata?.name,\n userId: telegramMetadata?.id as UUID,\n source: 'telegram',\n channelId: channelId,\n type: roomType,\n worldId: worldId,\n });\n } else {\n logger.warn({ src: 'plugin:telegram', agentId: this.runtime.agentId, entityNames: entity.names }, 'Skipping entity sync due to missing ID');\n }\n } catch (err) {\n const telegramMetadata = entity.metadata?.telegram as\n | {\n username?: string;\n }\n | undefined;\n logger.warn({ src: 'plugin:telegram', agentId: this.runtime.agentId, username: telegramMetadata?.username, error: err instanceof Error ? err.message : String(err) }, 'Failed to sync user');\n }\n })\n );\n\n // Add a small delay between batches if not the last batch\n if (i + batchSize < entities.length) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n }\n\n /**\n * Gets chat title and channel type based on Telegram chat type.\n * Maps Telegram-specific chat types to standardized system types.\n *\n * @param {any} chat - The Telegram chat object\n * @returns {Object} Object containing chatTitle and channelType\n * @private\n */\n private getChatTypeInfo(chat: any): { chatTitle: string; channelType: ChannelType } {\n let chatTitle: string;\n let channelType: ChannelType;\n\n switch (chat.type) {\n case 'private':\n chatTitle = `Chat with ${chat.first_name || 'Unknown User'}`;\n channelType = ChannelType.DM;\n break;\n case 'group':\n chatTitle = chat.title || 'Unknown Group';\n channelType = ChannelType.GROUP;\n break;\n case 'supergroup':\n chatTitle = chat.title || 'Unknown Supergroup';\n channelType = ChannelType.GROUP;\n break;\n case 'channel':\n chatTitle = chat.title || 'Unknown Channel';\n channelType = ChannelType.FEED;\n break;\n default:\n chatTitle = 'Unknown Chat';\n channelType = ChannelType.GROUP;\n }\n\n return { chatTitle, channelType };\n }\n\n /**\n * Builds standardized entity representations from Telegram chat data.\n * Transforms Telegram-specific user data into system-standard Entity objects.\n *\n * @param {any} chat - The Telegram chat object\n * @returns {Promise<Entity[]>} Array of standardized Entity objects\n * @private\n */\n private async buildStandardizedEntities(chat: any): Promise<Entity[]> {\n const entities: Entity[] = [];\n\n try {\n // For private chats, add the user\n if (chat.type === 'private' && chat.id) {\n const userId = createUniqueUuid(this.runtime, chat.id.toString()) as UUID;\n entities.push({\n id: userId,\n names: [chat.first_name || 'Unknown User'],\n agentId: this.runtime.agentId,\n metadata: {\n telegram: {\n id: chat.id.toString(),\n username: chat.username || 'unknown',\n name: chat.first_name || 'Unknown User',\n },\n source: 'telegram',\n },\n });\n this.syncedEntityIds.add(userId);\n } else if (chat.type === 'group' || chat.type === 'supergroup') {\n // For groups and supergroups, try to get member information\n try {\n // Get chat administrators (this is what's available through the Bot API)\n const admins = await this.bot?.telegram.getChatAdministrators(chat.id);\n\n if (admins && admins.length > 0) {\n for (const admin of admins) {\n const userId = createUniqueUuid(this.runtime, admin.user.id.toString()) as UUID;\n entities.push({\n id: userId,\n names: [admin.user.first_name || admin.user.username || 'Unknown Admin'],\n agentId: this.runtime.agentId,\n metadata: {\n telegram: {\n id: admin.user.id.toString(),\n username: admin.user.username || 'unknown',\n name: admin.user.first_name || 'Unknown Admin',\n isAdmin: true,\n adminTitle:\n admin.custom_title || (admin.status === 'creator' ? 'Owner' : 'Admin'),\n },\n source: 'telegram',\n roles: [admin.status === 'creator' ? Role.OWNER : Role.ADMIN],\n },\n });\n this.syncedEntityIds.add(userId);\n }\n }\n } catch (error) {\n logger.warn({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId: chat.id, error: error instanceof Error ? error.message : String(error) }, 'Could not fetch administrators');\n }\n }\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error building standardized entities');\n }\n\n return entities;\n }\n\n /**\n * Extracts and builds the room object for a forum topic from a message context.\n * This refactored method can be used both in middleware and when handling new chats.\n *\n * @param {Context} ctx - The context of the incoming update\n * @param {UUID} worldId - The ID of the world the topic belongs to\n * @returns {Promise<Room | null>} A Promise that resolves with the room or null if not a topic\n * @private\n */\n private async buildForumTopicRoom(ctx: Context, worldId: UUID): Promise<Room | null> {\n if (!ctx.chat || !ctx.message?.message_thread_id) return null;\n if (ctx.chat.type !== 'supergroup' || !ctx.chat.is_forum) return null;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n const threadId = ctx.message.message_thread_id.toString();\n const roomId = createUniqueUuid(this.runtime, `${chatId}-${threadId}`) as UUID;\n\n try {\n // Ensure the message object is fully initialized\n const replyMessage = JSON.parse(JSON.stringify(ctx.message));\n\n // Default topic name\n let topicName = `Topic #${threadId}`;\n\n // Check if forum_topic_created exists directly in the message\n if (\n replyMessage &&\n typeof replyMessage === 'object' &&\n 'forum_topic_created' in replyMessage &&\n replyMessage.forum_topic_created\n ) {\n const topicCreated = replyMessage.forum_topic_created;\n if (topicCreated && typeof topicCreated === 'object' && 'name' in topicCreated) {\n topicName = topicCreated.name;\n }\n }\n // Check if forum_topic_created exists in reply_to_message\n else if (\n replyMessage &&\n typeof replyMessage === 'object' &&\n 'reply_to_message' in replyMessage &&\n replyMessage.reply_to_message &&\n typeof replyMessage.reply_to_message === 'object' &&\n 'forum_topic_created' in replyMessage.reply_to_message &&\n replyMessage.reply_to_message.forum_topic_created\n ) {\n const topicCreated = replyMessage.reply_to_message.forum_topic_created;\n if (topicCreated && typeof topicCreated === 'object' && 'name' in topicCreated) {\n topicName = topicCreated.name;\n }\n }\n\n // Create a room for this topic\n const room: Room = {\n id: roomId,\n name: topicName,\n source: 'telegram',\n type: ChannelType.GROUP,\n channelId: `${chatId}-${threadId}`,\n serverId: chatId as UUID,\n worldId,\n metadata: {\n threadId: threadId,\n isForumTopic: true,\n parentChatId: chatId,\n },\n };\n\n return room;\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId, threadId, error: error instanceof Error ? error.message : String(error) }, 'Error building forum topic room');\n return null;\n }\n }\n\n static registerSendHandlers(runtime: IAgentRuntime, serviceInstance: TelegramService) {\n if (serviceInstance && serviceInstance.bot) {\n runtime.registerSendHandler(\n 'telegram',\n serviceInstance.handleSendMessage.bind(serviceInstance)\n );\n logger.info({ src: 'plugin:telegram', agentId: runtime.agentId }, 'Registered send handler');\n } else {\n logger.warn({ src: 'plugin:telegram', agentId: runtime.agentId }, 'Cannot register send handler, bot not initialized');\n }\n }\n\n async handleSendMessage(\n runtime: IAgentRuntime,\n target: TargetInfo,\n content: Content\n ): Promise<void> {\n // Check if bot and messageManager are available\n if (!this.bot || !this.messageManager) {\n logger.error({ src: 'plugin:telegram', agentId: runtime.agentId }, 'Bot not initialized, cannot send messages');\n throw new Error('Telegram bot is not initialized. Please provide TELEGRAM_BOT_TOKEN.');\n }\n\n let chatId: number | string | undefined;\n\n // Determine the target chat ID\n if (target.channelId) {\n // Use channelId directly if provided (might be string like chat_id-thread_id or just chat_id)\n // We might need to parse this depending on how room IDs are stored vs Telegram IDs\n chatId = target.channelId;\n } else if (target.roomId) {\n // Fallback: Try to use roomId if channelId isn't available\n // This assumes roomId maps directly to Telegram chat ID or requires lookup\n // Placeholder - requires logic to map roomId -> telegram chat ID if different\n const room = await runtime.getRoom(target.roomId);\n chatId = room?.channelId; // Assuming channelId on Room IS the telegram ID\n if (!chatId)\n throw new Error(`Could not resolve Telegram chat ID from roomId ${target.roomId}`);\n } else if (target.entityId) {\n // TODO: Need robust way to map entityId (runtime UUID) to Telegram User ID (number)\n // This might involve checking entity metadata.\n // For now, this part is non-functional without that mapping.\n logger.error({ src: 'plugin:telegram', agentId: runtime.agentId, entityId: target.entityId }, 'Sending DMs via entityId not implemented');\n throw new Error('Sending DMs via entityId is not yet supported for Telegram.');\n // Example placeholder: const telegramUserId = await getTelegramIdFromEntity(runtime, target.entityId);\n // chatId = telegramUserId;\n } else {\n throw new Error('Telegram SendHandler requires channelId, roomId, or entityId.');\n }\n\n if (!chatId) {\n throw new Error(\n `Could not determine target Telegram chat ID for target: ${JSON.stringify(target)}`\n );\n }\n\n try {\n // Use existing MessageManager method, pass chatId and content\n // Assuming sendMessage handles splitting, markdown, etc.\n await this.messageManager.sendMessage(chatId, content);\n logger.info({ src: 'plugin:telegram', agentId: runtime.agentId, chatId }, 'Message sent');\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: runtime.agentId, chatId, error: error instanceof Error ? error.message : String(error) }, 'Error sending message');\n throw error;\n }\n }\n}\n","import {\n ChannelType,\n type Content,\n EventType,\n type HandlerCallback,\n type IAgentRuntime,\n type Media,\n type Memory,\n ModelType,\n ServiceType,\n type UUID,\n createUniqueUuid,\n logger,\n} from '@elizaos/core';\nimport type { Chat, Message, ReactionType, Update, Document } from '@telegraf/types';\nimport type { Context, NarrowedContext, Telegraf } from 'telegraf';\nimport { Markup } from 'telegraf';\nimport {\n type TelegramContent,\n TelegramEventTypes,\n type TelegramReactionReceivedPayload,\n} from './types';\nimport { convertToTelegramButtons, convertMarkdownToTelegram, cleanText } from './utils';\nimport fs from 'fs';\n\n/**\n * Interface for structured document processing results.\n */\ninterface DocumentProcessingResult {\n title: string;\n fullText: string;\n formattedDescription: string;\n fileName: string;\n mimeType: string | undefined;\n fileSize: number | undefined;\n error?: string;\n}\n\n/**\n * Enum representing different types of media.\n * @enum { string }\n * @readonly\n */\nexport enum MediaType {\n PHOTO = 'photo',\n VIDEO = 'video',\n DOCUMENT = 'document',\n AUDIO = 'audio',\n ANIMATION = 'animation',\n}\n\nconst MAX_MESSAGE_LENGTH = 4096; // Telegram's max message length\n\nconst getChannelType = (chat: Chat): ChannelType => {\n // Use a switch statement for clarity and exhaustive checks\n switch (chat.type) {\n case 'private':\n return ChannelType.DM;\n case 'group':\n case 'supergroup':\n case 'channel':\n return ChannelType.GROUP;\n default:\n throw new Error(`Unrecognized Telegram chat type: ${(chat as any).type}`);\n }\n};\n\n/**\n * Class representing a message manager.\n * @class\n */\nexport class MessageManager {\n public bot: Telegraf<Context>;\n protected runtime: IAgentRuntime;\n\n /**\n * Constructor for creating a new instance of a BotAgent.\n *\n * @param {Telegraf<Context>} bot - The Telegraf instance used for interacting with the bot platform.\n * @param {IAgentRuntime} runtime - The runtime environment for the agent.\n */\n constructor(bot: Telegraf<Context>, runtime: IAgentRuntime) {\n this.bot = bot;\n this.runtime = runtime;\n }\n\n /**\n * Process an image from a Telegram message to extract the image URL and description.\n *\n * @param {Message} message - The Telegram message object containing the image.\n * @returns {Promise<{ description: string } | null>} The description of the processed image or null if no image found.\n */\n async processImage(message: Message): Promise<{ description: string } | null> {\n try {\n let imageUrl: string | null = null;\n\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, messageId: message.message_id }, 'Processing image from message');\n\n if ('photo' in message && message.photo?.length > 0) {\n const photo = message.photo[message.photo.length - 1];\n const fileLink = await this.bot.telegram.getFileLink(photo.file_id);\n imageUrl = fileLink.toString();\n } else if (\n 'document' in message &&\n message.document?.mime_type?.startsWith('image/') &&\n !message.document?.mime_type?.startsWith('application/pdf')\n ) {\n const fileLink = await this.bot.telegram.getFileLink(message.document.file_id);\n imageUrl = fileLink.toString();\n }\n\n if (imageUrl) {\n const { title, description } = await this.runtime.useModel(\n ModelType.IMAGE_DESCRIPTION,\n imageUrl\n );\n return { description: `[Image: ${title}\\n${description}]` };\n }\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error processing image');\n }\n\n return null;\n }\n\n /**\n * Process a document from a Telegram message to extract the document URL and description.\n * Handles PDFs and other document types by converting them to text when possible.\n *\n * @param {Message} message - The Telegram message object containing the document.\n * @returns {Promise<{ description: string } | null>} The description of the processed document or null if no document found.\n */\n async processDocument(message: Message): Promise<DocumentProcessingResult | null> {\n try {\n if (!('document' in message) || !message.document) {\n return null;\n }\n\n const document = message.document;\n const fileLink = await this.bot.telegram.getFileLink(document.file_id);\n const documentUrl = fileLink.toString();\n\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: document.file_name, mimeType: document.mime_type, fileSize: document.file_size }, 'Processing document');\n\n // Centralized document processing based on MIME type\n const documentProcessor = this.getDocumentProcessor(document.mime_type);\n if (documentProcessor) {\n return await documentProcessor(document, documentUrl);\n }\n\n // Generic fallback for unsupported types\n return {\n title: `Document: ${document.file_name || 'Unknown Document'}`,\n fullText: '',\n formattedDescription: `[Document: ${document.file_name || 'Unknown Document'}\\nType: ${document.mime_type || 'unknown'}\\nSize: ${document.file_size || 0} bytes]`,\n fileName: document.file_name || 'Unknown Document',\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error processing document');\n return null;\n }\n }\n\n /**\n * Get the appropriate document processor based on MIME type.\n */\n private getDocumentProcessor(\n mimeType?: string\n ): ((document: Document, url: string) => Promise<DocumentProcessingResult>) | null {\n if (!mimeType) return null;\n\n const processors = {\n 'application/pdf': this.processPdfDocument.bind(this),\n 'text/': this.processTextDocument.bind(this), // covers text/plain, text/csv, text/markdown, etc.\n 'application/json': this.processTextDocument.bind(this),\n };\n\n for (const [pattern, processor] of Object.entries(processors)) {\n if (mimeType.startsWith(pattern)) {\n return processor;\n }\n }\n\n return null;\n }\n\n /**\n * Process PDF documents by converting them to text.\n */\n private async processPdfDocument(\n document: Document,\n documentUrl: string\n ): Promise<DocumentProcessingResult> {\n try {\n const pdfService = this.runtime.getService(ServiceType.PDF) as any;\n if (!pdfService) {\n logger.warn({ src: 'plugin:telegram', agentId: this.runtime.agentId }, 'PDF service not available, using fallback');\n return {\n title: `PDF Document: ${document.file_name || 'Unknown Document'}`,\n fullText: '',\n formattedDescription: `[PDF Document: ${document.file_name || 'Unknown Document'}\\nSize: ${document.file_size || 0} bytes\\nUnable to extract text content]`,\n fileName: document.file_name || 'Unknown Document',\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n\n const response = await fetch(documentUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch PDF: ${response.status}`);\n }\n\n const pdfBuffer = await response.arrayBuffer();\n const text = await pdfService.convertPdfToText(Buffer.from(pdfBuffer));\n\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: document.file_name, charactersExtracted: text.length }, 'PDF processed successfully');\n return {\n title: document.file_name || 'Unknown Document',\n fullText: text,\n formattedDescription: `[PDF Document: ${document.file_name || 'Unknown Document'}\\nSize: ${document.file_size || 0} bytes\\nText extracted successfully: ${text.length} characters]`,\n fileName: document.file_name || 'Unknown Document',\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: document.file_name, error: error instanceof Error ? error.message : String(error) }, 'Error processing PDF document');\n return {\n title: `PDF Document: ${document.file_name || 'Unknown Document'}`,\n fullText: '',\n formattedDescription: `[PDF Document: ${document.file_name || 'Unknown Document'}\\nSize: ${document.file_size || 0} bytes\\nError: Unable to extract text content]`,\n fileName: document.file_name || 'Unknown Document',\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n }\n\n /**\n * Process text documents by fetching their content.\n */\n private async processTextDocument(\n document: Document,\n documentUrl: string\n ): Promise<DocumentProcessingResult> {\n try {\n const response = await fetch(documentUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch text document: ${response.status}`);\n }\n\n const text = await response.text();\n\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: document.file_name, charactersExtracted: text.length }, 'Text document processed successfully');\n return {\n title: document.file_name || 'Unknown Document',\n fullText: text,\n formattedDescription: `[Text Document: ${document.file_name || 'Unknown Document'}\\nSize: ${document.file_size || 0} bytes\\nText extracted successfully: ${text.length} characters]`,\n fileName: document.file_name || 'Unknown Document',\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: document.file_name, error: error instanceof Error ? error.message : String(error) }, 'Error processing text document');\n return {\n title: `Text Document: ${document.file_name || 'Unknown Document'}`,\n fullText: '',\n formattedDescription: `[Text Document: ${document.file_name || 'Unknown Document'}\\nSize: ${document.file_size || 0} bytes\\nError: Unable to read content]`,\n fileName: document.file_name || 'Unknown Document',\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n }\n\n /**\n * Processes the message content, documents, and images to generate\n * processed content and media attachments.\n *\n * @param {Message} message The message to process\n * @returns {Promise<{ processedContent: string; attachments: Media[] }>} Processed content and media attachments\n */\n async processMessage(\n message: Message\n ): Promise<{ processedContent: string; attachments: Media[] }> {\n let processedContent = '';\n let attachments: Media[] = [];\n\n // Get message text\n if ('text' in message && message.text) {\n processedContent = message.text;\n } else if ('caption' in message && message.caption) {\n processedContent = message.caption as string;\n }\n\n // Process documents\n if ('document' in message && message.document) {\n const document = message.document;\n const documentInfo = await this.processDocument(message);\n\n if (documentInfo) {\n try {\n const fileLink = await this.bot.telegram.getFileLink(document.file_id);\n\n // Use structured data directly instead of regex parsing\n const title = documentInfo.title;\n const fullText = documentInfo.fullText;\n\n // Add document content to processedContent so agent can access it\n if (fullText) {\n const documentContent = `\\n\\n--- DOCUMENT CONTENT ---\\nTitle: ${title}\\n\\nFull Content:\\n${fullText}\\n--- END DOCUMENT ---\\n\\n`;\n processedContent += documentContent;\n }\n\n attachments.push({\n id: document.file_id,\n url: fileLink.toString(),\n title: title,\n source: document.mime_type?.startsWith('application/pdf') ? 'PDF' : 'Document',\n description: documentInfo.formattedDescription,\n text: fullText,\n });\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: documentInfo.fileName }, 'Document processed successfully');\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, fileName: documentInfo.fileName, error: error instanceof Error ? error.message : String(error) }, 'Error processing document');\n // Add a fallback attachment even if processing failed\n attachments.push({\n id: document.file_id,\n url: '',\n title: `Document: ${documentInfo.fileName}`,\n source: 'Document',\n description: `Document processing failed: ${documentInfo.fileName}`,\n text: `Document: ${documentInfo.fileName}\\nSize: ${documentInfo.fileSize || 0} bytes\\nType: ${documentInfo.mimeType || 'unknown'}`,\n });\n }\n } else {\n // Add a basic attachment even if documentInfo is null\n attachments.push({\n id: document.file_id,\n url: '',\n title: `Document: ${document.file_name || 'Unknown Document'}`,\n source: 'Document',\n description: `Document: ${document.file_name || 'Unknown Document'}`,\n text: `Document: ${document.file_name || 'Unknown Document'}\\nSize: ${document.file_size || 0} bytes\\nType: ${document.mime_type || 'unknown'}`,\n });\n }\n }\n\n // Process images\n if ('photo' in message && message.photo?.length > 0) {\n const imageInfo = await this.processImage(message);\n if (imageInfo) {\n const photo = message.photo[message.photo.length - 1];\n const fileLink = await this.bot.telegram.getFileLink(photo.file_id);\n attachments.push({\n id: photo.file_id,\n url: fileLink.toString(),\n title: 'Image Attachment',\n source: 'Image',\n description: imageInfo.description,\n text: imageInfo.description,\n });\n }\n }\n\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, hasContent: !!processedContent, attachmentsCount: attachments.length }, 'Message processed');\n\n return { processedContent, attachments };\n }\n\n /**\n * Sends a message in chunks, handling attachments and splitting the message if necessary\n *\n * @param {Context} ctx - The context object representing the current state of the bot\n * @param {TelegramContent} content - The content of the message to be sent\n * @param {number} [replyToMessageId] - The ID of the message to reply to, if any\n * @returns {Promise<Message.TextMessage[]>} - An array of TextMessage objects representing the messages sent\n */\n async sendMessageInChunks(\n ctx: Context,\n content: TelegramContent,\n replyToMessageId?: number\n ): Promise<Message.TextMessage[]> {\n if (content.attachments && content.attachments.length > 0) {\n content.attachments.map(async (attachment: Media) => {\n const typeMap: { [key: string]: MediaType } = {\n 'image/gif': MediaType.ANIMATION,\n image: MediaType.PHOTO,\n doc: MediaType.DOCUMENT,\n video: MediaType.VIDEO,\n audio: MediaType.AUDIO,\n };\n\n let mediaType: MediaType | undefined = undefined;\n\n for (const prefix in typeMap) {\n if (attachment.contentType?.startsWith(prefix)) {\n mediaType = typeMap[prefix];\n break;\n }\n }\n\n if (!mediaType) {\n throw new Error(\n `Unsupported Telegram attachment content type: ${attachment.contentType}`\n );\n }\n\n await this.sendMedia(ctx, attachment.url, mediaType, attachment.description);\n });\n return [];\n } else {\n const chunks = this.splitMessage(content.text ?? '');\n const sentMessages: Message.TextMessage[] = [];\n\n const telegramButtons = convertToTelegramButtons(content.buttons ?? []);\n\n if (!ctx.chat) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId }, 'sendMessageInChunks: ctx.chat is undefined');\n return [];\n }\n await ctx.telegram.sendChatAction(ctx.chat.id, 'typing');\n\n for (let i = 0; i < chunks.length; i++) {\n const chunk = convertMarkdownToTelegram(chunks[i]);\n if (!ctx.chat) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId }, 'sendMessageInChunks loop: ctx.chat is undefined');\n continue;\n }\n const sentMessage = (await ctx.telegram.sendMessage(ctx.chat.id, chunk, {\n reply_parameters:\n i === 0 && replyToMessageId ? { message_id: replyToMessageId } : undefined,\n parse_mode: 'MarkdownV2',\n ...Markup.inlineKeyboard(telegramButtons),\n })) as Message.TextMessage;\n\n sentMessages.push(sentMessage);\n }\n\n return sentMessages;\n }\n }\n\n /**\n * Sends media to a chat using the Telegram API.\n *\n * @param {Context} ctx - The context object containing information about the current chat.\n * @param {string} mediaPath - The path to the media to be sent, either a URL or a local file path.\n * @param {MediaType} type - The type of media being sent (PHOTO, VIDEO, DOCUMENT, AUDIO, or ANIMATION).\n * @param {string} [caption] - Optional caption for the media being sent.\n *\n * @returns {Promise<void>} A Promise that resolves when the media is successfully sent.\n */\n async sendMedia(\n ctx: Context,\n mediaPath: string,\n type: MediaType,\n caption?: string\n ): Promise<void> {\n try {\n const isUrl = /^(http|https):\\/\\//.test(mediaPath);\n const sendFunctionMap: Record<MediaType, Function> = {\n [MediaType.PHOTO]: ctx.telegram.sendPhoto.bind(ctx.telegram),\n [MediaType.VIDEO]: ctx.telegram.sendVideo.bind(ctx.telegram),\n [MediaType.DOCUMENT]: ctx.telegram.sendDocument.bind(ctx.telegram),\n [MediaType.AUDIO]: ctx.telegram.sendAudio.bind(ctx.telegram),\n [MediaType.ANIMATION]: ctx.telegram.sendAnimation.bind(ctx.telegram),\n };\n\n const sendFunction = sendFunctionMap[type];\n\n if (!sendFunction) {\n throw new Error(`Unsupported media type: ${type}`);\n }\n\n if (!ctx.chat) {\n throw new Error('sendMedia: ctx.chat is undefined');\n }\n\n if (isUrl) {\n // Handle HTTP URLs\n await sendFunction(ctx.chat.id, mediaPath, { caption });\n } else {\n // Handle local file paths\n if (!fs.existsSync(mediaPath)) {\n throw new Error(`File not found at path: ${mediaPath}`);\n }\n\n const fileStream = fs.createReadStream(mediaPath);\n\n try {\n if (!ctx.chat) {\n throw new Error('sendMedia (file): ctx.chat is undefined');\n }\n await sendFunction(ctx.chat.id, { source: fileStream }, { caption });\n } finally {\n fileStream.destroy();\n }\n }\n\n logger.debug({ src: 'plugin:telegram', agentId: this.runtime.agentId, mediaType: type, mediaPath }, 'Media sent successfully');\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, mediaType: type, mediaPath, error: error instanceof Error ? error.message : String(error) }, 'Failed to send media');\n throw error;\n }\n }\n\n /**\n * Splits a given text into an array of strings based on the maximum message length.\n *\n * @param {string} text - The text to split into chunks.\n * @returns {string[]} An array of strings with each element representing a chunk of the original text.\n */\n private splitMessage(text: string): string[] {\n const chunks: string[] = [];\n if (!text) return chunks;\n let currentChunk = '';\n\n const lines = text.split('\\n');\n for (const line of lines) {\n if (currentChunk.length + line.length + 1 <= MAX_MESSAGE_LENGTH) {\n currentChunk += (currentChunk ? '\\n' : '') + line;\n } else {\n if (currentChunk) chunks.push(currentChunk);\n currentChunk = line;\n }\n }\n\n if (currentChunk) chunks.push(currentChunk);\n return chunks;\n }\n\n /**\n * Handle incoming messages from Telegram and process them accordingly.\n * @param {Context} ctx - The context object containing information about the message.\n * @returns {Promise<void>}\n */\n public async handleMessage(ctx: Context): Promise<void> {\n // Type guard to ensure message exists\n if (!ctx.message || !ctx.from) return;\n\n const message = ctx.message as Message.TextMessage;\n\n try {\n // Convert IDs to UUIDs\n const entityId = createUniqueUuid(this.runtime, ctx.from.id.toString()) as UUID;\n\n const threadId =\n 'is_topic_message' in message && message.is_topic_message\n ? message.message_thread_id?.toString()\n : undefined;\n\n // Add null check for ctx.chat\n if (!ctx.chat) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId }, 'handleMessage: ctx.chat is undefined');\n return;\n }\n // Generate room ID based on whether this is in a forum topic\n const telegramRoomid = threadId ? `${ctx.chat.id}-${threadId}` : ctx.chat.id.toString();\n const roomId = createUniqueUuid(this.runtime, telegramRoomid) as UUID;\n\n // Get message ID (unique to channel)\n const messageId = createUniqueUuid(this.runtime, message?.message_id?.toString());\n\n // Process message content and attachments\n const { processedContent, attachments } = await this.processMessage(message);\n\n // Clean processedContent and attachments to avoid NULL characters\n const cleanedContent = cleanText(processedContent);\n const cleanedAttachments = attachments.map((att) => ({\n ...att,\n text: cleanText(att.text),\n description: cleanText(att.description),\n title: cleanText(att.title),\n }));\n\n if (!cleanedContent && cleanedAttachments.length === 0) {\n return;\n }\n\n // Get chat type and determine channel type\n const chat = message.chat as Chat;\n const channelType = getChannelType(chat);\n\n const sourceId = createUniqueUuid(this.runtime, '' + chat.id);\n\n await this.runtime.ensureConnection({\n entityId,\n roomId,\n userName: ctx.from.username,\n name: ctx.from.first_name,\n source: 'telegram',\n channelId: telegramRoomid,\n type: channelType,\n worldId: createUniqueUuid(this.runtime, roomId) as UUID,\n worldName: telegramRoomid,\n });\n\n // Create the memory object\n const memory: Memory = {\n id: messageId,\n entityId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n text: cleanedContent || ' ',\n attachments: cleanedAttachments,\n source: 'telegram',\n channelType: channelType,\n inReplyTo:\n 'reply_to_message' in message && message.reply_to_message\n ? createUniqueUuid(this.runtime, message.reply_to_message.message_id.toString())\n : undefined,\n },\n metadata: {\n entityName: ctx.from.first_name,\n entityUserName: ctx.from.username,\n fromBot: ctx.from.is_bot,\n // include very technical/exact reference to this user for security reasons\n // don't remove or change this, spartan needs this\n fromId: chat.id,\n sourceId,\n // why message? all Memories contain content (which is basically a message)\n // what are the other types? see MemoryType\n type: 'message', // MemoryType.MESSAGE\n // scope: `shared`, `private`, or `room`\n },\n createdAt: message.date * 1000,\n };\n\n // Create callback for handling responses\n const callback: HandlerCallback = async (content: Content, _files?: string[]) => {\n try {\n // If response is from reasoning do not send it.\n if (!content.text) return [];\n\n let sentMessages: boolean | Message.TextMessage[] = false;\n // channelType target === 'telegram'\n if (content?.channelType === 'DM') {\n sentMessages = [];\n if (ctx.from) {\n // FIXME split on 4096 chars\n const res = await this.bot.telegram.sendMessage(ctx.from.id, content.text);\n sentMessages.push(res);\n }\n } else {\n sentMessages = await this.sendMessageInChunks(ctx, content, message.message_id);\n }\n\n if (!Array.isArray(sentMessages)) return [];\n\n const memories: Memory[] = [];\n for (let i = 0; i < sentMessages.length; i++) {\n const sentMessage = sentMessages[i];\n\n const responseMemory: Memory = {\n id: createUniqueUuid(this.runtime, sentMessage.message_id.toString()),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n source: 'telegram',\n text: sentMessage.text,\n inReplyTo: messageId,\n channelType: channelType,\n },\n createdAt: sentMessage.date * 1000,\n };\n\n await this.runtime.createMemory(responseMemory, 'messages');\n memories.push(responseMemory);\n }\n\n return memories;\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error in message callback');\n return [];\n }\n };\n\n // Use elizaOS.handleMessage if available (unified messaging API with streaming support)\n // Falls back to direct messageService call for backward compatibility\n if (this.runtime.hasElizaOS()) {\n await this.runtime.elizaOS.handleMessage(this.runtime.agentId, memory, {\n onResponse: async (content) => {\n await callback(content);\n },\n });\n } else if (this.runtime.messageService) {\n await this.runtime.messageService.handleMessage(this.runtime, memory, callback);\n } else {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId }, 'Message service is not available');\n throw new Error(\n 'Message service is not initialized. Ensure the message service is properly configured.'\n );\n }\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId: ctx.chat?.id, messageId: ctx.message?.message_id, from: ctx.from?.username || ctx.from?.id, error: error instanceof Error ? error.message : String(error) }, 'Error handling Telegram message');\n throw error;\n }\n }\n\n /**\n * Handles the reaction event triggered by a user reacting to a message.\n * @param {NarrowedContext<Context<Update>, Update.MessageReactionUpdate>} ctx The context of the message reaction update\n * @returns {Promise<void>} A Promise that resolves when the reaction handling is complete\n */\n public async handleReaction(\n ctx: NarrowedContext<Context<Update>, Update.MessageReactionUpdate>\n ): Promise<void> {\n // Ensure we have the necessary data\n if (!ctx.update.message_reaction || !ctx.from) return;\n\n const reaction = ctx.update.message_reaction;\n const reactedToMessageId = reaction.message_id;\n\n const originalMessagePlaceholder: Partial<Message> = {\n message_id: reactedToMessageId,\n chat: reaction.chat,\n from: ctx.from,\n date: Math.floor(Date.now() / 1000),\n };\n\n const reactionType = reaction.new_reaction[0].type;\n const reactionEmoji = (reaction.new_reaction[0] as ReactionType).type; // Assuming ReactionType has 'type' for emoji\n\n try {\n const entityId = createUniqueUuid(this.runtime, ctx.from.id.toString()) as UUID;\n const roomId = createUniqueUuid(this.runtime, ctx.chat.id.toString());\n\n const reactionId = createUniqueUuid(\n this.runtime,\n `${reaction.message_id}-${ctx.from.id}-${Date.now()}`\n );\n\n // Create reaction memory\n const memory: Memory = {\n id: reactionId,\n entityId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n channelType: getChannelType(reaction.chat as Chat),\n text: `Reacted with: ${reactionType === 'emoji' ? reactionEmoji : reactionType}`,\n source: 'telegram',\n inReplyTo: createUniqueUuid(this.runtime, reaction.message_id.toString()),\n },\n createdAt: Date.now(),\n };\n\n // Create callback for handling reaction responses\n const callback: HandlerCallback = async (content: Content) => {\n try {\n // Add null check for content.text\n const replyText = content.text ?? '';\n const sentMessage = await ctx.reply(replyText);\n const responseMemory: Memory = {\n id: createUniqueUuid(this.runtime, sentMessage.message_id.toString()),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n inReplyTo: reactionId,\n },\n createdAt: sentMessage.date * 1000,\n };\n return [responseMemory];\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error in reaction callback');\n return [];\n }\n };\n\n // Let the bootstrap plugin handle the reaction\n this.runtime.emitEvent(EventType.REACTION_RECEIVED, {\n runtime: this.runtime,\n message: memory,\n callback,\n source: 'telegram',\n ctx,\n originalMessage: originalMessagePlaceholder as Message, // Cast needed due to placeholder\n reactionString: reactionType === 'emoji' ? reactionEmoji : reactionType,\n originalReaction: reaction.new_reaction[0] as ReactionType,\n } as TelegramReactionReceivedPayload);\n\n // Also emit the platform-specific event\n this.runtime.emitEvent(TelegramEventTypes.REACTION_RECEIVED, {\n runtime: this.runtime,\n message: memory,\n callback,\n source: 'telegram',\n ctx,\n originalMessage: originalMessagePlaceholder as Message, // Cast needed due to placeholder\n reactionString: reactionType === 'emoji' ? reactionEmoji : reactionType,\n originalReaction: reaction.new_reaction[0] as ReactionType,\n } as TelegramReactionReceivedPayload);\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, error: error instanceof Error ? error.message : String(error) }, 'Error handling reaction');\n }\n }\n\n /**\n * Sends a message to a Telegram chat and emits appropriate events\n * @param {number | string} chatId - The Telegram chat ID to send the message to\n * @param {Content} content - The content to send\n * @param {number} [replyToMessageId] - Optional message ID to reply to\n * @returns {Promise<Message.TextMessage[]>} The sent messages\n */\n public async sendMessage(\n chatId: number | string,\n content: Content,\n replyToMessageId?: number\n ): Promise<Message.TextMessage[]> {\n try {\n // Create a context-like object for sending\n const ctx = {\n chat: { id: chatId },\n telegram: this.bot.telegram,\n };\n\n const sentMessages = await this.sendMessageInChunks(\n ctx as Context,\n content,\n replyToMessageId\n );\n\n if (!sentMessages?.length) return [];\n\n // Create group ID\n const roomId = createUniqueUuid(this.runtime, chatId.toString());\n\n // Create memories for the sent messages\n const memories: Memory[] = [];\n for (const sentMessage of sentMessages) {\n const memory: Memory = {\n id: createUniqueUuid(this.runtime, sentMessage.message_id.toString()),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n text: sentMessage.text,\n source: 'telegram',\n channelType: getChannelType({\n id: typeof chatId === 'string' ? Number.parseInt(chatId, 10) : chatId,\n type: 'private', // Default to private, will be overridden if in context\n } as Chat),\n },\n createdAt: sentMessage.date * 1000,\n };\n\n await this.runtime.createMemory(memory, 'messages');\n memories.push(memory);\n }\n\n // Emit both generic and platform-specific message sent events\n if (memories.length > 0) {\n this.runtime.emitEvent(EventType.MESSAGE_SENT, {\n runtime: this.runtime,\n message: memories[0],\n source: 'telegram',\n });\n }\n\n // Also emit platform-specific event\n this.runtime.emitEvent(\n TelegramEventTypes.MESSAGE_SENT as string,\n {\n runtime: this.runtime,\n source: 'telegram',\n originalMessages: sentMessages,\n chatId,\n message: memories[0],\n } as any\n );\n\n return sentMessages;\n } catch (error) {\n logger.error({ src: 'plugin:telegram', agentId: this.runtime.agentId, chatId, error: error instanceof Error ? error.message : String(error) }, 'Error sending message to Telegram');\n return [];\n }\n }\n}\n","import { Markup } from 'telegraf';\nimport type { Button } from './types';\nimport type { InlineKeyboardButton } from '@telegraf/types';\nimport { logger } from '@elizaos/core';\n\n// A list of Telegram MarkdownV2 reserved characters that must be escaped\nconst TELEGRAM_RESERVED_REGEX = /([_*[\\]()~`>#+\\-=|{}.!\\\\])/g;\n\n/**\n * Escapes plain text for Telegram MarkdownV2.\n * (Any character in 1–126 that is reserved is prefixed with a backslash.)\n */\nfunction escapePlainText(text: string): string {\n if (!text) return '';\n return text.replace(TELEGRAM_RESERVED_REGEX, '\\\\$1');\n}\n\n/**\n * Escapes plain text line‐by–line while preserving any leading blockquote markers.\n */\nfunction escapePlainTextPreservingBlockquote(text: string): string {\n if (!text) return '';\n return text\n .split('\\n')\n .map((line) => {\n // If the line begins with one or more \">\" (and optional space),\n // leave that part unescaped.\n const match = line.match(/^(>+\\s?)(.*)$/);\n if (match) {\n return match[1] + escapePlainText(match[2]);\n }\n return escapePlainText(line);\n })\n .join('\\n');\n}\n\n/**\n * Escapes code inside inline or pre-formatted code blocks.\n * Telegram requires that inside code blocks all ` and \\ characters are escaped.\n */\nfunction escapeCode(text: string): string {\n if (!text) return '';\n return text.replace(/([`\\\\])/g, '\\\\$1');\n}\n\n/**\n * Escapes a URL for inline links:\n * inside the URL, only \")\" and \"\\\" need to be escaped.\n */\nfunction escapeUrl(url: string): string {\n if (!url) return '';\n return url.replace(/([)\\\\])/g, '\\\\$1');\n}\n\n/**\n * This function converts standard markdown to Telegram MarkdownV2.\n *\n * In addition to processing code blocks, inline code, links, bold, strikethrough, and italic,\n * it converts any header lines (those starting with one or more `#`) to bold text.\n *\n * Note: This solution uses a sequence of regex‐replacements and placeholders.\n * It makes assumptions about non–nested formatting and does not cover every edge case.\n */\nexport function convertMarkdownToTelegram(markdown: string): string {\n // We will temporarily replace recognized markdown tokens with placeholders.\n // Each placeholder is a string like \"\\u0000{index}\\u0000\".\n const replacements: string[] = [];\n function storeReplacement(formatted: string): string {\n const placeholder = `\\u0000${replacements.length}\\u0000`;\n replacements.push(formatted);\n return placeholder;\n }\n\n let converted = markdown;\n\n // 1. Fenced code blocks (```...```)\n // Matches an optional language (letters only) and then any content until the closing ```\n converted = converted.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (_match, lang, code) => {\n const escapedCode = escapeCode(code);\n const formatted = '```' + (lang || '') + '\\n' + escapedCode + '```';\n return storeReplacement(formatted);\n });\n\n // 2. Inline code (`...`)\n converted = converted.replace(/`([^`]+)`/g, (_match, code) => {\n const escapedCode = escapeCode(code);\n const formatted = '`' + escapedCode + '`';\n return storeReplacement(formatted);\n });\n\n // 3. Links: [link text](url)\n converted = converted.replace(\n /$begin:math:display$([^$end:math:display$]+)]$begin:math:text$([^)]+)$end:math:text$/g,\n (_match, text, url) => {\n // For link text we escape as plain text.\n const formattedText = escapePlainText(text);\n const escapedURL = escapeUrl(url);\n const formatted = `[${formattedText}](${escapedURL})`;\n return storeReplacement(formatted);\n }\n );\n\n // 4. Bold text: standard markdown bold **text**\n // Telegram bold is delimited by single asterisks: *text*\n converted = converted.replace(/\\*\\*([^*]+)\\*\\*/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `*${formattedContent}*`;\n return storeReplacement(formatted);\n });\n\n // 5. Strikethrough: standard markdown uses ~~text~~,\n // while Telegram uses ~text~\n converted = converted.replace(/~~([^~]+)~~/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `~${formattedContent}~`;\n return storeReplacement(formatted);\n });\n\n // 6. Italic text:\n // Standard markdown italic can be written as either *text* or _text_.\n // In Telegram MarkdownV2 italic must be delimited by underscores.\n // Process asterisk-based italic first.\n // (Using negative lookbehind/lookahead to avoid matching bold **)\n converted = converted.replace(/(?<!\\*)\\*([^*\\n]+)\\*(?!\\*)/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `_${formattedContent}_`;\n return storeReplacement(formatted);\n });\n // Then underscore-based italic.\n converted = converted.replace(/_([^_\\n]+)_/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `_${formattedContent}_`;\n return storeReplacement(formatted);\n });\n\n // 7. Headers: Convert markdown headers (lines starting with '#' characters)\n // to bold text. This avoids unescaped '#' characters (which crash Telegram)\n // by removing them and wrapping the rest of the line in bold markers.\n converted = converted.replace(/^(#{1,6})\\s*(.*)$/gm, (_match, _hashes, headerContent: string) => {\n // Remove any trailing whitespace and escape the header text.\n const formatted = `*${escapePlainText(headerContent.trim())}*`;\n return storeReplacement(formatted);\n });\n\n // Define the placeholder marker as a string constant\n const NULL_CHAR = String.fromCharCode(0);\n const PLACEHOLDER_PATTERN = new RegExp(`(${NULL_CHAR}\\\\d+${NULL_CHAR})`, 'g');\n const PLACEHOLDER_TEST = new RegExp(`^${NULL_CHAR}\\\\d+${NULL_CHAR}$`);\n const PLACEHOLDER_REPLACE = new RegExp(`${NULL_CHAR}(\\\\d+)${NULL_CHAR}`, 'g');\n\n const finalEscaped = converted\n .split(PLACEHOLDER_PATTERN)\n .map((segment) => {\n // If the segment is a placeholder (matches the pattern), leave it untouched.\n if (PLACEHOLDER_TEST.test(segment)) {\n return segment;\n } else {\n // Otherwise, escape it while preserving any leading blockquote markers.\n return escapePlainTextPreservingBlockquote(segment);\n }\n })\n .join('');\n\n // Finally, substitute back all placeholders with their preformatted content.\n const finalResult = finalEscaped.replace(PLACEHOLDER_REPLACE, (_, index) => {\n return replacements[parseInt(index)];\n });\n\n return finalResult;\n}\n\n/**\n * Splits a message into chunks that fit within Telegram's message length limit\n */\n/**\n * Splits a text message into chunks based on a maximum length for each chunk.\n *\n * @param {string} text - The text message to split.\n * @param {number} maxLength - The maximum length for each chunk (default is 4096).\n * @returns {string[]} An array containing the text message split into chunks.\n */\nexport function splitMessage(text: string, maxLength = 4096): string[] {\n const chunks: string[] = [];\n if (!text) return chunks;\n let currentChunk = '';\n\n const lines = text.split('\\n');\n for (const line of lines) {\n if (currentChunk.length + line.length + 1 <= maxLength) {\n currentChunk += (currentChunk ? '\\n' : '') + line;\n } else {\n if (currentChunk) chunks.push(currentChunk);\n currentChunk = line;\n }\n }\n\n if (currentChunk) chunks.push(currentChunk);\n return chunks;\n}\n\n/**\n * Converts Eliza buttons into Telegram buttons\n * @param {Button[]} buttons - The buttons from Eliza content\n * @returns {InlineKeyboardButton[]} Array of Telegram buttons\n */\nexport function convertToTelegramButtons(buttons?: Button[] | null): InlineKeyboardButton[] {\n if (!buttons) return [];\n const telegramButtons: InlineKeyboardButton[] = [];\n\n for (const button of buttons) {\n // Validate button has required properties\n if (!button || !button.text || !button.url) {\n logger.warn({ button }, 'Invalid button configuration, skipping');\n continue;\n }\n\n let telegramButton: InlineKeyboardButton;\n switch (button.kind) {\n case 'login':\n telegramButton = Markup.button.login(button.text, button.url);\n break;\n case 'url':\n telegramButton = Markup.button.url(button.text, button.url);\n break;\n default:\n logger.warn({ src: 'plugin:telegram', buttonKind: button.kind }, 'Unknown button kind, treating as URL button');\n telegramButton = Markup.button.url(button.text, button.url);\n break;\n }\n\n telegramButtons.push(telegramButton);\n }\n\n return telegramButtons;\n}\n\n/**\n * Clean text by removing all NULL (\\u0000) characters\n * @param {string | undefined | null} text - The text to clean\n * @returns {string} The cleaned text\n */\nexport function cleanText(text: string | undefined | null): string {\n if (!text) return '';\n // Avoid control char in regex literal; lint-friendly\n return text.split('\\u0000').join('');\n}\n","import { type IAgentRuntime, type TestSuite, logger } from '@elizaos/core';\nimport type { Chat, User } from '@telegraf/types';\nimport type { Telegraf } from 'telegraf';\nimport type { Context } from 'telegraf';\nimport type { MessageManager } from './messageManager';\nimport type { TelegramService } from './service';\nimport type { TelegramContent } from './types';\n\nconst TEST_IMAGE_URL =\n 'https://github.com/elizaOS/awesome-eliza/blob/main/assets/eliza-logo.jpg?raw=true';\n\n/**\n * Represents a test suite for testing Telegram functionality.\n *\n * This test suite includes methods to initialize and validate a Telegram bot connection,\n * send basic text messages to a Telegram chat, send text messages with image attachments,\n * handle and process incoming Telegram messages, and process and validate image attachments\n * in incoming messages.\n *\n * @implements {TestSuite}\n */\n\nexport class TelegramTestSuite implements TestSuite {\n name = 'telegram';\n private telegramClient: TelegramService | null = null;\n private bot: Telegraf<Context> | null = null;\n private messageManager: MessageManager | null = null;\n tests: { name: string; fn: (runtime: IAgentRuntime) => Promise<void> }[];\n\n /**\n * Constructor for initializing a set of test cases for a Telegram bot.\n *\n * @constructor\n * @property {Array<Object>} tests - An array of test cases with name and corresponding test functions.\n * @property {string} tests.name - The name of the test case.\n * @property {function} tests.fn - The test function to be executed.\n */\n constructor() {\n this.tests = [\n {\n name: 'Initialize and Validate Telegram Bot Connection',\n fn: this.testCreatingTelegramBot.bind(this),\n },\n {\n name: 'Send Basic Text Message to Telegram Chat',\n fn: this.testSendingTextMessage.bind(this),\n },\n {\n name: 'Send Text Message with an Image Attachment',\n fn: this.testSendingMessageWithAttachment.bind(this),\n },\n {\n name: 'Handle and Process Incoming Telegram Messages',\n fn: this.testHandlingMessage.bind(this),\n },\n {\n name: 'Process and Validate Image Attachments in Incoming Messages',\n fn: this.testProcessingImages.bind(this),\n },\n ];\n }\n\n /**\n * Retrieves the Telegram test chat ID from environment variables.\n *\n * Reference on getting the Telegram chat ID:\n * https://stackoverflow.com/a/32572159\n */\n /**\n * Validates the chat ID by checking if it is set in the runtime settings or environment variables.\n * If not set, an error is thrown with a message instructing to provide a valid chat ID.\n * @param {IAgentRuntime} runtime - The runtime object that provides access to the settings and environment variables.\n * @throws {Error} If TELEGRAM_TEST_CHAT_ID is not set in the runtime settings or environment variables.\n * @returns {string} The validated chat ID.\n */\n validateChatId(runtime: IAgentRuntime): string | number {\n const testChatId =\n runtime.getSetting('TELEGRAM_TEST_CHAT_ID') || process.env.TELEGRAM_TEST_CHAT_ID;\n if (!testChatId || typeof testChatId === 'boolean') {\n throw new Error(\n 'TELEGRAM_TEST_CHAT_ID is not set. Please provide a valid chat ID in the environment variables.'\n );\n }\n return testChatId;\n }\n\n async getChatInfo(runtime: IAgentRuntime): Promise<Context['chat']> {\n try {\n const chatId = this.validateChatId(runtime);\n if (!this.bot) {\n throw new Error('Bot is not initialized.');\n }\n const chat = await this.bot.telegram.getChat(chatId);\n logger.debug({ src: 'plugin:telegram', chatId }, 'Fetched real chat');\n return chat;\n } catch (error) {\n throw new Error(`Error fetching real Telegram chat: ${error}`);\n }\n }\n\n async testCreatingTelegramBot(runtime: IAgentRuntime) {\n this.telegramClient = runtime.getService('telegram') as TelegramService;\n if (!this.telegramClient || !this.telegramClient.messageManager) {\n throw new Error(\n 'Telegram service or message manager not initialized - check TELEGRAM_BOT_TOKEN'\n );\n }\n this.bot = this.telegramClient.messageManager.bot;\n this.messageManager = this.telegramClient.messageManager;\n logger.debug({ src: 'plugin:telegram' }, 'Telegram bot initialized successfully');\n }\n\n async testSendingTextMessage(runtime: IAgentRuntime) {\n try {\n if (!this.bot) throw new Error('Bot not initialized.');\n\n const chatId = this.validateChatId(runtime);\n await this.bot.telegram.sendMessage(chatId, 'Testing Telegram message!');\n logger.debug({ src: 'plugin:telegram', chatId }, 'Message sent successfully');\n } catch (error) {\n throw new Error(`Error sending Telegram message: ${error}`);\n }\n }\n\n async testSendingMessageWithAttachment(runtime: IAgentRuntime) {\n try {\n if (!this.messageManager) throw new Error('MessageManager not initialized.');\n if (!this.bot) throw new Error('Bot not initialized.');\n\n const chat = await this.getChatInfo(runtime);\n const mockContext: Partial<Context> = {\n chat,\n from: { id: 123, username: 'TestUser' } as User,\n telegram: this.bot.telegram,\n };\n\n const messageContent = {\n text: 'Here is an image attachment:',\n attachments: [\n {\n id: '123',\n title: 'Sample Image',\n source: TEST_IMAGE_URL,\n text: 'Sample Image',\n url: TEST_IMAGE_URL,\n contentType: 'image/png',\n description: 'Sample Image',\n },\n ],\n };\n\n await this.messageManager.sendMessageInChunks(\n mockContext as Context,\n messageContent as TelegramContent\n );\n\n logger.success({ src: 'plugin:telegram' }, 'Message with image attachment sent successfully');\n } catch (error) {\n throw new Error(`Error sending Telegram message with attachment: ${error}`);\n }\n }\n\n async testHandlingMessage(runtime: IAgentRuntime) {\n try {\n if (!this.bot) throw new Error('Bot not initialized.');\n if (!this.messageManager) throw new Error('MessageManager not initialized.');\n\n const chat = await this.getChatInfo(runtime);\n const mockContext: Partial<Context> = {\n chat,\n from: {\n id: 123,\n username: 'TestUser',\n is_bot: false,\n first_name: 'Test',\n last_name: 'User',\n } as User,\n message: {\n message_id: undefined,\n text: `@${this.bot.botInfo?.username}! Hello!`,\n date: Math.floor(Date.now() / 1000),\n chat,\n } as any,\n telegram: this.bot.telegram,\n };\n\n try {\n await this.messageManager.handleMessage(mockContext as Context);\n } catch (error) {\n throw new Error(`Error handling Telegram message: ${error}`);\n }\n } catch (error) {\n throw new Error(`Error handling Telegram message: ${error}`);\n }\n }\n\n async testProcessingImages(runtime: IAgentRuntime) {\n try {\n if (!this.bot) throw new Error('Bot not initialized.');\n if (!this.messageManager) throw new Error('MessageManager not initialized.');\n\n const chatId = this.validateChatId(runtime);\n const fileId = await this.getFileId(String(chatId), TEST_IMAGE_URL);\n\n const mockMessage = {\n message_id: 12345,\n chat: { id: chatId, type: 'private' } as Chat,\n date: Math.floor(Date.now() / 1000),\n photo: [\n {\n file_id: fileId,\n file_unique_id: `unique_${fileId}`,\n width: 100,\n height: 100,\n },\n ],\n text: `@${this.bot.botInfo?.username}!`,\n };\n\n const result = await this.messageManager.processImage(mockMessage as any);\n if (!result || !result.description) {\n throw new Error('Error processing Telegram image or description not found');\n }\n const { description } = result;\n logger.debug({ src: 'plugin:telegram', description }, 'Processing Telegram image successfully');\n } catch (error) {\n throw new Error(`Error processing Telegram image: ${error}`);\n }\n }\n\n async getFileId(chatId: string, imageUrl: string) {\n try {\n if (!this.bot) {\n throw new Error('Bot is not initialized.');\n }\n const message = await this.bot.telegram.sendPhoto(chatId, imageUrl);\n if (!message.photo || message.photo.length === 0) {\n throw new Error('No photo received in the message response.');\n }\n return message.photo[message.photo.length - 1].file_id;\n } catch (error) {\n logger.error({ src: 'plugin:telegram', chatId, error: error instanceof Error ? error.message : String(error) }, 'Error sending image');\n throw error;\n }\n }\n}\n","import type { Plugin } from '@elizaos/core';\nimport { TELEGRAM_SERVICE_NAME } from './constants';\nimport { TelegramService } from './service';\nimport { TelegramTestSuite } from './tests';\nimport { MessageManager } from './messageManager';\n\nconst telegramPlugin: Plugin = {\n name: TELEGRAM_SERVICE_NAME,\n description: 'Telegram client plugin',\n services: [TelegramService],\n tests: [new TelegramTestSuite()],\n};\n\nexport { TelegramService, MessageManager };\nexport default telegramPlugin;\n"],"mappings":"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","names":["ChannelType","EventType","createUniqueUuid","logger","logger","Markup","logger","Markup","logger","createUniqueUuid","ChannelType","EventType","logger"]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/telegraf/node_modules/debug/node_modules/ms/index.js", "../../../../node_modules/telegraf/node_modules/debug/src/common.js", "../../../../node_modules/telegraf/node_modules/debug/src/browser.js", "../../../../node_modules/has-flag/index.js", "../../../../node_modules/supports-color/index.js", "../../../../node_modules/telegraf/node_modules/debug/src/node.js", "../../../../node_modules/telegraf/node_modules/debug/src/index.js", "../../../../node_modules/telegraf/lib/core/helpers/util.js", "../../../../node_modules/telegraf/lib/reactions.js", "../../../../node_modules/telegraf/lib/context.js", "../../../../node_modules/telegraf/lib/filters.js", "../../../../node_modules/telegraf/lib/core/helpers/args.js", "../../../../node_modules/telegraf/lib/composer.js", "../../../../node_modules/telegraf/lib/core/helpers/compact.js", "../../../../node_modules/telegraf/lib/core/network/webhook.js", "../../../../node_modules/event-target-shim/dist/event-target-shim.js", "../../../../node_modules/abort-controller/dist/abort-controller.js", "../../../../node_modules/telegraf/lib/core/network/error.js", "../../../../node_modules/telegraf/lib/core/network/polling.js", "../../../../node_modules/p-timeout/index.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/node_modules/webidl-conversions/lib/index.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/lib/utils.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/node_modules/tr46/index.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/lib/url-state-machine.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/lib/URL-impl.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/lib/URL.js", "../../../../node_modules/node-fetch/node_modules/whatwg-url/lib/public-api.js", "../../../../node_modules/safer-buffer/safer.js", "../../../../node_modules/encoding/node_modules/iconv-lite/lib/bom-handling.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/internal.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf32.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf16.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf7.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../../node_modules/encoding/node_modules/iconv-lite/encodings/index.js", "../../../../node_modules/encoding/node_modules/iconv-lite/lib/streams.js", "../../../../node_modules/encoding/node_modules/iconv-lite/lib/index.js", "../../../../node_modules/encoding/lib/encoding.js", "../../../../node_modules/node-fetch/lib/index.js", "../../../../node_modules/telegraf/lib/core/helpers/check.js", "../../../../node_modules/sandwich-stream/dist/sandwich-stream.js", "../../../../node_modules/telegraf/lib/core/network/multipart-stream.js", "../../../../node_modules/telegraf/lib/core/network/client.js", "../../../../node_modules/telegraf/lib/core/helpers/formatting.js", "../../../../node_modules/telegraf/lib/format.js", "../../../../node_modules/telegraf/lib/telegram.js", "../../../../node_modules/buffer-fill/index.js", "../../../../node_modules/buffer-alloc-unsafe/index.js", "../../../../node_modules/buffer-alloc/index.js", "../../../../node_modules/safe-compare/index.js", "../../../../node_modules/telegraf/lib/telegraf.js", "../../../../node_modules/telegraf/lib/router.js", "../../../../node_modules/telegraf/lib/button.js", "../../../../node_modules/telegraf/lib/markup.js", "../../../../node_modules/telegraf/lib/telegram-types.js", "../../../../node_modules/telegraf/lib/input.js", "../../../../node_modules/telegraf/lib/core/helpers/deunionize.js", "../../../../node_modules/telegraf/lib/session.js", "../../../../node_modules/telegraf/lib/scenes/context.js", "../../../../node_modules/telegraf/lib/scenes/stage.js", "../../../../node_modules/telegraf/lib/scenes/base.js", "../../../../node_modules/telegraf/lib/scenes/wizard/context.js", "../../../../node_modules/telegraf/lib/scenes/wizard/index.js", "../../../../node_modules/telegraf/lib/scenes/index.js", "../../../../node_modules/telegraf/lib/scenes.js", "../../../../node_modules/telegraf/lib/index.js", "../src/constants.ts", "../src/actions/sendMessage.ts", "../src/messageManager.ts", "../src/utils.ts", "../src/providers/chatState.ts", "../src/service.ts", "../src/tests.ts", "../src/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n",
|
|
6
|
+
"\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n",
|
|
7
|
+
"/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n",
|
|
8
|
+
"'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n",
|
|
9
|
+
"'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet flagForceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tflagForceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m') ||\n\t\t\thasFlag('color=full') ||\n\t\t\thasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream, options = {}) {\n\tconst level = supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options\n\t});\n\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel({isTTY: tty.isatty(1)}),\n\tstderr: getSupportLevel({isTTY: tty.isatty(2)})\n};\n",
|
|
10
|
+
"/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n",
|
|
11
|
+
"/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n",
|
|
12
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.indexed = exports.zip = exports.fmtCaption = exports.env = void 0;\nexports.env = process.env;\nfunction fmtCaption(extra) {\n if (!extra)\n return;\n const caption = extra.caption;\n if (!caption || typeof caption === 'string')\n return extra;\n const { text, entities } = caption;\n return {\n ...extra,\n caption: text,\n ...(entities && {\n caption_entities: entities,\n parse_mode: undefined,\n }),\n };\n}\nexports.fmtCaption = fmtCaption;\nfunction* zip(xs, ys) {\n const x = xs[Symbol.iterator]();\n const y = ys[Symbol.iterator]();\n let x1 = x.next();\n let y1 = y.next();\n while (!x1.done) {\n yield x1.value;\n if (!y1.done)\n yield y1.value;\n x1 = x.next();\n y1 = y.next();\n }\n while (!y1.done) {\n yield y1.value;\n y1 = y.next();\n }\n}\nexports.zip = zip;\nfunction indexed(target, indexer) {\n return new Proxy(target, {\n get: function (target, prop, receiver) {\n if ((typeof prop === 'string' || typeof prop === 'number') &&\n !isNaN(+prop))\n return indexer.call(target, +prop);\n return Reflect.get(target, prop, receiver);\n },\n });\n}\nexports.indexed = indexed;\n",
|
|
13
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MessageReactions = exports.ReactionList = exports.Digit = void 0;\nconst util_1 = require(\"./core/helpers/util\");\nexports.Digit = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);\nconst inspectReaction = (reaction) => {\n if (reaction.type === 'custom_emoji')\n return `Custom(${reaction.custom_emoji_id})`;\n else\n return reaction.emoji;\n};\nclass ReactionList {\n constructor(list) {\n this.list = list;\n }\n static fromArray(list = []) {\n return (0, util_1.indexed)(new ReactionList(list), function (index) {\n return this.list[index];\n });\n }\n static has(reactions, reaction) {\n if (typeof reaction === 'string')\n if (exports.Digit.has(reaction[0]))\n return reactions.some((r) => r.custom_emoji_id === reaction);\n else\n return reactions.some((r) => r.emoji === reaction);\n return reactions.some((r) => {\n if (r.type === 'custom_emoji')\n return r.custom_emoji_id === reaction.custom_emoji_id;\n else if (r.type === 'emoji')\n return r.emoji === reaction.emoji;\n });\n }\n toArray() {\n return [...this.list];\n }\n filter(filterFn) {\n return ReactionList.fromArray(this.list.filter(filterFn));\n }\n has(reaction) {\n return ReactionList.has(this.list, reaction);\n }\n get count() {\n return this.list.length;\n }\n [Symbol.iterator]() {\n return this.list[Symbol.iterator]();\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n const flattened = this.list.map(inspectReaction).join(', ');\n return ['ReactionList {', flattened, '}'].join(' ');\n }\n}\nexports.ReactionList = ReactionList;\nclass MessageReactions extends ReactionList {\n constructor(ctx) {\n var _a, _b;\n super((_b = (_a = ctx.update.message_reaction) === null || _a === void 0 ? void 0 : _a.new_reaction) !== null && _b !== void 0 ? _b : []);\n this.ctx = ctx;\n }\n static from(ctx) {\n return (0, util_1.indexed)(new MessageReactions(ctx), function (index) {\n return this.list[index];\n });\n }\n get old() {\n var _a;\n return ReactionList.fromArray((_a = this.ctx.update.message_reaction) === null || _a === void 0 ? void 0 : _a.old_reaction);\n }\n get new() {\n var _a;\n return ReactionList.fromArray((_a = this.ctx.update.message_reaction) === null || _a === void 0 ? void 0 : _a.new_reaction);\n }\n get added() {\n return this.new.filter((reaction) => !this.old.has(reaction));\n }\n get removed() {\n return this.old.filter((reaction) => !this.new.has(reaction));\n }\n get kept() {\n return this.new.filter((reaction) => this.old.has(reaction));\n }\n}\nexports.MessageReactions = MessageReactions;\n",
|
|
14
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst debug_1 = __importDefault(require(\"debug\"));\nconst reactions_1 = require(\"./reactions\");\nconst debug = (0, debug_1.default)('telegraf:context');\nclass Context {\n constructor(update, telegram, botInfo) {\n this.update = update;\n this.telegram = telegram;\n this.botInfo = botInfo;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.state = {};\n }\n get updateType() {\n for (const key in this.update) {\n if (typeof this.update[key] === 'object')\n return key;\n }\n throw new Error(`Cannot determine \\`updateType\\` of ${JSON.stringify(this.update)}`);\n }\n get me() {\n var _a;\n return (_a = this.botInfo) === null || _a === void 0 ? void 0 : _a.username;\n }\n /**\n * @deprecated Use ctx.telegram instead\n */\n get tg() {\n return this.telegram;\n }\n get message() {\n return this.update.message;\n }\n get editedMessage() {\n return this.update.edited_message;\n }\n get inlineQuery() {\n return this.update.inline_query;\n }\n get shippingQuery() {\n return this.update.shipping_query;\n }\n get preCheckoutQuery() {\n return this.update.pre_checkout_query;\n }\n get chosenInlineResult() {\n return this.update.chosen_inline_result;\n }\n get channelPost() {\n return this.update.channel_post;\n }\n get editedChannelPost() {\n return this.update.edited_channel_post;\n }\n get messageReaction() {\n return this.update.message_reaction;\n }\n get messageReactionCount() {\n return this.update.message_reaction_count;\n }\n get callbackQuery() {\n return this.update.callback_query;\n }\n get poll() {\n return this.update.poll;\n }\n get pollAnswer() {\n return this.update.poll_answer;\n }\n get myChatMember() {\n return this.update.my_chat_member;\n }\n get chatMember() {\n return this.update.chat_member;\n }\n get chatJoinRequest() {\n return this.update.chat_join_request;\n }\n get chatBoost() {\n return this.update.chat_boost;\n }\n get removedChatBoost() {\n return this.update.removed_chat_boost;\n }\n /** Shorthand for any `message` object present in the current update. One of\n * `message`, `edited_message`, `channel_post`, `edited_channel_post` or\n * `callback_query.message`\n */\n get msg() {\n return getMessageFromAnySource(this);\n }\n /** Shorthand for any message_id present in the current update. */\n get msgId() {\n return getMsgIdFromAnySource(this);\n }\n get chat() {\n var _a, _b, _c, _d, _e, _f, _g;\n return (_g = ((_f = (_e = (_d = (_c = (_b = (_a = this.msg) !== null && _a !== void 0 ? _a : this.messageReaction) !== null && _b !== void 0 ? _b : this.messageReactionCount) !== null && _c !== void 0 ? _c : this.chatJoinRequest) !== null && _d !== void 0 ? _d : this.chatMember) !== null && _e !== void 0 ? _e : this.myChatMember) !== null && _f !== void 0 ? _f : this.removedChatBoost)) === null || _g === void 0 ? void 0 : _g.chat;\n }\n get senderChat() {\n const msg = this.msg;\n return ((msg === null || msg === void 0 ? void 0 : msg.has('sender_chat')) && msg.sender_chat);\n }\n get from() {\n return getUserFromAnySource(this);\n }\n get inlineMessageId() {\n var _a, _b;\n return (_b = ((_a = this.callbackQuery) !== null && _a !== void 0 ? _a : this.chosenInlineResult)) === null || _b === void 0 ? void 0 : _b.inline_message_id;\n }\n get passportData() {\n var _a;\n if (this.message == null)\n return undefined;\n if (!('passport_data' in this.message))\n return undefined;\n return (_a = this.message) === null || _a === void 0 ? void 0 : _a.passport_data;\n }\n get webAppData() {\n if (!(this.message && 'web_app_data' in this.message))\n return undefined;\n const { data, button_text } = this.message.web_app_data;\n return {\n data: {\n json() {\n return JSON.parse(data);\n },\n text() {\n return data;\n },\n },\n button_text,\n };\n }\n /**\n * @deprecated use {@link Telegram.webhookReply}\n */\n get webhookReply() {\n return this.telegram.webhookReply;\n }\n set webhookReply(enable) {\n this.telegram.webhookReply = enable;\n }\n get reactions() {\n return reactions_1.MessageReactions.from(this);\n }\n /**\n * @internal\n */\n assert(value, method) {\n if (value === undefined) {\n throw new TypeError(`Telegraf: \"${method}\" isn't available for \"${this.updateType}\"`);\n }\n }\n has(filters) {\n if (!Array.isArray(filters))\n filters = [filters];\n for (const filter of filters)\n if (\n // TODO: this should change to === 'function' once TS bug is fixed\n // https://github.com/microsoft/TypeScript/pull/51502\n typeof filter !== 'string'\n ? // filter is a type guard\n filter(this.update)\n : // check if filter is the update type\n filter in this.update)\n return true;\n return false;\n }\n get text() {\n return getTextAndEntitiesFromAnySource(this)[0];\n }\n entities(...types) {\n const [text = '', entities = []] = getTextAndEntitiesFromAnySource(this);\n return (types.length\n ? entities.filter((entity) => types.includes(entity.type))\n : entities).map((entity) => ({\n ...entity,\n fragment: text.slice(entity.offset, entity.offset + entity.length),\n }));\n }\n /**\n * @see https://core.telegram.org/bots/api#answerinlinequery\n */\n answerInlineQuery(...args) {\n this.assert(this.inlineQuery, 'answerInlineQuery');\n return this.telegram.answerInlineQuery(this.inlineQuery.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#answercallbackquery\n */\n answerCbQuery(...args) {\n this.assert(this.callbackQuery, 'answerCbQuery');\n return this.telegram.answerCbQuery(this.callbackQuery.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#answercallbackquery\n */\n answerGameQuery(...args) {\n this.assert(this.callbackQuery, 'answerGameQuery');\n return this.telegram.answerGameQuery(this.callbackQuery.id, ...args);\n }\n /**\n * Shorthand for {@link Telegram.getUserChatBoosts}\n */\n getUserChatBoosts() {\n this.assert(this.chat, 'getUserChatBoosts');\n this.assert(this.from, 'getUserChatBoosts');\n return this.telegram.getUserChatBoosts(this.chat.id, this.from.id);\n }\n /**\n * @see https://core.telegram.org/bots/api#answershippingquery\n */\n answerShippingQuery(...args) {\n this.assert(this.shippingQuery, 'answerShippingQuery');\n return this.telegram.answerShippingQuery(this.shippingQuery.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#answerprecheckoutquery\n */\n answerPreCheckoutQuery(...args) {\n this.assert(this.preCheckoutQuery, 'answerPreCheckoutQuery');\n return this.telegram.answerPreCheckoutQuery(this.preCheckoutQuery.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#editmessagetext\n */\n editMessageText(text, extra) {\n var _a, _b;\n this.assert((_a = this.msgId) !== null && _a !== void 0 ? _a : this.inlineMessageId, 'editMessageText');\n return this.telegram.editMessageText((_b = this.chat) === null || _b === void 0 ? void 0 : _b.id, this.msgId, this.inlineMessageId, text, extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#editmessagecaption\n */\n editMessageCaption(caption, extra) {\n var _a, _b;\n this.assert((_a = this.msgId) !== null && _a !== void 0 ? _a : this.inlineMessageId, 'editMessageCaption');\n return this.telegram.editMessageCaption((_b = this.chat) === null || _b === void 0 ? void 0 : _b.id, this.msgId, this.inlineMessageId, caption, extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#editmessagemedia\n */\n editMessageMedia(media, extra) {\n var _a, _b;\n this.assert((_a = this.msgId) !== null && _a !== void 0 ? _a : this.inlineMessageId, 'editMessageMedia');\n return this.telegram.editMessageMedia((_b = this.chat) === null || _b === void 0 ? void 0 : _b.id, this.msgId, this.inlineMessageId, media, extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#editmessagereplymarkup\n */\n editMessageReplyMarkup(markup) {\n var _a, _b;\n this.assert((_a = this.msgId) !== null && _a !== void 0 ? _a : this.inlineMessageId, 'editMessageReplyMarkup');\n return this.telegram.editMessageReplyMarkup((_b = this.chat) === null || _b === void 0 ? void 0 : _b.id, this.msgId, this.inlineMessageId, markup);\n }\n /**\n * @see https://core.telegram.org/bots/api#editmessagelivelocation\n */\n editMessageLiveLocation(latitude, longitude, extra) {\n var _a, _b;\n this.assert((_a = this.msgId) !== null && _a !== void 0 ? _a : this.inlineMessageId, 'editMessageLiveLocation');\n return this.telegram.editMessageLiveLocation((_b = this.chat) === null || _b === void 0 ? void 0 : _b.id, this.msgId, this.inlineMessageId, latitude, longitude, extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#stopmessagelivelocation\n */\n stopMessageLiveLocation(markup) {\n var _a, _b;\n this.assert((_a = this.msgId) !== null && _a !== void 0 ? _a : this.inlineMessageId, 'stopMessageLiveLocation');\n return this.telegram.stopMessageLiveLocation((_b = this.chat) === null || _b === void 0 ? void 0 : _b.id, this.msgId, this.inlineMessageId, markup);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendmessage\n */\n sendMessage(text, extra) {\n this.assert(this.chat, 'sendMessage');\n return this.telegram.sendMessage(this.chat.id, text, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendmessage\n */\n reply(...args) {\n return this.sendMessage(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#getchat\n */\n getChat(...args) {\n this.assert(this.chat, 'getChat');\n return this.telegram.getChat(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#exportchatinvitelink\n */\n exportChatInviteLink(...args) {\n this.assert(this.chat, 'exportChatInviteLink');\n return this.telegram.exportChatInviteLink(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#createchatinvitelink\n */\n createChatInviteLink(...args) {\n this.assert(this.chat, 'createChatInviteLink');\n return this.telegram.createChatInviteLink(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#editchatinvitelink\n */\n editChatInviteLink(...args) {\n this.assert(this.chat, 'editChatInviteLink');\n return this.telegram.editChatInviteLink(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#revokechatinvitelink\n */\n revokeChatInviteLink(...args) {\n this.assert(this.chat, 'revokeChatInviteLink');\n return this.telegram.revokeChatInviteLink(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#banchatmember\n */\n banChatMember(...args) {\n this.assert(this.chat, 'banChatMember');\n return this.telegram.banChatMember(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#banchatmember\n * @deprecated since API 5.3. Use {@link Context.banChatMember}\n */\n get kickChatMember() {\n return this.banChatMember;\n }\n /**\n * @see https://core.telegram.org/bots/api#unbanchatmember\n */\n unbanChatMember(...args) {\n this.assert(this.chat, 'unbanChatMember');\n return this.telegram.unbanChatMember(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#restrictchatmember\n */\n restrictChatMember(...args) {\n this.assert(this.chat, 'restrictChatMember');\n return this.telegram.restrictChatMember(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#promotechatmember\n */\n promoteChatMember(...args) {\n this.assert(this.chat, 'promoteChatMember');\n return this.telegram.promoteChatMember(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#setchatadministratorcustomtitle\n */\n setChatAdministratorCustomTitle(...args) {\n this.assert(this.chat, 'setChatAdministratorCustomTitle');\n return this.telegram.setChatAdministratorCustomTitle(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#setchatphoto\n */\n setChatPhoto(...args) {\n this.assert(this.chat, 'setChatPhoto');\n return this.telegram.setChatPhoto(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#deletechatphoto\n */\n deleteChatPhoto(...args) {\n this.assert(this.chat, 'deleteChatPhoto');\n return this.telegram.deleteChatPhoto(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#setchattitle\n */\n setChatTitle(...args) {\n this.assert(this.chat, 'setChatTitle');\n return this.telegram.setChatTitle(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#setchatdescription\n */\n setChatDescription(...args) {\n this.assert(this.chat, 'setChatDescription');\n return this.telegram.setChatDescription(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#pinchatmessage\n */\n pinChatMessage(...args) {\n this.assert(this.chat, 'pinChatMessage');\n return this.telegram.pinChatMessage(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#unpinchatmessage\n */\n unpinChatMessage(...args) {\n this.assert(this.chat, 'unpinChatMessage');\n return this.telegram.unpinChatMessage(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#unpinallchatmessages\n */\n unpinAllChatMessages(...args) {\n this.assert(this.chat, 'unpinAllChatMessages');\n return this.telegram.unpinAllChatMessages(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#leavechat\n */\n leaveChat(...args) {\n this.assert(this.chat, 'leaveChat');\n return this.telegram.leaveChat(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#setchatpermissions\n */\n setChatPermissions(...args) {\n this.assert(this.chat, 'setChatPermissions');\n return this.telegram.setChatPermissions(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#getchatadministrators\n */\n getChatAdministrators(...args) {\n this.assert(this.chat, 'getChatAdministrators');\n return this.telegram.getChatAdministrators(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#getchatmember\n */\n getChatMember(...args) {\n this.assert(this.chat, 'getChatMember');\n return this.telegram.getChatMember(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#getchatmembercount\n */\n getChatMembersCount(...args) {\n this.assert(this.chat, 'getChatMembersCount');\n return this.telegram.getChatMembersCount(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#setpassportdataerrors\n */\n setPassportDataErrors(errors) {\n this.assert(this.from, 'setPassportDataErrors');\n return this.telegram.setPassportDataErrors(this.from.id, errors);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendphoto\n */\n sendPhoto(photo, extra) {\n this.assert(this.chat, 'sendPhoto');\n return this.telegram.sendPhoto(this.chat.id, photo, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendphoto\n */\n replyWithPhoto(...args) {\n return this.sendPhoto(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendmediagroup\n */\n sendMediaGroup(media, extra) {\n this.assert(this.chat, 'sendMediaGroup');\n return this.telegram.sendMediaGroup(this.chat.id, media, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendmediagroup\n */\n replyWithMediaGroup(...args) {\n return this.sendMediaGroup(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendaudio\n */\n sendAudio(audio, extra) {\n this.assert(this.chat, 'sendAudio');\n return this.telegram.sendAudio(this.chat.id, audio, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendaudio\n */\n replyWithAudio(...args) {\n return this.sendAudio(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#senddice\n */\n sendDice(extra) {\n this.assert(this.chat, 'sendDice');\n return this.telegram.sendDice(this.chat.id, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#senddice\n */\n replyWithDice(...args) {\n return this.sendDice(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#senddocument\n */\n sendDocument(document, extra) {\n this.assert(this.chat, 'sendDocument');\n return this.telegram.sendDocument(this.chat.id, document, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#senddocument\n */\n replyWithDocument(...args) {\n return this.sendDocument(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendsticker\n */\n sendSticker(sticker, extra) {\n this.assert(this.chat, 'sendSticker');\n return this.telegram.sendSticker(this.chat.id, sticker, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendsticker\n */\n replyWithSticker(...args) {\n return this.sendSticker(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvideo\n */\n sendVideo(video, extra) {\n this.assert(this.chat, 'sendVideo');\n return this.telegram.sendVideo(this.chat.id, video, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvideo\n */\n replyWithVideo(...args) {\n return this.sendVideo(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendanimation\n */\n sendAnimation(animation, extra) {\n this.assert(this.chat, 'sendAnimation');\n return this.telegram.sendAnimation(this.chat.id, animation, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendanimation\n */\n replyWithAnimation(...args) {\n return this.sendAnimation(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvideonote\n */\n sendVideoNote(videoNote, extra) {\n this.assert(this.chat, 'sendVideoNote');\n return this.telegram.sendVideoNote(this.chat.id, videoNote, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvideonote\n */\n replyWithVideoNote(...args) {\n return this.sendVideoNote(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendinvoice\n */\n sendInvoice(invoice, extra) {\n this.assert(this.chat, 'sendInvoice');\n return this.telegram.sendInvoice(this.chat.id, invoice, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendinvoice\n */\n replyWithInvoice(...args) {\n return this.sendInvoice(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendgame\n */\n sendGame(game, extra) {\n this.assert(this.chat, 'sendGame');\n return this.telegram.sendGame(this.chat.id, game, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendgame\n */\n replyWithGame(...args) {\n return this.sendGame(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvoice\n */\n sendVoice(voice, extra) {\n this.assert(this.chat, 'sendVoice');\n return this.telegram.sendVoice(this.chat.id, voice, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvoice\n */\n replyWithVoice(...args) {\n return this.sendVoice(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendpoll\n */\n sendPoll(poll, options, extra) {\n this.assert(this.chat, 'sendPoll');\n return this.telegram.sendPoll(this.chat.id, poll, options, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendpoll\n */\n replyWithPoll(...args) {\n return this.sendPoll(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendpoll\n */\n sendQuiz(quiz, options, extra) {\n this.assert(this.chat, 'sendQuiz');\n return this.telegram.sendQuiz(this.chat.id, quiz, options, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendpoll\n */\n replyWithQuiz(...args) {\n return this.sendQuiz(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#stoppoll\n */\n stopPoll(...args) {\n this.assert(this.chat, 'stopPoll');\n return this.telegram.stopPoll(this.chat.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendchataction\n */\n sendChatAction(action, extra) {\n this.assert(this.chat, 'sendChatAction');\n return this.telegram.sendChatAction(this.chat.id, action, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendchataction\n *\n * Sends the sendChatAction request repeatedly, with a delay between requests,\n * as long as the provided callback function is being processed.\n *\n * The sendChatAction errors should be ignored, because the goal is the actual long process completing and performing an action.\n *\n * @param action - chat action type.\n * @param callback - a function to run along with the chat action.\n * @param extra - extra parameters for sendChatAction.\n * @param {number} [extra.intervalDuration=8000] - The duration (in milliseconds) between subsequent sendChatAction requests.\n */\n async persistentChatAction(action, callback, { intervalDuration, ...extra } = {}) {\n await this.sendChatAction(action, { ...extra });\n const timer = setInterval(() => this.sendChatAction(action, { ...extra }).catch((err) => {\n debug('Ignored error while persisting sendChatAction:', err);\n }), intervalDuration !== null && intervalDuration !== void 0 ? intervalDuration : 4000);\n try {\n await callback();\n }\n finally {\n clearInterval(timer);\n }\n }\n /**\n * @deprecated use {@link Context.sendChatAction} instead\n * @see https://core.telegram.org/bots/api#sendchataction\n */\n replyWithChatAction(...args) {\n return this.sendChatAction(...args);\n }\n /**\n * Shorthand for {@link Telegram.setMessageReaction}\n * @param reaction An emoji or custom_emoji_id to set as reaction to current message. Leave empty to remove reactions.\n * @param is_big Pass True to set the reaction with a big animation\n */\n react(reaction, is_big) {\n this.assert(this.chat, 'setMessageReaction');\n this.assert(this.msgId, 'setMessageReaction');\n const emojis = reaction\n ? Array.isArray(reaction)\n ? reaction\n : [reaction]\n : undefined;\n const reactions = emojis === null || emojis === void 0 ? void 0 : emojis.map((emoji) => typeof emoji === 'string'\n ? reactions_1.Digit.has(emoji[0])\n ? { type: 'custom_emoji', custom_emoji_id: emoji }\n : { type: 'emoji', emoji: emoji }\n : emoji);\n return this.telegram.setMessageReaction(this.chat.id, this.msgId, reactions, is_big);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendlocation\n */\n sendLocation(latitude, longitude, extra) {\n this.assert(this.chat, 'sendLocation');\n return this.telegram.sendLocation(this.chat.id, latitude, longitude, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendlocation\n */\n replyWithLocation(...args) {\n return this.sendLocation(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvenue\n */\n sendVenue(latitude, longitude, title, address, extra) {\n this.assert(this.chat, 'sendVenue');\n return this.telegram.sendVenue(this.chat.id, latitude, longitude, title, address, { message_thread_id: getThreadId(this), ...extra });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendvenue\n */\n replyWithVenue(...args) {\n return this.sendVenue(...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#sendcontact\n */\n sendContact(phoneNumber, firstName, extra) {\n this.assert(this.chat, 'sendContact');\n return this.telegram.sendContact(this.chat.id, phoneNumber, firstName, {\n message_thread_id: getThreadId(this),\n ...extra,\n });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendcontact\n */\n replyWithContact(...args) {\n return this.sendContact(...args);\n }\n /**\n * @deprecated use {@link Telegram.getStickerSet}\n * @see https://core.telegram.org/bots/api#getstickerset\n */\n getStickerSet(setName) {\n return this.telegram.getStickerSet(setName);\n }\n /**\n * @see https://core.telegram.org/bots/api#setchatstickerset\n */\n setChatStickerSet(setName) {\n this.assert(this.chat, 'setChatStickerSet');\n return this.telegram.setChatStickerSet(this.chat.id, setName);\n }\n /**\n * @see https://core.telegram.org/bots/api#deletechatstickerset\n */\n deleteChatStickerSet() {\n this.assert(this.chat, 'deleteChatStickerSet');\n return this.telegram.deleteChatStickerSet(this.chat.id);\n }\n /**\n * Use this method to create a topic in a forum supergroup chat. The bot must be an administrator in the chat for this\n * to work and must have the can_manage_topics administrator rights. Returns information about the created topic as a\n * ForumTopic object.\n *\n * @see https://core.telegram.org/bots/api#createforumtopic\n */\n createForumTopic(...args) {\n this.assert(this.chat, 'createForumTopic');\n return this.telegram.createForumTopic(this.chat.id, ...args);\n }\n /**\n * Use this method to edit name and icon of a topic in a forum supergroup chat. The bot must be an administrator in\n * the chat for this to work and must have can_manage_topics administrator rights, unless it is the creator of the\n * topic. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#editforumtopic\n */\n editForumTopic(extra) {\n var _a;\n this.assert(this.chat, 'editForumTopic');\n this.assert((_a = this.message) === null || _a === void 0 ? void 0 : _a.message_thread_id, 'editForumTopic');\n return this.telegram.editForumTopic(this.chat.id, this.message.message_thread_id, extra);\n }\n /**\n * Use this method to close an open topic in a forum supergroup chat. The bot must be an administrator in the chat\n * for this to work and must have the can_manage_topics administrator rights, unless it is the creator of the topic.\n * Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#closeforumtopic\n */\n closeForumTopic() {\n var _a;\n this.assert(this.chat, 'closeForumTopic');\n this.assert((_a = this.message) === null || _a === void 0 ? void 0 : _a.message_thread_id, 'closeForumTopic');\n return this.telegram.closeForumTopic(this.chat.id, this.message.message_thread_id);\n }\n /**\n * Use this method to reopen a closed topic in a forum supergroup chat. The bot must be an administrator in the chat\n * for this to work and must have the can_manage_topics administrator rights, unless it is the creator of the topic.\n * Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#reopenforumtopic\n */\n reopenForumTopic() {\n var _a;\n this.assert(this.chat, 'reopenForumTopic');\n this.assert((_a = this.message) === null || _a === void 0 ? void 0 : _a.message_thread_id, 'reopenForumTopic');\n return this.telegram.reopenForumTopic(this.chat.id, this.message.message_thread_id);\n }\n /**\n * Use this method to delete a forum topic along with all its messages in a forum supergroup chat. The bot must be an\n * administrator in the chat for this to work and must have the can_delete_messages administrator rights.\n * Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#deleteforumtopic\n */\n deleteForumTopic() {\n var _a;\n this.assert(this.chat, 'deleteForumTopic');\n this.assert((_a = this.message) === null || _a === void 0 ? void 0 : _a.message_thread_id, 'deleteForumTopic');\n return this.telegram.deleteForumTopic(this.chat.id, this.message.message_thread_id);\n }\n /**\n * Use this method to clear the list of pinned messages in a forum topic. The bot must be an administrator in the chat\n * for this to work and must have the can_pin_messages administrator right in the supergroup. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#unpinallforumtopicmessages\n */\n unpinAllForumTopicMessages() {\n var _a;\n this.assert(this.chat, 'unpinAllForumTopicMessages');\n this.assert((_a = this.message) === null || _a === void 0 ? void 0 : _a.message_thread_id, 'unpinAllForumTopicMessages');\n return this.telegram.unpinAllForumTopicMessages(this.chat.id, this.message.message_thread_id);\n }\n /**\n * Use this method to edit the name of the 'General' topic in a forum supergroup chat. The bot must be an administrator\n * in the chat for this to work and must have can_manage_topics administrator rights. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#editgeneralforumtopic\n */\n editGeneralForumTopic(name) {\n this.assert(this.chat, 'editGeneralForumTopic');\n return this.telegram.editGeneralForumTopic(this.chat.id, name);\n }\n /**\n * Use this method to close an open 'General' topic in a forum supergroup chat. The bot must be an administrator in the\n * chat for this to work and must have the can_manage_topics administrator rights. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#closegeneralforumtopic\n */\n closeGeneralForumTopic() {\n this.assert(this.chat, 'closeGeneralForumTopic');\n return this.telegram.closeGeneralForumTopic(this.chat.id);\n }\n /**\n * Use this method to reopen a closed 'General' topic in a forum supergroup chat. The bot must be an administrator in\n * the chat for this to work and must have the can_manage_topics administrator rights. The topic will be automatically\n * unhidden if it was hidden. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#reopengeneralforumtopic\n */\n reopenGeneralForumTopic() {\n this.assert(this.chat, 'reopenGeneralForumTopic');\n return this.telegram.reopenGeneralForumTopic(this.chat.id);\n }\n /**\n * Use this method to hide the 'General' topic in a forum supergroup chat. The bot must be an administrator in the chat\n * for this to work and must have the can_manage_topics administrator rights. The topic will be automatically closed\n * if it was open. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#hidegeneralforumtopic\n */\n hideGeneralForumTopic() {\n this.assert(this.chat, 'hideGeneralForumTopic');\n return this.telegram.hideGeneralForumTopic(this.chat.id);\n }\n /**\n * Use this method to unhide the 'General' topic in a forum supergroup chat. The bot must be an administrator in the\n * chat for this to work and must have the can_manage_topics administrator rights. Returns True on success.\n *\n * @see https://core.telegram.org/bots/api#unhidegeneralforumtopic\n */\n unhideGeneralForumTopic() {\n this.assert(this.chat, 'unhideGeneralForumTopic');\n return this.telegram.unhideGeneralForumTopic(this.chat.id);\n }\n /**\n * Use this method to clear the list of pinned messages in a General forum topic.\n * The bot must be an administrator in the chat for this to work and must have the can_pin_messages administrator\n * right in the supergroup.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n *\n * @see https://core.telegram.org/bots/api#unpinallgeneralforumtopicmessages\n */\n unpinAllGeneralForumTopicMessages() {\n this.assert(this.chat, 'unpinAllGeneralForumTopicMessages');\n return this.telegram.unpinAllGeneralForumTopicMessages(this.chat.id);\n }\n /**\n * @deprecated use {@link Telegram.setStickerPositionInSet}\n * @see https://core.telegram.org/bots/api#setstickerpositioninset\n */\n setStickerPositionInSet(sticker, position) {\n return this.telegram.setStickerPositionInSet(sticker, position);\n }\n /**\n * @deprecated use {@link Telegram.setStickerSetThumbnail}\n * @see https://core.telegram.org/bots/api#setstickersetthumbnail\n */\n setStickerSetThumb(...args) {\n return this.telegram.setStickerSetThumbnail(...args);\n }\n setStickerSetThumbnail(...args) {\n return this.telegram.setStickerSetThumbnail(...args);\n }\n setStickerMaskPosition(...args) {\n return this.telegram.setStickerMaskPosition(...args);\n }\n setStickerKeywords(...args) {\n return this.telegram.setStickerKeywords(...args);\n }\n setStickerEmojiList(...args) {\n return this.telegram.setStickerEmojiList(...args);\n }\n deleteStickerSet(...args) {\n return this.telegram.deleteStickerSet(...args);\n }\n setStickerSetTitle(...args) {\n return this.telegram.setStickerSetTitle(...args);\n }\n setCustomEmojiStickerSetThumbnail(...args) {\n return this.telegram.setCustomEmojiStickerSetThumbnail(...args);\n }\n /**\n * @deprecated use {@link Telegram.deleteStickerFromSet}\n * @see https://core.telegram.org/bots/api#deletestickerfromset\n */\n deleteStickerFromSet(sticker) {\n return this.telegram.deleteStickerFromSet(sticker);\n }\n /**\n * @see https://core.telegram.org/bots/api#uploadstickerfile\n */\n uploadStickerFile(...args) {\n this.assert(this.from, 'uploadStickerFile');\n return this.telegram.uploadStickerFile(this.from.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#createnewstickerset\n */\n createNewStickerSet(...args) {\n this.assert(this.from, 'createNewStickerSet');\n return this.telegram.createNewStickerSet(this.from.id, ...args);\n }\n /**\n * @see https://core.telegram.org/bots/api#addstickertoset\n */\n addStickerToSet(...args) {\n this.assert(this.from, 'addStickerToSet');\n return this.telegram.addStickerToSet(this.from.id, ...args);\n }\n /**\n * @deprecated use {@link Telegram.getMyCommands}\n * @see https://core.telegram.org/bots/api#getmycommands\n */\n getMyCommands() {\n return this.telegram.getMyCommands();\n }\n /**\n * @deprecated use {@link Telegram.setMyCommands}\n * @see https://core.telegram.org/bots/api#setmycommands\n */\n setMyCommands(commands) {\n return this.telegram.setMyCommands(commands);\n }\n /**\n * @deprecated use {@link Context.replyWithMarkdownV2}\n * @see https://core.telegram.org/bots/api#sendmessage\n */\n replyWithMarkdown(markdown, extra) {\n return this.reply(markdown, { parse_mode: 'Markdown', ...extra });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendmessage\n */\n replyWithMarkdownV2(markdown, extra) {\n return this.reply(markdown, { parse_mode: 'MarkdownV2', ...extra });\n }\n /**\n * @see https://core.telegram.org/bots/api#sendmessage\n */\n replyWithHTML(html, extra) {\n return this.reply(html, { parse_mode: 'HTML', ...extra });\n }\n /**\n * @see https://core.telegram.org/bots/api#deletemessage\n */\n deleteMessage(messageId) {\n this.assert(this.chat, 'deleteMessage');\n if (typeof messageId !== 'undefined')\n return this.telegram.deleteMessage(this.chat.id, messageId);\n this.assert(this.msgId, 'deleteMessage');\n return this.telegram.deleteMessage(this.chat.id, this.msgId);\n }\n /**\n * Context-aware shorthand for {@link Telegram.deleteMessages}\n * @param messageIds Identifiers of 1-100 messages to delete. See deleteMessage for limitations on which messages can be deleted\n */\n deleteMessages(messageIds) {\n this.assert(this.chat, 'deleteMessages');\n return this.telegram.deleteMessages(this.chat.id, messageIds);\n }\n /**\n * @see https://core.telegram.org/bots/api#forwardmessage\n */\n forwardMessage(chatId, extra) {\n this.assert(this.chat, 'forwardMessage');\n this.assert(this.msgId, 'forwardMessage');\n return this.telegram.forwardMessage(chatId, this.chat.id, this.msgId, extra);\n }\n /**\n * Shorthand for {@link Telegram.forwardMessages}\n * @see https://core.telegram.org/bots/api#forwardmessages\n */\n forwardMessages(chatId, messageIds, extra) {\n this.assert(this.chat, 'forwardMessages');\n return this.telegram.forwardMessages(chatId, this.chat.id, messageIds, extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#copymessage\n */\n copyMessage(chatId, extra) {\n this.assert(this.chat, 'copyMessage');\n this.assert(this.msgId, 'copyMessage');\n return this.telegram.copyMessage(chatId, this.chat.id, this.msgId, extra);\n }\n /**\n * Context-aware shorthand for {@link Telegram.copyMessages}\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageIds Identifiers of 1-100 messages in the chat from_chat_id to copy. The identifiers must be specified in a strictly increasing order.\n */\n copyMessages(chatId, messageIds, extra) {\n var _a;\n this.assert(this.chat, 'copyMessages');\n return this.telegram.copyMessages(chatId, (_a = this.chat) === null || _a === void 0 ? void 0 : _a.id, messageIds, extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#approvechatjoinrequest\n */\n approveChatJoinRequest(userId) {\n this.assert(this.chat, 'approveChatJoinRequest');\n return this.telegram.approveChatJoinRequest(this.chat.id, userId);\n }\n /**\n * @see https://core.telegram.org/bots/api#declinechatjoinrequest\n */\n declineChatJoinRequest(userId) {\n this.assert(this.chat, 'declineChatJoinRequest');\n return this.telegram.declineChatJoinRequest(this.chat.id, userId);\n }\n /**\n * @see https://core.telegram.org/bots/api#banchatsenderchat\n */\n banChatSenderChat(senderChatId) {\n this.assert(this.chat, 'banChatSenderChat');\n return this.telegram.banChatSenderChat(this.chat.id, senderChatId);\n }\n /**\n * @see https://core.telegram.org/bots/api#unbanchatsenderchat\n */\n unbanChatSenderChat(senderChatId) {\n this.assert(this.chat, 'unbanChatSenderChat');\n return this.telegram.unbanChatSenderChat(this.chat.id, senderChatId);\n }\n /**\n * Use this method to change the bot's menu button in the current private chat. Returns true on success.\n * @see https://core.telegram.org/bots/api#setchatmenubutton\n */\n setChatMenuButton(menuButton) {\n this.assert(this.chat, 'setChatMenuButton');\n return this.telegram.setChatMenuButton({ chatId: this.chat.id, menuButton });\n }\n /**\n * Use this method to get the current value of the bot's menu button in the current private chat. Returns MenuButton on success.\n * @see https://core.telegram.org/bots/api#getchatmenubutton\n */\n getChatMenuButton() {\n this.assert(this.chat, 'getChatMenuButton');\n return this.telegram.getChatMenuButton({ chatId: this.chat.id });\n }\n /**\n * @see https://core.telegram.org/bots/api#setmydefaultadministratorrights\n */\n setMyDefaultAdministratorRights(extra) {\n return this.telegram.setMyDefaultAdministratorRights(extra);\n }\n /**\n * @see https://core.telegram.org/bots/api#getmydefaultadministratorrights\n */\n getMyDefaultAdministratorRights(extra) {\n return this.telegram.getMyDefaultAdministratorRights(extra);\n }\n}\nexports.Context = Context;\nexports.default = Context;\nconst Msg = {\n isAccessible() {\n return 'date' in this && this.date !== 0;\n },\n has(...keys) {\n return keys.some((key) => \n // @ts-expect-error TS doesn't understand key\n this[key] != undefined);\n },\n};\nfunction getMessageFromAnySource(ctx) {\n var _a, _b, _c, _d, _e;\n const msg = (_e = (_d = (_b = (_a = ctx.message) !== null && _a !== void 0 ? _a : ctx.editedMessage) !== null && _b !== void 0 ? _b : (_c = ctx.callbackQuery) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : ctx.channelPost) !== null && _e !== void 0 ? _e : ctx.editedChannelPost;\n if (msg)\n return Object.assign(Object.create(Msg), msg);\n}\nfunction getUserFromAnySource(ctx) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n if (ctx.callbackQuery)\n return ctx.callbackQuery.from;\n const msg = ctx.msg;\n if (msg === null || msg === void 0 ? void 0 : msg.has('from'))\n return msg.from;\n return ((_h = (_g = ((_f = (_e = (_d = (_c = (_b = (_a = ctx.inlineQuery) !== null && _a !== void 0 ? _a : ctx.shippingQuery) !== null && _b !== void 0 ? _b : ctx.preCheckoutQuery) !== null && _c !== void 0 ? _c : ctx.chosenInlineResult) !== null && _d !== void 0 ? _d : ctx.chatMember) !== null && _e !== void 0 ? _e : ctx.myChatMember) !== null && _f !== void 0 ? _f : ctx.chatJoinRequest)) === null || _g === void 0 ? void 0 : _g.from) !== null && _h !== void 0 ? _h : (_m = ((_k = (_j = ctx.messageReaction) !== null && _j !== void 0 ? _j : ctx.pollAnswer) !== null && _k !== void 0 ? _k : (_l = ctx.chatBoost) === null || _l === void 0 ? void 0 : _l.boost.source)) === null || _m === void 0 ? void 0 : _m.user);\n}\nfunction getMsgIdFromAnySource(ctx) {\n var _a, _b;\n const msg = getMessageFromAnySource(ctx);\n return (_b = ((_a = msg !== null && msg !== void 0 ? msg : ctx.messageReaction) !== null && _a !== void 0 ? _a : ctx.messageReactionCount)) === null || _b === void 0 ? void 0 : _b.message_id;\n}\nfunction getTextAndEntitiesFromAnySource(ctx) {\n const msg = ctx.msg;\n let text, entities;\n if (msg) {\n if ('text' in msg)\n (text = msg.text), (entities = msg.entities);\n else if ('caption' in msg)\n (text = msg.caption), (entities = msg.caption_entities);\n else if ('game' in msg)\n (text = msg.game.text), (entities = msg.game.text_entities);\n }\n else if (ctx.poll)\n (text = ctx.poll.explanation), (entities = ctx.poll.explanation_entities);\n return [text, entities];\n}\nconst getThreadId = (ctx) => {\n const msg = ctx.msg;\n return (msg === null || msg === void 0 ? void 0 : msg.isAccessible())\n ? msg.is_topic_message\n ? msg.message_thread_id\n : undefined\n : undefined;\n};\n",
|
|
15
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.allOf = exports.anyOf = exports.callbackQuery = exports.editedChannelPost = exports.channelPost = exports.editedMessage = exports.message = void 0;\nconst message = (...keys) => (update) => {\n if (!('message' in update))\n return false;\n for (const key of keys) {\n if (!(key in update.message))\n return false;\n }\n return true;\n};\nexports.message = message;\nconst editedMessage = (...keys) => (update) => {\n if (!('edited_message' in update))\n return false;\n for (const key of keys) {\n if (!(key in update.edited_message))\n return false;\n }\n return true;\n};\nexports.editedMessage = editedMessage;\nconst channelPost = (...keys) => (update) => {\n if (!('channel_post' in update))\n return false;\n for (const key of keys) {\n if (!(key in update.channel_post))\n return false;\n }\n return true;\n};\nexports.channelPost = channelPost;\nconst editedChannelPost = (...keys) => (update) => {\n if (!('edited_channel_post' in update))\n return false;\n for (const key of keys) {\n if (!(key in update.edited_channel_post))\n return false;\n }\n return true;\n};\nexports.editedChannelPost = editedChannelPost;\nconst callbackQuery = (...keys) => (update) => {\n if (!('callback_query' in update))\n return false;\n for (const key of keys) {\n if (!(key in update.callback_query))\n return false;\n }\n return true;\n};\nexports.callbackQuery = callbackQuery;\n/** Any of the provided filters must match */\nconst anyOf = (...filters) => (update) => {\n for (const filter of filters)\n if (filter(update))\n return true;\n return false;\n};\nexports.anyOf = anyOf;\n/** All of the provided filters must match */\nconst allOf = (...filters) => (update) => {\n for (const filter of filters)\n if (!filter(update))\n return false;\n return true;\n};\nexports.allOf = allOf;\n",
|
|
16
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.argsParser = void 0;\nconst SINGLE_QUOTE = \"'\";\nconst DOUBLE_QUOTE = '\"';\nfunction argsParser(str, entities = [], entityOffset = 0) {\n const mentions = {};\n for (const entity of entities) // extract all text_mentions into an { offset: length } map\n if (entity.type === 'text_mention' || entity.type === 'text_link')\n mentions[entity.offset - entityOffset] = entity.length;\n const args = [];\n let done = 0;\n let inside = undefined;\n let buf = '';\n function flush(to) {\n if (done !== to)\n args.push(buf + str.slice(done, to)), (inside = undefined);\n buf = '';\n done = to + 1;\n }\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n // quick lookup length of mention starting at i\n const mention = mentions[i];\n if (mention) {\n // if we're inside a quote, eagerly flush existing state\n flush(i);\n // this also consumes current index, so decrement\n done--;\n // fast forward to end of mention\n i += mention;\n flush(i);\n }\n else if (char === SINGLE_QUOTE || char === DOUBLE_QUOTE)\n if (inside)\n if (inside === char)\n flush(i);\n else\n continue;\n else\n flush(i), (inside = char);\n else if (char === ' ')\n if (inside)\n continue;\n else\n flush(i);\n else if (char === '\\n')\n flush(i);\n else if (char === '\\\\')\n (buf += str.slice(done, i)), (done = ++i); // skip parsing the next char\n else\n continue;\n }\n if (done < str.length)\n flush(str.length);\n return args;\n}\nexports.argsParser = argsParser;\n",
|
|
17
|
+
"\"use strict\";\n/** @format */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Composer = void 0;\nconst context_1 = __importDefault(require(\"./context\"));\nconst filters_1 = require(\"./filters\");\nconst args_1 = require(\"./core/helpers/args\");\nfunction always(x) {\n return () => x;\n}\nconst anoop = always(Promise.resolve());\nclass Composer {\n constructor(...fns) {\n this.handler = Composer.compose(fns);\n }\n /**\n * Registers a middleware.\n */\n use(...fns) {\n this.handler = Composer.compose([this.handler, ...fns]);\n return this;\n }\n /**\n * Registers middleware for handling updates\n * matching given type guard function.\n * @deprecated use `Composer::on`\n */\n guard(guardFn, ...fns) {\n return this.use(Composer.guard(guardFn, ...fns));\n }\n on(filters, ...fns) {\n // @ts-expect-error This should get resolved when the overloads are removed in v5\n return this.use(Composer.on(filters, ...fns));\n }\n /**\n * Registers middleware for handling matching text messages.\n */\n hears(triggers, ...fns) {\n return this.use(Composer.hears(triggers, ...fns));\n }\n /**\n * Registers middleware for handling specified commands.\n */\n command(command, ...fns) {\n return this.use(Composer.command(command, ...fns));\n }\n /**\n * Registers middleware for handling matching callback queries.\n */\n action(triggers, ...fns) {\n return this.use(Composer.action(triggers, ...fns));\n }\n /**\n * Registers middleware for handling matching inline queries.\n */\n inlineQuery(triggers, ...fns) {\n return this.use(Composer.inlineQuery(triggers, ...fns));\n }\n /**\n * Registers middleware for handling game queries\n */\n gameQuery(...fns) {\n return this.use(Composer.gameQuery(...fns));\n }\n reaction(reaction, ...fns) {\n return this.use(Composer.reaction(reaction, ...fns));\n }\n /**\n * Registers middleware for dropping matching updates.\n */\n drop(predicate) {\n return this.use(Composer.drop(predicate));\n }\n /** @deprecated use `Composer::drop` */\n filter(predicate) {\n return this.use(Composer.filter(predicate));\n }\n entity(predicate, ...fns) {\n return this.use(Composer.entity(predicate, ...fns));\n }\n email(email, ...fns) {\n return this.use(Composer.email(email, ...fns));\n }\n url(url, ...fns) {\n return this.use(Composer.url(url, ...fns));\n }\n textLink(link, ...fns) {\n return this.use(Composer.textLink(link, ...fns));\n }\n textMention(mention, ...fns) {\n return this.use(Composer.textMention(mention, ...fns));\n }\n mention(mention, ...fns) {\n return this.use(Composer.mention(mention, ...fns));\n }\n phone(number, ...fns) {\n return this.use(Composer.phone(number, ...fns));\n }\n hashtag(hashtag, ...fns) {\n return this.use(Composer.hashtag(hashtag, ...fns));\n }\n cashtag(cashtag, ...fns) {\n return this.use(Composer.cashtag(cashtag, ...fns));\n }\n spoiler(text, ...fns) {\n return this.use(Composer.spoiler(text, ...fns));\n }\n /**\n * Registers a middleware for handling /start\n */\n start(...fns) {\n const handler = Composer.compose(fns);\n return this.command('start', (ctx, next) => handler(Object.assign(ctx, { startPayload: ctx.payload }), next));\n }\n /**\n * Registers a middleware for handling /help\n */\n help(...fns) {\n return this.command('help', ...fns);\n }\n /**\n * Registers a middleware for handling /settings\n */\n settings(...fns) {\n return this.command('settings', ...fns);\n }\n middleware() {\n return this.handler;\n }\n static reply(...args) {\n return (ctx) => ctx.reply(...args);\n }\n static catch(errorHandler, ...fns) {\n const handler = Composer.compose(fns);\n // prettier-ignore\n return (ctx, next) => Promise.resolve(handler(ctx, next))\n .catch((err) => errorHandler(err, ctx));\n }\n /**\n * Generates middleware that runs in the background.\n */\n static fork(middleware) {\n const handler = Composer.unwrap(middleware);\n return async (ctx, next) => {\n await Promise.all([handler(ctx, anoop), next()]);\n };\n }\n static tap(middleware) {\n const handler = Composer.unwrap(middleware);\n return (ctx, next) => Promise.resolve(handler(ctx, anoop)).then(() => next());\n }\n /**\n * Generates middleware that gives up control to the next middleware.\n */\n static passThru() {\n return (ctx, next) => next();\n }\n static lazy(factoryFn) {\n if (typeof factoryFn !== 'function') {\n throw new Error('Argument must be a function');\n }\n return (ctx, next) => Promise.resolve(factoryFn(ctx)).then((middleware) => Composer.unwrap(middleware)(ctx, next));\n }\n static log(logFn = console.log) {\n return (ctx, next) => {\n logFn(JSON.stringify(ctx.update, null, 2));\n return next();\n };\n }\n /**\n * @param trueMiddleware middleware to run if the predicate returns true\n * @param falseMiddleware middleware to run if the predicate returns false\n */\n static branch(predicate, trueMiddleware, falseMiddleware) {\n if (typeof predicate !== 'function') {\n return Composer.unwrap(predicate ? trueMiddleware : falseMiddleware);\n }\n return Composer.lazy((ctx) => Promise.resolve(predicate(ctx)).then((value) => value ? trueMiddleware : falseMiddleware));\n }\n /**\n * Generates optional middleware.\n * @param predicate predicate to decide on a context object whether to run the middleware\n * @param fns middleware to run if the predicate returns true\n */\n static optional(predicate, ...fns) {\n return Composer.branch(predicate, Composer.compose(fns), Composer.passThru());\n }\n /** @deprecated use `Composer.drop` */\n static filter(predicate) {\n return Composer.branch(predicate, Composer.passThru(), anoop);\n }\n /**\n * Generates middleware for dropping matching updates.\n */\n static drop(predicate) {\n return Composer.branch(predicate, anoop, Composer.passThru());\n }\n static dispatch(routeFn, handlers) {\n return Composer.lazy((ctx) => Promise.resolve(routeFn(ctx)).then((value) => handlers[value]));\n }\n // EXPLANATION FOR THE ts-expect-error ANNOTATIONS\n // The annotations around function invocations with `...fns` are there\n // whenever we perform validation logic that the flow analysis of TypeScript\n // cannot comprehend. We always make sure that the middleware functions are\n // only invoked with properly constrained context objects, but this cannot be\n // determined automatically.\n /**\n * Generates optional middleware based on a predicate that only operates on `ctx.update`.\n *\n * Example:\n * ```ts\n * import { Composer, Update } from 'telegraf'\n *\n * const predicate = (u): u is Update.MessageUpdate => 'message' in u\n * const middleware = Composer.guard(predicate, (ctx) => {\n * const message = ctx.update.message\n * })\n * ```\n *\n * Note that `Composer.on('message')` is preferred over this.\n *\n * @param guardFn predicate to decide whether to run the middleware based on the `ctx.update` object\n * @param fns middleware to run if the predicate returns true\n * @see `Composer.optional` for a more generic version of this method that allows the predicate to operate on `ctx` itself\n * @deprecated use `Composer.on`\n */\n static guard(guardFn, ...fns) {\n return Composer.optional((ctx) => guardFn(ctx.update), \n // @ts-expect-error see explanation above\n ...fns);\n }\n static on(updateType, ...fns) {\n const filters = Array.isArray(updateType) ? updateType : [updateType];\n const predicate = (update) => {\n for (const filter of filters) {\n if (\n // TODO: this should change to === 'function' once TS bug is fixed\n // https://github.com/microsoft/TypeScript/pull/51502\n typeof filter !== 'string'\n ? // filter is a type guard\n filter(update)\n : // check if filter is the update type\n filter in update ||\n // check if filter is the msg type\n // TODO: remove in v5!\n ('message' in update && filter in update.message)) {\n return true;\n }\n }\n return false;\n };\n return Composer.optional((ctx) => predicate(ctx.update), ...fns);\n }\n static entity(predicate, ...fns) {\n if (typeof predicate !== 'function') {\n const entityTypes = normaliseTextArguments(predicate);\n return Composer.entity(({ type }) => entityTypes.includes(type), ...fns);\n }\n return Composer.optional((ctx) => {\n var _a;\n const msg = (_a = ctx.message) !== null && _a !== void 0 ? _a : ctx.channelPost;\n if (msg === undefined) {\n return false;\n }\n const text = getText(msg);\n const entities = getEntities(msg);\n if (text === undefined)\n return false;\n return entities.some((entity) => predicate(entity, text.substring(entity.offset, entity.offset + entity.length), ctx));\n }, \n // @ts-expect-error see explanation above\n ...fns);\n }\n static entityText(entityType, predicate, ...fns) {\n if (fns.length === 0) {\n // prettier-ignore\n return Array.isArray(predicate)\n // @ts-expect-error predicate is really the middleware\n ? Composer.entity(entityType, ...predicate)\n // @ts-expect-error predicate is really the middleware\n : Composer.entity(entityType, predicate);\n }\n const triggers = normaliseTriggers(predicate);\n return Composer.entity(({ type }, value, ctx) => {\n if (type !== entityType) {\n return false;\n }\n for (const trigger of triggers) {\n // @ts-expect-error define so far unknown property `match`\n if ((ctx.match = trigger(value, ctx))) {\n return true;\n }\n }\n return false;\n }, \n // @ts-expect-error see explanation above\n ...fns);\n }\n static email(email, ...fns) {\n return Composer.entityText('email', email, ...fns);\n }\n static phone(number, ...fns) {\n return Composer.entityText('phone_number', number, ...fns);\n }\n static url(url, ...fns) {\n return Composer.entityText('url', url, ...fns);\n }\n static textLink(link, ...fns) {\n return Composer.entityText('text_link', link, ...fns);\n }\n static textMention(mention, ...fns) {\n return Composer.entityText('text_mention', mention, ...fns);\n }\n static mention(mention, ...fns) {\n return Composer.entityText('mention', normaliseTextArguments(mention, '@'), ...fns);\n }\n static hashtag(hashtag, ...fns) {\n return Composer.entityText('hashtag', normaliseTextArguments(hashtag, '#'), ...fns);\n }\n static cashtag(cashtag, ...fns) {\n return Composer.entityText('cashtag', normaliseTextArguments(cashtag, '$'), ...fns);\n }\n static spoiler(text, ...fns) {\n return Composer.entityText('spoiler', text, ...fns);\n }\n static match(triggers, ...fns) {\n const handler = Composer.compose(fns);\n return (ctx, next) => {\n var _a, _b, _c, _d;\n const text = (_c = (_b = (_a = getText(ctx.message)) !== null && _a !== void 0 ? _a : getText(ctx.channelPost)) !== null && _b !== void 0 ? _b : getText(ctx.callbackQuery)) !== null && _c !== void 0 ? _c : (_d = ctx.inlineQuery) === null || _d === void 0 ? void 0 : _d.query;\n if (text === undefined)\n return next();\n for (const trigger of triggers) {\n const match = trigger(text, ctx);\n if (match)\n return handler(Object.assign(ctx, { match }), next);\n }\n return next();\n };\n }\n /**\n * Generates middleware for handling matching text messages.\n */\n static hears(triggers, ...fns) {\n return Composer.on('text', Composer.match(normaliseTriggers(triggers), ...fns));\n }\n /**\n * Generates middleware for handling specified commands.\n */\n static command(command, ...fns) {\n if (fns.length === 0)\n // @ts-expect-error command is really the middleware\n return Composer.entity('bot_command', command);\n const triggers = normaliseTriggers(command);\n const filter = (0, filters_1.message)('text');\n const handler = Composer.compose(fns);\n return Composer.on(filter, (ctx, next) => {\n const { entities } = ctx.message;\n const cmdEntity = entities === null || entities === void 0 ? void 0 : entities[0];\n if ((cmdEntity === null || cmdEntity === void 0 ? void 0 : cmdEntity.type) !== 'bot_command')\n return next();\n if (cmdEntity.offset > 0)\n return next();\n const len = cmdEntity.length;\n const text = ctx.message.text;\n const [cmdPart, to] = text.slice(0, len).split('@');\n if (!cmdPart)\n return next();\n // always check for bot's own username case-insensitively\n if (to && to.toLowerCase() !== ctx.me.toLowerCase())\n return next();\n const command = cmdPart.slice(1);\n for (const trigger of triggers) {\n const match = trigger(command, ctx);\n if (match) {\n const payloadOffset = len + 1;\n const payload = text.slice(payloadOffset);\n const c = Object.assign(ctx, { match, command, payload, args: [] });\n let _args = undefined;\n // using defineProperty only to make parsing lazy on access\n Object.defineProperty(c, 'args', {\n enumerable: true,\n configurable: true,\n get() {\n if (_args != null)\n return _args;\n // once parsed, cache and don't parse again on every access\n return (_args = (0, args_1.argsParser)(payload, entities, payloadOffset));\n },\n set(args) {\n _args = args;\n },\n });\n return handler(c, next);\n }\n }\n return next();\n });\n }\n /**\n * Generates middleware for handling matching callback queries.\n */\n static action(triggers, ...fns) {\n return Composer.on('callback_query', Composer.match(normaliseTriggers(triggers), ...fns));\n }\n /**\n * Generates middleware for handling matching inline queries.\n */\n static inlineQuery(triggers, ...fns) {\n return Composer.on('inline_query', Composer.match(normaliseTriggers(triggers), ...fns));\n }\n static reaction(reaction, ...fns) {\n const reactions = Array.isArray(reaction) ? reaction : [reaction];\n const handler = Composer.compose(fns);\n return Composer.on('message_reaction', (ctx, next) => {\n const match = reactions.find((r) => typeof r === 'string' && r.startsWith('-')\n ? ctx.reactions.removed.has(r.slice(1))\n : ctx.reactions.added.has(r));\n if (match)\n return handler(Object.assign(ctx, { match }), next);\n return next();\n });\n }\n /**\n * Generates middleware responding only to specified users.\n */\n static acl(userId, ...fns) {\n if (typeof userId === 'function') {\n return Composer.optional(userId, ...fns);\n }\n const allowed = Array.isArray(userId) ? userId : [userId];\n // prettier-ignore\n return Composer.optional((ctx) => !ctx.from || allowed.includes(ctx.from.id), ...fns);\n }\n static memberStatus(status, ...fns) {\n const statuses = Array.isArray(status) ? status : [status];\n return Composer.optional(async (ctx) => {\n if (ctx.message === undefined)\n return false;\n const member = await ctx.getChatMember(ctx.message.from.id);\n return statuses.includes(member.status);\n }, ...fns);\n }\n /**\n * Generates middleware responding only to chat admins and chat creator.\n */\n static admin(...fns) {\n return Composer.memberStatus(['administrator', 'creator'], ...fns);\n }\n /**\n * Generates middleware responding only to chat creator.\n */\n static creator(...fns) {\n return Composer.memberStatus('creator', ...fns);\n }\n /**\n * Generates middleware running only in specified chat types.\n */\n static chatType(type, ...fns) {\n const types = Array.isArray(type) ? type : [type];\n return Composer.optional((ctx) => {\n const chat = ctx.chat;\n return chat !== undefined && types.includes(chat.type);\n }, ...fns);\n }\n /**\n * Generates middleware running only in private chats.\n */\n static privateChat(...fns) {\n return Composer.chatType('private', ...fns);\n }\n /**\n * Generates middleware running only in groups and supergroups.\n */\n static groupChat(...fns) {\n return Composer.chatType(['group', 'supergroup'], ...fns);\n }\n /**\n * Generates middleware for handling game queries.\n */\n static gameQuery(...fns) {\n return Composer.guard((0, filters_1.callbackQuery)('game_short_name'), ...fns);\n }\n static unwrap(handler) {\n if (!handler) {\n throw new Error('Handler is undefined');\n }\n return 'middleware' in handler ? handler.middleware() : handler;\n }\n static compose(middlewares) {\n if (!Array.isArray(middlewares)) {\n throw new Error('Middlewares must be an array');\n }\n if (middlewares.length === 0) {\n return Composer.passThru();\n }\n if (middlewares.length === 1) {\n // Quite literally asserted in the above condition\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Composer.unwrap(middlewares[0]);\n }\n return (ctx, next) => {\n let index = -1;\n return execute(0, ctx);\n async function execute(i, context) {\n var _a;\n if (!(context instanceof context_1.default)) {\n throw new Error('next(ctx) called with invalid context');\n }\n if (i <= index) {\n throw new Error('next() called multiple times');\n }\n index = i;\n const handler = Composer.unwrap((_a = middlewares[i]) !== null && _a !== void 0 ? _a : next);\n await handler(context, async (ctx = context) => {\n await execute(i + 1, ctx);\n });\n }\n };\n }\n}\nexports.Composer = Composer;\n/**\n * Generates middleware for handling provided update types.\n * @deprecated use `Composer.on` instead\n */\nComposer.mount = Composer.on;\nfunction escapeRegExp(s) {\n // $& means the whole matched string\n return s.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nfunction normaliseTriggers(triggers) {\n if (!Array.isArray(triggers))\n triggers = [triggers];\n return triggers.map((trigger) => {\n if (!trigger)\n throw new Error('Invalid trigger');\n if (typeof trigger === 'function')\n return trigger;\n if (trigger instanceof RegExp)\n return (value = '') => {\n trigger.lastIndex = 0;\n return trigger.exec(value);\n };\n const regex = new RegExp(`^${escapeRegExp(trigger)}$`);\n return (value) => regex.exec(value);\n });\n}\nfunction getEntities(msg) {\n var _a, _b;\n if (msg == null)\n return [];\n if ('caption_entities' in msg)\n return (_a = msg.caption_entities) !== null && _a !== void 0 ? _a : [];\n if ('entities' in msg)\n return (_b = msg.entities) !== null && _b !== void 0 ? _b : [];\n return [];\n}\nfunction getText(msg) {\n if (msg == null)\n return undefined;\n if ('caption' in msg)\n return msg.caption;\n if ('text' in msg)\n return msg.text;\n if ('data' in msg)\n return msg.data;\n if ('game_short_name' in msg)\n return msg.game_short_name;\n return undefined;\n}\nfunction normaliseTextArguments(argument, prefix = '') {\n const args = Array.isArray(argument) ? argument : [argument];\n // prettier-ignore\n return args\n .filter(Boolean)\n .map((arg) => prefix && typeof arg === 'string' && !arg.startsWith(prefix) ? `${prefix}${arg}` : arg);\n}\nexports.default = Composer;\n",
|
|
18
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compactOptions = void 0;\nfunction compactOptions(options) {\n if (!options) {\n return options;\n }\n const compacted = {};\n for (const key in options)\n if (\n // todo(mkr): replace with Object.hasOwn in v5 (Node 16+)\n Object.prototype.hasOwnProperty.call(options, key) &&\n options[key] !== undefined)\n compacted[key] = options[key];\n return compacted;\n}\nexports.compactOptions = compactOptions;\n",
|
|
19
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst debug_1 = __importDefault(require(\"debug\"));\nconst debug = (0, debug_1.default)('telegraf:webhook');\nfunction generateWebhook(filter, updateHandler) {\n return async (req, res, next = () => {\n res.statusCode = 403;\n debug('Replying with status code', res.statusCode);\n res.end();\n }) => {\n debug('Incoming request', req.method, req.url);\n if (!filter(req)) {\n debug('Webhook filter failed', req.method, req.url);\n return next();\n }\n let update;\n try {\n if (req.body != null) {\n /* If req.body is already set, we expect it to be the parsed\n request body (update object) received from Telegram\n However, some libraries such as `serverless-http` set req.body to the\n raw buffer, so we'll handle that additionally */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let body = req.body;\n // if body is Buffer, parse it into string\n if (body instanceof Buffer)\n body = String(req.body);\n // if body is string, parse it into object\n if (typeof body === 'string')\n body = JSON.parse(body);\n update = body;\n }\n else {\n let body = '';\n // parse each buffer to string and append to body\n for await (const chunk of req)\n body += String(chunk);\n // parse body to object\n update = JSON.parse(body);\n }\n }\n catch (error) {\n // if any of the parsing steps fails, give up and respond with error\n res.writeHead(415).end();\n debug('Failed to parse request body:', error);\n return;\n }\n return await updateHandler(update, res);\n };\n}\nexports.default = generateWebhook;\n",
|
|
20
|
+
"/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event);\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n );\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n );\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true;\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault();\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n });\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n // Define accessors\n const keys = Object.keys(event);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key));\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget;\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation();\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this);\n\n data.stopped = true;\n data.immediateStopped = true;\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation();\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this));\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true;\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this));\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value;\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event;\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto);\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event);\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n });\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n const isFunc = typeof descriptor.value === \"function\";\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n );\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto);\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n wrappers.set(proto, wrapper);\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event));\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget);\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this);\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next;\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null; // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this);\n\n // Traverse to the tail while removing old value.\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n } else {\n prev = node;\n }\n\n node = node.next;\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n };\n if (prev === null) {\n listeners.set(eventName, newNode);\n } else {\n prev.next = newNode;\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this);\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n });\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map());\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length);\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i];\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this);\n const optionsIsObj = isObject(options);\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options);\n const listenerType = capture ? CAPTURE : BUBBLE;\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n };\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName);\n if (node === undefined) {\n listeners.set(eventName, newNode);\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null;\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node;\n node = node.next;\n }\n\n // Add it.\n prev.next = newNode;\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this);\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options);\n const listenerType = capture ? CAPTURE : BUBBLE;\n\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n return\n }\n\n prev = node;\n node = node.next;\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this);\n const eventName = event.type;\n let node = listeners.get(eventName);\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event);\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null;\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n } else {\n prev = node;\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n );\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent);\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err);\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent);\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next;\n }\n setPassiveListener(wrappedEvent, null);\n setEventPhase(wrappedEvent, 0);\n setCurrentTarget(wrappedEvent, null);\n\n return !wrappedEvent.defaultPrevented\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexports.defineEventAttribute = defineEventAttribute;\nexports.EventTarget = EventTarget;\nexports.default = EventTarget;\n\nmodule.exports = EventTarget\nmodule.exports.EventTarget = module.exports[\"default\"] = EventTarget\nmodule.exports.defineEventAttribute = defineEventAttribute\n//# sourceMappingURL=event-target-shim.js.map\n",
|
|
21
|
+
"/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar eventTargetShim = require('event-target-shim');\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nclass AbortSignal extends eventTargetShim.EventTarget {\n /**\n * AbortSignal cannot be constructed directly.\n */\n constructor() {\n super();\n throw new TypeError(\"AbortSignal cannot be constructed directly\");\n }\n /**\n * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n */\n get aborted() {\n const aborted = abortedFlags.get(this);\n if (typeof aborted !== \"boolean\") {\n throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? \"null\" : typeof this}`);\n }\n return aborted;\n }\n}\neventTargetShim.defineEventAttribute(AbortSignal.prototype, \"abort\");\n/**\n * Create an AbortSignal object.\n */\nfunction createAbortSignal() {\n const signal = Object.create(AbortSignal.prototype);\n eventTargetShim.EventTarget.call(signal);\n abortedFlags.set(signal, false);\n return signal;\n}\n/**\n * Abort a given signal.\n */\nfunction abortSignal(signal) {\n if (abortedFlags.get(signal) !== false) {\n return;\n }\n abortedFlags.set(signal, true);\n signal.dispatchEvent({ type: \"abort\" });\n}\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap();\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n aborted: { enumerable: true },\n});\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortSignal\",\n });\n}\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nclass AbortController {\n /**\n * Initialize this controller.\n */\n constructor() {\n signals.set(this, createAbortSignal());\n }\n /**\n * Returns the `AbortSignal` object associated with this object.\n */\n get signal() {\n return getSignal(this);\n }\n /**\n * Abort and signal to any observers that the associated activity is to be aborted.\n */\n abort() {\n abortSignal(getSignal(this));\n }\n}\n/**\n * Associated signals.\n */\nconst signals = new WeakMap();\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller) {\n const signal = signals.get(controller);\n if (signal == null) {\n throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? \"null\" : typeof controller}`);\n }\n return signal;\n}\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n signal: { enumerable: true },\n abort: { enumerable: true },\n});\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortController\",\n });\n}\n\nexports.AbortController = AbortController;\nexports.AbortSignal = AbortSignal;\nexports.default = AbortController;\n\nmodule.exports = AbortController\nmodule.exports.AbortController = module.exports[\"default\"] = AbortController\nmodule.exports.AbortSignal = AbortSignal\n//# sourceMappingURL=abort-controller.js.map\n",
|
|
22
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TelegramError = void 0;\nclass TelegramError extends Error {\n constructor(response, on = {}) {\n super(`${response.error_code}: ${response.description}`);\n this.response = response;\n this.on = on;\n }\n get code() {\n return this.response.error_code;\n }\n get description() {\n return this.response.description;\n }\n get parameters() {\n return this.response.parameters;\n }\n}\nexports.TelegramError = TelegramError;\nexports.default = TelegramError;\n",
|
|
23
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polling = void 0;\nconst abort_controller_1 = __importDefault(require(\"abort-controller\"));\nconst debug_1 = __importDefault(require(\"debug\"));\nconst util_1 = require(\"util\");\nconst error_1 = require(\"./error\");\nconst debug = (0, debug_1.default)('telegraf:polling');\nconst wait = (0, util_1.promisify)(setTimeout);\nfunction always(x) {\n return () => x;\n}\nconst noop = always(Promise.resolve());\nclass Polling {\n constructor(telegram, allowedUpdates) {\n this.telegram = telegram;\n this.allowedUpdates = allowedUpdates;\n this.abortController = new abort_controller_1.default();\n this.skipOffsetSync = false;\n this.offset = 0;\n }\n async *[Symbol.asyncIterator]() {\n var _a, _b;\n debug('Starting long polling');\n do {\n try {\n const updates = await this.telegram.callApi('getUpdates', {\n timeout: 50,\n offset: this.offset,\n allowed_updates: this.allowedUpdates,\n }, this.abortController);\n const last = updates[updates.length - 1];\n if (last !== undefined) {\n this.offset = last.update_id + 1;\n }\n yield updates;\n }\n catch (error) {\n const err = error;\n if (err.name === 'AbortError')\n return;\n if (err.name === 'FetchError' ||\n (err instanceof error_1.TelegramError && err.code === 429) ||\n (err instanceof error_1.TelegramError && err.code >= 500)) {\n const retryAfter = (_b = (_a = err.parameters) === null || _a === void 0 ? void 0 : _a.retry_after) !== null && _b !== void 0 ? _b : 5;\n debug('Failed to fetch updates, retrying after %ds.', retryAfter, err);\n await wait(retryAfter * 1000);\n continue;\n }\n if (err instanceof error_1.TelegramError &&\n // Unauthorized Conflict\n (err.code === 401 || err.code === 409)) {\n this.skipOffsetSync = true;\n throw err;\n }\n throw err;\n }\n } while (!this.abortController.signal.aborted);\n }\n async syncUpdateOffset() {\n if (this.skipOffsetSync)\n return;\n debug('Syncing update offset...');\n await this.telegram.callApi('getUpdates', { offset: this.offset, limit: 1 });\n }\n async loop(handleUpdate) {\n if (this.abortController.signal.aborted)\n throw new Error('Polling instances must not be reused!');\n try {\n for await (const updates of this)\n await Promise.all(updates.map(handleUpdate));\n }\n finally {\n debug('Long polling stopped');\n // prevent instance reuse\n this.stop();\n await this.syncUpdateOffset().catch(noop);\n }\n }\n stop() {\n this.abortController.abort();\n }\n}\nexports.Polling = Polling;\n",
|
|
24
|
+
"'use strict';\n\nclass TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\nconst pTimeout = (promise, milliseconds, fallback, options) => {\n\tlet timer;\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || milliseconds < 0) {\n\t\t\tthrow new TypeError('Expected `milliseconds` to be a positive number');\n\t\t}\n\n\t\tif (milliseconds === Infinity) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n};\n\nmodule.exports = pTimeout;\n// TODO: Remove this for the next major release\nmodule.exports.default = pTimeout;\n\nmodule.exports.TimeoutError = TimeoutError;\n",
|
|
25
|
+
"\"use strict\";\n\nvar conversions = {};\nmodule.exports = conversions;\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction evenRound(x) {\n // Round x to the nearest integer, choosing the even integer if it lies halfway between two.\n if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)\n return Math.floor(x);\n } else {\n return Math.round(x);\n }\n}\n\nfunction createNumberConversion(bitLength, typeOpts) {\n if (!typeOpts.unsigned) {\n --bitLength;\n }\n const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);\n const upperBound = Math.pow(2, bitLength) - 1;\n\n const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);\n const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);\n\n return function(V, opts) {\n if (!opts) opts = {};\n\n let x = +V;\n\n if (opts.enforceRange) {\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite number\");\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(\"Argument is not in byte range\");\n }\n\n return x;\n }\n\n if (!isNaN(x) && opts.clamp) {\n x = evenRound(x);\n\n if (x < lowerBound) x = lowerBound;\n if (x > upperBound) x = upperBound;\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n x = x % moduloVal;\n\n if (!typeOpts.unsigned && x >= moduloBound) {\n return x - moduloVal;\n } else if (typeOpts.unsigned) {\n if (x < 0) {\n x += moduloVal;\n } else if (x === -0) { // don't return negative zero\n return 0;\n }\n }\n\n return x;\n }\n}\n\nconversions[\"void\"] = function () {\n return undefined;\n};\n\nconversions[\"boolean\"] = function (val) {\n return !!val;\n};\n\nconversions[\"byte\"] = createNumberConversion(8, { unsigned: false });\nconversions[\"octet\"] = createNumberConversion(8, { unsigned: true });\n\nconversions[\"short\"] = createNumberConversion(16, { unsigned: false });\nconversions[\"unsigned short\"] = createNumberConversion(16, { unsigned: true });\n\nconversions[\"long\"] = createNumberConversion(32, { unsigned: false });\nconversions[\"unsigned long\"] = createNumberConversion(32, { unsigned: true });\n\nconversions[\"long long\"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });\nconversions[\"unsigned long long\"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });\n\nconversions[\"double\"] = function (V) {\n const x = +V;\n\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite floating-point value\");\n }\n\n return x;\n};\n\nconversions[\"unrestricted double\"] = function (V) {\n const x = +V;\n\n if (isNaN(x)) {\n throw new TypeError(\"Argument is NaN\");\n }\n\n return x;\n};\n\n// not quite valid, but good enough for JS\nconversions[\"float\"] = conversions[\"double\"];\nconversions[\"unrestricted float\"] = conversions[\"unrestricted double\"];\n\nconversions[\"DOMString\"] = function (V, opts) {\n if (!opts) opts = {};\n\n if (opts.treatNullAsEmptyString && V === null) {\n return \"\";\n }\n\n return String(V);\n};\n\nconversions[\"ByteString\"] = function (V, opts) {\n const x = String(V);\n let c = undefined;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw new TypeError(\"Argument is not a valid bytestring\");\n }\n }\n\n return x;\n};\n\nconversions[\"USVString\"] = function (V) {\n const S = String(V);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n }\n\n return U.join('');\n};\n\nconversions[\"Date\"] = function (V, opts) {\n if (!(V instanceof Date)) {\n throw new TypeError(\"Argument is not a Date object\");\n }\n if (isNaN(V)) {\n return undefined;\n }\n\n return V;\n};\n\nconversions[\"RegExp\"] = function (V, opts) {\n if (!(V instanceof RegExp)) {\n V = new RegExp(V);\n }\n\n return V;\n};\n",
|
|
26
|
+
"\"use strict\";\n\nmodule.exports.mixin = function mixin(target, source) {\n const keys = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keys.length; ++i) {\n Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));\n }\n};\n\nmodule.exports.wrapperSymbol = Symbol(\"wrapper\");\nmodule.exports.implSymbol = Symbol(\"impl\");\n\nmodule.exports.wrapperForImpl = function (impl) {\n return impl[module.exports.wrapperSymbol];\n};\n\nmodule.exports.implForWrapper = function (wrapper) {\n return wrapper[module.exports.implSymbol];\n};\n\n",
|
|
27
|
+
"\"use strict\";\n\nvar punycode = require(\"punycode\");\nvar mappingTable = require(\"./lib/mappingTable.json\");\n\nvar PROCESSING_OPTIONS = {\n TRANSITIONAL: 0,\n NONTRANSITIONAL: 1\n};\n\nfunction normalize(str) { // fix bug in v8\n return str.split('\\u0000').map(function (s) { return s.normalize('NFC'); }).join('\\u0000');\n}\n\nfunction findStatus(val) {\n var start = 0;\n var end = mappingTable.length - 1;\n\n while (start <= end) {\n var mid = Math.floor((start + end) / 2);\n\n var target = mappingTable[mid];\n if (target[0][0] <= val && target[0][1] >= val) {\n return target;\n } else if (target[0][0] > val) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n\n return null;\n}\n\nvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\nfunction countSymbols(string) {\n return string\n // replace every surrogate pair with a BMP symbol\n .replace(regexAstralSymbols, '_')\n // then get the length\n .length;\n}\n\nfunction mapChars(domain_name, useSTD3, processing_option) {\n var hasError = false;\n var processed = \"\";\n\n var len = countSymbols(domain_name);\n for (var i = 0; i < len; ++i) {\n var codePoint = domain_name.codePointAt(i);\n var status = findStatus(codePoint);\n\n switch (status[1]) {\n case \"disallowed\":\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n break;\n case \"ignored\":\n break;\n case \"mapped\":\n processed += String.fromCodePoint.apply(String, status[2]);\n break;\n case \"deviation\":\n if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {\n processed += String.fromCodePoint.apply(String, status[2]);\n } else {\n processed += String.fromCodePoint(codePoint);\n }\n break;\n case \"valid\":\n processed += String.fromCodePoint(codePoint);\n break;\n case \"disallowed_STD3_mapped\":\n if (useSTD3) {\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n } else {\n processed += String.fromCodePoint.apply(String, status[2]);\n }\n break;\n case \"disallowed_STD3_valid\":\n if (useSTD3) {\n hasError = true;\n }\n\n processed += String.fromCodePoint(codePoint);\n break;\n }\n }\n\n return {\n string: processed,\n error: hasError\n };\n}\n\nvar combiningMarksRegex = /[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2D]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF01-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDE30-\\uDE40\\uDEAB-\\uDEB7]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nfunction validateLabel(label, processing_option) {\n if (label.substr(0, 4) === \"xn--\") {\n label = punycode.toUnicode(label);\n processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;\n }\n\n var error = false;\n\n if (normalize(label) !== label ||\n (label[3] === \"-\" && label[4] === \"-\") ||\n label[0] === \"-\" || label[label.length - 1] === \"-\" ||\n label.indexOf(\".\") !== -1 ||\n label.search(combiningMarksRegex) === 0) {\n error = true;\n }\n\n var len = countSymbols(label);\n for (var i = 0; i < len; ++i) {\n var status = findStatus(label.codePointAt(i));\n if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== \"valid\") ||\n (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&\n status[1] !== \"valid\" && status[1] !== \"deviation\")) {\n error = true;\n break;\n }\n }\n\n return {\n label: label,\n error: error\n };\n}\n\nfunction processing(domain_name, useSTD3, processing_option) {\n var result = mapChars(domain_name, useSTD3, processing_option);\n result.string = normalize(result.string);\n\n var labels = result.string.split(\".\");\n for (var i = 0; i < labels.length; ++i) {\n try {\n var validation = validateLabel(labels[i]);\n labels[i] = validation.label;\n result.error = result.error || validation.error;\n } catch(e) {\n result.error = true;\n }\n }\n\n return {\n string: labels.join(\".\"),\n error: result.error\n };\n}\n\nmodule.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {\n var result = processing(domain_name, useSTD3, processing_option);\n var labels = result.string.split(\".\");\n labels = labels.map(function(l) {\n try {\n return punycode.toASCII(l);\n } catch(e) {\n result.error = true;\n return l;\n }\n });\n\n if (verifyDnsLength) {\n var total = labels.slice(0, labels.length - 1).join(\".\").length;\n if (total.length > 253 || total.length === 0) {\n result.error = true;\n }\n\n for (var i=0; i < labels.length; ++i) {\n if (labels.length > 63 || labels.length === 0) {\n result.error = true;\n break;\n }\n }\n }\n\n if (result.error) return null;\n return labels.join(\".\");\n};\n\nmodule.exports.toUnicode = function(domain_name, useSTD3) {\n var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);\n\n return {\n domain: result.string,\n error: result.error\n };\n};\n\nmodule.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;\n",
|
|
28
|
+
"\"use strict\";\r\nconst punycode = require(\"punycode\");\r\nconst tr46 = require(\"tr46\");\r\n\r\nconst specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n gopher: 70,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\n\r\nconst failure = Symbol(\"failure\");\r\n\r\nfunction countSymbols(str) {\r\n return punycode.ucs2.decode(str).length;\r\n}\r\n\r\nfunction at(input, idx) {\r\n const c = input[idx];\r\n return isNaN(c) ? undefined : String.fromCodePoint(c);\r\n}\r\n\r\nfunction isASCIIDigit(c) {\r\n return c >= 0x30 && c <= 0x39;\r\n}\r\n\r\nfunction isASCIIAlpha(c) {\r\n return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);\r\n}\r\n\r\nfunction isASCIIAlphanumeric(c) {\r\n return isASCIIAlpha(c) || isASCIIDigit(c);\r\n}\r\n\r\nfunction isASCIIHex(c) {\r\n return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);\r\n}\r\n\r\nfunction isSingleDot(buffer) {\r\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\r\n}\r\n\r\nfunction isDoubleDot(buffer) {\r\n buffer = buffer.toLowerCase();\r\n return buffer === \"..\" || buffer === \"%2e.\" || buffer === \".%2e\" || buffer === \"%2e%2e\";\r\n}\r\n\r\nfunction isWindowsDriveLetterCodePoints(cp1, cp2) {\r\n return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);\r\n}\r\n\r\nfunction isWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === \":\" || string[1] === \"|\");\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === \":\";\r\n}\r\n\r\nfunction containsForbiddenHostCodePoint(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|%|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction containsForbiddenHostCodePointExcludingPercent(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction isSpecialScheme(scheme) {\r\n return specialSchemes[scheme] !== undefined;\r\n}\r\n\r\nfunction isSpecial(url) {\r\n return isSpecialScheme(url.scheme);\r\n}\r\n\r\nfunction defaultPort(scheme) {\r\n return specialSchemes[scheme];\r\n}\r\n\r\nfunction percentEncode(c) {\r\n let hex = c.toString(16).toUpperCase();\r\n if (hex.length === 1) {\r\n hex = \"0\" + hex;\r\n }\r\n\r\n return \"%\" + hex;\r\n}\r\n\r\nfunction utf8PercentEncode(c) {\r\n const buf = new Buffer(c);\r\n\r\n let str = \"\";\r\n\r\n for (let i = 0; i < buf.length; ++i) {\r\n str += percentEncode(buf[i]);\r\n }\r\n\r\n return str;\r\n}\r\n\r\nfunction utf8PercentDecode(str) {\r\n const input = new Buffer(str);\r\n const output = [];\r\n for (let i = 0; i < input.length; ++i) {\r\n if (input[i] !== 37) {\r\n output.push(input[i]);\r\n } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {\r\n output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));\r\n i += 2;\r\n } else {\r\n output.push(input[i]);\r\n }\r\n }\r\n return new Buffer(output).toString();\r\n}\r\n\r\nfunction isC0ControlPercentEncode(c) {\r\n return c <= 0x1F || c > 0x7E;\r\n}\r\n\r\nconst extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);\r\nfunction isPathPercentEncode(c) {\r\n return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);\r\n}\r\n\r\nconst extraUserinfoPercentEncodeSet =\r\n new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);\r\nfunction isUserinfoPercentEncode(c) {\r\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\r\n}\r\n\r\nfunction percentEncodeChar(c, encodeSetPredicate) {\r\n const cStr = String.fromCodePoint(c);\r\n\r\n if (encodeSetPredicate(c)) {\r\n return utf8PercentEncode(cStr);\r\n }\r\n\r\n return cStr;\r\n}\r\n\r\nfunction parseIPv4Number(input) {\r\n let R = 10;\r\n\r\n if (input.length >= 2 && input.charAt(0) === \"0\" && input.charAt(1).toLowerCase() === \"x\") {\r\n input = input.substring(2);\r\n R = 16;\r\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\r\n input = input.substring(1);\r\n R = 8;\r\n }\r\n\r\n if (input === \"\") {\r\n return 0;\r\n }\r\n\r\n const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);\r\n if (regex.test(input)) {\r\n return failure;\r\n }\r\n\r\n return parseInt(input, R);\r\n}\r\n\r\nfunction parseIPv4(input) {\r\n const parts = input.split(\".\");\r\n if (parts[parts.length - 1] === \"\") {\r\n if (parts.length > 1) {\r\n parts.pop();\r\n }\r\n }\r\n\r\n if (parts.length > 4) {\r\n return input;\r\n }\r\n\r\n const numbers = [];\r\n for (const part of parts) {\r\n if (part === \"\") {\r\n return input;\r\n }\r\n const n = parseIPv4Number(part);\r\n if (n === failure) {\r\n return input;\r\n }\r\n\r\n numbers.push(n);\r\n }\r\n\r\n for (let i = 0; i < numbers.length - 1; ++i) {\r\n if (numbers[i] > 255) {\r\n return failure;\r\n }\r\n }\r\n if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {\r\n return failure;\r\n }\r\n\r\n let ipv4 = numbers.pop();\r\n let counter = 0;\r\n\r\n for (const n of numbers) {\r\n ipv4 += n * Math.pow(256, 3 - counter);\r\n ++counter;\r\n }\r\n\r\n return ipv4;\r\n}\r\n\r\nfunction serializeIPv4(address) {\r\n let output = \"\";\r\n let n = address;\r\n\r\n for (let i = 1; i <= 4; ++i) {\r\n output = String(n % 256) + output;\r\n if (i !== 4) {\r\n output = \".\" + output;\r\n }\r\n n = Math.floor(n / 256);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseIPv6(input) {\r\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\r\n let pieceIndex = 0;\r\n let compress = null;\r\n let pointer = 0;\r\n\r\n input = punycode.ucs2.decode(input);\r\n\r\n if (input[pointer] === 58) {\r\n if (input[pointer + 1] !== 58) {\r\n return failure;\r\n }\r\n\r\n pointer += 2;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n }\r\n\r\n while (pointer < input.length) {\r\n if (pieceIndex === 8) {\r\n return failure;\r\n }\r\n\r\n if (input[pointer] === 58) {\r\n if (compress !== null) {\r\n return failure;\r\n }\r\n ++pointer;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n continue;\r\n }\r\n\r\n let value = 0;\r\n let length = 0;\r\n\r\n while (length < 4 && isASCIIHex(input[pointer])) {\r\n value = value * 0x10 + parseInt(at(input, pointer), 16);\r\n ++pointer;\r\n ++length;\r\n }\r\n\r\n if (input[pointer] === 46) {\r\n if (length === 0) {\r\n return failure;\r\n }\r\n\r\n pointer -= length;\r\n\r\n if (pieceIndex > 6) {\r\n return failure;\r\n }\r\n\r\n let numbersSeen = 0;\r\n\r\n while (input[pointer] !== undefined) {\r\n let ipv4Piece = null;\r\n\r\n if (numbersSeen > 0) {\r\n if (input[pointer] === 46 && numbersSeen < 4) {\r\n ++pointer;\r\n } else {\r\n return failure;\r\n }\r\n }\r\n\r\n if (!isASCIIDigit(input[pointer])) {\r\n return failure;\r\n }\r\n\r\n while (isASCIIDigit(input[pointer])) {\r\n const number = parseInt(at(input, pointer));\r\n if (ipv4Piece === null) {\r\n ipv4Piece = number;\r\n } else if (ipv4Piece === 0) {\r\n return failure;\r\n } else {\r\n ipv4Piece = ipv4Piece * 10 + number;\r\n }\r\n if (ipv4Piece > 255) {\r\n return failure;\r\n }\r\n ++pointer;\r\n }\r\n\r\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;\r\n\r\n ++numbersSeen;\r\n\r\n if (numbersSeen === 2 || numbersSeen === 4) {\r\n ++pieceIndex;\r\n }\r\n }\r\n\r\n if (numbersSeen !== 4) {\r\n return failure;\r\n }\r\n\r\n break;\r\n } else if (input[pointer] === 58) {\r\n ++pointer;\r\n if (input[pointer] === undefined) {\r\n return failure;\r\n }\r\n } else if (input[pointer] !== undefined) {\r\n return failure;\r\n }\r\n\r\n address[pieceIndex] = value;\r\n ++pieceIndex;\r\n }\r\n\r\n if (compress !== null) {\r\n let swaps = pieceIndex - compress;\r\n pieceIndex = 7;\r\n while (pieceIndex !== 0 && swaps > 0) {\r\n const temp = address[compress + swaps - 1];\r\n address[compress + swaps - 1] = address[pieceIndex];\r\n address[pieceIndex] = temp;\r\n --pieceIndex;\r\n --swaps;\r\n }\r\n } else if (compress === null && pieceIndex !== 8) {\r\n return failure;\r\n }\r\n\r\n return address;\r\n}\r\n\r\nfunction serializeIPv6(address) {\r\n let output = \"\";\r\n const seqResult = findLongestZeroSequence(address);\r\n const compress = seqResult.idx;\r\n let ignore0 = false;\r\n\r\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\r\n if (ignore0 && address[pieceIndex] === 0) {\r\n continue;\r\n } else if (ignore0) {\r\n ignore0 = false;\r\n }\r\n\r\n if (compress === pieceIndex) {\r\n const separator = pieceIndex === 0 ? \"::\" : \":\";\r\n output += separator;\r\n ignore0 = true;\r\n continue;\r\n }\r\n\r\n output += address[pieceIndex].toString(16);\r\n\r\n if (pieceIndex !== 7) {\r\n output += \":\";\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseHost(input, isSpecialArg) {\r\n if (input[0] === \"[\") {\r\n if (input[input.length - 1] !== \"]\") {\r\n return failure;\r\n }\r\n\r\n return parseIPv6(input.substring(1, input.length - 1));\r\n }\r\n\r\n if (!isSpecialArg) {\r\n return parseOpaqueHost(input);\r\n }\r\n\r\n const domain = utf8PercentDecode(input);\r\n const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);\r\n if (asciiDomain === null) {\r\n return failure;\r\n }\r\n\r\n if (containsForbiddenHostCodePoint(asciiDomain)) {\r\n return failure;\r\n }\r\n\r\n const ipv4Host = parseIPv4(asciiDomain);\r\n if (typeof ipv4Host === \"number\" || ipv4Host === failure) {\r\n return ipv4Host;\r\n }\r\n\r\n return asciiDomain;\r\n}\r\n\r\nfunction parseOpaqueHost(input) {\r\n if (containsForbiddenHostCodePointExcludingPercent(input)) {\r\n return failure;\r\n }\r\n\r\n let output = \"\";\r\n const decoded = punycode.ucs2.decode(input);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);\r\n }\r\n return output;\r\n}\r\n\r\nfunction findLongestZeroSequence(arr) {\r\n let maxIdx = null;\r\n let maxLen = 1; // only find elements > 1\r\n let currStart = null;\r\n let currLen = 0;\r\n\r\n for (let i = 0; i < arr.length; ++i) {\r\n if (arr[i] !== 0) {\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n currStart = null;\r\n currLen = 0;\r\n } else {\r\n if (currStart === null) {\r\n currStart = i;\r\n }\r\n ++currLen;\r\n }\r\n }\r\n\r\n // if trailing zeros\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n return {\r\n idx: maxIdx,\r\n len: maxLen\r\n };\r\n}\r\n\r\nfunction serializeHost(host) {\r\n if (typeof host === \"number\") {\r\n return serializeIPv4(host);\r\n }\r\n\r\n // IPv6 serializer\r\n if (host instanceof Array) {\r\n return \"[\" + serializeIPv6(host) + \"]\";\r\n }\r\n\r\n return host;\r\n}\r\n\r\nfunction trimControlChars(url) {\r\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/g, \"\");\r\n}\r\n\r\nfunction trimTabAndNewline(url) {\r\n return url.replace(/\\u0009|\\u000A|\\u000D/g, \"\");\r\n}\r\n\r\nfunction shortenPath(url) {\r\n const path = url.path;\r\n if (path.length === 0) {\r\n return;\r\n }\r\n if (url.scheme === \"file\" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {\r\n return;\r\n }\r\n\r\n path.pop();\r\n}\r\n\r\nfunction includesCredentials(url) {\r\n return url.username !== \"\" || url.password !== \"\";\r\n}\r\n\r\nfunction cannotHaveAUsernamePasswordPort(url) {\r\n return url.host === null || url.host === \"\" || url.cannotBeABaseURL || url.scheme === \"file\";\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetter(string) {\r\n return /^[A-Za-z]:$/.test(string);\r\n}\r\n\r\nfunction URLStateMachine(input, base, encodingOverride, url, stateOverride) {\r\n this.pointer = 0;\r\n this.input = input;\r\n this.base = base || null;\r\n this.encodingOverride = encodingOverride || \"utf-8\";\r\n this.stateOverride = stateOverride;\r\n this.url = url;\r\n this.failure = false;\r\n this.parseError = false;\r\n\r\n if (!this.url) {\r\n this.url = {\r\n scheme: \"\",\r\n username: \"\",\r\n password: \"\",\r\n host: null,\r\n port: null,\r\n path: [],\r\n query: null,\r\n fragment: null,\r\n\r\n cannotBeABaseURL: false\r\n };\r\n\r\n const res = trimControlChars(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n }\r\n\r\n const res = trimTabAndNewline(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n\r\n this.state = stateOverride || \"scheme start\";\r\n\r\n this.buffer = \"\";\r\n this.atFlag = false;\r\n this.arrFlag = false;\r\n this.passwordTokenSeenFlag = false;\r\n\r\n this.input = punycode.ucs2.decode(this.input);\r\n\r\n for (; this.pointer <= this.input.length; ++this.pointer) {\r\n const c = this.input[this.pointer];\r\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\r\n\r\n // exec state machine\r\n const ret = this[\"parse \" + this.state](c, cStr);\r\n if (!ret) {\r\n break; // terminate algorithm\r\n } else if (ret === failure) {\r\n this.failure = true;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nURLStateMachine.prototype[\"parse scheme start\"] = function parseSchemeStart(c, cStr) {\r\n if (isASCIIAlpha(c)) {\r\n this.buffer += cStr.toLowerCase();\r\n this.state = \"scheme\";\r\n } else if (!this.stateOverride) {\r\n this.state = \"no scheme\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse scheme\"] = function parseScheme(c, cStr) {\r\n if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {\r\n this.buffer += cStr.toLowerCase();\r\n } else if (c === 58) {\r\n if (this.stateOverride) {\r\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === \"file\") {\r\n return false;\r\n }\r\n\r\n if (this.url.scheme === \"file\" && (this.url.host === \"\" || this.url.host === null)) {\r\n return false;\r\n }\r\n }\r\n this.url.scheme = this.buffer;\r\n this.buffer = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n if (this.url.scheme === \"file\") {\r\n if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file\";\r\n } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {\r\n this.state = \"special relative or authority\";\r\n } else if (isSpecial(this.url)) {\r\n this.state = \"special authority slashes\";\r\n } else if (this.input[this.pointer + 1] === 47) {\r\n this.state = \"path or authority\";\r\n ++this.pointer;\r\n } else {\r\n this.url.cannotBeABaseURL = true;\r\n this.url.path.push(\"\");\r\n this.state = \"cannot-be-a-base-URL path\";\r\n }\r\n } else if (!this.stateOverride) {\r\n this.buffer = \"\";\r\n this.state = \"no scheme\";\r\n this.pointer = -1;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse no scheme\"] = function parseNoScheme(c) {\r\n if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {\r\n return failure;\r\n } else if (this.base.cannotBeABaseURL && c === 35) {\r\n this.url.scheme = this.base.scheme;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.url.cannotBeABaseURL = true;\r\n this.state = \"fragment\";\r\n } else if (this.base.scheme === \"file\") {\r\n this.state = \"file\";\r\n --this.pointer;\r\n } else {\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special relative or authority\"] = function parseSpecialRelativeOrAuthority(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path or authority\"] = function parsePathOrAuthority(c) {\r\n if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative\"] = function parseRelative(c) {\r\n this.url.scheme = this.base.scheme;\r\n if (isNaN(c)) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 47) {\r\n this.state = \"relative slash\";\r\n } else if (c === 63) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n this.state = \"relative slash\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice(0, this.base.path.length - 1);\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative slash\"] = function parseRelativeSlash(c) {\r\n if (isSpecial(this.url) && (c === 47 || c === 92)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"special authority ignore slashes\";\r\n } else if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority slashes\"] = function parseSpecialAuthoritySlashes(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"special authority ignore slashes\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority ignore slashes\"] = function parseSpecialAuthorityIgnoreSlashes(c) {\r\n if (c !== 47 && c !== 92) {\r\n this.state = \"authority\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse authority\"] = function parseAuthority(c, cStr) {\r\n if (c === 64) {\r\n this.parseError = true;\r\n if (this.atFlag) {\r\n this.buffer = \"%40\" + this.buffer;\r\n }\r\n this.atFlag = true;\r\n\r\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\r\n const len = countSymbols(this.buffer);\r\n for (let pointer = 0; pointer < len; ++pointer) {\r\n const codePoint = this.buffer.codePointAt(pointer);\r\n\r\n if (codePoint === 58 && !this.passwordTokenSeenFlag) {\r\n this.passwordTokenSeenFlag = true;\r\n continue;\r\n }\r\n const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);\r\n if (this.passwordTokenSeenFlag) {\r\n this.url.password += encodedCodePoints;\r\n } else {\r\n this.url.username += encodedCodePoints;\r\n }\r\n }\r\n this.buffer = \"\";\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n if (this.atFlag && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.pointer -= countSymbols(this.buffer) + 1;\r\n this.buffer = \"\";\r\n this.state = \"host\";\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse hostname\"] =\r\nURLStateMachine.prototype[\"parse host\"] = function parseHostName(c, cStr) {\r\n if (this.stateOverride && this.url.scheme === \"file\") {\r\n --this.pointer;\r\n this.state = \"file host\";\r\n } else if (c === 58 && !this.arrFlag) {\r\n if (this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"port\";\r\n if (this.stateOverride === \"hostname\") {\r\n return false;\r\n }\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n --this.pointer;\r\n if (isSpecial(this.url) && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n } else if (this.stateOverride && this.buffer === \"\" &&\r\n (includesCredentials(this.url) || this.url.port !== null)) {\r\n this.parseError = true;\r\n return false;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n } else {\r\n if (c === 91) {\r\n this.arrFlag = true;\r\n } else if (c === 93) {\r\n this.arrFlag = false;\r\n }\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse port\"] = function parsePort(c, cStr) {\r\n if (isASCIIDigit(c)) {\r\n this.buffer += cStr;\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92) ||\r\n this.stateOverride) {\r\n if (this.buffer !== \"\") {\r\n const port = parseInt(this.buffer);\r\n if (port > Math.pow(2, 16) - 1) {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\r\n this.buffer = \"\";\r\n }\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);\r\n\r\nURLStateMachine.prototype[\"parse file\"] = function parseFile(c) {\r\n this.url.scheme = \"file\";\r\n\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file slash\";\r\n } else if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNaN(c)) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 63) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points\r\n !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||\r\n (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points\r\n !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n shortenPath(this.url);\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file slash\"] = function parseFileSlash(c) {\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file host\";\r\n } else {\r\n if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {\r\n this.url.path.push(this.base.path[0]);\r\n } else {\r\n this.url.host = this.base.host;\r\n }\r\n }\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file host\"] = function parseFileHost(c, cStr) {\r\n if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {\r\n --this.pointer;\r\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\r\n this.parseError = true;\r\n this.state = \"path\";\r\n } else if (this.buffer === \"\") {\r\n this.url.host = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n } else {\r\n let host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n if (host === \"localhost\") {\r\n host = \"\";\r\n }\r\n this.url.host = host;\r\n\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n }\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path start\"] = function parsePathStart(c) {\r\n if (isSpecial(this.url)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"path\";\r\n\r\n if (c !== 47 && c !== 92) {\r\n --this.pointer;\r\n }\r\n } else if (!this.stateOverride && c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (!this.stateOverride && c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (c !== undefined) {\r\n this.state = \"path\";\r\n if (c !== 47) {\r\n --this.pointer;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path\"] = function parsePath(c) {\r\n if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||\r\n (!this.stateOverride && (c === 63 || c === 35))) {\r\n if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n }\r\n\r\n if (isDoubleDot(this.buffer)) {\r\n shortenPath(this.url);\r\n if (c !== 47 && !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n }\r\n } else if (isSingleDot(this.buffer) && c !== 47 &&\r\n !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n } else if (!isSingleDot(this.buffer)) {\r\n if (this.url.scheme === \"file\" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {\r\n if (this.url.host !== \"\" && this.url.host !== null) {\r\n this.parseError = true;\r\n this.url.host = \"\";\r\n }\r\n this.buffer = this.buffer[0] + \":\";\r\n }\r\n this.url.path.push(this.buffer);\r\n }\r\n this.buffer = \"\";\r\n if (this.url.scheme === \"file\" && (c === undefined || c === 63 || c === 35)) {\r\n while (this.url.path.length > 1 && this.url.path[0] === \"\") {\r\n this.parseError = true;\r\n this.url.path.shift();\r\n }\r\n }\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n }\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += percentEncodeChar(c, isPathPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse cannot-be-a-base-URL path\"] = function parseCannotBeABaseURLPath(c) {\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n // TODO: Add: not a URL code point\r\n if (!isNaN(c) && c !== 37) {\r\n this.parseError = true;\r\n }\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n if (!isNaN(c)) {\r\n this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse query\"] = function parseQuery(c, cStr) {\r\n if (isNaN(c) || (!this.stateOverride && c === 35)) {\r\n if (!isSpecial(this.url) || this.url.scheme === \"ws\" || this.url.scheme === \"wss\") {\r\n this.encodingOverride = \"utf-8\";\r\n }\r\n\r\n const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead\r\n for (let i = 0; i < buffer.length; ++i) {\r\n if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||\r\n buffer[i] === 0x3C || buffer[i] === 0x3E) {\r\n this.url.query += percentEncode(buffer[i]);\r\n } else {\r\n this.url.query += String.fromCodePoint(buffer[i]);\r\n }\r\n }\r\n\r\n this.buffer = \"\";\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse fragment\"] = function parseFragment(c) {\r\n if (isNaN(c)) { // do nothing\r\n } else if (c === 0x0) {\r\n this.parseError = true;\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nfunction serializeURL(url, excludeFragment) {\r\n let output = url.scheme + \":\";\r\n if (url.host !== null) {\r\n output += \"//\";\r\n\r\n if (url.username !== \"\" || url.password !== \"\") {\r\n output += url.username;\r\n if (url.password !== \"\") {\r\n output += \":\" + url.password;\r\n }\r\n output += \"@\";\r\n }\r\n\r\n output += serializeHost(url.host);\r\n\r\n if (url.port !== null) {\r\n output += \":\" + url.port;\r\n }\r\n } else if (url.host === null && url.scheme === \"file\") {\r\n output += \"//\";\r\n }\r\n\r\n if (url.cannotBeABaseURL) {\r\n output += url.path[0];\r\n } else {\r\n for (const string of url.path) {\r\n output += \"/\" + string;\r\n }\r\n }\r\n\r\n if (url.query !== null) {\r\n output += \"?\" + url.query;\r\n }\r\n\r\n if (!excludeFragment && url.fragment !== null) {\r\n output += \"#\" + url.fragment;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction serializeOrigin(tuple) {\r\n let result = tuple.scheme + \"://\";\r\n result += serializeHost(tuple.host);\r\n\r\n if (tuple.port !== null) {\r\n result += \":\" + tuple.port;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nmodule.exports.serializeURL = serializeURL;\r\n\r\nmodule.exports.serializeURLOrigin = function (url) {\r\n // https://url.spec.whatwg.org/#concept-url-origin\r\n switch (url.scheme) {\r\n case \"blob\":\r\n try {\r\n return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));\r\n } catch (e) {\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n case \"ftp\":\r\n case \"gopher\":\r\n case \"http\":\r\n case \"https\":\r\n case \"ws\":\r\n case \"wss\":\r\n return serializeOrigin({\r\n scheme: url.scheme,\r\n host: url.host,\r\n port: url.port\r\n });\r\n case \"file\":\r\n // spec says \"exercise to the reader\", chrome says \"file://\"\r\n return \"file://\";\r\n default:\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n};\r\n\r\nmodule.exports.basicURLParse = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);\r\n if (usm.failure) {\r\n return \"failure\";\r\n }\r\n\r\n return usm.url;\r\n};\r\n\r\nmodule.exports.setTheUsername = function (url, username) {\r\n url.username = \"\";\r\n const decoded = punycode.ucs2.decode(username);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.setThePassword = function (url, password) {\r\n url.password = \"\";\r\n const decoded = punycode.ucs2.decode(password);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.serializeHost = serializeHost;\r\n\r\nmodule.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;\r\n\r\nmodule.exports.serializeInteger = function (integer) {\r\n return String(integer);\r\n};\r\n\r\nmodule.exports.parseURL = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n // We don't handle blobs, so this just delegates:\r\n return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });\r\n};\r\n",
|
|
29
|
+
"\"use strict\";\nconst usm = require(\"./url-state-machine\");\n\nexports.implementation = class URLImpl {\n constructor(constructorArgs) {\n const url = constructorArgs[0];\n const base = constructorArgs[1];\n\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = usm.basicURLParse(base);\n if (parsedBase === \"failure\") {\n throw new TypeError(\"Invalid base URL\");\n }\n }\n\n const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n\n // TODO: query stuff\n }\n\n get href() {\n return usm.serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = usm.basicURLParse(v);\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n }\n\n get origin() {\n return usm.serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return this._url.scheme + \":\";\n }\n\n set protocol(v) {\n usm.basicURLParse(v + \":\", { url: this._url, stateOverride: \"scheme start\" });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return usm.serializeHost(url.host);\n }\n\n return usm.serializeHost(url.host) + \":\" + usm.serializeInteger(url.port);\n }\n\n set host(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return usm.serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return usm.serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n usm.basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n if (this._url.cannotBeABaseURL) {\n return this._url.path[0];\n }\n\n if (this._url.path.length === 0) {\n return \"\";\n }\n\n return \"/\" + this._url.path.join(\"/\");\n }\n\n set pathname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n this._url.path = [];\n usm.basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return \"?\" + this._url.query;\n }\n\n set search(v) {\n // TODO: query stuff\n\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n usm.basicURLParse(input, { url, stateOverride: \"query\" });\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return \"#\" + this._url.fragment;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n usm.basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n};\n",
|
|
30
|
+
"\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\nconst Impl = require(\".//URL-impl.js\");\n\nconst impl = utils.implSymbol;\n\nfunction URL(url) {\n if (!this || this[impl] || !(this instanceof URL)) {\n throw new TypeError(\"Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only \" + arguments.length + \" present.\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 2; ++i) {\n args[i] = arguments[i];\n }\n args[0] = conversions[\"USVString\"](args[0]);\n if (args[1] !== undefined) {\n args[1] = conversions[\"USVString\"](args[1]);\n }\n\n module.exports.setup(this, args);\n}\n\nURL.prototype.toJSON = function toJSON() {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 0; ++i) {\n args[i] = arguments[i];\n }\n return this[impl].toJSON.apply(this[impl], args);\n};\nObject.defineProperty(URL.prototype, \"href\", {\n get() {\n return this[impl].href;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].href = V;\n },\n enumerable: true,\n configurable: true\n});\n\nURL.prototype.toString = function () {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n return this.href;\n};\n\nObject.defineProperty(URL.prototype, \"origin\", {\n get() {\n return this[impl].origin;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"protocol\", {\n get() {\n return this[impl].protocol;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].protocol = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"username\", {\n get() {\n return this[impl].username;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].username = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"password\", {\n get() {\n return this[impl].password;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].password = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"host\", {\n get() {\n return this[impl].host;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].host = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hostname\", {\n get() {\n return this[impl].hostname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hostname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"port\", {\n get() {\n return this[impl].port;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].port = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"pathname\", {\n get() {\n return this[impl].pathname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].pathname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"search\", {\n get() {\n return this[impl].search;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].search = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hash\", {\n get() {\n return this[impl].hash;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hash = V;\n },\n enumerable: true,\n configurable: true\n});\n\n\nmodule.exports = {\n is(obj) {\n return !!obj && obj[impl] instanceof Impl.implementation;\n },\n create(constructorArgs, privateData) {\n let obj = Object.create(URL.prototype);\n this.setup(obj, constructorArgs, privateData);\n return obj;\n },\n setup(obj, constructorArgs, privateData) {\n if (!privateData) privateData = {};\n privateData.wrapper = obj;\n\n obj[impl] = new Impl.implementation(constructorArgs, privateData);\n obj[impl][utils.wrapperSymbol] = obj;\n },\n interface: URL,\n expose: {\n Window: { URL: URL },\n Worker: { URL: URL }\n }\n};\n\n",
|
|
31
|
+
"\"use strict\";\n\nexports.URL = require(\"./URL\").interface;\nexports.serializeURL = require(\"./url-state-machine\").serializeURL;\nexports.serializeURLOrigin = require(\"./url-state-machine\").serializeURLOrigin;\nexports.basicURLParse = require(\"./url-state-machine\").basicURLParse;\nexports.setTheUsername = require(\"./url-state-machine\").setTheUsername;\nexports.setThePassword = require(\"./url-state-machine\").setThePassword;\nexports.serializeHost = require(\"./url-state-machine\").serializeHost;\nexports.serializeInteger = require(\"./url-state-machine\").serializeInteger;\nexports.parseURL = require(\"./url-state-machine\").parseURL;\n",
|
|
32
|
+
"/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n",
|
|
33
|
+
"\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n",
|
|
34
|
+
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n if (!Buffer.isBuffer(buf)) {\n buf = Buffer.from(buf);\n }\n\n return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n",
|
|
35
|
+
"'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n this.iconv = iconv;\n this.bomAware = true;\n this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n this.isLE = codec.isLE;\n this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n var src = Buffer.from(str, 'ucs2');\n var dst = Buffer.alloc(src.length * 2);\n var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n var offset = 0;\n\n for (var i = 0; i < src.length; i += 2) {\n var code = src.readUInt16LE(i);\n var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n if (this.highSurrogate) {\n if (isHighSurrogate || !isLowSurrogate) {\n // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n // (technically wrong, but expected by some applications, like Windows file names).\n write32.call(dst, this.highSurrogate, offset);\n offset += 4;\n }\n else {\n // Create 32-bit value from high and low surrogates;\n var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n write32.call(dst, codepoint, offset);\n offset += 4;\n this.highSurrogate = 0;\n\n continue;\n }\n }\n\n if (isHighSurrogate)\n this.highSurrogate = code;\n else {\n // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n // unpaired high surrogates.\n write32.call(dst, code, offset);\n offset += 4;\n this.highSurrogate = 0;\n }\n }\n\n if (offset < dst.length)\n dst = dst.slice(0, offset);\n\n return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n // Treat any leftover high surrogate as a semi-valid independent character.\n if (!this.highSurrogate)\n return;\n\n var buf = Buffer.alloc(4);\n\n if (this.isLE)\n buf.writeUInt32LE(this.highSurrogate, 0);\n else\n buf.writeUInt32BE(this.highSurrogate, 0);\n\n this.highSurrogate = 0;\n\n return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n this.isLE = codec.isLE;\n this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n if (src.length === 0)\n return '';\n\n var i = 0;\n var codepoint = 0;\n var dst = Buffer.alloc(src.length + 4);\n var offset = 0;\n var isLE = this.isLE;\n var overflow = this.overflow;\n var badChar = this.badChar;\n\n if (overflow.length > 0) {\n for (; i < src.length && overflow.length < 4; i++)\n overflow.push(src[i]);\n \n if (overflow.length === 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n if (isLE) {\n codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n } else {\n codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n }\n overflow.length = 0;\n\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n }\n\n // Main loop. Should be as optimized as possible.\n for (; i < src.length - 3; i += 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n if (isLE) {\n codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n } else {\n codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n }\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n\n // Keep overflowing bytes.\n for (; i < src.length; i++) {\n overflow.push(src[i]);\n }\n\n return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n if (codepoint < 0 || codepoint > 0x10FFFF) {\n // Not a valid Unicode codepoint\n codepoint = badChar;\n } \n\n // Ephemeral Planes: Write high surrogate.\n if (codepoint >= 0x10000) {\n codepoint -= 0x10000;\n\n var high = 0xD800 | (codepoint >> 10);\n dst[offset++] = high & 0xff;\n dst[offset++] = high >> 8;\n\n // Low surrogate is written below.\n var codepoint = 0xDC00 | (codepoint & 0x3FF);\n }\n\n // Write BMP char or low surrogate.\n dst[offset++] = codepoint & 0xff;\n dst[offset++] = codepoint >> 8;\n\n return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n options = options || {};\n\n if (options.addBOM === undefined)\n options.addBOM = true;\n\n this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n if (!this.decoder) { \n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n\n if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE.\n var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 4) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n return 'utf-32le';\n }\n if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n return 'utf-32be';\n }\n }\n\n if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be';\n if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-32le';\n}\n",
|
|
36
|
+
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n \n if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 2) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n }\n\n if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-16le';\n}\n\n\n",
|
|
37
|
+
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n",
|
|
38
|
+
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n",
|
|
39
|
+
"\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n\n \"cp720\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n",
|
|
40
|
+
"\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ħ˘£¤�Ĥ§¨İŞĞĴ�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄĸŖ¤Ĩϧ¨ŠĒĢŦޝ°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
�¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄĒĢĪĨͧĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄąŁ€„Чš©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’±“¾¶§÷„°∙·¹³²■ \"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№ыЫзЗшШэЭщЩчЧ§■ \"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´±�¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄±υφχ§ψ΅°¨ωϋΰώ■ \"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ЁЂҐЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£€¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\uFEFF–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
�և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n }\n}",
|
|
41
|
+
"\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 common decode nodes.\n var commonThirdByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n var commonFourthByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n // Fill out the tree\n var firstByteNode = this.decodeTables[0];\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n for (var j = 0x30; j <= 0x39; j++) {\n if (secondByteNode[j] === UNASSIGNED) {\n secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n } else if (secondByteNode[j] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 2\");\n }\n\n var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n for (var k = 0x81; k <= 0xFE; k++) {\n if (thirdByteNode[k] === UNASSIGNED) {\n thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n continue;\n } else if (thirdByteNode[k] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 3\");\n }\n\n var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n for (var l = 0x30; l <= 0x39; l++) {\n if (fourthByteNode[l] === UNASSIGNED)\n fourthByteNode[l] = GB18030_CODE;\n }\n }\n }\n }\n }\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n var hasValues = false;\n var subNodeEmpty = {};\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0) {\n this._setEncodeChar(uCode, mbCode);\n hasValues = true;\n } else if (uCode <= NODE_START) {\n var subNodeIdx = NODE_START - uCode;\n if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030).\n var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive.\n if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n hasValues = true;\n else\n subNodeEmpty[subNodeIdx] = true;\n }\n } else if (uCode <= SEQ_START) {\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n hasValues = true;\n }\n }\n return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else if (dbcsCode < 0x1000000) {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n } else {\n newBuf[j++] = dbcsCode >>> 24;\n newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBytes = [];\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n uCode;\n\n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n uCode = this.defaultCharUnicode.charCodeAt(0);\n i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n }\n else if (uCode === GB18030_CODE) {\n if (i >= 3) {\n var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n } else {\n var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n (curByte-0x30);\n }\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode >= 0x10000) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 | (uCode >> 10);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 | (uCode & 0x3FF);\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBytes = (seqStart >= 0)\n ? Array.prototype.slice.call(buf, seqStart)\n : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBytes.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var bytesArr = this.prevBytes.slice(1);\n\n // Parse remaining as usual.\n this.prevBytes = [];\n this.nodeIdx = 0;\n if (bytesArr.length > 0)\n ret += this.write(bytesArr);\n }\n\n this.prevBytes = [];\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + ((r-l+1) >> 1);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n",
|
|
42
|
+
"\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'€': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [\n // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n ],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n",
|
|
43
|
+
"\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf32\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n",
|
|
44
|
+
"\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n var Transform = stream_module.Transform;\n\n // == Encoder stream =======================================================\n\n function IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n }\n\n IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n });\n\n IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n }\n\n\n // == Decoder stream =======================================================\n\n function IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n }\n\n IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n });\n\n IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n }\n\n return {\n IconvLiteEncoderStream: IconvLiteEncoderStream,\n IconvLiteDecoderStream: IconvLiteDecoderStream,\n };\n};\n",
|
|
45
|
+
"\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n if (iconv.supportsStreams)\n return;\n\n // Dependency-inject stream module to create IconvLite stream classes.\n var streams = require(\"./streams\")(stream_module);\n\n // Not public API yet, but expose the stream classes.\n iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n // Streaming API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n iconv.enableStreamingAPI(stream_module);\n\n} else {\n // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n iconv.encodeStream = iconv.decodeStream = function() {\n throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n };\n}\n\nif (\"Ā\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n",
|
|
46
|
+
"'use strict';\n\nvar iconvLite = require('iconv-lite');\n\n// Expose to the world\nmodule.exports.convert = convert;\n\n/**\n * Convert encoding of an UTF-8 string or a buffer\n *\n * @param {String|Buffer} str String to be converted\n * @param {String} to Encoding to be converted to\n * @param {String} [from='UTF-8'] Encoding to be converted from\n * @return {Buffer} Encoded string\n */\nfunction convert(str, to, from) {\n from = checkEncoding(from || 'UTF-8');\n to = checkEncoding(to || 'UTF-8');\n str = str || '';\n\n var result;\n\n if (from !== 'UTF-8' && typeof str === 'string') {\n str = Buffer.from(str, 'binary');\n }\n\n if (from === to) {\n if (typeof str === 'string') {\n result = Buffer.from(str);\n } else {\n result = str;\n }\n } else {\n try {\n result = convertIconvLite(str, to, from);\n } catch (E) {\n console.error(E);\n result = str;\n }\n }\n\n if (typeof result === 'string') {\n result = Buffer.from(result, 'utf-8');\n }\n\n return result;\n}\n\n/**\n * Convert encoding of astring with iconv-lite\n *\n * @param {String|Buffer} str String to be converted\n * @param {String} to Encoding to be converted to\n * @param {String} [from='UTF-8'] Encoding to be converted from\n * @return {Buffer} Encoded string\n */\nfunction convertIconvLite(str, to, from) {\n if (to === 'UTF-8') {\n return iconvLite.decode(str, from);\n } else if (from === 'UTF-8') {\n return iconvLite.encode(str, to);\n } else {\n return iconvLite.encode(iconvLite.decode(str, from), to);\n }\n}\n\n/**\n * Converts charset name if needed\n *\n * @param {String} name Character set\n * @return {String} Character set name\n */\nfunction checkEncoding(name) {\n return (name || '')\n .toString()\n .trim()\n .replace(/^latin[\\-_]?(\\d+)$/i, 'ISO-8859-$1')\n .replace(/^win(?:dows)?[\\-_]?(\\d+)$/i, 'WINDOWS-$1')\n .replace(/^utf[\\-_]?(\\d+)$/i, 'UTF-$1')\n .replace(/^ks_c_5601\\-1987$/i, 'CP949')\n .replace(/^us[\\-_]?ascii$/i, 'ASCII')\n .toUpperCase();\n}\n",
|
|
47
|
+
"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar whatwgUrl = _interopDefault(require('whatwg-url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = /<meta.+?charset=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// html4\n\tif (!res && str) {\n\t\tres = /<meta[\\s]+?http-equiv=(['\"])content-type\\1[\\s]+?content=(['\"])(.+?)\\2/i.exec(str);\n\t\tif (!res) {\n\t\t\tres = /<meta[\\s]+?content=(['\"])(.+?)\\1[\\s]+?http-equiv=(['\"])content-type\\3/i.exec(str);\n\t\t\tif (res) {\n\t\t\t\tres.pop(); // drop last quote\n\t\t\t}\n\t\t}\n\n\t\tif (res) {\n\t\t\tres = /charset=(.*)/i.exec(res.pop());\n\t\t}\n\t}\n\n\t// xml\n\tif (!res && str) {\n\t\tres = /<\\?xml.+?encoding=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// found charset\n\tif (res) {\n\t\tcharset = res.pop();\n\n\t\t// prevent decode issues when sites use incorrect encoding\n\t\t// ref: https://hsivonen.fi/encoding-menu/\n\t\tif (charset === 'gb2312' || charset === 'gbk') {\n\t\t\tcharset = 'gb18030';\n\t\t}\n\t}\n\n\t// turn raw buffers into a single utf-8 buffer\n\treturn convert(buffer, 'UTF-8', charset).toString();\n}\n\n/**\n * Detect a URLSearchParams object\n * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143\n *\n * @param Object obj Object to detect by type or brand\n * @return String\n */\nfunction isURLSearchParams(obj) {\n\t// Duck-typing as a necessary condition.\n\tif (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {\n\t\treturn false;\n\t}\n\n\t// Brand-checking and more duck-typing as optional condition.\n\treturn obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';\n}\n\n/**\n * Check if `obj` is a W3C `Blob` object (which `File` inherits from)\n * @param {*} obj\n * @return {boolean}\n */\nfunction isBlob(obj) {\n\treturn typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param Mixed instance Response or Request instance\n * @return Mixed\n */\nfunction clone(instance) {\n\tlet p1, p2;\n\tlet body = instance.body;\n\n\t// don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif (body instanceof Stream && typeof body.getBoundary !== 'function') {\n\t\t// tee instance body\n\t\tp1 = new PassThrough();\n\t\tp2 = new PassThrough();\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].body = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n}\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param Mixed instance Any options.body input\n */\nfunction extractContentType(body) {\n\tif (body === null) {\n\t\t// body is null\n\t\treturn null;\n\t} else if (typeof body === 'string') {\n\t\t// body is string\n\t\treturn 'text/plain;charset=UTF-8';\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t} else if (isBlob(body)) {\n\t\t// body is blob\n\t\treturn body.type || null;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn null;\n\t} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\treturn null;\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\treturn null;\n\t} else if (typeof body.getBoundary === 'function') {\n\t\t// detect form data input from form-data module\n\t\treturn `multipart/form-data;boundary=${body.getBoundary()}`;\n\t} else if (body instanceof Stream) {\n\t\t// body is stream\n\t\t// can't really do much about this\n\t\treturn null;\n\t} else {\n\t\t// Body constructor defaults other things to string\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n}\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param Body instance Instance of Body\n * @return Number? Number of bytes, or null if not possible\n */\nfunction getTotalBytes(instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\treturn 0;\n\t} else if (isBlob(body)) {\n\t\treturn body.size;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn body.length;\n\t} else if (body && typeof body.getLengthSync === 'function') {\n\t\t// detect form data input from form-data module\n\t\tif (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x\n\t\tbody.hasKnownLength && body.hasKnownLength()) {\n\t\t\t// 2.x\n\t\t\treturn body.getLengthSync();\n\t\t}\n\t\treturn null;\n\t} else {\n\t\t// body is stream\n\t\treturn null;\n\t}\n}\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param Body instance Instance of Body\n * @return Void\n */\nfunction writeToStream(dest, instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\tdest.end();\n\t} else if (isBlob(body)) {\n\t\tbody.stream().pipe(dest);\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\tdest.write(body);\n\t\tdest.end();\n\t} else {\n\t\t// body is stream\n\t\tbody.pipe(dest);\n\t}\n}\n\n// expose Promise\nBody.Promise = global.Promise;\n\n/**\n * headers.js\n *\n * Headers class offers convenient helpers\n */\n\nconst invalidTokenRegex = /[^\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]/;\nconst invalidHeaderCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/;\n\nfunction validateName(name) {\n\tname = `${name}`;\n\tif (invalidTokenRegex.test(name) || name === '') {\n\t\tthrow new TypeError(`${name} is not a legal HTTP header name`);\n\t}\n}\n\nfunction validateValue(value) {\n\tvalue = `${value}`;\n\tif (invalidHeaderCharRegex.test(value)) {\n\t\tthrow new TypeError(`${value} is not a legal HTTP header value`);\n\t}\n}\n\n/**\n * Find the key in the map object given a header name.\n *\n * Returns undefined if not found.\n *\n * @param String name Header name\n * @return String|Undefined\n */\nfunction find(map, name) {\n\tname = name.toLowerCase();\n\tfor (const key in map) {\n\t\tif (key.toLowerCase() === name) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst MAP = Symbol('map');\nclass Headers {\n\t/**\n * Headers class\n *\n * @param Object headers Response headers\n * @return Void\n */\n\tconstructor() {\n\t\tlet init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record<ByteString, ByteString>\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nconst isSameProtocol = function isSameProtocol(destination, original) {\n\tconst orig = new URL$1(original).protocol;\n\tconst dest = new URL$1(destination).protocol;\n\n\treturn orig === dest;\n};\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\tdestroyStream(request.body, error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\n\t\t\tif (signal && signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (parseInt(process.version.substring(1)) < 14) {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\treq.on('socket', function (s) {\n\t\t\t\ts.addListener('close', function (hadError) {\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\n\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\n\t\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.on('end', function () {\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tlet socket;\n\n\trequest.on('socket', function (s) {\n\t\tsocket = s;\n\t});\n\n\trequest.on('response', function (response) {\n\t\tconst headers = response.headers;\n\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\n\t\t\tresponse.once('close', function (hadError) {\n\t\t\t\t// tests for socket presence, as in some situations the\n\t\t\t\t// the 'socket' event is not triggered for the request\n\t\t\t\t// (happens in deno), avoids `TypeError`\n\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\tconst hasDataListener = socket && socket.listenerCount('data') > 0;\n\n\t\t\t\tif (hasDataListener && !hadError) {\n\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\terrorCallback(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction destroyStream(stream, err) {\n\tif (stream.destroy) {\n\t\tstream.destroy(err);\n\t} else {\n\t\t// node < 8\n\t\tstream.emit('error', err);\n\t\tstream.end();\n\t}\n}\n\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\nexports.AbortError = AbortError;\n",
|
|
48
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.is2D = exports.hasPropType = exports.hasProp = void 0;\n/**\n * Checks if a given object has a property with a given name.\n *\n * Example invocation:\n * ```js\n * let obj = { 'foo': 'bar', 'baz': () => {} }\n * hasProp(obj, 'foo') // true\n * hasProp(obj, 'baz') // true\n * hasProp(obj, 'abc') // false\n * ```\n *\n * @param obj An object to test\n * @param prop The name of the property\n */\nfunction hasProp(obj, prop) {\n return obj !== undefined && prop in obj;\n}\nexports.hasProp = hasProp;\n/**\n * Checks if a given object has a property with a given name.\n * Furthermore performs a `typeof` check on the property if it exists.\n *\n * Example invocation:\n * ```js\n * let obj = { 'foo': 'bar', 'baz': () => {} }\n * hasPropType(obj, 'foo', 'string') // true\n * hasPropType(obj, 'baz', 'function') // true\n * hasPropType(obj, 'abc', 'number') // false\n * ```\n *\n * @param obj An object to test\n * @param prop The name of the property\n * @param type The type the property is expected to have\n */\nfunction hasPropType(obj, prop, type) {\n return hasProp(obj, prop) && type === typeof obj[prop];\n}\nexports.hasPropType = hasPropType;\n/**\n * Checks if the supplied array has two dimensions or not.\n *\n * Example invocations:\n * is2D([]) // false\n * is2D([[]]) // true\n * is2D([[], []]) // true\n * is2D([42]) // false\n *\n * @param arr an array with one or two dimensions\n */\nfunction is2D(arr) {\n return Array.isArray(arr[0]);\n}\nexports.is2D = is2D;\n",
|
|
49
|
+
"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar stream = require('stream');\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\n\n/**\r\n * Handles Readable streams requests as concatenation through data handling as\r\n * well adding tags it each begin, end and between of the streams\r\n */\r\nclass SandwichStream extends stream.Readable {\r\n /**\r\n * Initiates the SandwichStream, you can consider it also passing\r\n * ReadableOptions to it\r\n *\r\n * @param head Pushes this content before all other content\r\n * @param tail Pushes this content after all other data has been pushed\r\n * @param separator Pushes this content between each stream\r\n * @param remaining The other kind of options to be passed to Readable\r\n * @example\r\n * const ss = new SandwichStream({\r\n * head: 'This at the top\\n',\r\n * tail: '\\nThis at the bottom',\r\n * separator: '\\n --- \\n'\r\n * });\r\n */\r\n constructor(_a) {\r\n var { head, tail, separator } = _a, remaining = __rest(_a, [\"head\", \"tail\", \"separator\"]);\r\n super(remaining);\r\n this.streamsActive = false;\r\n this.streams = [];\r\n this.newStreams = [];\r\n this.currentStream = null;\r\n this.head = (null !== head && undefined !== head) ? head : null;\r\n this.tail = (null !== tail && undefined !== tail) ? tail : null;\r\n this.separator = (null !== separator && undefined !== separator) ? separator : null;\r\n }\r\n /**\r\n * Add a new Readable stream in the queue\r\n *\r\n * @param newStream The Readable stream\r\n * @example\r\n * sandwichStream.add(streamOne);\r\n * sandwichStream.add(streamTwo);\r\n * sandwichStream.add(streamThree);\r\n * @throws An Error in case that this request was not accepted\r\n * @returns This instance of Sandwich Stream\r\n */\r\n add(newStream) {\r\n if (false === this.streamsActive) {\r\n this.streams.push(newStream);\r\n newStream.on('error', this.subStreamOnError.bind(this));\r\n }\r\n else {\r\n this.newStreams.push(newStream);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Works in a similar way from the Readable read, only that this one checks\r\n * for whether or not a stream is already being handled\r\n * @returns This instance of Sandwich Stream\r\n */\r\n _read() {\r\n if (false === this.streamsActive) {\r\n this.streamsActive = true;\r\n this.pushHead();\r\n this.streamNextStream();\r\n }\r\n }\r\n /**\r\n * Binds an error thrown from one of the streams being handled\r\n *\r\n * @param err Error to be bind\r\n * @returns This instance of Sandwich Stream\r\n */\r\n subStreamOnError(err) {\r\n this.emit('error', err);\r\n }\r\n /**\r\n * Fetches the next stream to be handled\r\n * @returns This instance of Sandwich Stream\r\n */\r\n streamNextStream() {\r\n if (true === this.nextStream()) {\r\n this.bindCurrentStreamEvents();\r\n }\r\n else {\r\n this.pushTail();\r\n this.push(null);\r\n }\r\n }\r\n /**\r\n * Verifies whether or not the stream queue has ended\r\n * @returns This instance of Sandwich Stream\r\n */\r\n nextStream() {\r\n const tmp = this.streams.shift();\r\n this.currentStream = (undefined !== tmp) ? tmp : null;\r\n return null !== this.currentStream;\r\n }\r\n /**\r\n * Once the current stream starts to pass their data, this handles it in a\r\n * less complicated way\r\n * @returns This instance of Sandwich Stream\r\n */\r\n bindCurrentStreamEvents() {\r\n this.currentStream.on('readable', this.currentStreamOnReadable.bind(this));\r\n this.currentStream.on('end', this.currentStreamOnEnd.bind(this));\r\n }\r\n /**\r\n * Handles the data from a current stream once they are being streamed\r\n * @returns This instance of Sandwich Stream\r\n */\r\n currentStreamOnReadable() {\r\n const tmp = this.currentStream.read();\r\n const data = (undefined !== tmp && null !== tmp) ? tmp : '';\r\n this.push(data);\r\n }\r\n /**\r\n * Handles the tagging once a stream is finished\r\n * @returns This instance of Sandwich Stream\r\n */\r\n currentStreamOnEnd() {\r\n this.pushSeparator();\r\n this.streams.concat(this.newStreams);\r\n this.newStreams = [];\r\n this.streamNextStream();\r\n }\r\n /**\r\n * Adds the head tag to the Sandwich Stream\r\n * @returns This instance of Sandwich Stream\r\n */\r\n pushHead() {\r\n if (null !== this.head) {\r\n this.push(this.head);\r\n }\r\n }\r\n /**\r\n * Adds the separator tag to the Sandwich Stream\r\n * @returns This instance of Sandwich Stream\r\n */\r\n pushSeparator() {\r\n if (0 < this.streams.length && null !== this.separator) {\r\n this.push(this.separator);\r\n }\r\n }\r\n /**\r\n * Adds the tail tag to the Sandwich Stream\r\n * @returns This instance of Sandwich Stream\r\n */\r\n pushTail() {\r\n if (null !== this.tail) {\r\n this.push(this.tail);\r\n }\r\n }\r\n}\n\nexports.SandwichStream = SandwichStream;\nexports.default = SandwichStream;\n",
|
|
50
|
+
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream = __importStar(require(\"stream\"));\nconst check_1 = require(\"../helpers/check\");\nconst sandwich_stream_1 = __importDefault(require(\"sandwich-stream\"));\nconst CRNL = '\\r\\n';\nclass MultipartStream extends sandwich_stream_1.default {\n constructor(boundary) {\n super({\n head: `--${boundary}${CRNL}`,\n tail: `${CRNL}--${boundary}--`,\n separator: `${CRNL}--${boundary}${CRNL}`,\n });\n }\n addPart(part) {\n const partStream = new stream.PassThrough();\n for (const [key, header] of Object.entries(part.headers)) {\n partStream.write(`${key}:${header}${CRNL}`);\n }\n partStream.write(CRNL);\n if (MultipartStream.isStream(part.body)) {\n part.body.pipe(partStream);\n }\n else {\n partStream.end(part.body);\n }\n this.add(partStream);\n }\n static isStream(stream) {\n return (typeof stream === 'object' &&\n stream !== null &&\n (0, check_1.hasPropType)(stream, 'pipe', 'function'));\n }\n}\nexports.default = MultipartStream;\n",
|
|
51
|
+
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* eslint @typescript-eslint/restrict-template-expressions: [ \"error\", { \"allowNumber\": true, \"allowBoolean\": true } ] */\nconst crypto = __importStar(require(\"crypto\"));\nconst fs = __importStar(require(\"fs\"));\nconst promises_1 = require(\"fs/promises\");\nconst https = __importStar(require(\"https\"));\nconst path = __importStar(require(\"path\"));\nconst node_fetch_1 = __importDefault(require(\"node-fetch\"));\nconst check_1 = require(\"../helpers/check\");\nconst compact_1 = require(\"../helpers/compact\");\nconst multipart_stream_1 = __importDefault(require(\"./multipart-stream\"));\nconst error_1 = __importDefault(require(\"./error\"));\nconst url_1 = require(\"url\");\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst debug = require('debug')('telegraf:client');\nconst { isStream } = multipart_stream_1.default;\nconst WEBHOOK_REPLY_METHOD_ALLOWLIST = new Set([\n 'answerCallbackQuery',\n 'answerInlineQuery',\n 'deleteMessage',\n 'leaveChat',\n 'sendChatAction',\n]);\nconst DEFAULT_EXTENSIONS = {\n audio: 'mp3',\n photo: 'jpg',\n sticker: 'webp',\n video: 'mp4',\n animation: 'mp4',\n video_note: 'mp4',\n voice: 'ogg',\n};\nconst DEFAULT_OPTIONS = {\n apiRoot: 'https://api.telegram.org',\n apiMode: 'bot',\n webhookReply: true,\n agent: new https.Agent({\n keepAlive: true,\n keepAliveMsecs: 10000,\n }),\n attachmentAgent: undefined,\n testEnv: false,\n};\nfunction includesMedia(payload) {\n return Object.entries(payload).some(([key, value]) => {\n if (key === 'link_preview_options')\n return false;\n if (Array.isArray(value)) {\n return value.some(({ media }) => media && typeof media === 'object' && (media.source || media.url));\n }\n return (value &&\n typeof value === 'object' &&\n (((0, check_1.hasProp)(value, 'source') && value.source) ||\n ((0, check_1.hasProp)(value, 'url') && value.url) ||\n ((0, check_1.hasPropType)(value, 'media', 'object') &&\n (((0, check_1.hasProp)(value.media, 'source') && value.media.source) ||\n ((0, check_1.hasProp)(value.media, 'url') && value.media.url)))));\n });\n}\nfunction replacer(_, value) {\n if (value == null)\n return undefined;\n return value;\n}\nfunction buildJSONConfig(payload) {\n return Promise.resolve({\n method: 'POST',\n compress: true,\n headers: { 'content-type': 'application/json', connection: 'keep-alive' },\n body: JSON.stringify(payload, replacer),\n });\n}\nconst FORM_DATA_JSON_FIELDS = [\n 'results',\n 'reply_markup',\n 'mask_position',\n 'shipping_options',\n 'errors',\n];\nasync function buildFormDataConfig(payload, agent) {\n for (const field of FORM_DATA_JSON_FIELDS) {\n if ((0, check_1.hasProp)(payload, field) && typeof payload[field] !== 'string') {\n payload[field] = JSON.stringify(payload[field]);\n }\n }\n const boundary = crypto.randomBytes(32).toString('hex');\n const formData = new multipart_stream_1.default(boundary);\n await Promise.all(Object.keys(payload).map((key) => \n // @ts-expect-error payload[key] can obviously index payload, but TS doesn't trust us\n attachFormValue(formData, key, payload[key], agent)));\n return {\n method: 'POST',\n compress: true,\n headers: {\n 'content-type': `multipart/form-data; boundary=${boundary}`,\n connection: 'keep-alive',\n },\n body: formData,\n };\n}\nasync function attachFormValue(form, id, value, agent) {\n if (value == null) {\n return;\n }\n if (typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number') {\n form.addPart({\n headers: { 'content-disposition': `form-data; name=\"${id}\"` },\n body: `${value}`,\n });\n return;\n }\n if (id === 'thumb' || id === 'thumbnail') {\n const attachmentId = crypto.randomBytes(16).toString('hex');\n await attachFormMedia(form, value, attachmentId, agent);\n return form.addPart({\n headers: { 'content-disposition': `form-data; name=\"${id}\"` },\n body: `attach://${attachmentId}`,\n });\n }\n if (Array.isArray(value)) {\n const items = await Promise.all(value.map(async (item) => {\n var _a;\n if (typeof item.media !== 'object') {\n return await Promise.resolve(item);\n }\n const attachmentId = crypto.randomBytes(16).toString('hex');\n await attachFormMedia(form, item.media, attachmentId, agent);\n const thumb = (_a = item.thumb) !== null && _a !== void 0 ? _a : item.thumbnail;\n if (typeof thumb === 'object') {\n const thumbAttachmentId = crypto.randomBytes(16).toString('hex');\n await attachFormMedia(form, thumb, thumbAttachmentId, agent);\n return {\n ...item,\n media: `attach://${attachmentId}`,\n thumbnail: `attach://${thumbAttachmentId}`,\n };\n }\n return { ...item, media: `attach://${attachmentId}` };\n }));\n return form.addPart({\n headers: { 'content-disposition': `form-data; name=\"${id}\"` },\n body: JSON.stringify(items),\n });\n }\n if (value &&\n typeof value === 'object' &&\n (0, check_1.hasProp)(value, 'media') &&\n (0, check_1.hasProp)(value, 'type') &&\n typeof value.media !== 'undefined' &&\n typeof value.type !== 'undefined') {\n const attachmentId = crypto.randomBytes(16).toString('hex');\n await attachFormMedia(form, value.media, attachmentId, agent);\n return form.addPart({\n headers: { 'content-disposition': `form-data; name=\"${id}\"` },\n body: JSON.stringify({\n ...value,\n media: `attach://${attachmentId}`,\n }),\n });\n }\n return await attachFormMedia(form, value, id, agent);\n}\nasync function attachFormMedia(form, media, id, agent) {\n var _a, _b, _c;\n let fileName = (_a = media.filename) !== null && _a !== void 0 ? _a : `${id}.${(_b = DEFAULT_EXTENSIONS[id]) !== null && _b !== void 0 ? _b : 'dat'}`;\n if ('url' in media && media.url !== undefined) {\n const timeout = 500000; // ms\n const res = await (0, node_fetch_1.default)(media.url, { agent, timeout });\n return form.addPart({\n headers: {\n 'content-disposition': `form-data; name=\"${id}\"; filename=\"${fileName}\"`,\n },\n body: res.body,\n });\n }\n if ('source' in media && media.source) {\n let mediaSource = media.source;\n if (typeof media.source === 'string') {\n const source = await (0, promises_1.realpath)(media.source);\n if ((await (0, promises_1.stat)(source)).isFile()) {\n fileName = (_c = media.filename) !== null && _c !== void 0 ? _c : path.basename(media.source);\n mediaSource = await fs.createReadStream(media.source);\n }\n else {\n throw new TypeError(`Unable to upload '${media.source}', not a file`);\n }\n }\n if (isStream(mediaSource) || Buffer.isBuffer(mediaSource)) {\n form.addPart({\n headers: {\n 'content-disposition': `form-data; name=\"${id}\"; filename=\"${fileName}\"`,\n },\n body: mediaSource,\n });\n }\n }\n}\nasync function answerToWebhook(response, payload, options) {\n if (!includesMedia(payload)) {\n if (!response.headersSent) {\n response.setHeader('content-type', 'application/json');\n }\n response.end(JSON.stringify(payload), 'utf-8');\n return true;\n }\n const { headers, body } = await buildFormDataConfig(payload, options.attachmentAgent);\n if (!response.headersSent) {\n for (const [key, value] of Object.entries(headers)) {\n response.setHeader(key, value);\n }\n }\n await new Promise((resolve) => {\n response.on('finish', resolve);\n body.pipe(response);\n });\n return true;\n}\nfunction redactToken(error) {\n error.message = error.message.replace(/\\/(bot|user)(\\d+):[^/]+\\//, '/$1$2:[REDACTED]/');\n throw error;\n}\nclass ApiClient {\n constructor(token, options, response) {\n this.token = token;\n this.response = response;\n this.options = {\n ...DEFAULT_OPTIONS,\n ...(0, compact_1.compactOptions)(options),\n };\n if (this.options.apiRoot.startsWith('http://')) {\n this.options.agent = undefined;\n }\n }\n /**\n * If set to `true`, first _eligible_ call will avoid performing a POST request.\n * Note that such a call:\n * 1. cannot report errors or return meaningful values,\n * 2. resolves before bot API has a chance to process it,\n * 3. prematurely confirms the update as processed.\n *\n * https://core.telegram.org/bots/faq#how-can-i-make-requests-in-response-to-updates\n * https://github.com/telegraf/telegraf/pull/1250\n */\n set webhookReply(enable) {\n this.options.webhookReply = enable;\n }\n get webhookReply() {\n return this.options.webhookReply;\n }\n async callApi(method, payload, { signal } = {}) {\n const { token, options, response } = this;\n if (options.webhookReply &&\n (response === null || response === void 0 ? void 0 : response.writableEnded) === false &&\n WEBHOOK_REPLY_METHOD_ALLOWLIST.has(method)) {\n debug('Call via webhook', method, payload);\n // @ts-expect-error using webhookReply is an optimisation that doesn't respond with normal result\n // up to the user to deal with this\n return await answerToWebhook(response, { method, ...payload }, options);\n }\n if (!token) {\n throw new error_1.default({\n error_code: 401,\n description: 'Bot Token is required',\n });\n }\n debug('HTTP call', method, payload);\n const config = includesMedia(payload)\n ? await buildFormDataConfig({ method, ...payload }, options.attachmentAgent)\n : await buildJSONConfig(payload);\n const apiUrl = new url_1.URL(`./${options.apiMode}${token}${options.testEnv ? '/test' : ''}/${method}`, options.apiRoot);\n config.agent = options.agent;\n // @ts-expect-error AbortSignal shim is missing some props from Request.AbortSignal\n config.signal = signal;\n config.timeout = 500000; // ms\n const res = await (0, node_fetch_1.default)(apiUrl, config).catch(redactToken);\n if (res.status >= 500) {\n const errorPayload = {\n error_code: res.status,\n description: res.statusText,\n };\n throw new error_1.default(errorPayload, { method, payload });\n }\n const data = await res.json();\n if (!data.ok) {\n debug('API call failed', data);\n throw new error_1.default(data, { method, payload });\n }\n return data.result;\n }\n}\nexports.default = ApiClient;\n",
|
|
52
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.linkOrMention = exports.createFmt = exports.join = exports.FmtString = void 0;\nconst util_1 = require(\"./util\");\nclass FmtString {\n constructor(text, entities) {\n this.text = text;\n if (entities) {\n this.entities = entities;\n // force parse_mode to undefined if entities are present\n this.parse_mode = undefined;\n }\n }\n static normalise(content) {\n if (content instanceof FmtString)\n return content;\n return new FmtString(String(content));\n }\n}\nexports.FmtString = FmtString;\nconst isArray = Array.isArray;\n/** Given a base FmtString and something to append to it, mutates the base */\nconst _add = (base, next) => {\n var _a;\n const len = base.text.length;\n if (next instanceof FmtString) {\n base.text = `${base.text}${next.text}`;\n // next.entities could be undefined and condition will fail\n for (let i = 0; i < (((_a = next.entities) === null || _a === void 0 ? void 0 : _a.length) || 0); i++) {\n // because of the above condition, next.entities[i] cannot be undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const entity = next.entities[i];\n // base.entities is ensured by caller\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n base.entities.push({ ...entity, offset: entity.offset + len });\n }\n }\n else\n base.text = `${base.text}${next}`;\n};\n/**\n * Given an `Iterable<FmtString | string | Any>` and a separator, flattens the list into a single FmtString.\n * Analogous to Array#join -> string, but for FmtString\n */\nconst join = (fragments, separator) => {\n const result = new FmtString('');\n // ensure entities array so loop doesn't need to check\n result.entities = [];\n const iter = fragments[Symbol.iterator]();\n let curr = iter.next();\n while (!curr.done) {\n _add(result, curr.value);\n curr = iter.next();\n if (separator && !curr.done)\n _add(result, separator);\n }\n // set parse_mode: undefined if entities are present\n if (result.entities.length)\n result.parse_mode = undefined;\n // remove entities array if not relevant\n else\n delete result.entities;\n return result;\n};\nexports.join = join;\n/** Internal constructor for all fmt helpers */\nfunction createFmt(kind, opts) {\n return function fmt(parts, ...items) {\n var _a;\n parts = isArray(parts) ? parts : [parts];\n const result = (0, exports.join)((0, util_1.zip)(parts, items));\n if (kind) {\n (_a = result.entities) !== null && _a !== void 0 ? _a : (result.entities = []);\n result.entities.unshift({\n type: kind,\n offset: 0,\n length: result.text.length,\n ...opts,\n });\n result.parse_mode = undefined;\n }\n return result;\n };\n}\nexports.createFmt = createFmt;\nconst linkOrMention = (content, data) => {\n const { text, entities = [] } = FmtString.normalise(content);\n entities.unshift(Object.assign(data, { offset: 0, length: text.length }));\n return new FmtString(text, entities);\n};\nexports.linkOrMention = linkOrMention;\n",
|
|
53
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mention = exports.link = exports.pre = exports.code = exports.quote = exports.underline = exports.strikethrough = exports.spoiler = exports.italic = exports.bold = exports.fmt = exports.join = exports.FmtString = void 0;\nconst formatting_1 = require(\"./core/helpers/formatting\");\nObject.defineProperty(exports, \"FmtString\", { enumerable: true, get: function () { return formatting_1.FmtString; } });\n// Nests<A, B> means the function will return A, and it can nest B\n// Nests<'fmt', string> means it will nest anything\n// Nests<'code', never> means it will not nest anything\n// Allowing everything to nest 'fmt' is a necessary evil; it allows to indirectly nest illegal entities\n// Except for 'code' and 'pre', which don't nest anything anyway, so they only deal with strings\nexports.join = formatting_1.join;\nexports.fmt = (0, formatting_1.createFmt)();\nexports.bold = (0, formatting_1.createFmt)('bold');\nexports.italic = (0, formatting_1.createFmt)('italic');\nexports.spoiler = (0, formatting_1.createFmt)('spoiler');\nexports.strikethrough = \n//\n(0, formatting_1.createFmt)('strikethrough');\nexports.underline = \n//\n(0, formatting_1.createFmt)('underline');\nexports.quote = \n//\n(0, formatting_1.createFmt)('blockquote');\nexports.code = (0, formatting_1.createFmt)('code');\nconst pre = (language) => (0, formatting_1.createFmt)('pre', { language });\nexports.pre = pre;\nconst link = (content, url) => \n//\n(0, formatting_1.linkOrMention)(content, { type: 'text_link', url });\nexports.link = link;\nconst mention = (name, user) => typeof user === 'number'\n ? (0, exports.link)(name, 'tg://user?id=' + user)\n : (0, formatting_1.linkOrMention)(name, {\n type: 'text_mention',\n user,\n });\nexports.mention = mention;\n",
|
|
54
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Telegram = void 0;\nconst client_1 = __importDefault(require(\"./core/network/client\"));\nconst path_1 = require(\"path\");\nconst url_1 = require(\"url\");\nconst format_1 = require(\"./format\");\nconst util_1 = require(\"./core/helpers/util\");\nclass Telegram extends client_1.default {\n /**\n * Get basic information about the bot\n */\n getMe() {\n return this.callApi('getMe', {});\n }\n /**\n * Get basic info about a file and prepare it for downloading.\n * @param fileId Id of file to get link to\n */\n getFile(fileId) {\n return this.callApi('getFile', { file_id: fileId });\n }\n /**\n * Get download link to a file.\n */\n async getFileLink(fileId) {\n if (typeof fileId === 'string') {\n fileId = await this.getFile(fileId);\n }\n else if (fileId.file_path === undefined) {\n fileId = await this.getFile(fileId.file_id);\n }\n // Local bot API instances return the absolute path to the file\n if (fileId.file_path !== undefined && (0, path_1.isAbsolute)(fileId.file_path)) {\n const url = new url_1.URL(this.options.apiRoot);\n url.port = '';\n url.pathname = fileId.file_path;\n url.protocol = 'file:';\n return url;\n }\n return new url_1.URL(`./file/${this.options.apiMode}${this.token}${this.options.testEnv ? '/test' : ''\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n }/${fileId.file_path}`, this.options.apiRoot);\n }\n /**\n * Directly request incoming updates.\n * You should probably use `Telegraf::launch` instead.\n */\n getUpdates(timeout, limit, offset, allowedUpdates) {\n return this.callApi('getUpdates', {\n allowed_updates: allowedUpdates,\n limit,\n offset,\n timeout,\n });\n }\n getWebhookInfo() {\n return this.callApi('getWebhookInfo', {});\n }\n getGameHighScores(userId, inlineMessageId, chatId, messageId) {\n return this.callApi('getGameHighScores', {\n user_id: userId,\n inline_message_id: inlineMessageId,\n chat_id: chatId,\n message_id: messageId,\n });\n }\n setGameScore(userId, score, inlineMessageId, chatId, messageId, editMessage = true, force = false) {\n return this.callApi('setGameScore', {\n force,\n score,\n user_id: userId,\n inline_message_id: inlineMessageId,\n chat_id: chatId,\n message_id: messageId,\n disable_edit_message: !editMessage,\n });\n }\n /**\n * Specify a url to receive incoming updates via an outgoing webhook.\n * @param url HTTPS url to send updates to. Use an empty string to remove webhook integration\n */\n setWebhook(url, extra) {\n return this.callApi('setWebhook', {\n url,\n ...extra,\n });\n }\n /**\n * Remove webhook integration.\n */\n deleteWebhook(extra) {\n return this.callApi('deleteWebhook', {\n ...extra,\n });\n }\n /**\n * Send a text message.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param text Text of the message to be sent\n */\n sendMessage(chatId, text, extra) {\n const t = format_1.FmtString.normalise(text);\n return this.callApi('sendMessage', { chat_id: chatId, ...extra, ...t });\n }\n /**\n * Forward existing message.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param fromChatId Unique identifier for the chat where the original message was sent (or channel username in the format @channelusername)\n * @param messageId Message identifier in the chat specified in from_chat_id\n */\n forwardMessage(chatId, fromChatId, messageId, extra) {\n return this.callApi('forwardMessage', {\n chat_id: chatId,\n from_chat_id: fromChatId,\n message_id: messageId,\n ...extra,\n });\n }\n /**\n * Use this method to forward multiple messages of any kind. If some of the specified messages can't be found or forwarded, they are skipped. Service messages and messages with protected content can't be forwarded. Album grouping is kept for forwarded messages.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param fromChatId Unique identifier for the chat where the original messages were sent (or channel username in the format @channelusername)\n * @param messageIds Identifiers of 1-100 messages in the chat from_chat_id to forward. The identifiers must be specified in a strictly increasing order.\n */\n forwardMessages(chatId, fromChatId, messageIds, extra) {\n return this.callApi('forwardMessages', {\n chat_id: chatId,\n from_chat_id: fromChatId,\n message_ids: messageIds,\n ...extra,\n });\n }\n /**\n * Use this method when you need to tell the user that something is happening on the bot's side.\n * The status is set for 5 seconds or less (when a message arrives from your bot, Telegram clients clear its typing status).\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendChatAction(chat_id, action, extra) {\n return this.callApi('sendChatAction', { chat_id, action, ...extra });\n }\n /**\n * Use this method to change the chosen reactions on a message. Service messages can't be reacted to.\n * Automatically forwarded messages from a channel to its discussion group have the same available\n * reactions as messages in the channel. In albums, bots must react to the first message.\n * @param chat_id Unique identifier for the target chat or username of the target channel (in the format `@channelusername`)\n * @param message_id Identifier of the target message\n * @param reaction New list of reaction types to set on the message. Currently, as non-premium users, bots can set up\n * to one reaction per message. A custom emoji reaction can be used if it is either already present on the message\n * or explicitly allowed by chat administrators.\n * @param is_big Pass True to set the reaction with a big animation\n * @returns\n */\n setMessageReaction(chat_id, message_id, reaction, is_big) {\n return this.callApi('setMessageReaction', {\n chat_id,\n message_id,\n reaction,\n is_big,\n });\n }\n getUserProfilePhotos(userId, offset, limit) {\n return this.callApi('getUserProfilePhotos', {\n user_id: userId,\n offset,\n limit,\n });\n }\n /**\n * Send point on the map.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendLocation(chatId, latitude, longitude, extra) {\n return this.callApi('sendLocation', {\n chat_id: chatId,\n latitude,\n longitude,\n ...extra,\n });\n }\n sendVenue(chatId, latitude, longitude, title, address, extra) {\n return this.callApi('sendVenue', {\n latitude,\n longitude,\n title,\n address,\n chat_id: chatId,\n ...extra,\n });\n }\n /**\n * @param chatId Unique identifier for the target private chat\n */\n sendInvoice(chatId, invoice, extra) {\n return this.callApi('sendInvoice', {\n chat_id: chatId,\n ...invoice,\n ...extra,\n });\n }\n sendContact(chatId, phoneNumber, firstName, extra) {\n return this.callApi('sendContact', {\n chat_id: chatId,\n phone_number: phoneNumber,\n first_name: firstName,\n ...extra,\n });\n }\n /**\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendPhoto(chatId, photo, extra) {\n return this.callApi('sendPhoto', {\n chat_id: chatId,\n photo,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * Send a dice, which will have a random value from 1 to 6.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendDice(chatId, extra) {\n return this.callApi('sendDice', { chat_id: chatId, ...extra });\n }\n /**\n * Send general files. Bots can currently send files of any type of up to 50 MB in size, this limit may be changed in the future.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendDocument(chatId, document, extra) {\n return this.callApi('sendDocument', {\n chat_id: chatId,\n document,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * Send audio files, if you want Telegram clients to display them in the music player.\n * Your audio must be in the .mp3 format.\n * Bots can currently send audio files of up to 50 MB in size, this limit may be changed in the future.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendAudio(chatId, audio, extra) {\n return this.callApi('sendAudio', {\n chat_id: chatId,\n audio,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * Send .webp, animated .tgs, or video .webm stickers\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendSticker(chatId, sticker, extra) {\n return this.callApi('sendSticker', { chat_id: chatId, sticker, ...extra });\n }\n /**\n * Send video files, Telegram clients support mp4 videos (other formats may be sent as Document).\n * Bots can currently send video files of up to 50 MB in size, this limit may be changed in the future.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendVideo(chatId, video, extra) {\n return this.callApi('sendVideo', {\n chat_id: chatId,\n video,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * Send .gif animations.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendAnimation(chatId, animation, extra) {\n return this.callApi('sendAnimation', {\n chat_id: chatId,\n animation,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * Send video messages.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendVideoNote(chatId, videoNote, extra) {\n return this.callApi('sendVideoNote', {\n chat_id: chatId,\n video_note: videoNote,\n ...extra,\n });\n }\n /**\n * Send audio files, if you want Telegram clients to display the file as a playable voice message. For this to work, your audio must be in an .ogg file encoded with OPUS (other formats may be sent as Audio or Document). On success, the sent Message is returned. Bots can currently send voice messages of up to 50 MB in size, this limit may be changed in the future.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n sendVoice(chatId, voice, extra) {\n return this.callApi('sendVoice', {\n chat_id: chatId,\n voice,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * @param chatId Unique identifier for the target chat\n * @param gameShortName Short name of the game, serves as the unique identifier for the game. Set up your games via Botfather.\n */\n sendGame(chatId, gameName, extra) {\n return this.callApi('sendGame', {\n chat_id: chatId,\n game_short_name: gameName,\n ...extra,\n });\n }\n /**\n * Send a group of photos or videos as an album.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param media A JSON-serialized array describing photos and videos to be sent, must include 2–10 items\n */\n sendMediaGroup(chatId, media, extra) {\n return this.callApi('sendMediaGroup', { chat_id: chatId, media, ...extra });\n }\n /**\n * Send a native poll.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param question Poll question, 1-255 characters\n * @param options A JSON-serialized list of answer options, 2-10 strings 1-100 characters each\n */\n sendPoll(chatId, question, options, extra) {\n return this.callApi('sendPoll', {\n chat_id: chatId,\n type: 'regular',\n question,\n options,\n ...extra,\n });\n }\n /**\n * Send a native quiz.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param question Poll question, 1-255 characters\n * @param options A JSON-serialized list of answer options, 2-10 strings 1-100 characters each\n */\n sendQuiz(chatId, question, options, extra) {\n return this.callApi('sendPoll', {\n chat_id: chatId,\n type: 'quiz',\n question,\n options,\n ...extra,\n });\n }\n /**\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageId Identifier of the original message with the poll\n */\n stopPoll(chatId, messageId, extra) {\n return this.callApi('stopPoll', {\n chat_id: chatId,\n message_id: messageId,\n ...extra,\n });\n }\n /**\n * Get up to date information about the chat (current name of the user for one-on-one conversations, current username of a user, group or channel, etc.).\n * @param chatId Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)\n */\n getChat(chatId) {\n return this.callApi('getChat', { chat_id: chatId });\n }\n /**\n * @param chatId Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)\n */\n getChatAdministrators(chatId) {\n return this.callApi('getChatAdministrators', { chat_id: chatId });\n }\n /**\n * Get information about a member of a chat.\n * @param chatId Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)\n * @param userId Unique identifier of the target user\n */\n getChatMember(chatId, userId) {\n return this.callApi('getChatMember', { chat_id: chatId, user_id: userId });\n }\n /**\n * Get the number of members in a chat.\n * @param chatId Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)\n */\n getChatMembersCount(chatId) {\n return this.callApi('getChatMembersCount', { chat_id: chatId });\n }\n /**\n * Send answers to an inline query.\n * No more than 50 results per query are allowed.\n */\n answerInlineQuery(inlineQueryId, results, extra) {\n return this.callApi('answerInlineQuery', {\n inline_query_id: inlineQueryId,\n results,\n ...extra,\n });\n }\n setChatPermissions(chatId, permissions, extra) {\n return this.callApi('setChatPermissions', {\n chat_id: chatId,\n permissions,\n ...extra,\n });\n }\n /**\n * Kick a user from a group, a supergroup or a channel. In the case of supergroups and channels, the user will not be able to return to the group on their own using invite links, etc., unless unbanned first. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.\n * @param chatId Unique identifier for the target group or username of the target supergroup or channel (in the format `@channelusername`)\n * @param untilDate Date when the user will be unbanned, unix time. If user is banned for more than 366 days or less than 30 seconds from the current time they are considered to be banned forever\n */\n banChatMember(chatId, userId, untilDate, extra) {\n return this.callApi('banChatMember', {\n chat_id: chatId,\n user_id: userId,\n until_date: untilDate,\n ...extra,\n });\n }\n /**\n * Kick a user from a group, a supergroup or a channel. In the case of supergroups and channels, the user will not be able to return to the group on their own using invite links, etc., unless unbanned first. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.\n * @param chatId Unique identifier for the target group or username of the target supergroup or channel (in the format `@channelusername`)\n * @param untilDate Date when the user will be unbanned, unix time. If user is banned for more than 366 days or less than 30 seconds from the current time they are considered to be banned forever\n * @deprecated since API 5.3. Use {@link Telegram.banChatMember}\n */\n get kickChatMember() {\n return this.banChatMember;\n }\n /**\n * Promote or demote a user in a supergroup or a channel. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. Pass False for all boolean parameters to demote a user.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format `@channelusername`)\n */\n promoteChatMember(chatId, userId, extra) {\n return this.callApi('promoteChatMember', {\n chat_id: chatId,\n user_id: userId,\n ...extra,\n });\n }\n /**\n * Restrict a user in a supergroup. The bot must be an administrator in the supergroup for this to work and must have the appropriate admin rights. Pass True for all boolean parameters to lift restrictions from a user.\n * @param chatId Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n */\n restrictChatMember(chatId, userId, extra) {\n return this.callApi('restrictChatMember', {\n chat_id: chatId,\n user_id: userId,\n ...extra,\n });\n }\n setChatAdministratorCustomTitle(chatId, userId, title) {\n return this.callApi('setChatAdministratorCustomTitle', {\n chat_id: chatId,\n user_id: userId,\n custom_title: title,\n });\n }\n /**\n * Export an invite link to a supergroup or a channel. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n exportChatInviteLink(chatId) {\n return this.callApi('exportChatInviteLink', { chat_id: chatId });\n }\n createChatInviteLink(chatId, extra) {\n return this.callApi('createChatInviteLink', {\n chat_id: chatId,\n ...extra,\n });\n }\n createInvoiceLink(invoice) {\n return this.callApi('createInvoiceLink', {\n ...invoice,\n });\n }\n editChatInviteLink(chatId, inviteLink, extra) {\n return this.callApi('editChatInviteLink', {\n chat_id: chatId,\n invite_link: inviteLink,\n ...extra,\n });\n }\n revokeChatInviteLink(chatId, inviteLink) {\n return this.callApi('revokeChatInviteLink', {\n chat_id: chatId,\n invite_link: inviteLink,\n });\n }\n setChatPhoto(chatId, photo) {\n return this.callApi('setChatPhoto', { chat_id: chatId, photo });\n }\n deleteChatPhoto(chatId) {\n return this.callApi('deleteChatPhoto', { chat_id: chatId });\n }\n /**\n * Change the title of a chat. Titles can't be changed for private chats. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.\n * @param chatId Unique identifier for the target group or username of the target supergroup or channel (in the format `@channelusername`)\n * @param title New chat title, 1-255 characters\n */\n setChatTitle(chatId, title) {\n return this.callApi('setChatTitle', { chat_id: chatId, title });\n }\n setChatDescription(chatId, description) {\n return this.callApi('setChatDescription', { chat_id: chatId, description });\n }\n /**\n * Pin a message in a group, a supergroup, or a channel. The bot must be an administrator in the chat for this to work and must have the 'can_pin_messages' admin right in the supergroup or 'can_edit_messages' admin right in the channel.\n * @param chatId Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n */\n pinChatMessage(chatId, messageId, extra) {\n return this.callApi('pinChatMessage', {\n chat_id: chatId,\n message_id: messageId,\n ...extra,\n });\n }\n /**\n * Unpin a message in a group, a supergroup, or a channel. The bot must be an administrator in the chat for this to work and must have the 'can_pin_messages' admin right in the supergroup or 'can_edit_messages' admin right in the channel.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n unpinChatMessage(chatId, messageId) {\n return this.callApi('unpinChatMessage', {\n chat_id: chatId,\n message_id: messageId,\n });\n }\n /**\n * Clear the list of pinned messages in a chat.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n */\n unpinAllChatMessages(chatId) {\n return this.callApi('unpinAllChatMessages', { chat_id: chatId });\n }\n /**\n * Use this method for your bot to leave a group, supergroup or channel.\n * @param chatId Unique identifier for the target chat or username of the target supergroup or channel (in the format @channelusername)\n */\n leaveChat(chatId) {\n return this.callApi('leaveChat', { chat_id: chatId });\n }\n /**\n * Unban a user from a supergroup or a channel. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.\n * @param chatId Unique identifier for the target group or username of the target supergroup or channel (in the format @username)\n * @param userId Unique identifier of the target user\n */\n unbanChatMember(chatId, userId, extra) {\n return this.callApi('unbanChatMember', {\n chat_id: chatId,\n user_id: userId,\n ...extra,\n });\n }\n answerCbQuery(callbackQueryId, text, extra) {\n return this.callApi('answerCallbackQuery', {\n text,\n callback_query_id: callbackQueryId,\n ...extra,\n });\n }\n answerGameQuery(callbackQueryId, url) {\n return this.callApi('answerCallbackQuery', {\n url,\n callback_query_id: callbackQueryId,\n });\n }\n /**\n * Use this method to get the list of boosts added to a chat by a user. Requires administrator rights in the chat. Returns a UserChatBoosts object.\n * @param chat_id Unique identifier for the chat or username of the channel (in the format `@channelusername`)\n * @param user_id Unique identifier of the target user\n */\n getUserChatBoosts(chat_id, user_id) {\n return this.callApi('getUserChatBoosts', {\n chat_id,\n user_id,\n });\n }\n /**\n * If you sent an invoice requesting a shipping address and the parameter is_flexible was specified,\n * the Bot API will send an Update with a shipping_query field to the bot.\n * Reply to shipping queries.\n * @param ok Specify True if delivery to the specified address is possible and False if there are any problems (for example, if delivery to the specified address is not possible)\n * @param shippingOptions Required if ok is True. A JSON-serialized array of available shipping options.\n * @param errorMessage Required if ok is False. Error message in human readable form that explains why it is impossible to complete the order (e.g. \"Sorry, delivery to your desired address is unavailable'). Telegram will display this message to the user.\n */\n answerShippingQuery(shippingQueryId, ok, shippingOptions, errorMessage) {\n return this.callApi('answerShippingQuery', {\n ok,\n shipping_query_id: shippingQueryId,\n shipping_options: shippingOptions,\n error_message: errorMessage,\n });\n }\n /**\n * Once the user has confirmed their payment and shipping details, the Bot API sends the final confirmation in the form of an Update with the field pre_checkout_query.\n * Respond to such pre-checkout queries. On success, True is returned.\n * Note: The Bot API must receive an answer within 10 seconds after the pre-checkout query was sent.\n * @param ok Specify True if everything is alright (goods are available, etc.) and the bot is ready to proceed with the order. Use False if there are any problems.\n * @param errorMessage Required if ok is False. Error message in human readable form that explains the reason for failure to proceed with the checkout (e.g. \"Sorry, somebody just bought the last of our amazing black T-shirts while you were busy filling out your payment details. Please choose a different color or garment!\"). Telegram will display this message to the user.\n */\n answerPreCheckoutQuery(preCheckoutQueryId, ok, errorMessage) {\n return this.callApi('answerPreCheckoutQuery', {\n ok,\n pre_checkout_query_id: preCheckoutQueryId,\n error_message: errorMessage,\n });\n }\n answerWebAppQuery(webAppQueryId, result) {\n return this.callApi('answerWebAppQuery', {\n web_app_query_id: webAppQueryId,\n result,\n });\n }\n /**\n * Edit text and game messages sent by the bot or via the bot (for inline bots).\n * On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.\n * @param chatId Required if inlineMessageId is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageId Required if inlineMessageId is not specified. Identifier of the sent message\n * @param inlineMessageId Required if chatId and messageId are not specified. Identifier of the inline message\n * @param text New text of the message\n */\n editMessageText(chatId, messageId, inlineMessageId, text, extra) {\n const t = format_1.FmtString.normalise(text);\n return this.callApi('editMessageText', {\n chat_id: chatId,\n message_id: messageId,\n inline_message_id: inlineMessageId,\n ...extra,\n ...t,\n });\n }\n /**\n * Edit captions of messages sent by the bot or via the bot (for inline bots).\n * On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.\n * @param chatId Required if inlineMessageId is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageId Required if inlineMessageId is not specified. Identifier of the sent message\n * @param inlineMessageId Required if chatId and messageId are not specified. Identifier of the inline message\n * @param caption New caption of the message\n * @param markup A JSON-serialized object for an inline keyboard.\n */\n editMessageCaption(chatId, messageId, inlineMessageId, caption, extra) {\n return this.callApi('editMessageCaption', {\n chat_id: chatId,\n message_id: messageId,\n inline_message_id: inlineMessageId,\n ...extra,\n ...(0, util_1.fmtCaption)({ caption }),\n });\n }\n /**\n * Edit animation, audio, document, photo, or video messages.\n * If a message is a part of a message album, then it can be edited only to a photo or a video.\n * Otherwise, message type can be changed arbitrarily.\n * When inline message is edited, new file can't be uploaded.\n * Use previously uploaded file via its file_id or specify a URL.\n * @param chatId Required if inlineMessageId is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageId Required if inlineMessageId is not specified. Identifier of the sent message\n * @param inlineMessageId Required if chatId and messageId are not specified. Identifier of the inline message\n * @param media New media of message\n * @param extra Additional parameters, such as reply_markup\n */\n editMessageMedia(chatId, messageId, inlineMessageId, media, extra) {\n return this.callApi('editMessageMedia', {\n chat_id: chatId,\n message_id: messageId,\n inline_message_id: inlineMessageId,\n media: (0, util_1.fmtCaption)(media),\n ...extra,\n });\n }\n /**\n * Edit only the reply markup of messages sent by the bot or via the bot (for inline bots).\n * @param chatId Required if inlineMessageId is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageId Required if inlineMessageId is not specified. Identifier of the sent message\n * @param inlineMessageId Required if chatId and messageId are not specified. Identifier of the inline message\n * @param markup A JSON-serialized object for an inline keyboard.\n * @returns If edited message is sent by the bot, the edited Message is returned, otherwise True is returned.\n */\n editMessageReplyMarkup(chatId, messageId, inlineMessageId, markup) {\n return this.callApi('editMessageReplyMarkup', {\n chat_id: chatId,\n message_id: messageId,\n inline_message_id: inlineMessageId,\n reply_markup: markup,\n });\n }\n editMessageLiveLocation(chatId, messageId, inlineMessageId, latitude, longitude, extra) {\n return this.callApi('editMessageLiveLocation', {\n latitude,\n longitude,\n chat_id: chatId,\n message_id: messageId,\n inline_message_id: inlineMessageId,\n ...extra,\n });\n }\n stopMessageLiveLocation(chatId, messageId, inlineMessageId, markup) {\n return this.callApi('stopMessageLiveLocation', {\n chat_id: chatId,\n message_id: messageId,\n inline_message_id: inlineMessageId,\n reply_markup: markup,\n });\n }\n /**\n * Delete a message, including service messages, with the following limitations:\n * - A message can only be deleted if it was sent less than 48 hours ago.\n * - Bots can delete outgoing messages in groups and supergroups.\n * - Bots granted can_post_messages permissions can delete outgoing messages in channels.\n * - If the bot is an administrator of a group, it can delete any message there.\n * - If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageId Identifier of the message to delete\n */\n deleteMessage(chatId, messageId) {\n return this.callApi('deleteMessage', {\n chat_id: chatId,\n message_id: messageId,\n });\n }\n /**\n * Use this method to delete multiple messages simultaneously. If some of the specified messages can't be found, they are skipped.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param messageIds Identifiers of 1-100 messages to delete. See deleteMessage for limitations on which messages can be deleted\n */\n deleteMessages(chatId, messageIds) {\n return this.callApi('deleteMessages', {\n chat_id: chatId,\n message_ids: messageIds,\n });\n }\n setChatStickerSet(chatId, setName) {\n return this.callApi('setChatStickerSet', {\n chat_id: chatId,\n sticker_set_name: setName,\n });\n }\n deleteChatStickerSet(chatId) {\n return this.callApi('deleteChatStickerSet', { chat_id: chatId });\n }\n /**\n * Use this method to get custom emoji stickers, which can be used as a forum topic icon by any user.\n * Requires no parameters. Returns an Array of Sticker objects.\n *\n * @see https://core.telegram.org/bots/api#getforumtopiciconstickers\n */\n getForumTopicIconStickers() {\n return this.callApi('getForumTopicIconStickers', {});\n }\n /**\n * Use this method to create a topic in a forum supergroup chat. The bot must be an administrator in the chat for this\n * to work and must have the can_manage_topics administrator rights. Returns information about the created topic as a\n * ForumTopic object.\n *\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param name Topic name, 1-128 characters\n *\n * @see https://core.telegram.org/bots/api#createforumtopic\n */\n createForumTopic(chat_id, name, extra) {\n return this.callApi('createForumTopic', {\n chat_id,\n name,\n ...extra,\n });\n }\n /**\n * Use this method to edit name and icon of a topic in a forum supergroup chat. The bot must be an administrator in\n * the chat for this to work and must have can_manage_topics administrator rights, unless it is the creator of the\n * topic. Returns True on success.\n *\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param message_thread_id Unique identifier for the target message thread of the forum topic\n *\n * @see https://core.telegram.org/bots/api#editforumtopic\n */\n editForumTopic(chat_id, message_thread_id, extra) {\n return this.callApi('editForumTopic', {\n chat_id,\n message_thread_id,\n ...extra,\n });\n }\n /**\n * Use this method to close an open topic in a forum supergroup chat. The bot must be an administrator in the chat\n * for this to work and must have the can_manage_topics administrator rights, unless it is the creator of the topic.\n * Returns True on success.\n *\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param message_thread_id Unique identifier for the target message thread of the forum topic\n *\n * @see https://core.telegram.org/bots/api#closeforumtopic\n */\n closeForumTopic(chat_id, message_thread_id) {\n return this.callApi('closeForumTopic', {\n chat_id,\n message_thread_id,\n });\n }\n /**\n * Use this method to reopen a closed topic in a forum supergroup chat. The bot must be an administrator in the chat\n * for this to work and must have the can_manage_topics administrator rights, unless it is the creator of the topic.\n * Returns True on success.\n *\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param message_thread_id Unique identifier for the target message thread of the forum topic\n *\n * @see https://core.telegram.org/bots/api#reopenforumtopic\n */\n reopenForumTopic(chat_id, message_thread_id) {\n return this.callApi('reopenForumTopic', {\n chat_id,\n message_thread_id,\n });\n }\n /**\n * Use this method to delete a forum topic along with all its messages in a forum supergroup chat. The bot must be an\n * administrator in the chat for this to work and must have the can_delete_messages administrator rights.\n * Returns True on success.\n *\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param message_thread_id Unique identifier for the target message thread of the forum topic\n *\n * @see https://core.telegram.org/bots/api#deleteforumtopic\n */\n deleteForumTopic(chat_id, message_thread_id) {\n return this.callApi('deleteForumTopic', {\n chat_id,\n message_thread_id,\n });\n }\n /**\n * Use this method to clear the list of pinned messages in a forum topic. The bot must be an administrator in the chat\n * for this to work and must have the can_pin_messages administrator right in the supergroup. Returns True on success.\n *\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param message_thread_id Unique identifier for the target message thread of the forum topic\n *\n * @see https://core.telegram.org/bots/api#unpinallforumtopicmessages\n */\n unpinAllForumTopicMessages(chat_id, message_thread_id) {\n return this.callApi('unpinAllForumTopicMessages', {\n chat_id,\n message_thread_id,\n });\n }\n /**\n * Use this method to edit the name of the 'General' topic in a forum supergroup chat. The bot must be an administrator\n * in the chat for this to work and must have can_manage_topics administrator rights. Returns True on success.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n * @param name New topic name, 1-128 characters\n *\n * @see https://core.telegram.org/bots/api#editgeneralforumtopic\n */\n editGeneralForumTopic(chat_id, name) {\n return this.callApi('editGeneralForumTopic', { chat_id, name });\n }\n /**\n * Use this method to close an open 'General' topic in a forum supergroup chat. The bot must be an administrator in the\n * chat for this to work and must have the can_manage_topics administrator rights. Returns True on success.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n *\n * @see https://core.telegram.org/bots/api#closegeneralforumtopic\n */\n closeGeneralForumTopic(chat_id) {\n return this.callApi('closeGeneralForumTopic', { chat_id });\n }\n /**\n * Use this method to reopen a closed 'General' topic in a forum supergroup chat. The bot must be an administrator in\n * the chat for this to work and must have the can_manage_topics administrator rights. The topic will be automatically\n * unhidden if it was hidden. Returns True on success.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n *\n * @see https://core.telegram.org/bots/api#reopengeneralforumtopic\n */\n reopenGeneralForumTopic(chat_id) {\n return this.callApi('reopenGeneralForumTopic', { chat_id });\n }\n /**\n * Use this method to hide the 'General' topic in a forum supergroup chat. The bot must be an administrator in the chat\n * for this to work and must have the can_manage_topics administrator rights. The topic will be automatically closed\n * if it was open. Returns True on success.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n *\n * @see https://core.telegram.org/bots/api#hidegeneralforumtopic\n */\n hideGeneralForumTopic(chat_id) {\n return this.callApi('hideGeneralForumTopic', { chat_id });\n }\n /**\n * Use this method to unhide the 'General' topic in a forum supergroup chat. The bot must be an administrator in the\n * chat for this to work and must have the can_manage_topics administrator rights. Returns True on success.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n *\n * @see https://core.telegram.org/bots/api#unhidegeneralforumtopic\n */\n unhideGeneralForumTopic(chat_id) {\n return this.callApi('unhideGeneralForumTopic', { chat_id });\n }\n /**\n * Use this method to clear the list of pinned messages in a General forum topic.\n * The bot must be an administrator in the chat for this to work and must have the can_pin_messages administrator\n * right in the supergroup.\n *\n * @param chat_id Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)\n */\n unpinAllGeneralForumTopicMessages(chat_id) {\n return this.callApi('unpinAllGeneralForumTopicMessages', { chat_id });\n }\n getStickerSet(name) {\n return this.callApi('getStickerSet', { name });\n }\n /**\n * Upload a .png file with a sticker for later use in createNewStickerSet and addStickerToSet methods (can be used multiple times).\n * https://core.telegram.org/bots/api#sending-files\n * @param ownerId User identifier of sticker file owner\n * @param stickerFile Png image with the sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px.\n */\n uploadStickerFile(ownerId, sticker, sticker_format) {\n return this.callApi('uploadStickerFile', {\n user_id: ownerId,\n sticker_format,\n sticker,\n });\n }\n /**\n * Create new sticker set owned by a user. The bot will be able to edit the created sticker set.\n * @param ownerId User identifier of created sticker set owner\n * @param name Short name of sticker set, to be used in t.me/addstickers/ URLs (e.g., animals). Can contain only english letters, digits and underscores. Must begin with a letter, can't contain consecutive underscores and must end in “_by_<bot username>”. <bot_username> is case insensitive. 1-64 characters.\n * @param title Sticker set title, 1-64 characters\n */\n createNewStickerSet(ownerId, name, title, stickerData) {\n return this.callApi('createNewStickerSet', {\n name,\n title,\n user_id: ownerId,\n ...stickerData,\n });\n }\n /**\n * Add a new sticker to a set created by the bot.\n * @param ownerId User identifier of sticker set owner\n * @param name Sticker set name\n */\n addStickerToSet(ownerId, name, stickerData) {\n return this.callApi('addStickerToSet', {\n name,\n user_id: ownerId,\n ...stickerData,\n });\n }\n /**\n * Move a sticker in a set created by the bot to a specific position.\n * @param sticker File identifier of the sticker\n * @param position New sticker position in the set, zero-based\n */\n setStickerPositionInSet(sticker, position) {\n return this.callApi('setStickerPositionInSet', {\n sticker,\n position,\n });\n }\n /**\n * @deprecated since API 6.8. Use {@link Telegram.setStickerSetThumbnail}\n */\n get setStickerSetThumb() {\n return this.setStickerSetThumbnail;\n }\n /**\n * Use this method to set the thumbnail of a regular or mask sticker set.\n * The format of the thumbnail file must match the format of the stickers in the set.\n * @param name Sticker set name\n * @param userId User identifier of the sticker set owner\n * @param thumbnail A .WEBP or .PNG image with the thumbnail, must be up to 128 kilobytes in size\n * and have a width and height of exactly 100px, or a .TGS animation with a thumbnail up to\n * 32 kilobytes in size (see\n * [animated sticker technical requirements](https://core.telegram.org/stickers#animated-sticker-requirements)),\n * or a WEBM video with the thumbnail up to 32 kilobytes in size; see\n * [video sticker technical requirements](https://core.telegram.org/stickers#video-sticker-requirements).\n * Pass a file_id as a String to send a file that already exists on the Telegram servers, pass a\n * HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using\n * Input helpers. Animated and video sticker set thumbnails can't be uploaded via HTTP URL.\n * If omitted, then the thumbnail is dropped and the first sticker is used as the thumbnail.\n */\n setStickerSetThumbnail(name, userId, thumbnail) {\n return this.callApi('setStickerSetThumbnail', {\n name,\n user_id: userId,\n thumbnail,\n });\n }\n setStickerMaskPosition(sticker, mask_position) {\n return this.callApi('setStickerMaskPosition', { sticker, mask_position });\n }\n setStickerKeywords(sticker, keywords) {\n return this.callApi('setStickerKeywords', { sticker, keywords });\n }\n setStickerEmojiList(sticker, emoji_list) {\n return this.callApi('setStickerEmojiList', { sticker, emoji_list });\n }\n deleteStickerSet(name) {\n return this.callApi('deleteStickerSet', { name });\n }\n setStickerSetTitle(name, title) {\n return this.callApi('setStickerSetTitle', { name, title });\n }\n setCustomEmojiStickerSetThumbnail(name, custom_emoji_id) {\n return this.callApi('setCustomEmojiStickerSetThumbnail', {\n name,\n custom_emoji_id,\n });\n }\n /**\n * Delete a sticker from a set created by the bot.\n * @param sticker File identifier of the sticker\n */\n deleteStickerFromSet(sticker) {\n return this.callApi('deleteStickerFromSet', { sticker });\n }\n getCustomEmojiStickers(custom_emoji_ids) {\n return this.callApi('getCustomEmojiStickers', { custom_emoji_ids });\n }\n /**\n * Change the list of the bot's commands.\n * @param commands A list of bot commands to be set as the list of the bot's commands. At most 100 commands can be specified.\n */\n setMyCommands(commands, extra) {\n return this.callApi('setMyCommands', { commands, ...extra });\n }\n deleteMyCommands(extra = {}) {\n return this.callApi('deleteMyCommands', extra);\n }\n /**\n * Get the current list of the bot's commands.\n */\n getMyCommands(extra = {}) {\n return this.callApi('getMyCommands', extra);\n }\n /**\n * Use this method to change the bot's description, which is shown in the chat with the bot if the chat is empty.\n * @param description New bot description; 0-512 characters. Pass an empty string to remove the dedicated description for the given language.\n * @param language_code A two-letter ISO 639-1 language code. If empty, the description will be applied to all users for whose language there is no dedicated description.\n */\n setMyDescription(description, language_code) {\n return this.callApi('setMyDescription', { description, language_code });\n }\n /**\n * Use this method to change the bot's name.\n * @param name New bot name; 0-64 characters. Pass an empty string to remove the dedicated name for the given language.\n * @param language_code A two-letter ISO 639-1 language code. If empty, the name will be shown to all users for whose language there is no dedicated name.\n */\n setMyName(name, language_code) {\n return this.callApi('setMyName', { name, language_code });\n }\n /**\n * Use this method to get the current bot name for the given user language.\n * @param language_code A two-letter ISO 639-1 language code or an empty string\n */\n getMyName(language_code) {\n return this.callApi('getMyName', { language_code });\n }\n /**\n * Use this method to get the current bot description for the given user language.\n * @param language_code A two-letter ISO 639-1 language code.\n */\n getMyDescription(language_code) {\n return this.callApi('getMyDescription', { language_code });\n }\n /**\n * Use this method to change the bot's short description, which is shown on the bot's profile page and is sent together with the link when users share the bot.\n * @param description New short description for the bot; 0-120 characters. Pass an empty string to remove the dedicated short description for the given language.\n * @param language_code A two-letter ISO 639-1 language code. If empty, the short description will be applied to all users for whose language there is no dedicated short description.\n */\n setMyShortDescription(short_description, language_code) {\n return this.callApi('setMyShortDescription', {\n short_description,\n language_code,\n });\n }\n /**\n * Use this method to get the current bot short description for the given user language.\n * @param language_code A two-letter ISO 639-1 language code or an empty string\n */\n getMyShortDescription(language_code) {\n return this.callApi('getMyShortDescription', { language_code });\n }\n setPassportDataErrors(userId, errors) {\n return this.callApi('setPassportDataErrors', {\n user_id: userId,\n errors: errors,\n });\n }\n /**\n * Send copy of existing message.\n * @deprecated use `copyMessage` instead\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param message Received message object\n */\n sendCopy(chatId, message, extra) {\n return this.copyMessage(chatId, message.chat.id, message.message_id, extra);\n }\n /**\n * Send copy of existing message.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param fromChatId Unique identifier for the chat where the original message was sent (or channel username in the format @channelusername)\n * @param messageId Message identifier in the chat specified in from_chat_id\n */\n copyMessage(chatId, fromChatId, messageId, extra) {\n return this.callApi('copyMessage', {\n chat_id: chatId,\n from_chat_id: fromChatId,\n message_id: messageId,\n ...(0, util_1.fmtCaption)(extra),\n });\n }\n /**\n * Use this method to copy messages of any kind. If some of the specified messages can't be found or copied, they are skipped. Service messages, giveaway messages, giveaway winners messages, and invoice messages can't be copied. A quiz poll can be copied only if the value of the field correct_option_id is known to the bot. The method is analogous to the method forwardMessages, but the copied messages don't have a link to the original message. Album grouping is kept for copied messages.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param fromChatId Unique identifier for the chat where the original messages were sent (or channel username in the format @channelusername)\n * @param messageIds Identifiers of 1-100 messages in the chat from_chat_id to copy. The identifiers must be specified in a strictly increasing order.\n */\n copyMessages(chatId, fromChatId, messageIds, extra) {\n return this.callApi('copyMessages', {\n chat_id: chatId,\n from_chat_id: fromChatId,\n message_ids: messageIds,\n ...extra,\n });\n }\n /**\n * Approve a chat join request.\n * The bot must be an administrator in the chat for this to work and must have the can_invite_users administrator right.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param userId Unique identifier of the target user\n */\n approveChatJoinRequest(chatId, userId) {\n return this.callApi('approveChatJoinRequest', {\n chat_id: chatId,\n user_id: userId,\n });\n }\n /**\n * Decline a chat join request.\n * The bot must be an administrator in the chat for this to work and must have the can_invite_users administrator right.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param userId Unique identifier of the target user\n */\n declineChatJoinRequest(chatId, userId) {\n return this.callApi('declineChatJoinRequest', {\n chat_id: chatId,\n user_id: userId,\n });\n }\n /**\n * Ban a channel chat in a supergroup or a channel. The owner of the chat will not be able to send messages and join live streams on behalf of the chat, unless it is unbanned first.\n * The bot must be an administrator in the supergroup or channel for this to work and must have the appropriate administrator rights.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param senderChatId Unique identifier of the target sender chat\n */\n banChatSenderChat(chatId, senderChatId, extra) {\n return this.callApi('banChatSenderChat', {\n chat_id: chatId,\n sender_chat_id: senderChatId,\n ...extra,\n });\n }\n /**\n * Unban a previously banned channel chat in a supergroup or channel.\n * The bot must be an administrator for this to work and must have the appropriate administrator rights.\n * @param chatId Unique identifier for the target chat or username of the target channel (in the format @channelusername)\n * @param senderChatId Unique identifier of the target sender chat\n */\n unbanChatSenderChat(chatId, senderChatId) {\n return this.callApi('unbanChatSenderChat', {\n chat_id: chatId,\n sender_chat_id: senderChatId,\n });\n }\n /**\n * Use this method to change the bot's menu button in a private chat, or the default menu button. Returns true on success.\n * @param chatId Unique identifier for the target private chat. If not specified, default bot's menu button will be changed.\n * @param menuButton An object for the bot's new menu button.\n */\n setChatMenuButton({ chatId, menuButton, } = {}) {\n return this.callApi('setChatMenuButton', {\n chat_id: chatId,\n menu_button: menuButton,\n });\n }\n /**\n * Use this method to get the current value of the bot's menu button in a private chat, or the default menu button. Returns MenuButton on success.\n * @param chatId Unique identifier for the target private chat. If not specified, default bot's menu button will be returned.\n */\n getChatMenuButton({ chatId } = {}) {\n return this.callApi('getChatMenuButton', {\n chat_id: chatId,\n });\n }\n /**\n * Use this method to change the default administrator rights requested by the bot when it's added as an administrator to groups or channels.\n * These rights will be suggested to users, but they are are free to modify the list before adding the bot.\n */\n setMyDefaultAdministratorRights({ rights, forChannels, } = {}) {\n return this.callApi('setMyDefaultAdministratorRights', {\n rights,\n for_channels: forChannels,\n });\n }\n /**\n * Use this method to get the current default administrator rights of the bot. Returns ChatAdministratorRights on success.\n * @param forChannels Pass true to get default administrator rights of the bot in channels. Otherwise, default administrator rights of the bot for groups and supergroups will be returned.\n */\n getMyDefaultAdministratorRights({ forChannels, } = {}) {\n return this.callApi('getMyDefaultAdministratorRights', {\n for_channels: forChannels,\n });\n }\n /**\n * Log out from the cloud Bot API server before launching the bot locally.\n */\n logOut() {\n return this.callApi('logOut', {});\n }\n /**\n * Close the bot instance before moving it from one local server to another.\n */\n close() {\n return this.callApi('close', {});\n }\n}\nexports.Telegram = Telegram;\nexports.default = Telegram;\n",
|
|
55
|
+
"/* Node.js 6.4.0 and up has full support */\nvar hasFullSupport = (function () {\n try {\n if (!Buffer.isEncoding('latin1')) {\n return false\n }\n\n var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4)\n\n buf.fill('ab', 'ucs2')\n\n return (buf.toString('hex') === '61006200')\n } catch (_) {\n return false\n }\n}())\n\nfunction isSingleByte (val) {\n return (val.length === 1 && val.charCodeAt(0) < 256)\n}\n\nfunction fillWithNumber (buffer, val, start, end) {\n if (start < 0 || end > buffer.length) {\n throw new RangeError('Out of range index')\n }\n\n start = start >>> 0\n end = end === undefined ? buffer.length : end >>> 0\n\n if (end > start) {\n buffer.fill(val, start, end)\n }\n\n return buffer\n}\n\nfunction fillWithBuffer (buffer, val, start, end) {\n if (start < 0 || end > buffer.length) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return buffer\n }\n\n start = start >>> 0\n end = end === undefined ? buffer.length : end >>> 0\n\n var pos = start\n var len = val.length\n while (pos <= (end - len)) {\n val.copy(buffer, pos)\n pos += len\n }\n\n if (pos !== end) {\n val.copy(buffer, pos, 0, end - pos)\n }\n\n return buffer\n}\n\nfunction fill (buffer, val, start, end, encoding) {\n if (hasFullSupport) {\n return buffer.fill(val, start, end, encoding)\n }\n\n if (typeof val === 'number') {\n return fillWithNumber(buffer, val, start, end)\n }\n\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = buffer.length\n } else if (typeof end === 'string') {\n encoding = end\n end = buffer.length\n }\n\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n\n if (encoding === 'latin1') {\n encoding = 'binary'\n }\n\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n if (val === '') {\n return fillWithNumber(buffer, 0, start, end)\n }\n\n if (isSingleByte(val)) {\n return fillWithNumber(buffer, val.charCodeAt(0), start, end)\n }\n\n val = new Buffer(val, encoding)\n }\n\n if (Buffer.isBuffer(val)) {\n return fillWithBuffer(buffer, val, start, end)\n }\n\n // Other values (e.g. undefined, boolean, object) results in zero-fill\n return fillWithNumber(buffer, 0, start, end)\n}\n\nmodule.exports = fill\n",
|
|
56
|
+
"function allocUnsafe (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n }\n\n if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n\n if (Buffer.allocUnsafe) {\n return Buffer.allocUnsafe(size)\n } else {\n return new Buffer(size)\n }\n}\n\nmodule.exports = allocUnsafe\n",
|
|
57
|
+
"var bufferFill = require('buffer-fill')\nvar allocUnsafe = require('buffer-alloc-unsafe')\n\nmodule.exports = function alloc (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n }\n\n if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n\n if (Buffer.alloc) {\n return Buffer.alloc(size, fill, encoding)\n }\n\n var buffer = allocUnsafe(size)\n\n if (size === 0) {\n return buffer\n }\n\n if (fill === undefined) {\n return bufferFill(buffer, 0)\n }\n\n if (typeof encoding !== 'string') {\n encoding = undefined\n }\n\n return bufferFill(buffer, fill, encoding)\n}\n",
|
|
58
|
+
"/**\n * @author Michael Raith\n * @date 24.02.2016 12:04\n */\n\n'use strict';\n\nvar crypto = require('crypto');\nvar bufferAlloc = require('buffer-alloc');\n\n\n/**\n * Do a constant time string comparison. Always compare the complete strings\n * against each other to get a constant time. This method does not short-cut\n * if the two string's length differs.\n *\n * @param {string} a\n * @param {string} b\n *\n * @return {boolean}\n */\nvar safeCompare = function safeCompare(a, b) {\n var strA = String(a);\n var strB = String(b);\n var lenA = strA.length;\n var result = 0;\n\n if (lenA !== strB.length) {\n strB = strA;\n result = 1;\n }\n\n for (var i = 0; i < lenA; i++) {\n result |= (strA.charCodeAt(i) ^ strB.charCodeAt(i));\n }\n\n return result === 0;\n};\n\n\n/**\n * Call native \"crypto.timingSafeEqual\" methods.\n * All passed values will be converted into strings first.\n *\n * Runtime is always corresponding to the length of the first parameter (string\n * a).\n *\n * @param {string} a\n * @param {string} b\n *\n * @return {boolean}\n */\nvar nativeTimingSafeEqual = function nativeTimingSafeEqual(a, b) {\n var strA = String(a);\n var strB = String(b);\n var aLen = Buffer.byteLength(strA);\n var bLen = Buffer.byteLength(strB);\n\n // Always use length of a to avoid leaking the length. Even if this is a\n // false positive because one is a prefix of the other, the explicit length\n // check at the end will catch that.\n var bufA = bufferAlloc(aLen, 0, 'utf8');\n bufA.write(strA);\n var bufB = bufferAlloc(aLen, 0, 'utf8');\n bufB.write(strB);\n\n return crypto.timingSafeEqual(bufA, bufB) && aLen === bLen;\n};\n\n\nmodule.exports = (\n typeof crypto.timingSafeEqual !== 'undefined' ?\n nativeTimingSafeEqual :\n safeCompare\n);\n",
|
|
59
|
+
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Telegraf = void 0;\nconst crypto = __importStar(require(\"crypto\"));\nconst http = __importStar(require(\"http\"));\nconst https = __importStar(require(\"https\"));\nconst composer_1 = require(\"./composer\");\nconst compact_1 = require(\"./core/helpers/compact\");\nconst context_1 = __importDefault(require(\"./context\"));\nconst debug_1 = __importDefault(require(\"debug\"));\nconst webhook_1 = __importDefault(require(\"./core/network/webhook\"));\nconst polling_1 = require(\"./core/network/polling\");\nconst p_timeout_1 = __importDefault(require(\"p-timeout\"));\nconst telegram_1 = __importDefault(require(\"./telegram\"));\nconst url_1 = require(\"url\");\nconst safeCompare = require(\"safe-compare\");\nconst debug = (0, debug_1.default)('telegraf:main');\nconst DEFAULT_OPTIONS = {\n telegram: {},\n handlerTimeout: 90000,\n contextType: context_1.default,\n};\nfunction always(x) {\n return () => x;\n}\nconst anoop = always(Promise.resolve());\nconst TOKEN_HEADER = 'x-telegram-bot-api-secret-token';\nclass Telegraf extends composer_1.Composer {\n constructor(token, options) {\n super();\n this.context = {};\n /** Assign to this to customise the webhook filter middleware.\n * `{ path, secretToken }` will be bound to this rather than the Telegraf instance.\n * Remember to assign a regular function and not an arrow function so it's bindable.\n */\n this.webhookFilter = function (req) {\n const debug = (0, debug_1.default)('telegraf:webhook');\n if (req.method === 'POST') {\n if (safeCompare(this.path, req.url)) {\n // no need to check if secret_token was not set\n if (!this.secretToken)\n return true;\n else {\n const token = req.headers[TOKEN_HEADER];\n if (safeCompare(this.secretToken, token))\n return true;\n else\n debug('Secret token does not match:', token, this.secretToken);\n }\n }\n else\n debug('Path does not match:', req.url, this.path);\n }\n else\n debug('Unexpected request method, not POST. Received:', req.method);\n return false;\n };\n this.handleError = (err, ctx) => {\n // set exit code to emulate `warn-with-error-code` behavior of\n // https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode\n // to prevent a clean exit despite an error being thrown\n process.exitCode = 1;\n console.error('Unhandled error while processing', ctx.update);\n throw err;\n };\n // @ts-expect-error Trust me, TS\n this.options = {\n ...DEFAULT_OPTIONS,\n ...(0, compact_1.compactOptions)(options),\n };\n this.telegram = new telegram_1.default(token, this.options.telegram);\n debug('Created a `Telegraf` instance');\n }\n get token() {\n return this.telegram.token;\n }\n /** @deprecated use `ctx.telegram.webhookReply` */\n set webhookReply(webhookReply) {\n this.telegram.webhookReply = webhookReply;\n }\n /** @deprecated use `ctx.telegram.webhookReply` */\n get webhookReply() {\n return this.telegram.webhookReply;\n }\n /**\n * _Override_ error handling\n */\n catch(handler) {\n this.handleError = handler;\n return this;\n }\n /**\n * You must call `bot.telegram.setWebhook` for this to work.\n * You should probably use {@link Telegraf.createWebhook} instead.\n */\n webhookCallback(path = '/', opts = {}) {\n const { secretToken } = opts;\n return (0, webhook_1.default)(this.webhookFilter.bind({ hookPath: path, path, secretToken }), (update, res) => this.handleUpdate(update, res));\n }\n getDomainOpts(opts) {\n var _a;\n const protocol = opts.domain.startsWith('https://') || opts.domain.startsWith('http://');\n if (protocol)\n debug('Unexpected protocol in domain, telegraf will use https:', opts.domain);\n const domain = protocol ? new url_1.URL(opts.domain).host : opts.domain;\n const path = (_a = opts.path) !== null && _a !== void 0 ? _a : `/telegraf/${this.secretPathComponent()}`;\n const url = `https://${domain}${path}`;\n return { domain, path, url };\n }\n /**\n * Specify a url to receive incoming updates via webhook.\n * Returns an Express-style middleware you can pass to app.use()\n */\n async createWebhook(opts) {\n const { domain, path, ...extra } = opts;\n const domainOpts = this.getDomainOpts({ domain, path });\n await this.telegram.setWebhook(domainOpts.url, extra);\n debug(`Webhook set to ${domainOpts.url}`);\n return this.webhookCallback(domainOpts.path, {\n secretToken: extra.secret_token,\n });\n }\n startPolling(allowedUpdates = []) {\n this.polling = new polling_1.Polling(this.telegram, allowedUpdates);\n return this.polling.loop(async (update) => {\n await this.handleUpdate(update);\n });\n }\n startWebhook(path, tlsOptions, port, host, cb, secretToken) {\n const webhookCb = this.webhookCallback(path, { secretToken });\n const callback = typeof cb === 'function'\n ? (req, res) => webhookCb(req, res, () => cb(req, res))\n : webhookCb;\n this.webhookServer =\n tlsOptions != null\n ? https.createServer(tlsOptions, callback)\n : http.createServer(callback);\n this.webhookServer.listen(port, host, () => {\n debug('Webhook listening on port: %s', port);\n });\n return this;\n }\n secretPathComponent() {\n return crypto\n .createHash('sha3-256')\n .update(this.token)\n .update(process.version) // salt\n .digest('hex');\n }\n /**\n * @see https://github.com/telegraf/telegraf/discussions/1344#discussioncomment-335700\n */\n async launch(config = {}, \n /** @experimental */\n onLaunch) {\n var _a, _b;\n const [cfg, onMe] = typeof config === 'function' ? [{}, config] : [config, onLaunch];\n const drop_pending_updates = cfg.dropPendingUpdates;\n const allowed_updates = cfg.allowedUpdates;\n const webhook = cfg.webhook;\n debug('Connecting to Telegram');\n (_a = this.botInfo) !== null && _a !== void 0 ? _a : (this.botInfo = await this.telegram.getMe());\n onMe === null || onMe === void 0 ? void 0 : onMe();\n debug(`Launching @${this.botInfo.username}`);\n if (webhook === undefined) {\n await this.telegram.deleteWebhook({ drop_pending_updates });\n debug('Bot started with long polling');\n await this.startPolling(allowed_updates);\n return;\n }\n const domainOpts = this.getDomainOpts({\n domain: webhook.domain,\n path: (_b = webhook.path) !== null && _b !== void 0 ? _b : webhook.hookPath,\n });\n const { tlsOptions, port, host, cb, secretToken } = webhook;\n this.startWebhook(domainOpts.path, tlsOptions, port, host, cb, secretToken);\n await this.telegram.setWebhook(domainOpts.url, {\n drop_pending_updates: drop_pending_updates,\n allowed_updates: allowed_updates,\n ip_address: webhook.ipAddress,\n max_connections: webhook.maxConnections,\n secret_token: webhook.secretToken,\n certificate: webhook.certificate,\n });\n debug(`Bot started with webhook @ ${domainOpts.url}`);\n }\n stop(reason = 'unspecified') {\n var _a, _b;\n debug('Stopping bot... Reason:', reason);\n // https://github.com/telegraf/telegraf/pull/1224#issuecomment-742693770\n if (this.polling === undefined && this.webhookServer === undefined) {\n throw new Error('Bot is not running!');\n }\n (_a = this.webhookServer) === null || _a === void 0 ? void 0 : _a.close();\n (_b = this.polling) === null || _b === void 0 ? void 0 : _b.stop();\n }\n async handleUpdate(update, webhookResponse) {\n var _a, _b;\n (_a = this.botInfo) !== null && _a !== void 0 ? _a : (this.botInfo = (debug('Update %d is waiting for `botInfo` to be initialized', update.update_id),\n await ((_b = this.botInfoCall) !== null && _b !== void 0 ? _b : (this.botInfoCall = this.telegram.getMe()))));\n debug('Processing update', update.update_id);\n const tg = new telegram_1.default(this.token, this.telegram.options, webhookResponse);\n const TelegrafContext = this.options.contextType;\n const ctx = new TelegrafContext(update, tg, this.botInfo);\n Object.assign(ctx, this.context);\n try {\n await (0, p_timeout_1.default)(Promise.resolve(this.middleware()(ctx, anoop)), this.options.handlerTimeout);\n }\n catch (err) {\n return await this.handleError(err, ctx);\n }\n finally {\n if ((webhookResponse === null || webhookResponse === void 0 ? void 0 : webhookResponse.writableEnded) === false) {\n webhookResponse.end();\n }\n debug('Finished processing update', update.update_id);\n }\n }\n}\nexports.Telegraf = Telegraf;\n",
|
|
60
|
+
"\"use strict\";\n/** @format */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Router = void 0;\nconst composer_1 = __importDefault(require(\"./composer\"));\n/** @deprecated in favor of {@link Composer.dispatch} */\nclass Router {\n constructor(routeFn, handlers = new Map()) {\n this.routeFn = routeFn;\n this.handlers = handlers;\n this.otherwiseHandler = composer_1.default.passThru();\n if (typeof routeFn !== 'function') {\n throw new Error('Missing routing function');\n }\n }\n on(route, ...fns) {\n if (fns.length === 0) {\n throw new TypeError('At least one handler must be provided');\n }\n this.handlers.set(route, composer_1.default.compose(fns));\n return this;\n }\n otherwise(...fns) {\n if (fns.length === 0) {\n throw new TypeError('At least one otherwise handler must be provided');\n }\n this.otherwiseHandler = composer_1.default.compose(fns);\n return this;\n }\n middleware() {\n return composer_1.default.lazy((ctx) => {\n var _a;\n const result = this.routeFn(ctx);\n if (result == null) {\n return this.otherwiseHandler;\n }\n Object.assign(ctx, result.context);\n Object.assign(ctx.state, result.state);\n return (_a = this.handlers.get(result.route)) !== null && _a !== void 0 ? _a : this.otherwiseHandler;\n });\n }\n}\nexports.Router = Router;\n",
|
|
61
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.webApp = exports.login = exports.pay = exports.game = exports.switchToCurrentChat = exports.switchToChat = exports.callback = exports.url = exports.channelRequest = exports.groupRequest = exports.botRequest = exports.userRequest = exports.pollRequest = exports.locationRequest = exports.contactRequest = exports.text = void 0;\nfunction text(text, hide = false) {\n return { text, hide };\n}\nexports.text = text;\nfunction contactRequest(text, hide = false) {\n return { text, request_contact: true, hide };\n}\nexports.contactRequest = contactRequest;\nfunction locationRequest(text, hide = false) {\n return { text, request_location: true, hide };\n}\nexports.locationRequest = locationRequest;\nfunction pollRequest(text, type, hide = false) {\n return { text, request_poll: { type }, hide };\n}\nexports.pollRequest = pollRequest;\nfunction userRequest(text, \n/** Must fit in a signed 32 bit int */\nrequest_id, extra, hide = false) {\n return {\n text,\n request_users: { request_id, ...extra },\n hide,\n };\n}\nexports.userRequest = userRequest;\nfunction botRequest(text, \n/** Must fit in a signed 32 bit int */\nrequest_id, extra, hide = false) {\n return {\n text,\n request_users: { request_id, user_is_bot: true, ...extra },\n hide,\n };\n}\nexports.botRequest = botRequest;\nfunction groupRequest(text, \n/** Must fit in a signed 32 bit int */\nrequest_id, extra, hide = false) {\n return {\n text,\n request_chat: { request_id, chat_is_channel: false, ...extra },\n hide,\n };\n}\nexports.groupRequest = groupRequest;\nfunction channelRequest(text, \n/** Must fit in a signed 32 bit int */\nrequest_id, extra, hide = false) {\n return {\n text,\n request_chat: { request_id, chat_is_channel: true, ...extra },\n hide,\n };\n}\nexports.channelRequest = channelRequest;\nfunction url(text, url, hide = false) {\n return { text, url, hide };\n}\nexports.url = url;\nfunction callback(text, data, hide = false) {\n return { text, callback_data: data, hide };\n}\nexports.callback = callback;\nfunction switchToChat(text, value, hide = false) {\n return { text, switch_inline_query: value, hide };\n}\nexports.switchToChat = switchToChat;\nfunction switchToCurrentChat(text, value, hide = false) {\n return { text, switch_inline_query_current_chat: value, hide };\n}\nexports.switchToCurrentChat = switchToCurrentChat;\nfunction game(text, hide = false) {\n return { text, callback_game: {}, hide };\n}\nexports.game = game;\nfunction pay(text, hide = false) {\n return { text, pay: true, hide };\n}\nexports.pay = pay;\nfunction login(text, url, opts = {}, hide = false) {\n return {\n text,\n login_url: { ...opts, url },\n hide,\n };\n}\nexports.login = login;\nfunction webApp(text, url, hide = false\n// works as both InlineKeyboardButton and KeyboardButton\n) {\n return {\n text,\n web_app: { url },\n hide,\n };\n}\nexports.webApp = webApp;\n",
|
|
62
|
+
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.inlineKeyboard = exports.keyboard = exports.forceReply = exports.removeKeyboard = exports.button = exports.Markup = void 0;\nconst check_1 = require(\"./core/helpers/check\");\nclass Markup {\n constructor(reply_markup) {\n this.reply_markup = reply_markup;\n }\n selective(value = true) {\n return new Markup({ ...this.reply_markup, selective: value });\n }\n placeholder(placeholder) {\n return new Markup({\n ...this.reply_markup,\n input_field_placeholder: placeholder,\n });\n }\n resize(value = true) {\n return new Markup({\n ...this.reply_markup,\n resize_keyboard: value,\n });\n }\n oneTime(value = true) {\n return new Markup({\n ...this.reply_markup,\n one_time_keyboard: value,\n });\n }\n persistent(value = true) {\n return new Markup({\n ...this.reply_markup,\n is_persistent: value,\n });\n }\n}\nexports.Markup = Markup;\nexports.button = __importStar(require(\"./button\"));\nfunction removeKeyboard() {\n return new Markup({ remove_keyboard: true });\n}\nexports.removeKeyboard = removeKeyboard;\nfunction forceReply() {\n return new Markup({ force_reply: true });\n}\nexports.forceReply = forceReply;\nfunction keyboard(buttons, options) {\n const keyboard = buildKeyboard(buttons, {\n columns: 1,\n ...options,\n });\n return new Markup({ keyboard });\n}\nexports.keyboard = keyboard;\nfunction inlineKeyboard(buttons, options) {\n const inlineKeyboard = buildKeyboard(buttons, {\n columns: buttons.length,\n ...options,\n });\n return new Markup({ inline_keyboard: inlineKeyboard });\n}\nexports.inlineKeyboard = inlineKeyboard;\nfunction buildKeyboard(buttons, options) {\n const result = [];\n if (!Array.isArray(buttons)) {\n return result;\n }\n if ((0, check_1.is2D)(buttons)) {\n return buttons.map((row) => row.filter((button) => !button.hide));\n }\n const wrapFn = options.wrap !== undefined\n ? options.wrap\n : (_btn, _index, currentRow) => currentRow.length >= options.columns;\n let currentRow = [];\n let index = 0;\n for (const btn of buttons.filter((button) => !button.hide)) {\n if (wrapFn(btn, index, currentRow) && currentRow.length > 0) {\n result.push(currentRow);\n currentRow = [];\n }\n currentRow.push(btn);\n index++;\n }\n if (currentRow.length > 0) {\n result.push(currentRow);\n }\n return result;\n}\n",
|
|
63
|
+
"\"use strict\";\n/** @format */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Markup = void 0;\nvar markup_1 = require(\"./markup\");\nObject.defineProperty(exports, \"Markup\", { enumerable: true, get: function () { return markup_1.Markup; } });\n",
|
|
64
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromFileId = exports.fromURL = exports.fromURLStream = exports.fromReadableStream = exports.fromBuffer = exports.fromLocalFile = void 0;\n/**\n * The local file specified by path will be uploaded to Telegram using multipart/form-data.\n *\n * 10 MB max size for photos, 50 MB for other files.\n */\n// prettier-ignore\nconst fromLocalFile = (path, filename) => ({ source: path, filename });\nexports.fromLocalFile = fromLocalFile;\n/**\n * The buffer will be uploaded as file to Telegram using multipart/form-data.\n *\n * 10 MB max size for photos, 50 MB for other files.\n */\n// prettier-ignore\nconst fromBuffer = (buffer, filename) => ({ source: buffer, filename });\nexports.fromBuffer = fromBuffer;\n/**\n * Contents of the stream will be uploaded as file to Telegram using multipart/form-data.\n *\n * 10 MB max size for photos, 50 MB for other files.\n */\n// prettier-ignore\nconst fromReadableStream = (stream, filename) => ({ source: stream, filename });\nexports.fromReadableStream = fromReadableStream;\n/**\n * Contents of the URL will be streamed to Telegram.\n *\n * 10 MB max size for photos, 50 MB for other files.\n */\n// prettier-ignore\nconst fromURLStream = (url, filename) => ({ url: url.toString(), filename });\nexports.fromURLStream = fromURLStream;\n/**\n * Provide Telegram with an HTTP URL for the file to be sent.\n * Telegram will download and send the file.\n *\n * * The target file must have the correct MIME type (e.g., audio/mpeg for `sendAudio`, etc.).\n * * `sendDocument` with URL will currently only work for GIF, PDF and ZIP files.\n * * To use `sendVoice`, the file must have the type audio/ogg and be no more than 1MB in size.\n * 1-20MB voice notes will be sent as files.\n *\n * 5 MB max size for photos and 20 MB max for other types of content.\n */\nconst fromURL = (url) => url.toString();\nexports.fromURL = fromURL;\n/**\n * If the file is already stored somewhere on the Telegram servers, you don't need to reupload it:\n * each file object has a file_id field, simply pass this file_id as a parameter instead of uploading.\n *\n * It is not possible to change the file type when resending by file_id.\n *\n * It is not possible to resend thumbnails using file_id.\n * They have to be uploaded using one of the other Input methods.\n *\n * There are no limits for files sent this way.\n */\nconst fromFileId = (fileId) => fileId;\nexports.fromFileId = fromFileId;\n",
|
|
65
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deunionize = void 0;\n/**\n * Expose properties from all union variants.\n * @deprectated\n * @see https://github.com/telegraf/telegraf/issues/1388#issuecomment-791573609\n * @see https://millsp.github.io/ts-toolbelt/modules/union_strict.html\n */\nfunction deunionize(t) {\n return t;\n}\nexports.deunionize = deunionize;\n",
|
|
66
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isSessionContext = exports.MemorySessionStore = exports.session = void 0;\nconst debug_1 = __importDefault(require(\"debug\"));\nconst debug = (0, debug_1.default)('telegraf:session');\n/**\n * Returns middleware that adds `ctx.session` for storing arbitrary state per session key.\n *\n * The default `getSessionKey` is `${ctx.from.id}:${ctx.chat.id}`.\n * If either `ctx.from` or `ctx.chat` is `undefined`, default session key and thus `ctx.session` are also `undefined`.\n *\n * > ⚠️ Session data is kept only in memory by default, which means that all data will be lost when the process is terminated.\n * >\n * > If you want to persist data across process restarts, or share it among multiple instances, you should use\n * [@telegraf/session](https://www.npmjs.com/package/@telegraf/session), or pass custom `storage`.\n *\n * @see {@link https://github.com/feathers-studio/telegraf-docs/blob/b694bcc36b4f71fb1cd650a345c2009ab4d2a2a5/guide/session.md Telegraf Docs | Session}\n * @see {@link https://github.com/feathers-studio/telegraf-docs/blob/master/examples/session-bot.ts Example}\n */\nfunction session(options) {\n var _a, _b, _c;\n const prop = (_a = options === null || options === void 0 ? void 0 : options.property) !== null && _a !== void 0 ? _a : 'session';\n const getSessionKey = (_b = options === null || options === void 0 ? void 0 : options.getSessionKey) !== null && _b !== void 0 ? _b : defaultGetSessionKey;\n const store = (_c = options === null || options === void 0 ? void 0 : options.store) !== null && _c !== void 0 ? _c : new MemorySessionStore();\n // caches value from store in-memory while simultaneous updates share it\n // when counter reaches 0, the cached ref will be freed from memory\n const cache = new Map();\n // temporarily stores concurrent requests\n const concurrents = new Map();\n // this function must be handled with care\n // read full description on the original PR: https://github.com/telegraf/telegraf/pull/1713\n // make sure to update the tests in test/session.js if you make any changes or fix bugs here\n return async (ctx, next) => {\n var _a;\n const updId = ctx.update.update_id;\n let released = false;\n function releaseChecks() {\n if (released && process.env.EXPERIMENTAL_SESSION_CHECKS)\n throw new Error(\"Session was accessed or assigned to after the middleware chain exhausted. This is a bug in your code. You're probably accessing session asynchronously and missing awaits.\");\n }\n // because this is async, requests may still race here, but it will get autocorrected at (1)\n // v5 getSessionKey should probably be synchronous to avoid that\n const key = await getSessionKey(ctx);\n if (!key) {\n // Leaving this here could be useful to check for `prop in ctx` in future middleware\n ctx[prop] = undefined;\n return await next();\n }\n let cached = cache.get(key);\n if (cached) {\n debug(`(${updId}) found cached session, reusing from cache`);\n ++cached.counter;\n }\n else {\n debug(`(${updId}) did not find cached session`);\n // if another concurrent request has already sent a store request, fetch that instead\n let promise = concurrents.get(key);\n if (promise)\n debug(`(${updId}) found a concurrent request, reusing promise`);\n else {\n debug(`(${updId}) fetching from upstream store`);\n promise = store.get(key);\n }\n // synchronously store promise so concurrent requests can share response\n concurrents.set(key, promise);\n const upstream = await promise;\n // all concurrent awaits will have promise in their closure, safe to remove now\n concurrents.delete(key);\n debug(`(${updId}) updating cache`);\n // another request may have beaten us to the punch\n const c = cache.get(key);\n if (c) {\n // another request did beat us to the punch\n c.counter++;\n // (1) preserve cached reference; in-memory reference is always newer than from store\n cached = c;\n }\n else {\n // we're the first, so we must cache the reference\n cached = { ref: upstream !== null && upstream !== void 0 ? upstream : (_a = options === null || options === void 0 ? void 0 : options.defaultSession) === null || _a === void 0 ? void 0 : _a.call(options, ctx), counter: 1 };\n cache.set(key, cached);\n }\n }\n // TS already knows cached is always defined by this point, but does not guard cached.\n // It will, however, guard `c` here.\n const c = cached;\n let touched = false;\n Object.defineProperty(ctx, prop, {\n get() {\n releaseChecks();\n touched = true;\n return c.ref;\n },\n set(value) {\n releaseChecks();\n touched = true;\n c.ref = value;\n },\n });\n try {\n await next();\n released = true;\n }\n finally {\n if (--c.counter === 0) {\n // decrement to avoid memory leak\n debug(`(${updId}) refcounter reached 0, removing cached`);\n cache.delete(key);\n }\n debug(`(${updId}) middlewares completed, checking session`);\n // only update store if ctx.session was touched\n if (touched)\n if (c.ref == null) {\n debug(`(${updId}) ctx.${prop} missing, removing from store`);\n await store.delete(key);\n }\n else {\n debug(`(${updId}) ctx.${prop} found, updating store`);\n await store.set(key, c.ref);\n }\n }\n };\n}\nexports.session = session;\nfunction defaultGetSessionKey(ctx) {\n var _a, _b;\n const fromId = (_a = ctx.from) === null || _a === void 0 ? void 0 : _a.id;\n const chatId = (_b = ctx.chat) === null || _b === void 0 ? void 0 : _b.id;\n if (fromId == null || chatId == null)\n return undefined;\n return `${fromId}:${chatId}`;\n}\n/** @deprecated Use `Map` */\nclass MemorySessionStore {\n constructor(ttl = Infinity) {\n this.ttl = ttl;\n this.store = new Map();\n }\n get(name) {\n const entry = this.store.get(name);\n if (entry == null) {\n return undefined;\n }\n else if (entry.expires < Date.now()) {\n this.delete(name);\n return undefined;\n }\n return entry.session;\n }\n set(name, value) {\n const now = Date.now();\n this.store.set(name, { session: value, expires: now + this.ttl });\n }\n delete(name) {\n this.store.delete(name);\n }\n}\nexports.MemorySessionStore = MemorySessionStore;\n/** @deprecated session can use custom properties now. Directly use `'session' in ctx` instead */\nfunction isSessionContext(ctx) {\n return 'session' in ctx;\n}\nexports.isSessionContext = isSessionContext;\n",
|
|
67
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst composer_1 = __importDefault(require(\"../composer\"));\nconst debug_1 = __importDefault(require(\"debug\"));\nconst debug = (0, debug_1.default)('telegraf:scenes:context');\nconst noop = () => Promise.resolve();\nconst now = () => Math.floor(Date.now() / 1000);\nclass SceneContextScene {\n constructor(ctx, scenes, options) {\n this.ctx = ctx;\n this.scenes = scenes;\n this.leaving = false;\n // @ts-expect-error {} might not be assignable to D\n const fallbackSessionDefault = {};\n this.options = { defaultSession: fallbackSessionDefault, ...options };\n }\n get session() {\n var _a, _b;\n const defaultSession = Object.assign({}, this.options.defaultSession);\n let session = (_b = (_a = this.ctx.session) === null || _a === void 0 ? void 0 : _a.__scenes) !== null && _b !== void 0 ? _b : defaultSession;\n if (session.expires !== undefined && session.expires < now()) {\n session = defaultSession;\n }\n if (this.ctx.session === undefined) {\n this.ctx.session = { __scenes: session };\n }\n else {\n this.ctx.session.__scenes = session;\n }\n return session;\n }\n get state() {\n var _a;\n var _b;\n return ((_a = (_b = this.session).state) !== null && _a !== void 0 ? _a : (_b.state = {}));\n }\n set state(value) {\n this.session.state = { ...value };\n }\n get current() {\n var _a;\n const sceneId = (_a = this.session.current) !== null && _a !== void 0 ? _a : this.options.default;\n return sceneId === undefined || !this.scenes.has(sceneId)\n ? undefined\n : this.scenes.get(sceneId);\n }\n reset() {\n if (this.ctx.session !== undefined)\n this.ctx.session.__scenes = Object.assign({}, this.options.defaultSession);\n }\n async enter(sceneId, initialState = {}, silent = false) {\n var _a, _b;\n if (!this.scenes.has(sceneId)) {\n throw new Error(`Can't find scene: ${sceneId}`);\n }\n if (!silent) {\n await this.leave();\n }\n debug('Entering scene', sceneId, initialState, silent);\n this.session.current = sceneId;\n this.state = initialState;\n const ttl = (_b = (_a = this.current) === null || _a === void 0 ? void 0 : _a.ttl) !== null && _b !== void 0 ? _b : this.options.ttl;\n if (ttl !== undefined) {\n this.session.expires = now() + ttl;\n }\n if (this.current === undefined || silent) {\n return;\n }\n const handler = 'enterMiddleware' in this.current &&\n typeof this.current.enterMiddleware === 'function'\n ? this.current.enterMiddleware()\n : this.current.middleware();\n return await handler(this.ctx, noop);\n }\n reenter() {\n return this.session.current === undefined\n ? undefined\n : this.enter(this.session.current, this.state);\n }\n async leave() {\n if (this.leaving)\n return;\n debug('Leaving scene');\n try {\n this.leaving = true;\n if (this.current === undefined) {\n return;\n }\n const handler = 'leaveMiddleware' in this.current &&\n typeof this.current.leaveMiddleware === 'function'\n ? this.current.leaveMiddleware()\n : composer_1.default.passThru();\n await handler(this.ctx, noop);\n return this.reset();\n }\n finally {\n this.leaving = false;\n }\n }\n}\nexports.default = SceneContextScene;\n",
|
|
68
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Stage = void 0;\nconst session_1 = require(\"../session\");\nconst context_1 = __importDefault(require(\"./context\"));\nconst composer_1 = require(\"../composer\");\nclass Stage extends composer_1.Composer {\n constructor(scenes = [], options) {\n super();\n this.options = { ...options };\n this.scenes = new Map();\n scenes.forEach((scene) => this.register(scene));\n }\n register(...scenes) {\n scenes.forEach((scene) => {\n if ((scene === null || scene === void 0 ? void 0 : scene.id) == null || typeof scene.middleware !== 'function') {\n throw new Error('telegraf: Unsupported scene');\n }\n this.scenes.set(scene.id, scene);\n });\n return this;\n }\n middleware() {\n const handler = composer_1.Composer.compose([\n (ctx, next) => {\n const scenes = this.scenes;\n const scene = new context_1.default(ctx, scenes, this.options);\n ctx.scene = scene;\n return next();\n },\n super.middleware(),\n composer_1.Composer.lazy((ctx) => { var _a; return (_a = ctx.scene.current) !== null && _a !== void 0 ? _a : composer_1.Composer.passThru(); }),\n ]);\n return composer_1.Composer.optional(session_1.isSessionContext, handler);\n }\n static enter(...args) {\n return (ctx) => ctx.scene.enter(...args);\n }\n static reenter(...args) {\n return (ctx) => ctx.scene.reenter(...args);\n }\n static leave(...args) {\n return (ctx) => ctx.scene.leave(...args);\n }\n}\nexports.Stage = Stage;\n",
|
|
69
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseScene = void 0;\nconst composer_1 = __importDefault(require(\"../composer\"));\nconst { compose } = composer_1.default;\nclass BaseScene extends composer_1.default {\n constructor(id, options) {\n const opts = {\n handlers: [],\n enterHandlers: [],\n leaveHandlers: [],\n ...options,\n };\n super(...opts.handlers);\n this.id = id;\n this.ttl = opts.ttl;\n this.enterHandler = compose(opts.enterHandlers);\n this.leaveHandler = compose(opts.leaveHandlers);\n }\n enter(...fns) {\n this.enterHandler = compose([this.enterHandler, ...fns]);\n return this;\n }\n leave(...fns) {\n this.leaveHandler = compose([this.leaveHandler, ...fns]);\n return this;\n }\n enterMiddleware() {\n return this.enterHandler;\n }\n leaveMiddleware() {\n return this.leaveHandler;\n }\n}\nexports.BaseScene = BaseScene;\nexports.default = BaseScene;\n",
|
|
70
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass WizardContextWizard {\n constructor(ctx, steps) {\n var _a;\n this.ctx = ctx;\n this.steps = steps;\n this.state = ctx.scene.state;\n this.cursor = (_a = ctx.scene.session.cursor) !== null && _a !== void 0 ? _a : 0;\n }\n get step() {\n return this.steps[this.cursor];\n }\n get cursor() {\n return this.ctx.scene.session.cursor;\n }\n set cursor(cursor) {\n this.ctx.scene.session.cursor = cursor;\n }\n selectStep(index) {\n this.cursor = index;\n return this;\n }\n next() {\n return this.selectStep(this.cursor + 1);\n }\n back() {\n return this.selectStep(this.cursor - 1);\n }\n}\nexports.default = WizardContextWizard;\n",
|
|
71
|
+
"\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WizardScene = void 0;\nconst base_1 = __importDefault(require(\"../base\"));\nconst context_1 = __importDefault(require(\"./context\"));\nconst composer_1 = __importDefault(require(\"../../composer\"));\nclass WizardScene extends base_1.default {\n constructor(id, options, ...steps) {\n let opts;\n let s;\n if (typeof options === 'function' || 'middleware' in options) {\n opts = undefined;\n s = [options, ...steps];\n }\n else {\n opts = options;\n s = steps;\n }\n super(id, opts);\n this.steps = s;\n }\n middleware() {\n return composer_1.default.compose([\n (ctx, next) => {\n ctx.wizard = new context_1.default(ctx, this.steps);\n return next();\n },\n super.middleware(),\n (ctx, next) => {\n if (ctx.wizard.step === undefined) {\n ctx.wizard.selectStep(0);\n return ctx.scene.leave();\n }\n return composer_1.default.unwrap(ctx.wizard.step)(ctx, next);\n },\n ]);\n }\n enterMiddleware() {\n return composer_1.default.compose([this.enterHandler, this.middleware()]);\n }\n}\nexports.WizardScene = WizardScene;\n",
|
|
72
|
+
"\"use strict\";\n/**\n * @see https://github.com/telegraf/telegraf/issues/705#issuecomment-549056045\n * @see https://www.npmjs.com/package/telegraf-stateless-question\n * @packageDocumentation\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WizardContextWizard = exports.WizardScene = exports.BaseScene = exports.SceneContextScene = exports.Stage = void 0;\nvar stage_1 = require(\"./stage\");\nObject.defineProperty(exports, \"Stage\", { enumerable: true, get: function () { return stage_1.Stage; } });\nvar context_1 = require(\"./context\");\nObject.defineProperty(exports, \"SceneContextScene\", { enumerable: true, get: function () { return __importDefault(context_1).default; } });\nvar base_1 = require(\"./base\");\nObject.defineProperty(exports, \"BaseScene\", { enumerable: true, get: function () { return base_1.BaseScene; } });\nvar wizard_1 = require(\"./wizard\");\nObject.defineProperty(exports, \"WizardScene\", { enumerable: true, get: function () { return wizard_1.WizardScene; } });\nvar context_2 = require(\"./wizard/context\");\nObject.defineProperty(exports, \"WizardContextWizard\", { enumerable: true, get: function () { return __importDefault(context_2).default; } });\n",
|
|
73
|
+
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./scenes/index.js\"), exports);\n",
|
|
74
|
+
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scenes = exports.MemorySessionStore = exports.session = exports.deunionize = exports.Format = exports.Input = exports.Markup = exports.Types = exports.Telegram = exports.TelegramError = exports.Router = exports.Composer = exports.Context = exports.Telegraf = void 0;\nvar telegraf_1 = require(\"./telegraf\");\nObject.defineProperty(exports, \"Telegraf\", { enumerable: true, get: function () { return telegraf_1.Telegraf; } });\nvar context_1 = require(\"./context\");\nObject.defineProperty(exports, \"Context\", { enumerable: true, get: function () { return context_1.Context; } });\nvar composer_1 = require(\"./composer\");\nObject.defineProperty(exports, \"Composer\", { enumerable: true, get: function () { return composer_1.Composer; } });\nvar router_1 = require(\"./router\");\nObject.defineProperty(exports, \"Router\", { enumerable: true, get: function () { return router_1.Router; } });\nvar error_1 = require(\"./core/network/error\");\nObject.defineProperty(exports, \"TelegramError\", { enumerable: true, get: function () { return error_1.TelegramError; } });\nvar telegram_1 = require(\"./telegram\");\nObject.defineProperty(exports, \"Telegram\", { enumerable: true, get: function () { return telegram_1.Telegram; } });\nexports.Types = __importStar(require(\"./telegram-types\"));\nexports.Markup = __importStar(require(\"./markup\"));\nexports.Input = __importStar(require(\"./input\"));\nexports.Format = __importStar(require(\"./format\"));\nvar deunionize_1 = require(\"./core/helpers/deunionize\");\nObject.defineProperty(exports, \"deunionize\", { enumerable: true, get: function () { return deunionize_1.deunionize; } });\nvar session_1 = require(\"./session\");\nObject.defineProperty(exports, \"session\", { enumerable: true, get: function () { return session_1.session; } });\nObject.defineProperty(exports, \"MemorySessionStore\", { enumerable: true, get: function () { return session_1.MemorySessionStore; } });\nexports.Scenes = __importStar(require(\"./scenes\"));\n",
|
|
75
|
+
"export const MESSAGE_CONSTANTS = {\n MAX_MESSAGES: 50,\n RECENT_MESSAGE_COUNT: 5,\n CHAT_HISTORY_COUNT: 10,\n DEFAULT_SIMILARITY_THRESHOLD: 0.6,\n DEFAULT_SIMILARITY_THRESHOLD_FOLLOW_UPS: 0.4,\n INTEREST_DECAY_TIME: 5 * 60 * 1000, // 5 minutes\n PARTIAL_INTEREST_DECAY: 3 * 60 * 1000, // 3 minutes\n} as const;\n\nexport const TELEGRAM_SERVICE_NAME = \"telegram\";\n",
|
|
76
|
+
"import type {\n Action,\n ActionExample,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { TELEGRAM_SERVICE_NAME } from \"../constants\";\nimport type { TelegramService } from \"../service\";\n\nexport const SEND_MESSAGE_ACTION = \"SEND_TELEGRAM_MESSAGE\";\n\nexport const sendMessageAction: Action = {\n name: SEND_MESSAGE_ACTION,\n similes: [\n \"TELEGRAM_SEND_MESSAGE\",\n \"TELEGRAM_REPLY\",\n \"TELEGRAM_MESSAGE\",\n \"SEND_TELEGRAM\",\n \"REPLY_TELEGRAM\",\n ],\n description: \"Send a message to a Telegram chat\",\n\n validate: async (_runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n const source = message.content?.source;\n return source === \"telegram\";\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const telegramService = runtime.getService(TELEGRAM_SERVICE_NAME) as\n | TelegramService\n | undefined;\n if (!telegramService) {\n if (callback) {\n await callback({\n text: \"Telegram service not available\",\n });\n }\n return { success: false, error: \"Telegram service not initialized\" };\n }\n\n const responseText = state.values?.response?.toString() || \"\";\n const chatId = message.content?.chatId;\n\n if (!chatId) {\n if (callback) {\n await callback({\n text: \"No chat ID available\",\n });\n }\n return { success: false, error: \"Missing chat ID\" };\n }\n\n if (callback) {\n await callback({\n text: responseText,\n action: SEND_MESSAGE_ACTION,\n });\n }\n\n return {\n success: true,\n data: {\n action: SEND_MESSAGE_ACTION,\n chatId,\n text: responseText,\n replyToMessageId: message.content?.messageId,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send a message to this Telegram chat\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll send a message to this chat now.\",\n actions: [SEND_MESSAGE_ACTION],\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
77
|
+
"import fs from \"node:fs\";\nimport {\n ChannelType,\n type Content,\n createUniqueUuid,\n EventType,\n type HandlerCallback,\n type IAgentRuntime,\n type IPdfService,\n logger,\n type Media,\n type Memory,\n MemoryType,\n type MessageMetadata,\n ModelType,\n ServiceType,\n type UUID,\n} from \"@elizaos/core\";\nimport type { Chat, Document, Message, ReactionType, Update } from \"@telegraf/types\";\nimport type { Context, NarrowedContext, Telegraf } from \"telegraf\";\nimport { Markup } from \"telegraf\";\nimport {\n type TelegramContent,\n TelegramEventTypes,\n type TelegramMessageSentPayload,\n type TelegramReactionReceivedPayload,\n} from \"./types\";\nimport { cleanText, convertMarkdownToTelegram, convertToTelegramButtons } from \"./utils\";\n\ninterface DocumentProcessingResult {\n title: string;\n fullText: string;\n formattedDescription: string;\n fileName: string;\n mimeType: string | undefined;\n fileSize: number | undefined;\n error?: string;\n}\n\n/**\n * Enum representing different types of media.\n * @enum { string }\n * @readonly\n */\nexport enum MediaType {\n PHOTO = \"photo\",\n VIDEO = \"video\",\n DOCUMENT = \"document\",\n AUDIO = \"audio\",\n ANIMATION = \"animation\",\n}\n\nconst MAX_MESSAGE_LENGTH = 4096;\n\nconst getChannelType = (chat: Chat): ChannelType => {\n switch (chat.type) {\n case \"private\":\n return ChannelType.DM;\n case \"group\":\n case \"supergroup\":\n case \"channel\":\n return ChannelType.GROUP;\n default: {\n const _exhaustive: never = chat;\n throw new Error(`Unrecognized Telegram chat type: ${JSON.stringify(chat)}`);\n }\n }\n};\n\ntype TelegramChatContextContent = Content & {\n chatId: number;\n userId: number;\n messageId: number;\n threadId?: number;\n};\n\nexport class MessageManager {\n public bot: Telegraf<Context>;\n protected runtime: IAgentRuntime;\n\n constructor(bot: Telegraf<Context>, runtime: IAgentRuntime) {\n this.bot = bot;\n this.runtime = runtime;\n }\n\n async processImage(message: Message): Promise<{ description: string } | null> {\n let imageUrl: string | null = null;\n\n logger.info(`Telegram Message: ${JSON.stringify(message, null, 2)}`);\n\n if (\"photo\" in message && message.photo?.length > 0) {\n const photo = message.photo[message.photo.length - 1];\n const fileLink = await this.bot.telegram.getFileLink(photo.file_id);\n imageUrl = fileLink.toString();\n } else if (\n \"document\" in message &&\n message.document?.mime_type?.startsWith(\"image/\") &&\n !message.document?.mime_type?.startsWith(\"application/pdf\")\n ) {\n const fileLink = await this.bot.telegram.getFileLink(message.document.file_id);\n imageUrl = fileLink.toString();\n }\n\n if (imageUrl) {\n const { title, description } = await this.runtime.useModel(\n ModelType.IMAGE_DESCRIPTION,\n imageUrl\n );\n return { description: `[Image: ${title}\\n${description}]` };\n }\n\n return null;\n }\n\n async processDocument(message: Message): Promise<DocumentProcessingResult | null> {\n if (!(\"document\" in message) || !message.document) {\n return null;\n }\n\n const document = message.document;\n const fileLink = await this.bot.telegram.getFileLink(document.file_id);\n const documentUrl = fileLink.toString();\n\n logger.info(\n `Processing document: ${document.file_name} (${document.mime_type}, ${document.file_size} bytes)`\n );\n\n const documentProcessor = this.getDocumentProcessor(document.mime_type);\n if (documentProcessor) {\n return await documentProcessor(document, documentUrl);\n }\n\n return {\n title: `Document: ${document.file_name || \"Unknown Document\"}`,\n fullText: \"\",\n formattedDescription: `[Document: ${document.file_name || \"Unknown Document\"}\\nType: ${document.mime_type || \"unknown\"}\\nSize: ${document.file_size || 0} bytes]`,\n fileName: document.file_name || \"Unknown Document\",\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n\n private getDocumentProcessor(\n mimeType?: string\n ): ((document: Document, url: string) => Promise<DocumentProcessingResult>) | null {\n if (!mimeType) return null;\n\n const processors = {\n \"application/pdf\": this.processPdfDocument.bind(this),\n \"text/\": this.processTextDocument.bind(this),\n \"application/json\": this.processTextDocument.bind(this),\n };\n\n for (const [pattern, processor] of Object.entries(processors)) {\n if (mimeType.startsWith(pattern)) {\n return processor;\n }\n }\n\n return null;\n }\n\n private async processPdfDocument(\n document: Document,\n documentUrl: string\n ): Promise<DocumentProcessingResult> {\n const pdfService = this.runtime.getService(ServiceType.PDF) as IPdfService | undefined;\n if (!pdfService) {\n logger.warn(\"PDF service not available, using fallback\");\n return {\n title: `PDF Document: ${document.file_name || \"Unknown Document\"}`,\n fullText: \"\",\n formattedDescription: `[PDF Document: ${document.file_name || \"Unknown Document\"}\\nSize: ${document.file_size || 0} bytes\\nUnable to extract text content]`,\n fileName: document.file_name || \"Unknown Document\",\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n\n const response = await fetch(documentUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch PDF: ${response.status}`);\n }\n\n const pdfBuffer = await response.arrayBuffer();\n const result = await pdfService.extractText(Buffer.from(pdfBuffer));\n const text = result.text;\n\n logger.info(`PDF processed successfully: ${text.length} characters extracted`);\n return {\n title: document.file_name || \"Unknown Document\",\n fullText: text,\n formattedDescription: `[PDF Document: ${document.file_name || \"Unknown Document\"}\\nSize: ${document.file_size || 0} bytes\\nText extracted successfully: ${text.length} characters]`,\n fileName: document.file_name || \"Unknown Document\",\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n\n private async processTextDocument(\n document: Document,\n documentUrl: string\n ): Promise<DocumentProcessingResult> {\n const response = await fetch(documentUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch text document: ${response.status}`);\n }\n\n const text = await response.text();\n\n logger.info(`Text document processed successfully: ${text.length} characters extracted`);\n return {\n title: document.file_name || \"Unknown Document\",\n fullText: text,\n formattedDescription: `[Text Document: ${document.file_name || \"Unknown Document\"}\\nSize: ${document.file_size || 0} bytes\\nText extracted successfully: ${text.length} characters]`,\n fileName: document.file_name || \"Unknown Document\",\n mimeType: document.mime_type,\n fileSize: document.file_size,\n };\n }\n\n async processMessage(\n message: Message\n ): Promise<{ processedContent: string; attachments: Media[] }> {\n let processedContent = \"\";\n const attachments: Media[] = [];\n\n if (\"text\" in message && message.text) {\n processedContent = message.text;\n } else if (\"caption\" in message && message.caption) {\n processedContent = message.caption as string;\n }\n\n if (\"document\" in message && message.document) {\n const document = message.document;\n const documentInfo = await this.processDocument(message);\n\n if (documentInfo) {\n try {\n const fileLink = await this.bot.telegram.getFileLink(document.file_id);\n\n const title = documentInfo.title;\n const fullText = documentInfo.fullText;\n\n if (fullText) {\n const documentContent = `\\n\\n--- DOCUMENT CONTENT ---\\nTitle: ${title}\\n\\nFull Content:\\n${fullText}\\n--- END DOCUMENT ---\\n\\n`;\n processedContent += documentContent;\n }\n\n attachments.push({\n id: document.file_id,\n url: fileLink.toString(),\n title: title,\n source: document.mime_type?.startsWith(\"application/pdf\") ? \"PDF\" : \"Document\",\n description: documentInfo.formattedDescription,\n text: fullText,\n });\n logger.info(`Document processed successfully: ${documentInfo.fileName}`);\n } catch (error) {\n logger.error({ error }, `Error processing document ${documentInfo.fileName}`);\n attachments.push({\n id: document.file_id,\n url: \"\",\n title: `Document: ${documentInfo.fileName}`,\n source: \"Document\",\n description: `Document processing failed: ${documentInfo.fileName}`,\n text: `Document: ${documentInfo.fileName}\\nSize: ${documentInfo.fileSize || 0} bytes\\nType: ${documentInfo.mimeType || \"unknown\"}`,\n });\n }\n } else {\n // Add a basic attachment even if documentInfo is null\n attachments.push({\n id: document.file_id,\n url: \"\",\n title: `Document: ${document.file_name || \"Unknown Document\"}`,\n source: \"Document\",\n description: `Document: ${document.file_name || \"Unknown Document\"}`,\n text: `Document: ${document.file_name || \"Unknown Document\"}\\nSize: ${document.file_size || 0} bytes\\nType: ${document.mime_type || \"unknown\"}`,\n });\n }\n }\n\n if (\"photo\" in message && message.photo?.length > 0) {\n const imageInfo = await this.processImage(message);\n if (imageInfo) {\n const photo = message.photo[message.photo.length - 1];\n const fileLink = await this.bot.telegram.getFileLink(photo.file_id);\n attachments.push({\n id: photo.file_id,\n url: fileLink.toString(),\n title: \"Image Attachment\",\n source: \"Image\",\n description: imageInfo.description,\n text: imageInfo.description,\n });\n }\n }\n\n logger.info(\n `Message processed - Content: ${processedContent ? \"yes\" : \"no\"}, Attachments: ${attachments.length}`\n );\n\n return { processedContent, attachments };\n }\n\n async sendMessageInChunks(\n ctx: Context,\n content: TelegramContent,\n replyToMessageId?: number\n ): Promise<Message.TextMessage[]> {\n if (content.attachments && content.attachments.length > 0) {\n content.attachments.map(async (attachment: Media) => {\n const typeMap: { [key: string]: MediaType } = {\n \"image/gif\": MediaType.ANIMATION,\n image: MediaType.PHOTO,\n doc: MediaType.DOCUMENT,\n video: MediaType.VIDEO,\n audio: MediaType.AUDIO,\n };\n\n let mediaType: MediaType | undefined;\n\n for (const prefix in typeMap) {\n if (attachment.contentType?.startsWith(prefix)) {\n mediaType = typeMap[prefix];\n break;\n }\n }\n\n if (!mediaType) {\n throw new Error(\n `Unsupported Telegram attachment content type: ${attachment.contentType}`\n );\n }\n\n await this.sendMedia(ctx, attachment.url, mediaType, attachment.description);\n });\n return [];\n } else {\n const chunks = this.splitMessage(content.text ?? \"\");\n const sentMessages: Message.TextMessage[] = [];\n\n const telegramButtons = convertToTelegramButtons(content.buttons ?? []);\n\n if (!ctx.chat) {\n logger.error(\"sendMessageInChunks: ctx.chat is undefined\");\n return [];\n }\n await ctx.telegram.sendChatAction(ctx.chat.id, \"typing\");\n\n for (let i = 0; i < chunks.length; i++) {\n const chunk = convertMarkdownToTelegram(chunks[i]);\n if (!ctx.chat) {\n logger.error(\"sendMessageInChunks loop: ctx.chat is undefined\");\n continue;\n }\n const sentMessage = (await ctx.telegram.sendMessage(ctx.chat.id, chunk, {\n reply_parameters:\n i === 0 && replyToMessageId ? { message_id: replyToMessageId } : undefined,\n parse_mode: \"MarkdownV2\",\n ...Markup.inlineKeyboard(telegramButtons),\n })) as Message.TextMessage;\n\n sentMessages.push(sentMessage);\n }\n\n return sentMessages;\n }\n }\n\n async sendMedia(\n ctx: Context,\n mediaPath: string,\n type: MediaType,\n caption?: string\n ): Promise<void> {\n try {\n const isUrl = /^(http|https):\\/\\//.test(mediaPath);\n\n if (!ctx.chat) {\n throw new Error(\"sendMedia: ctx.chat is undefined\");\n }\n\n if (isUrl) {\n switch (type) {\n case MediaType.PHOTO:\n await ctx.telegram.sendPhoto(ctx.chat.id, mediaPath, { caption });\n break;\n case MediaType.VIDEO:\n await ctx.telegram.sendVideo(ctx.chat.id, mediaPath, { caption });\n break;\n case MediaType.DOCUMENT:\n await ctx.telegram.sendDocument(ctx.chat.id, mediaPath, { caption });\n break;\n case MediaType.AUDIO:\n await ctx.telegram.sendAudio(ctx.chat.id, mediaPath, { caption });\n break;\n case MediaType.ANIMATION:\n await ctx.telegram.sendAnimation(ctx.chat.id, mediaPath, { caption });\n break;\n default: {\n const _exhaustive: never = type;\n throw new Error(`Unsupported media type: ${_exhaustive}`);\n }\n }\n } else {\n if (!fs.existsSync(mediaPath)) {\n throw new Error(`File not found at path: ${mediaPath}`);\n }\n\n const fileStream = fs.createReadStream(mediaPath);\n\n try {\n if (!ctx.chat) {\n throw new Error(\"sendMedia (file): ctx.chat is undefined\");\n }\n switch (type) {\n case MediaType.PHOTO:\n await ctx.telegram.sendPhoto(ctx.chat.id, { source: fileStream }, { caption });\n break;\n case MediaType.VIDEO:\n await ctx.telegram.sendVideo(ctx.chat.id, { source: fileStream }, { caption });\n break;\n case MediaType.DOCUMENT:\n await ctx.telegram.sendDocument(ctx.chat.id, { source: fileStream }, { caption });\n break;\n case MediaType.AUDIO:\n await ctx.telegram.sendAudio(ctx.chat.id, { source: fileStream }, { caption });\n break;\n case MediaType.ANIMATION:\n await ctx.telegram.sendAnimation(ctx.chat.id, { source: fileStream }, { caption });\n break;\n default: {\n const _exhaustive: never = type;\n throw new Error(`Unsupported media type: ${_exhaustive}`);\n }\n }\n } finally {\n fileStream.destroy();\n }\n }\n\n logger.info(\n `${type.charAt(0).toUpperCase() + type.slice(1)} sent successfully: ${mediaPath}`\n );\n } catch (error) {\n logger.error({ error }, `Error sending media: ${mediaPath}`);\n throw error;\n }\n }\n\n private splitMessage(text: string): string[] {\n const chunks: string[] = [];\n if (!text) return chunks;\n let currentChunk = \"\";\n\n const lines = text.split(\"\\n\");\n for (const line of lines) {\n if (currentChunk.length + line.length + 1 <= MAX_MESSAGE_LENGTH) {\n currentChunk += (currentChunk ? \"\\n\" : \"\") + line;\n } else {\n if (currentChunk) chunks.push(currentChunk);\n currentChunk = line;\n }\n }\n\n if (currentChunk) chunks.push(currentChunk);\n return chunks;\n }\n\n public async handleMessage(ctx: Context): Promise<void> {\n if (!ctx.message || !ctx.from) return;\n\n const message = ctx.message as Message.TextMessage;\n\n const entityId = createUniqueUuid(this.runtime, ctx.from.id.toString()) as UUID;\n\n const threadId =\n \"is_topic_message\" in message && message.is_topic_message\n ? message.message_thread_id?.toString()\n : undefined;\n\n if (!ctx.chat) {\n logger.error(\"handleMessage: ctx.chat is undefined\");\n return;\n }\n\n const telegramRoomid = threadId ? `${ctx.chat.id}-${threadId}` : ctx.chat.id.toString();\n const roomId = createUniqueUuid(this.runtime, telegramRoomid) as UUID;\n\n const messageId = createUniqueUuid(this.runtime, message?.message_id?.toString());\n\n const { processedContent, attachments } = await this.processMessage(message);\n\n const cleanedContent = cleanText(processedContent);\n const cleanedAttachments = attachments.map((att) => ({\n ...att,\n text: cleanText(att.text),\n description: cleanText(att.description),\n title: cleanText(att.title),\n }));\n\n if (!cleanedContent && cleanedAttachments.length === 0) {\n return;\n }\n\n const chat = message.chat as Chat;\n const chatId = chat.id;\n const channelType = getChannelType(chat);\n\n const sourceId = createUniqueUuid(this.runtime, `${chatId}`);\n const messageServerId = createUniqueUuid(this.runtime, `${chatId}`) as UUID;\n const worldId = createUniqueUuid(this.runtime, `${chatId}`) as UUID;\n\n await this.runtime.ensureConnection({\n entityId,\n roomId,\n userName: ctx.from.username,\n name: ctx.from.first_name,\n source: \"telegram\",\n channelId: telegramRoomid,\n messageServerId,\n type: channelType,\n worldId,\n worldName: `telegram-chat-${chatId}`,\n });\n\n const memoryContent: TelegramChatContextContent = {\n text: cleanedContent || \" \",\n attachments: cleanedAttachments,\n source: \"telegram\",\n channelType: channelType,\n inReplyTo:\n \"reply_to_message\" in message && message.reply_to_message\n ? createUniqueUuid(this.runtime, message.reply_to_message.message_id.toString())\n : undefined,\n chatId,\n userId: ctx.from.id,\n messageId: message.message_id,\n threadId:\n threadId && Number.isFinite(Number(threadId)) ? Number.parseInt(threadId, 10) : undefined,\n };\n\n const memory: Memory = {\n id: messageId,\n entityId,\n agentId: this.runtime.agentId,\n roomId,\n content: memoryContent,\n metadata: {\n type: MemoryType.MESSAGE,\n source: \"telegram\",\n sourceId,\n entityName: ctx.from.first_name,\n entityUserName: ctx.from.username,\n fromBot: ctx.from.is_bot,\n fromId: chatId,\n } as MessageMetadata & {\n entityName?: string;\n entityUserName?: string;\n fromBot?: boolean;\n fromId?: number;\n },\n createdAt: message.date * 1000,\n };\n\n const callback: HandlerCallback = async (content: Content, _files?: string[]) => {\n if (!content.text) return [];\n\n let sentMessages: boolean | Message.TextMessage[] = false;\n if (content?.channelType === \"DM\") {\n sentMessages = [];\n if (ctx.from) {\n const res = await this.bot.telegram.sendMessage(ctx.from.id, content.text);\n sentMessages.push(res);\n }\n } else {\n sentMessages = await this.sendMessageInChunks(ctx, content, message.message_id);\n }\n\n if (!Array.isArray(sentMessages)) return [];\n\n const memories: Memory[] = [];\n for (let i = 0; i < sentMessages.length; i++) {\n const sentMessage = sentMessages[i];\n\n const responseMemory: Memory = {\n id: createUniqueUuid(this.runtime, sentMessage.message_id.toString()),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n source: \"telegram\",\n text: sentMessage.text,\n inReplyTo: messageId,\n channelType: channelType,\n },\n createdAt: sentMessage.date * 1000,\n };\n\n await this.runtime.createMemory(responseMemory, \"messages\");\n memories.push(responseMemory);\n }\n\n return memories;\n };\n\n if (!this.runtime.messageService) {\n logger.error(\"Message service is not available\");\n throw new Error(\n \"Message service is not initialized. Ensure the message service is properly configured.\"\n );\n }\n await this.runtime.messageService.handleMessage(this.runtime, memory, callback);\n }\n\n /**\n * Handles the reaction event triggered by a user reacting to a message.\n * @param {NarrowedContext<Context<Update>, Update.MessageReactionUpdate>} ctx The context of the message reaction update\n * @returns {Promise<void>} A Promise that resolves when the reaction handling is complete\n */\n public async handleReaction(\n ctx: NarrowedContext<Context<Update>, Update.MessageReactionUpdate>\n ): Promise<void> {\n if (!ctx.update.message_reaction || !ctx.from) return;\n\n const reaction = ctx.update.message_reaction;\n const reactedToMessageId = reaction.message_id;\n\n const originalMessagePlaceholder: Partial<Message> = {\n message_id: reactedToMessageId,\n chat: reaction.chat,\n from: ctx.from,\n date: Math.floor(Date.now() / 1000),\n };\n\n const reactionType = reaction.new_reaction[0].type;\n const reactionEmoji = (reaction.new_reaction[0] as ReactionType).type; // Assuming ReactionType has 'type' for emoji\n\n const entityId = createUniqueUuid(this.runtime, ctx.from.id.toString()) as UUID;\n const roomId = createUniqueUuid(this.runtime, ctx.chat.id.toString());\n\n const reactionId = createUniqueUuid(\n this.runtime,\n `${reaction.message_id}-${ctx.from.id}-${Date.now()}`\n );\n\n const memory: Memory = {\n id: reactionId,\n entityId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n channelType: getChannelType(reaction.chat as Chat),\n text: `Reacted with: ${reactionType === \"emoji\" ? reactionEmoji : reactionType}`,\n source: \"telegram\",\n inReplyTo: createUniqueUuid(this.runtime, reaction.message_id.toString()),\n },\n createdAt: Date.now(),\n };\n\n // Create callback for handling reaction responses\n const callback: HandlerCallback = async (content: Content) => {\n // Add null check for content.text\n const replyText = content.text ?? \"\";\n const sentMessage = await ctx.reply(replyText);\n const responseMemory: Memory = {\n id: createUniqueUuid(this.runtime, sentMessage.message_id.toString()),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n inReplyTo: reactionId,\n },\n createdAt: sentMessage.date * 1000,\n };\n return [responseMemory];\n };\n\n this.runtime.emitEvent(EventType.REACTION_RECEIVED, {\n runtime: this.runtime,\n message: memory,\n callback,\n source: \"telegram\",\n ctx,\n originalMessage: originalMessagePlaceholder as Message,\n reactionString: reactionType === \"emoji\" ? reactionEmoji : reactionType,\n originalReaction: reaction.new_reaction[0] as ReactionType,\n } as TelegramReactionReceivedPayload);\n\n this.runtime.emitEvent(TelegramEventTypes.REACTION_RECEIVED, {\n runtime: this.runtime,\n message: memory,\n callback,\n source: \"telegram\",\n ctx,\n originalMessage: originalMessagePlaceholder as Message, // Cast needed due to placeholder\n reactionString: reactionType === \"emoji\" ? reactionEmoji : reactionType,\n originalReaction: reaction.new_reaction[0] as ReactionType,\n } as TelegramReactionReceivedPayload);\n }\n\n /**\n * Sends a message to a Telegram chat and emits appropriate events\n * @param {number | string} chatId - The Telegram chat ID to send the message to\n * @param {Content} content - The content to send\n * @param {number} [replyToMessageId] - Optional message ID to reply to\n * @returns {Promise<Message.TextMessage[]>} The sent messages\n */\n public async sendMessage(\n chatId: number | string,\n content: Content,\n replyToMessageId?: number\n ): Promise<Message.TextMessage[]> {\n const ctx = {\n chat: { id: chatId },\n telegram: this.bot.telegram,\n };\n\n const sentMessages = await this.sendMessageInChunks(ctx as Context, content, replyToMessageId);\n\n if (!sentMessages?.length) return [];\n\n // Create group ID\n const roomId = createUniqueUuid(this.runtime, chatId.toString());\n\n // Create memories for the sent messages\n const memories: Memory[] = [];\n for (const sentMessage of sentMessages) {\n const memory: Memory = {\n id: createUniqueUuid(this.runtime, sentMessage.message_id.toString()),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n text: sentMessage.text,\n source: \"telegram\",\n channelType: getChannelType({\n id: typeof chatId === \"string\" ? Number.parseInt(chatId, 10) : chatId,\n type: \"private\", // Default to private, will be overridden if in context\n } as Chat),\n },\n createdAt: sentMessage.date * 1000,\n };\n\n await this.runtime.createMemory(memory, \"messages\");\n memories.push(memory);\n }\n\n if (memories.length > 0) {\n this.runtime.emitEvent(EventType.MESSAGE_SENT, {\n runtime: this.runtime,\n message: memories[0],\n source: \"telegram\",\n });\n }\n\n this.runtime.emitEvent(\n TelegramEventTypes.MESSAGE_SENT as string,\n {\n runtime: this.runtime,\n source: \"telegram\",\n originalMessages: sentMessages,\n chatId,\n message: memories[0] || ({} as Memory),\n } as TelegramMessageSentPayload\n );\n\n return sentMessages;\n }\n}\n",
|
|
78
|
+
"import { logger } from \"@elizaos/core\";\nimport type { InlineKeyboardButton } from \"@telegraf/types\";\nimport { Markup } from \"telegraf\";\nimport type { Button } from \"./types\";\n\nconst TELEGRAM_RESERVED_REGEX = /([_*[\\]()~`>#+\\-=|{}.!\\\\])/g;\n\nfunction escapePlainText(text: string): string {\n if (!text) return \"\";\n return text.replace(TELEGRAM_RESERVED_REGEX, \"\\\\$1\");\n}\n\nfunction escapePlainTextPreservingBlockquote(text: string): string {\n if (!text) return \"\";\n return text\n .split(\"\\n\")\n .map((line) => {\n const match = line.match(/^(>+\\s?)(.*)$/);\n if (match) {\n return match[1] + escapePlainText(match[2]);\n }\n return escapePlainText(line);\n })\n .join(\"\\n\");\n}\n\n/**\n * Escapes code inside inline or pre-formatted code blocks.\n * Telegram requires that inside code blocks all ` and \\ characters are escaped.\n */\nfunction escapeCode(text: string): string {\n if (!text) return \"\";\n return text.replace(/([`\\\\])/g, \"\\\\$1\");\n}\n\nfunction escapeUrl(url: string): string {\n if (!url) return \"\";\n return url.replace(/([)\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * This function converts standard markdown to Telegram MarkdownV2.\n *\n * In addition to processing code blocks, inline code, links, bold, strikethrough, and italic,\n * it converts any header lines (those starting with one or more `#`) to bold text.\n *\n * Uses regex replacements with placeholders. Assumes non-nested formatting.\n */\nexport function convertMarkdownToTelegram(markdown: string): string {\n // We will temporarily replace recognized markdown tokens with placeholders.\n // Each placeholder is a string like \"\\u0000{index}\\u0000\".\n const replacements: string[] = [];\n function storeReplacement(formatted: string): string {\n const placeholder = `\\u0000${replacements.length}\\u0000`;\n replacements.push(formatted);\n return placeholder;\n }\n\n let converted = markdown;\n\n // 1. Fenced code blocks (```...```)\n // Matches an optional language (letters only) and then any content until the closing ```\n converted = converted.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (_match, lang, code) => {\n const escapedCode = escapeCode(code);\n const formatted = `\\`\\`\\`${lang || \"\"}\\n${escapedCode}\\`\\`\\``;\n return storeReplacement(formatted);\n });\n\n converted = converted.replace(/`([^`]+)`/g, (_match, code) => {\n const escapedCode = escapeCode(code);\n const formatted = `\\`${escapedCode}\\``;\n return storeReplacement(formatted);\n });\n\n converted = converted.replace(\n /$begin:math:display$([^$end:math:display$]+)]$begin:math:text$([^)]+)$end:math:text$/g,\n (_match, text, url) => {\n const formattedText = escapePlainText(text);\n const escapedURL = escapeUrl(url);\n const formatted = `[${formattedText}](${escapedURL})`;\n return storeReplacement(formatted);\n }\n );\n\n converted = converted.replace(/\\*\\*([^*]+)\\*\\*/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `*${formattedContent}*`;\n return storeReplacement(formatted);\n });\n\n converted = converted.replace(/~~([^~]+)~~/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `~${formattedContent}~`;\n return storeReplacement(formatted);\n });\n\n converted = converted.replace(/(?<!\\*)\\*([^*\\n]+)\\*(?!\\*)/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `_${formattedContent}_`;\n return storeReplacement(formatted);\n });\n\n converted = converted.replace(/_([^_\\n]+)_/g, (_match, content) => {\n const formattedContent = escapePlainText(content);\n const formatted = `_${formattedContent}_`;\n return storeReplacement(formatted);\n });\n\n converted = converted.replace(/^(#{1,6})\\s*(.*)$/gm, (_match, _hashes, headerContent: string) => {\n const formatted = `*${escapePlainText(headerContent.trim())}*`;\n return storeReplacement(formatted);\n });\n\n const NULL_CHAR = String.fromCharCode(0);\n const PLACEHOLDER_PATTERN = new RegExp(`(${NULL_CHAR}\\\\d+${NULL_CHAR})`, \"g\");\n const PLACEHOLDER_TEST = new RegExp(`^${NULL_CHAR}\\\\d+${NULL_CHAR}$`);\n const PLACEHOLDER_REPLACE = new RegExp(`${NULL_CHAR}(\\\\d+)${NULL_CHAR}`, \"g\");\n\n const finalEscaped = converted\n .split(PLACEHOLDER_PATTERN)\n .map((segment) => {\n if (PLACEHOLDER_TEST.test(segment)) {\n return segment;\n } else {\n return escapePlainTextPreservingBlockquote(segment);\n }\n })\n .join(\"\");\n\n const finalResult = finalEscaped.replace(PLACEHOLDER_REPLACE, (_, index) => {\n return replacements[parseInt(index, 10)];\n });\n\n return finalResult;\n}\n\nexport function splitMessage(text: string, maxLength = 4096): string[] {\n const chunks: string[] = [];\n if (!text) return chunks;\n let currentChunk = \"\";\n\n const lines = text.split(\"\\n\");\n for (const line of lines) {\n if (currentChunk.length + line.length + 1 <= maxLength) {\n currentChunk += (currentChunk ? \"\\n\" : \"\") + line;\n } else {\n if (currentChunk) chunks.push(currentChunk);\n currentChunk = line;\n }\n }\n\n if (currentChunk) chunks.push(currentChunk);\n return chunks;\n}\n\nexport function convertToTelegramButtons(buttons?: Button[] | null): InlineKeyboardButton[] {\n if (!buttons) return [];\n const telegramButtons: InlineKeyboardButton[] = [];\n\n for (const button of buttons) {\n if (!button || !button.text || !button.url) {\n logger.warn({ button }, \"Invalid button configuration, skipping\");\n continue;\n }\n\n let telegramButton: InlineKeyboardButton;\n switch (button.kind) {\n case \"login\":\n telegramButton = Markup.button.login(button.text, button.url);\n break;\n case \"url\":\n telegramButton = Markup.button.url(button.text, button.url);\n break;\n default:\n logger.warn(`Unknown button kind '${button.kind}', treating as URL button`);\n telegramButton = Markup.button.url(button.text, button.url);\n break;\n }\n\n telegramButtons.push(telegramButton);\n }\n\n return telegramButtons;\n}\n\nexport function cleanText(text: string | undefined | null): string {\n if (!text) return \"\";\n return text.split(\"\\u0000\").join(\"\");\n}\n",
|
|
79
|
+
"import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\n\nexport const CHAT_STATE_PROVIDER = \"telegram_chat_state\";\n\nexport const chatStateProvider: Provider = {\n name: CHAT_STATE_PROVIDER,\n description: \"Provides Telegram chat context including chat ID, user ID, and chat type\",\n dynamic: true,\n\n get: async (_runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> => {\n const chatId = message.content?.chatId as number | undefined;\n const userId = message.content?.userId as number | undefined;\n const threadId = message.content?.threadId as number | undefined;\n const roomId = message.roomId;\n\n const isPrivate = chatId !== undefined && chatId > 0;\n const isGroup = chatId !== undefined && chatId < 0;\n\n const data = {\n chatId,\n userId,\n threadId,\n roomId,\n isPrivate,\n isGroup,\n };\n\n const values: Record<string, string> = {\n chat_id: chatId?.toString() || \"\",\n user_id: userId?.toString() || \"\",\n thread_id: threadId?.toString() || \"\",\n room_id: roomId || \"\",\n is_private: isPrivate.toString(),\n is_group: isGroup.toString(),\n };\n\n let text = \"Telegram Chat State:\\n\";\n if (chatId) {\n text += `Chat ID: ${chatId}\\n`;\n text += `Chat Type: ${isPrivate ? \"Private\" : \"Group\"}\\n`;\n }\n if (userId) {\n text += `User ID: ${userId}\\n`;\n }\n if (threadId) {\n text += `Thread ID: ${threadId}\\n`;\n }\n\n return {\n data,\n values,\n text,\n };\n },\n};\n",
|
|
80
|
+
"import {\n ChannelType,\n type Content,\n createUniqueUuid,\n type Entity,\n type EventPayload,\n EventType,\n type IAgentRuntime,\n logger,\n Role,\n type Room,\n Service,\n type TargetInfo,\n type UUID,\n type World,\n} from \"@elizaos/core\";\nimport { type Context, Telegraf } from \"telegraf\";\nimport type { Chat, ChatMemberAdministrator, ChatMemberOwner, User } from \"telegraf/types\";\nimport { TELEGRAM_SERVICE_NAME } from \"./constants\";\nimport { MessageManager } from \"./messageManager\";\nimport { TelegramEventTypes, type TelegramWorldPayload } from \"./types\";\n\nexport class TelegramService extends Service {\n static serviceType = TELEGRAM_SERVICE_NAME;\n capabilityDescription = \"The agent is able to send and receive messages on telegram\";\n private bot: Telegraf<Context> | null;\n public messageManager: MessageManager | null;\n private options;\n private knownChats: Map<string, Chat> = new Map();\n private syncedEntityIds: Set<string> = new Set<string>();\n\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n\n const botToken = runtime.getSetting(\"TELEGRAM_BOT_TOKEN\") as string;\n if (!botToken || botToken.trim() === \"\") {\n logger.warn(\"Telegram Bot Token not provided - Telegram functionality will be unavailable\");\n this.bot = null;\n this.messageManager = null;\n return;\n }\n\n this.options = {\n telegram: {\n apiRoot:\n runtime.getSetting(\"TELEGRAM_API_ROOT\") ||\n process.env.TELEGRAM_API_ROOT ||\n \"https://api.telegram.org\",\n },\n };\n\n this.bot = new Telegraf(botToken, this.options);\n this.messageManager = new MessageManager(this.bot, this.runtime);\n }\n\n static async start(runtime: IAgentRuntime): Promise<TelegramService> {\n const service = new TelegramService(runtime);\n\n if (!service.bot) {\n logger.warn(\"Telegram service started without bot functionality - no bot token provided\");\n return service;\n }\n\n const maxRetries = 5;\n let retryCount = 0;\n let lastError: Error | null = null;\n\n while (retryCount < maxRetries) {\n try {\n logger.success(`Telegram client started for character ${runtime.character.name}`);\n\n await service.initializeBot();\n service.setupMiddlewares();\n service.setupMessageHandlers();\n await service.bot?.telegram.getMe();\n\n return service;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n logger.error(\n `Telegram initialization attempt ${retryCount + 1} failed: ${lastError.message}`\n );\n retryCount++;\n\n if (retryCount < maxRetries) {\n const delay = 2 ** retryCount * 1000;\n logger.info(`Retrying Telegram initialization in ${delay / 1000} seconds...`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n logger.error(\n `Telegram initialization failed after ${maxRetries} attempts. Last error: ${lastError?.message}. Service will continue without Telegram functionality.`\n );\n\n return service;\n }\n\n static async stop(runtime: IAgentRuntime) {\n const tgClient = runtime.getService(TELEGRAM_SERVICE_NAME);\n if (tgClient) {\n await tgClient.stop();\n }\n }\n\n async stop(): Promise<void> {\n this.bot?.stop();\n }\n\n private async initializeBot(): Promise<void> {\n this.bot?.start((ctx) => {\n this.runtime.emitEvent(\n TelegramEventTypes.SLASH_START as string,\n {\n runtime: this.runtime,\n source: \"telegram\",\n ctx,\n } as EventPayload\n );\n });\n this.bot?.launch({\n dropPendingUpdates: true,\n allowedUpdates: [\"message\", \"message_reaction\"],\n });\n\n const botInfo = await this.bot?.telegram.getMe();\n logger.log(`Bot info: ${JSON.stringify(botInfo)}`);\n\n process.once(\"SIGINT\", () => this.bot?.stop(\"SIGINT\"));\n process.once(\"SIGTERM\", () => this.bot?.stop(\"SIGTERM\"));\n }\n\n private setupMiddlewares(): void {\n this.bot?.use(this.authorizationMiddleware.bind(this));\n this.bot?.use(this.chatAndEntityMiddleware.bind(this));\n }\n\n private async authorizationMiddleware(ctx: Context, next: () => Promise<void>): Promise<void> {\n if (!(await this.isGroupAuthorized(ctx))) {\n logger.debug(\"Chat not authorized, skipping message processing\");\n return;\n }\n await next();\n }\n\n private async chatAndEntityMiddleware(ctx: Context, next: () => Promise<void>): Promise<void> {\n if (!ctx.chat) return next();\n\n const chatId = ctx.chat.id.toString();\n\n if (!this.knownChats.has(chatId)) {\n await this.handleNewChat(ctx);\n return next();\n }\n\n await this.processExistingChat(ctx);\n await next();\n }\n\n private async processExistingChat(ctx: Context): Promise<void> {\n if (!ctx.chat) return;\n\n const chat = ctx.chat;\n\n if (chat.type === \"supergroup\" && chat.is_forum && ctx.message?.message_thread_id) {\n await this.handleForumTopic(ctx);\n }\n\n if (ctx.from && ctx.chat.type !== \"private\") {\n await this.syncEntity(ctx);\n }\n }\n\n private setupMessageHandlers(): void {\n this.bot?.on(\"message\", async (ctx) => {\n await this.messageManager?.handleMessage(ctx);\n });\n\n this.bot?.on(\"message_reaction\", async (ctx) => {\n await this.messageManager?.handleReaction(ctx);\n });\n }\n\n private async isGroupAuthorized(ctx: Context): Promise<boolean> {\n const chatId = ctx.chat?.id.toString();\n if (!chatId) return false;\n\n const allowedChats = this.runtime.getSetting(\"TELEGRAM_ALLOWED_CHATS\");\n if (!allowedChats) {\n return true;\n }\n\n try {\n const allowedChatsList = JSON.parse(allowedChats as string);\n return allowedChatsList.includes(chatId);\n } catch (error) {\n logger.error({ error }, \"Error parsing TELEGRAM_ALLOWED_CHATS\");\n return false;\n }\n }\n\n private async syncEntity(ctx: Context): Promise<void> {\n if (!ctx.chat) return;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n const worldId = createUniqueUuid(this.runtime, chatId) as UUID;\n const roomId = createUniqueUuid(\n this.runtime,\n ctx.message?.message_thread_id\n ? `${ctx.chat.id}-${ctx.message.message_thread_id}`\n : ctx.chat.id.toString()\n ) as UUID;\n\n await this.syncMessageSender(ctx, worldId, roomId, chatId);\n await this.syncNewChatMember(ctx, worldId, roomId, chatId);\n await this.syncLeftChatMember(ctx);\n }\n\n private async syncMessageSender(\n ctx: Context,\n worldId: UUID,\n roomId: UUID,\n chatId: string\n ): Promise<void> {\n if (ctx.from) {\n const telegramId = ctx.from.id.toString();\n const entityId = createUniqueUuid(this.runtime, telegramId) as UUID;\n\n if (this.syncedEntityIds.has(entityId)) {\n return;\n }\n\n await this.runtime.ensureConnection({\n entityId,\n roomId: roomId,\n userName: ctx.from.username,\n userId: telegramId as UUID,\n name: ctx.from.first_name || ctx.from.username || \"Unknown User\",\n source: \"telegram\",\n channelId: chatId,\n messageServerId: createUniqueUuid(this.runtime, chatId) as UUID,\n type: ChannelType.GROUP,\n worldId: worldId,\n });\n\n this.syncedEntityIds.add(entityId);\n }\n }\n\n private async syncNewChatMember(\n ctx: Context,\n worldId: UUID,\n roomId: UUID,\n chatId: string\n ): Promise<void> {\n if (ctx.message && \"new_chat_member\" in ctx.message) {\n const newMember = ctx.message.new_chat_member as User;\n const telegramId = newMember.id.toString();\n const entityId = createUniqueUuid(this.runtime, telegramId) as UUID;\n\n if (this.syncedEntityIds.has(entityId)) return;\n\n await this.runtime.ensureConnection({\n entityId,\n roomId: roomId,\n userName: newMember.username,\n userId: telegramId as UUID,\n name: newMember.first_name || newMember.username || \"Unknown User\",\n source: \"telegram\",\n channelId: chatId,\n messageServerId: createUniqueUuid(this.runtime, chatId) as UUID,\n type: ChannelType.GROUP,\n worldId: worldId,\n });\n\n this.syncedEntityIds.add(entityId);\n\n this.runtime.emitEvent(\n TelegramEventTypes.ENTITY_JOINED as string,\n {\n runtime: this.runtime,\n source: \"telegram\",\n entityId,\n worldId,\n newMember,\n ctx,\n } as EventPayload\n );\n }\n }\n\n private async syncLeftChatMember(ctx: Context): Promise<void> {\n if (ctx.message && \"left_chat_member\" in ctx.message) {\n const leftMember = ctx.message.left_chat_member as User;\n const telegramId = leftMember.id.toString();\n const entityId = createUniqueUuid(this.runtime, telegramId) as UUID;\n\n const existingEntity = await this.runtime.getEntityById(entityId);\n if (existingEntity) {\n existingEntity.metadata = {\n ...existingEntity.metadata,\n status: \"INACTIVE\",\n leftAt: Date.now(),\n };\n await this.runtime.updateEntity(existingEntity);\n }\n }\n }\n\n private async handleForumTopic(ctx: Context): Promise<void> {\n if (!ctx.chat || !ctx.message?.message_thread_id) return;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n const worldId = createUniqueUuid(this.runtime, chatId) as UUID;\n\n const room = await this.buildForumTopicRoom(ctx, worldId);\n if (!room) return;\n\n await this.runtime.ensureRoomExists(room);\n }\n\n private buildMsgSenderEntity(from: User): Entity | null {\n if (!from) return null;\n\n const userId = createUniqueUuid(this.runtime, from.id.toString()) as UUID;\n const telegramId = from.id.toString();\n\n return {\n id: userId,\n agentId: this.runtime.agentId,\n names: [from.first_name || from.username || \"Unknown User\"],\n metadata: {\n telegram: {\n id: telegramId,\n username: from.username,\n name: from.first_name || from.username || \"Unknown User\",\n },\n },\n };\n }\n\n private async handleNewChat(ctx: Context): Promise<void> {\n if (!ctx.chat) return;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n\n this.knownChats.set(chatId, chat);\n\n const { chatTitle, channelType } = this.getChatTypeInfo(chat);\n\n const worldId = createUniqueUuid(this.runtime, chatId) as UUID;\n\n const existingWorld = await this.runtime.getWorld(worldId);\n if (existingWorld) {\n return;\n }\n\n const userId = ctx.from\n ? (createUniqueUuid(this.runtime, ctx.from.id.toString()) as UUID)\n : null;\n\n let admins: (ChatMemberOwner | ChatMemberAdministrator)[] = [];\n let owner: ChatMemberOwner | null = null;\n if (chat.type === \"group\" || chat.type === \"supergroup\" || chat.type === \"channel\") {\n const chatAdmins = await ctx.getChatAdministrators();\n admins = chatAdmins;\n const foundOwner = admins.find(\n (admin): admin is ChatMemberOwner => admin.status === \"creator\"\n );\n owner = foundOwner || null;\n }\n\n let ownerId = userId;\n\n if (owner) {\n ownerId = createUniqueUuid(this.runtime, String(owner.user.id)) as UUID;\n }\n\n const world: World = {\n id: worldId,\n name: chatTitle,\n agentId: this.runtime.agentId,\n messageServerId: createUniqueUuid(this.runtime, chatId) as UUID,\n metadata: {\n roles: ownerId\n ? {\n [ownerId]: Role.OWNER,\n }\n : {},\n extra: {\n chatType: chat.type,\n isForumEnabled: chat.type === \"supergroup\" && chat.is_forum,\n },\n },\n };\n\n await this.runtime.ensureWorldExists(world);\n\n const generalRoom: Room = {\n id: createUniqueUuid(this.runtime, chatId) as UUID,\n name: chatTitle,\n source: \"telegram\",\n type: channelType,\n channelId: chatId,\n messageServerId: createUniqueUuid(this.runtime, chatId) as UUID,\n worldId,\n };\n\n await this.runtime.ensureRoomExists(generalRoom);\n\n const rooms = [generalRoom];\n\n if (chat.type === \"supergroup\" && chat.is_forum && ctx.message?.message_thread_id) {\n const topicRoom = await this.buildForumTopicRoom(ctx, worldId);\n if (topicRoom) {\n rooms.push(topicRoom);\n await this.runtime.ensureRoomExists(topicRoom);\n }\n }\n\n const entities = await this.buildStandardizedEntities(chat);\n\n if (ctx.from) {\n const senderEntity = this.buildMsgSenderEntity(ctx.from);\n if (senderEntity?.id && !entities.some((e) => e.id === senderEntity.id)) {\n entities.push(senderEntity);\n this.syncedEntityIds.add(senderEntity.id);\n }\n }\n\n if (generalRoom.id && generalRoom.channelId && generalRoom.messageServerId) {\n await this.batchProcessEntities(\n entities,\n generalRoom.id,\n generalRoom.channelId,\n generalRoom.messageServerId,\n generalRoom.type,\n worldId\n );\n }\n\n const telegramWorldPayload: TelegramWorldPayload = {\n runtime: this.runtime,\n world,\n rooms,\n entities,\n source: \"telegram\",\n chat,\n botUsername: this.bot?.botInfo?.username,\n };\n\n if (chat.type !== \"private\") {\n await this.runtime.emitEvent(TelegramEventTypes.WORLD_JOINED, telegramWorldPayload);\n }\n\n await this.runtime.emitEvent(EventType.WORLD_JOINED, {\n runtime: this.runtime,\n world,\n rooms,\n entities,\n source: \"telegram\",\n });\n }\n\n private async batchProcessEntities(\n entities: Entity[],\n roomId: UUID,\n channelId: string,\n serverId: string,\n roomType: ChannelType,\n worldId: UUID\n ): Promise<void> {\n const batchSize = 50;\n\n for (let i = 0; i < entities.length; i += batchSize) {\n const entityBatch = entities.slice(i, i + batchSize);\n\n await Promise.all(\n entityBatch.map(async (entity: Entity) => {\n if (entity.id) {\n const telegramMetadata = entity.metadata?.telegram as\n | {\n username?: string;\n name?: string;\n id?: string;\n }\n | undefined;\n\n await this.runtime.ensureConnection({\n entityId: entity.id,\n roomId: roomId,\n userName: telegramMetadata?.username,\n name: telegramMetadata?.name,\n userId: telegramMetadata?.id as UUID,\n source: \"telegram\",\n channelId: channelId,\n messageServerId: createUniqueUuid(this.runtime, serverId) as UUID,\n type: roomType,\n worldId: worldId,\n });\n } else {\n logger.warn(`Skipping entity sync due to missing ID: ${JSON.stringify(entity.names)}`);\n }\n })\n );\n\n if (i + batchSize < entities.length) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n }\n\n private getChatTypeInfo(chat: Chat): {\n chatTitle: string;\n channelType: ChannelType;\n } {\n let chatTitle: string;\n let channelType: ChannelType;\n\n switch (chat.type) {\n case \"private\":\n chatTitle = `Chat with ${chat.first_name || \"Unknown User\"}`;\n channelType = ChannelType.DM;\n break;\n case \"group\":\n chatTitle = chat.title || \"Unknown Group\";\n channelType = ChannelType.GROUP;\n break;\n case \"supergroup\":\n chatTitle = chat.title || \"Unknown Supergroup\";\n channelType = ChannelType.GROUP;\n break;\n case \"channel\":\n chatTitle = chat.title || \"Unknown Channel\";\n channelType = ChannelType.FEED;\n break;\n default:\n chatTitle = \"Unknown Chat\";\n channelType = ChannelType.GROUP;\n }\n\n return { chatTitle, channelType };\n }\n\n private async buildStandardizedEntities(chat: Chat): Promise<Entity[]> {\n const entities: Entity[] = [];\n\n if (chat.type === \"private\" && chat.id) {\n const userId = createUniqueUuid(this.runtime, chat.id.toString()) as UUID;\n entities.push({\n id: userId,\n names: [chat.first_name || \"Unknown User\"],\n agentId: this.runtime.agentId,\n metadata: {\n telegram: {\n id: chat.id.toString(),\n username: chat.username || \"unknown\",\n name: chat.first_name || \"Unknown User\",\n },\n source: \"telegram\",\n },\n });\n this.syncedEntityIds.add(userId);\n } else if (chat.type === \"group\" || chat.type === \"supergroup\") {\n const admins = await this.bot?.telegram.getChatAdministrators(chat.id);\n\n if (admins && admins.length > 0) {\n for (const admin of admins) {\n const userId = createUniqueUuid(this.runtime, admin.user.id.toString()) as UUID;\n entities.push({\n id: userId,\n names: [admin.user.first_name || admin.user.username || \"Unknown Admin\"],\n agentId: this.runtime.agentId,\n metadata: {\n telegram: {\n id: admin.user.id.toString(),\n username: admin.user.username || \"unknown\",\n name: admin.user.first_name || \"Unknown Admin\",\n isAdmin: true,\n adminTitle: admin.custom_title || (admin.status === \"creator\" ? \"Owner\" : \"Admin\"),\n },\n source: \"telegram\",\n roles: [admin.status === \"creator\" ? Role.OWNER : Role.ADMIN],\n },\n });\n this.syncedEntityIds.add(userId);\n }\n }\n }\n\n return entities;\n }\n\n private async buildForumTopicRoom(ctx: Context, worldId: UUID): Promise<Room | null> {\n if (!ctx.chat || !ctx.message?.message_thread_id) return null;\n if (ctx.chat.type !== \"supergroup\" || !ctx.chat.is_forum) return null;\n\n const chat = ctx.chat;\n const chatId = chat.id.toString();\n const threadId = ctx.message.message_thread_id.toString();\n const roomId = createUniqueUuid(this.runtime, `${chatId}-${threadId}`) as UUID;\n\n const replyMessage = JSON.parse(JSON.stringify(ctx.message));\n\n let topicName = `Topic #${threadId}`;\n\n if (\n replyMessage &&\n typeof replyMessage === \"object\" &&\n \"forum_topic_created\" in replyMessage &&\n replyMessage.forum_topic_created\n ) {\n const topicCreated = replyMessage.forum_topic_created;\n if (topicCreated && typeof topicCreated === \"object\" && \"name\" in topicCreated) {\n topicName = topicCreated.name;\n }\n } else if (\n replyMessage &&\n typeof replyMessage === \"object\" &&\n \"reply_to_message\" in replyMessage &&\n replyMessage.reply_to_message &&\n typeof replyMessage.reply_to_message === \"object\" &&\n \"forum_topic_created\" in replyMessage.reply_to_message &&\n replyMessage.reply_to_message.forum_topic_created\n ) {\n const topicCreated = replyMessage.reply_to_message.forum_topic_created;\n if (topicCreated && typeof topicCreated === \"object\" && \"name\" in topicCreated) {\n topicName = topicCreated.name;\n }\n }\n\n const room: Room = {\n id: roomId,\n name: topicName,\n source: \"telegram\",\n type: ChannelType.GROUP,\n channelId: `${chatId}-${threadId}`,\n messageServerId: createUniqueUuid(this.runtime, chatId) as UUID,\n worldId,\n metadata: {\n threadId: threadId,\n isForumTopic: true,\n parentChatId: chatId,\n },\n };\n\n return room;\n }\n\n static registerSendHandlers(runtime: IAgentRuntime, serviceInstance: TelegramService) {\n if (serviceInstance?.bot) {\n runtime.registerSendHandler(\n \"telegram\",\n serviceInstance.handleSendMessage.bind(serviceInstance)\n );\n logger.info(\"[Telegram] Registered send handler.\");\n } else {\n logger.warn(\"[Telegram] Cannot register send handler - bot not initialized.\");\n }\n }\n\n async handleSendMessage(\n runtime: IAgentRuntime,\n target: TargetInfo,\n content: Content\n ): Promise<void> {\n // Check if bot and messageManager are available\n if (!this.bot || !this.messageManager) {\n logger.error(\"[Telegram SendHandler] Bot not initialized - cannot send messages.\");\n throw new Error(\"Telegram bot is not initialized. Please provide TELEGRAM_BOT_TOKEN.\");\n }\n\n let chatId: number | string | undefined;\n\n if (target.channelId) {\n chatId = target.channelId;\n } else if (target.roomId) {\n const room = await runtime.getRoom(target.roomId);\n chatId = room?.channelId;\n if (!chatId)\n throw new Error(`Could not resolve Telegram chat ID from roomId ${target.roomId}`);\n } else if (target.entityId) {\n logger.error(\"[Telegram SendHandler] Sending DMs via entityId not implemented yet.\");\n throw new Error(\n \"Sending DMs via entityId is not yet supported for Telegram. Use channelId or roomId instead.\"\n );\n } else {\n throw new Error(\"Telegram SendHandler requires channelId, roomId, or entityId.\");\n }\n\n if (!chatId) {\n throw new Error(\n `Could not determine target Telegram chat ID for target: ${JSON.stringify(target)}`\n );\n }\n\n await this.messageManager.sendMessage(chatId, content);\n logger.info(`[Telegram SendHandler] Message sent to chat ID: ${chatId}`);\n }\n}\n",
|
|
81
|
+
"import { type IAgentRuntime, logger, type TestCase } from \"@elizaos/core\";\nimport type { Chat, Message, User } from \"@telegraf/types\";\nimport type { Context, Telegraf } from \"telegraf\";\nimport type { MessageManager } from \"./messageManager\";\nimport type { TelegramService } from \"./service\";\nimport type { TelegramContent } from \"./types\";\n\nconst TEST_IMAGE_URL =\n \"https://github.com/elizaOS/awesome-eliza/blob/main/assets/eliza-logo.jpg?raw=true\";\nexport class TelegramTestSuite {\n name = \"telegram\";\n private telegramClient: TelegramService | null = null;\n private bot: Telegraf<Context> | null = null;\n private messageManager: MessageManager | null = null;\n tests: TestCase[];\n constructor() {\n this.tests = [\n {\n name: \"Initialize and Validate Telegram Bot Connection\",\n fn: this.testCreatingTelegramBot.bind(this),\n },\n {\n name: \"Send Basic Text Message to Telegram Chat\",\n fn: this.testSendingTextMessage.bind(this),\n },\n {\n name: \"Send Text Message with an Image Attachment\",\n fn: this.testSendingMessageWithAttachment.bind(this),\n },\n {\n name: \"Handle and Process Incoming Telegram Messages\",\n fn: this.testHandlingMessage.bind(this),\n },\n {\n name: \"Process and Validate Image Attachments in Incoming Messages\",\n fn: this.testProcessingImages.bind(this),\n },\n ] as TestCase[];\n }\n validateChatId(runtime: IAgentRuntime): string | number {\n const testChatId =\n runtime.getSetting(\"TELEGRAM_TEST_CHAT_ID\") || process.env.TELEGRAM_TEST_CHAT_ID;\n if (!testChatId) {\n throw new Error(\n \"TELEGRAM_TEST_CHAT_ID is not set. Please provide a valid chat ID in the environment variables.\"\n );\n }\n if (typeof testChatId === \"boolean\") {\n throw new Error(\"TELEGRAM_TEST_CHAT_ID must be a string or number, not a boolean.\");\n }\n return testChatId;\n }\n async getChatInfo(runtime: IAgentRuntime): Promise<Context[\"chat\"]> {\n try {\n const chatId = this.validateChatId(runtime);\n if (!this.bot) {\n throw new Error(\"Bot is not initialized.\");\n }\n const chat = await this.bot.telegram.getChat(chatId);\n logger.log(`Fetched real chat: ${JSON.stringify(chat)}`);\n return chat;\n } catch (error) {\n throw new Error(`Error fetching real Telegram chat: ${error}`);\n }\n }\n async testCreatingTelegramBot(runtime: IAgentRuntime) {\n this.telegramClient = runtime.getService(\"telegram\") as TelegramService;\n if (!this.telegramClient || !this.telegramClient.messageManager) {\n throw new Error(\n \"Telegram service or message manager not initialized - check TELEGRAM_BOT_TOKEN\"\n );\n }\n this.bot = this.telegramClient.messageManager.bot;\n this.messageManager = this.telegramClient.messageManager;\n logger.debug(\"Telegram bot initialized successfully.\");\n }\n async testSendingTextMessage(runtime: IAgentRuntime) {\n try {\n if (!this.bot) throw new Error(\"Bot not initialized.\");\n const chatId = this.validateChatId(runtime);\n await this.bot.telegram.sendMessage(chatId, \"Testing Telegram message!\");\n logger.debug(\"Message sent successfully.\");\n } catch (error) {\n throw new Error(`Error sending Telegram message: ${error}`);\n }\n }\n async testSendingMessageWithAttachment(runtime: IAgentRuntime) {\n try {\n if (!this.messageManager) throw new Error(\"MessageManager not initialized.\");\n if (!this.bot) throw new Error(\"Bot not initialized.\");\n const chat = await this.getChatInfo(runtime);\n const mockContext: Partial<Context> = {\n chat,\n from: { id: 123, username: \"TestUser\" } as User,\n telegram: this.bot.telegram,\n };\n const messageContent = {\n text: \"Here is an image attachment:\",\n attachments: [\n {\n id: \"123\",\n title: \"Sample Image\",\n source: TEST_IMAGE_URL,\n text: \"Sample Image\",\n url: TEST_IMAGE_URL,\n contentType: \"image/png\",\n description: \"Sample Image\",\n },\n ],\n };\n await this.messageManager.sendMessageInChunks(\n mockContext as Context,\n messageContent as TelegramContent\n );\n logger.success(\"Message with image attachment sent successfully.\");\n } catch (error) {\n throw new Error(`Error sending Telegram message with attachment: ${error}`);\n }\n }\n async testHandlingMessage(runtime: IAgentRuntime) {\n try {\n if (!this.bot) throw new Error(\"Bot not initialized.\");\n if (!this.messageManager) throw new Error(\"MessageManager not initialized.\");\n const chat = await this.getChatInfo(runtime);\n const mockContext = {\n chat,\n from: {\n id: 123,\n username: \"TestUser\",\n is_bot: false,\n first_name: \"Test\",\n last_name: \"User\",\n } as User,\n message: {\n message_id: 1,\n text: `@${this.bot.botInfo?.username}! Hello!`,\n date: Math.floor(Date.now() / 1000),\n chat,\n } as Message.TextMessage,\n telegram: this.bot.telegram,\n } as Partial<Context> as Context;\n try {\n await this.messageManager.handleMessage(mockContext);\n } catch (error) {\n throw new Error(`Error handling Telegram message: ${error}`);\n }\n } catch (error) {\n throw new Error(`Error handling Telegram message: ${error}`);\n }\n }\n async testProcessingImages(runtime: IAgentRuntime) {\n try {\n if (!this.bot) throw new Error(\"Bot not initialized.\");\n if (!this.messageManager) throw new Error(\"MessageManager not initialized.\");\n const chatId = this.validateChatId(runtime);\n const fileId = await this.getFileId(chatId, TEST_IMAGE_URL);\n const mockMessage = {\n message_id: 12345,\n chat: { id: chatId, type: \"private\" } as Chat,\n date: Math.floor(Date.now() / 1000),\n photo: [\n {\n file_id: fileId,\n file_unique_id: `unique_${fileId}`,\n width: 100,\n height: 100,\n },\n ],\n text: `@${this.bot.botInfo?.username}!`,\n };\n const result = await this.messageManager.processImage(mockMessage as Message.PhotoMessage);\n if (!result || !result.description) {\n throw new Error(\"Error processing Telegram image or description not found\");\n }\n const { description } = result;\n logger.log(`Processing Telegram image successfully: ${description}`);\n } catch (error) {\n throw new Error(`Error processing Telegram image: ${error}`);\n }\n }\n async getFileId(chatId: string | number, imageUrl: string) {\n try {\n if (!this.bot) {\n throw new Error(\"Bot is not initialized.\");\n }\n const message = await this.bot.telegram.sendPhoto(chatId, imageUrl);\n if (!message.photo || message.photo.length === 0) {\n throw new Error(\"No photo received in the message response.\");\n }\n return message.photo[message.photo.length - 1].file_id;\n } catch (error) {\n logger.error({ error }, `Error sending image: ${error}`);\n throw error;\n }\n }\n}\n",
|
|
82
|
+
"import type { Plugin, TestSuite } from \"@elizaos/core\";\nimport { SEND_MESSAGE_ACTION, sendMessageAction } from \"./actions\";\nimport { TELEGRAM_SERVICE_NAME } from \"./constants\";\nimport { MessageManager } from \"./messageManager\";\nimport { CHAT_STATE_PROVIDER, chatStateProvider } from \"./providers\";\nimport { TelegramService } from \"./service\";\nimport { TelegramTestSuite } from \"./tests\";\n\nconst telegramPlugin: Plugin = {\n name: TELEGRAM_SERVICE_NAME,\n description: \"Telegram client plugin\",\n services: [TelegramService],\n actions: [sendMessageAction],\n providers: [chatStateProvider],\n tests: [new TelegramTestSuite() as unknown as TestSuite],\n};\n\nexport {\n TelegramService,\n MessageManager,\n sendMessageAction,\n SEND_MESSAGE_ACTION,\n chatStateProvider,\n CHAT_STATE_PROVIDER,\n};\nexport default telegramPlugin;\n"
|
|
83
|
+
],
|
|
84
|
+
"mappings": "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",
|
|
85
|
+
"debugId": "7D6DD157C30C505564756E2164756E21",
|
|
86
|
+
"names": []
|
|
87
|
+
}
|