@zhin.js/plugin-qrcode 3.0.2 → 3.0.3
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/agent/tools/qrcode_generate.ts +2 -2
- package/commands/[text:string].ts +11 -0
- package/commands/scan/[url:string].ts +28 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/qrcode-lib.js.map +1 -0
- package/package.json +38 -14
- package/plugin.ts +8 -0
- package/schema.json +6 -0
- package/src/index.ts +1 -42
- package/lib/agent/tools/qrcode_generate.js +0 -14
- package/lib/agent/tools/qrcode_generate.js.map +0 -1
- package/lib/src/index.js +0 -34
- package/lib/src/index.js.map +0 -1
- package/lib/src/qrcode-lib.js.map +0 -1
- /package/lib/{src/qrcode-lib.js → qrcode-lib.js} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/agent/tools';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { buildQrImageUrl } from '../../src/qrcode-lib.js';
|
|
4
4
|
|
|
5
|
-
export default
|
|
5
|
+
export default defineAgentTool<{ text: string }>({
|
|
6
6
|
description: '根据文本或 URL 生成二维码图片',
|
|
7
7
|
inputSchema: z.object({ text: z.string().min(1) }),
|
|
8
8
|
keywords: ['二维码', 'QR', 'qrcode'],
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineCommand } from '@zhin.js/command';
|
|
2
|
+
import { raw } from '@zhin.js/core/runtime';
|
|
3
|
+
import { buildQrImageUrl } from '../src/qrcode-lib.js';
|
|
4
|
+
|
|
5
|
+
export default defineCommand({
|
|
6
|
+
description: '根据文本或链接生成二维码图片',
|
|
7
|
+
execute: ({ params }) => raw({
|
|
8
|
+
type: 'image',
|
|
9
|
+
data: { url: buildQrImageUrl(String(params.text)) },
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineCommand } from '@zhin.js/command';
|
|
2
|
+
|
|
3
|
+
const QR_API_BASE = 'https://api.qrserver.com/v1';
|
|
4
|
+
|
|
5
|
+
export default defineCommand({
|
|
6
|
+
description: '识别图片中的二维码内容',
|
|
7
|
+
async execute({ params }) {
|
|
8
|
+
const imageUrl = String(params.url);
|
|
9
|
+
const apiUrl = `${QR_API_BASE}/read-qr-code/?fileurl=${encodeURIComponent(imageUrl)}`;
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(apiUrl);
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
return '二维码识别服务请求失败';
|
|
14
|
+
}
|
|
15
|
+
const data = (await response.json()) as Array<{
|
|
16
|
+
symbol: Array<{ data: string | null; error: string | null }>;
|
|
17
|
+
}>;
|
|
18
|
+
const symbol = data?.[0]?.symbol?.[0];
|
|
19
|
+
if (!symbol || symbol.error || !symbol.data) {
|
|
20
|
+
return `未能识别二维码内容${symbol?.error ? `:${symbol.error}` : ''}`;
|
|
21
|
+
}
|
|
22
|
+
return `识别结果:${symbol.data}`;
|
|
23
|
+
} catch (e) {
|
|
24
|
+
console.warn(`[qrcode] scan failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
25
|
+
return '二维码识别失败,请检查图片链接是否有效';
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
});
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qrcode-lib.js","sourceRoot":"","sources":["../src/qrcode-lib.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,GAAG,WAAW,sCAAsC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/plugin-qrcode",
|
|
3
|
-
"version": "3.0.
|
|
4
|
-
"description": "QR code generator & reader plugin for Zhin.js",
|
|
3
|
+
"version": "3.0.3",
|
|
4
|
+
"description": "QR code generator & reader plugin for Zhin.js (Plugin Runtime)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
7
7
|
"types": "./lib/index.d.ts",
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
"./package.json": "./package.json"
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
|
+
"plugin.ts",
|
|
18
|
+
"schema.json",
|
|
19
|
+
"commands",
|
|
17
20
|
"src",
|
|
18
21
|
"lib",
|
|
19
22
|
"agent",
|
|
@@ -33,16 +36,28 @@
|
|
|
33
36
|
"url": "https://github.com/lc-cn"
|
|
34
37
|
},
|
|
35
38
|
"license": "MIT",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@zhin.js/command": "1.0.1",
|
|
41
|
+
"@zhin.js/plugin-runtime": "1.0.1",
|
|
42
|
+
"@zhin.js/core": "1.3.5"
|
|
43
|
+
},
|
|
36
44
|
"devDependencies": {
|
|
37
45
|
"typescript": "^6.0.3",
|
|
46
|
+
"vitest": "^4.1.10",
|
|
38
47
|
"zod": "^4.4.3",
|
|
39
|
-
"zhin.js": "
|
|
40
|
-
"@zhin.js/agent": "1.0.3"
|
|
48
|
+
"@zhin.js/agent": "1.0.4"
|
|
41
49
|
},
|
|
42
50
|
"peerDependencies": {
|
|
43
51
|
"zod": "^4.0.0",
|
|
44
|
-
"zhin.js": "
|
|
45
|
-
|
|
52
|
+
"@zhin.js/agent": "1.0.4"
|
|
53
|
+
},
|
|
54
|
+
"peerDependenciesMeta": {
|
|
55
|
+
"@zhin.js/agent": {
|
|
56
|
+
"optional": true
|
|
57
|
+
},
|
|
58
|
+
"zod": {
|
|
59
|
+
"optional": true
|
|
60
|
+
}
|
|
46
61
|
},
|
|
47
62
|
"repository": {
|
|
48
63
|
"type": "git",
|
|
@@ -53,17 +68,26 @@
|
|
|
53
68
|
"access": "public",
|
|
54
69
|
"registry": "https://registry.npmjs.org"
|
|
55
70
|
},
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
73
|
+
},
|
|
74
|
+
"zhin": {
|
|
75
|
+
"protocol": 1,
|
|
76
|
+
"type": "plugin",
|
|
77
|
+
"entry": "./plugin.ts",
|
|
78
|
+
"engine": "^1.0.0",
|
|
79
|
+
"runtime": "trusted",
|
|
80
|
+
"features": [
|
|
81
|
+
{
|
|
82
|
+
"package": "@zhin.js/command",
|
|
83
|
+
"api": "^1.0.0"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"plugins": []
|
|
63
87
|
},
|
|
64
88
|
"scripts": {
|
|
65
89
|
"build": "tsc",
|
|
66
90
|
"clean": "rimraf lib",
|
|
67
|
-
"test": "
|
|
91
|
+
"test": "NODE_OPTIONS=--experimental-strip-types vitest run --root ../../.. plugins/utils/qrcode/tests"
|
|
68
92
|
}
|
|
69
93
|
}
|
package/plugin.ts
ADDED
package/schema.json
ADDED
package/src/index.ts
CHANGED
|
@@ -1,42 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { qrImageSegment } from './qrcode-lib.js';
|
|
3
|
-
|
|
4
|
-
const { addCommand, logger } = usePlugin();
|
|
5
|
-
|
|
6
|
-
const QR_API_BASE = 'https://api.qrserver.com/v1';
|
|
7
|
-
|
|
8
|
-
addCommand(
|
|
9
|
-
new MessageCommand('二维码 <text:text>')
|
|
10
|
-
.desc('根据文本或链接生成二维码图片')
|
|
11
|
-
.action(async (_message, result) => {
|
|
12
|
-
const text = result.params.text;
|
|
13
|
-
logger.debug(formatCompact({ op: 'generate', len: text.length }));
|
|
14
|
-
return qrImageSegment(text);
|
|
15
|
-
}),
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
addCommand(
|
|
19
|
-
new MessageCommand('扫码 <url:text>')
|
|
20
|
-
.desc('识别图片中的二维码内容')
|
|
21
|
-
.action(async (_message, result) => {
|
|
22
|
-
const imageUrl = result.params.url;
|
|
23
|
-
const apiUrl = `${QR_API_BASE}/read-qr-code/?fileurl=${encodeURIComponent(imageUrl)}`;
|
|
24
|
-
try {
|
|
25
|
-
const response = await fetch(apiUrl);
|
|
26
|
-
if (!response.ok) {
|
|
27
|
-
return '二维码识别服务请求失败';
|
|
28
|
-
}
|
|
29
|
-
const data = (await response.json()) as Array<{
|
|
30
|
-
symbol: Array<{ data: string | null; error: string | null }>;
|
|
31
|
-
}>;
|
|
32
|
-
const symbol = data?.[0]?.symbol?.[0];
|
|
33
|
-
if (!symbol || symbol.error || !symbol.data) {
|
|
34
|
-
return `未能识别二维码内容${symbol?.error ? `:${symbol.error}` : ''}`;
|
|
35
|
-
}
|
|
36
|
-
return `识别结果:${symbol.data}`;
|
|
37
|
-
} catch (e) {
|
|
38
|
-
logger.warn(formatCompact({ op: 'scan', ok: false, error: e instanceof Error ? e.message : String(e) }));
|
|
39
|
-
return '二维码识别失败,请检查图片链接是否有效';
|
|
40
|
-
}
|
|
41
|
-
}),
|
|
42
|
-
);
|
|
1
|
+
export { buildQrImageUrl, qrImageSegment } from './qrcode-lib.js';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { defineTool } from '@zhin.js/agent/tools';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
import { buildQrImageUrl } from '../../src/qrcode-lib.js';
|
|
4
|
-
export default defineTool({
|
|
5
|
-
description: '根据文本或 URL 生成二维码图片',
|
|
6
|
-
inputSchema: z.object({ text: z.string().min(1) }),
|
|
7
|
-
keywords: ['二维码', 'QR', 'qrcode'],
|
|
8
|
-
tags: ['qrcode', 'image'],
|
|
9
|
-
async execute({ text }) {
|
|
10
|
-
const qrUrl = buildQrImageUrl(text);
|
|
11
|
-
return JSON.stringify([{ type: 'image', data: { url: qrUrl } }]);
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=qrcode_generate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qrcode_generate.js","sourceRoot":"","sources":["../../../agent/tools/qrcode_generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,eAAe,UAAU,CAAmB;IAC1C,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC;IACjC,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;QACpB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;CACF,CAAC,CAAC"}
|
package/lib/src/index.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { formatCompact, MessageCommand, usePlugin } from 'zhin.js';
|
|
2
|
-
import { qrImageSegment } from './qrcode-lib.js';
|
|
3
|
-
const { addCommand, logger } = usePlugin();
|
|
4
|
-
const QR_API_BASE = 'https://api.qrserver.com/v1';
|
|
5
|
-
addCommand(new MessageCommand('二维码 <text:text>')
|
|
6
|
-
.desc('根据文本或链接生成二维码图片')
|
|
7
|
-
.action(async (_message, result) => {
|
|
8
|
-
const text = result.params.text;
|
|
9
|
-
logger.debug(formatCompact({ op: 'generate', len: text.length }));
|
|
10
|
-
return qrImageSegment(text);
|
|
11
|
-
}));
|
|
12
|
-
addCommand(new MessageCommand('扫码 <url:text>')
|
|
13
|
-
.desc('识别图片中的二维码内容')
|
|
14
|
-
.action(async (_message, result) => {
|
|
15
|
-
const imageUrl = result.params.url;
|
|
16
|
-
const apiUrl = `${QR_API_BASE}/read-qr-code/?fileurl=${encodeURIComponent(imageUrl)}`;
|
|
17
|
-
try {
|
|
18
|
-
const response = await fetch(apiUrl);
|
|
19
|
-
if (!response.ok) {
|
|
20
|
-
return '二维码识别服务请求失败';
|
|
21
|
-
}
|
|
22
|
-
const data = (await response.json());
|
|
23
|
-
const symbol = data?.[0]?.symbol?.[0];
|
|
24
|
-
if (!symbol || symbol.error || !symbol.data) {
|
|
25
|
-
return `未能识别二维码内容${symbol?.error ? `:${symbol.error}` : ''}`;
|
|
26
|
-
}
|
|
27
|
-
return `识别结果:${symbol.data}`;
|
|
28
|
-
}
|
|
29
|
-
catch (e) {
|
|
30
|
-
logger.warn(formatCompact({ op: 'scan', ok: false, error: e instanceof Error ? e.message : String(e) }));
|
|
31
|
-
return '二维码识别失败,请检查图片链接是否有效';
|
|
32
|
-
}
|
|
33
|
-
}));
|
|
34
|
-
//# sourceMappingURL=index.js.map
|
package/lib/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;AAE3C,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,UAAU,CACR,IAAI,cAAc,CAAC,iBAAiB,CAAC;KAClC,IAAI,CAAC,gBAAgB,CAAC;KACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC,CACL,CAAC;AAEF,UAAU,CACR,IAAI,cAAc,CAAC,eAAe,CAAC;KAChC,IAAI,CAAC,aAAa,CAAC;KACnB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,WAAW,0BAA0B,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAEjC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,YAAY,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzG,OAAO,qBAAqB,CAAC;IAC/B,CAAC;AACH,CAAC,CAAC,CACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qrcode-lib.js","sourceRoot":"","sources":["../../src/qrcode-lib.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,GAAG,WAAW,sCAAsC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
|
File without changes
|