@jackle.dev/zalox 1.0.1
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 +185 -0
- package/dist/cli/commands/admin.d.ts +17 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +359 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +3 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +88 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/autoreply.d.ts +12 -0
- package/dist/cli/commands/autoreply.d.ts.map +1 -0
- package/dist/cli/commands/autoreply.js +162 -0
- package/dist/cli/commands/autoreply.js.map +1 -0
- package/dist/cli/commands/bulk.d.ts +9 -0
- package/dist/cli/commands/bulk.d.ts.map +1 -0
- package/dist/cli/commands/bulk.js +169 -0
- package/dist/cli/commands/bulk.js.map +1 -0
- package/dist/cli/commands/config.d.ts +14 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +122 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/conv.d.ts +3 -0
- package/dist/cli/commands/conv.d.ts.map +1 -0
- package/dist/cli/commands/conv.js +229 -0
- package/dist/cli/commands/conv.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +13 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +102 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/export.d.ts +10 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +98 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/friend.d.ts +13 -0
- package/dist/cli/commands/friend.d.ts.map +1 -0
- package/dist/cli/commands/friend.js +337 -0
- package/dist/cli/commands/friend.js.map +1 -0
- package/dist/cli/commands/group-settings.d.ts +11 -0
- package/dist/cli/commands/group-settings.d.ts.map +1 -0
- package/dist/cli/commands/group-settings.js +154 -0
- package/dist/cli/commands/group-settings.js.map +1 -0
- package/dist/cli/commands/group.d.ts +14 -0
- package/dist/cli/commands/group.d.ts.map +1 -0
- package/dist/cli/commands/group.js +365 -0
- package/dist/cli/commands/group.js.map +1 -0
- package/dist/cli/commands/license.d.ts +13 -0
- package/dist/cli/commands/license.d.ts.map +1 -0
- package/dist/cli/commands/license.js +218 -0
- package/dist/cli/commands/license.js.map +1 -0
- package/dist/cli/commands/listen.d.ts +3 -0
- package/dist/cli/commands/listen.d.ts.map +1 -0
- package/dist/cli/commands/listen.js +177 -0
- package/dist/cli/commands/listen.js.map +1 -0
- package/dist/cli/commands/me.d.ts +9 -0
- package/dist/cli/commands/me.d.ts.map +1 -0
- package/dist/cli/commands/me.js +135 -0
- package/dist/cli/commands/me.js.map +1 -0
- package/dist/cli/commands/msg.d.ts +11 -0
- package/dist/cli/commands/msg.d.ts.map +1 -0
- package/dist/cli/commands/msg.js +255 -0
- package/dist/cli/commands/msg.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +3 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +50 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/schedule.d.ts +12 -0
- package/dist/cli/commands/schedule.d.ts.map +1 -0
- package/dist/cli/commands/schedule.js +175 -0
- package/dist/cli/commands/schedule.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +87 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/template.d.ts +12 -0
- package/dist/cli/commands/template.d.ts.map +1 -0
- package/dist/cli/commands/template.js +163 -0
- package/dist/cli/commands/template.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 +116 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +63 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +144 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/core/autoreply.d.ts +57 -0
- package/dist/core/autoreply.d.ts.map +1 -0
- package/dist/core/autoreply.js +159 -0
- package/dist/core/autoreply.js.map +1 -0
- package/dist/core/bulk.d.ts +36 -0
- package/dist/core/bulk.d.ts.map +1 -0
- package/dist/core/bulk.js +117 -0
- package/dist/core/bulk.js.map +1 -0
- package/dist/core/client.d.ts +8 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +91 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/daemon.d.ts +30 -0
- package/dist/core/daemon.d.ts.map +1 -0
- package/dist/core/daemon.js +213 -0
- package/dist/core/daemon.js.map +1 -0
- package/dist/core/dm-commands.d.ts +41 -0
- package/dist/core/dm-commands.d.ts.map +1 -0
- package/dist/core/dm-commands.js +313 -0
- package/dist/core/dm-commands.js.map +1 -0
- package/dist/core/export.d.ts +20 -0
- package/dist/core/export.d.ts.map +1 -0
- package/dist/core/export.js +92 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/gate.d.ts +39 -0
- package/dist/core/gate.d.ts.map +1 -0
- package/dist/core/gate.js +75 -0
- package/dist/core/gate.js.map +1 -0
- package/dist/core/group-settings.d.ts +35 -0
- package/dist/core/group-settings.d.ts.map +1 -0
- package/dist/core/group-settings.js +70 -0
- package/dist/core/group-settings.js.map +1 -0
- package/dist/core/index.d.ts +22 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/license.d.ts +103 -0
- package/dist/core/license.d.ts.map +1 -0
- package/dist/core/license.js +444 -0
- package/dist/core/license.js.map +1 -0
- package/dist/core/scheduler.d.ts +45 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +203 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/templates.d.ts +35 -0
- package/dist/core/templates.d.ts.map +1 -0
- package/dist/core/templates.js +107 -0
- package/dist/core/templates.js.map +1 -0
- package/dist/core/types.d.ts +57 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -0
- package/dist/server/api.d.ts +2 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +79 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/index.d.ts +16 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +48 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/license-api.d.ts +55 -0
- package/dist/server/license-api.d.ts.map +1 -0
- package/dist/server/license-api.js +496 -0
- package/dist/server/license-api.js.map +1 -0
- package/dist/server/middleware.d.ts +18 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +92 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/webhook.d.ts +10 -0
- package/dist/server/webhook.d.ts.map +1 -0
- package/dist/server/webhook.js +53 -0
- package/dist/server/webhook.js.map +1 -0
- package/dist/server/ws.d.ts +66 -0
- package/dist/server/ws.d.ts.map +1 -0
- package/dist/server/ws.js +203 -0
- package/dist/server/ws.js.map +1 -0
- package/dist/utils/cache.d.ts +35 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +78 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/config.d.ts +16 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +88 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ZaloX — Modern Zalo CLI & API Platform
|
|
4
|
+
* Built on zca-js (MIT) — https://github.com/RFS-ADRENO/zca-js
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { authCommands } from './commands/auth.js';
|
|
9
|
+
import { registerMsgCommands } from './commands/msg.js';
|
|
10
|
+
import { registerFriendCommands } from './commands/friend.js';
|
|
11
|
+
import { registerGroupCommands } from './commands/group.js';
|
|
12
|
+
import { listenCommands } from './commands/listen.js';
|
|
13
|
+
import { convCommands } from './commands/conv.js';
|
|
14
|
+
import { serveCommands } from './commands/serve.js';
|
|
15
|
+
import { configCommands } from './commands/config.js';
|
|
16
|
+
import { registerMeCommands } from './commands/me.js';
|
|
17
|
+
import { licenseCommands } from './commands/license.js';
|
|
18
|
+
import { templateCommands } from './commands/template.js';
|
|
19
|
+
import { scheduleCommands } from './commands/schedule.js';
|
|
20
|
+
import { autoreplyCommands } from './commands/autoreply.js';
|
|
21
|
+
import { bulkCommands } from './commands/bulk.js';
|
|
22
|
+
import { exportCommands } from './commands/export.js';
|
|
23
|
+
import { daemonCommands } from './commands/daemon.js';
|
|
24
|
+
import { groupSettingsCommands } from './commands/group-settings.js';
|
|
25
|
+
import { adminCommands } from './commands/admin.js';
|
|
26
|
+
const VERSION = '1.0.0';
|
|
27
|
+
const program = new Command();
|
|
28
|
+
program
|
|
29
|
+
.name('zalox')
|
|
30
|
+
.description('🚀 ZaloX — Modern Zalo CLI & API Platform')
|
|
31
|
+
.version(VERSION, '-v, --version')
|
|
32
|
+
.option('-p, --profile <name>', 'Use a specific account profile')
|
|
33
|
+
.option('-j, --json', 'Output in JSON format')
|
|
34
|
+
.enablePositionalOptions()
|
|
35
|
+
.passThroughOptions()
|
|
36
|
+
.option('--verbose', 'Enable verbose logging');
|
|
37
|
+
// Register all command groups
|
|
38
|
+
authCommands(program);
|
|
39
|
+
registerMsgCommands(program);
|
|
40
|
+
registerFriendCommands(program);
|
|
41
|
+
registerGroupCommands(program);
|
|
42
|
+
listenCommands(program);
|
|
43
|
+
convCommands(program);
|
|
44
|
+
serveCommands(program);
|
|
45
|
+
configCommands(program);
|
|
46
|
+
registerMeCommands(program);
|
|
47
|
+
licenseCommands(program);
|
|
48
|
+
templateCommands(program);
|
|
49
|
+
scheduleCommands(program);
|
|
50
|
+
autoreplyCommands(program);
|
|
51
|
+
bulkCommands(program);
|
|
52
|
+
exportCommands(program);
|
|
53
|
+
daemonCommands(program);
|
|
54
|
+
groupSettingsCommands(program);
|
|
55
|
+
adminCommands(program);
|
|
56
|
+
// Default action: show help
|
|
57
|
+
program.action(() => {
|
|
58
|
+
console.log(`
|
|
59
|
+
${chalk.cyan('╔═══════════════════════════════╗')}
|
|
60
|
+
${chalk.cyan('║')} ${chalk.bold.white('ZaloX')} ${chalk.gray(`v${VERSION}`)} ${chalk.cyan('║')}
|
|
61
|
+
${chalk.cyan('║')} ${chalk.gray('Zalo Automation, Unleashed.')} ${chalk.cyan(' ║')}
|
|
62
|
+
${chalk.cyan('╚═══════════════════════════════╝')}
|
|
63
|
+
`);
|
|
64
|
+
program.outputHelp();
|
|
65
|
+
});
|
|
66
|
+
program.addHelpText('after', `
|
|
67
|
+
${chalk.gray('Examples:')}
|
|
68
|
+
${chalk.cyan('$')} zalox auth login Login via QR code
|
|
69
|
+
${chalk.cyan('$')} zalox auth status Check login status
|
|
70
|
+
${chalk.cyan('$')} zalox me Your Zalo profile
|
|
71
|
+
${chalk.cyan('$')} zalox friend list List all friends
|
|
72
|
+
${chalk.cyan('$')} zalox group list List all groups
|
|
73
|
+
${chalk.cyan('$')} zalox msg send <id> "Hello" Send a message
|
|
74
|
+
${chalk.cyan('$')} zalox conv list Recent conversations
|
|
75
|
+
${chalk.cyan('$')} zalox listen Real-time event listener
|
|
76
|
+
${chalk.cyan('$')} zalox listen --json Listen with JSON output
|
|
77
|
+
${chalk.cyan('$')} zalox serve Start REST API server ${chalk.yellow('[Pro]')}
|
|
78
|
+
${chalk.cyan('$')} zalox daemon Start all-in-one daemon 🤖
|
|
79
|
+
${chalk.cyan('$')} zalox status Show status overview
|
|
80
|
+
${chalk.cyan('$')} zalox config show Show configuration
|
|
81
|
+
${chalk.cyan('$')} zalox license status Check license
|
|
82
|
+
${chalk.cyan('$')} zalox license features Feature comparison
|
|
83
|
+
|
|
84
|
+
${chalk.gray('Templates & Automation:')}
|
|
85
|
+
${chalk.cyan('$')} zalox template create hi "Hello {{name}}!" ${chalk.yellow('[Starter+]')}
|
|
86
|
+
${chalk.cyan('$')} zalox template send hi <id> --var name=John ${chalk.yellow('[Starter+]')}
|
|
87
|
+
${chalk.cyan('$')} zalox schedule add <id> "Hi" --at "2026-02-12 09:00" ${chalk.yellow('[Pro+]')}
|
|
88
|
+
${chalk.cyan('$')} zalox schedule add <id> "GM" --cron "0 8 * * *" ${chalk.yellow('[Pro+]')}
|
|
89
|
+
${chalk.cyan('$')} zalox schedule run ${chalk.yellow('[Pro+]')}
|
|
90
|
+
${chalk.cyan('$')} zalox autoreply add faq --trigger "giá" --response "..." ${chalk.yellow('[Pro+]')}
|
|
91
|
+
${chalk.cyan('$')} zalox autoreply test "giá sản phẩm" ${chalk.yellow('[Pro+]')}
|
|
92
|
+
${chalk.cyan('$')} zalox bulk send --friends --message "Happy NY!" ${chalk.yellow('[Pro+]')}
|
|
93
|
+
${chalk.cyan('$')} zalox bulk usage ${chalk.yellow('[Pro+]')}
|
|
94
|
+
${chalk.cyan('$')} zalox export friends --format csv -o out.csv ${chalk.yellow('[Pro+]')}
|
|
95
|
+
${chalk.cyan('$')} zalox export groups --format json ${chalk.yellow('[Pro+]')}
|
|
96
|
+
|
|
97
|
+
${chalk.gray('Group Settings:')}
|
|
98
|
+
${chalk.cyan('$')} zalox gs list Show all group settings
|
|
99
|
+
${chalk.cyan('$')} zalox gs show <id> Show settings for a group
|
|
100
|
+
${chalk.cyan('$')} zalox gs set <id> welcome "Hi!" Set welcome message
|
|
101
|
+
${chalk.cyan('$')} zalox gs set <id> autoReply on Toggle auto-reply
|
|
102
|
+
${chalk.cyan('$')} zalox gs set <id> antiSpam on Toggle anti-spam
|
|
103
|
+
${chalk.cyan('$')} zalox gs reset <id> Reset to defaults
|
|
104
|
+
|
|
105
|
+
${chalk.gray('Multi-account:')}
|
|
106
|
+
${chalk.cyan('$')} zalox auth login -p work Login with "work" profile
|
|
107
|
+
${chalk.cyan('$')} zalox auth use work Switch to "work" profile
|
|
108
|
+
${chalk.cyan('$')} zalox -p work friend list Use "work" for one command
|
|
109
|
+
|
|
110
|
+
${chalk.yellow('⚠ Not affiliated with Zalo or VNG Corporation.')}
|
|
111
|
+
`);
|
|
112
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
113
|
+
console.error(chalk.red(`\n✗ ${err.message || err}\n`));
|
|
114
|
+
process.exit(1);
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { User } from "zca-js";
|
|
2
|
+
/**
|
|
3
|
+
* Render a table with headers and rows
|
|
4
|
+
*/
|
|
5
|
+
export declare function formatTable(headers: string[], rows: string[][]): string;
|
|
6
|
+
/**
|
|
7
|
+
* Pretty-print JSON with colors
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatJson(data: unknown): string;
|
|
10
|
+
/**
|
|
11
|
+
* Pretty-print a message event
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatMessage(msg: {
|
|
14
|
+
threadId: string;
|
|
15
|
+
isSelf: boolean;
|
|
16
|
+
type: number;
|
|
17
|
+
data: {
|
|
18
|
+
uidFrom: string;
|
|
19
|
+
dName?: string;
|
|
20
|
+
content: unknown;
|
|
21
|
+
ts: string;
|
|
22
|
+
msgId: string;
|
|
23
|
+
msgType: string;
|
|
24
|
+
};
|
|
25
|
+
}): string;
|
|
26
|
+
/**
|
|
27
|
+
* Pretty-print a user
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatUser(user: Partial<User>): string;
|
|
30
|
+
/**
|
|
31
|
+
* Pretty-print a group
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatGroup(group: {
|
|
34
|
+
groupId?: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
desc?: string;
|
|
37
|
+
totalMember?: number;
|
|
38
|
+
maxMember?: number;
|
|
39
|
+
creatorId?: string;
|
|
40
|
+
createdTime?: number;
|
|
41
|
+
avt?: string;
|
|
42
|
+
}): string;
|
|
43
|
+
/**
|
|
44
|
+
* Print success message
|
|
45
|
+
*/
|
|
46
|
+
export declare function printSuccess(msg: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Print error message
|
|
49
|
+
*/
|
|
50
|
+
export declare function printError(msg: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Print warning message
|
|
53
|
+
*/
|
|
54
|
+
export declare function printWarn(msg: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Print info message
|
|
57
|
+
*/
|
|
58
|
+
export declare function printInfo(msg: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Truncate a string to maxLen, adding "…" if truncated
|
|
61
|
+
*/
|
|
62
|
+
export declare function truncate(str: string, maxLen?: number): string;
|
|
63
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CA0BvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,GAAG,MAAM,CAsBT;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAwBtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAoBT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGjE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZaloX Output Formatting Utilities
|
|
3
|
+
*/
|
|
4
|
+
import Table from "cli-table3";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
/**
|
|
7
|
+
* Render a table with headers and rows
|
|
8
|
+
*/
|
|
9
|
+
export function formatTable(headers, rows) {
|
|
10
|
+
const table = new Table({
|
|
11
|
+
head: headers.map((h) => chalk.cyan.bold(h)),
|
|
12
|
+
style: { head: [], border: [] },
|
|
13
|
+
chars: {
|
|
14
|
+
top: "─",
|
|
15
|
+
"top-mid": "┬",
|
|
16
|
+
"top-left": "┌",
|
|
17
|
+
"top-right": "┐",
|
|
18
|
+
bottom: "─",
|
|
19
|
+
"bottom-mid": "┴",
|
|
20
|
+
"bottom-left": "└",
|
|
21
|
+
"bottom-right": "┘",
|
|
22
|
+
left: "│",
|
|
23
|
+
"left-mid": "├",
|
|
24
|
+
mid: "─",
|
|
25
|
+
"mid-mid": "┼",
|
|
26
|
+
right: "│",
|
|
27
|
+
"right-mid": "┤",
|
|
28
|
+
middle: "│",
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
for (const row of rows) {
|
|
32
|
+
table.push(row);
|
|
33
|
+
}
|
|
34
|
+
return table.toString();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Pretty-print JSON with colors
|
|
38
|
+
*/
|
|
39
|
+
export function formatJson(data) {
|
|
40
|
+
return JSON.stringify(data, null, 2);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Pretty-print a message event
|
|
44
|
+
*/
|
|
45
|
+
export function formatMessage(msg) {
|
|
46
|
+
const ts = new Date(parseInt(msg.data.ts)).toLocaleTimeString();
|
|
47
|
+
const sender = msg.data.dName || msg.data.uidFrom;
|
|
48
|
+
const threadType = msg.type === 1 ? "group" : "user";
|
|
49
|
+
const selfTag = msg.isSelf ? chalk.gray(" (self)") : "";
|
|
50
|
+
const content = typeof msg.data.content === "string"
|
|
51
|
+
? msg.data.content
|
|
52
|
+
: JSON.stringify(msg.data.content);
|
|
53
|
+
return (chalk.gray(`[${ts}]`) +
|
|
54
|
+
" " +
|
|
55
|
+
chalk.blue(`[${threadType}:${msg.threadId}]`) +
|
|
56
|
+
" " +
|
|
57
|
+
chalk.green.bold(sender) +
|
|
58
|
+
selfTag +
|
|
59
|
+
chalk.gray(": ") +
|
|
60
|
+
content +
|
|
61
|
+
" " +
|
|
62
|
+
chalk.gray(`(msgId: ${msg.data.msgId})`));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Pretty-print a user
|
|
66
|
+
*/
|
|
67
|
+
export function formatUser(user) {
|
|
68
|
+
const lines = [];
|
|
69
|
+
lines.push(chalk.bold.cyan("👤 User Info"));
|
|
70
|
+
lines.push(chalk.gray("─".repeat(40)));
|
|
71
|
+
if (user.userId)
|
|
72
|
+
lines.push(` ${chalk.bold("ID:")} ${user.userId}`);
|
|
73
|
+
if (user.displayName)
|
|
74
|
+
lines.push(` ${chalk.bold("Display:")} ${user.displayName}`);
|
|
75
|
+
if (user.zaloName)
|
|
76
|
+
lines.push(` ${chalk.bold("Zalo Name:")} ${user.zaloName}`);
|
|
77
|
+
if (user.phoneNumber)
|
|
78
|
+
lines.push(` ${chalk.bold("Phone:")} ${user.phoneNumber}`);
|
|
79
|
+
if (user.gender !== undefined)
|
|
80
|
+
lines.push(` ${chalk.bold("Gender:")} ${user.gender === 0 ? "Male" : "Female"}`);
|
|
81
|
+
if (user.status)
|
|
82
|
+
lines.push(` ${chalk.bold("Status:")} ${user.status}`);
|
|
83
|
+
if (user.avatar)
|
|
84
|
+
lines.push(` ${chalk.bold("Avatar:")} ${user.avatar}`);
|
|
85
|
+
if (user.isFr !== undefined)
|
|
86
|
+
lines.push(` ${chalk.bold("Is Friend:")} ${user.isFr === 1 ? chalk.green("Yes") : chalk.red("No")}`);
|
|
87
|
+
return lines.join("\n");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Pretty-print a group
|
|
91
|
+
*/
|
|
92
|
+
export function formatGroup(group) {
|
|
93
|
+
const lines = [];
|
|
94
|
+
lines.push(chalk.bold.cyan("👥 Group Info"));
|
|
95
|
+
lines.push(chalk.gray("─".repeat(40)));
|
|
96
|
+
if (group.groupId)
|
|
97
|
+
lines.push(` ${chalk.bold("ID:")} ${group.groupId}`);
|
|
98
|
+
if (group.name)
|
|
99
|
+
lines.push(` ${chalk.bold("Name:")} ${group.name}`);
|
|
100
|
+
if (group.desc)
|
|
101
|
+
lines.push(` ${chalk.bold("Description:")} ${group.desc}`);
|
|
102
|
+
if (group.totalMember !== undefined)
|
|
103
|
+
lines.push(` ${chalk.bold("Members:")} ${group.totalMember}${group.maxMember ? `/${group.maxMember}` : ""}`);
|
|
104
|
+
if (group.creatorId)
|
|
105
|
+
lines.push(` ${chalk.bold("Creator:")} ${group.creatorId}`);
|
|
106
|
+
if (group.createdTime)
|
|
107
|
+
lines.push(` ${chalk.bold("Created:")} ${new Date(group.createdTime).toLocaleString()}`);
|
|
108
|
+
if (group.avt)
|
|
109
|
+
lines.push(` ${chalk.bold("Avatar:")} ${group.avt}`);
|
|
110
|
+
return lines.join("\n");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Print success message
|
|
114
|
+
*/
|
|
115
|
+
export function printSuccess(msg) {
|
|
116
|
+
console.log(chalk.green("✓ ") + msg);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Print error message
|
|
120
|
+
*/
|
|
121
|
+
export function printError(msg) {
|
|
122
|
+
console.error(chalk.red("✗ ") + msg);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Print warning message
|
|
126
|
+
*/
|
|
127
|
+
export function printWarn(msg) {
|
|
128
|
+
console.log(chalk.yellow("⚠ ") + msg);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Print info message
|
|
132
|
+
*/
|
|
133
|
+
export function printInfo(msg) {
|
|
134
|
+
console.log(chalk.blue("ℹ ") + msg);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Truncate a string to maxLen, adding "…" if truncated
|
|
138
|
+
*/
|
|
139
|
+
export function truncate(str, maxLen = 50) {
|
|
140
|
+
if (str.length <= maxLen)
|
|
141
|
+
return str;
|
|
142
|
+
return str.slice(0, maxLen - 1) + "…";
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZaloX — Auto-Reply System
|
|
3
|
+
*
|
|
4
|
+
* Rule-based auto-reply with trigger matching (contains, exact, regex, startsWith).
|
|
5
|
+
* Rules stored in ~/.openclaw/zalox/autoreplies.json
|
|
6
|
+
*/
|
|
7
|
+
export interface AutoReplyRule {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
trigger: {
|
|
11
|
+
type: 'contains' | 'exact' | 'regex' | 'startsWith';
|
|
12
|
+
pattern: string;
|
|
13
|
+
caseSensitive?: boolean;
|
|
14
|
+
};
|
|
15
|
+
response: string;
|
|
16
|
+
templateId?: string;
|
|
17
|
+
scope: 'all' | 'dm' | 'group';
|
|
18
|
+
groupIds?: string[];
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
priority: number;
|
|
21
|
+
cooldownMs?: number;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
}
|
|
24
|
+
export interface MatchContext {
|
|
25
|
+
threadId: string;
|
|
26
|
+
senderId: string;
|
|
27
|
+
senderName?: string;
|
|
28
|
+
isGroup: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Add a new auto-reply rule.
|
|
32
|
+
*/
|
|
33
|
+
export declare function addRule(rule: Omit<AutoReplyRule, 'id' | 'createdAt'>): AutoReplyRule;
|
|
34
|
+
/**
|
|
35
|
+
* List all auto-reply rules.
|
|
36
|
+
*/
|
|
37
|
+
export declare function listRules(): AutoReplyRule[];
|
|
38
|
+
/**
|
|
39
|
+
* Remove a rule by ID.
|
|
40
|
+
*/
|
|
41
|
+
export declare function removeRule(id: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Toggle a rule's enabled state.
|
|
44
|
+
*/
|
|
45
|
+
export declare function toggleRule(id: string): AutoReplyRule | null;
|
|
46
|
+
/**
|
|
47
|
+
* Match incoming message against all rules.
|
|
48
|
+
* Returns the highest-priority matching rule, respecting scope and cooldown.
|
|
49
|
+
*/
|
|
50
|
+
export declare function matchRules(message: string, context: MatchContext): AutoReplyRule | null;
|
|
51
|
+
/**
|
|
52
|
+
* Render auto-reply response with context variables.
|
|
53
|
+
*/
|
|
54
|
+
export declare function renderResponse(response: string, context: MatchContext & {
|
|
55
|
+
message: string;
|
|
56
|
+
}): string;
|
|
57
|
+
//# sourceMappingURL=autoreply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoreply.d.ts","sourceRoot":"","sources":["../../src/core/autoreply.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;QACpD,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AA6BD;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAAC,GAC5C,aAAa,CAYf;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,aAAa,EAAE,CAE3C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAM9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAO3D;AAsCD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GACpB,aAAa,GAAG,IAAI,CA0CtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAC1C,MAAM,CAMR"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZaloX — Auto-Reply System
|
|
3
|
+
*
|
|
4
|
+
* Rule-based auto-reply with trigger matching (contains, exact, regex, startsWith).
|
|
5
|
+
* Rules stored in ~/.openclaw/zalox/autoreplies.json
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { randomUUID } from 'crypto';
|
|
10
|
+
import { getConfigDir, ensureConfigDir } from '../utils/config.js';
|
|
11
|
+
// ── Cooldown tracker (in-memory) ─────────────────────────
|
|
12
|
+
const cooldowns = new Map(); // "ruleId:senderId" → lastReplyTs
|
|
13
|
+
// ── Helpers ──────────────────────────────────────────────
|
|
14
|
+
function getRulesPath() {
|
|
15
|
+
return join(getConfigDir(), 'autoreplies.json');
|
|
16
|
+
}
|
|
17
|
+
function loadRules() {
|
|
18
|
+
const path = getRulesPath();
|
|
19
|
+
if (!existsSync(path))
|
|
20
|
+
return [];
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function saveRules(rules) {
|
|
29
|
+
ensureConfigDir();
|
|
30
|
+
writeFileSync(getRulesPath(), JSON.stringify(rules, null, 2));
|
|
31
|
+
}
|
|
32
|
+
// ── Core Functions ───────────────────────────────────────
|
|
33
|
+
/**
|
|
34
|
+
* Add a new auto-reply rule.
|
|
35
|
+
*/
|
|
36
|
+
export function addRule(rule) {
|
|
37
|
+
const rules = loadRules();
|
|
38
|
+
const newRule = {
|
|
39
|
+
...rule,
|
|
40
|
+
id: randomUUID().split('-')[0],
|
|
41
|
+
createdAt: new Date().toISOString(),
|
|
42
|
+
};
|
|
43
|
+
rules.push(newRule);
|
|
44
|
+
saveRules(rules);
|
|
45
|
+
return newRule;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* List all auto-reply rules.
|
|
49
|
+
*/
|
|
50
|
+
export function listRules() {
|
|
51
|
+
return loadRules().sort((a, b) => a.priority - b.priority);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Remove a rule by ID.
|
|
55
|
+
*/
|
|
56
|
+
export function removeRule(id) {
|
|
57
|
+
const rules = loadRules();
|
|
58
|
+
const filtered = rules.filter((r) => r.id !== id);
|
|
59
|
+
if (filtered.length === rules.length)
|
|
60
|
+
return false;
|
|
61
|
+
saveRules(filtered);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Toggle a rule's enabled state.
|
|
66
|
+
*/
|
|
67
|
+
export function toggleRule(id) {
|
|
68
|
+
const rules = loadRules();
|
|
69
|
+
const rule = rules.find((r) => r.id === id);
|
|
70
|
+
if (!rule)
|
|
71
|
+
return null;
|
|
72
|
+
rule.enabled = !rule.enabled;
|
|
73
|
+
saveRules(rules);
|
|
74
|
+
return rule;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Test if a message triggers a rule.
|
|
78
|
+
*/
|
|
79
|
+
function testTrigger(trigger, message) {
|
|
80
|
+
const msg = trigger.caseSensitive ? message : message.toLowerCase();
|
|
81
|
+
const pattern = trigger.caseSensitive
|
|
82
|
+
? trigger.pattern
|
|
83
|
+
: trigger.pattern.toLowerCase();
|
|
84
|
+
switch (trigger.type) {
|
|
85
|
+
case 'contains':
|
|
86
|
+
return msg.includes(pattern);
|
|
87
|
+
case 'exact':
|
|
88
|
+
return msg === pattern;
|
|
89
|
+
case 'startsWith':
|
|
90
|
+
return msg.startsWith(pattern);
|
|
91
|
+
case 'regex': {
|
|
92
|
+
try {
|
|
93
|
+
// Support /pattern/flags format
|
|
94
|
+
const regexMatch = trigger.pattern.match(/^\/(.+)\/([gimsuy]*)$/);
|
|
95
|
+
const regex = regexMatch
|
|
96
|
+
? new RegExp(regexMatch[1], regexMatch[2])
|
|
97
|
+
: new RegExp(trigger.pattern, trigger.caseSensitive ? '' : 'i');
|
|
98
|
+
return regex.test(message);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Match incoming message against all rules.
|
|
110
|
+
* Returns the highest-priority matching rule, respecting scope and cooldown.
|
|
111
|
+
*/
|
|
112
|
+
export function matchRules(message, context) {
|
|
113
|
+
const rules = listRules(); // sorted by priority
|
|
114
|
+
for (const rule of rules) {
|
|
115
|
+
if (!rule.enabled)
|
|
116
|
+
continue;
|
|
117
|
+
// Check scope
|
|
118
|
+
if (rule.scope === 'dm' && context.isGroup)
|
|
119
|
+
continue;
|
|
120
|
+
if (rule.scope === 'group' && !context.isGroup)
|
|
121
|
+
continue;
|
|
122
|
+
// Check specific group filter
|
|
123
|
+
if (rule.groupIds &&
|
|
124
|
+
rule.groupIds.length > 0 &&
|
|
125
|
+
context.isGroup &&
|
|
126
|
+
!rule.groupIds.includes(context.threadId)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// Check cooldown
|
|
130
|
+
if (rule.cooldownMs) {
|
|
131
|
+
const key = `${rule.id}:${context.senderId}`;
|
|
132
|
+
const lastReply = cooldowns.get(key);
|
|
133
|
+
if (lastReply && Date.now() - lastReply < rule.cooldownMs) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Test trigger
|
|
138
|
+
if (testTrigger(rule.trigger, message)) {
|
|
139
|
+
// Record cooldown
|
|
140
|
+
if (rule.cooldownMs) {
|
|
141
|
+
const key = `${rule.id}:${context.senderId}`;
|
|
142
|
+
cooldowns.set(key, Date.now());
|
|
143
|
+
}
|
|
144
|
+
return rule;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Render auto-reply response with context variables.
|
|
151
|
+
*/
|
|
152
|
+
export function renderResponse(response, context) {
|
|
153
|
+
return response
|
|
154
|
+
.replace(/\{\{senderName\}\}/g, context.senderName || context.senderId)
|
|
155
|
+
.replace(/\{\{message\}\}/g, context.message)
|
|
156
|
+
.replace(/\{\{threadId\}\}/g, context.threadId)
|
|
157
|
+
.replace(/\{\{senderId\}\}/g, context.senderId);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=autoreply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoreply.js","sourceRoot":"","sources":["../../src/core/autoreply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZaloX — Bulk Send System
|
|
3
|
+
*
|
|
4
|
+
* Multi-recipient message sending with rate limiting per license tier.
|
|
5
|
+
* Daily usage tracked in ~/.openclaw/zalox/bulk-usage.json
|
|
6
|
+
*/
|
|
7
|
+
import type { API } from 'zca-js';
|
|
8
|
+
export interface BulkSendOptions {
|
|
9
|
+
threadIds: string[];
|
|
10
|
+
message: string;
|
|
11
|
+
templateId?: string;
|
|
12
|
+
templateVars?: Record<string, string>;
|
|
13
|
+
isGroup?: boolean;
|
|
14
|
+
delayMs?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface BulkSendResult {
|
|
17
|
+
total: number;
|
|
18
|
+
sent: number;
|
|
19
|
+
failed: number;
|
|
20
|
+
results: {
|
|
21
|
+
threadId: string;
|
|
22
|
+
ok: boolean;
|
|
23
|
+
error?: string;
|
|
24
|
+
}[];
|
|
25
|
+
}
|
|
26
|
+
interface BulkUsage {
|
|
27
|
+
date: string;
|
|
28
|
+
count: number;
|
|
29
|
+
}
|
|
30
|
+
export declare function getBulkUsage(): BulkUsage;
|
|
31
|
+
/**
|
|
32
|
+
* Send a message to multiple recipients with rate limiting.
|
|
33
|
+
*/
|
|
34
|
+
export declare function bulkSend(api: API, options: BulkSendOptions, onProgress?: (sent: number, total: number) => void): Promise<BulkSendResult>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=bulk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk.d.ts","sourceRoot":"","sources":["../../src/core/bulk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAOlC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9D;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAYD,wBAAgB,YAAY,IAAI,SAAS,CAexC;AAiBD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,cAAc,CAAC,CAyEzB"}
|