cmtoken 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 xwbmotor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # CMToken 插件
2
+
3
+ 这是一个 OpenClaw 的模型提供商插件,支持 CMToken 身份验证(通过手机号进行 OAuth)以及模型推理。
4
+
5
+ ## 特性
6
+
7
+ - **解耦**:独立于 OpenClaw Monorepo 源代码。
8
+
9
+
10
+
11
+
12
+
13
+
14
+ ## 快速上手与安装
15
+
16
+ 此插件已发布至 NPM,您可以直接通过 OpenClaw 提供的命令行工具进行安装与升级。
17
+
18
+ ### 1. 安装插件
19
+
20
+ 在终端中执行以下命令直接从线上安装最新版:
21
+
22
+ ```bash
23
+ openclaw plugins install cmtoken
24
+ ```
25
+
26
+ ### 2. 配置与使用
27
+
28
+ 安装完成后,运行 OpenClaw 的配置向导:
29
+
30
+ ```bash
31
+ openclaw configure
32
+ ```
33
+ 在向导的 Provider 列表中选择 `CMToken`,您可以选择:
34
+ - **OAuth 授权**:通过浏览器扫码快捷登录
35
+ - **API Key 授权**:手动输入您的 CMToken Key
36
+
37
+ 配置完成后即可在对话中使用 CMToken 支持的模型!
38
+
39
+ ---
40
+
41
+ ## 强制升级与重置
42
+
43
+ 如果插件发布了新版本(例如修复了网络波动导致的问题),或者您发现当前插件状态异常,可以使用 `--force` 参数**强制重新拉取并覆盖安装最新版**:
44
+
45
+ ```bash
46
+ openclaw plugins install cmtoken --force
47
+ ```
48
+
49
+ **⚠️ 注意:**
50
+ 升级完成后,建议您重新运行一次 `openclaw configure` 以确保最新配置生效。如果遇到依然加载旧版界面的玄学缓存问题,请尝试杀掉后台的 Node.js 进程重启 OpenClaw 守护进程:
51
+ ```bash
52
+ # Windows
53
+ taskkill /f /im node.exe
54
+ # MacOS/Linux
55
+ killall node
56
+ ```
57
+
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRMode.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRMath.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/vendor/QRCode/index.js", "../node_modules/.pnpm/qrcode-terminal@0.12.0/node_modules/qrcode-terminal/lib/main.js", "../src/oauth.ts", "../src/oauth.runtime.ts", "../src/provider-models.ts", "../src/discovery.ts", "../src/index.ts", "../src/provider-registration.ts"],
4
+ "sourcesContent": ["module.exports = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n};\n", "var QRMode = require('./QRMode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = QRMode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function() {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n", "var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n", "var QRMath = require('./QRMath');\n\nfunction QRPolynomial(num, shift) {\n\tif (num.length === undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] === 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i) ) + QRMath.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = QRMath.glog(this.get(0) ) - QRMath.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var x = 0; x < e.getLength(); x++) {\n\t\t\tnum[x] ^= QRMath.gexp(QRMath.glog(e.get(x) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n", "module.exports = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n", "var QRMode = require('./QRMode');\nvar QRPolynomial = require('./QRPolynomial');\nvar QRMath = require('./QRMath');\nvar QRMaskPattern = require('./QRMaskPattern');\n\nvar QRUtil = {\n\n PATTERN_POSITION_TABLE : [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54], \n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ],\n\n G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n G15_MASK : (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),\n\n getBCHTypeInfo : function(data) {\n var d = data << 10;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \n }\n return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n },\n\n getBCHTypeNumber : function(data) {\n var d = data << 12;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \n }\n return (data << 12) | d;\n },\n\n getBCHDigit : function(data) {\n\n var digit = 0;\n\n while (data !== 0) {\n digit++;\n data >>>= 1;\n }\n\n return digit;\n },\n\n getPatternPosition : function(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n },\n\n getMask : function(maskPattern, i, j) {\n \n switch (maskPattern) {\n \n case QRMaskPattern.PATTERN000 : return (i + j) % 2 === 0;\n case QRMaskPattern.PATTERN001 : return i % 2 === 0;\n case QRMaskPattern.PATTERN010 : return j % 3 === 0;\n case QRMaskPattern.PATTERN011 : return (i + j) % 3 === 0;\n case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 === 0;\n case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 === 0;\n case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 === 0;\n case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 === 0;\n\n default :\n throw new Error(\"bad maskPattern:\" + maskPattern);\n }\n },\n\n getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n var a = new QRPolynomial([1], 0);\n\n for (var i = 0; i < errorCorrectLength; i++) {\n a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0) );\n }\n\n return a;\n },\n\n getLengthInBits : function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw new Error(\"mode:\" + mode);\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw new Error(\"mode:\" + mode);\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw new Error(\"mode:\" + mode);\n }\n\n } else {\n throw new Error(\"type:\" + type);\n }\n },\n\n getLostPoint : function(qrCode) {\n \n var moduleCount = qrCode.getModuleCount();\n var lostPoint = 0;\n var row = 0; \n var col = 0;\n\n \n // LEVEL1\n \n for (row = 0; row < moduleCount; row++) {\n\n for (col = 0; col < moduleCount; col++) {\n\n var sameCount = 0;\n var dark = qrCode.isDark(row, col);\n\n for (var r = -1; r <= 1; r++) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c++) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r === 0 && c === 0) {\n continue;\n }\n\n if (dark === qrCode.isDark(row + r, col + c) ) {\n sameCount++;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n }\n\n // LEVEL2\n\n for (row = 0; row < moduleCount - 1; row++) {\n for (col = 0; col < moduleCount - 1; col++) {\n var count = 0;\n if (qrCode.isDark(row, col ) ) count++;\n if (qrCode.isDark(row + 1, col ) ) count++;\n if (qrCode.isDark(row, col + 1) ) count++;\n if (qrCode.isDark(row + 1, col + 1) ) count++;\n if (count === 0 || count === 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (row = 0; row < moduleCount; row++) {\n for (col = 0; col < moduleCount - 6; col++) {\n if (qrCode.isDark(row, col) && \n !qrCode.isDark(row, col + 1) && \n qrCode.isDark(row, col + 2) && \n qrCode.isDark(row, col + 3) && \n qrCode.isDark(row, col + 4) && \n !qrCode.isDark(row, col + 5) && \n qrCode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (col = 0; col < moduleCount; col++) {\n for (row = 0; row < moduleCount - 6; row++) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row + 1, col) &&\n qrCode.isDark(row + 2, col) &&\n qrCode.isDark(row + 3, col) &&\n qrCode.isDark(row + 4, col) &&\n !qrCode.isDark(row + 5, col) &&\n qrCode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n \n var darkCount = 0;\n\n for (col = 0; col < moduleCount; col++) {\n for (row = 0; row < moduleCount; row++) {\n if (qrCode.isDark(row, col) ) {\n darkCount++;\n }\n }\n }\n \n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint; \n }\n\n};\n\nmodule.exports = QRUtil;\n", "module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n", "var QRErrorCorrectLevel = require('./QRErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock === undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = [];\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n};\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase QRErrorCorrectLevel.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase QRErrorCorrectLevel.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase QRErrorCorrectLevel.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase QRErrorCorrectLevel.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n};\n\nmodule.exports = QRRSBlock;\n", "function QRBitBuffer() {\n\tthis.buffer = [];\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n", "//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of \n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n// Modified to work in node for this project (and some refactoring)\n//---------------------------------------------------------------------\n\nvar QR8bitByte = require('./QR8bitByte');\nvar QRUtil = require('./QRUtil');\nvar QRPolynomial = require('./QRPolynomial');\nvar QRRSBlock = require('./QRRSBlock');\nvar QRBitBuffer = require('./QRBitBuffer');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\nQRCode.prototype = {\n\t\n\taddData : function(data) {\n\t\tvar newData = new QR8bitByte(data);\n\t\tthis.dataList.push(newData);\n\t\tthis.dataCache = null;\n\t},\n\t\n\tisDark : function(row, col) {\n\t\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\t\tthrow new Error(row + \",\" + col);\n\t\t}\n\t\treturn this.modules[row][col];\n\t},\n\n\tgetModuleCount : function() {\n\t\treturn this.moduleCount;\n\t},\n\t\n\tmake : function() {\n\t\t// Calculate automatically typeNumber if provided is < 1\n\t\tif (this.typeNumber < 1 ){\n\t\t\tvar typeNumber = 1;\n\t\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\t\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\t\tvar buffer = new QRBitBuffer();\n\t\t\t\tvar totalDataCount = 0;\n\t\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t\t}\n\n\t\t\t\tfor (var x = 0; x < this.dataList.length; x++) {\n\t\t\t\t\tvar data = this.dataList[x];\n\t\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\t\tbuffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\t\tdata.write(buffer);\n\t\t\t\t}\n\t\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.typeNumber = typeNumber;\n\t\t}\n\t\tthis.makeImpl(false, this.getBestMaskPattern() );\n\t},\n\t\n\tmakeImpl : function(test, maskPattern) {\n\t\t\n\t\tthis.moduleCount = this.typeNumber * 4 + 17;\n\t\tthis.modules = new Array(this.moduleCount);\n\t\t\n\t\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\t\n\t\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\t\n\t\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t\t}\n\t\t}\n\t\n\t\tthis.setupPositionProbePattern(0, 0);\n\t\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\t\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\t\tthis.setupPositionAdjustPattern();\n\t\tthis.setupTimingPattern();\n\t\tthis.setupTypeInfo(test, maskPattern);\n\t\t\n\t\tif (this.typeNumber >= 7) {\n\t\t\tthis.setupTypeNumber(test);\n\t\t}\n\t\n\t\tif (this.dataCache === null) {\n\t\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t\t}\n\t\n\t\tthis.mapData(this.dataCache, maskPattern);\n\t},\n\n\tsetupPositionProbePattern : function(row, col) {\n\t\t\n\t\tfor (var r = -1; r <= 7; r++) {\n\t\t\t\n\t\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\t\n\t\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\t\n\t\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\t\n\t\t\t\tif ( (0 <= r && r <= 6 && (c === 0 || c === 6) ) || \n (0 <= c && c <= 6 && (r === 0 || r === 6) ) || \n (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\t\t\n\t},\n\t\n\tgetBestMaskPattern : function() {\n\t\n\t\tvar minLostPoint = 0;\n\t\tvar pattern = 0;\n\t\n\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\n\t\t\tthis.makeImpl(true, i);\n\t\n\t\t\tvar lostPoint = QRUtil.getLostPoint(this);\n\t\n\t\t\tif (i === 0 || minLostPoint > lostPoint) {\n\t\t\t\tminLostPoint = lostPoint;\n\t\t\t\tpattern = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn pattern;\n\t},\n\t\n\tcreateMovieClip : function(target_mc, instance_name, depth) {\n\t\n\t\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\t\tvar cs = 1;\n\t\n\t\tthis.make();\n\n\t\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\t\n\t\t\tvar y = row * cs;\n\t\t\t\n\t\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\t\n\t\t\t\tvar x = col * cs;\n\t\t\t\tvar dark = this.modules[row][col];\n\t\t\t\n\t\t\t\tif (dark) {\n\t\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\t\tqr_mc.endFill();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn qr_mc;\n\t},\n\n\tsetupTimingPattern : function() {\n\t\t\n\t\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\t\tif (this.modules[r][6] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.modules[r][6] = (r % 2 === 0);\n\t\t}\n\t\n\t\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\t\tif (this.modules[6][c] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.modules[6][c] = (c % 2 === 0);\n\t\t}\n\t},\n\t\n\tsetupPositionAdjustPattern : function() {\n\t\n\t\tvar pos = QRUtil.getPatternPosition(this.typeNumber);\n\t\t\n\t\tfor (var i = 0; i < pos.length; i++) {\n\t\t\n\t\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\t\n\t\t\t\tvar row = pos[i];\n\t\t\t\tvar col = pos[j];\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col] !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\t\n\t\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\t\n\t\t\t\t\t\tif (Math.abs(r) === 2 || \n Math.abs(c) === 2 ||\n (r === 0 && c === 0) ) {\n\t\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\n\tsetupTypeNumber : function(test) {\n\t\n\t\tvar bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n var mod;\n\t\n\t\tfor (var i = 0; i < 18; i++) {\n\t\t\tmod = (!test && ( (bits >> i) & 1) === 1);\n\t\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t\t}\n\t\n\t\tfor (var x = 0; x < 18; x++) {\n\t\t\tmod = (!test && ( (bits >> x) & 1) === 1);\n\t\t\tthis.modules[x % 3 + this.moduleCount - 8 - 3][Math.floor(x / 3)] = mod;\n\t\t}\n\t},\n\t\n\tsetupTypeInfo : function(test, maskPattern) {\n\t\n\t\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\t\tvar bits = QRUtil.getBCHTypeInfo(data);\n var mod;\n\t\n\t\t// vertical\t\t\n\t\tfor (var v = 0; v < 15; v++) {\n\t\n\t\t\tmod = (!test && ( (bits >> v) & 1) === 1);\n\t\n\t\t\tif (v < 6) {\n\t\t\t\tthis.modules[v][8] = mod;\n\t\t\t} else if (v < 8) {\n\t\t\t\tthis.modules[v + 1][8] = mod;\n\t\t\t} else {\n\t\t\t\tthis.modules[this.moduleCount - 15 + v][8] = mod;\n\t\t\t}\n\t\t}\n\t\n\t\t// horizontal\n\t\tfor (var h = 0; h < 15; h++) {\n\t\n\t\t\tmod = (!test && ( (bits >> h) & 1) === 1);\n\t\t\t\n\t\t\tif (h < 8) {\n\t\t\t\tthis.modules[8][this.moduleCount - h - 1] = mod;\n\t\t\t} else if (h < 9) {\n\t\t\t\tthis.modules[8][15 - h - 1 + 1] = mod;\n\t\t\t} else {\n\t\t\t\tthis.modules[8][15 - h - 1] = mod;\n\t\t\t}\n\t\t}\n\t\n\t\t// fixed module\n\t\tthis.modules[this.moduleCount - 8][8] = (!test);\n\t\n\t},\n\t\n\tmapData : function(data, maskPattern) {\n\t\t\n\t\tvar inc = -1;\n\t\tvar row = this.moduleCount - 1;\n\t\tvar bitIndex = 7;\n\t\tvar byteIndex = 0;\n\t\t\n\t\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\t\n\t\t\tif (col === 6) col--;\n\t\n\t\t\twhile (true) {\n\t\n\t\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\t\n\t\t\t\t\tif (this.modules[row][col - c] === null) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar dark = false;\n\t\n\t\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) === 1);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar mask = QRUtil.getMask(maskPattern, row, col - c);\n\t\n\t\t\t\t\t\tif (mask) {\n\t\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\t\tbitIndex--;\n\t\n\t\t\t\t\t\tif (bitIndex === -1) {\n\t\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\trow += inc;\n\t\n\t\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\t\trow -= inc;\n\t\t\t\t\tinc = -inc;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new QRBitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var x = 0; x < rsBlocks.length; x++) {\n\t\ttotalDataCount += rsBlocks[x].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\" + \n buffer.getLengthInBits() + \n \">\" + \n totalDataCount * 8 + \n \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 !== 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var x = 0; x < ecdata[r].length; x++) {\n var modIndex = x + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][x] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var y = 0; y < rsBlocks.length; y++) {\n\t\ttotalCodeCount += rsBlocks[y].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var z = 0; z < maxDcCount; z++) {\n\t\tfor (var s = 0; s < rsBlocks.length; s++) {\n\t\t\tif (z < dcdata[s].length) {\n\t\t\t\tdata[index++] = dcdata[s][z];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var xx = 0; xx < maxEcCount; xx++) {\n\t\tfor (var t = 0; t < rsBlocks.length; t++) {\n\t\t\tif (xx < ecdata[t].length) {\n\t\t\t\tdata[index++] = ecdata[t][xx];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n\n};\n\nmodule.exports = QRCode;\n", "var QRCode = require('./../vendor/QRCode'),\n QRErrorCorrectLevel = require('./../vendor/QRCode/QRErrorCorrectLevel'),\n black = \"\\033[40m \\033[0m\",\n white = \"\\033[47m \\033[0m\",\n toCell = function (isBlack) {\n return isBlack ? black : white;\n },\n repeat = function (color) {\n return {\n times: function (count) {\n return new Array(count).join(color);\n }\n };\n },\n fill = function(length, value) {\n var arr = new Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = value;\n }\n return arr;\n };\n\nmodule.exports = {\n\n error: QRErrorCorrectLevel.L,\n\n generate: function (input, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n var qrcode = new QRCode(-1, this.error);\n qrcode.addData(input);\n qrcode.make();\n\n var output = '';\n if (opts && opts.small) {\n var BLACK = true, WHITE = false;\n var moduleCount = qrcode.getModuleCount();\n var moduleData = qrcode.modules.slice();\n\n var oddRow = moduleCount % 2 === 1;\n if (oddRow) {\n moduleData.push(fill(moduleCount, WHITE));\n }\n\n var platte= {\n WHITE_ALL: '\\u2588',\n WHITE_BLACK: '\\u2580',\n BLACK_WHITE: '\\u2584',\n BLACK_ALL: ' ',\n };\n\n var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);\n var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);\n output += borderTop + '\\n';\n\n for (var row = 0; row < moduleCount; row += 2) {\n output += platte.WHITE_ALL;\n\n for (var col = 0; col < moduleCount; col++) {\n if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {\n output += platte.WHITE_ALL;\n } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {\n output += platte.WHITE_BLACK;\n } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {\n output += platte.BLACK_WHITE;\n } else {\n output += platte.BLACK_ALL;\n }\n }\n\n output += platte.WHITE_ALL + '\\n';\n }\n\n if (!oddRow) {\n output += borderBottom;\n }\n } else {\n var border = repeat(white).times(qrcode.getModuleCount() + 3);\n\n output += border + '\\n';\n qrcode.modules.forEach(function (row) {\n output += white;\n output += row.map(toCell).join(''); \n output += white + '\\n';\n });\n output += border;\n }\n\n if (cb) cb(output);\n else console.log(output);\n },\n\n setErrorLevel: function (error) {\n this.error = QRErrorCorrectLevel[error] || this.error;\n }\n\n};\n", "import { randomBytes, randomUUID, createHash } from \"node:crypto\";\r\nimport * as tty from \"node:tty\";\r\nimport * as os from \"node:os\";\r\nimport qrcode from \"qrcode-terminal\";\r\n\r\nconst OAUTH_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes for polling requests\r\n\r\nfunction ensureOAuthDispatcher() {\r\n try {\r\n const { ensureGlobalUndiciEnvProxyDispatcher } = require(\"openclaw/plugin-sdk/runtime-env\") as typeof import(\"openclaw/plugin-sdk/runtime-env\");\r\n ensureGlobalUndiciEnvProxyDispatcher();\r\n } catch {}\r\n}\r\n\r\nexport type CMTokenRegion = \"cn\" | \"global\";\r\n\r\nconst CMTOKEN_OAUTH_DEFAULT_CONFIG = {\r\n baseUrl: process.env.CMTOKEN_OAUTH_URL as string,\r\n clientId: process.env.CMTOKEN_CLIENT_ID as string,\r\n} as const;\r\n\r\nconst hostname = os.hostname();\r\nconst CMTOKEN_OAUTH_SCOPE = `profile model.completion identity:device:${hostname}`;\r\nconst CMTOKEN_OAUTH_GRANT_TYPE = \"urn:ietf:params:oauth:grant-type:device_code\";\r\n\r\nfunction getOAuthEndpoints(config?: { oauthBaseUrl?: string, clientId?: string }) {\r\n const baseUrl = config?.oauthBaseUrl || CMTOKEN_OAUTH_DEFAULT_CONFIG.baseUrl;\r\n const clientId = config?.clientId || CMTOKEN_OAUTH_DEFAULT_CONFIG.clientId;\r\n return {\r\n codeEndpoint: `${baseUrl}/oauth/device/code`,\r\n tokenEndpoint: `${baseUrl}/oauth/device/token`,\r\n authorizeEndpoint: `${baseUrl}/oauth/authorize`,\r\n clientId,\r\n baseUrl,\r\n };\r\n}\r\n\r\nexport type CMTokenOAuthAuthorization = {\r\n device_code: string;\r\n user_code: string;\r\n verification_uri: string;\r\n verification_uri_complete?: string;\r\n expires_in: number;\r\n interval?: number;\r\n};\r\n\r\nexport type CMTokenOAuthToken = {\r\n access: string;\r\n refresh: string;\r\n expires: number;\r\n resourceUrl?: string;\r\n notification_message?: string;\r\n};\r\n\r\ntype TokenPending = { status: \"pending\"; message?: string };\r\n\r\ntype TokenResult =\r\n | { status: \"success\"; token: CMTokenOAuthToken }\r\n | TokenPending\r\n | { status: \"error\"; message: string };\r\n\r\ninterface TokenResponsePayload {\r\n access_token?: string;\r\n refresh_token?: string;\r\n expires_in?: number;\r\n resource_url?: string;\r\n notification_message?: string;\r\n error?: string;\r\n error_description?: string;\r\n}\r\n\r\nfunction generatePkce(): { verifier: string; challenge: string; state: string } {\r\n const verifier = randomBytes(32).toString(\"base64url\");\r\n const challenge = createHash(\"sha256\").update(verifier).digest(\"base64url\");\r\n const state = randomBytes(16).toString(\"base64url\");\r\n return { verifier, challenge, state };\r\n}\r\n\r\n\r\n\r\nasync function requestDeviceCode(params: {\r\n challenge: string;\r\n state: string;\r\n config?: { oauthBaseUrl?: string, clientId?: string };\r\n}): Promise<CMTokenOAuthAuthorization> {\r\n const endpoints = getOAuthEndpoints(params.config);\r\n\r\n ensureOAuthDispatcher();\r\n\r\n try {\r\n const res = await fetch(endpoints.codeEndpoint, {\r\n method: \"POST\",\r\n signal: AbortSignal.timeout(OAUTH_TIMEOUT_MS),\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n Accept: \"application/json\",\r\n \"x-request-id\": randomUUID(),\r\n },\r\n body: new URLSearchParams({\r\n response_type: \"device_code\",\r\n client_id: endpoints.clientId,\r\n scope: CMTOKEN_OAUTH_SCOPE,\r\n code_challenge: params.challenge,\r\n code_challenge_method: \"S256\",\r\n state: params.state,\r\n }),\r\n });\r\n\r\n const text = await res.text();\r\n if (!res.ok) {\r\n throw new Error(`CMToken OAuth device code request failed: ${text || res.status}`);\r\n }\r\n\r\n const payload = JSON.parse(text) as CMTokenOAuthAuthorization & { error?: string };\r\n if (!payload.device_code || !payload.user_code || !payload.verification_uri) {\r\n throw new Error(\r\n payload.error ??\r\n \"CMToken OAuth returned an incomplete payload (missing device_code, user_code or verification_uri).\",\r\n );\r\n }\r\n return payload;\r\n } catch (err) {\r\n throw new Error(`CMToken OAuth \u8BBE\u5907\u8BF7\u6C42\u8FDE\u63A5\u5931\u8D25 (${endpoints.codeEndpoint}): ${err instanceof Error ? err.message : String(err)}`);\r\n }\r\n}\r\n\r\nasync function pollOAuthToken(params: {\r\n deviceCode: string;\r\n verifier: string;\r\n config?: { oauthBaseUrl?: string, clientId?: string };\r\n}): Promise<TokenResult> {\r\n const endpoints = getOAuthEndpoints(params.config);\r\n ensureOAuthDispatcher();\r\n\r\n let res: Response;\r\n try {\r\n res = await fetch(endpoints.tokenEndpoint, {\r\n method: \"POST\",\r\n signal: AbortSignal.timeout(OAUTH_TIMEOUT_MS),\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n Accept: \"application/json\",\r\n },\r\n body: new URLSearchParams({\r\n grant_type: CMTOKEN_OAUTH_GRANT_TYPE,\r\n client_id: endpoints.clientId,\r\n device_code: params.deviceCode,\r\n code_verifier: params.verifier,\r\n }),\r\n });\r\n } catch (err) {\r\n // Network error during polling, treat as pending to keep retrying\r\n return { status: \"pending\", message: `\u7F51\u7EDC\u8BF7\u6C42\u4E0D\u7A33\u5B9A\uFF0C\u6B63\u5728\u91CD\u8BD5... (${err instanceof Error ? err.message : String(err)})` };\r\n }\r\n\r\n const text = await res.text();\r\n\r\n let payload: TokenResponsePayload | undefined;\r\n try {\r\n payload = JSON.parse(text) as TokenResponsePayload;\r\n } catch {\r\n payload = undefined;\r\n }\r\n\r\n if (!res.ok) {\r\n if (payload?.error === \"authorization_pending\") {\r\n return { status: \"pending\", message: \"\u6B63\u5728\u7B49\u5F85\u7528\u6237\u6388\u6743...\" };\r\n }\r\n if (payload?.error === \"slow_down\") {\r\n return { status: \"pending\", message: \"\u901F\u7387\u53D7\u9650\uFF0C\u6B63\u5728\u51CF\u6162\u8BF7\u6C42...\" };\r\n }\r\n return {\r\n status: \"error\",\r\n message: payload?.error_description ?? payload?.error ?? text ?? \"OAuth \u4EE4\u724C\u8BF7\u6C42\u5931\u8D25\",\r\n };\r\n }\r\n\r\n if (!payload) {\r\n return { status: \"error\", message: \"CMToken OAuth \u65E0\u6CD5\u89E3\u6790\u54CD\u5E94\u3002\" };\r\n }\r\n\r\n if (!payload.access_token || !payload.refresh_token || !payload.expires_in) {\r\n return { status: \"error\", message: \"CMToken OAuth \u8FD4\u56DE\u7684\u4EE4\u724C\u8D1F\u8F7D\u4E0D\u5B8C\u6574\u3002\" };\r\n }\r\n\r\n return {\r\n status: \"success\",\r\n token: {\r\n access: payload.access_token,\r\n refresh: payload.refresh_token,\r\n expires: Date.now() + payload.expires_in * 1000,\r\n resourceUrl: payload.resource_url,\r\n notification_message: payload.notification_message,\r\n },\r\n };\r\n}\r\n\r\nfunction renderQrAscii(data: string, isSmall: boolean = true): Promise<string> {\r\n return new Promise((resolve) => {\r\n qrcode.generate(data, { small: isSmall }, (output: string) => {\r\n resolve(output);\r\n });\r\n });\r\n}\r\n\r\n\r\n\r\nasync function detectModernTerminal(): Promise<{ isModern: boolean; debugInfo: string }> {\r\n // \u4E0D\u5728 TTY \u73AF\u5883\u91CC\uFF08\u5982\u88AB\u7BA1\u9053\u91CD\u5B9A\u5411\uFF09\uFF0C\u76F4\u63A5\u8BA4\u4E3A\u4E0D\u652F\u6301\r\n if (!process.stdout.isTTY) return { isModern: false, debugInfo: \"not_tty\" };\r\n\r\n // \u7531\u4E8E OpenClaw \u6C99\u76D2\u9650\u5236\uFF0C\u6211\u4EEC\u65E0\u6CD5\u8BFB\u53D6 process.env\u3002\r\n // \u5728 Windows \u4E0A\uFF0C\u539F\u751F conhost \u4E5F\u4F1A\u54CD\u5E94 DA1 \u67E5\u8BE2 (\\x1b[c)\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u901A\u8FC7 DA1 \u533A\u5206\u5B83\u548C Windows Terminal\u3002\r\n // \u4F46\u73B0\u4EE3\u7EC8\u7AEF\uFF08\u5982 Windows Terminal, VS Code, iTerm\uFF09\u652F\u6301 OSC 11 \u67E5\u8BE2\u80CC\u666F\u8272\uFF0C\u800C conhost \u4E0D\u652F\u6301\u4E14\u4E0D\u4F1A\u4E71\u7801\u3002\r\n // \u56E0\u6B64\u6211\u4EEC\u901A\u8FC7\u53D1\u9001 DA1 \u548C OSC 11 \u7EC4\u5408\u67E5\u8BE2\uFF0C\u5728 Windows \u4E0A\u5F3A\u4F9D\u8D56 OSC 11 \u54CD\u5E94\u6765\u6392\u9664 conhost\u3002\r\n\r\n return new Promise((resolve) => {\r\n const timeout = setTimeout(() => {\r\n cleanup();\r\n resolve({ isModern: false, debugInfo: \"timeout_no_response\" }); // \u8001\u5F0F\u7EC8\u7AEF\u4E0D\u4F1A\u54CD\u5E94\uFF0C\u8D85\u65F6\u5219\u8BA4\u4E3A\u4E0D\u652F\u6301\r\n }, 300);\r\n\r\n function cleanup() {\r\n clearTimeout(timeout);\r\n process.stdin.removeListener(\"data\", onData);\r\n if (process.stdin.isTTY) (process.stdin as tty.ReadStream).setRawMode(false);\r\n process.stdin.pause();\r\n }\r\n\r\n function onData(data: Buffer) {\r\n cleanup();\r\n const response = data.toString();\r\n let isModern = false;\r\n if (process.platform === \"win32\") {\r\n // \u5728 Windows \u4E0A\uFF0C\u8981\u6C42\u5FC5\u987B\u54CD\u5E94 OSC 11 \u624D\u662F\u73B0\u4EE3\u7EC8\u7AEF\r\n isModern = response.includes(\"\\x1b]11;\");\r\n } else {\r\n // Unix \u7CFB\u7EDF\u4E0B\u517C\u5BB9 DA1/DA2 \u6216 OSC 11 \u54CD\u5E94\r\n isModern = response.includes(\"\\x1b[?\") || response.includes(\"\\x1b[>\") || response.includes(\"\\x1b]11;\");\r\n }\r\n resolve({ isModern, debugInfo: JSON.stringify(response) });\r\n }\r\n\r\n try {\r\n process.stdin.resume();\r\n if (process.stdin.isTTY) (process.stdin as tty.ReadStream).setRawMode(true);\r\n process.stdin.once(\"data\", onData);\r\n\r\n // \u540C\u65F6\u53D1\u9001 DA1 (\\x1b[c) \u548C OSC 11 \u67E5\u8BE2\u80CC\u666F\u8272 (\\x1b]11;?\\x1b\\\\)\r\n process.stdout.write(\"\\x1b[c\\x1b]11;?\\x1b\\\\\");\r\n } catch (e) {\r\n cleanup();\r\n resolve({ isModern: false, debugInfo: `error_${String(e)}` });\r\n }\r\n });\r\n}\r\n\r\nexport async function loginCMTokenOAuth(params: {\r\n openUrl: (url: string) => Promise<void>;\r\n note: (message: string, title?: string) => Promise<void>;\r\n progress: { update: (message: string) => void; stop: (message?: string) => void };\r\n runtime?: { log: (message: string) => void; error: (message: string) => void };\r\n region?: CMTokenRegion;\r\n config?: { oauthBaseUrl?: string, clientId?: string };\r\n}): Promise<CMTokenOAuthToken> {\r\n const endpoints = getOAuthEndpoints(params.config);\r\n const log = params.runtime?.log ?? console.log;\r\n const error = params.runtime?.error ?? console.error;\r\n\r\n params.progress.update(\"\u6B63\u5728\u521D\u59CB\u5316 CMToken OAuth...\");\r\n\r\n let oauth: CMTokenOAuthAuthorization;\r\n const { verifier, challenge, state } = generatePkce();\r\n\r\n try {\r\n params.progress.update(\"\u6B63\u5728\u4ECE\u670D\u52A1\u5668\u83B7\u53D6\u8EAB\u4EFD\u9A8C\u8BC1\u94FE\u63A5...\");\r\n oauth = await requestDeviceCode({ challenge, state, config: params.config });\r\n } catch (err) {\r\n // Graceful Fallback: Show a generic QR even if the fetch fails\r\n const fallbackUrl = endpoints.baseUrl;\r\n const fallbackQr = await renderQrAscii(fallbackUrl);\r\n const errorMsg = err instanceof Error ? err.message : String(err);\r\n\r\n const fallbackLines = [\r\n `\uD83D\uDEA8 **\u8EAB\u4EFD\u9A8C\u8BC1\u8FDE\u63A5\u5931\u8D25**`,\r\n \"\",\r\n `\u9519\u8BEF\u8BE6\u60C5: ${errorMsg}`,\r\n \"\",\r\n \"\u7531\u4E8E\u7F51\u7EDC\u6216\u5B89\u5168\u62E6\u622A\uFF0C\u65E0\u6CD5\u83B7\u53D6\u52A8\u6001\u4E8C\u7EF4\u7801\u3002\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8FDE\u63A5\u5E76\u5C1D\u8BD5\u5728\u7EC8\u7AEF\u67E5\u770B\u9A8C\u8BC1\u94FE\u63A5\u3002\",\r\n `\u8BBF\u95EE\u5730\u5740: [${fallbackUrl}](${fallbackUrl})`,\r\n ];\r\n\r\n await params.note(fallbackLines.join(\"\\n\"), \"CMToken \u8BA4\u8BC1\u5931\u8D25 (\u5907\u9009\u65B9\u6848)\");\r\n throw err;\r\n }\r\n\r\n const verificationUrl = oauth.verification_uri_complete ?? oauth.verification_uri;\r\n const isWindows = os.platform() === \"win32\";\r\n\r\n // \u901A\u8FC7\u53D1\u9001 ANSI \u8BBE\u5907\u67E5\u8BE2\u7801\u63A2\u6D4B\u662F\u5426\u4E3A\u73B0\u4EE3\u7EC8\u7AEF\r\n let isModernTerminal = true;\r\n if (isWindows) {\r\n const detection = await detectModernTerminal();\r\n isModernTerminal = detection.isModern;\r\n }\r\n \r\n // \u5BF9\u4E8E\u8001\u5F0F\u7EC8\u7AEF\uFF0C\u5173\u95ED small \u6A21\u5F0F\uFF08\u4F7F\u7528\u5168\u65B9\u5757\u5B57\u7B26\uFF09\uFF0C\u867D\u7136\u56FE\u6848\u8F83\u5927\uFF0C\u4F46\u80FD\u5B8C\u7F8E\u517C\u5BB9\u65E7\u7248 conhost \u5B57\u4F53\r\n const qrAscii = await renderQrAscii(verificationUrl, isModernTerminal);\r\n\r\n const noteLines = [\r\n `\u9A8C\u8BC1\u5730\u5740: ${verificationUrl}`,\r\n `\u7528\u6237\u4EE3\u7801: ${oauth.user_code}`,\r\n `\u8BF7\u626B\u63CF\u4E0A\u65B9\u4E8C\u7EF4\u7801\uFF0C\u6216\u590D\u5236\u94FE\u63A5\u5728\u6D4F\u89C8\u5668\u4E2D\u6388\u6743\u3002`,\r\n ];\r\n\r\n log(qrAscii);\r\n await params.note(noteLines.join(\"\\n\"), \"CMToken OAuth \u767B\u5F55\");\r\n\r\n // \u6682\u505C\u52A0\u8F7D\u52A8\u753B\uFF0C\u9632\u6B62\u4E0D\u65AD\u5237\u65B0\u7684\u8F93\u51FA\u5BFC\u81F4\u7EC8\u7AEF\u4E00\u76F4\u81EA\u52A8\u6EDA\u52A8\u5230\u5E95\u90E8\r\n params.progress.stop(\"\u7B49\u5F85\u626B\u7801\u6388\u6743\u4E2D...\uFF08\u53EF\u81EA\u7531\u5411\u4E0A\u6EDA\u52A8\u67E5\u770B\u4E8C\u7EF4\u7801\uFF09\");\r\n\r\n let pollIntervalMs = oauth.interval ? oauth.interval * 1000 : 2000;\r\n const expireTimeMs = Date.now() + oauth.expires_in * 1000;\r\n\r\n while (Date.now() < expireTimeMs) {\r\n // \u4E0D\u518D\u8C03\u7528 update \u5237\u65B0\u52A8\u753B\uFF0C\u4FDD\u6301\u7EC8\u7AEF\u9759\u6B62\r\n const result = await pollOAuthToken({\r\n deviceCode: oauth.device_code,\r\n verifier,\r\n config: params.config,\r\n });\r\n\r\n if (result.status === \"success\") {\r\n return result.token;\r\n }\r\n\r\n if (result.status === \"error\") {\r\n throw new Error(result.message);\r\n }\r\n\r\n if (result.message?.includes(\"slow down\")) {\r\n pollIntervalMs = Math.min(pollIntervalMs + 1000, 4000);\r\n }\r\n\r\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\r\n }\r\n\r\n throw new Error(\"CMToken OAuth \u5728\u6388\u6743\u5B8C\u6210\u524D\u8D85\u65F6\u3002\");\r\n}\r\n\r\nexport async function refreshCMTokenToken(params: {\r\n refreshToken: string;\r\n config?: { oauthBaseUrl?: string, clientId?: string };\r\n}): Promise<CMTokenOAuthToken> {\r\n const endpoints = getOAuthEndpoints(params.config);\r\n\r\n ensureOAuthDispatcher();\r\n\r\n const res = await fetch(endpoints.tokenEndpoint, {\r\n method: \"POST\",\r\n signal: AbortSignal.timeout(OAUTH_TIMEOUT_MS),\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n Accept: \"application/json\",\r\n },\r\n body: new URLSearchParams({\r\n grant_type: \"refresh_token\",\r\n client_id: endpoints.clientId,\r\n refresh_token: params.refreshToken,\r\n }),\r\n });\r\n\r\n const text = await res.text();\r\n\r\n if (!res.ok) {\r\n throw new Error(`CMToken OAuth refresh failed: ${text || res.status}`);\r\n }\r\n\r\n const payload = JSON.parse(text) as TokenResponsePayload;\r\n\r\n if (payload.error) {\r\n throw new Error(`CMToken OAuth refresh failed: ${payload.error_description || payload.error}`);\r\n }\r\n\r\n if (!payload.access_token || !payload.refresh_token || !payload.expires_in) {\r\n throw new Error(\"CMToken OAuth refresh returned incomplete token payload.\");\r\n }\r\n\r\n return {\r\n access: payload.access_token,\r\n refresh: payload.refresh_token,\r\n expires: Date.now() + payload.expires_in * 1000,\r\n resourceUrl: payload.resource_url,\r\n notification_message: payload.notification_message,\r\n };\r\n}\r\n\r\n\r\nexport async function fetchCMTokenOAuthModels(params: {\r\n accessToken: string;\r\n baseUrl: string;\r\n}): Promise<Array<{ id: string; name: string; context_window?: number }>> {\r\n const apiBaseUrl = params.baseUrl;\r\n\r\n const response = await fetch(`${apiBaseUrl}/models`, {\r\n signal: AbortSignal.timeout(OAUTH_TIMEOUT_MS),\r\n headers: {\r\n Authorization: `Bearer ${params.accessToken}`,\r\n Accept: \"application/json\",\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n const text = await response.text();\r\n throw new Error(`Failed to fetch models: ${text || response.statusText}`);\r\n }\r\n\r\n const data = (await response.json()) as {\r\n data?: Array<{ id: string; name?: string; context_window?: number }>;\r\n };\r\n\r\n return (data.data ?? []).map((model) => ({\r\n id: model.id,\r\n name: model.name ?? model.id,\r\n context_window: model.context_window,\r\n }));\r\n}\r\n", "export { loginCMTokenOAuth, fetchCMTokenOAuthModels, refreshCMTokenToken } from \"./oauth.js\";\r\n", "import { type ModelDefinitionConfig } from \"openclaw/plugin-sdk/provider-onboard\";\n\n// This is a last-resort fallback. Discovery-first policy ensures we always\n// prefer the first model returned by the API during setup.\nexport const CMTOKEN_DEFAULT_MODEL_ID = \"minimax-m25\";\nexport const CMTOKEN_DEFAULT_MODEL_REF = `cmtoken/${CMTOKEN_DEFAULT_MODEL_ID}`;\n\nexport const CMTOKEN_MODEL_ORDER = [\"minimax-m25\"] as const;\n\nexport const CMTOKEN_MODEL_CATALOG = {\n \"minimax-m25\": {\n name: \"minimax-m25\",\n reasoning: false,\n contextWindow: 192000,\n maxTokens: 8192,\n },\n} as const;\n\nexport const STATIC_MODELS: ModelDefinitionConfig[] = [\n {\n id: \"minimax-m25\",\n name: \"minimax-m25\",\n reasoning: false,\n input: [\"text\" as const],\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n contextWindow: 192000,\n maxTokens: 8192,\n }\n];\n\nexport function isCMTokenModernModelId(modelId: string): boolean {\n return !!modelId;\n}\n", "import type { ModelDefinitionConfig } from \"openclaw/plugin-sdk/provider-onboard\";\r\nimport { STATIC_MODELS } from \"./provider-models.js\";\r\n\r\nexport class CMTokenSubscriptionError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"CMTokenSubscriptionError\";\r\n }\r\n}\r\n\r\nexport class CMTokenDiscoveryError extends Error {\r\n public status: number;\r\n constructor(message: string, status: number) {\r\n super(message);\r\n this.name = \"CMTokenDiscoveryError\";\r\n this.status = status;\r\n }\r\n}\r\n\r\nexport async function fetchCMTokenModels(\r\n url: string,\r\n timeoutMs: number = 15000,\r\n token?: string\r\n): Promise<ModelDefinitionConfig[]> {\r\n if (!token) {\r\n return STATIC_MODELS;\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\r\n\r\n const headers: Record<string, string> = { \"Accept\": \"application/json\" };\r\n if (token) {\r\n headers[\"Authorization\"] = `Bearer ${token}`;\r\n }\r\n\r\n const response = await fetch(url, {\r\n signal: controller.signal,\r\n headers\r\n });\r\n\r\n clearTimeout(timeout);\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text().catch(() => \"N/A\");\r\n\r\n // Handle subscription error specifically (not in plan or expired)\r\n const isSubscriptionError = response.status === 403 &&\r\n (errorText.includes(\"\u8BA2\u9605\u5957\u9910\") || errorText.includes(\"\u8BA2\u9605\u5DF2\u8FC7\u671F\") || errorText.includes(\"\u4F59\u989D\u4E0D\u8DB3\"));\r\n\r\n if (isSubscriptionError) {\r\n console.warn(`[CMToken] Subscription issue: ${errorText}`);\r\n throw new CMTokenSubscriptionError(errorText);\r\n }\r\n\r\n if (response.status !== 401 && response.status !== 400) {\r\n console.error(`[CMToken] Fetch models failed (${response.status}): ${errorText.slice(0, 200)}`);\r\n }\r\n throw new CMTokenDiscoveryError(errorText, response.status);\r\n }\r\n\r\n const data = await response.json();\r\n const modelsArray = Array.isArray(data.models) ? data.models : (data.data && Array.isArray(data.data) ? data.data : null);\r\n\r\n if (modelsArray) {\r\n return modelsArray;\r\n }\r\n\r\n if (data && data.code && data.code !== 100200) {\r\n const msg = data.msg || data.message || \"Unknown error\";\r\n if (data.code === 403 && msg.includes(\"\u8BA2\u9605\u5957\u9910\")) {\r\n throw new CMTokenSubscriptionError(msg);\r\n }\r\n if (data.code !== 100401 && data.code !== 401) {\r\n console.error(`[CMToken] Models API returned error code ${data.code}: ${msg}`);\r\n }\r\n }\r\n\r\n return STATIC_MODELS;\r\n } catch (err: any) {\r\n if (err instanceof CMTokenSubscriptionError) {\r\n throw err;\r\n }\r\n if (!(err instanceof CMTokenDiscoveryError && (err.status === 401 || err.status === 400)) && !(err.message && (err.message.includes(\"100401\") || err.message.includes(\"\u7528\u6237\u672A\u767B\u5F55\")))) {\r\n throw new CMTokenDiscoveryError(err.message || String(err), err.status || 0);\r\n }\r\n return STATIC_MODELS;\r\n }\r\n}\r\n", "import { definePluginEntry } from \"openclaw/plugin-sdk/plugin-entry\";\nimport { registerCMTokenProviders } from \"./provider-registration.js\";\n\nexport default definePluginEntry({\n id: \"cmtoken\",\n name: \"CMToken\",\n description: \"CMToken provider plugin with OAuth support (browser and QR code)\",\n register(api) {\n registerCMTokenProviders(api);\n },\n});\n", "import { formatErrorMessage } from \"openclaw/plugin-sdk/error-runtime\";\r\nimport type {\r\n OpenClawPluginApi,\r\n ProviderAuthContext,\r\n ProviderAuthResult,\r\n ProviderCatalogContext,\r\n} from \"openclaw/plugin-sdk/plugin-entry\";\r\nimport {\r\n buildOauthProviderAuthResult,\r\n} from \"openclaw/plugin-sdk/provider-auth\";\r\n\r\nimport { CMTOKEN_DEFAULT_MODEL_ID } from \"./provider-models.js\";\r\n\r\nconst PROVIDER_ID = \"cmtoken\";\r\nconst PROVIDER_LABEL = \"CMToken\";\r\n\r\nconst DEFAULT_DISCOVERY_URL = \"https://maas.gd.chinamobile.com:36007/ai/uifm/open/v1/models\";\r\nconst DEFAULT_BASE_URL = \"https://maas.gd.chinamobile.com:36007/ai/uifm/open/v1\";\r\n\r\nconst INLINED_STATIC_MODELS: any[] = [];\r\n\r\n// \u4FDD\u5B58 wizard \u914D\u7F6E\u7684\u5F15\u7528\uFF0C\u65B9\u4FBF\u6211\u4EEC\u5728\u8BF7\u6C42\u5230\u6A21\u578B\u540E\u52A8\u6001\u6CE8\u5165 modelAllowlist\uFF0C\u4EE5\u7ED5\u8FC7\u8017\u65F6\u7684\u5168\u5C40\u63D2\u4EF6\u52A0\u8F7D\r\nconst CMTOKEN_API_KEY_WIZARD_CONFIG: any = {\r\n choiceId: \"cmtoken-api-key\",\r\n choiceLabel: \"CMToken API Key\",\r\n groupId: PROVIDER_ID,\r\n groupLabel: PROVIDER_LABEL,\r\n groupHint: \"CMToken AI \u6A21\u578B\",\r\n modelAllowlist: {\r\n allowedKeys: [\r\n `${PROVIDER_ID}/minimax-m25`,\r\n `${PROVIDER_ID}/qwen36-35b`,\r\n `${PROVIDER_ID}/deepseekv4-flash`,\r\n `${PROVIDER_ID}/deepseek-r1`,\r\n `${PROVIDER_ID}/deepseek-v3`,\r\n `${PROVIDER_ID}/qwen-max`,\r\n `${PROVIDER_ID}/qwen-turbo`\r\n ]\r\n }\r\n};\r\n\r\nasync function resolveApiCatalog(ctx: ProviderCatalogContext) {\r\n const config = ctx.config as any;\r\n\r\n // FAST PATH: Use models already saved in config (from OAuth/API Key setup) to avoid slow duplicate fetch on startup\r\n const providerModels = config.models?.providers?.[PROVIDER_ID]?.models;\r\n if (providerModels && Array.isArray(providerModels) && providerModels.length > 0) {\r\n return { provider: { baseUrl: config.baseUrl || DEFAULT_BASE_URL, api: \"openai-completions\" as const, models: providerModels } };\r\n }\r\n\r\n // STATIC FALLBACK: Do not perform network requests during provider discovery to prevent blocking the OpenClaw CLI for up to 4 minutes on Windows.\r\n // The real models will be fetched and saved during the 'configure' setup flow.\r\n return { provider: { baseUrl: config.baseUrl || DEFAULT_BASE_URL, api: \"openai-completions\" as const, models: INLINED_STATIC_MODELS.map(m => ({ ...m })) } };\r\n}\r\n\r\nfunction augmentCMTokenCatalog(ctx: any): any[] {\r\n return INLINED_STATIC_MODELS.map(m => ({ ...m, provider: PROVIDER_ID }));\r\n}\r\n\r\nasync function selectCMTokenDefaultModel(ctx: ProviderAuthContext, models: any[]): Promise<string | undefined> {\r\n if (models.length > 0) {\r\n let currentDefault = \"\u65E0\";\r\n const cfgModel = (ctx.config as any)?.agents?.defaults?.model;\r\n if (typeof cfgModel === \"string\") {\r\n currentDefault = cfgModel;\r\n } else if (cfgModel && typeof cfgModel === \"object\" && cfgModel.primary) {\r\n currentDefault = cfgModel.primary;\r\n } else if (cfgModel && typeof cfgModel === \"object\" && cfgModel.model) {\r\n currentDefault = `${cfgModel.provider || \"unknown\"}/${cfgModel.model}`;\r\n }\r\n\r\n const options: any[] = [];\r\n if (currentDefault !== \"\u65E0\") {\r\n options.push({ value: \"skip\", label: `\u4FDD\u6301\u539F\u6709\u9ED8\u8BA4\u6A21\u578B (Keep current default: ${currentDefault})` });\r\n }\r\n options.push(...models.map(m => ({ value: `${PROVIDER_ID}/${m.id}`, label: m.name || m.id })));\r\n\r\n const selected = await ctx.prompter.select({\r\n message: \"\u8BF7\u9009\u62E9\u9ED8\u8BA4\u4F7F\u7528\u54EA\u4E2A\u6A21\u578B\uFF1F(Select Default Model)\",\r\n options,\r\n initialValue: currentDefault !== \"\u65E0\" ? \"skip\" : options[0]?.value,\r\n });\r\n if (selected === \"skip\") {\r\n return undefined;\r\n }\r\n if (typeof selected === \"string\") {\r\n return selected;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nasync function runCMTokenOAuth(ctx: ProviderAuthContext): Promise<ProviderAuthResult> {\r\n const progress = ctx.prompter.progress(`\u6B63\u5728\u542F\u52A8 CMToken OAuth\u2026`);\r\n try {\r\n const { loginCMTokenOAuth } = await import(\"./oauth.runtime.js\");\r\n const config = ctx.config as any;\r\n const result = await loginCMTokenOAuth({\r\n openUrl: ctx.openUrl,\r\n note: ctx.prompter.note,\r\n progress,\r\n runtime: (ctx as any).runtime,\r\n config: {\r\n oauthBaseUrl: config.oauthBaseUrl,\r\n clientId: config.clientId,\r\n }\r\n });\r\n progress.stop(\"CMToken OAuth \u5B8C\u6210\");\r\n\r\n const discoveryUrl = config.discoveryUrl || DEFAULT_DISCOVERY_URL;\r\n const { fetchCMTokenModels, CMTokenSubscriptionError, CMTokenDiscoveryError } = await import(\"./discovery.js\");\r\n let rawModels: any[] = [];\r\n try {\r\n rawModels = await fetchCMTokenModels(discoveryUrl, 15000, result.access);\r\n } catch (err) {\r\n if (err instanceof CMTokenSubscriptionError) {\r\n throw err;\r\n } else if (err instanceof CMTokenDiscoveryError) {\r\n throw new Error(`\u6A21\u578B\u5217\u8868\u83B7\u53D6\u5931\u8D25 (\u72B6\u6001\u7801: ${err.status})\u3002\u8FD9\u53EF\u80FD\u662F\u7531\u4E8E\u7F51\u7EDC\u6CE2\u52A8\u6216\u670D\u52A1\u7AEF\u6682\u65F6\u4E0D\u53EF\u7528\u5F15\u8D77\u7684\uFF0C\u914D\u7F6E\u6D41\u7A0B\u5DF2\u4E2D\u65AD\u3002\\n\\n\u8BE6\u60C5: ${err.message}`);\r\n }\r\n throw err;\r\n }\r\n\r\n const models = rawModels.map((m: any) => ({\r\n id: m.id,\r\n name: m.name || m.id,\r\n reasoning: false,\r\n input: [\"text\" as const],\r\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\r\n contextWindow: m.contextWindow || 192000,\r\n maxTokens: m.maxTokens || 8192,\r\n }));\r\n\r\n let finalModels = models;\r\n\r\n if (finalModels && finalModels.length > 0) {\r\n dynamicModelAllowlist = finalModels.map((m: any) => m.id.includes('/') ? m.id : `${PROVIDER_ID}/${m.id}`);\r\n }\r\n\r\n const primaryModelId = await selectCMTokenDefaultModel(ctx, finalModels);\r\n\r\n return {\r\n profiles: [{\r\n profileId: `${PROVIDER_ID}:default`,\r\n credential: {\r\n provider: PROVIDER_ID,\r\n type: \"oauth\",\r\n access: result.access,\r\n refresh: result.refresh,\r\n expires: result.expires,\r\n } as any,\r\n }],\r\n configPatch: {\r\n models: {\r\n providers: {\r\n [PROVIDER_ID]: { baseUrl: result.resourceUrl || config.baseUrl || DEFAULT_BASE_URL, api: \"openai-completions\" as const, models: finalModels }\r\n }\r\n },\r\n ...(primaryModelId ? {\r\n agents: {\r\n defaults: {\r\n model: {\r\n primary: primaryModelId\r\n }\r\n }\r\n }\r\n } : {})\r\n } as any,\r\n };\r\n } catch (err: any) {\r\n const errorMsg = formatErrorMessage(err);\r\n progress.stop(`CMToken OAuth \u5931\u8D25: ${errorMsg}`);\r\n throw err;\r\n }\r\n}\r\n\r\n// Module-level cache to store dynamically fetched models during the run() phase.\r\n// OpenClaw evaluates the plugin registry again after run() completes, so this\r\n// will inject the precise dynamic models into the wizard bypass.\r\nlet dynamicModelAllowlist: string[] | undefined = undefined;\r\n\r\nexport function registerCMTokenProviders(api: OpenClawPluginApi) {\r\n const allowedKeys = dynamicModelAllowlist;\r\n\r\n api.registerProvider({\r\n id: PROVIDER_ID,\r\n label: PROVIDER_LABEL,\r\n docsPath: \"/plugins/cmtoken\",\r\n auth: [\r\n {\r\n id: \"api-key\",\r\n label: \"CMToken API Key\",\r\n hint: \"\u4F7F\u7528 API Key \u8FDB\u884C\u8BA4\u8BC1\",\r\n kind: \"api_key\",\r\n wizard: CMTOKEN_API_KEY_WIZARD_CONFIG,\r\n async run(ctx: any) {\r\n const {\r\n ensureApiKeyFromOptionEnvOrPrompt,\r\n buildApiKeyCredential,\r\n normalizeApiKeyInput,\r\n validateApiKeyInput\r\n } = await import(\"openclaw/plugin-sdk/provider-auth\");\r\n\r\n let capturedSecretInput: any;\r\n let capturedMode: any;\r\n\r\n await (ensureApiKeyFromOptionEnvOrPrompt as any)({\r\n token: ctx.opts?.token,\r\n tokenProvider: ctx.opts?.tokenProvider,\r\n secretInputMode: ctx.allowSecretRefPrompt === false ? (ctx.secretInputMode ?? \"plaintext\") : ctx.secretInputMode,\r\n config: ctx.config,\r\n env: ctx.env,\r\n expectedProviders: [PROVIDER_ID],\r\n provider: PROVIDER_ID,\r\n promptMessage: \"\u8BF7\u8F93\u5165 CMToken API Key\",\r\n normalize: normalizeApiKeyInput,\r\n validate: validateApiKeyInput,\r\n prompter: ctx.prompter,\r\n setCredential: async (apiKey: string, mode: any) => {\r\n capturedSecretInput = apiKey;\r\n capturedMode = mode;\r\n },\r\n });\r\n\r\n const profileId = `${PROVIDER_ID}:default`;\r\n const credential = buildApiKeyCredential(PROVIDER_ID, capturedSecretInput, {}, {\r\n secretInputMode: capturedMode,\r\n config: ctx.config\r\n });\r\n\r\n const config = ctx.config as any;\r\n const discoveryUrl = config.discoveryUrl || DEFAULT_DISCOVERY_URL;\r\n let models: any[] = [];\r\n try {\r\n const { fetchCMTokenModels } = await import(\"./discovery.js\");\r\n const rawModels = await fetchCMTokenModels(discoveryUrl, 15000, capturedSecretInput);\r\n if (rawModels && Array.isArray(rawModels) && rawModels.length > 0) {\r\n models = rawModels.map((m: any) => ({\r\n id: m.id,\r\n name: m.name || m.id,\r\n reasoning: false,\r\n input: [\"text\" as const],\r\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\r\n contextWindow: m.contextWindow || 192000,\r\n maxTokens: m.maxTokens || 8192,\r\n }));\r\n if (models && models.length > 0) {\r\n dynamicModelAllowlist = models.map((m: any) => `${PROVIDER_ID}/${m.id}`);\r\n }\r\n }\r\n } catch (discoveryErr: any) {\r\n if (discoveryErr instanceof Error) {\r\n throw discoveryErr;\r\n }\r\n throw new Error(`\u6A21\u578B\u5217\u8868\u83B7\u53D6\u5931\u8D25\u3002\u914D\u7F6E\u6D41\u7A0B\u5DF2\u4E2D\u65AD\u3002`);\r\n }\r\n\r\n const primaryModelId = await selectCMTokenDefaultModel(ctx, models);\r\n\r\n // No longer caching dynamically here.\r\n\r\n return {\r\n configPatch: {\r\n models: {\r\n providers: {\r\n [PROVIDER_ID]: { baseUrl: config.baseUrl || DEFAULT_BASE_URL, api: \"openai-completions\" as const, models }\r\n }\r\n },\r\n ...(primaryModelId ? {\r\n agents: {\r\n defaults: {\r\n model: {\r\n primary: primaryModelId\r\n }\r\n }\r\n }\r\n } : {})\r\n } as any,\r\n profiles: [\r\n { profileId, credential }\r\n ],\r\n };\r\n }\r\n } as any,\r\n {\r\n id: \"oauth\",\r\n label: \"CMToken OAuth\",\r\n hint: \"\u901A\u8FC7\u79FB\u52A8\u8BA4\u8BC1\u6D4F\u89C8\u5668\u6D41\u767B\u5F55\",\r\n kind: \"device_code\",\r\n run: runCMTokenOAuth,\r\n applyConfig: (cfg: any) => ({\r\n ...cfg,\r\n models: {\r\n ...cfg.models,\r\n providers: {\r\n ...cfg.models?.providers,\r\n [PROVIDER_ID]: { baseUrl: DEFAULT_BASE_URL, api: \"openai-completions\", models: INLINED_STATIC_MODELS }\r\n }\r\n },\r\n // We no longer manually touch cfg.agents.defaults.models here to prevent overwrites.\r\n }),\r\n wizard: {\r\n choiceId: \"cmtoken-oauth\",\r\n choiceLabel: \"CMToken OAuth\",\r\n groupId: PROVIDER_ID,\r\n groupLabel: PROVIDER_LABEL,\r\n groupHint: \"CMToken AI \u6A21\u578B\",\r\n },\r\n } as any,\r\n ],\r\n wizard: {\r\n setup: {\r\n modelAllowlist: { \r\n allowedKeys,\r\n loadCatalog: false\r\n }\r\n }\r\n },\r\n catalog: { order: \"simple\", run: async (ctx: any) => resolveApiCatalog(ctx) },\r\n augmentModelCatalog: (ctx: any) => augmentCMTokenCatalog(ctx),\r\n async refreshOAuth(cred: any) {\r\n const { refreshCMTokenToken } = await import(\"./oauth.js\");\r\n // Use defaults if config is not easily accessible here; \r\n // but usually the plugin can access its own config if needed.\r\n try {\r\n const result = await refreshCMTokenToken({ refreshToken: cred.refresh });\r\n // Invalidate discovery cache logic removed\r\n return {\r\n ...cred,\r\n access: result.access,\r\n refresh: result.refresh,\r\n expires: result.expires,\r\n };\r\n } catch (err) {\r\n console.error(`[CMToken] refreshOAuth failed:`, err);\r\n throw err;\r\n }\r\n },\r\n classifyFailoverReason(ctx: any) {\r\n const errorMsg = ctx.error?.message || String(ctx.error);\r\n if (errorMsg.includes(\"\u8BA2\u9605\u5957\u9910\") || errorMsg.includes(\"\u8BA2\u9605\u5DF2\u8FC7\u671F\") || errorMsg.includes(\"\u4F59\u989D\u4E0D\u8DB3\")) {\r\n return \"billing\";\r\n }\r\n return undefined;\r\n },\r\n });\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": ["require_QRMode", "__commonJSMin", "exports", "module", "require_QR8bitByte", "__commonJSMin", "exports", "module", "QRMode", "QR8bitByte", "data", "buffer", "i", "require_QRMath", "__commonJSMin", "exports", "module", "QRMath", "n", "i", "require_QRPolynomial", "__commonJSMin", "exports", "module", "QRMath", "QRPolynomial", "num", "shift", "offset", "i", "index", "j", "ratio", "x", "require_QRMaskPattern", "__commonJSMin", "exports", "module", "require_QRUtil", "__commonJSMin", "exports", "module", "QRMode", "QRPolynomial", "QRMath", "QRMaskPattern", "QRUtil", "data", "d", "digit", "typeNumber", "maskPattern", "i", "j", "errorCorrectLength", "a", "mode", "type", "qrCode", "moduleCount", "lostPoint", "row", "col", "sameCount", "dark", "r", "c", "count", "darkCount", "ratio", "require_QRErrorCorrectLevel", "__commonJSMin", "exports", "module", "require_QRRSBlock", "__commonJSMin", "exports", "module", "QRErrorCorrectLevel", "QRRSBlock", "totalCount", "dataCount", "typeNumber", "errorCorrectLevel", "rsBlock", "length", "list", "i", "count", "j", "require_QRBitBuffer", "__commonJSMin", "exports", "module", "QRBitBuffer", "index", "bufIndex", "num", "length", "i", "bit", "require_QRCode", "__commonJSMin", "exports", "module", "QR8bitByte", "QRUtil", "QRPolynomial", "QRRSBlock", "QRBitBuffer", "QRCode", "typeNumber", "errorCorrectLevel", "data", "newData", "row", "col", "rsBlocks", "buffer", "totalDataCount", "i", "x", "test", "maskPattern", "c", "minLostPoint", "pattern", "lostPoint", "target_mc", "instance_name", "depth", "qr_mc", "cs", "y", "dark", "r", "pos", "j", "bits", "mod", "v", "h", "inc", "bitIndex", "byteIndex", "mask", "dataList", "offset", "maxDcCount", "maxEcCount", "dcdata", "ecdata", "dcCount", "ecCount", "rsPoly", "rawPoly", "modPoly", "modIndex", "totalCodeCount", "index", "z", "s", "xx", "t", "require_main", "__commonJSMin", "exports", "module", "QRCode", "QRErrorCorrectLevel", "black", "white", "toCell", "isBlack", "repeat", "color", "count", "fill", "length", "value", "arr", "i", "input", "opts", "cb", "qrcode", "output", "BLACK", "WHITE", "moduleCount", "moduleData", "oddRow", "platte", "borderTop", "borderBottom", "row", "col", "border", "error", "oauth_exports", "__export", "fetchCMTokenOAuthModels", "loginCMTokenOAuth", "refreshCMTokenToken", "randomBytes", "randomUUID", "createHash", "os", "ensureOAuthDispatcher", "ensureGlobalUndiciEnvProxyDispatcher", "getOAuthEndpoints", "config", "baseUrl", "CMTOKEN_OAUTH_DEFAULT_CONFIG", "clientId", "generatePkce", "verifier", "challenge", "state", "requestDeviceCode", "params", "endpoints", "res", "OAUTH_TIMEOUT_MS", "CMTOKEN_OAUTH_SCOPE", "text", "payload", "err", "pollOAuthToken", "CMTOKEN_OAUTH_GRANT_TYPE", "renderQrAscii", "data", "isSmall", "resolve", "qrcode", "output", "detectModernTerminal", "timeout", "cleanup", "onData", "response", "isModern", "e", "log", "error", "oauth", "fallbackUrl", "fallbackQr", "fallbackLines", "verificationUrl", "isWindows", "isModernTerminal", "qrAscii", "noteLines", "pollIntervalMs", "expireTimeMs", "result", "apiBaseUrl", "model", "import_qrcode_terminal", "hostname", "init_oauth", "__esmMin", "oauth_runtime_exports", "__export", "fetchCMTokenOAuthModels", "loginCMTokenOAuth", "refreshCMTokenToken", "init_oauth_runtime", "__esmMin", "init_oauth", "CMTOKEN_DEFAULT_MODEL_ID", "CMTOKEN_DEFAULT_MODEL_REF", "STATIC_MODELS", "init_provider_models", "__esmMin", "discovery_exports", "__export", "CMTokenDiscoveryError", "CMTokenSubscriptionError", "fetchCMTokenModels", "url", "timeoutMs", "token", "STATIC_MODELS", "controller", "timeout", "headers", "response", "errorText", "data", "modelsArray", "msg", "err", "init_discovery", "__esmMin", "init_provider_models", "message", "status", "definePluginEntry", "formatErrorMessage", "PROVIDER_ID", "PROVIDER_LABEL", "DEFAULT_DISCOVERY_URL", "DEFAULT_BASE_URL", "INLINED_STATIC_MODELS", "CMTOKEN_API_KEY_WIZARD_CONFIG", "resolveApiCatalog", "ctx", "config", "providerModels", "m", "augmentCMTokenCatalog", "selectCMTokenDefaultModel", "models", "currentDefault", "cfgModel", "options", "selected", "runCMTokenOAuth", "progress", "loginCMTokenOAuth", "result", "discoveryUrl", "fetchCMTokenModels", "CMTokenSubscriptionError", "CMTokenDiscoveryError", "rawModels", "err", "finalModels", "dynamicModelAllowlist", "primaryModelId", "errorMsg", "registerCMTokenProviders", "api", "allowedKeys", "ensureApiKeyFromOptionEnvOrPrompt", "buildApiKeyCredential", "normalizeApiKeyInput", "validateApiKeyInput", "capturedSecretInput", "capturedMode", "apiKey", "mode", "profileId", "credential", "discoveryErr", "cfg", "cred", "refreshCMTokenToken", "index_default", "definePluginEntry", "api", "registerCMTokenProviders"]
7
+ }
package/package.json CHANGED
@@ -1,8 +1,29 @@
1
1
  {
2
2
  "name": "cmtoken",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
+ "files": [
5
+ "dist",
6
+ "openclaw.plugin.json"
7
+ ],
4
8
  "description": "OpenClaw CMToken provider plugin with OAuth support",
5
9
  "type": "module",
10
+ "scripts": {
11
+ "build": "node scripts/build.mjs",
12
+ "pack": "node scripts/build.mjs --pack"
13
+ },
14
+ "devDependencies": {
15
+ "json5": "latest",
16
+ "openclaw": "latest",
17
+ "esbuild": "0.27.4",
18
+ "vitest": "^4.1.2",
19
+ "typescript": "^6.0.2",
20
+ "tsx": "latest",
21
+ "@types/node": "^25.5.2",
22
+ "@types/qrcode-terminal": "^0.12.2"
23
+ },
24
+ "dependencies": {
25
+ "qrcode-terminal": "^0.12.0"
26
+ },
6
27
  "openclaw": {
7
28
  "extensions": [
8
29
  "./dist/index.js"
@@ -21,4 +42,4 @@
21
42
  "openclaw.hooks": [
22
43
  "./dist/index.js"
23
44
  ]
24
- }
45
+ }