@zengxingyuan/aamp-feishu-bridge 0.1.10

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.
Files changed (58) hide show
  1. package/README.md +68 -0
  2. package/dist/config.d.ts +44 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +254 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/feishu-cli.d.ts +16 -0
  7. package/dist/feishu-cli.d.ts.map +1 -0
  8. package/dist/feishu-cli.js +182 -0
  9. package/dist/feishu-cli.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +331 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lark-cli-channel.d.ts +42 -0
  15. package/dist/lark-cli-channel.d.ts.map +1 -0
  16. package/dist/lark-cli-channel.js +376 -0
  17. package/dist/lark-cli-channel.js.map +1 -0
  18. package/dist/runtime.d.ts +154 -0
  19. package/dist/runtime.d.ts.map +1 -0
  20. package/dist/runtime.js +2422 -0
  21. package/dist/runtime.js.map +1 -0
  22. package/dist/task/ack.d.ts +12 -0
  23. package/dist/task/ack.d.ts.map +1 -0
  24. package/dist/task/ack.js +41 -0
  25. package/dist/task/ack.js.map +1 -0
  26. package/dist/task/config.d.ts +40 -0
  27. package/dist/task/config.d.ts.map +1 -0
  28. package/dist/task/config.js +286 -0
  29. package/dist/task/config.js.map +1 -0
  30. package/dist/task/dispatch.d.ts +12 -0
  31. package/dist/task/dispatch.d.ts.map +1 -0
  32. package/dist/task/dispatch.js +320 -0
  33. package/dist/task/dispatch.js.map +1 -0
  34. package/dist/task/events.d.ts +3 -0
  35. package/dist/task/events.d.ts.map +1 -0
  36. package/dist/task/events.js +21 -0
  37. package/dist/task/events.js.map +1 -0
  38. package/dist/task/feishu.d.ts +56 -0
  39. package/dist/task/feishu.d.ts.map +1 -0
  40. package/dist/task/feishu.js +647 -0
  41. package/dist/task/feishu.js.map +1 -0
  42. package/dist/task/runtime.d.ts +124 -0
  43. package/dist/task/runtime.d.ts.map +1 -0
  44. package/dist/task/runtime.js +1907 -0
  45. package/dist/task/runtime.js.map +1 -0
  46. package/dist/task/types.d.ts +205 -0
  47. package/dist/task/types.d.ts.map +1 -0
  48. package/dist/task/types.js +2 -0
  49. package/dist/task/types.js.map +1 -0
  50. package/dist/task-runtime.d.ts +40 -0
  51. package/dist/task-runtime.d.ts.map +1 -0
  52. package/dist/task-runtime.js +458 -0
  53. package/dist/task-runtime.js.map +1 -0
  54. package/dist/types.d.ts +114 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +28 -0
