channelkit 1.0.0
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 +21 -0
- package/README.md +829 -0
- package/config.example.yaml +37 -0
- package/dist/api/middleware/auth.d.ts +14 -0
- package/dist/api/middleware/auth.d.ts.map +1 -0
- package/dist/api/middleware/auth.js +130 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/api/routes/config.d.ts +4 -0
- package/dist/api/routes/config.d.ts.map +1 -0
- package/dist/api/routes/config.js +794 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/dashboard.d.ts +4 -0
- package/dist/api/routes/dashboard.d.ts.map +1 -0
- package/dist/api/routes/dashboard.js +89 -0
- package/dist/api/routes/dashboard.js.map +1 -0
- package/dist/api/routes/inbound.d.ts +4 -0
- package/dist/api/routes/inbound.d.ts.map +1 -0
- package/dist/api/routes/inbound.js +293 -0
- package/dist/api/routes/inbound.js.map +1 -0
- package/dist/api/routes/logs.d.ts +4 -0
- package/dist/api/routes/logs.d.ts.map +1 -0
- package/dist/api/routes/logs.js +49 -0
- package/dist/api/routes/logs.js.map +1 -0
- package/dist/api/routes/mcp.d.ts +4 -0
- package/dist/api/routes/mcp.d.ts.map +1 -0
- package/dist/api/routes/mcp.js +100 -0
- package/dist/api/routes/mcp.js.map +1 -0
- package/dist/api/routes/restart.d.ts +4 -0
- package/dist/api/routes/restart.d.ts.map +1 -0
- package/dist/api/routes/restart.js +11 -0
- package/dist/api/routes/restart.js.map +1 -0
- package/dist/api/routes/send.d.ts +4 -0
- package/dist/api/routes/send.d.ts.map +1 -0
- package/dist/api/routes/send.js +66 -0
- package/dist/api/routes/send.js.map +1 -0
- package/dist/api/routes/settings.d.ts +4 -0
- package/dist/api/routes/settings.d.ts.map +1 -0
- package/dist/api/routes/settings.js +133 -0
- package/dist/api/routes/settings.js.map +1 -0
- package/dist/api/routes/tunnel.d.ts +4 -0
- package/dist/api/routes/tunnel.d.ts.map +1 -0
- package/dist/api/routes/tunnel.js +209 -0
- package/dist/api/routes/tunnel.js.map +1 -0
- package/dist/api/routes/twilio.d.ts +4 -0
- package/dist/api/routes/twilio.d.ts.map +1 -0
- package/dist/api/routes/twilio.js +138 -0
- package/dist/api/routes/twilio.js.map +1 -0
- package/dist/api/routes/update.d.ts +4 -0
- package/dist/api/routes/update.d.ts.map +1 -0
- package/dist/api/routes/update.js +42 -0
- package/dist/api/routes/update.js.map +1 -0
- package/dist/api/server.d.ts +52 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +415 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/types.d.ts +61 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +3 -0
- package/dist/api/types.js.map +1 -0
- package/dist/channels/base.d.ts +15 -0
- package/dist/channels/base.d.ts.map +1 -0
- package/dist/channels/base.js +20 -0
- package/dist/channels/base.js.map +1 -0
- package/dist/channels/email/gmail.d.ts +36 -0
- package/dist/channels/email/gmail.d.ts.map +1 -0
- package/dist/channels/email/gmail.js +351 -0
- package/dist/channels/email/gmail.js.map +1 -0
- package/dist/channels/email/index.d.ts +3 -0
- package/dist/channels/email/index.d.ts.map +1 -0
- package/dist/channels/email/index.js +8 -0
- package/dist/channels/email/index.js.map +1 -0
- package/dist/channels/email/resend.d.ts +29 -0
- package/dist/channels/email/resend.d.ts.map +1 -0
- package/dist/channels/email/resend.js +155 -0
- package/dist/channels/email/resend.js.map +1 -0
- package/dist/channels/endpoint/index.d.ts +21 -0
- package/dist/channels/endpoint/index.d.ts.map +1 -0
- package/dist/channels/endpoint/index.js +80 -0
- package/dist/channels/endpoint/index.js.map +1 -0
- package/dist/channels/sms/index.d.ts +37 -0
- package/dist/channels/sms/index.d.ts.map +1 -0
- package/dist/channels/sms/index.js +163 -0
- package/dist/channels/sms/index.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +24 -0
- package/dist/channels/telegram/index.d.ts.map +1 -0
- package/dist/channels/telegram/index.js +231 -0
- package/dist/channels/telegram/index.js.map +1 -0
- package/dist/channels/voice/index.d.ts +62 -0
- package/dist/channels/voice/index.d.ts.map +1 -0
- package/dist/channels/voice/index.js +286 -0
- package/dist/channels/voice/index.js.map +1 -0
- package/dist/channels/whatsapp/index.d.ts +31 -0
- package/dist/channels/whatsapp/index.d.ts.map +1 -0
- package/dist/channels/whatsapp/index.js +383 -0
- package/dist/channels/whatsapp/index.js.map +1 -0
- package/dist/cli/commands/demo.d.ts +4 -0
- package/dist/cli/commands/demo.d.ts.map +1 -0
- package/dist/cli/commands/demo.js +55 -0
- package/dist/cli/commands/demo.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +254 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install-skill.d.ts +4 -0
- package/dist/cli/commands/install-skill.d.ts.map +1 -0
- package/dist/cli/commands/install-skill.js +60 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/send.d.ts +5 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +46 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +129 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/helpers.d.ts +26 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +120 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +282 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/wizards/channel.d.ts +4 -0
- package/dist/cli/wizards/channel.d.ts.map +1 -0
- package/dist/cli/wizards/channel.js +285 -0
- package/dist/cli/wizards/channel.js.map +1 -0
- package/dist/cli/wizards/provision.d.ts +4 -0
- package/dist/cli/wizards/provision.d.ts.map +1 -0
- package/dist/cli/wizards/provision.js +213 -0
- package/dist/cli/wizards/provision.js.map +1 -0
- package/dist/cli/wizards/service.d.ts +5 -0
- package/dist/cli/wizards/service.d.ts.map +1 -0
- package/dist/cli/wizards/service.js +212 -0
- package/dist/cli/wizards/service.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/parser.d.ts +6 -0
- package/dist/config/parser.d.ts.map +1 -0
- package/dist/config/parser.js +37 -0
- package/dist/config/parser.js.map +1 -0
- package/dist/config/types.d.ts +170 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/apiServer.d.ts +2 -0
- package/dist/core/apiServer.d.ts.map +1 -0
- package/dist/core/apiServer.js +7 -0
- package/dist/core/apiServer.js.map +1 -0
- package/dist/core/groupStore.d.ts +19 -0
- package/dist/core/groupStore.d.ts.map +1 -0
- package/dist/core/groupStore.js +48 -0
- package/dist/core/groupStore.js.map +1 -0
- package/dist/core/logger.d.ts +42 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +142 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/messageHandler.d.ts +15 -0
- package/dist/core/messageHandler.d.ts.map +1 -0
- package/dist/core/messageHandler.js +309 -0
- package/dist/core/messageHandler.js.map +1 -0
- package/dist/core/restart.d.ts +3 -0
- package/dist/core/restart.d.ts.map +1 -0
- package/dist/core/restart.js +35 -0
- package/dist/core/restart.js.map +1 -0
- package/dist/core/router.d.ts +56 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +168 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/tunnel.d.ts +16 -0
- package/dist/core/tunnel.d.ts.map +1 -0
- package/dist/core/tunnel.js +99 -0
- package/dist/core/tunnel.js.map +1 -0
- package/dist/core/types.d.ts +54 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/updater.d.ts +44 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +264 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/webhook.d.ts +26 -0
- package/dist/core/webhook.d.ts.map +1 -0
- package/dist/core/webhook.js +224 -0
- package/dist/core/webhook.js.map +1 -0
- package/dist/dashboard/assets/browser-D_-rzKir.js +8 -0
- package/dist/dashboard/assets/index-CNa084vI.js +88 -0
- package/dist/dashboard/assets/index-CRvIEyjF.css +1 -0
- package/dist/dashboard/index.html +17 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +551 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +45 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +197 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +16 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +502 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/media/formatter.d.ts +12 -0
- package/dist/media/formatter.d.ts.map +1 -0
- package/dist/media/formatter.js +147 -0
- package/dist/media/formatter.js.map +1 -0
- package/dist/media/processor.d.ts +33 -0
- package/dist/media/processor.d.ts.map +1 -0
- package/dist/media/processor.js +145 -0
- package/dist/media/processor.js.map +1 -0
- package/dist/media/stt.d.ts +16 -0
- package/dist/media/stt.d.ts.map +1 -0
- package/dist/media/stt.js +298 -0
- package/dist/media/stt.js.map +1 -0
- package/dist/media/tts.d.ts +19 -0
- package/dist/media/tts.d.ts.map +1 -0
- package/dist/media/tts.js +135 -0
- package/dist/media/tts.js.map +1 -0
- package/dist/onboarding/index.d.ts +28 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +144 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +14 -0
- package/dist/paths.js.map +1 -0
- package/dist/provisioning/twilio.d.ts +51 -0
- package/dist/provisioning/twilio.d.ts.map +1 -0
- package/dist/provisioning/twilio.js +175 -0
- package/dist/provisioning/twilio.js.map +1 -0
- package/echo-server.js +163 -0
- package/package.json +79 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Updater = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const restart_1 = require("./restart");
|
|
8
|
+
const PKG_NAME = 'channelkit';
|
|
9
|
+
class Updater {
|
|
10
|
+
channels;
|
|
11
|
+
onLog;
|
|
12
|
+
lastStatus = null;
|
|
13
|
+
autoUpdateTimer = null;
|
|
14
|
+
projectRoot;
|
|
15
|
+
updating = false;
|
|
16
|
+
mode;
|
|
17
|
+
constructor(channels, onLog) {
|
|
18
|
+
this.channels = channels;
|
|
19
|
+
this.onLog = onLog;
|
|
20
|
+
this.projectRoot = process.cwd();
|
|
21
|
+
this.mode = this.detectMode();
|
|
22
|
+
this.log(`Running in ${this.mode} mode`);
|
|
23
|
+
}
|
|
24
|
+
detectMode() {
|
|
25
|
+
// If there's a .git directory in the project root, it's a git clone
|
|
26
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(this.projectRoot, '.git')))
|
|
27
|
+
return 'git';
|
|
28
|
+
return 'npm';
|
|
29
|
+
}
|
|
30
|
+
log(msg) {
|
|
31
|
+
const formatted = `[updater] ${msg}`;
|
|
32
|
+
console.log(formatted);
|
|
33
|
+
this.onLog?.(formatted);
|
|
34
|
+
}
|
|
35
|
+
exec(cmd, timeout = 30000) {
|
|
36
|
+
return (0, child_process_1.execSync)(cmd, { cwd: this.projectRoot, encoding: 'utf-8', timeout }).trim();
|
|
37
|
+
}
|
|
38
|
+
getCurrentVersion() {
|
|
39
|
+
if (this.mode === 'git') {
|
|
40
|
+
try {
|
|
41
|
+
return this.exec('git rev-parse --short HEAD');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return 'unknown';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// npm mode — read version from our own package.json
|
|
48
|
+
try {
|
|
49
|
+
const pkgPath = (0, path_1.join)(__dirname, '..', '..', 'package.json');
|
|
50
|
+
return require(pkgPath).version || 'unknown';
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return 'unknown';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
getLastStatus() {
|
|
57
|
+
return this.lastStatus;
|
|
58
|
+
}
|
|
59
|
+
async checkForUpdate() {
|
|
60
|
+
if (this.mode === 'git') {
|
|
61
|
+
return this.checkGitUpdate();
|
|
62
|
+
}
|
|
63
|
+
return this.checkNpmUpdate();
|
|
64
|
+
}
|
|
65
|
+
async checkGitUpdate() {
|
|
66
|
+
const currentVersion = this.getCurrentVersion();
|
|
67
|
+
try {
|
|
68
|
+
this.exec('git fetch origin main', 30000);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
this.log(`Failed to fetch from origin: ${err.message}`);
|
|
72
|
+
this.lastStatus = {
|
|
73
|
+
mode: 'git',
|
|
74
|
+
currentVersion,
|
|
75
|
+
latestVersion: currentVersion,
|
|
76
|
+
updateAvailable: false,
|
|
77
|
+
behindCount: 0,
|
|
78
|
+
lastChecked: Date.now(),
|
|
79
|
+
};
|
|
80
|
+
return this.lastStatus;
|
|
81
|
+
}
|
|
82
|
+
const latestVersion = this.exec('git rev-parse --short origin/main');
|
|
83
|
+
const currentFull = this.exec('git rev-parse HEAD');
|
|
84
|
+
const remoteFull = this.exec('git rev-parse origin/main');
|
|
85
|
+
let behindCount = 0;
|
|
86
|
+
try {
|
|
87
|
+
behindCount = parseInt(this.exec('git rev-list HEAD..origin/main --count')) || 0;
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
const updateAvailable = currentFull !== remoteFull;
|
|
91
|
+
this.lastStatus = {
|
|
92
|
+
mode: 'git',
|
|
93
|
+
currentVersion,
|
|
94
|
+
latestVersion,
|
|
95
|
+
updateAvailable,
|
|
96
|
+
behindCount,
|
|
97
|
+
lastChecked: Date.now(),
|
|
98
|
+
};
|
|
99
|
+
if (updateAvailable) {
|
|
100
|
+
this.log(`Update available: ${currentVersion} -> ${latestVersion} (${behindCount} commit(s) behind)`);
|
|
101
|
+
}
|
|
102
|
+
return this.lastStatus;
|
|
103
|
+
}
|
|
104
|
+
async checkNpmUpdate() {
|
|
105
|
+
const currentVersion = this.getCurrentVersion();
|
|
106
|
+
let latestVersion = currentVersion;
|
|
107
|
+
try {
|
|
108
|
+
latestVersion = this.exec(`npm view ${PKG_NAME} version`, 15000);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
this.log(`Failed to check npm registry: ${err.message}`);
|
|
112
|
+
this.lastStatus = {
|
|
113
|
+
mode: 'npm',
|
|
114
|
+
currentVersion,
|
|
115
|
+
latestVersion: currentVersion,
|
|
116
|
+
updateAvailable: false,
|
|
117
|
+
behindCount: 0,
|
|
118
|
+
lastChecked: Date.now(),
|
|
119
|
+
};
|
|
120
|
+
return this.lastStatus;
|
|
121
|
+
}
|
|
122
|
+
const updateAvailable = currentVersion !== latestVersion;
|
|
123
|
+
this.lastStatus = {
|
|
124
|
+
mode: 'npm',
|
|
125
|
+
currentVersion,
|
|
126
|
+
latestVersion,
|
|
127
|
+
updateAvailable,
|
|
128
|
+
behindCount: updateAvailable ? 1 : 0,
|
|
129
|
+
lastChecked: Date.now(),
|
|
130
|
+
};
|
|
131
|
+
if (updateAvailable) {
|
|
132
|
+
this.log(`Update available: ${currentVersion} -> ${latestVersion}`);
|
|
133
|
+
}
|
|
134
|
+
return this.lastStatus;
|
|
135
|
+
}
|
|
136
|
+
async performUpdate() {
|
|
137
|
+
if (this.updating) {
|
|
138
|
+
return { success: false, previousVersion: '', newVersion: '', error: 'Update already in progress' };
|
|
139
|
+
}
|
|
140
|
+
this.updating = true;
|
|
141
|
+
if (this.mode === 'git') {
|
|
142
|
+
return this.performGitUpdate();
|
|
143
|
+
}
|
|
144
|
+
return this.performNpmUpdate();
|
|
145
|
+
}
|
|
146
|
+
async performGitUpdate() {
|
|
147
|
+
const previousVersion = this.getCurrentVersion();
|
|
148
|
+
try {
|
|
149
|
+
const dirty = this.exec('git status --porcelain');
|
|
150
|
+
if (dirty) {
|
|
151
|
+
this.updating = false;
|
|
152
|
+
return { success: false, previousVersion, newVersion: previousVersion, error: 'Working tree has uncommitted changes. Commit or stash them first.' };
|
|
153
|
+
}
|
|
154
|
+
this.log('Pulling latest changes from origin/main...');
|
|
155
|
+
this.exec('git pull origin main', 60000);
|
|
156
|
+
this.log('Installing dependencies...');
|
|
157
|
+
this.exec('npm install', 120000);
|
|
158
|
+
this.log('Building...');
|
|
159
|
+
this.exec('npm run build', 120000);
|
|
160
|
+
const newVersion = this.getCurrentVersion();
|
|
161
|
+
this.log(`Update complete: ${previousVersion} -> ${newVersion}. Restarting...`);
|
|
162
|
+
setTimeout(() => (0, restart_1.restartProcess)(this.channels), 500);
|
|
163
|
+
return { success: true, previousVersion, newVersion };
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
this.updating = false;
|
|
167
|
+
this.log(`Update failed: ${err.message}`);
|
|
168
|
+
return { success: false, previousVersion, newVersion: previousVersion, error: err.message };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async performNpmUpdate() {
|
|
172
|
+
const previousVersion = this.getCurrentVersion();
|
|
173
|
+
try {
|
|
174
|
+
this.log(`Updating ${PKG_NAME} via npm...`);
|
|
175
|
+
// Detect if installed globally or locally
|
|
176
|
+
const isGlobal = this.isGlobalInstall();
|
|
177
|
+
const installCmd = isGlobal
|
|
178
|
+
? `npm install -g ${PKG_NAME}@latest`
|
|
179
|
+
: `npm install ${PKG_NAME}@latest`;
|
|
180
|
+
this.log(`Running: ${installCmd}`);
|
|
181
|
+
this.exec(installCmd, 120000);
|
|
182
|
+
const newVersion = this.exec(`npm view ${PKG_NAME} version`, 15000);
|
|
183
|
+
this.log(`Update complete: ${previousVersion} -> ${newVersion}. Restarting...`);
|
|
184
|
+
setTimeout(() => (0, restart_1.restartProcess)(this.channels), 500);
|
|
185
|
+
return { success: true, previousVersion, newVersion };
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
this.updating = false;
|
|
189
|
+
this.log(`Update failed: ${err.message}`);
|
|
190
|
+
return { success: false, previousVersion, newVersion: previousVersion, error: err.message };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
isGlobalInstall() {
|
|
194
|
+
try {
|
|
195
|
+
const globalPrefix = this.exec('npm prefix -g');
|
|
196
|
+
// If our package's path starts with the global prefix, it's a global install
|
|
197
|
+
return __dirname.startsWith(globalPrefix);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/** Check for updates periodically without installing (notify only). */
|
|
204
|
+
startUpdateCheck(intervalMinutes) {
|
|
205
|
+
if (this.autoUpdateTimer) {
|
|
206
|
+
clearInterval(this.autoUpdateTimer);
|
|
207
|
+
}
|
|
208
|
+
const intervalMs = intervalMinutes * 60 * 1000;
|
|
209
|
+
this.log(`Update check enabled (notify only): checking every ${intervalMinutes} minute(s)`);
|
|
210
|
+
// Initial check after 10s
|
|
211
|
+
setTimeout(() => this.notifyUpdateCheck(), 10000);
|
|
212
|
+
this.autoUpdateTimer = setInterval(() => this.notifyUpdateCheck(), intervalMs);
|
|
213
|
+
}
|
|
214
|
+
async notifyUpdateCheck() {
|
|
215
|
+
try {
|
|
216
|
+
const status = await this.checkForUpdate();
|
|
217
|
+
if (status.updateAvailable) {
|
|
218
|
+
const msg = status.mode === 'npm'
|
|
219
|
+
? `Update available: v${status.currentVersion} → v${status.latestVersion}. Run: npm update -g ${PKG_NAME}`
|
|
220
|
+
: `Update available: ${status.currentVersion} → ${status.latestVersion} (${status.behindCount} commit(s) behind). Run: git pull`;
|
|
221
|
+
this.log(msg);
|
|
222
|
+
console.log(`\n ╭─────────────────────────────────────────╮`);
|
|
223
|
+
console.log(` │ 🆕 New version available! │`);
|
|
224
|
+
console.log(` │ ${status.currentVersion} → ${status.latestVersion}${' '.repeat(Math.max(0, 27 - status.currentVersion.length - status.latestVersion.length))}│`);
|
|
225
|
+
console.log(` │ Auto-update is off. Update manually: │`);
|
|
226
|
+
console.log(` │ ${status.mode === 'npm' ? `npm update -g ${PKG_NAME}` : 'git pull && npm run build'}${' '.repeat(Math.max(0, status.mode === 'npm' ? 5 : 14))}│`);
|
|
227
|
+
console.log(` ╰─────────────────────────────────────────╯\n`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
this.log(`Update check failed: ${err.message}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
startAutoUpdate(intervalMinutes) {
|
|
235
|
+
if (this.autoUpdateTimer) {
|
|
236
|
+
clearInterval(this.autoUpdateTimer);
|
|
237
|
+
}
|
|
238
|
+
const intervalMs = intervalMinutes * 60 * 1000;
|
|
239
|
+
this.log(`Auto-update enabled: checking every ${intervalMinutes} minute(s)`);
|
|
240
|
+
setTimeout(() => this.autoUpdateCheck(), 10000);
|
|
241
|
+
this.autoUpdateTimer = setInterval(() => this.autoUpdateCheck(), intervalMs);
|
|
242
|
+
}
|
|
243
|
+
stopAutoUpdate() {
|
|
244
|
+
if (this.autoUpdateTimer) {
|
|
245
|
+
clearInterval(this.autoUpdateTimer);
|
|
246
|
+
this.autoUpdateTimer = null;
|
|
247
|
+
this.log('Auto-update disabled');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async autoUpdateCheck() {
|
|
251
|
+
try {
|
|
252
|
+
const status = await this.checkForUpdate();
|
|
253
|
+
if (status.updateAvailable) {
|
|
254
|
+
this.log(`Auto-update: new version detected (${status.latestVersion}). Updating...`);
|
|
255
|
+
await this.performUpdate();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
this.log(`Auto-update check failed: ${err.message}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.Updater = Updater;
|
|
264
|
+
//# sourceMappingURL=updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/core/updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { UnifiedMessage, WebhookResponse } from './types';
|
|
2
|
+
import { ServiceAuthConfig } from '../config/types';
|
|
3
|
+
/** Call at startup to allow webhooks to localhost / private IPs. */
|
|
4
|
+
export declare function setAllowLocalWebhooks(value: boolean): void;
|
|
5
|
+
/**
|
|
6
|
+
* Replace [PLACEHOLDER] tokens in a URL with values from the message.
|
|
7
|
+
* Values are URI-encoded. Missing values become empty strings.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolvePlaceholders(url: string, message: UnifiedMessage): string;
|
|
10
|
+
export interface WebhookError {
|
|
11
|
+
type: 'blocked' | 'http' | 'timeout' | 'network';
|
|
12
|
+
status?: number;
|
|
13
|
+
message: string;
|
|
14
|
+
body?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface WebhookResult {
|
|
17
|
+
response: WebhookResponse | null;
|
|
18
|
+
error?: WebhookError;
|
|
19
|
+
}
|
|
20
|
+
export declare function dispatchWebhook(url: string, message: UnifiedMessage, replyUrl?: string, { maxRetries, timeout, method, auth }?: {
|
|
21
|
+
maxRetries?: number;
|
|
22
|
+
timeout?: number;
|
|
23
|
+
method?: string;
|
|
24
|
+
auth?: ServiceAuthConfig;
|
|
25
|
+
}): Promise<WebhookResult>;
|
|
26
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/core/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE1D;AAuED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAOhF;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAYD,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,EAAE,UAAc,EAAE,OAAc,EAAE,MAAe,EAAE,IAAI,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAO,GACnJ,OAAO,CAAC,aAAa,CAAC,CAqIxB"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setAllowLocalWebhooks = setAllowLocalWebhooks;
|
|
4
|
+
exports.resolvePlaceholders = resolvePlaceholders;
|
|
5
|
+
exports.dispatchWebhook = dispatchWebhook;
|
|
6
|
+
let localWebhooksAllowed = false;
|
|
7
|
+
/** Call at startup to allow webhooks to localhost / private IPs. */
|
|
8
|
+
function setAllowLocalWebhooks(value) {
|
|
9
|
+
localWebhooksAllowed = value;
|
|
10
|
+
}
|
|
11
|
+
/** Block requests to private/reserved IP ranges and cloud metadata endpoints. */
|
|
12
|
+
function isBlockedUrl(urlStr) {
|
|
13
|
+
try {
|
|
14
|
+
const parsed = new URL(urlStr);
|
|
15
|
+
const hostname = parsed.hostname;
|
|
16
|
+
// Always block cloud metadata endpoints
|
|
17
|
+
if (hostname === '169.254.169.254' || hostname === 'metadata.google.internal')
|
|
18
|
+
return true;
|
|
19
|
+
// Allow localhost and private IPs when configured
|
|
20
|
+
if (localWebhooksAllowed)
|
|
21
|
+
return false;
|
|
22
|
+
// Block localhost and loopback
|
|
23
|
+
if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '0.0.0.0')
|
|
24
|
+
return true;
|
|
25
|
+
// Block private IP ranges (10.x, 172.16-31.x, 192.168.x)
|
|
26
|
+
const parts = hostname.split('.').map(Number);
|
|
27
|
+
if (parts.length === 4 && parts.every(n => !isNaN(n))) {
|
|
28
|
+
if (parts[0] === 10)
|
|
29
|
+
return true;
|
|
30
|
+
if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
|
|
31
|
+
return true;
|
|
32
|
+
if (parts[0] === 192 && parts[1] === 168)
|
|
33
|
+
return true;
|
|
34
|
+
if (parts[0] === 0)
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return true; // Block malformed URLs
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function backoffDelay(attempt) {
|
|
44
|
+
return new Promise((resolve) => setTimeout(resolve, Math.pow(2, attempt) * 1000));
|
|
45
|
+
}
|
|
46
|
+
function buildAuthHeaders(auth) {
|
|
47
|
+
if (!auth)
|
|
48
|
+
return {};
|
|
49
|
+
if (auth.type === 'bearer' && auth.token) {
|
|
50
|
+
return { Authorization: `Bearer ${auth.token}` };
|
|
51
|
+
}
|
|
52
|
+
if (auth.type === 'header' && auth.header_name && auth.header_value) {
|
|
53
|
+
return { [auth.header_name]: auth.header_value };
|
|
54
|
+
}
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
/** Generate a filename when the channel doesn't provide one */
|
|
58
|
+
function guessFilename(type, mimetype) {
|
|
59
|
+
const ext = mimetype.split('/').pop()?.split(';')[0] || 'bin';
|
|
60
|
+
return `${type || 'file'}.${ext}`;
|
|
61
|
+
}
|
|
62
|
+
/** Normalize a phone-like identifier: strip WhatsApp JID suffix, ensure + prefix. */
|
|
63
|
+
function normalizePhone(value) {
|
|
64
|
+
// Strip WhatsApp JID suffixes (@s.whatsapp.net, @g.us, etc.)
|
|
65
|
+
const stripped = value.replace(/@.+$/, '');
|
|
66
|
+
// If it looks like a phone number (all digits, optionally with +), ensure + prefix
|
|
67
|
+
if (/^\+?\d{7,15}$/.test(stripped)) {
|
|
68
|
+
return stripped.startsWith('+') ? stripped : `+${stripped}`;
|
|
69
|
+
}
|
|
70
|
+
// Non-phone identifiers (emails, Telegram IDs) pass through unchanged
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
const PLACEHOLDER_MAP = {
|
|
74
|
+
FROM: (m) => normalizePhone(m.from),
|
|
75
|
+
CHANNEL: (m) => m.channel,
|
|
76
|
+
CHANNEL_NAME: (m) => m.channelName,
|
|
77
|
+
SENDER_NAME: (m) => m.senderName,
|
|
78
|
+
MESSAGE_TYPE: (m) => m.type,
|
|
79
|
+
GROUP_ID: (m) => m.groupId,
|
|
80
|
+
GROUP_NAME: (m) => m.groupName,
|
|
81
|
+
TEXT: (m) => m.text,
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Replace [PLACEHOLDER] tokens in a URL with values from the message.
|
|
85
|
+
* Values are URI-encoded. Missing values become empty strings.
|
|
86
|
+
*/
|
|
87
|
+
function resolvePlaceholders(url, message) {
|
|
88
|
+
if (!url.includes('['))
|
|
89
|
+
return url;
|
|
90
|
+
return url.replace(/\[([A-Z_]+)\]/g, (_match, key) => {
|
|
91
|
+
const getter = PLACEHOLDER_MAP[key];
|
|
92
|
+
const value = getter ? getter(message) : undefined;
|
|
93
|
+
return encodeURIComponent(value || '');
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** Read up to 1 KB of response body text for error diagnostics. */
|
|
97
|
+
async function readErrorBody(res) {
|
|
98
|
+
try {
|
|
99
|
+
const text = await res.text();
|
|
100
|
+
return text ? text.slice(0, 1024) : undefined;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function dispatchWebhook(url, message, replyUrl, { maxRetries = 3, timeout = 5000, method = 'POST', auth } = {}) {
|
|
107
|
+
if (isBlockedUrl(url)) {
|
|
108
|
+
const msg = `Blocked request to private/reserved address: ${url}`;
|
|
109
|
+
console.error(`[webhook] ${msg}`);
|
|
110
|
+
return { response: null, error: { type: 'blocked', message: msg } };
|
|
111
|
+
}
|
|
112
|
+
const payload = replyUrl ? { ...message, replyUrl } : message;
|
|
113
|
+
const httpMethod = (method || 'POST').toUpperCase();
|
|
114
|
+
const authHeaders = buildAuthHeaders(auth);
|
|
115
|
+
// Send as multipart/form-data when method is POST and message carries a media buffer
|
|
116
|
+
const useMultipart = httpMethod === 'POST' && !!message.media?.buffer;
|
|
117
|
+
let body;
|
|
118
|
+
let headers;
|
|
119
|
+
if (useMultipart) {
|
|
120
|
+
const formData = new FormData();
|
|
121
|
+
// Build metadata: full payload without the buffer (not JSON-serializable)
|
|
122
|
+
const { media, ...rest } = payload;
|
|
123
|
+
const metadata = {
|
|
124
|
+
...rest,
|
|
125
|
+
media: media ? { mimetype: media.mimetype, filename: media.filename } : undefined,
|
|
126
|
+
};
|
|
127
|
+
formData.append('metadata', JSON.stringify(metadata));
|
|
128
|
+
// Append the file
|
|
129
|
+
const mimetype = message.media.mimetype || 'application/octet-stream';
|
|
130
|
+
const filename = message.media.filename || guessFilename(message.type, mimetype);
|
|
131
|
+
const blob = new Blob([new Uint8Array(message.media.buffer)], { type: mimetype });
|
|
132
|
+
formData.append('file', blob, filename);
|
|
133
|
+
body = formData;
|
|
134
|
+
// Don't set Content-Type — fetch sets it with the boundary automatically
|
|
135
|
+
headers = { ...authHeaders };
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const canHaveBody = httpMethod !== 'GET' && httpMethod !== 'HEAD';
|
|
139
|
+
body = canHaveBody ? JSON.stringify(payload) : undefined;
|
|
140
|
+
headers = { 'Content-Type': 'application/json', ...authHeaders };
|
|
141
|
+
}
|
|
142
|
+
let lastError;
|
|
143
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
144
|
+
const controller = new AbortController();
|
|
145
|
+
const timer = setTimeout(() => controller.abort(), timeout);
|
|
146
|
+
try {
|
|
147
|
+
const res = await fetch(url, {
|
|
148
|
+
method: httpMethod,
|
|
149
|
+
headers,
|
|
150
|
+
...(body && { body }),
|
|
151
|
+
signal: controller.signal,
|
|
152
|
+
});
|
|
153
|
+
clearTimeout(timer);
|
|
154
|
+
if (!res.ok) {
|
|
155
|
+
const errorBody = await readErrorBody(res);
|
|
156
|
+
const statusText = res.statusText || `HTTP ${res.status}`;
|
|
157
|
+
lastError = {
|
|
158
|
+
type: 'http',
|
|
159
|
+
status: res.status,
|
|
160
|
+
message: `${statusText}${errorBody ? `: ${errorBody}` : ''}`,
|
|
161
|
+
body: errorBody,
|
|
162
|
+
};
|
|
163
|
+
// 4xx = permanent failure, don't retry
|
|
164
|
+
if (res.status >= 400 && res.status < 500) {
|
|
165
|
+
console.error(`[webhook] ${url} responded ${res.status} (permanent)${errorBody ? ` — ${errorBody.slice(0, 200)}` : ''}`);
|
|
166
|
+
return { response: null, error: lastError };
|
|
167
|
+
}
|
|
168
|
+
// 5xx = transient, retry
|
|
169
|
+
if (attempt < maxRetries) {
|
|
170
|
+
console.warn(`[webhook] ${url} responded ${res.status}, retrying (${attempt + 1}/${maxRetries})...`);
|
|
171
|
+
await backoffDelay(attempt);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
console.error(`[webhook] ${url} responded ${res.status} after ${maxRetries} retries${errorBody ? ` — ${errorBody.slice(0, 200)}` : ''}`);
|
|
175
|
+
return { response: null, error: lastError };
|
|
176
|
+
}
|
|
177
|
+
const contentType = res.headers.get('content-type') || '';
|
|
178
|
+
if (contentType.includes('application/json')) {
|
|
179
|
+
return { response: (await res.json()) };
|
|
180
|
+
}
|
|
181
|
+
// Non-JSON response — return binary content (PDF, images, etc.) as media
|
|
182
|
+
if (contentType && !contentType.includes('text/')) {
|
|
183
|
+
const arrayBuf = await res.arrayBuffer();
|
|
184
|
+
if (arrayBuf.byteLength > 0) {
|
|
185
|
+
const mimetype = contentType.split(';')[0].trim();
|
|
186
|
+
return {
|
|
187
|
+
response: {
|
|
188
|
+
media: {
|
|
189
|
+
buffer: Buffer.from(arrayBuf),
|
|
190
|
+
mimetype,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Text response (text/plain, text/csv, text/html, etc.) — return as text
|
|
197
|
+
if (contentType && contentType.includes('text/')) {
|
|
198
|
+
const text = await res.text();
|
|
199
|
+
if (text) {
|
|
200
|
+
return { response: { text } };
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return { response: null };
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
clearTimeout(timer);
|
|
207
|
+
const isAbort = err?.name === 'AbortError';
|
|
208
|
+
const label = isAbort ? 'timed out' : String(err?.message || err);
|
|
209
|
+
lastError = {
|
|
210
|
+
type: isAbort ? 'timeout' : 'network',
|
|
211
|
+
message: label,
|
|
212
|
+
};
|
|
213
|
+
if (attempt < maxRetries) {
|
|
214
|
+
console.warn(`[webhook] ${url} ${label}, retrying (${attempt + 1}/${maxRetries})...`);
|
|
215
|
+
await backoffDelay(attempt);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
console.error(`[webhook] Failed to dispatch to ${url} after ${maxRetries} retries: ${label}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return { response: null, error: lastError };
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/core/webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{g as re}from"./index-CNa084vI.js";function oe(r,o){for(var i=0;i<o.length;i++){const e=o[i];if(typeof e!="string"&&!Array.isArray(e)){for(const t in e)if(t!=="default"&&!(t in r)){const n=Object.getOwnPropertyDescriptor(e,t);n&&Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}var z={},Q,Bt;function ie(){return Bt||(Bt=1,Q=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),Q}var W={},_={},At;function U(){if(At)return _;At=1;let r;const o=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return _.getSymbolSize=function(e){if(!e)throw new Error('"version" cannot be null or undefined');if(e<1||e>40)throw new Error('"version" should be in range from 1 to 40');return e*4+17},_.getSymbolTotalCodewords=function(e){return o[e]},_.getBCHDigit=function(i){let e=0;for(;i!==0;)e++,i>>>=1;return e},_.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');r=e},_.isKanjiModeEnabled=function(){return typeof r<"u"},_.toSJIS=function(e){return r(e)},_}var Z={},Rt;function yt(){return Rt||(Rt=1,(function(r){r.L={bit:1},r.M={bit:0},r.Q={bit:3},r.H={bit:2};function o(i){if(typeof i!="string")throw new Error("Param is not a string");switch(i.toLowerCase()){case"l":case"low":return r.L;case"m":case"medium":return r.M;case"q":case"quartile":return r.Q;case"h":case"high":return r.H;default:throw new Error("Unknown EC Level: "+i)}}r.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4},r.from=function(e,t){if(r.isValid(e))return e;try{return o(e)}catch{return t}}})(Z)),Z}var X,Tt;function se(){if(Tt)return X;Tt=1;function r(){this.buffer=[],this.length=0}return r.prototype={get:function(o){const i=Math.floor(o/8);return(this.buffer[i]>>>7-o%8&1)===1},put:function(o,i){for(let e=0;e<i;e++)this.putBit((o>>>i-e-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(o){const i=Math.floor(this.length/8);this.buffer.length<=i&&this.buffer.push(0),o&&(this.buffer[i]|=128>>>this.length%8),this.length++}},X=r,X}var x,It;function ue(){if(It)return x;It=1;function r(o){if(!o||o<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=o,this.data=new Uint8Array(o*o),this.reservedBit=new Uint8Array(o*o)}return r.prototype.set=function(o,i,e,t){const n=o*this.size+i;this.data[n]=e,t&&(this.reservedBit[n]=!0)},r.prototype.get=function(o,i){return this.data[o*this.size+i]},r.prototype.xor=function(o,i,e){this.data[o*this.size+i]^=e},r.prototype.isReserved=function(o,i){return this.reservedBit[o*this.size+i]},x=r,x}var $={},Nt;function ae(){return Nt||(Nt=1,(function(r){const o=U().getSymbolSize;r.getRowColCoords=function(e){if(e===1)return[];const t=Math.floor(e/7)+2,n=o(e),s=n===145?26:Math.ceil((n-13)/(2*t-2))*2,a=[n-7];for(let u=1;u<t-1;u++)a[u]=a[u-1]-s;return a.push(6),a.reverse()},r.getPositions=function(e){const t=[],n=r.getRowColCoords(e),s=n.length;for(let a=0;a<s;a++)for(let u=0;u<s;u++)a===0&&u===0||a===0&&u===s-1||a===s-1&&u===0||t.push([n[a],n[u]]);return t}})($)),$}var tt={},Pt;function ce(){if(Pt)return tt;Pt=1;const r=U().getSymbolSize,o=7;return tt.getPositions=function(e){const t=r(e);return[[0,0],[t-o,0],[0,t-o]]},tt}var et={},Mt;function fe(){return Mt||(Mt=1,(function(r){r.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const o={N1:3,N2:3,N3:40,N4:10};r.isValid=function(t){return t!=null&&t!==""&&!isNaN(t)&&t>=0&&t<=7},r.from=function(t){return r.isValid(t)?parseInt(t,10):void 0},r.getPenaltyN1=function(t){const n=t.size;let s=0,a=0,u=0,c=null,d=null;for(let p=0;p<n;p++){a=u=0,c=d=null;for(let h=0;h<n;h++){let f=t.get(p,h);f===c?a++:(a>=5&&(s+=o.N1+(a-5)),c=f,a=1),f=t.get(h,p),f===d?u++:(u>=5&&(s+=o.N1+(u-5)),d=f,u=1)}a>=5&&(s+=o.N1+(a-5)),u>=5&&(s+=o.N1+(u-5))}return s},r.getPenaltyN2=function(t){const n=t.size;let s=0;for(let a=0;a<n-1;a++)for(let u=0;u<n-1;u++){const c=t.get(a,u)+t.get(a,u+1)+t.get(a+1,u)+t.get(a+1,u+1);(c===4||c===0)&&s++}return s*o.N2},r.getPenaltyN3=function(t){const n=t.size;let s=0,a=0,u=0;for(let c=0;c<n;c++){a=u=0;for(let d=0;d<n;d++)a=a<<1&2047|t.get(c,d),d>=10&&(a===1488||a===93)&&s++,u=u<<1&2047|t.get(d,c),d>=10&&(u===1488||u===93)&&s++}return s*o.N3},r.getPenaltyN4=function(t){let n=0;const s=t.data.length;for(let u=0;u<s;u++)n+=t.data[u];return Math.abs(Math.ceil(n*100/s/5)-10)*o.N4};function i(e,t,n){switch(e){case r.Patterns.PATTERN000:return(t+n)%2===0;case r.Patterns.PATTERN001:return t%2===0;case r.Patterns.PATTERN010:return n%3===0;case r.Patterns.PATTERN011:return(t+n)%3===0;case r.Patterns.PATTERN100:return(Math.floor(t/2)+Math.floor(n/3))%2===0;case r.Patterns.PATTERN101:return t*n%2+t*n%3===0;case r.Patterns.PATTERN110:return(t*n%2+t*n%3)%2===0;case r.Patterns.PATTERN111:return(t*n%3+(t+n)%2)%2===0;default:throw new Error("bad maskPattern:"+e)}}r.applyMask=function(t,n){const s=n.size;for(let a=0;a<s;a++)for(let u=0;u<s;u++)n.isReserved(u,a)||n.xor(u,a,i(t,u,a))},r.getBestMask=function(t,n){const s=Object.keys(r.Patterns).length;let a=0,u=1/0;for(let c=0;c<s;c++){n(c),r.applyMask(c,t);const d=r.getPenaltyN1(t)+r.getPenaltyN2(t)+r.getPenaltyN3(t)+r.getPenaltyN4(t);r.applyMask(c,t),d<u&&(u=d,a=c)}return a}})(et)),et}var J={},St;function Wt(){if(St)return J;St=1;const r=yt(),o=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],i=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return J.getBlocksCount=function(t,n){switch(n){case r.L:return o[(t-1)*4+0];case r.M:return o[(t-1)*4+1];case r.Q:return o[(t-1)*4+2];case r.H:return o[(t-1)*4+3];default:return}},J.getTotalCodewordsCount=function(t,n){switch(n){case r.L:return i[(t-1)*4+0];case r.M:return i[(t-1)*4+1];case r.Q:return i[(t-1)*4+2];case r.H:return i[(t-1)*4+3];default:return}},J}var nt={},K={},bt;function le(){if(bt)return K;bt=1;const r=new Uint8Array(512),o=new Uint8Array(256);return(function(){let e=1;for(let t=0;t<255;t++)r[t]=e,o[e]=t,e<<=1,e&256&&(e^=285);for(let t=255;t<512;t++)r[t]=r[t-255]})(),K.log=function(e){if(e<1)throw new Error("log("+e+")");return o[e]},K.exp=function(e){return r[e]},K.mul=function(e,t){return e===0||t===0?0:r[o[e]+o[t]]},K}var Lt;function de(){return Lt||(Lt=1,(function(r){const o=le();r.mul=function(e,t){const n=new Uint8Array(e.length+t.length-1);for(let s=0;s<e.length;s++)for(let a=0;a<t.length;a++)n[s+a]^=o.mul(e[s],t[a]);return n},r.mod=function(e,t){let n=new Uint8Array(e);for(;n.length-t.length>=0;){const s=n[0];for(let u=0;u<t.length;u++)n[u]^=o.mul(t[u],s);let a=0;for(;a<n.length&&n[a]===0;)a++;n=n.slice(a)}return n},r.generateECPolynomial=function(e){let t=new Uint8Array([1]);for(let n=0;n<e;n++)t=r.mul(t,new Uint8Array([1,o.exp(n)]));return t}})(nt)),nt}var rt,Dt;function ge(){if(Dt)return rt;Dt=1;const r=de();function o(i){this.genPoly=void 0,this.degree=i,this.degree&&this.initialize(this.degree)}return o.prototype.initialize=function(e){this.degree=e,this.genPoly=r.generateECPolynomial(this.degree)},o.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");const t=new Uint8Array(e.length+this.degree);t.set(e);const n=r.mod(t,this.genPoly),s=this.degree-n.length;if(s>0){const a=new Uint8Array(this.degree);return a.set(n,s),a}return n},rt=o,rt}var ot={},it={},st={},qt;function Zt(){return qt||(qt=1,st.isValid=function(o){return!isNaN(o)&&o>=1&&o<=40}),st}var L={},vt;function Xt(){if(vt)return L;vt=1;const r="[0-9]+",o="[A-Z $%*+\\-./:]+";let i="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";i=i.replace(/u/g,"\\u");const e="(?:(?![A-Z0-9 $%*+\\-./:]|"+i+`)(?:.|[\r
|
|
2
|
+
]))+`;L.KANJI=new RegExp(i,"g"),L.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),L.BYTE=new RegExp(e,"g"),L.NUMERIC=new RegExp(r,"g"),L.ALPHANUMERIC=new RegExp(o,"g");const t=new RegExp("^"+i+"$"),n=new RegExp("^"+r+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return L.testKanji=function(u){return t.test(u)},L.testNumeric=function(u){return n.test(u)},L.testAlphanumeric=function(u){return s.test(u)},L}var _t;function F(){return _t||(_t=1,(function(r){const o=Zt(),i=Xt();r.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},r.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},r.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},r.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},r.MIXED={bit:-1},r.getCharCountIndicator=function(n,s){if(!n.ccBits)throw new Error("Invalid mode: "+n);if(!o.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?n.ccBits[0]:s<27?n.ccBits[1]:n.ccBits[2]},r.getBestModeForData=function(n){return i.testNumeric(n)?r.NUMERIC:i.testAlphanumeric(n)?r.ALPHANUMERIC:i.testKanji(n)?r.KANJI:r.BYTE},r.toString=function(n){if(n&&n.id)return n.id;throw new Error("Invalid mode")},r.isValid=function(n){return n&&n.bit&&n.ccBits};function e(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return r.NUMERIC;case"alphanumeric":return r.ALPHANUMERIC;case"kanji":return r.KANJI;case"byte":return r.BYTE;default:throw new Error("Unknown mode: "+t)}}r.from=function(n,s){if(r.isValid(n))return n;try{return e(n)}catch{return s}}})(it)),it}var Ut;function he(){return Ut||(Ut=1,(function(r){const o=U(),i=Wt(),e=yt(),t=F(),n=Zt(),s=7973,a=o.getBCHDigit(s);function u(h,f,N){for(let P=1;P<=40;P++)if(f<=r.getCapacity(P,N,h))return P}function c(h,f){return t.getCharCountIndicator(h,f)+4}function d(h,f){let N=0;return h.forEach(function(P){const S=c(P.mode,f);N+=S+P.getBitsLength()}),N}function p(h,f){for(let N=1;N<=40;N++)if(d(h,N)<=r.getCapacity(N,f,t.MIXED))return N}r.from=function(f,N){return n.isValid(f)?parseInt(f,10):N},r.getCapacity=function(f,N,P){if(!n.isValid(f))throw new Error("Invalid QR Code version");typeof P>"u"&&(P=t.BYTE);const S=o.getSymbolTotalCodewords(f),R=i.getTotalCodewordsCount(f,N),M=(S-R)*8;if(P===t.MIXED)return M;const T=M-c(P,f);switch(P){case t.NUMERIC:return Math.floor(T/10*3);case t.ALPHANUMERIC:return Math.floor(T/11*2);case t.KANJI:return Math.floor(T/13);case t.BYTE:default:return Math.floor(T/8)}},r.getBestVersionForData=function(f,N){let P;const S=e.from(N,e.M);if(Array.isArray(f)){if(f.length>1)return p(f,S);if(f.length===0)return 1;P=f[0]}else P=f;return u(P.mode,P.getLength(),S)},r.getEncodedBits=function(f){if(!n.isValid(f)||f<7)throw new Error("Invalid QR Code version");let N=f<<12;for(;o.getBCHDigit(N)-a>=0;)N^=s<<o.getBCHDigit(N)-a;return f<<12|N}})(ot)),ot}var ut={},Ft;function me(){if(Ft)return ut;Ft=1;const r=U(),o=1335,i=21522,e=r.getBCHDigit(o);return ut.getEncodedBits=function(n,s){const a=n.bit<<3|s;let u=a<<10;for(;r.getBCHDigit(u)-e>=0;)u^=o<<r.getBCHDigit(u)-e;return(a<<10|u)^i},ut}var at={},ct,kt;function we(){if(kt)return ct;kt=1;const r=F();function o(i){this.mode=r.NUMERIC,this.data=i.toString()}return o.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},o.prototype.getLength=function(){return this.data.length},o.prototype.getBitsLength=function(){return o.getBitsLength(this.data.length)},o.prototype.write=function(e){let t,n,s;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),s=parseInt(n,10),e.put(s,10);const a=this.data.length-t;a>0&&(n=this.data.substr(t),s=parseInt(n,10),e.put(s,a*3+1))},ct=o,ct}var ft,zt;function ye(){if(zt)return ft;zt=1;const r=F(),o=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function i(e){this.mode=r.ALPHANUMERIC,this.data=e}return i.getBitsLength=function(t){return 11*Math.floor(t/2)+6*(t%2)},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){let n;for(n=0;n+2<=this.data.length;n+=2){let s=o.indexOf(this.data[n])*45;s+=o.indexOf(this.data[n+1]),t.put(s,11)}this.data.length%2&&t.put(o.indexOf(this.data[n]),6)},ft=i,ft}var lt,Vt;function Ce(){if(Vt)return lt;Vt=1;const r=F();function o(i){this.mode=r.BYTE,typeof i=="string"?this.data=new TextEncoder().encode(i):this.data=new Uint8Array(i)}return o.getBitsLength=function(e){return e*8},o.prototype.getLength=function(){return this.data.length},o.prototype.getBitsLength=function(){return o.getBitsLength(this.data.length)},o.prototype.write=function(i){for(let e=0,t=this.data.length;e<t;e++)i.put(this.data[e],8)},lt=o,lt}var dt,Kt;function Ee(){if(Kt)return dt;Kt=1;const r=F(),o=U();function i(e){this.mode=r.KANJI,this.data=e}return i.getBitsLength=function(t){return t*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=o.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw new Error("Invalid SJIS character: "+this.data[t]+`
|
|
3
|
+
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},dt=i,dt}var gt={exports:{}},Ht;function pe(){return Ht||(Ht=1,(function(r){var o={single_source_shortest_paths:function(i,e,t){var n={},s={};s[e]=0;var a=o.PriorityQueue.make();a.push(e,0);for(var u,c,d,p,h,f,N,P,S;!a.empty();){u=a.pop(),c=u.value,p=u.cost,h=i[c]||{};for(d in h)h.hasOwnProperty(d)&&(f=h[d],N=p+f,P=s[d],S=typeof s[d]>"u",(S||P>N)&&(s[d]=N,a.push(d,N),n[d]=c))}if(typeof t<"u"&&typeof s[t]>"u"){var R=["Could not find a path from ",e," to ",t,"."].join("");throw new Error(R)}return n},extract_shortest_path_from_predecessor_list:function(i,e){for(var t=[],n=e;n;)t.push(n),i[n],n=i[n];return t.reverse(),t},find_path:function(i,e,t){var n=o.single_source_shortest_paths(i,e,t);return o.extract_shortest_path_from_predecessor_list(n,t)},PriorityQueue:{make:function(i){var e=o.PriorityQueue,t={},n;i=i||{};for(n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t.queue=[],t.sorter=i.sorter||e.default_sorter,t},default_sorter:function(i,e){return i.cost-e.cost},push:function(i,e){var t={value:i,cost:e};this.queue.push(t),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};r.exports=o})(gt)),gt.exports}var Jt;function Be(){return Jt||(Jt=1,(function(r){const o=F(),i=we(),e=ye(),t=Ce(),n=Ee(),s=Xt(),a=U(),u=pe();function c(R){return unescape(encodeURIComponent(R)).length}function d(R,M,T){const B=[];let b;for(;(b=R.exec(T))!==null;)B.push({data:b[0],index:b.index,mode:M,length:b[0].length});return B}function p(R){const M=d(s.NUMERIC,o.NUMERIC,R),T=d(s.ALPHANUMERIC,o.ALPHANUMERIC,R);let B,b;return a.isKanjiModeEnabled()?(B=d(s.BYTE,o.BYTE,R),b=d(s.KANJI,o.KANJI,R)):(B=d(s.BYTE_KANJI,o.BYTE,R),b=[]),M.concat(T,B,b).sort(function(C,y){return C.index-y.index}).map(function(C){return{data:C.data,mode:C.mode,length:C.length}})}function h(R,M){switch(M){case o.NUMERIC:return i.getBitsLength(R);case o.ALPHANUMERIC:return e.getBitsLength(R);case o.KANJI:return n.getBitsLength(R);case o.BYTE:return t.getBitsLength(R)}}function f(R){return R.reduce(function(M,T){const B=M.length-1>=0?M[M.length-1]:null;return B&&B.mode===T.mode?(M[M.length-1].data+=T.data,M):(M.push(T),M)},[])}function N(R){const M=[];for(let T=0;T<R.length;T++){const B=R[T];switch(B.mode){case o.NUMERIC:M.push([B,{data:B.data,mode:o.ALPHANUMERIC,length:B.length},{data:B.data,mode:o.BYTE,length:B.length}]);break;case o.ALPHANUMERIC:M.push([B,{data:B.data,mode:o.BYTE,length:B.length}]);break;case o.KANJI:M.push([B,{data:B.data,mode:o.BYTE,length:c(B.data)}]);break;case o.BYTE:M.push([{data:B.data,mode:o.BYTE,length:c(B.data)}])}}return M}function P(R,M){const T={},B={start:{}};let b=["start"];for(let g=0;g<R.length;g++){const C=R[g],y=[];for(let l=0;l<C.length;l++){const A=C[l],m=""+g+l;y.push(m),T[m]={node:A,lastCount:0},B[m]={};for(let E=0;E<b.length;E++){const w=b[E];T[w]&&T[w].node.mode===A.mode?(B[w][m]=h(T[w].lastCount+A.length,A.mode)-h(T[w].lastCount,A.mode),T[w].lastCount+=A.length):(T[w]&&(T[w].lastCount=A.length),B[w][m]=h(A.length,A.mode)+4+o.getCharCountIndicator(A.mode,M))}}b=y}for(let g=0;g<b.length;g++)B[b[g]].end=0;return{map:B,table:T}}function S(R,M){let T;const B=o.getBestModeForData(R);if(T=o.from(M,B),T!==o.BYTE&&T.bit<B.bit)throw new Error('"'+R+'" cannot be encoded with mode '+o.toString(T)+`.
|
|
4
|
+
Suggested mode is: `+o.toString(B));switch(T===o.KANJI&&!a.isKanjiModeEnabled()&&(T=o.BYTE),T){case o.NUMERIC:return new i(R);case o.ALPHANUMERIC:return new e(R);case o.KANJI:return new n(R);case o.BYTE:return new t(R)}}r.fromArray=function(M){return M.reduce(function(T,B){return typeof B=="string"?T.push(S(B,null)):B.data&&T.push(S(B.data,B.mode)),T},[])},r.fromString=function(M,T){const B=p(M,a.isKanjiModeEnabled()),b=N(B),g=P(b,T),C=u.find_path(g.map,"start","end"),y=[];for(let l=1;l<C.length-1;l++)y.push(g.table[C[l]].node);return r.fromArray(f(y))},r.rawSplit=function(M){return r.fromArray(p(M,a.isKanjiModeEnabled()))}})(at)),at}var Ot;function Ae(){if(Ot)return W;Ot=1;const r=U(),o=yt(),i=se(),e=ue(),t=ae(),n=ce(),s=fe(),a=Wt(),u=ge(),c=he(),d=me(),p=F(),h=Be();function f(g,C){const y=g.size,l=n.getPositions(C);for(let A=0;A<l.length;A++){const m=l[A][0],E=l[A][1];for(let w=-1;w<=7;w++)if(!(m+w<=-1||y<=m+w))for(let I=-1;I<=7;I++)E+I<=-1||y<=E+I||(w>=0&&w<=6&&(I===0||I===6)||I>=0&&I<=6&&(w===0||w===6)||w>=2&&w<=4&&I>=2&&I<=4?g.set(m+w,E+I,!0,!0):g.set(m+w,E+I,!1,!0))}}function N(g){const C=g.size;for(let y=8;y<C-8;y++){const l=y%2===0;g.set(y,6,l,!0),g.set(6,y,l,!0)}}function P(g,C){const y=t.getPositions(C);for(let l=0;l<y.length;l++){const A=y[l][0],m=y[l][1];for(let E=-2;E<=2;E++)for(let w=-2;w<=2;w++)E===-2||E===2||w===-2||w===2||E===0&&w===0?g.set(A+E,m+w,!0,!0):g.set(A+E,m+w,!1,!0)}}function S(g,C){const y=g.size,l=c.getEncodedBits(C);let A,m,E;for(let w=0;w<18;w++)A=Math.floor(w/3),m=w%3+y-8-3,E=(l>>w&1)===1,g.set(A,m,E,!0),g.set(m,A,E,!0)}function R(g,C,y){const l=g.size,A=d.getEncodedBits(C,y);let m,E;for(m=0;m<15;m++)E=(A>>m&1)===1,m<6?g.set(m,8,E,!0):m<8?g.set(m+1,8,E,!0):g.set(l-15+m,8,E,!0),m<8?g.set(8,l-m-1,E,!0):m<9?g.set(8,15-m-1+1,E,!0):g.set(8,15-m-1,E,!0);g.set(l-8,8,1,!0)}function M(g,C){const y=g.size;let l=-1,A=y-1,m=7,E=0;for(let w=y-1;w>0;w-=2)for(w===6&&w--;;){for(let I=0;I<2;I++)if(!g.isReserved(A,w-I)){let v=!1;E<C.length&&(v=(C[E]>>>m&1)===1),g.set(A,w-I,v),m--,m===-1&&(E++,m=7)}if(A+=l,A<0||y<=A){A-=l,l=-l;break}}}function T(g,C,y){const l=new i;y.forEach(function(I){l.put(I.mode.bit,4),l.put(I.getLength(),p.getCharCountIndicator(I.mode,g)),I.write(l)});const A=r.getSymbolTotalCodewords(g),m=a.getTotalCodewordsCount(g,C),E=(A-m)*8;for(l.getLengthInBits()+4<=E&&l.put(0,4);l.getLengthInBits()%8!==0;)l.putBit(0);const w=(E-l.getLengthInBits())/8;for(let I=0;I<w;I++)l.put(I%2?17:236,8);return B(l,g,C)}function B(g,C,y){const l=r.getSymbolTotalCodewords(C),A=a.getTotalCodewordsCount(C,y),m=l-A,E=a.getBlocksCount(C,y),w=l%E,I=E-w,v=Math.floor(l/E),V=Math.floor(m/E),te=V+1,Ct=v-V,ee=new u(Ct);let O=0;const H=new Array(E),Et=new Array(E);let j=0;const ne=new Uint8Array(g.buffer);for(let k=0;k<E;k++){const G=k<I?V:te;H[k]=ne.slice(O,O+G),Et[k]=ee.encode(H[k]),O+=G,j=Math.max(j,G)}const Y=new Uint8Array(l);let pt=0,D,q;for(D=0;D<j;D++)for(q=0;q<E;q++)D<H[q].length&&(Y[pt++]=H[q][D]);for(D=0;D<Ct;D++)for(q=0;q<E;q++)Y[pt++]=Et[q][D];return Y}function b(g,C,y,l){let A;if(Array.isArray(g))A=h.fromArray(g);else if(typeof g=="string"){let v=C;if(!v){const V=h.rawSplit(g);v=c.getBestVersionForData(V,y)}A=h.fromString(g,v||40)}else throw new Error("Invalid data");const m=c.getBestVersionForData(A,y);if(!m)throw new Error("The amount of data is too big to be stored in a QR Code");if(!C)C=m;else if(C<m)throw new Error(`
|
|
5
|
+
The chosen QR Code version cannot contain this amount of data.
|
|
6
|
+
Minimum version required to store current data is: `+m+`.
|
|
7
|
+
`);const E=T(C,y,A),w=r.getSymbolSize(C),I=new e(w);return f(I,C),N(I),P(I,C),R(I,y,0),C>=7&&S(I,C),M(I,E),isNaN(l)&&(l=s.getBestMask(I,R.bind(null,I,y))),s.applyMask(l,I),R(I,y,l),{modules:I,version:C,errorCorrectionLevel:y,maskPattern:l,segments:A}}return W.create=function(C,y){if(typeof C>"u"||C==="")throw new Error("No input text");let l=o.M,A,m;return typeof y<"u"&&(l=o.from(y.errorCorrectionLevel,o.M),A=c.from(y.version),m=s.from(y.maskPattern),y.toSJISFunc&&r.setToSJISFunction(y.toSJISFunc)),b(C,A,l,m)},W}var ht={},mt={},jt;function xt(){return jt||(jt=1,(function(r){function o(i){if(typeof i=="number"&&(i=i.toString()),typeof i!="string")throw new Error("Color should be defined as hex string");let e=i.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+i);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(n){return[n,n]}))),e.length===6&&e.push("F","F");const t=parseInt(e.join(""),16);return{r:t>>24&255,g:t>>16&255,b:t>>8&255,a:t&255,hex:"#"+e.slice(0,6).join("")}}r.getOptions=function(e){e||(e={}),e.color||(e.color={});const t=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,n=e.width&&e.width>=21?e.width:void 0,s=e.scale||4;return{width:n,scale:n?4:s,margin:t,color:{dark:o(e.color.dark||"#000000ff"),light:o(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}},r.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},r.getImageWidth=function(e,t){const n=r.getScale(e,t);return Math.floor((e+t.margin*2)*n)},r.qrToImageData=function(e,t,n){const s=t.modules.size,a=t.modules.data,u=r.getScale(s,n),c=Math.floor((s+n.margin*2)*u),d=n.margin*u,p=[n.color.light,n.color.dark];for(let h=0;h<c;h++)for(let f=0;f<c;f++){let N=(h*c+f)*4,P=n.color.light;if(h>=d&&f>=d&&h<c-d&&f<c-d){const S=Math.floor((h-d)/u),R=Math.floor((f-d)/u);P=p[a[S*s+R]?1:0]}e[N++]=P.r,e[N++]=P.g,e[N++]=P.b,e[N]=P.a}}})(mt)),mt}var Yt;function Re(){return Yt||(Yt=1,(function(r){const o=xt();function i(t,n,s){t.clearRect(0,0,n.width,n.height),n.style||(n.style={}),n.height=s,n.width=s,n.style.height=s+"px",n.style.width=s+"px"}function e(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}r.render=function(n,s,a){let u=a,c=s;typeof u>"u"&&(!s||!s.getContext)&&(u=s,s=void 0),s||(c=e()),u=o.getOptions(u);const d=o.getImageWidth(n.modules.size,u),p=c.getContext("2d"),h=p.createImageData(d,d);return o.qrToImageData(h.data,n,u),i(p,c,d),p.putImageData(h,0,0),c},r.renderToDataURL=function(n,s,a){let u=a;typeof u>"u"&&(!s||!s.getContext)&&(u=s,s=void 0),u||(u={});const c=r.render(n,s,u),d=u.type||"image/png",p=u.rendererOpts||{};return c.toDataURL(d,p.quality)}})(ht)),ht}var wt={},Gt;function Te(){if(Gt)return wt;Gt=1;const r=xt();function o(t,n){const s=t.a/255,a=n+'="'+t.hex+'"';return s<1?a+" "+n+'-opacity="'+s.toFixed(2).slice(1)+'"':a}function i(t,n,s){let a=t+n;return typeof s<"u"&&(a+=" "+s),a}function e(t,n,s){let a="",u=0,c=!1,d=0;for(let p=0;p<t.length;p++){const h=Math.floor(p%n),f=Math.floor(p/n);!h&&!c&&(c=!0),t[p]?(d++,p>0&&h>0&&t[p-1]||(a+=c?i("M",h+s,.5+f+s):i("m",u,0),u=0,c=!1),h+1<n&&t[p+1]||(a+=i("h",d),d=0)):u++}return a}return wt.render=function(n,s,a){const u=r.getOptions(s),c=n.modules.size,d=n.modules.data,p=c+u.margin*2,h=u.color.light.a?"<path "+o(u.color.light,"fill")+' d="M0 0h'+p+"v"+p+'H0z"/>':"",f="<path "+o(u.color.dark,"stroke")+' d="'+e(d,c,u.margin)+'"/>',N='viewBox="0 0 '+p+" "+p+'"',S='<svg xmlns="http://www.w3.org/2000/svg" '+(u.width?'width="'+u.width+'" height="'+u.width+'" ':"")+N+' shape-rendering="crispEdges">'+h+f+`</svg>
|
|
8
|
+
`;return typeof a=="function"&&a(null,S),S},wt}var Qt;function Ie(){if(Qt)return z;Qt=1;const r=ie(),o=Ae(),i=Re(),e=Te();function t(n,s,a,u,c){const d=[].slice.call(arguments,1),p=d.length,h=typeof d[p-1]=="function";if(!h&&!r())throw new Error("Callback required as last argument");if(h){if(p<2)throw new Error("Too few arguments provided");p===2?(c=a,a=s,s=u=void 0):p===3&&(s.getContext&&typeof c>"u"?(c=u,u=void 0):(c=u,u=a,a=s,s=void 0))}else{if(p<1)throw new Error("Too few arguments provided");return p===1?(a=s,s=u=void 0):p===2&&!s.getContext&&(u=a,a=s,s=void 0),new Promise(function(f,N){try{const P=o.create(a,u);f(n(P,s,u))}catch(P){N(P)}})}try{const f=o.create(a,u);c(null,n(f,s,u))}catch(f){c(f)}}return z.create=o.create,z.toCanvas=t.bind(null,i.render),z.toDataURL=t.bind(null,i.renderToDataURL),z.toString=t.bind(null,function(n,s,a){return e.render(n,a)}),z}var $t=Ie();const Ne=re($t),Me=oe({__proto__:null,default:Ne},[$t]);export{Me as b};
|