@openclaw/crabline 0.1.0 → 0.1.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/README.md +39 -1
- package/dist/src/cli/program.js +53 -11
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/fake-servers/http.d.ts +30 -0
- package/dist/src/fake-servers/http.js +130 -0
- package/dist/src/fake-servers/http.js.map +1 -0
- package/dist/src/fake-servers/index.d.ts +15 -6
- package/dist/src/fake-servers/index.js +11 -5
- package/dist/src/fake-servers/index.js.map +1 -1
- package/dist/src/fake-servers/telegram.js +3 -20
- package/dist/src/fake-servers/telegram.js.map +1 -1
- package/dist/src/fake-servers/whatsapp.d.ts +95 -0
- package/dist/src/fake-servers/whatsapp.js +464 -0
- package/dist/src/fake-servers/whatsapp.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/openclaw/bridges/telegram.d.ts +1 -0
- package/dist/src/openclaw/bridges/telegram.js +137 -0
- package/dist/src/openclaw/bridges/telegram.js.map +1 -0
- package/dist/src/openclaw/bridges/whatsapp.d.ts +1 -0
- package/dist/src/openclaw/bridges/whatsapp.js +114 -0
- package/dist/src/openclaw/bridges/whatsapp.js.map +1 -0
- package/dist/src/openclaw/shared.d.ts +125 -0
- package/dist/src/openclaw/shared.js +78 -0
- package/dist/src/openclaw/shared.js.map +1 -0
- package/dist/src/openclaw.d.ts +3 -76
- package/dist/src/openclaw.js +29 -196
- package/dist/src/openclaw.js.map +1 -1
- package/docs/channel-setup.md +47 -1
- package/package.json +1 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readInteger, readString, } from "../shared.js";
|
|
2
|
+
const TELEGRAM_DIRECT_CHAT_ID = "100001";
|
|
3
|
+
const TELEGRAM_GROUP_CHAT_ID = "-1001234567890";
|
|
4
|
+
const TELEGRAM_DEFAULT_SENDER_ID = 100001;
|
|
5
|
+
function normalizeTelegramChatId(kind, id) {
|
|
6
|
+
return /^-?\d+$/u.test(id.trim())
|
|
7
|
+
? id.trim()
|
|
8
|
+
: kind === "group"
|
|
9
|
+
? TELEGRAM_GROUP_CHAT_ID
|
|
10
|
+
: TELEGRAM_DIRECT_CHAT_ID;
|
|
11
|
+
}
|
|
12
|
+
function telegramTargetKey(chatId, threadId) {
|
|
13
|
+
return threadId === undefined ? chatId : `${chatId}:topic:${threadId}`;
|
|
14
|
+
}
|
|
15
|
+
export const TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({
|
|
16
|
+
provider: "telegram",
|
|
17
|
+
createAdapter(telegram) {
|
|
18
|
+
return {
|
|
19
|
+
async probe() {
|
|
20
|
+
const response = await fetch(`${telegram.endpoints.apiRoot}/bot${telegram.botToken}/getMe`);
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
throw new Error(`Crabline Telegram getMe probe failed with HTTP ${response.status}.`);
|
|
23
|
+
}
|
|
24
|
+
return await response.json();
|
|
25
|
+
},
|
|
26
|
+
createBinding() {
|
|
27
|
+
return {
|
|
28
|
+
accountId: DEFAULT_ACCOUNT_ID,
|
|
29
|
+
channel: "telegram",
|
|
30
|
+
createChannelDriverSmokeEnv: (env) => ({
|
|
31
|
+
...env,
|
|
32
|
+
TELEGRAM_BOT_TOKEN: telegram.botToken,
|
|
33
|
+
}),
|
|
34
|
+
createGatewayConfig: (openclawConfig = {}) => {
|
|
35
|
+
const channels = isRecord(openclawConfig.channels) ? openclawConfig.channels : {};
|
|
36
|
+
const telegramConfig = isRecord(channels.telegram) ? channels.telegram : {};
|
|
37
|
+
const groups = isRecord(telegramConfig.groups) ? telegramConfig.groups : {};
|
|
38
|
+
const defaultGroup = isRecord(groups["*"]) ? groups["*"] : {};
|
|
39
|
+
const messages = isRecord(openclawConfig.messages) ? openclawConfig.messages : {};
|
|
40
|
+
const groupChat = isRecord(messages.groupChat) ? messages.groupChat : {};
|
|
41
|
+
return {
|
|
42
|
+
...openclawConfig,
|
|
43
|
+
channels: {
|
|
44
|
+
...channels,
|
|
45
|
+
telegram: {
|
|
46
|
+
...telegramConfig,
|
|
47
|
+
enabled: true,
|
|
48
|
+
botToken: telegram.botToken,
|
|
49
|
+
apiRoot: telegram.endpoints.apiRoot,
|
|
50
|
+
dmPolicy: "open",
|
|
51
|
+
groupPolicy: "open",
|
|
52
|
+
allowFrom: ["*"],
|
|
53
|
+
groupAllowFrom: ["*"],
|
|
54
|
+
groups: {
|
|
55
|
+
...groups,
|
|
56
|
+
"*": {
|
|
57
|
+
...defaultGroup,
|
|
58
|
+
requireMention: false,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
messages: {
|
|
64
|
+
...messages,
|
|
65
|
+
groupChat: {
|
|
66
|
+
...groupChat,
|
|
67
|
+
mentionPatterns: ["\\b@?openclaw\\b"],
|
|
68
|
+
visibleReplies: "automatic",
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
requiredPluginIds: ["telegram"],
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
createAgentDelivery(parsed) {
|
|
77
|
+
const chatId = normalizeTelegramChatId(parsed.kind, parsed.id);
|
|
78
|
+
const threadId = readInteger(parsed.threadId);
|
|
79
|
+
const to = telegramTargetKey(chatId, threadId);
|
|
80
|
+
return {
|
|
81
|
+
channel: "telegram",
|
|
82
|
+
to,
|
|
83
|
+
replyChannel: "telegram",
|
|
84
|
+
replyTo: to,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
createInbound(input) {
|
|
88
|
+
const kind = input.conversation.kind === "direct" ? "direct" : "group";
|
|
89
|
+
const chatId = normalizeTelegramChatId(kind, input.conversation.id);
|
|
90
|
+
const threadId = readInteger(input.threadId);
|
|
91
|
+
return {
|
|
92
|
+
...createAdminInboundRequest(telegram),
|
|
93
|
+
providerBody: {
|
|
94
|
+
chatId,
|
|
95
|
+
fromId: readInteger(input.senderId) ?? TELEGRAM_DEFAULT_SENDER_ID,
|
|
96
|
+
fromName: input.senderName ?? input.senderId,
|
|
97
|
+
...(threadId !== undefined ? { messageThreadId: threadId } : {}),
|
|
98
|
+
text: input.text,
|
|
99
|
+
},
|
|
100
|
+
providerTargetKey: telegramTargetKey(chatId, threadId),
|
|
101
|
+
qaTarget: qaTargetForInbound(input),
|
|
102
|
+
stateConversation: {
|
|
103
|
+
id: chatId,
|
|
104
|
+
kind: kind === "group" ? "group" : "direct",
|
|
105
|
+
},
|
|
106
|
+
...(threadId !== undefined ? { threadId: String(threadId) } : {}),
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
createOutboundFromRecorderEvent({ event, targetByProviderTarget }) {
|
|
110
|
+
if (!isRecord(event) || event.type !== "api" || typeof event.path !== "string") {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
if (!event.path.endsWith("/sendMessage") || !isRecord(event.body)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const chatId = readString(event.body.chat_id);
|
|
117
|
+
const text = typeof event.body.text === "string" && event.body.text.trim()
|
|
118
|
+
? event.body.text
|
|
119
|
+
: undefined;
|
|
120
|
+
if (!chatId || !text) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const threadId = readInteger(event.body.message_thread_id);
|
|
124
|
+
const providerTargetKey = telegramTargetKey(chatId, threadId);
|
|
125
|
+
return {
|
|
126
|
+
accountId: DEFAULT_ACCOUNT_ID,
|
|
127
|
+
senderId: "openclaw",
|
|
128
|
+
senderName: "OpenClaw QA",
|
|
129
|
+
text,
|
|
130
|
+
to: targetByProviderTarget.get(providerTargetKey) ??
|
|
131
|
+
(threadId === undefined ? chatId : providerTargetKey),
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE: import("../shared.js").OpenClawCrablineProviderBridge<import("../../index.js").WhatsAppFakeServerManifest>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readString, } from "../shared.js";
|
|
2
|
+
const WHATSAPP_JID_RE = /^(?:\d{7,15}(?::\d+)?@s\.whatsapp\.net|\d{7,15}@c\.us|\d{5,}@g\.us|\d{7,15}@lid)$/iu;
|
|
3
|
+
function requireWhatsAppJid(value, label) {
|
|
4
|
+
const trimmed = value.trim();
|
|
5
|
+
if (!WHATSAPP_JID_RE.test(trimmed)) {
|
|
6
|
+
throw new Error(`${label} must be a native WhatsApp JID.`);
|
|
7
|
+
}
|
|
8
|
+
return trimmed;
|
|
9
|
+
}
|
|
10
|
+
export const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({
|
|
11
|
+
provider: "whatsapp",
|
|
12
|
+
createAdapter(whatsapp) {
|
|
13
|
+
return {
|
|
14
|
+
async probe() {
|
|
15
|
+
const response = await fetch(`${whatsapp.endpoints.apiRoot}/health`);
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
throw new Error(`Crabline WhatsApp health probe failed with HTTP ${response.status}.`);
|
|
18
|
+
}
|
|
19
|
+
return await response.json();
|
|
20
|
+
},
|
|
21
|
+
createBinding() {
|
|
22
|
+
return {
|
|
23
|
+
accountId: DEFAULT_ACCOUNT_ID,
|
|
24
|
+
channel: "whatsapp",
|
|
25
|
+
createChannelDriverSmokeEnv: (env) => ({
|
|
26
|
+
...env,
|
|
27
|
+
CRABLINE_WHATSAPP_ADMIN_TOKEN: whatsapp.adminToken,
|
|
28
|
+
CRABLINE_WHATSAPP_ACCESS_TOKEN: whatsapp.accessToken,
|
|
29
|
+
CRABLINE_WHATSAPP_API_ROOT: whatsapp.endpoints.apiRoot,
|
|
30
|
+
CRABLINE_WHATSAPP_SELF_JID: whatsapp.selfJid,
|
|
31
|
+
}),
|
|
32
|
+
createGatewayConfig: (openclawConfig = {}) => {
|
|
33
|
+
const channels = isRecord(openclawConfig.channels) ? openclawConfig.channels : {};
|
|
34
|
+
const whatsappConfig = isRecord(channels.whatsapp) ? channels.whatsapp : {};
|
|
35
|
+
const groups = isRecord(whatsappConfig.groups) ? whatsappConfig.groups : {};
|
|
36
|
+
const defaultGroup = isRecord(groups["*"]) ? groups["*"] : {};
|
|
37
|
+
return {
|
|
38
|
+
...openclawConfig,
|
|
39
|
+
channels: {
|
|
40
|
+
...channels,
|
|
41
|
+
whatsapp: {
|
|
42
|
+
...whatsappConfig,
|
|
43
|
+
enabled: true,
|
|
44
|
+
dmPolicy: "open",
|
|
45
|
+
groupPolicy: "open",
|
|
46
|
+
allowFrom: ["*"],
|
|
47
|
+
groupAllowFrom: ["*"],
|
|
48
|
+
groups: {
|
|
49
|
+
...groups,
|
|
50
|
+
"*": {
|
|
51
|
+
...defaultGroup,
|
|
52
|
+
requireMention: false,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
requiredPluginIds: ["whatsapp"],
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
createAgentDelivery(parsed) {
|
|
63
|
+
const to = requireWhatsAppJid(parsed.id, "WhatsApp target");
|
|
64
|
+
return {
|
|
65
|
+
channel: "whatsapp",
|
|
66
|
+
to,
|
|
67
|
+
replyChannel: "whatsapp",
|
|
68
|
+
replyTo: to,
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
createInbound(input) {
|
|
72
|
+
const chatJid = requireWhatsAppJid(input.conversation.id, "WhatsApp conversation");
|
|
73
|
+
const senderJid = requireWhatsAppJid(input.senderId, "WhatsApp sender");
|
|
74
|
+
return {
|
|
75
|
+
...createAdminInboundRequest(whatsapp),
|
|
76
|
+
providerBody: {
|
|
77
|
+
chatJid,
|
|
78
|
+
senderJid,
|
|
79
|
+
...(input.senderName ? { pushName: input.senderName } : {}),
|
|
80
|
+
text: input.text,
|
|
81
|
+
},
|
|
82
|
+
providerTargetKey: chatJid,
|
|
83
|
+
qaTarget: qaTargetForInbound(input),
|
|
84
|
+
stateConversation: {
|
|
85
|
+
id: chatJid,
|
|
86
|
+
kind: chatJid.endsWith("@g.us") ? "group" : "direct",
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
createOutboundFromRecorderEvent({ event, targetByProviderTarget }) {
|
|
91
|
+
if (!isRecord(event) || event.type !== "api" || typeof event.path !== "string") {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
if (!event.path.endsWith("/crabline/whatsapp/messages") || !isRecord(event.body)) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const to = readString(event.body.to ?? event.body.jid);
|
|
98
|
+
const textPayload = event.body.text;
|
|
99
|
+
const text = isRecord(textPayload) ? readString(textPayload.body) : readString(textPayload);
|
|
100
|
+
if (!to || !text) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
accountId: DEFAULT_ACCOUNT_ID,
|
|
105
|
+
senderId: "openclaw",
|
|
106
|
+
senderName: "OpenClaw QA",
|
|
107
|
+
text,
|
|
108
|
+
to: targetByProviderTarget.get(to) ?? to,
|
|
109
|
+
};
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=whatsapp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/whatsapp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { CrablineFakeProviderChannel, CrablineFakeProviderManifest } from "../fake-servers/index.js";
|
|
2
|
+
export declare const DEFAULT_ACCOUNT_ID = "default";
|
|
3
|
+
export declare const OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH = "crabline-fake-provider-capabilities.json";
|
|
4
|
+
export declare const OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH = "crabline-fake-provider-smoke.json";
|
|
5
|
+
export declare const OPENCLAW_CRABLINE_MANIFEST_PATH = "crabline-fake-provider-server.json";
|
|
6
|
+
export declare const OPENCLAW_CRABLINE_DEFAULT_CHANNEL = "telegram";
|
|
7
|
+
export type OpenClawCrablineChannelDriverSelection = {
|
|
8
|
+
channel: CrablineFakeProviderChannel;
|
|
9
|
+
channelDriver: "crabline";
|
|
10
|
+
capabilityMatrixPath: typeof OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH;
|
|
11
|
+
smokeArtifactPath: typeof OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH;
|
|
12
|
+
};
|
|
13
|
+
export type OpenClawCrablineChannelDriverSmokeResult = {
|
|
14
|
+
capabilityReport: unknown;
|
|
15
|
+
manifestPath: string;
|
|
16
|
+
smoke: unknown;
|
|
17
|
+
};
|
|
18
|
+
export type OpenClawCrablineConversation = {
|
|
19
|
+
id: string;
|
|
20
|
+
kind: "direct" | "group";
|
|
21
|
+
};
|
|
22
|
+
export type OpenClawCrablineGatewayBinding = {
|
|
23
|
+
accountId: string;
|
|
24
|
+
channel: string;
|
|
25
|
+
createChannelDriverSmokeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
26
|
+
createGatewayConfig(openclawConfig?: Record<string, unknown>): Record<string, unknown>;
|
|
27
|
+
requiredPluginIds: string[];
|
|
28
|
+
};
|
|
29
|
+
export type OpenClawCrablineAgentDelivery = {
|
|
30
|
+
channel: string;
|
|
31
|
+
replyChannel: string;
|
|
32
|
+
replyTo: string;
|
|
33
|
+
to: string;
|
|
34
|
+
};
|
|
35
|
+
export type OpenClawCrablineInboundInput = {
|
|
36
|
+
conversation: {
|
|
37
|
+
id: string;
|
|
38
|
+
kind: string;
|
|
39
|
+
};
|
|
40
|
+
senderId: string;
|
|
41
|
+
senderName?: string | undefined;
|
|
42
|
+
text: string;
|
|
43
|
+
threadId?: string | undefined;
|
|
44
|
+
};
|
|
45
|
+
export type OpenClawCrablineInbound = {
|
|
46
|
+
providerBody: Record<string, unknown>;
|
|
47
|
+
providerHeaders: Record<string, string>;
|
|
48
|
+
providerTargetKey: string;
|
|
49
|
+
providerUrl: string;
|
|
50
|
+
qaTarget: string;
|
|
51
|
+
stateConversation: OpenClawCrablineConversation;
|
|
52
|
+
threadId?: string | undefined;
|
|
53
|
+
};
|
|
54
|
+
export type OpenClawCrablineOutboundMessage = {
|
|
55
|
+
accountId: string;
|
|
56
|
+
senderId: string;
|
|
57
|
+
senderName: string;
|
|
58
|
+
text: string;
|
|
59
|
+
to: string;
|
|
60
|
+
};
|
|
61
|
+
export type StartOpenClawCrablineAdapterParams = {
|
|
62
|
+
channel: CrablineFakeProviderChannel;
|
|
63
|
+
openclawConfig?: Record<string, unknown> | undefined;
|
|
64
|
+
recorderPath?: string | undefined;
|
|
65
|
+
};
|
|
66
|
+
export type StartedOpenClawCrablineAdapter = OpenClawCrablineGatewayBinding & {
|
|
67
|
+
close(): Promise<void>;
|
|
68
|
+
createAgentDelivery(params: {
|
|
69
|
+
target: string;
|
|
70
|
+
}): OpenClawCrablineAgentDelivery;
|
|
71
|
+
createInbound(params: {
|
|
72
|
+
input: OpenClawCrablineInboundInput;
|
|
73
|
+
}): OpenClawCrablineInbound;
|
|
74
|
+
createOutboundFromRecorderEvent(params: {
|
|
75
|
+
event: unknown;
|
|
76
|
+
targetByProviderTarget: ReadonlyMap<string, string>;
|
|
77
|
+
}): OpenClawCrablineOutboundMessage | null;
|
|
78
|
+
manifest: CrablineFakeProviderManifest;
|
|
79
|
+
probe(): Promise<unknown>;
|
|
80
|
+
};
|
|
81
|
+
export type ParsedQaTarget = {
|
|
82
|
+
kind: "direct" | "group";
|
|
83
|
+
id: string;
|
|
84
|
+
threadId?: string;
|
|
85
|
+
};
|
|
86
|
+
export type OpenClawCrablineProviderAdapter = {
|
|
87
|
+
createAgentDelivery(parsed: ParsedQaTarget): OpenClawCrablineAgentDelivery;
|
|
88
|
+
createBinding(): OpenClawCrablineGatewayBinding;
|
|
89
|
+
createInbound(input: OpenClawCrablineInboundInput): OpenClawCrablineInbound;
|
|
90
|
+
createOutboundFromRecorderEvent(params: {
|
|
91
|
+
event: unknown;
|
|
92
|
+
targetByProviderTarget: ReadonlyMap<string, string>;
|
|
93
|
+
}): OpenClawCrablineOutboundMessage | null;
|
|
94
|
+
probe(): Promise<unknown>;
|
|
95
|
+
};
|
|
96
|
+
export type OpenClawCrablineProviderBridge<TManifest extends CrablineFakeProviderManifest = CrablineFakeProviderManifest> = {
|
|
97
|
+
createAdapter(manifest: TManifest): OpenClawCrablineProviderAdapter;
|
|
98
|
+
createAdapterFromManifest(manifest: CrablineFakeProviderManifest): OpenClawCrablineProviderAdapter;
|
|
99
|
+
provider: TManifest["provider"];
|
|
100
|
+
};
|
|
101
|
+
export type OpenClawCrablineProviderBridgeRegistry = {
|
|
102
|
+
[Provider in CrablineFakeProviderManifest["provider"]]: OpenClawCrablineProviderBridge<Extract<CrablineFakeProviderManifest, {
|
|
103
|
+
provider: Provider;
|
|
104
|
+
}>>;
|
|
105
|
+
};
|
|
106
|
+
export declare function createOpenClawCrablineProviderBridge<TProvider extends CrablineFakeProviderManifest["provider"]>(params: {
|
|
107
|
+
createAdapter(manifest: Extract<CrablineFakeProviderManifest, {
|
|
108
|
+
provider: TProvider;
|
|
109
|
+
}>): OpenClawCrablineProviderAdapter;
|
|
110
|
+
provider: TProvider;
|
|
111
|
+
}): OpenClawCrablineProviderBridge<Extract<CrablineFakeProviderManifest, {
|
|
112
|
+
provider: TProvider;
|
|
113
|
+
}>>;
|
|
114
|
+
export declare function readString(value: unknown): string | undefined;
|
|
115
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
116
|
+
export declare function readInteger(value: unknown): number | undefined;
|
|
117
|
+
export declare function parseQaTarget(target: string): ParsedQaTarget;
|
|
118
|
+
export declare function qaTargetForInbound(input: OpenClawCrablineInboundInput): string;
|
|
119
|
+
export declare function createAdminInboundRequest(manifest: CrablineFakeProviderManifest): {
|
|
120
|
+
providerHeaders: {
|
|
121
|
+
"content-type": string;
|
|
122
|
+
"x-crabline-admin-token": string;
|
|
123
|
+
};
|
|
124
|
+
providerUrl: string;
|
|
125
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ADMIN_TOKEN_HEADER } from "../fake-servers/http.js";
|
|
2
|
+
export const DEFAULT_ACCOUNT_ID = "default";
|
|
3
|
+
export const OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH = "crabline-fake-provider-capabilities.json";
|
|
4
|
+
export const OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH = "crabline-fake-provider-smoke.json";
|
|
5
|
+
export const OPENCLAW_CRABLINE_MANIFEST_PATH = "crabline-fake-provider-server.json";
|
|
6
|
+
export const OPENCLAW_CRABLINE_DEFAULT_CHANNEL = "telegram";
|
|
7
|
+
export function createOpenClawCrablineProviderBridge(params) {
|
|
8
|
+
const bridge = {
|
|
9
|
+
createAdapter: params.createAdapter,
|
|
10
|
+
createAdapterFromManifest(manifest) {
|
|
11
|
+
if (manifest.provider !== params.provider) {
|
|
12
|
+
throw new Error(`Unsupported OpenClaw fake provider binding: expected ${params.provider}, got ${manifest.provider}.`);
|
|
13
|
+
}
|
|
14
|
+
return params.createAdapter(manifest);
|
|
15
|
+
},
|
|
16
|
+
provider: params.provider,
|
|
17
|
+
};
|
|
18
|
+
return bridge;
|
|
19
|
+
}
|
|
20
|
+
export function readString(value) {
|
|
21
|
+
if (typeof value === "string" && value.trim()) {
|
|
22
|
+
return value.trim();
|
|
23
|
+
}
|
|
24
|
+
if (typeof value === "number" || typeof value === "bigint") {
|
|
25
|
+
return String(value);
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
export function isRecord(value) {
|
|
30
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
31
|
+
}
|
|
32
|
+
export function readInteger(value) {
|
|
33
|
+
const stringValue = readString(value);
|
|
34
|
+
if (!stringValue || !/^-?\d+$/u.test(stringValue)) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return Number(stringValue);
|
|
38
|
+
}
|
|
39
|
+
export function parseQaTarget(target) {
|
|
40
|
+
const trimmed = target.trim();
|
|
41
|
+
if (trimmed.startsWith("thread:")) {
|
|
42
|
+
const rest = trimmed.slice("thread:".length);
|
|
43
|
+
const slash = rest.indexOf("/");
|
|
44
|
+
if (slash > 0) {
|
|
45
|
+
return { kind: "group", id: rest.slice(0, slash), threadId: rest.slice(slash + 1) };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (trimmed.startsWith("channel:")) {
|
|
49
|
+
return { kind: "group", id: trimmed.slice("channel:".length) };
|
|
50
|
+
}
|
|
51
|
+
if (trimmed.startsWith("group:")) {
|
|
52
|
+
return { kind: "group", id: trimmed.slice("group:".length) };
|
|
53
|
+
}
|
|
54
|
+
if (trimmed.startsWith("dm:")) {
|
|
55
|
+
return { kind: "direct", id: trimmed.slice("dm:".length) };
|
|
56
|
+
}
|
|
57
|
+
return { kind: "direct", id: trimmed };
|
|
58
|
+
}
|
|
59
|
+
export function qaTargetForInbound(input) {
|
|
60
|
+
const prefix = input.conversation.kind === "direct"
|
|
61
|
+
? "dm"
|
|
62
|
+
: input.conversation.kind === "channel"
|
|
63
|
+
? "channel"
|
|
64
|
+
: "group";
|
|
65
|
+
return input.threadId
|
|
66
|
+
? `thread:${input.conversation.id}/${input.threadId}`
|
|
67
|
+
: `${prefix}:${input.conversation.id}`;
|
|
68
|
+
}
|
|
69
|
+
export function createAdminInboundRequest(manifest) {
|
|
70
|
+
return {
|
|
71
|
+
providerHeaders: {
|
|
72
|
+
"content-type": "application/json",
|
|
73
|
+
[ADMIN_TOKEN_HEADER]: manifest.adminToken,
|
|
74
|
+
},
|
|
75
|
+
providerUrl: manifest.endpoints.adminInboundUrl,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/openclaw/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/src/openclaw.d.ts
CHANGED
|
@@ -1,80 +1,7 @@
|
|
|
1
1
|
import { type CrablineFakeProviderChannel, type CrablineFakeProviderManifest } from "./fake-servers/index.js";
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export declare const OPENCLAW_CRABLINE_DEFAULT_CHANNEL = "telegram";
|
|
6
|
-
export type OpenClawCrablineChannelDriverSelection = {
|
|
7
|
-
channel: CrablineFakeProviderChannel;
|
|
8
|
-
channelDriver: "crabline";
|
|
9
|
-
capabilityMatrixPath: typeof OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH;
|
|
10
|
-
smokeArtifactPath: typeof OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH;
|
|
11
|
-
};
|
|
12
|
-
export type OpenClawCrablineChannelDriverSmokeResult = {
|
|
13
|
-
capabilityReport: unknown;
|
|
14
|
-
manifestPath: string;
|
|
15
|
-
smoke: unknown;
|
|
16
|
-
};
|
|
17
|
-
export type OpenClawCrablineConversation = {
|
|
18
|
-
id: string;
|
|
19
|
-
kind: "direct" | "group";
|
|
20
|
-
};
|
|
21
|
-
export type OpenClawCrablineGatewayBinding = {
|
|
22
|
-
accountId: string;
|
|
23
|
-
channel: string;
|
|
24
|
-
createChannelDriverSmokeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
25
|
-
createGatewayConfig(openclawConfig?: Record<string, unknown>): Record<string, unknown>;
|
|
26
|
-
requiredPluginIds: string[];
|
|
27
|
-
};
|
|
28
|
-
export type OpenClawCrablineAgentDelivery = {
|
|
29
|
-
channel: string;
|
|
30
|
-
replyChannel: string;
|
|
31
|
-
replyTo: string;
|
|
32
|
-
to: string;
|
|
33
|
-
};
|
|
34
|
-
export type OpenClawCrablineInboundInput = {
|
|
35
|
-
conversation: {
|
|
36
|
-
id: string;
|
|
37
|
-
kind: string;
|
|
38
|
-
};
|
|
39
|
-
senderId: string;
|
|
40
|
-
senderName?: string | undefined;
|
|
41
|
-
text: string;
|
|
42
|
-
threadId?: string | undefined;
|
|
43
|
-
};
|
|
44
|
-
export type OpenClawCrablineInbound = {
|
|
45
|
-
providerBody: Record<string, unknown>;
|
|
46
|
-
providerTargetKey: string;
|
|
47
|
-
qaTarget: string;
|
|
48
|
-
stateConversation: OpenClawCrablineConversation;
|
|
49
|
-
threadId?: string | undefined;
|
|
50
|
-
};
|
|
51
|
-
export type OpenClawCrablineOutboundMessage = {
|
|
52
|
-
accountId: string;
|
|
53
|
-
senderId: string;
|
|
54
|
-
senderName: string;
|
|
55
|
-
text: string;
|
|
56
|
-
to: string;
|
|
57
|
-
};
|
|
58
|
-
export type StartOpenClawCrablineAdapterParams = {
|
|
59
|
-
channel: CrablineFakeProviderChannel;
|
|
60
|
-
openclawConfig?: Record<string, unknown> | undefined;
|
|
61
|
-
recorderPath?: string | undefined;
|
|
62
|
-
};
|
|
63
|
-
export type StartedOpenClawCrablineAdapter = OpenClawCrablineGatewayBinding & {
|
|
64
|
-
close(): Promise<void>;
|
|
65
|
-
createAgentDelivery(params: {
|
|
66
|
-
target: string;
|
|
67
|
-
}): OpenClawCrablineAgentDelivery;
|
|
68
|
-
createInbound(params: {
|
|
69
|
-
input: OpenClawCrablineInboundInput;
|
|
70
|
-
}): OpenClawCrablineInbound;
|
|
71
|
-
createOutboundFromRecorderEvent(params: {
|
|
72
|
-
event: unknown;
|
|
73
|
-
targetByProviderTarget: ReadonlyMap<string, string>;
|
|
74
|
-
}): OpenClawCrablineOutboundMessage | null;
|
|
75
|
-
manifest: CrablineFakeProviderManifest;
|
|
76
|
-
probe(): Promise<unknown>;
|
|
77
|
-
};
|
|
2
|
+
import { OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH, OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH, OPENCLAW_CRABLINE_DEFAULT_CHANNEL, OPENCLAW_CRABLINE_MANIFEST_PATH, type OpenClawCrablineAgentDelivery, type OpenClawCrablineChannelDriverSelection, type OpenClawCrablineChannelDriverSmokeResult, type OpenClawCrablineGatewayBinding, type OpenClawCrablineInbound, type OpenClawCrablineInboundInput, type OpenClawCrablineOutboundMessage, type StartedOpenClawCrablineAdapter, type StartOpenClawCrablineAdapterParams } from "./openclaw/shared.js";
|
|
3
|
+
export { OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH, OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH, OPENCLAW_CRABLINE_DEFAULT_CHANNEL, OPENCLAW_CRABLINE_MANIFEST_PATH, };
|
|
4
|
+
export type { OpenClawCrablineAgentDelivery, OpenClawCrablineChannelDriverSelection, OpenClawCrablineChannelDriverSmokeResult, OpenClawCrablineConversation, OpenClawCrablineGatewayBinding, OpenClawCrablineInbound, OpenClawCrablineInboundInput, OpenClawCrablineOutboundMessage, StartedOpenClawCrablineAdapter, StartOpenClawCrablineAdapterParams, } from "./openclaw/shared.js";
|
|
78
5
|
export declare function resolveOpenClawCrablineChannel(input?: string | null): CrablineFakeProviderChannel;
|
|
79
6
|
export declare function resolveOpenClawCrablineChannelDriverSelection(params: {
|
|
80
7
|
channel?: string | null;
|