package/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # aamp-feishu-bridge
2
+
3
+ Local bridge daemon for connecting a user-owned Feishu bot to a target AAMP
4
+ Agent.
5
+
6
+ ## Usage
7
+
8
+ ```bash
9
+ npm install
10
+ npm run build
11
+
12
+ node dist/index.js init \
13
+ --aamp-host https://meshmail.ai \
14
+ --target-agent agent@meshmail.ai \
15
+ --app-id cli_xxx \
16
+ --app-secret xxx
17
+ ```
18
+
19
+ You can also let the bridge use `lark-cli` to create a Feishu app before
20
+ initializing the bridge:
21
+
22
+ ```bash
23
+ node dist/index.js init \
24
+ --aamp-host https://meshmail.ai \
25
+ --target-agent agent@meshmail.ai \
26
+ --feishu-cli-new
27
+ ```
28
+
29
+ Add `--feishu-cli-open` in desktop or other non-interactive clients to open the
30
+ setup URL in the browser as soon as `lark-cli` prints it.
31
+
32
+ For an existing `lark-cli` profile, use `--use-feishu-cli` and optionally
33
+ `--feishu-cli-profile NAME`. CLI-auth configs store the profile name, not the
34
+ App Secret; runtime event listening and Feishu API calls execute through
35
+ `lark-cli` using that profile.
36
+
37
+ `init` writes the Agent-specific config under
38
+ `~/.aamp/feishu-bridge/instances/<agent>/` and starts the local bridge
39
+ immediately. Use `--no-start` when you only want to write the config. `start`
40
+ and `run` load every configured instance, so one bridge process can host
41
+ multiple Feishu bots for multiple target Agents. Older single
42
+ `~/.aamp/feishu-bridge/config.json` configs are still detected.
43
+
44
+ Desktop and other non-interactive clients can use JSON output:
45
+
46
+ ```bash
47
+ node dist/index.js init --json --no-start \
48
+ --target-agent agent@meshmail.ai \
49
+ --app-id cli_xxx \
50
+ --app-secret xxx
51
+ node dist/index.js status --json
52
+ node dist/index.js start --json
53
+ ```
54
+
55
+ If the target Agent prints a pairing URL, initialize and authorize the bridge in
56
+ one step:
57
+
58
+ ```bash
59
+ node dist/index.js init \
60
+ --pairing-url "aamp://connect?mailbox=agent@meshmail.ai&pair_code=abc123" \
61
+ --app-id cli_xxx \
62
+ --app-secret xxx
63
+ ```
64
+
65
+ The bridge sends `pair.request` from its own AAMP mailbox with
66
+ `dispatchContextRules={ "source": ["feishu"] }`, so the Agent can accept future
67
+ Feishu dispatches without manual sender policy editing. The Agent replies with
68
+ `pair.respond` to indicate success or a failure reason.
@@ -0,0 +1,44 @@
1
+ import type { BridgeConfig, BridgeState } from './types.js';
2
+ export interface BridgeConfigEntry {
3
+ config: BridgeConfig;
4
+ configDir: string;
5
+ configPath: string;
6
+ legacy: boolean;
7
+ }
8
+ export declare function getBridgeHomeDir(customDir?: string): string;
9
+ export declare function getConfigPath(customDir?: string): string;
10
+ export declare function getStatePath(customDir?: string): string;
11
+ export declare function getBridgeInstancesDir(customDir?: string): string;
12
+ export declare function getBridgeInstanceDir(instanceSlug: string, customDir?: string): string;
13
+ export declare function ensureBridgeHomeDir(customDir?: string): Promise<string>;
14
+ export declare function loadBridgeConfig(customDir?: string): Promise<BridgeConfig | null>;
15
+ export declare function saveBridgeConfig(config: BridgeConfig, customDir?: string): Promise<void>;
16
+ export declare function loadBridgeConfigEntries(customDir?: string): Promise<BridgeConfigEntry[]>;
17
+ export declare function createDefaultBridgeState(): BridgeState;
18
+ export declare function loadBridgeState(customDir?: string): Promise<BridgeState>;
19
+ export declare function saveBridgeState(state: BridgeState, customDir?: string): Promise<void>;
20
+ export declare function resetBridgeState(customDir?: string): Promise<void>;
21
+ export interface RemoveBridgeConfigOptions {
22
+ configDir?: string;
23
+ targetAgentEmail?: string;
24
+ slug?: string;
25
+ }
26
+ export declare function removeBridgeConfigEntry(options: RemoveBridgeConfigOptions): Promise<BridgeConfigEntry | null>;
27
+ export interface InitBridgeOptions {
28
+ configDir?: string;
29
+ aampHost?: string;
30
+ targetAgentEmail?: string;
31
+ pairingUrl?: string;
32
+ slug?: string;
33
+ appId?: string;
34
+ appSecret?: string;
35
+ useFeishuCli?: boolean;
36
+ feishuCliNew?: boolean;
37
+ feishuCliProfile?: string;
38
+ feishuCliBin?: string;
39
+ feishuCliAppName?: string;
40
+ feishuCliOpen?: boolean;
41
+ domain?: string;
42
+ }
43
+ export declare function initializeBridgeConfig(options: InitBridgeOptions): Promise<BridgeConfig>;
44
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAQ3D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,wBAAsB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7E;AAUD,wBAAsB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAKvF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9F;AAkBD,wBAAsB,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkB9F;AAED,wBAAgB,wBAAwB,IAAI,WAAW,CAWtD;AAED,wBAAsB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkB9E;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxE;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAqBnH;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAgCD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAkF9F"}
package/dist/config.js ADDED
@@ -0,0 +1,254 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { createHash, randomUUID } from 'node:crypto';
6
+ import readline from 'node:readline';
7
+ import { stdin as input, stdout as output } from 'node:process';
8
+ import { AampClient, isPairingUrl, parsePairingUrl } from 'aamp-sdk';
9
+ import { resolveFeishuCliCredentials } from './feishu-cli.js';
10
+ const CONFIG_FILENAME = 'config.json';
11
+ const STATE_FILENAME = 'state.json';
12
+ const INSTANCES_DIRNAME = 'instances';
13
+ const DEFAULT_BRIDGE_SLUG = 'feishu-bridge';
14
+ export function getBridgeHomeDir(customDir) {
15
+ return customDir
16
+ ? path.resolve(customDir)
17
+ : path.join(os.homedir(), '.aamp', 'feishu-bridge');
18
+ }
19
+ export function getConfigPath(customDir) {
20
+ return path.join(getBridgeHomeDir(customDir), CONFIG_FILENAME);
21
+ }
22
+ export function getStatePath(customDir) {
23
+ return path.join(getBridgeHomeDir(customDir), STATE_FILENAME);
24
+ }
25
+ export function getBridgeInstancesDir(customDir) {
26
+ return path.join(getBridgeHomeDir(customDir), INSTANCES_DIRNAME);
27
+ }
28
+ export function getBridgeInstanceDir(instanceSlug, customDir) {
29
+ return path.join(getBridgeInstancesDir(customDir), instanceSlug);
30
+ }
31
+ export async function ensureBridgeHomeDir(customDir) {
32
+ const dir = getBridgeHomeDir(customDir);
33
+ await mkdir(dir, { recursive: true });
34
+ return dir;
35
+ }
36
+ async function writeJsonAtomic(filePath, value) {
37
+ const parentDir = path.dirname(filePath);
38
+ await mkdir(parentDir, { recursive: true });
39
+ const tempPath = path.join(parentDir, `.${path.basename(filePath)}.${randomUUID()}.tmp`);
40
+ await writeFile(tempPath, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
41
+ await rename(tempPath, filePath);
42
+ }
43
+ export async function loadBridgeConfig(customDir) {
44
+ const filePath = getConfigPath(customDir);
45
+ if (!existsSync(filePath))
46
+ return null;
47
+ const raw = await readFile(filePath, 'utf8');
48
+ return JSON.parse(raw);
49
+ }
50
+ export async function saveBridgeConfig(config, customDir) {
51
+ await writeJsonAtomic(getConfigPath(customDir), config);
52
+ }
53
+ async function loadBridgeConfigFromDir(configDir, legacy = false) {
54
+ const configPath = path.join(configDir, CONFIG_FILENAME);
55
+ if (!existsSync(configPath))
56
+ return null;
57
+ const raw = await readFile(configPath, 'utf8');
58
+ return {
59
+ config: JSON.parse(raw),
60
+ configDir,
61
+ configPath,
62
+ legacy,
63
+ };
64
+ }
65
+ async function saveBridgeConfigToDir(config, configDir) {
66
+ await writeJsonAtomic(path.join(configDir, CONFIG_FILENAME), config);
67
+ }
68
+ export async function loadBridgeConfigEntries(customDir) {
69
+ const entries = [];
70
+ const instancesDir = getBridgeInstancesDir(customDir);
71
+ if (existsSync(instancesDir)) {
72
+ const children = await readdir(instancesDir, { withFileTypes: true });
73
+ for (const child of children) {
74
+ if (!child.isDirectory())
75
+ continue;
76
+ const entry = await loadBridgeConfigFromDir(path.join(instancesDir, child.name));
77
+ if (entry)
78
+ entries.push(entry);
79
+ }
80
+ }
81
+ const legacyEntry = await loadBridgeConfigFromDir(getBridgeHomeDir(customDir), true);
82
+ if (legacyEntry && !entries.some((entry) => entry.config.targetAgentEmail === legacyEntry.config.targetAgentEmail)) {
83
+ entries.push(legacyEntry);
84
+ }
85
+ return entries.sort((left, right) => left.config.slug.localeCompare(right.config.slug));
86
+ }
87
+ export function createDefaultBridgeState() {
88
+ return {
89
+ version: 1,
90
+ connectivity: {
91
+ feishu: 'disconnected',
92
+ aamp: 'disconnected',
93
+ },
94
+ conversations: {},
95
+ tasks: {},
96
+ dedupMessageIds: {},
97
+ };
98
+ }
99
+ export async function loadBridgeState(customDir) {
100
+ const filePath = getStatePath(customDir);
101
+ if (!existsSync(filePath)) {
102
+ return createDefaultBridgeState();
103
+ }
104
+ const raw = await readFile(filePath, 'utf8');
105
+ const parsed = JSON.parse(raw);
106
+ return {
107
+ ...createDefaultBridgeState(),
108
+ ...parsed,
109
+ connectivity: {
110
+ ...createDefaultBridgeState().connectivity,
111
+ ...(parsed.connectivity ?? {}),
112
+ },
113
+ conversations: parsed.conversations ?? {},
114
+ tasks: parsed.tasks ?? {},
115
+ dedupMessageIds: parsed.dedupMessageIds ?? {},
116
+ };
117
+ }
118
+ export async function saveBridgeState(state, customDir) {
119
+ await writeJsonAtomic(getStatePath(customDir), state);
120
+ }
121
+ export async function resetBridgeState(customDir) {
122
+ const filePath = getStatePath(customDir);
123
+ if (!existsSync(filePath))
124
+ return;
125
+ await rm(filePath, { force: true });
126
+ }
127
+ export async function removeBridgeConfigEntry(options) {
128
+ const targetAgentEmail = options.targetAgentEmail?.trim();
129
+ const slug = options.slug?.trim();
130
+ if (!targetAgentEmail && !slug) {
131
+ throw new Error('Target agent email or slug is required.');
132
+ }
133
+ const entries = await loadBridgeConfigEntries(options.configDir);
134
+ const matched = entries.find((entry) => ((targetAgentEmail && entry.config.targetAgentEmail === targetAgentEmail)
135
+ || (slug && entry.config.slug === slug)));
136
+ if (!matched)
137
+ return null;
138
+ if (matched.legacy) {
139
+ await rm(matched.configPath, { force: true });
140
+ await rm(path.join(matched.configDir, STATE_FILENAME), { force: true });
141
+ }
142
+ else {
143
+ await rm(matched.configDir, { recursive: true, force: true });
144
+ }
145
+ return matched;
146
+ }
147
+ async function prompt(question, defaultValue = '') {
148
+ return new Promise((resolve) => {
149
+ const rl = readline.createInterface({ input, output });
150
+ const suffix = defaultValue ? ` (${defaultValue})` : '';
151
+ rl.question(`${question}${suffix}: `, (answer) => {
152
+ rl.close();
153
+ resolve(answer.trim() || defaultValue);
154
+ });
155
+ });
156
+ }
157
+ function normalizeSlug(rawValue) {
158
+ return rawValue
159
+ .toLowerCase()
160
+ .replace(/[\s_]+/g, '-')
161
+ .replace(/[^a-z0-9-]/g, '')
162
+ .replace(/-+/g, '-')
163
+ .replace(/^-|-$/g, '')
164
+ .slice(0, 32) || DEFAULT_BRIDGE_SLUG;
165
+ }
166
+ function shortHash(value) {
167
+ return createHash('sha256').update(value).digest('hex').slice(0, 8);
168
+ }
169
+ function defaultSlugForTarget(targetAgentEmail) {
170
+ const localPart = targetAgentEmail.split('@')[0] || DEFAULT_BRIDGE_SLUG;
171
+ return normalizeSlug(`${localPart}-${shortHash(targetAgentEmail)}`);
172
+ }
173
+ export async function initializeBridgeConfig(options) {
174
+ const entries = await loadBridgeConfigEntries(options.configDir);
175
+ const defaultExisting = entries[0]?.config;
176
+ const aampHost = (options.aampHost ?? defaultExisting?.aampHost ?? await prompt('AAMP host', 'https://meshmail.ai')).trim();
177
+ const targetInput = (options.pairingUrl ?? options.targetAgentEmail ?? defaultExisting?.targetAgentEmail ?? await prompt('Target AAMP agent email or pairing URL')).trim();
178
+ const pairing = isPairingUrl(targetInput)
179
+ ? parsePairingUrl(targetInput)
180
+ : undefined;
181
+ const targetAgentEmail = pairing?.mailbox ?? targetInput;
182
+ const matchedEntry = entries.find((entry) => entry.config.targetAgentEmail === targetAgentEmail);
183
+ const existing = matchedEntry?.config;
184
+ const feishuCliCredentials = (options.useFeishuCli || options.feishuCliNew) && (!options.appId || !options.appSecret)
185
+ ? await resolveFeishuCliCredentials({
186
+ cliBin: options.feishuCliBin,
187
+ createNew: options.feishuCliNew,
188
+ profile: options.feishuCliProfile,
189
+ appName: options.feishuCliAppName ?? options.slug,
190
+ brand: options.domain === 'lark' ? 'lark' : 'feishu',
191
+ openSetupUrl: options.feishuCliOpen,
192
+ })
193
+ : undefined;
194
+ const useCliAuth = Boolean(options.useFeishuCli || options.feishuCliNew);
195
+ const appId = (options.appId ?? feishuCliCredentials?.appId ?? existing?.feishu.appId ?? await prompt('Feishu App ID')).trim();
196
+ const appSecret = (options.appSecret ?? feishuCliCredentials?.appSecret ?? existing?.feishu.appSecret ?? (useCliAuth ? '' : await prompt('Feishu App Secret'))).trim();
197
+ const slug = normalizeSlug(options.slug ?? existing?.slug ?? defaultSlugForTarget(targetAgentEmail));
198
+ const domain = (options.domain ?? existing?.feishu.domain ?? '').trim() || undefined;
199
+ if (!targetAgentEmail)
200
+ throw new Error('Target AAMP agent email is required.');
201
+ if (!appId)
202
+ throw new Error('Feishu App ID is required.');
203
+ if (!useCliAuth && !appSecret)
204
+ throw new Error('Feishu App ID and App Secret are required.');
205
+ const instanceDir = matchedEntry && !matchedEntry.legacy
206
+ ? matchedEntry.configDir
207
+ : getBridgeInstanceDir(slug, options.configDir);
208
+ const mailbox = existing?.mailbox ?? await AampClient.registerMailbox({
209
+ aampHost,
210
+ slug,
211
+ description: `Feishu bridge for ${targetAgentEmail}`,
212
+ });
213
+ const config = {
214
+ version: 1,
215
+ aampHost,
216
+ targetAgentEmail,
217
+ slug,
218
+ feishu: {
219
+ appId,
220
+ ...(appSecret ? { appSecret } : {}),
221
+ ...(domain ? { domain } : {}),
222
+ authMode: useCliAuth ? 'lark-cli' : 'app-secret',
223
+ ...(useCliAuth ? { cliProfile: feishuCliCredentials?.profile ?? options.feishuCliProfile ?? options.feishuCliAppName ?? slug } : {}),
224
+ ...(useCliAuth && options.feishuCliBin ? { cliBin: options.feishuCliBin } : {}),
225
+ },
226
+ mailbox: {
227
+ email: mailbox.email,
228
+ mailboxToken: mailbox.mailboxToken,
229
+ smtpPassword: mailbox.smtpPassword,
230
+ baseUrl: mailbox.baseUrl,
231
+ },
232
+ behavior: {
233
+ streamThrottleMs: existing?.behavior.streamThrottleMs ?? 700,
234
+ streamThrottleChars: existing?.behavior.streamThrottleChars ?? 40,
235
+ },
236
+ };
237
+ await ensureBridgeHomeDir(options.configDir);
238
+ await mkdir(instanceDir, { recursive: true });
239
+ await saveBridgeConfigToDir(config, instanceDir);
240
+ if (pairing) {
241
+ const client = AampClient.fromMailboxIdentity({
242
+ email: config.mailbox.email,
243
+ smtpPassword: config.mailbox.smtpPassword,
244
+ baseUrl: config.mailbox.baseUrl,
245
+ });
246
+ await client.sendPairRequest({
247
+ to: pairing.mailbox,
248
+ pairCode: pairing.pairCode,
249
+ dispatchContextRules: pairing.dispatchContextRules ?? { source: ['feishu'] },
250
+ });
251
+ }
252
+ return config;
253
+ }
254
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface FeishuCliCredentialOptions {
2
+ cliBin?: string;
3
+ createNew?: boolean;
4
+ profile?: string;
5
+ appName?: string;
6
+ brand?: string;
7
+ openSetupUrl?: boolean;
8
+ }
9
+ export interface FeishuCliCredentials {
10
+ appId: string;
11
+ appSecret?: string;
12
+ profile?: string;
13
+ created: boolean;
14
+ }
15
+ export declare function resolveFeishuCliCredentials(options?: FeishuCliCredentialOptions): Promise<FeishuCliCredentials>;
16
+ //# sourceMappingURL=feishu-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-cli.d.ts","sourceRoot":"","sources":["../src/feishu-cli.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB;AAsLD,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,oBAAoB,CAAC,CAgC/B"}
@@ -0,0 +1,182 @@
1
+ import { execFile, spawn } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ const execFileAsync = promisify(execFile);
7
+ function larkCliConfigPath() {
8
+ return path.join(os.homedir(), '.lark-cli', 'config.json');
9
+ }
10
+ async function runLarkCli(cliBin, args, options = {}) {
11
+ if (!options.openSetupUrl) {
12
+ const { stdout } = await execFileAsync(cliBin, args, {
13
+ timeout: 10 * 60 * 1000,
14
+ maxBuffer: 2 * 1024 * 1024,
15
+ });
16
+ return stdout.toString();
17
+ }
18
+ return runLarkCliStreaming(cliBin, args, options);
19
+ }
20
+ async function runLarkCliStreaming(cliBin, args, options) {
21
+ return new Promise((resolve, reject) => {
22
+ const child = spawn(cliBin, args, {
23
+ stdio: ['ignore', 'pipe', 'pipe'],
24
+ });
25
+ let stdout = '';
26
+ let stderr = '';
27
+ let openedSetupUrl = false;
28
+ let timeout;
29
+ const observeOutput = (chunk) => {
30
+ const text = chunk.toString();
31
+ const setupUrl = findSetupUrl(text);
32
+ if (setupUrl && options.openSetupUrl && !openedSetupUrl) {
33
+ openedSetupUrl = true;
34
+ process.stderr.write(`Open Feishu setup URL: ${setupUrl}\n`);
35
+ openExternalUrl(setupUrl);
36
+ }
37
+ };
38
+ child.stdout?.on('data', (chunk) => {
39
+ stdout += chunk.toString();
40
+ observeOutput(chunk);
41
+ });
42
+ child.stderr?.on('data', (chunk) => {
43
+ stderr += chunk.toString();
44
+ observeOutput(chunk);
45
+ });
46
+ child.on('error', reject);
47
+ child.on('close', (code) => {
48
+ if (timeout)
49
+ clearTimeout(timeout);
50
+ if (code === 0) {
51
+ resolve(stdout);
52
+ return;
53
+ }
54
+ reject(new Error(stderr.trim() || stdout.trim() || `${cliBin} exited with ${code ?? 'unknown status'}`));
55
+ });
56
+ timeout = setTimeout(() => {
57
+ child.kill('SIGTERM');
58
+ reject(new Error(`${cliBin} did not finish within 600 seconds.`));
59
+ }, 10 * 60 * 1000);
60
+ });
61
+ }
62
+ function findSetupUrl(text) {
63
+ return /https:\/\/[^\s]+\/page\/cli\?[^\s]+/.exec(text)?.[0];
64
+ }
65
+ function openExternalUrl(url) {
66
+ const opener = process.platform === 'darwin'
67
+ ? 'open'
68
+ : process.platform === 'win32'
69
+ ? 'cmd'
70
+ : 'xdg-open';
71
+ const args = process.platform === 'win32'
72
+ ? ['/c', 'start', '', url]
73
+ : [url];
74
+ const child = spawn(opener, args, {
75
+ detached: true,
76
+ stdio: 'ignore',
77
+ });
78
+ child.unref();
79
+ }
80
+ async function runLarkCliJson(cliBin, args) {
81
+ const { stdout } = await execFileAsync(cliBin, args, {
82
+ timeout: 10 * 60 * 1000,
83
+ maxBuffer: 2 * 1024 * 1024,
84
+ });
85
+ return stdout.toString();
86
+ }
87
+ function parseCredentialText(value) {
88
+ const appId = /(?:app[_\s-]*id|App ID)\s*[:=]\s*([a-zA-Z0-9_]+)/i.exec(value)?.[1];
89
+ const appSecret = /(?:app[_\s-]*secret|App Secret)\s*[:=]\s*([^\s]+)/i.exec(value)?.[1];
90
+ return {
91
+ ...(appId ? { appId } : {}),
92
+ ...(appSecret && appSecret !== '****' ? { appSecret } : {}),
93
+ };
94
+ }
95
+ async function createLarkCliApp(options, cliBin) {
96
+ const args = [
97
+ 'config',
98
+ 'init',
99
+ '--new',
100
+ '--brand',
101
+ options.brand ?? 'feishu',
102
+ ];
103
+ const profile = options.profile ?? options.appName;
104
+ if (profile) {
105
+ args.push('--name', profile);
106
+ }
107
+ const stdout = await runLarkCli(cliBin, args, { openSetupUrl: options.openSetupUrl });
108
+ return parseCredentialText(stdout);
109
+ }
110
+ async function listProfiles(cliBin) {
111
+ try {
112
+ const stdout = await runLarkCliJson(cliBin, ['profile', 'list']);
113
+ const parsed = JSON.parse(stdout);
114
+ return Array.isArray(parsed) ? parsed : [];
115
+ }
116
+ catch {
117
+ return [];
118
+ }
119
+ }
120
+ async function readLarkCliConfig() {
121
+ const raw = await readFile(larkCliConfigPath(), 'utf8');
122
+ return JSON.parse(raw);
123
+ }
124
+ function chooseProfile(profiles, requested) {
125
+ if (requested) {
126
+ return profiles.find((profile) => profile.name === requested || profile.appId === requested);
127
+ }
128
+ return profiles.find((profile) => profile.active) ?? profiles[0];
129
+ }
130
+ function resolveAppSecret(value, appId) {
131
+ if (typeof value === 'string') {
132
+ return value.trim() || undefined;
133
+ }
134
+ if (!value || typeof value !== 'object')
135
+ return undefined;
136
+ const record = value;
137
+ if (typeof record.value === 'string')
138
+ return record.value.trim() || undefined;
139
+ if (record.source === 'env') {
140
+ const key = typeof record.name === 'string'
141
+ ? record.name
142
+ : typeof record.id === 'string'
143
+ ? record.id
144
+ : undefined;
145
+ return key ? process.env[key]?.trim() : undefined;
146
+ }
147
+ if (record.source === 'keychain') {
148
+ return undefined;
149
+ }
150
+ return undefined;
151
+ }
152
+ export async function resolveFeishuCliCredentials(options = {}) {
153
+ const cliBin = options.cliBin?.trim() || 'lark-cli';
154
+ let createdCredentials = {};
155
+ if (options.createNew) {
156
+ createdCredentials = await createLarkCliApp(options, cliBin);
157
+ }
158
+ const requestedProfile = options.profile ?? options.appName;
159
+ const profiles = await listProfiles(cliBin);
160
+ const selectedProfile = chooseProfile(profiles, requestedProfile);
161
+ const config = await readLarkCliConfig();
162
+ const appId = selectedProfile?.appId ?? options.profile;
163
+ const app = config.apps?.find((candidate) => {
164
+ if (appId && candidate.appId === appId)
165
+ return true;
166
+ if (requestedProfile && (candidate.name === requestedProfile || candidate.profile === requestedProfile))
167
+ return true;
168
+ return !appId && candidate.appId === selectedProfile?.appId;
169
+ }) ?? config.apps?.[0];
170
+ const resolvedAppId = createdCredentials.appId ?? app?.appId?.trim();
171
+ const appSecret = createdCredentials.appSecret ?? (resolvedAppId ? resolveAppSecret(app?.appSecret, resolvedAppId) : undefined);
172
+ if (!resolvedAppId) {
173
+ throw new Error('Could not read Feishu App ID from lark-cli. Run "lark-cli config init --new" or pass --app-id/--app-secret.');
174
+ }
175
+ return {
176
+ appId: resolvedAppId,
177
+ ...(appSecret && appSecret !== '****' ? { appSecret } : {}),
178
+ profile: selectedProfile?.name ?? resolvedAppId,
179
+ created: Boolean(options.createNew),
180
+ };
181
+ }
182
+ //# sourceMappingURL=feishu-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-cli.js","sourceRoot":"","sources":["../src/feishu-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}