@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.
- package/README.md +68 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +254 -0
- package/dist/config.js.map +1 -0
- package/dist/feishu-cli.d.ts +16 -0
- package/dist/feishu-cli.d.ts.map +1 -0
- package/dist/feishu-cli.js +182 -0
- package/dist/feishu-cli.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +331 -0
- package/dist/index.js.map +1 -0
- package/dist/lark-cli-channel.d.ts +42 -0
- package/dist/lark-cli-channel.d.ts.map +1 -0
- package/dist/lark-cli-channel.js +376 -0
- package/dist/lark-cli-channel.js.map +1 -0
- package/dist/runtime.d.ts +154 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2422 -0
- package/dist/runtime.js.map +1 -0
- package/dist/task/ack.d.ts +12 -0
- package/dist/task/ack.d.ts.map +1 -0
- package/dist/task/ack.js +41 -0
- package/dist/task/ack.js.map +1 -0
- package/dist/task/config.d.ts +40 -0
- package/dist/task/config.d.ts.map +1 -0
- package/dist/task/config.js +286 -0
- package/dist/task/config.js.map +1 -0
- package/dist/task/dispatch.d.ts +12 -0
- package/dist/task/dispatch.d.ts.map +1 -0
- package/dist/task/dispatch.js +320 -0
- package/dist/task/dispatch.js.map +1 -0
- package/dist/task/events.d.ts +3 -0
- package/dist/task/events.d.ts.map +1 -0
- package/dist/task/events.js +21 -0
- package/dist/task/events.js.map +1 -0
- package/dist/task/feishu.d.ts +56 -0
- package/dist/task/feishu.d.ts.map +1 -0
- package/dist/task/feishu.js +647 -0
- package/dist/task/feishu.js.map +1 -0
- package/dist/task/runtime.d.ts +124 -0
- package/dist/task/runtime.d.ts.map +1 -0
- package/dist/task/runtime.js +1907 -0
- package/dist/task/runtime.js.map +1 -0
- package/dist/task/types.d.ts +205 -0
- package/dist/task/types.d.ts.map +1 -0
- package/dist/task/types.js +2 -0
- package/dist/task/types.js.map +1 -0
- package/dist/task-runtime.d.ts +40 -0
- package/dist/task-runtime.d.ts.map +1 -0
- package/dist/task-runtime.js +458 -0
- package/dist/task-runtime.js.map +1 -0
- package/dist/types.d.ts +114 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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.
|
package/dist/config.d.ts
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|