@elizaos/plugin-telegram 2.0.0-alpha.4 → 2.0.0-alpha.6
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/package.json +7 -7
- package/dist/index.js +0 -15115
- package/dist/index.js.map +0 -95
package/dist/index.js.map
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js", "../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js", "../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js", "../../../../node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js", "../../../../node_modules/.bun/supports-color@8.1.1/node_modules/supports-color/index.js", "../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js", "../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/helpers/util.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/reactions.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/context.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/filters.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/helpers/args.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/composer.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/helpers/compact.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/network/webhook.js", "../../../../node_modules/.bun/event-target-shim@5.0.1/node_modules/event-target-shim/dist/event-target-shim.js", "../../../../node_modules/.bun/abort-controller@3.0.0/node_modules/abort-controller/dist/abort-controller.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/network/error.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/network/polling.js", "../../../../node_modules/.bun/p-timeout@4.1.0/node_modules/p-timeout/index.js", "../../../../node_modules/.bun/webidl-conversions@3.0.1/node_modules/webidl-conversions/lib/index.js", "../../../../node_modules/.bun/whatwg-url@5.0.0/node_modules/whatwg-url/lib/utils.js", "../../../../node_modules/.bun/tr46@0.0.3/node_modules/tr46/index.js", "../../../../node_modules/.bun/whatwg-url@5.0.0/node_modules/whatwg-url/lib/url-state-machine.js", "../../../../node_modules/.bun/whatwg-url@5.0.0/node_modules/whatwg-url/lib/URL-impl.js", "../../../../node_modules/.bun/whatwg-url@5.0.0/node_modules/whatwg-url/lib/URL.js", "../../../../node_modules/.bun/whatwg-url@5.0.0/node_modules/whatwg-url/lib/public-api.js", "../../../../node_modules/.bun/safer-buffer@2.1.2/node_modules/safer-buffer/safer.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/lib/bom-handling.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/internal.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf32.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf16.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf7.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/index.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/lib/streams.js", "../../../../node_modules/.bun/iconv-lite@0.6.3/node_modules/iconv-lite/lib/index.js", "../../../../node_modules/.bun/encoding@0.1.13/node_modules/encoding/lib/encoding.js", "../../../../node_modules/.bun/node-fetch@2.7.0+d56b95ac411b1cdd/node_modules/node-fetch/lib/index.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/helpers/check.js", "../../../../node_modules/.bun/sandwich-stream@2.0.2/node_modules/sandwich-stream/dist/sandwich-stream.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/network/multipart-stream.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/network/client.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/helpers/formatting.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/format.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/telegram.js", "../../../../node_modules/.bun/buffer-fill@1.0.0/node_modules/buffer-fill/index.js", "../../../../node_modules/.bun/buffer-alloc-unsafe@1.1.0/node_modules/buffer-alloc-unsafe/index.js", "../../../../node_modules/.bun/buffer-alloc@1.2.0/node_modules/buffer-alloc/index.js", "../../../../node_modules/.bun/safe-compare@1.1.4/node_modules/safe-compare/index.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/telegraf.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/router.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/button.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/markup.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/telegram-types.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/input.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/core/helpers/deunionize.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/session.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes/context.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes/stage.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes/base.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes/wizard/context.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes/wizard/index.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes/index.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/scenes.js", "../../../../node_modules/.bun/telegraf@4.16.3+d56b95ac411b1cdd/node_modules/telegraf/lib/index.js", "../src/actions/deleteMessage.ts", "../src/constants.ts", "../src/actions/editMessage.ts", "../src/actions/sendMessage.ts", "../src/actions/sendReaction.ts", "../src/types.ts", "../src/actions/sendSticker.ts", "../src/environment.ts", "../src/messageManager.ts", "../src/utils.ts", "../src/providers/chatState.ts", "../src/service.ts", "../src/accounts.ts", "../src/tests.ts", "../src/formatting.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
|
-
"import type {\n Action,\n ActionExample,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { composePromptFromState, ModelType, parseJSONObjectFromText } from \"@elizaos/core\";\nimport { TELEGRAM_SERVICE_NAME } from \"../constants\";\nimport type { TelegramService } from \"../service\";\n\nexport const DELETE_MESSAGE_ACTION = \"TELEGRAM_DELETE_MESSAGE\";\n\nconst DELETE_EXTRACTION_TEMPLATE = `\nYou are extracting delete parameters from a conversation.\n\nThe user wants to delete a Telegram message. Extract the following:\n1. messageId: The message ID to delete (required)\n\n{{recentMessages}}\n\nBased on the conversation, extract the message ID to delete.\n\nRespond with a JSON object:\n{\n \"messageId\": number\n}\n`;\n\ninterface DeleteParams {\n messageId: number;\n}\n\nexport const deleteMessageAction: Action = {\n name: DELETE_MESSAGE_ACTION,\n similes: [\"TELEGRAM_DELETE\", \"DELETE_TELEGRAM_MESSAGE\", \"REMOVE_MESSAGE\", \"UNSEND_MESSAGE\"],\n description: \"Delete a Telegram message\",\n\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n const source = message.content?.source;\n if (source !== \"telegram\") return false;\n\n // Check if telegram service is available and initialized\n const telegramService = runtime.getService(TELEGRAM_SERVICE_NAME) as\n | TelegramService\n | undefined;\n return telegramService?.isInitialized() ?? false;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\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 chatId = message.content?.chatId as number | undefined;\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 const currentState = state ?? (await runtime.composeState(message));\n\n // Extract delete parameters using LLM\n const prompt = composePromptFromState({\n state: currentState,\n template: DELETE_EXTRACTION_TEMPLATE,\n });\n\n let params: DeleteParams;\n try {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsed = parseJSONObjectFromText(response) as unknown as DeleteParams | null;\n if (!parsed || !parsed.messageId) {\n // Try to use the current message ID\n const currentMessageId = message.content?.messageId as number | undefined;\n if (currentMessageId) {\n params = { messageId: currentMessageId };\n } else {\n if (callback) {\n await callback({\n text: \"Could not determine which message to delete\",\n });\n }\n return { success: false, error: \"Missing message ID\" };\n }\n } else {\n params = parsed;\n }\n } catch {\n // Try to use the current message ID on parse error\n const currentMessageId = message.content?.messageId as number | undefined;\n if (currentMessageId) {\n params = { messageId: currentMessageId };\n } else {\n if (callback) {\n await callback({\n text: \"Failed to determine which message to delete\",\n });\n }\n return { success: false, error: \"Failed to parse delete parameters\" };\n }\n }\n\n // Delete the message using the service's public method\n const result = await telegramService.deleteMessage({\n chatId,\n messageId: params.messageId,\n });\n\n if (result.success) {\n if (callback) {\n await callback({\n text: `Message deleted successfully`,\n action: DELETE_MESSAGE_ACTION,\n });\n }\n return {\n success: true,\n data: {\n action: DELETE_MESSAGE_ACTION,\n chatId,\n messageId: params.messageId,\n },\n };\n } else {\n if (callback) {\n await callback({\n text: `Failed to delete message: ${result.error}`,\n });\n }\n return { success: false, error: result.error };\n }\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Delete message 123\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll delete that message now.\",\n actions: [DELETE_MESSAGE_ACTION],\n },\n },\n ],\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Remove my last message\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Deleting the message.\",\n actions: [DELETE_MESSAGE_ACTION],\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
76
|
-
"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",
|
|
77
|
-
"import type {\n Action,\n ActionExample,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { composePromptFromState, ModelType, parseJSONObjectFromText } from \"@elizaos/core\";\nimport { TELEGRAM_SERVICE_NAME } from \"../constants\";\nimport type { TelegramService } from \"../service\";\n\nexport const EDIT_MESSAGE_ACTION = \"TELEGRAM_EDIT_MESSAGE\";\n\nconst EDIT_EXTRACTION_TEMPLATE = `\nYou are extracting edit parameters from a conversation.\n\nThe user wants to edit a Telegram message. Extract the following:\n1. messageId: The message ID to edit (required)\n2. text: The new text content for the message (required)\n\n{{recentMessages}}\n\nBased on the conversation, extract the edit parameters.\n\nRespond with a JSON object:\n{\n \"messageId\": number,\n \"text\": \"new message text\"\n}\n`;\n\ninterface EditParams {\n messageId: number;\n text: string;\n}\n\nexport const editMessageAction: Action = {\n name: EDIT_MESSAGE_ACTION,\n similes: [\"TELEGRAM_EDIT\", \"EDIT_TELEGRAM_MESSAGE\", \"UPDATE_MESSAGE\", \"MODIFY_MESSAGE\"],\n description: \"Edit an existing Telegram message\",\n\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n const source = message.content?.source;\n if (source !== \"telegram\") return false;\n\n // Check if telegram service is available and initialized\n const telegramService = runtime.getService(TELEGRAM_SERVICE_NAME) as\n | TelegramService\n | undefined;\n return telegramService?.isInitialized() ?? false;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\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 chatId = message.content?.chatId as number | undefined;\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 const currentState = state ?? (await runtime.composeState(message));\n\n // Extract edit parameters using LLM\n const prompt = composePromptFromState({\n state: currentState,\n template: EDIT_EXTRACTION_TEMPLATE,\n });\n\n let params: EditParams;\n try {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsed = parseJSONObjectFromText(response) as unknown as EditParams | null;\n if (!parsed || !parsed.messageId || !parsed.text) {\n if (callback) {\n await callback({\n text: \"Could not determine which message to edit or what to change it to\",\n });\n }\n return { success: false, error: \"Missing edit parameters\" };\n }\n params = parsed;\n } catch (_error) {\n if (callback) {\n await callback({\n text: \"Failed to parse edit parameters\",\n });\n }\n return { success: false, error: \"Failed to parse edit parameters\" };\n }\n\n // Edit the message using the service's public method\n const result = await telegramService.editMessage({\n chatId,\n messageId: params.messageId,\n text: params.text,\n });\n\n if (result.success) {\n if (callback) {\n await callback({\n text: `Message edited successfully`,\n action: EDIT_MESSAGE_ACTION,\n });\n }\n return {\n success: true,\n data: {\n action: EDIT_MESSAGE_ACTION,\n chatId,\n messageId: params.messageId,\n newText: params.text,\n },\n };\n } else {\n if (callback) {\n await callback({\n text: `Failed to edit message: ${result.error}`,\n });\n }\n return { success: false, error: result.error };\n }\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Edit message 123 to say 'Hello updated!'\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll edit that message now.\",\n actions: [EDIT_MESSAGE_ACTION],\n },\n },\n ],\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Change my last message to 'Fixed typo'\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Updating the message content.\",\n actions: [EDIT_MESSAGE_ACTION],\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
78
|
-
"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",
|
|
79
|
-
"import type {\n Action,\n ActionExample,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { composePromptFromState, ModelType, parseJSONObjectFromText } from \"@elizaos/core\";\nimport { TELEGRAM_SERVICE_NAME } from \"../constants\";\nimport type { TelegramService } from \"../service\";\nimport { TELEGRAM_REACTIONS } from \"../types\";\n\nexport const SEND_REACTION_ACTION = \"SEND_TELEGRAM_REACTION\";\n\nconst REACTION_EXTRACTION_TEMPLATE = `\nYou are extracting reaction parameters from a conversation.\n\nThe user wants to react to a Telegram message. Extract the following:\n1. reaction: The emoji to use as a reaction (must be a valid Telegram reaction emoji)\n2. messageId: The message ID to react to (if specified, otherwise use the current message)\n3. isBig: Whether to use a big/animated reaction (default: false)\n\nValid Telegram reaction emojis include:\n👍 👎 ❤ 🔥 🎉 😢 🤔 🤯 😱 🤬 💀 💩 🤡 🤨 👀 🐳 ❤️🔥 🌚 🌭 💯 😂 ⚡ 🍌 🏆 💔 😐 🍓 🍾 💋 🖕 😈 😴 😭 🤓 👻 👨💻 🦄\n\n{{recentMessages}}\n\nBased on the conversation, extract the reaction parameters.\nIf the user mentions \"thumbs up\", \"like\", or similar, use 👍.\nIf the user mentions \"heart\", \"love\", use ❤.\nIf the user mentions \"fire\", \"lit\", use 🔥.\nIf the user doesn't specify a message, react to their current message.\n\nRespond with a JSON object:\n{\n \"reaction\": \"emoji here\",\n \"messageId\": number or null,\n \"isBig\": boolean\n}\n`;\n\ninterface ReactionParams {\n reaction: string;\n messageId?: number;\n isBig?: boolean;\n}\n\nexport const sendReactionAction: Action = {\n name: SEND_REACTION_ACTION,\n similes: [\n \"TELEGRAM_REACT\",\n \"TELEGRAM_REACTION\",\n \"REACT_TO_MESSAGE\",\n \"ADD_REACTION\",\n \"SEND_EMOJI\",\n \"TELEGRAM_EMOJI\",\n ],\n description: \"Send a reaction emoji to a Telegram message\",\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 | undefined,\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 chatId = message.content?.chatId as number | undefined;\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 const currentState = state ?? (await runtime.composeState(message));\n\n // Extract reaction parameters using LLM\n const prompt = composePromptFromState({\n state: currentState,\n template: REACTION_EXTRACTION_TEMPLATE,\n });\n\n let params: ReactionParams;\n try {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsed = parseJSONObjectFromText(response) as unknown as ReactionParams | null;\n if (!parsed || !parsed.reaction) {\n // Default to thumbs up if we can't parse\n params = {\n reaction: TELEGRAM_REACTIONS.THUMBS_UP,\n isBig: false,\n };\n } else {\n params = parsed;\n }\n } catch {\n // Default to thumbs up on error\n params = {\n reaction: TELEGRAM_REACTIONS.THUMBS_UP,\n isBig: false,\n };\n }\n\n // Use current message ID if not specified\n const targetMessageId = params.messageId ?? (message.content?.messageId as number | undefined);\n if (!targetMessageId) {\n if (callback) {\n await callback({\n text: \"No message ID available to react to\",\n });\n }\n return { success: false, error: \"Missing message ID\" };\n }\n\n // Send the reaction\n const result = await telegramService.sendReaction({\n chatId,\n messageId: targetMessageId,\n reaction: params.reaction,\n isBig: params.isBig,\n });\n\n if (result.success) {\n if (callback) {\n await callback({\n text: `Reacted with ${params.reaction}`,\n action: SEND_REACTION_ACTION,\n });\n }\n return {\n success: true,\n data: {\n action: SEND_REACTION_ACTION,\n chatId,\n messageId: targetMessageId,\n reaction: params.reaction,\n },\n };\n } else {\n if (callback) {\n await callback({\n text: `Failed to send reaction: ${result.error}`,\n });\n }\n return { success: false, error: result.error };\n }\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"React to my message with a thumbs up\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll add a thumbs up reaction to your message.\",\n actions: [SEND_REACTION_ACTION],\n },\n },\n ],\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Give that a heart reaction\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Adding a heart reaction now.\",\n actions: [SEND_REACTION_ACTION],\n },\n },\n ],\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"🔥 that message\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll react with the fire emoji.\",\n actions: [SEND_REACTION_ACTION],\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
80
|
-
"import type { Content, EntityPayload, MessagePayload, WorldPayload } from \"@elizaos/core\";\nimport type { Chat, Message, ReactionType, User } from \"@telegraf/types\";\nimport type { Context } from \"telegraf\";\n\nexport interface TelegramContent extends Content {\n buttons?: Button[];\n}\n\nexport type Button = {\n kind: \"login\" | \"url\";\n text: string;\n url: string;\n};\n\nexport enum TelegramEventTypes {\n WORLD_JOINED = \"TELEGRAM_WORLD_JOINED\",\n WORLD_CONNECTED = \"TELEGRAM_WORLD_CONNECTED\",\n WORLD_LEFT = \"TELEGRAM_WORLD_LEFT\",\n ENTITY_JOINED = \"TELEGRAM_ENTITY_JOINED\",\n ENTITY_LEFT = \"TELEGRAM_ENTITY_LEFT\",\n ENTITY_UPDATED = \"TELEGRAM_ENTITY_UPDATED\",\n MESSAGE_RECEIVED = \"TELEGRAM_MESSAGE_RECEIVED\",\n MESSAGE_SENT = \"TELEGRAM_MESSAGE_SENT\",\n REACTION_RECEIVED = \"TELEGRAM_REACTION_RECEIVED\",\n REACTION_SENT = \"TELEGRAM_REACTION_SENT\",\n INTERACTION_RECEIVED = \"TELEGRAM_INTERACTION_RECEIVED\",\n SLASH_START = \"TELEGRAM_SLASH_START\",\n BOT_STARTED = \"TELEGRAM_BOT_STARTED\",\n BOT_STOPPED = \"TELEGRAM_BOT_STOPPED\",\n WEBHOOK_REGISTERED = \"TELEGRAM_WEBHOOK_REGISTERED\",\n}\n\nexport interface TelegramEventPayloadMap {\n [TelegramEventTypes.MESSAGE_RECEIVED]: TelegramMessageReceivedPayload;\n [TelegramEventTypes.MESSAGE_SENT]: TelegramMessageSentPayload;\n [TelegramEventTypes.REACTION_RECEIVED]: TelegramReactionReceivedPayload;\n [TelegramEventTypes.REACTION_SENT]: TelegramReactionSentPayload;\n [TelegramEventTypes.WORLD_JOINED]: TelegramWorldPayload;\n [TelegramEventTypes.WORLD_CONNECTED]: TelegramWorldPayload;\n [TelegramEventTypes.WORLD_LEFT]: TelegramWorldPayload;\n [TelegramEventTypes.SLASH_START]: { ctx: Context };\n [TelegramEventTypes.ENTITY_JOINED]: TelegramEntityPayload;\n [TelegramEventTypes.ENTITY_LEFT]: TelegramEntityPayload;\n [TelegramEventTypes.ENTITY_UPDATED]: TelegramEntityPayload;\n [TelegramEventTypes.INTERACTION_RECEIVED]: TelegramReactionReceivedPayload;\n [TelegramEventTypes.BOT_STARTED]: TelegramBotStatusPayload;\n [TelegramEventTypes.BOT_STOPPED]: TelegramBotStatusPayload;\n [TelegramEventTypes.WEBHOOK_REGISTERED]: TelegramWebhookPayload;\n}\n\nexport interface TelegramMessageReceivedPayload extends MessagePayload {\n ctx: Context;\n originalMessage: Message;\n}\n\nexport interface TelegramMessageSentPayload extends MessagePayload {\n originalMessages: Message[];\n chatId: number | string;\n}\n\nexport interface TelegramReactionReceivedPayload extends TelegramMessageReceivedPayload {\n reactionString: string;\n originalReaction: ReactionType;\n}\n\nexport interface TelegramReactionSentPayload {\n chatId: number | string;\n messageId: number;\n reaction: string;\n success: boolean;\n}\n\nexport interface TelegramWorldPayload extends WorldPayload {\n chat: Chat;\n botUsername?: string;\n}\n\nexport interface TelegramEntityPayload extends EntityPayload {\n telegramUser: {\n id: number;\n username?: string;\n first_name?: string;\n };\n}\n\n/**\n * Bot status payload for start/stop events.\n */\nexport interface TelegramBotStatusPayload {\n botId?: number;\n botUsername?: string;\n botName?: string;\n updateMode: \"polling\" | \"webhook\";\n timestamp: number;\n}\n\n/**\n * Webhook registration payload.\n */\nexport interface TelegramWebhookPayload {\n url: string;\n path: string;\n port?: number;\n hasSecret: boolean;\n timestamp: number;\n}\n\n/**\n * Bot probe result for health checks.\n */\nexport interface TelegramBotProbe {\n ok: boolean;\n bot?: {\n id: number;\n username?: string;\n firstName: string;\n canJoinGroups: boolean;\n canReadAllGroupMessages: boolean;\n supportsInlineQueries: boolean;\n };\n error?: string;\n latencyMs: number;\n}\n\n/**\n * Reaction emoji types supported by Telegram.\n * Common reactions that can be sent to messages.\n */\nexport const TELEGRAM_REACTIONS = {\n THUMBS_UP: \"👍\",\n THUMBS_DOWN: \"👎\",\n HEART: \"❤\",\n FIRE: \"🔥\",\n CELEBRATION: \"🎉\",\n CRYING: \"😢\",\n THINKING: \"🤔\",\n EXPLODING_HEAD: \"🤯\",\n SCREAMING: \"😱\",\n ANGRY: \"🤬\",\n SKULL: \"💀\",\n POOP: \"💩\",\n CLOWN: \"🤡\",\n QUESTION: \"🤨\",\n EYES: \"👀\",\n WHALE: \"🐳\",\n HEART_ON_FIRE: \"❤️🔥\",\n NEW_MOON: \"🌚\",\n HOT_DOG: \"🌭\",\n HUNDRED: \"💯\",\n TEARS_OF_JOY: \"😂\",\n LIGHTNING: \"⚡\",\n BANANA: \"🍌\",\n TROPHY: \"🏆\",\n BROKEN_HEART: \"💔\",\n FACE_WITH_RAISED_EYEBROW: \"🤨\",\n NEUTRAL: \"😐\",\n STRAWBERRY: \"🍓\",\n CHAMPAGNE: \"🍾\",\n KISS: \"💋\",\n MIDDLE_FINGER: \"🖕\",\n DEVIL: \"😈\",\n SLEEPING: \"😴\",\n LOUDLY_CRYING: \"😭\",\n NERD: \"🤓\",\n GHOST: \"👻\",\n TECHNOLOGIST: \"👨💻\",\n UNICORN: \"🦄\",\n} as const;\n\nexport type TelegramReactionEmoji = (typeof TELEGRAM_REACTIONS)[keyof typeof TELEGRAM_REACTIONS];\n\n/**\n * Send reaction parameters.\n */\nexport interface SendReactionParams {\n chatId: number | string;\n messageId: number;\n reaction: string | TelegramReactionEmoji;\n isBig?: boolean;\n}\n\n/**\n * Send reaction result.\n */\nexport interface SendReactionResult {\n success: boolean;\n chatId: number | string;\n messageId: number;\n reaction: string;\n error?: string;\n}\n\n/**\n * Extended bot info from getMe.\n */\nexport interface TelegramBotInfo extends User {\n can_join_groups: boolean;\n can_read_all_group_messages: boolean;\n supports_inline_queries: boolean;\n}\n\n/**\n * Edit message parameters.\n */\nexport interface EditMessageParams {\n chatId: number | string;\n messageId: number;\n text: string;\n parseMode?: \"Markdown\" | \"MarkdownV2\" | \"HTML\";\n}\n\n/**\n * Edit message result.\n */\nexport interface EditMessageResult {\n success: boolean;\n chatId: number | string;\n messageId: number;\n error?: string;\n}\n\n/**\n * Delete message parameters.\n */\nexport interface DeleteMessageParams {\n chatId: number | string;\n messageId: number;\n}\n\n/**\n * Delete message result.\n */\nexport interface DeleteMessageResult {\n success: boolean;\n chatId: number | string;\n messageId: number;\n error?: string;\n}\n\n/**\n * Send sticker parameters.\n */\nexport interface SendStickerParams {\n chatId: number | string;\n sticker: string; // file_id, URL, or file path\n replyToMessageId?: number;\n threadId?: number;\n disableNotification?: boolean;\n}\n\n/**\n * Send sticker result.\n */\nexport interface SendStickerResult {\n success: boolean;\n chatId: number | string;\n messageId?: number;\n error?: string;\n}\n",
|
|
81
|
-
"import type {\n Action,\n ActionExample,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { composePromptFromState, ModelType, parseJSONObjectFromText } from \"@elizaos/core\";\nimport { TELEGRAM_SERVICE_NAME } from \"../constants\";\nimport type { TelegramService } from \"../service\";\n\nexport const SEND_STICKER_ACTION = \"TELEGRAM_SEND_STICKER\";\n\nconst STICKER_EXTRACTION_TEMPLATE = `\nYou are extracting sticker parameters from a conversation.\n\nThe user wants to send a sticker on Telegram. Extract the following:\n1. fileId: The sticker file ID (if provided)\n2. emoji: The emoji that best represents the intended sticker (if no fileId)\n\nCommon emoji for stickers: 👍 👎 ❤ 🔥 🎉 😢 🤔 😂 😱 🥺 🤗 🙏 👏 💪 🎊\n\n{{recentMessages}}\n\nBased on the conversation, extract the sticker parameters.\n\nRespond with a JSON object:\n{\n \"fileId\": \"sticker file ID or null\",\n \"emoji\": \"emoji representing the sticker\"\n}\n`;\n\ninterface StickerParams {\n fileId?: string;\n emoji?: string;\n}\n\nexport const sendStickerAction: Action = {\n name: SEND_STICKER_ACTION,\n similes: [\"TELEGRAM_STICKER\", \"SEND_TELEGRAM_STICKER\", \"POST_STICKER\"],\n description:\n \"Send a sticker to a Telegram chat. Requires a sticker file_id. To get a sticker's file_id, forward the sticker to @RawDataBot on Telegram.\",\n\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n const source = message.content?.source;\n if (source !== \"telegram\") return false;\n\n // Check if telegram service is available and initialized\n const telegramService = runtime.getService(TELEGRAM_SERVICE_NAME) as\n | TelegramService\n | undefined;\n return telegramService?.isInitialized() ?? false;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\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 chatId = message.content?.chatId as number | string | undefined;\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 const currentState = state ?? (await runtime.composeState(message));\n\n // Extract sticker parameters using LLM\n const prompt = composePromptFromState({\n state: currentState,\n template: STICKER_EXTRACTION_TEMPLATE,\n });\n\n let params: StickerParams;\n try {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n });\n\n const parsed = parseJSONObjectFromText(response) as unknown as StickerParams | null;\n if (!parsed) {\n if (callback) {\n await callback({\n text: \"Could not determine which sticker to send\",\n });\n }\n return { success: false, error: \"Missing sticker parameters\" };\n }\n params = parsed;\n } catch {\n if (callback) {\n await callback({\n text: \"Failed to parse sticker parameters\",\n });\n }\n return { success: false, error: \"Failed to parse sticker parameters\" };\n }\n\n if (!params.fileId) {\n if (callback) {\n await callback({\n text: \"No sticker file ID provided. To send a sticker, I need a file ID. You can get sticker file IDs by forwarding a sticker to @RawDataBot on Telegram.\",\n });\n }\n return { success: false, error: \"No sticker file ID provided\" };\n }\n\n // Send the sticker using the service's public method\n const replyToMessageId = message.content?.messageId as number | undefined;\n const threadId = message.content?.threadId as number | undefined;\n\n const result = await telegramService.sendSticker({\n chatId,\n sticker: params.fileId,\n replyToMessageId,\n threadId,\n });\n\n if (result.success) {\n if (callback) {\n await callback({\n text: `Sticker sent!`,\n action: SEND_STICKER_ACTION,\n });\n }\n return {\n success: true,\n data: {\n action: SEND_STICKER_ACTION,\n chatId,\n messageId: result.messageId,\n fileId: params.fileId,\n },\n };\n } else {\n if (callback) {\n await callback({\n text: `Failed to send sticker: ${result.error}`,\n });\n }\n return { success: false, error: result.error };\n }\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send sticker CAACAgIAAxkBAAIBXGVc... (with actual file_id)\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll send that sticker now.\",\n actions: [SEND_STICKER_ACTION],\n },\n },\n ],\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"How do I get a sticker file_id?\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"To get a sticker's file_id, forward the sticker to @RawDataBot on Telegram. It will reply with the sticker's file_id that you can use with me.\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
82
|
-
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport { z } from \"zod\";\n\n/**\n * Update mode for receiving Telegram updates.\n * - polling: Long-polling (default, suitable for development)\n * - webhook: Webhook-based (recommended for production)\n */\nexport type TelegramUpdateMode = \"polling\" | \"webhook\";\n\nexport const telegramEnvSchema = z.object({\n TELEGRAM_BOT_TOKEN: z.string().min(1, \"Telegram bot token is required\"),\n TELEGRAM_API_ROOT: z.string().optional(),\n TELEGRAM_UPDATE_MODE: z.enum([\"polling\", \"webhook\"]).optional().default(\"polling\"),\n TELEGRAM_WEBHOOK_URL: z.string().url().optional(),\n TELEGRAM_WEBHOOK_PATH: z.string().optional(),\n TELEGRAM_WEBHOOK_PORT: z.coerce.number().optional(),\n TELEGRAM_WEBHOOK_SECRET: z.string().optional(),\n TELEGRAM_ALLOWED_CHATS: z.string().optional(),\n TELEGRAM_PROXY_URL: z.string().url().optional(),\n TELEGRAM_DROP_PENDING_UPDATES: z.coerce.boolean().optional().default(true),\n TELEGRAM_SHOULD_IGNORE_BOT_MESSAGES: z.coerce.boolean().optional().default(true),\n TELEGRAM_SHOULD_RESPOND_ONLY_TO_MENTIONS: z.coerce.boolean().optional().default(false),\n});\n\nexport type TelegramConfig = z.infer<typeof telegramEnvSchema>;\n\n/**\n * Extended configuration with parsed values.\n */\nexport interface TelegramSettings {\n botToken: string;\n apiRoot: string;\n updateMode: TelegramUpdateMode;\n webhookUrl?: string;\n webhookPath?: string;\n webhookPort?: number;\n webhookSecret?: string;\n allowedChatIds: number[];\n proxyUrl?: string;\n dropPendingUpdates: boolean;\n shouldIgnoreBotMessages: boolean;\n shouldRespondOnlyToMentions: boolean;\n}\n\n/**\n * Parse allowed chats from JSON string or comma-separated list.\n */\nfunction parseAllowedChats(value: string | undefined): number[] {\n if (!value) return [];\n\n const trimmed = value.trim();\n if (!trimmed) return [];\n\n // Try parsing as JSON array first\n if (trimmed.startsWith(\"[\")) {\n const parsed: unknown = JSON.parse(trimmed);\n if (Array.isArray(parsed)) {\n return parsed\n .map((id) => {\n const num = typeof id === \"string\" ? parseInt(id, 10) : Number(id);\n return Number.isFinite(num) ? num : 0;\n })\n .filter((id) => id !== 0);\n }\n }\n\n // Otherwise parse as comma-separated\n return trimmed\n .split(\",\")\n .map((s) => parseInt(s.trim(), 10))\n .filter((id) => Number.isFinite(id));\n}\n\nexport async function validateTelegramConfig(\n runtime: IAgentRuntime\n): Promise<TelegramConfig | null> {\n try {\n const config = {\n TELEGRAM_BOT_TOKEN:\n runtime.getSetting(\"TELEGRAM_BOT_TOKEN\") || process.env.TELEGRAM_BOT_TOKEN,\n TELEGRAM_API_ROOT: runtime.getSetting(\"TELEGRAM_API_ROOT\") || process.env.TELEGRAM_API_ROOT,\n TELEGRAM_UPDATE_MODE:\n runtime.getSetting(\"TELEGRAM_UPDATE_MODE\") || process.env.TELEGRAM_UPDATE_MODE,\n TELEGRAM_WEBHOOK_URL:\n runtime.getSetting(\"TELEGRAM_WEBHOOK_URL\") || process.env.TELEGRAM_WEBHOOK_URL,\n TELEGRAM_WEBHOOK_PATH:\n runtime.getSetting(\"TELEGRAM_WEBHOOK_PATH\") || process.env.TELEGRAM_WEBHOOK_PATH,\n TELEGRAM_WEBHOOK_PORT:\n runtime.getSetting(\"TELEGRAM_WEBHOOK_PORT\") || process.env.TELEGRAM_WEBHOOK_PORT,\n TELEGRAM_WEBHOOK_SECRET:\n runtime.getSetting(\"TELEGRAM_WEBHOOK_SECRET\") || process.env.TELEGRAM_WEBHOOK_SECRET,\n TELEGRAM_ALLOWED_CHATS:\n runtime.getSetting(\"TELEGRAM_ALLOWED_CHATS\") || process.env.TELEGRAM_ALLOWED_CHATS,\n TELEGRAM_PROXY_URL:\n runtime.getSetting(\"TELEGRAM_PROXY_URL\") || process.env.TELEGRAM_PROXY_URL,\n TELEGRAM_DROP_PENDING_UPDATES:\n runtime.getSetting(\"TELEGRAM_DROP_PENDING_UPDATES\") ||\n process.env.TELEGRAM_DROP_PENDING_UPDATES,\n TELEGRAM_SHOULD_IGNORE_BOT_MESSAGES:\n runtime.getSetting(\"TELEGRAM_SHOULD_IGNORE_BOT_MESSAGES\") ||\n process.env.TELEGRAM_SHOULD_IGNORE_BOT_MESSAGES,\n TELEGRAM_SHOULD_RESPOND_ONLY_TO_MENTIONS:\n runtime.getSetting(\"TELEGRAM_SHOULD_RESPOND_ONLY_TO_MENTIONS\") ||\n process.env.TELEGRAM_SHOULD_RESPOND_ONLY_TO_MENTIONS,\n };\n\n return telegramEnvSchema.parse(config);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((err) => `${err.path.join(\".\")}: ${err.message}`)\n .join(\"\\n\");\n console.warn(`Telegram configuration validation failed:\\n${errorMessages}`);\n }\n return null;\n }\n}\n\n/**\n * Build TelegramSettings from validated config.\n */\nexport function buildTelegramSettings(config: TelegramConfig): TelegramSettings {\n return {\n botToken: config.TELEGRAM_BOT_TOKEN,\n apiRoot: config.TELEGRAM_API_ROOT || \"https://api.telegram.org\",\n updateMode: (config.TELEGRAM_UPDATE_MODE as TelegramUpdateMode) || \"polling\",\n webhookUrl: config.TELEGRAM_WEBHOOK_URL,\n webhookPath: config.TELEGRAM_WEBHOOK_PATH || \"/telegram/webhook\",\n webhookPort: config.TELEGRAM_WEBHOOK_PORT,\n webhookSecret: config.TELEGRAM_WEBHOOK_SECRET,\n allowedChatIds: parseAllowedChats(config.TELEGRAM_ALLOWED_CHATS),\n proxyUrl: config.TELEGRAM_PROXY_URL,\n dropPendingUpdates: config.TELEGRAM_DROP_PENDING_UPDATES ?? true,\n shouldIgnoreBotMessages: config.TELEGRAM_SHOULD_IGNORE_BOT_MESSAGES ?? true,\n shouldRespondOnlyToMentions: config.TELEGRAM_SHOULD_RESPOND_ONLY_TO_MENTIONS ?? false,\n };\n}\n",
|
|
83
|
-
"import fs from \"node:fs\";\nimport {\n ChannelType,\n type Content,\n createUniqueUuid,\n EventType,\n type HandlerCallback,\n type IAgentRuntime,\n logger,\n type Media,\n type Memory,\n MemoryType,\n type MessageMetadata,\n ModelType,\n ServiceType,\n type UUID,\n} from \"@elizaos/core\";\n\n/** Local interface for PDF service (not exported from @elizaos/core). */\ninterface IPdfService {\n extractText(buffer: Buffer): Promise<{ text: string }>;\n}\n\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 unknown as\n | IPdfService\n | 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",
|
|
84
|
-
"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",
|
|
85
|
-
"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",
|
|
86
|
-
"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\";\n\n/**\n * Check if a user is in the dynamic pairing allowlist.\n * Stub: returns false when core does not export this utility.\n */\nasync function isInAllowlist(\n _runtime: IAgentRuntime,\n _channel: string,\n _userId: string\n): Promise<boolean> {\n return false;\n}\n\n/**\n * Check whether an inbound DM sender is allowed via the pairing service.\n * Stub: returns not-allowed when core does not export this utility.\n */\nasync function checkPairingAllowed(\n _runtime: IAgentRuntime,\n _params: {\n channel: string;\n senderId: string;\n metadata?: Record<string, string>;\n }\n): Promise<{\n allowed: boolean;\n pairingCode?: string;\n newRequest?: boolean;\n replyMessage?: string;\n}> {\n return { allowed: false, newRequest: false };\n}\n\nimport { type Context, Telegraf } from \"telegraf\";\nimport type {\n Chat,\n ChatMemberAdministrator,\n ChatMemberOwner,\n ReactionTypeEmoji,\n User,\n} from \"telegraf/types\";\nimport { resolveTelegramAccount } from \"./accounts\";\nimport { TELEGRAM_SERVICE_NAME } from \"./constants\";\nimport {\n buildTelegramSettings,\n type TelegramSettings,\n validateTelegramConfig,\n} from \"./environment\";\nimport { MessageManager } from \"./messageManager\";\nimport {\n type SendReactionParams,\n type SendReactionResult,\n type TelegramBotInfo,\n type TelegramBotProbe,\n TelegramEventTypes,\n type TelegramWorldPayload,\n} 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 private settings: TelegramSettings | null = null;\n private botInfo: TelegramBotInfo | null = null;\n private webhookServer: ReturnType<typeof import(\"http\").createServer> | null = null;\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 /**\n * Get the current bot info.\n */\n getBotInfo(): TelegramBotInfo | null {\n return this.botInfo;\n }\n\n /**\n * Get the current settings.\n */\n getSettings(): TelegramSettings | null {\n return this.settings;\n }\n\n /**\n * Probe the Telegram bot connection for health checks.\n */\n async probeTelegram(timeoutMs: number = 5000): Promise<TelegramBotProbe> {\n if (!this.bot) {\n return {\n ok: false,\n error: \"Bot not initialized\",\n latencyMs: 0,\n };\n }\n\n const startTime = Date.now();\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const me = await this.bot.telegram.getMe();\n const latencyMs = Date.now() - startTime;\n\n return {\n ok: true,\n bot: {\n id: me.id,\n username: me.username,\n firstName: me.first_name,\n canJoinGroups: me.can_join_groups ?? false,\n canReadAllGroupMessages: me.can_read_all_group_messages ?? false,\n supportsInlineQueries: me.supports_inline_queries ?? false,\n },\n latencyMs,\n };\n } catch (error) {\n const latencyMs = Date.now() - startTime;\n return {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n latencyMs,\n };\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Send a reaction to a message.\n */\n async sendReaction(params: SendReactionParams): Promise<SendReactionResult> {\n if (!this.bot) {\n return {\n success: false,\n chatId: params.chatId,\n messageId: params.messageId,\n reaction: params.reaction,\n error: \"Bot not initialized\",\n };\n }\n\n try {\n const chatId =\n typeof params.chatId === \"string\" ? parseInt(params.chatId, 10) : params.chatId;\n\n const reactionType: ReactionTypeEmoji = {\n type: \"emoji\",\n emoji: params.reaction as ReactionTypeEmoji[\"emoji\"],\n };\n\n await this.bot.telegram.setMessageReaction(\n chatId,\n params.messageId,\n [reactionType],\n params.isBig ?? false\n );\n\n this.runtime.emitEvent(TelegramEventTypes.REACTION_SENT, {\n runtime: this.runtime,\n chatId: params.chatId,\n messageId: params.messageId,\n reaction: params.reaction,\n success: true,\n } as unknown as EventPayload);\n\n return {\n success: true,\n chatId: params.chatId,\n messageId: params.messageId,\n reaction: params.reaction,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error({ error }, `Failed to send reaction: ${errorMessage}`);\n\n return {\n success: false,\n chatId: params.chatId,\n messageId: params.messageId,\n reaction: params.reaction,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Remove a reaction from a message.\n */\n async removeReaction(chatId: number | string, messageId: number): Promise<SendReactionResult> {\n if (!this.bot) {\n return {\n success: false,\n chatId,\n messageId,\n reaction: \"\",\n error: \"Bot not initialized\",\n };\n }\n\n try {\n const numericChatId = typeof chatId === \"string\" ? parseInt(chatId, 10) : chatId;\n\n await this.bot.telegram.setMessageReaction(numericChatId, messageId, []);\n\n return {\n success: true,\n chatId,\n messageId,\n reaction: \"\",\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error({ error }, `Failed to remove reaction: ${errorMessage}`);\n\n return {\n success: false,\n chatId,\n messageId,\n reaction: \"\",\n error: errorMessage,\n };\n }\n }\n\n /**\n * Edit a message.\n */\n async editMessage(params: {\n chatId: number | string;\n messageId: number;\n text: string;\n parseMode?: \"Markdown\" | \"MarkdownV2\" | \"HTML\";\n }): Promise<{ success: boolean; chatId: number | string; messageId: number; error?: string }> {\n if (!this.bot) {\n return {\n success: false,\n chatId: params.chatId,\n messageId: params.messageId,\n error: \"Bot not initialized\",\n };\n }\n\n try {\n const chatId =\n typeof params.chatId === \"string\" ? parseInt(params.chatId, 10) : params.chatId;\n\n await this.bot.telegram.editMessageText(\n chatId,\n params.messageId,\n undefined, // inline_message_id\n params.text,\n params.parseMode ? { parse_mode: params.parseMode } : undefined\n );\n\n return {\n success: true,\n chatId: params.chatId,\n messageId: params.messageId,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error({ error }, `Failed to edit message: ${errorMessage}`);\n\n return {\n success: false,\n chatId: params.chatId,\n messageId: params.messageId,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Delete a message.\n */\n async deleteMessage(params: {\n chatId: number | string;\n messageId: number;\n }): Promise<{ success: boolean; chatId: number | string; messageId: number; error?: string }> {\n if (!this.bot) {\n return {\n success: false,\n chatId: params.chatId,\n messageId: params.messageId,\n error: \"Bot not initialized\",\n };\n }\n\n try {\n const chatId =\n typeof params.chatId === \"string\" ? parseInt(params.chatId, 10) : params.chatId;\n\n await this.bot.telegram.deleteMessage(chatId, params.messageId);\n\n return {\n success: true,\n chatId: params.chatId,\n messageId: params.messageId,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error({ error }, `Failed to delete message: ${errorMessage}`);\n\n return {\n success: false,\n chatId: params.chatId,\n messageId: params.messageId,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Send a sticker.\n */\n async sendSticker(params: {\n chatId: number | string;\n sticker: string;\n replyToMessageId?: number;\n threadId?: number;\n disableNotification?: boolean;\n }): Promise<{ success: boolean; chatId: number | string; messageId?: number; error?: string }> {\n if (!this.bot) {\n return {\n success: false,\n chatId: params.chatId,\n error: \"Bot not initialized\",\n };\n }\n\n try {\n const chatId =\n typeof params.chatId === \"string\" ? parseInt(params.chatId, 10) : params.chatId;\n\n const result = await this.bot.telegram.sendSticker(chatId, params.sticker, {\n reply_parameters: params.replyToMessageId\n ? { message_id: params.replyToMessageId }\n : undefined,\n message_thread_id: params.threadId,\n disable_notification: params.disableNotification,\n });\n\n return {\n success: true,\n chatId: params.chatId,\n messageId: result.message_id,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error({ error }, `Failed to send sticker: ${errorMessage}`);\n\n return {\n success: false,\n chatId: params.chatId,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Check if the bot is initialized and running.\n */\n isInitialized(): boolean {\n return this.bot !== null;\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 // Load and validate configuration\n const config = await validateTelegramConfig(runtime);\n if (config) {\n service.settings = buildTelegramSettings(config);\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 // Get bot info\n const botInfo = await service.bot?.telegram.getMe();\n if (botInfo) {\n service.botInfo = botInfo as TelegramBotInfo;\n logger.info(`Bot connected: @${botInfo.username} (ID: ${botInfo.id})`);\n }\n\n service.setupMiddlewares();\n service.setupMessageHandlers();\n\n // Initialize based on update mode\n const updateMode = service.settings?.updateMode || \"polling\";\n\n if (updateMode === \"webhook\" && service.settings?.webhookUrl) {\n await service.initializeWebhook();\n } else {\n await service.initializePolling();\n }\n\n // Emit bot started event\n service.runtime.emitEvent(TelegramEventTypes.BOT_STARTED, {\n runtime: service.runtime,\n botId: service.botInfo?.id,\n botUsername: service.botInfo?.username,\n botName: service.botInfo?.first_name,\n updateMode,\n timestamp: Date.now(),\n } as unknown as EventPayload);\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 // Emit bot stopped event\n this.runtime.emitEvent(TelegramEventTypes.BOT_STOPPED, {\n runtime: this.runtime,\n botId: this.botInfo?.id,\n botUsername: this.botInfo?.username,\n botName: this.botInfo?.first_name,\n updateMode: this.settings?.updateMode || \"polling\",\n timestamp: Date.now(),\n } as unknown as EventPayload);\n\n // Stop webhook server if running\n if (this.webhookServer) {\n await new Promise<void>((resolve) => {\n this.webhookServer?.close(() => resolve());\n });\n this.webhookServer = null;\n }\n\n // Stop the bot\n this.bot?.stop();\n }\n\n /**\n * Initialize bot with long-polling mode.\n */\n private async initializePolling(): 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 unknown as EventPayload\n );\n });\n\n const dropPendingUpdates = this.settings?.dropPendingUpdates ?? true;\n\n this.bot?.launch({\n dropPendingUpdates,\n allowedUpdates: [\"message\", \"message_reaction\", \"chat_member\", \"my_chat_member\"],\n });\n\n logger.info(`Telegram bot started in polling mode (dropPendingUpdates: ${dropPendingUpdates})`);\n\n process.once(\"SIGINT\", () => this.bot?.stop(\"SIGINT\"));\n process.once(\"SIGTERM\", () => this.bot?.stop(\"SIGTERM\"));\n }\n\n /**\n * Initialize bot with webhook mode.\n */\n private async initializeWebhook(): Promise<void> {\n if (!this.bot || !this.settings?.webhookUrl) {\n throw new Error(\"Bot or webhook URL not configured\");\n }\n\n const webhookUrl = this.settings.webhookUrl;\n const webhookPath = this.settings.webhookPath || \"/telegram/webhook\";\n const webhookPort = this.settings.webhookPort || 3000;\n const webhookSecret = this.settings.webhookSecret;\n\n // Register /start command handler\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 unknown as EventPayload\n );\n });\n\n // Set up webhook\n const fullWebhookUrl = `${webhookUrl}${webhookPath}`;\n\n await this.bot.telegram.setWebhook(fullWebhookUrl, {\n secret_token: webhookSecret,\n allowed_updates: [\"message\", \"message_reaction\", \"chat_member\", \"my_chat_member\"],\n drop_pending_updates: this.settings.dropPendingUpdates,\n });\n\n // Create webhook handler using Telegraf's built-in webhook callback\n const webhookCallback = this.bot.webhookCallback(webhookPath, {\n secretToken: webhookSecret,\n });\n\n // Create HTTP server for webhook\n const http = await import(\"node:http\");\n this.webhookServer = http.createServer(async (req, res) => {\n if (req.url === webhookPath && req.method === \"POST\") {\n await webhookCallback(req, res);\n } else if (req.url === \"/health\" || req.url === \"/\") {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ status: \"ok\", bot: this.botInfo?.username }));\n } else {\n res.writeHead(404);\n res.end(\"Not Found\");\n }\n });\n\n this.webhookServer.listen(webhookPort, () => {\n logger.info(`Telegram webhook server listening on port ${webhookPort}`);\n logger.info(`Webhook URL: ${fullWebhookUrl}`);\n });\n\n // Emit webhook registered event\n this.runtime.emitEvent(TelegramEventTypes.WEBHOOK_REGISTERED, {\n runtime: this.runtime,\n url: fullWebhookUrl,\n path: webhookPath,\n port: webhookPort,\n hasSecret: !!webhookSecret,\n timestamp: Date.now(),\n } as unknown as EventPayload);\n\n process.once(\"SIGINT\", () => this.stop());\n process.once(\"SIGTERM\", () => this.stop());\n }\n\n /**\n * Delete the current webhook and switch to polling mode.\n */\n async deleteWebhook(): Promise<boolean> {\n if (!this.bot) {\n return false;\n }\n\n try {\n await this.bot.telegram.deleteWebhook({ drop_pending_updates: true });\n logger.info(\"Webhook deleted successfully\");\n return true;\n } catch (error) {\n logger.error({ error }, \"Failed to delete webhook\");\n return false;\n }\n }\n\n /**\n * Get current webhook info.\n */\n async getWebhookInfo(): Promise<{\n url: string;\n hasCustomCertificate: boolean;\n pendingUpdateCount: number;\n lastErrorDate?: number;\n lastErrorMessage?: string;\n maxConnections?: number;\n allowedUpdates?: string[];\n } | null> {\n if (!this.bot) {\n return null;\n }\n\n try {\n const info = await this.bot.telegram.getWebhookInfo();\n return {\n url: info.url,\n hasCustomCertificate: info.has_custom_certificate,\n pendingUpdateCount: info.pending_update_count,\n lastErrorDate: info.last_error_date,\n lastErrorMessage: info.last_error_message,\n maxConnections: info.max_connections,\n allowedUpdates: info.allowed_updates,\n };\n } catch (error) {\n logger.error({ error }, \"Failed to get webhook info\");\n return null;\n }\n }\n\n private setupMiddlewares(): void {\n this.bot?.use(this.authorizationMiddleware.bind(this));\n this.bot?.use(this.dmAccessMiddleware.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 /**\n * Middleware to check DM access based on the configured dmPolicy.\n */\n private async dmAccessMiddleware(ctx: Context, next: () => Promise<void>): Promise<void> {\n // Only apply to private (DM) chats\n if (ctx.chat?.type !== \"private\") {\n return next();\n }\n\n const accessResult = await this.checkDmAccess(ctx);\n if (!accessResult.allowed) {\n // If a reply message was generated (new pairing request), send it\n if (accessResult.replyMessage && ctx.from) {\n try {\n await this.bot?.telegram.sendMessage(ctx.from.id, accessResult.replyMessage);\n } catch (err) {\n logger.warn(\n { error: err instanceof Error ? err.message : String(err), userId: ctx.from.id },\n \"Failed to send pairing reply\"\n );\n }\n }\n return; // Don't call next() - block the message\n }\n\n await next();\n }\n\n /**\n * Check DM access based on the configured dmPolicy.\n */\n private async checkDmAccess(ctx: Context): Promise<{\n allowed: boolean;\n replyMessage?: string;\n }> {\n if (!ctx.from) {\n return { allowed: false };\n }\n\n const account = resolveTelegramAccount(this.runtime);\n const dmConfig = account.config.dm;\n const policy = dmConfig?.policy ?? \"open\";\n const userId = ctx.from.id.toString();\n\n // Disabled policy - block all DMs\n if (policy === \"disabled\" || dmConfig?.enabled === false) {\n logger.debug({ userId }, \"DM blocked: policy is disabled\");\n return { allowed: false };\n }\n\n // Open policy - allow all DMs\n if (policy === \"open\") {\n return { allowed: true };\n }\n\n // Allowlist policy - check static allowFrom list and dynamic pairing allowlist\n if (policy === \"allowlist\") {\n // Check static allowlist first\n const allowFrom = dmConfig?.allowFrom ?? [];\n if (allowFrom.some((a) => String(a) === userId || String(a) === ctx.from?.username)) {\n return { allowed: true };\n }\n\n // Check dynamic pairing allowlist\n const inDynamicAllowlist = await isInAllowlist(this.runtime, \"telegram\", userId);\n if (inDynamicAllowlist) {\n return { allowed: true };\n }\n\n logger.debug({ userId }, \"DM blocked: user not in allowlist\");\n return { allowed: false };\n }\n\n // Pairing policy - use PairingService\n if (policy === \"pairing\") {\n // Check static allowlist first (if configured, allow bypass of pairing)\n const allowFrom = dmConfig?.allowFrom ?? [];\n if (allowFrom.some((a) => String(a) === userId || String(a) === ctx.from?.username)) {\n return { allowed: true };\n }\n\n // Use the PairingService for pairing workflow\n const result = await checkPairingAllowed(this.runtime, {\n channel: \"telegram\",\n senderId: userId,\n metadata: {\n username: ctx.from.username ?? \"\",\n firstName: ctx.from.first_name ?? \"\",\n lastName: ctx.from.last_name ?? \"\",\n },\n });\n\n if (result.allowed) {\n return { allowed: true };\n }\n\n // Not allowed - return pairing reply message only for new requests\n logger.debug(\n { userId, pairingCode: result.pairingCode, newRequest: result.newRequest },\n \"DM blocked: pairing required\"\n );\n\n return {\n allowed: false,\n // Only send reply for new pairing requests (avoid spamming on every message)\n replyMessage: result.newRequest ? result.replyMessage : undefined,\n };\n }\n\n // Default: allow\n return { allowed: true };\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 unknown 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",
|
|
87
|
-
"import type { IAgentRuntime } from \"@elizaos/core\";\n\n/**\n * Default account identifier used when no specific account is configured\n */\nexport const DEFAULT_ACCOUNT_ID = \"default\";\n\n/**\n * Source of the Telegram token\n */\nexport type TelegramTokenSource = \"env\" | \"config\" | \"character\" | \"none\";\n\n/**\n * Result of token resolution\n */\nexport interface TelegramTokenResolution {\n token: string;\n source: TelegramTokenSource;\n}\n\n/**\n * DM-specific configuration\n */\nexport interface TelegramDmConfig {\n /** If false, ignore all incoming Telegram DMs */\n enabled?: boolean;\n /** Direct message access policy */\n policy?: \"open\" | \"disabled\" | \"allowlist\" | \"pairing\";\n /** Allowlist for DM senders (ids or usernames) */\n allowFrom?: Array<string | number>;\n}\n\n/**\n * Group-specific runtime configuration (for account resolution)\n */\nexport interface TelegramGroupRuntimeConfig {\n /** If false, ignore all group messages */\n enabled?: boolean;\n /** Group message access policy */\n policy?: \"open\" | \"disabled\" | \"allowlist\";\n /** Require bot mention to respond in groups */\n requireMention?: boolean;\n /** Allowlist for groups (ids or usernames) */\n allowFrom?: Array<string | number>;\n /** User allowlist within groups */\n users?: Array<string | number>;\n}\n\n/**\n * Configuration for a single Telegram account (runtime resolution)\n */\nexport interface TelegramAccountRuntimeConfig {\n /** Optional display name for this account */\n name?: string;\n /** If false, do not start this Telegram account */\n enabled?: boolean;\n /** Telegram bot token for this account */\n token?: string;\n /** Update mode: polling or webhook */\n updateMode?: \"polling\" | \"webhook\";\n /** Webhook URL for webhook mode */\n webhookUrl?: string;\n /** Webhook port */\n webhookPort?: number;\n /** Webhook path */\n webhookPath?: string;\n /** Webhook secret */\n webhookSecret?: string;\n /** Custom API root URL */\n apiRoot?: string;\n /** Outbound text chunk size (chars) */\n textChunkLimit?: number;\n /** Max media size in MB */\n mediaMaxMb?: number;\n /** History limit for context */\n historyLimit?: number;\n /** DM configuration */\n dm?: TelegramDmConfig;\n /** Group configuration */\n group?: TelegramGroupRuntimeConfig;\n /** Allowed chat IDs */\n allowedChatIds?: Array<string | number>;\n /** Whether to ignore bot messages */\n shouldIgnoreBotMessages?: boolean;\n}\n\n/**\n * Multi-account Telegram configuration structure\n */\nexport interface TelegramMultiAccountConfig {\n /** Default/base configuration applied to all accounts */\n enabled?: boolean;\n token?: string;\n /** Per-account configuration overrides */\n accounts?: Record<string, TelegramAccountRuntimeConfig>;\n}\n\n/**\n * Resolved Telegram account with all configuration merged\n */\nexport interface ResolvedTelegramAccount {\n accountId: string;\n enabled: boolean;\n name?: string;\n token: string;\n tokenSource: TelegramTokenSource;\n config: TelegramAccountRuntimeConfig;\n}\n\n/**\n * Normalizes an account ID, returning the default if not provided\n */\nexport function normalizeAccountId(accountId?: string | null): string {\n if (!accountId || typeof accountId !== \"string\") {\n return DEFAULT_ACCOUNT_ID;\n }\n const trimmed = accountId.trim().toLowerCase();\n return trimmed || DEFAULT_ACCOUNT_ID;\n}\n\n/**\n * Normalizes a Telegram token by trimming whitespace\n */\nexport function normalizeTelegramToken(raw?: string | null): string | undefined {\n const trimmed = raw?.trim();\n return trimmed || undefined;\n}\n\n/**\n * Gets the multi-account configuration from runtime settings\n */\nexport function getMultiAccountConfig(runtime: IAgentRuntime): TelegramMultiAccountConfig {\n const characterTelegram = runtime.character?.settings?.telegram as\n | TelegramMultiAccountConfig\n | undefined;\n\n return {\n enabled: characterTelegram?.enabled,\n token: characterTelegram?.token,\n accounts: characterTelegram?.accounts,\n };\n}\n\n/**\n * Lists all configured account IDs\n */\nexport function listTelegramAccountIds(runtime: IAgentRuntime): string[] {\n const config = getMultiAccountConfig(runtime);\n const accounts = config.accounts;\n\n if (!accounts || typeof accounts !== \"object\") {\n return [DEFAULT_ACCOUNT_ID];\n }\n\n const ids = Object.keys(accounts).filter(Boolean);\n if (ids.length === 0) {\n return [DEFAULT_ACCOUNT_ID];\n }\n\n return ids.slice().sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Resolves the default account ID to use\n */\nexport function resolveDefaultTelegramAccountId(runtime: IAgentRuntime): string {\n const ids = listTelegramAccountIds(runtime);\n if (ids.includes(DEFAULT_ACCOUNT_ID)) {\n return DEFAULT_ACCOUNT_ID;\n }\n return ids[0] ?? DEFAULT_ACCOUNT_ID;\n}\n\n/**\n * Gets the account-specific configuration\n */\nfunction getAccountConfig(\n runtime: IAgentRuntime,\n accountId: string\n): TelegramAccountRuntimeConfig | undefined {\n const config = getMultiAccountConfig(runtime);\n const accounts = config.accounts;\n\n if (!accounts || typeof accounts !== \"object\") {\n return undefined;\n }\n\n return accounts[accountId];\n}\n\n/**\n * Merges base configuration with account-specific overrides\n */\nfunction mergeTelegramAccountConfig(\n runtime: IAgentRuntime,\n accountId: string\n): TelegramAccountRuntimeConfig {\n const multiConfig = getMultiAccountConfig(runtime);\n const { accounts: _ignored, ...baseConfig } = multiConfig;\n const accountConfig = getAccountConfig(runtime, accountId) ?? {};\n\n // Get environment/runtime settings for the base config\n const envUpdateMode = runtime.getSetting(\"TELEGRAM_UPDATE_MODE\") as string | undefined;\n const envWebhookUrl = runtime.getSetting(\"TELEGRAM_WEBHOOK_URL\") as string | undefined;\n const envWebhookPort = runtime.getSetting(\"TELEGRAM_WEBHOOK_PORT\") as string | undefined;\n const envWebhookPath = runtime.getSetting(\"TELEGRAM_WEBHOOK_PATH\") as string | undefined;\n const envWebhookSecret = runtime.getSetting(\"TELEGRAM_WEBHOOK_SECRET\") as string | undefined;\n const envApiRoot = runtime.getSetting(\"TELEGRAM_API_ROOT\") as string | undefined;\n const envAllowedChats = runtime.getSetting(\"TELEGRAM_ALLOWED_CHATS\") as string | undefined;\n\n const envConfig: TelegramAccountRuntimeConfig = {\n updateMode: envUpdateMode === \"webhook\" ? \"webhook\" : \"polling\",\n webhookUrl: envWebhookUrl || undefined,\n webhookPort: envWebhookPort ? parseInt(envWebhookPort, 10) : undefined,\n webhookPath: envWebhookPath || undefined,\n webhookSecret: envWebhookSecret || undefined,\n apiRoot: envApiRoot || undefined,\n allowedChatIds: envAllowedChats\n ? envAllowedChats\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined,\n };\n\n // Merge order: env defaults < base config < account config\n return {\n ...envConfig,\n ...baseConfig,\n ...accountConfig,\n };\n}\n\n/**\n * Resolves the Telegram token for a specific account\n */\nexport function resolveTelegramToken(\n runtime: IAgentRuntime,\n opts: { accountId?: string | null } = {}\n): TelegramTokenResolution {\n const accountId = normalizeAccountId(opts.accountId);\n const multiConfig = getMultiAccountConfig(runtime);\n\n // Check account-specific token first\n const accountConfig =\n accountId !== DEFAULT_ACCOUNT_ID\n ? multiConfig.accounts?.[accountId]\n : multiConfig.accounts?.[DEFAULT_ACCOUNT_ID];\n\n const accountToken = normalizeTelegramToken(accountConfig?.token);\n if (accountToken) {\n return { token: accountToken, source: \"config\" };\n }\n\n // For default account, check base config token\n const allowBase = accountId === DEFAULT_ACCOUNT_ID;\n const baseToken = allowBase ? normalizeTelegramToken(multiConfig.token) : undefined;\n if (baseToken) {\n return { token: baseToken, source: \"character\" };\n }\n\n // For default account, check environment token\n const envToken = allowBase\n ? normalizeTelegramToken(runtime.getSetting(\"TELEGRAM_BOT_TOKEN\") as string)\n : undefined;\n if (envToken) {\n return { token: envToken, source: \"env\" };\n }\n\n return { token: \"\", source: \"none\" };\n}\n\n/**\n * Resolves a complete Telegram account configuration\n */\nexport function resolveTelegramAccount(\n runtime: IAgentRuntime,\n accountId?: string | null\n): ResolvedTelegramAccount {\n const normalizedAccountId = normalizeAccountId(accountId);\n const multiConfig = getMultiAccountConfig(runtime);\n\n const baseEnabled = multiConfig.enabled !== false;\n const merged = mergeTelegramAccountConfig(runtime, normalizedAccountId);\n const accountEnabled = merged.enabled !== false;\n const enabled = baseEnabled && accountEnabled;\n\n const tokenResolution = resolveTelegramToken(runtime, { accountId: normalizedAccountId });\n\n return {\n accountId: normalizedAccountId,\n enabled,\n name: merged.name?.trim() || undefined,\n token: tokenResolution.token,\n tokenSource: tokenResolution.source,\n config: merged,\n };\n}\n\n/**\n * Lists all enabled Telegram accounts\n */\nexport function listEnabledTelegramAccounts(runtime: IAgentRuntime): ResolvedTelegramAccount[] {\n return listTelegramAccountIds(runtime)\n .map((accountId) => resolveTelegramAccount(runtime, accountId))\n .filter((account) => account.enabled && account.token);\n}\n\n/**\n * Checks if multi-account mode is enabled\n */\nexport function isMultiAccountEnabled(runtime: IAgentRuntime): boolean {\n const accounts = listEnabledTelegramAccounts(runtime);\n return accounts.length > 1;\n}\n",
|
|
88
|
-
"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",
|
|
89
|
-
"import type { Chat, User } from \"telegraf/types\";\n\n/**\n * Options for markdown to Telegram HTML conversion\n */\nexport interface MarkdownToTelegramOptions {\n /** How to handle tables: 'code' wraps in code block, 'text' converts to plain text */\n tableMode?: \"code\" | \"text\" | \"preserve\";\n /** Whether to linkify URLs */\n linkify?: boolean;\n}\n\n/**\n * Formatted chunk with both HTML and plain text versions\n */\nexport interface TelegramFormattedChunk {\n html: string;\n text: string;\n}\n\n/**\n * Escapes HTML special characters\n */\nexport function escapeHtml(text: string): string {\n return text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/**\n * Escapes HTML attribute special characters\n */\nexport function escapeHtmlAttr(text: string): string {\n return escapeHtml(text).replace(/\"/g, \""\");\n}\n\n/**\n * Escapes Telegram MarkdownV2 special characters\n */\nexport function escapeMarkdownV2(text: string): string {\n return text.replace(/([_*[\\]()~`>#+\\-=|{}.!\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Converts markdown bold to Telegram HTML\n */\nfunction convertBold(text: string): string {\n return text.replace(/\\*\\*(.+?)\\*\\*/g, \"<b>$1</b>\");\n}\n\n/**\n * Converts markdown italic to Telegram HTML\n */\nfunction convertItalic(text: string): string {\n return text.replace(/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, \"<i>$1</i>\");\n}\n\n/**\n * Converts markdown underline to Telegram HTML (using __)\n */\nfunction convertUnderline(text: string): string {\n return text.replace(/__(.+?)__/g, \"<u>$1</u>\");\n}\n\n/**\n * Converts markdown strikethrough to Telegram HTML\n */\nfunction convertStrikethrough(text: string): string {\n return text.replace(/~~(.+?)~~/g, \"<s>$1</s>\");\n}\n\n/**\n * Converts markdown inline code to Telegram HTML\n */\nfunction convertInlineCode(text: string): string {\n return text.replace(/`([^`\\n]+)`/g, (_, code) => `<code>${escapeHtml(code)}</code>`);\n}\n\n/**\n * Converts markdown code blocks to Telegram HTML\n */\nfunction convertCodeBlocks(text: string): string {\n return text.replace(/```(\\w*)\\n?([\\s\\S]*?)```/g, (_, lang, code) => {\n const escapedCode = escapeHtml(code.trim());\n if (lang) {\n return `<pre><code class=\"language-${escapeHtmlAttr(lang)}\">${escapedCode}</code></pre>`;\n }\n return `<pre><code>${escapedCode}</code></pre>`;\n });\n}\n\n/**\n * Converts markdown links to Telegram HTML\n */\nfunction convertLinks(text: string): string {\n return text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, linkText, url) => {\n const safeUrl = escapeHtmlAttr(url.trim());\n return `<a href=\"${safeUrl}\">${escapeHtml(linkText)}</a>`;\n });\n}\n\n/**\n * Auto-linkifies URLs in text\n */\nfunction linkifyUrls(text: string): string {\n const urlRegex = /(?<![\"'])(https?:\\/\\/[^\\s<>\"']+)/g;\n return text.replace(urlRegex, (url) => {\n const safeUrl = escapeHtmlAttr(url);\n return `<a href=\"${safeUrl}\">${escapeHtml(url)}</a>`;\n });\n}\n\n/**\n * Converts markdown to Telegram HTML format\n */\nexport function markdownToTelegramHtml(\n markdown: string,\n options: MarkdownToTelegramOptions = {}\n): string {\n if (!markdown) {\n return \"\";\n }\n\n let result = markdown;\n\n // Process code blocks first (before other transformations)\n result = convertCodeBlocks(result);\n\n // Convert inline code (must be before other inline styles)\n result = convertInlineCode(result);\n\n // Convert links\n result = convertLinks(result);\n\n // Escape HTML in remaining text (outside of already processed elements)\n // This is tricky - we need to escape text that's not inside HTML tags\n const htmlTagPattern = /(<(?:b|i|u|s|code|pre|a)[^>]*>[\\s\\S]*?<\\/(?:b|i|u|s|code|pre|a)>)/g;\n const parts = result.split(htmlTagPattern);\n result = parts\n .map((part, index) => {\n // Odd indices are matched HTML tags, even indices are plain text\n if (index % 2 === 0) {\n let text = escapeHtml(part);\n // Now apply markdown transformations to escaped text\n text = convertBold(text);\n text = convertItalic(text);\n text = convertUnderline(text);\n text = convertStrikethrough(text);\n if (options.linkify !== false) {\n text = linkifyUrls(text);\n }\n return text;\n }\n return part;\n })\n .join(\"\");\n\n return result;\n}\n\n/**\n * Converts markdown to Telegram HTML and splits into chunks\n */\nexport function markdownToTelegramChunks(\n markdown: string,\n limit: number,\n options: MarkdownToTelegramOptions = {}\n): TelegramFormattedChunk[] {\n const html = markdownToTelegramHtml(markdown, options);\n const chunks = chunkTelegramText(html, limit);\n\n return chunks.map((chunk) => ({\n html: chunk,\n text: stripHtmlTags(chunk),\n }));\n}\n\n/**\n * Converts markdown to Telegram HTML chunks (HTML only)\n */\nexport function markdownToTelegramHtmlChunks(markdown: string, limit: number): string[] {\n return markdownToTelegramChunks(markdown, limit).map((chunk) => chunk.html);\n}\n\n/**\n * Strips HTML tags from text\n */\nexport function stripHtmlTags(html: string): string {\n return html\n .replace(/<[^>]+>/g, \"\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"');\n}\n\n/**\n * Options for chunking Telegram text\n */\nexport interface ChunkTelegramTextOpts {\n /** Max characters per message. Default: 4096 */\n maxChars?: number;\n /** Preserve HTML tag boundaries when chunking */\n preserveHtml?: boolean;\n}\n\nconst DEFAULT_MAX_CHARS = 4096;\n\n/**\n * Chunks Telegram text while preserving HTML tag boundaries\n */\nexport function chunkTelegramText(text: string, maxChars: number = DEFAULT_MAX_CHARS): string[] {\n if (!text) {\n return [];\n }\n\n if (text.length <= maxChars) {\n return [text];\n }\n\n const chunks: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= maxChars) {\n chunks.push(remaining);\n break;\n }\n\n // Find a good break point\n let breakPoint = maxChars;\n\n // Try to break at a newline\n const newlineIndex = remaining.lastIndexOf(\"\\n\", maxChars);\n if (newlineIndex > maxChars * 0.5) {\n breakPoint = newlineIndex + 1;\n } else {\n // Try to break at a space\n const spaceIndex = remaining.lastIndexOf(\" \", maxChars);\n if (spaceIndex > maxChars * 0.5) {\n breakPoint = spaceIndex + 1;\n }\n }\n\n // Check if we're breaking inside an HTML tag\n const chunk = remaining.slice(0, breakPoint);\n const openTags = chunk.match(/<(\\w+)[^>]*>/g) || [];\n const closeTags = chunk.match(/<\\/(\\w+)>/g) || [];\n\n // Track unclosed tags\n const tagStack: string[] = [];\n for (const tag of openTags) {\n const tagName = tag.match(/<(\\w+)/)?.[1];\n if (tagName && !tag.endsWith(\"/>\")) {\n tagStack.push(tagName);\n }\n }\n for (const tag of closeTags) {\n const tagName = tag.match(/<\\/(\\w+)>/)?.[1];\n if (tagName) {\n const index = tagStack.lastIndexOf(tagName);\n if (index !== -1) {\n tagStack.splice(index, 1);\n }\n }\n }\n\n // Close unclosed tags at end of chunk\n let chunkWithClosedTags = chunk;\n const closingTags = tagStack\n .slice()\n .reverse()\n .map((tag) => `</${tag}>`)\n .join(\"\");\n chunkWithClosedTags += closingTags;\n\n chunks.push(chunkWithClosedTags);\n\n // Reopen tags at start of next chunk\n const openingTags = tagStack.map((tag) => `<${tag}>`).join(\"\");\n remaining = openingTags + remaining.slice(breakPoint);\n }\n\n return chunks;\n}\n\n/**\n * Formats a Telegram user for display\n */\nexport function formatTelegramUser(user: User): string {\n if (user.username) {\n return `@${user.username}`;\n }\n if (user.last_name) {\n return `${user.first_name} ${user.last_name}`;\n }\n return user.first_name;\n}\n\n/**\n * Formats a Telegram user mention (HTML)\n */\nexport function formatTelegramUserMention(user: User): string {\n const displayName = formatTelegramUser(user);\n return `<a href=\"tg://user?id=${user.id}\">${escapeHtml(displayName)}</a>`;\n}\n\n/**\n * Formats a Telegram chat for display\n */\nexport function formatTelegramChat(chat: Chat): string {\n if (chat.type === \"private\") {\n const privateChat = chat as Chat.PrivateChat;\n if (privateChat.username) {\n return `@${privateChat.username}`;\n }\n if (privateChat.last_name) {\n return `${privateChat.first_name} ${privateChat.last_name}`;\n }\n return privateChat.first_name || `User ${chat.id}`;\n }\n\n const groupChat = chat as Chat.GroupChat | Chat.SupergroupChat | Chat.ChannelChat;\n if (\"username\" in groupChat && groupChat.username) {\n return `@${groupChat.username}`;\n }\n return groupChat.title || `Chat ${chat.id}`;\n}\n\n/**\n * Gets the chat type as a human-readable string\n */\nexport function getChatTypeString(chat: Chat): string {\n switch (chat.type) {\n case \"private\":\n return \"DM\";\n case \"group\":\n return \"Group\";\n case \"supergroup\":\n return \"Supergroup\";\n case \"channel\":\n return \"Channel\";\n default:\n return \"Unknown\";\n }\n}\n\n/**\n * Resolves the system location string for logging/display\n */\nexport function resolveTelegramSystemLocation(chat: Chat): string {\n const chatType = getChatTypeString(chat);\n const chatName = formatTelegramChat(chat);\n return `${chatType}: ${chatName}`;\n}\n\n/**\n * Checks if a chat is a private chat (DM)\n */\nexport function isPrivateChat(chat: Chat): chat is Chat.PrivateChat {\n return chat.type === \"private\";\n}\n\n/**\n * Checks if a chat is a group chat\n */\nexport function isGroupChat(chat: Chat): chat is Chat.GroupChat | Chat.SupergroupChat {\n return chat.type === \"group\" || chat.type === \"supergroup\";\n}\n\n/**\n * Checks if a chat is a channel\n */\nexport function isChannelChat(chat: Chat): chat is Chat.ChannelChat {\n return chat.type === \"channel\";\n}\n\n/**\n * Truncates text to a maximum length with an ellipsis\n */\nexport function truncateText(text: string, maxLength: number, ellipsis = \"…\"): string {\n if (text.length <= maxLength) {\n return text;\n }\n return text.slice(0, maxLength - ellipsis.length) + ellipsis;\n}\n\n/**\n * Builds a Telegram deep link URL\n */\nexport function buildTelegramDeepLink(botUsername: string, startParam?: string): string {\n const base = `https://t.me/${botUsername}`;\n if (startParam) {\n return `${base}?start=${encodeURIComponent(startParam)}`;\n }\n return base;\n}\n\n/**\n * Builds a Telegram message link URL\n */\nexport function buildTelegramMessageLink(chatUsername: string, messageId: number): string {\n return `https://t.me/${chatUsername}/${messageId}`;\n}\n\n/**\n * Parses a Telegram message link URL\n */\nexport function parseTelegramMessageLink(\n url: string\n): { chatUsername: string; messageId: number } | null {\n const match = url.match(/^https?:\\/\\/t\\.me\\/([^/]+)\\/(\\d+)$/);\n if (!match) {\n return null;\n }\n\n return {\n chatUsername: match[1],\n messageId: parseInt(match[2], 10),\n };\n}\n\n/**\n * Formats a caption for media messages\n */\nexport function formatMediaCaption(text: string, maxLength: number = 1024): string {\n if (!text) {\n return \"\";\n }\n\n if (text.length <= maxLength) {\n return text;\n }\n\n // Find a good break point\n let breakPoint = maxLength - 1;\n const newlineIndex = text.lastIndexOf(\"\\n\", maxLength);\n if (newlineIndex > maxLength * 0.5) {\n breakPoint = newlineIndex;\n } else {\n const spaceIndex = text.lastIndexOf(\" \", maxLength);\n if (spaceIndex > maxLength * 0.5) {\n breakPoint = spaceIndex;\n }\n }\n\n return `${text.slice(0, breakPoint)}…`;\n}\n",
|
|
90
|
-
"import type { Plugin, TestSuite } from \"@elizaos/core\";\nimport {\n DELETE_MESSAGE_ACTION,\n deleteMessageAction,\n EDIT_MESSAGE_ACTION,\n editMessageAction,\n SEND_MESSAGE_ACTION,\n SEND_REACTION_ACTION,\n SEND_STICKER_ACTION,\n sendMessageAction,\n sendReactionAction,\n sendStickerAction,\n} from \"./actions\";\nimport { TELEGRAM_SERVICE_NAME } from \"./constants\";\nimport {\n buildTelegramSettings,\n type TelegramSettings,\n type TelegramUpdateMode,\n validateTelegramConfig,\n} from \"./environment\";\nimport { MessageManager } from \"./messageManager\";\nimport { CHAT_STATE_PROVIDER, chatStateProvider } from \"./providers\";\nimport { TelegramService } from \"./service\";\nimport { TelegramTestSuite } from \"./tests\";\nimport {\n type SendReactionParams,\n type SendReactionResult,\n TELEGRAM_REACTIONS,\n type TelegramBotInfo,\n type TelegramBotProbe,\n type TelegramContent,\n TelegramEventTypes,\n type TelegramReactionEmoji,\n} from \"./types\";\n\nconst telegramPlugin: Plugin = {\n name: TELEGRAM_SERVICE_NAME,\n description: \"Telegram client plugin with polling and webhook support\",\n services: [TelegramService],\n actions: [\n sendMessageAction,\n sendReactionAction,\n editMessageAction,\n deleteMessageAction,\n sendStickerAction,\n ],\n providers: [chatStateProvider],\n tests: [new TelegramTestSuite() as unknown as TestSuite],\n};\n\nexport {\n // Service\n TelegramService,\n MessageManager,\n // Actions\n sendMessageAction,\n SEND_MESSAGE_ACTION,\n sendReactionAction,\n SEND_REACTION_ACTION,\n editMessageAction,\n EDIT_MESSAGE_ACTION,\n deleteMessageAction,\n DELETE_MESSAGE_ACTION,\n sendStickerAction,\n SEND_STICKER_ACTION,\n // Providers\n chatStateProvider,\n CHAT_STATE_PROVIDER,\n // Types\n TelegramEventTypes,\n TELEGRAM_REACTIONS,\n type TelegramContent,\n type TelegramBotProbe,\n type SendReactionParams,\n type SendReactionResult,\n type TelegramBotInfo,\n type TelegramReactionEmoji,\n type TelegramSettings,\n type TelegramUpdateMode,\n // Config utilities\n buildTelegramSettings,\n validateTelegramConfig,\n};\n\n// Account management exports\nexport {\n DEFAULT_ACCOUNT_ID,\n isMultiAccountEnabled,\n listEnabledTelegramAccounts,\n listTelegramAccountIds,\n normalizeAccountId,\n normalizeTelegramToken,\n type ResolvedTelegramAccount,\n resolveDefaultTelegramAccountId,\n resolveTelegramAccount,\n resolveTelegramToken,\n type TelegramAccountRuntimeConfig,\n type TelegramDmConfig,\n type TelegramGroupRuntimeConfig,\n type TelegramMultiAccountConfig,\n type TelegramTokenResolution,\n type TelegramTokenSource,\n} from \"./accounts\";\n\n// Formatting exports\nexport {\n buildTelegramDeepLink,\n buildTelegramMessageLink,\n type ChunkTelegramTextOpts,\n chunkTelegramText,\n escapeHtml,\n escapeHtmlAttr,\n escapeMarkdownV2,\n formatMediaCaption,\n formatTelegramChat,\n formatTelegramUser,\n formatTelegramUserMention,\n getChatTypeString,\n isChannelChat,\n isGroupChat,\n isPrivateChat,\n type MarkdownToTelegramOptions,\n markdownToTelegramChunks,\n markdownToTelegramHtml,\n markdownToTelegramHtmlChunks,\n parseTelegramMessageLink,\n resolveTelegramSystemLocation,\n stripHtmlTags,\n type TelegramFormattedChunk,\n truncateText,\n} from \"./formatting\";\n\nexport default telegramPlugin;\n\n// Channel configuration types\nexport type {\n TelegramAccountConfig,\n TelegramActionConfig,\n TelegramCapabilitiesConfig,\n TelegramChannelConfig,\n TelegramConfig,\n TelegramCustomCommand,\n TelegramGroupConfig,\n TelegramInlineButtonsScope,\n TelegramNetworkConfig,\n TelegramTopicConfig,\n} from \"./config\";\n"
|
|
91
|
-
],
|
|
92
|
-
"mappings": "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",
|
|
93
|
-
"debugId": "15E08823B3FEAECB64756E2164756E21",
|
|
94
|
-
"names": []
|
|
95
|
-
}
|