@jimiford/webex 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/LICENSE +21 -0
- package/README.md +314 -0
- package/dist/channel-plugin.d.ts +18 -0
- package/dist/channel-plugin.js +410 -0
- package/dist/channel.d.ts +98 -0
- package/dist/channel.js +224 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +32 -0
- package/dist/plugin.d.ts +15 -0
- package/dist/plugin.js +23 -0
- package/dist/send.d.ts +92 -0
- package/dist/send.js +304 -0
- package/dist/types.d.ts +223 -0
- package/dist/types.js +6 -0
- package/dist/webhook.d.ts +64 -0
- package/dist/webhook.js +297 -0
- package/openclaw.plugin.json +33 -0
- package/package.json +71 -0
package/dist/channel.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Webex Channel - Main Channel Logic
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WebexChannel = void 0;
|
|
7
|
+
exports.createWebexChannel = createWebexChannel;
|
|
8
|
+
exports.createAndInitialize = createAndInitialize;
|
|
9
|
+
const send_1 = require("./send");
|
|
10
|
+
const webhook_1 = require("./webhook");
|
|
11
|
+
/**
|
|
12
|
+
* Default configuration values
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_CONFIG = {
|
|
15
|
+
dmPolicy: 'allow',
|
|
16
|
+
apiBaseUrl: 'https://webexapis.com/v1',
|
|
17
|
+
maxRetries: 3,
|
|
18
|
+
retryDelayMs: 1000,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* WebexChannel implements the OpenClaw channel plugin interface for Cisco Webex
|
|
22
|
+
*/
|
|
23
|
+
class WebexChannel {
|
|
24
|
+
name = 'webex';
|
|
25
|
+
version = '1.0.0';
|
|
26
|
+
config = null;
|
|
27
|
+
sender = null;
|
|
28
|
+
webhookHandler = null;
|
|
29
|
+
messageHandlers = [];
|
|
30
|
+
initialized = false;
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the channel with configuration
|
|
33
|
+
*/
|
|
34
|
+
async initialize(config) {
|
|
35
|
+
// Validate required config
|
|
36
|
+
this.validateConfig(config);
|
|
37
|
+
// Merge with defaults
|
|
38
|
+
this.config = {
|
|
39
|
+
...DEFAULT_CONFIG,
|
|
40
|
+
...config,
|
|
41
|
+
};
|
|
42
|
+
// Initialize sender
|
|
43
|
+
this.sender = new send_1.WebexSender(this.config);
|
|
44
|
+
// Initialize webhook handler
|
|
45
|
+
this.webhookHandler = new webhook_1.WebexWebhookHandler(this.config);
|
|
46
|
+
await this.webhookHandler.initialize();
|
|
47
|
+
this.initialized = true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate configuration
|
|
51
|
+
*/
|
|
52
|
+
validateConfig(config) {
|
|
53
|
+
if (!config.token) {
|
|
54
|
+
throw new Error('Webex channel config requires a token');
|
|
55
|
+
}
|
|
56
|
+
if (!config.webhookUrl) {
|
|
57
|
+
throw new Error('Webex channel config requires a webhookUrl');
|
|
58
|
+
}
|
|
59
|
+
if (!config.dmPolicy) {
|
|
60
|
+
throw new Error('Webex channel config requires a dmPolicy');
|
|
61
|
+
}
|
|
62
|
+
if (config.dmPolicy === 'allowlisted' && (!config.allowFrom || config.allowFrom.length === 0)) {
|
|
63
|
+
throw new Error('Webex channel config requires allowFrom when dmPolicy is "allowlisted"');
|
|
64
|
+
}
|
|
65
|
+
// Validate webhook URL format
|
|
66
|
+
try {
|
|
67
|
+
new URL(config.webhookUrl);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
throw new Error('Webex channel config webhookUrl must be a valid URL');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Ensure the channel is initialized
|
|
75
|
+
*/
|
|
76
|
+
ensureInitialized() {
|
|
77
|
+
if (!this.initialized || !this.config || !this.sender || !this.webhookHandler) {
|
|
78
|
+
throw new Error('Webex channel is not initialized. Call initialize() first.');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Send a message
|
|
83
|
+
*/
|
|
84
|
+
async send(message) {
|
|
85
|
+
this.ensureInitialized();
|
|
86
|
+
return this.sender.send(message);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Send a simple text message to a room
|
|
90
|
+
*/
|
|
91
|
+
async sendText(roomId, text) {
|
|
92
|
+
return this.send({
|
|
93
|
+
to: roomId,
|
|
94
|
+
content: { text },
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Send a markdown message to a room
|
|
99
|
+
*/
|
|
100
|
+
async sendMarkdown(roomId, markdown) {
|
|
101
|
+
return this.send({
|
|
102
|
+
to: roomId,
|
|
103
|
+
content: { markdown },
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Send a direct message to a person
|
|
108
|
+
*/
|
|
109
|
+
async sendDirect(personIdOrEmail, text) {
|
|
110
|
+
return this.send({
|
|
111
|
+
to: personIdOrEmail,
|
|
112
|
+
content: { text },
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Reply to a message in a thread
|
|
117
|
+
*/
|
|
118
|
+
async reply(roomId, parentId, text) {
|
|
119
|
+
return this.send({
|
|
120
|
+
to: roomId,
|
|
121
|
+
content: { text },
|
|
122
|
+
parentId,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Handle incoming webhook
|
|
127
|
+
*/
|
|
128
|
+
async handleWebhook(payload, signature) {
|
|
129
|
+
this.ensureInitialized();
|
|
130
|
+
const envelope = await this.webhookHandler.handleWebhook(payload, signature);
|
|
131
|
+
if (envelope) {
|
|
132
|
+
// Notify all registered handlers
|
|
133
|
+
await this.notifyHandlers(envelope);
|
|
134
|
+
}
|
|
135
|
+
return envelope;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Register a message handler
|
|
139
|
+
*/
|
|
140
|
+
onMessage(handler) {
|
|
141
|
+
this.messageHandlers.push(handler);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Remove a message handler
|
|
145
|
+
*/
|
|
146
|
+
offMessage(handler) {
|
|
147
|
+
const index = this.messageHandlers.indexOf(handler);
|
|
148
|
+
if (index !== -1) {
|
|
149
|
+
this.messageHandlers.splice(index, 1);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Notify all registered handlers of a new message
|
|
154
|
+
*/
|
|
155
|
+
async notifyHandlers(envelope) {
|
|
156
|
+
for (const handler of this.messageHandlers) {
|
|
157
|
+
try {
|
|
158
|
+
await handler(envelope);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
console.error('Error in message handler:', error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Register webhooks with Webex
|
|
167
|
+
*/
|
|
168
|
+
async registerWebhooks() {
|
|
169
|
+
this.ensureInitialized();
|
|
170
|
+
return this.webhookHandler.registerWebhooks();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the sender instance for advanced operations
|
|
174
|
+
*/
|
|
175
|
+
getSender() {
|
|
176
|
+
this.ensureInitialized();
|
|
177
|
+
return this.sender;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the webhook handler instance for advanced operations
|
|
181
|
+
*/
|
|
182
|
+
getWebhookHandler() {
|
|
183
|
+
this.ensureInitialized();
|
|
184
|
+
return this.webhookHandler;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the current configuration
|
|
188
|
+
*/
|
|
189
|
+
getConfig() {
|
|
190
|
+
return this.config;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Check if the channel is initialized
|
|
194
|
+
*/
|
|
195
|
+
isInitialized() {
|
|
196
|
+
return this.initialized;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Cleanup and shutdown
|
|
200
|
+
*/
|
|
201
|
+
async shutdown() {
|
|
202
|
+
this.messageHandlers = [];
|
|
203
|
+
this.sender = null;
|
|
204
|
+
this.webhookHandler = null;
|
|
205
|
+
this.config = null;
|
|
206
|
+
this.initialized = false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.WebexChannel = WebexChannel;
|
|
210
|
+
/**
|
|
211
|
+
* Create a new Webex channel instance
|
|
212
|
+
*/
|
|
213
|
+
function createWebexChannel() {
|
|
214
|
+
return new WebexChannel();
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Create and initialize a Webex channel with config
|
|
218
|
+
*/
|
|
219
|
+
async function createAndInitialize(config) {
|
|
220
|
+
const channel = createWebexChannel();
|
|
221
|
+
await channel.initialize(config);
|
|
222
|
+
return channel;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFubmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBc1BILGdEQUVDO0FBS0Qsa0RBSUM7QUFyUEQsaUNBQXFDO0FBQ3JDLHVDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFnQztJQUNsRCxRQUFRLEVBQUUsT0FBTztJQUNqQixVQUFVLEVBQUUsMEJBQTBCO0lBQ3RDLFVBQVUsRUFBRSxDQUFDO0lBQ2IsWUFBWSxFQUFFLElBQUk7Q0FDbkIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBQ2QsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNmLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFFbkIsTUFBTSxHQUE4QixJQUFJLENBQUM7SUFDekMsTUFBTSxHQUF1QixJQUFJLENBQUM7SUFDbEMsY0FBYyxHQUErQixJQUFJLENBQUM7SUFDbEQsZUFBZSxHQUFxQixFQUFFLENBQUM7SUFDdkMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUU1Qjs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBMEI7UUFDekMsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUIsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLGNBQWM7WUFDakIsR0FBRyxNQUFNO1NBQ1ksQ0FBQztRQUV4QixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGtCQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksNkJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2QyxJQUFJ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SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFyTkQsb0NBcU5DO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0I7SUFDaEMsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxNQUEwQjtJQUNsRSxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZWJleCBDaGFubmVsIC0gTWFpbiBDaGFubmVsIExvZ2ljXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBXZWJleENoYW5uZWxDb25maWcsXG4gIFdlYmV4Q2hhbm5lbFBsdWdpbixcbiAgV2ViZXhNZXNzYWdlLFxuICBXZWJleFdlYmhvb2ssXG4gIFdlYmV4V2ViaG9va1BheWxvYWQsXG4gIE9wZW5DbGF3RW52ZWxvcGUsXG4gIE9wZW5DbGF3T3V0Ym91bmRNZXNzYWdlLFxuICBXZWJob29rSGFuZGxlcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBXZWJleFNlbmRlciB9IGZyb20gJy4vc2VuZCc7XG5pbXBvcnQgeyBXZWJleFdlYmhvb2tIYW5kbGVyIH0gZnJvbSAnLi93ZWJob29rJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBQYXJ0aWFsPFdlYmV4Q2hhbm5lbENvbmZpZz4gPSB7XG4gIGRtUG9saWN5OiAnYWxsb3cnLFxuICBhcGlCYXNlVXJsOiAnaHR0cHM6Ly93ZWJleGFwaXMuY29tL3YxJyxcbiAgbWF4UmV0cmllczogMyxcbiAgcmV0cnlEZWxheU1zOiAxMDAwLFxufTtcblxuLyoqXG4gKiBXZWJleENoYW5uZWwgaW1wbGVtZW50cyB0aGUgT3BlbkNsYXcgY2hhbm5lbCBwbHVnaW4gaW50ZXJmYWNlIGZvciBDaXNjbyBXZWJleFxuICovXG5leHBvcnQgY2xhc3MgV2ViZXhDaGFubmVsIGltcGxlbWVudHMgV2ViZXhDaGFubmVsUGx1Z2luIHtcbiAgcmVhZG9ubHkgbmFtZSA9ICd3ZWJleCc7XG4gIHJlYWRvbmx5IHZlcnNpb24gPSAnMS4wLjAnO1xuXG4gIHByaXZhdGUgY29uZmlnOiBXZWJleENoYW5uZWxDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZW5kZXI6IFdlYmV4U2VuZGVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgd2ViaG9va0hhbmRsZXI6IFdlYmV4V2ViaG9va0hhbmRsZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcnM6IFdlYmhvb2tIYW5kbGVyW10gPSBbXTtcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjaGFubmVsIHdpdGggY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZShjb25maWc6IFdlYmV4Q2hhbm5lbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGNvbmZpZ1xuICAgIHRoaXMudmFsaWRhdGVDb25maWcoY29uZmlnKTtcblxuICAgIC8vIE1lcmdlIHdpdGggZGVmYXVsdHNcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgICAgLi4uY29uZmlnLFxuICAgIH0gYXMgV2ViZXhDaGFubmVsQ29uZmlnO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzZW5kZXJcbiAgICB0aGlzLnNlbmRlciA9IG5ldyBXZWJleFNlbmRlcih0aGlzLmNvbmZpZyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHdlYmhvb2sgaGFuZGxlclxuICAgIHRoaXMud2ViaG9va0hhbmRsZXIgPSBuZXcgV2ViZXhXZWJob29rSGFuZGxlcih0aGlzLmNvbmZpZyk7XG4gICAgYXdhaXQgdGhpcy53ZWJob29rSGFuZGxlci5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29uZmlnKGNvbmZpZzogV2ViZXhDaGFubmVsQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKCFjb25maWcudG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2ViZXggY2hhbm5lbCBjb25maWcgcmVxdWlyZXMgYSB0b2tlbicpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy53ZWJob29rVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYmV4IGNoYW5uZWwgY29uZmlnIHJlcXVpcmVzIGEgd2ViaG9va1VybCcpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5kbVBvbGljeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJleCBjaGFubmVsIGNvbmZpZyByZXF1aXJlcyBhIGRtUG9saWN5Jyk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZG1Qb2xpY3kgPT09ICdhbGxvd2xpc3RlZCcgJiYgKCFjb25maWcuYWxsb3dGcm9tIHx8IGNvbmZpZy5hbGxvd0Zyb20ubGVuZ3RoID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJleCBjaGFubmVsIGNvbmZpZyByZXF1aXJlcyBhbGxvd0Zyb20gd2hlbiBkbVBvbGljeSBpcyBcImFsbG93bGlzdGVkXCInKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB3ZWJob29rIFVSTCBmb3JtYXRcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTChjb25maWcud2ViaG9va1VybCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYmV4IGNoYW5uZWwgY29uZmlnIHdlYmhvb2tVcmwgbXVzdCBiZSBhIHZhbGlkIFVSTCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhlIGNoYW5uZWwgaXMgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgZW5zdXJlSW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkIHx8ICF0aGlzLmNvbmZpZyB8fCAhdGhpcy5zZW5kZXIgfHwgIXRoaXMud2ViaG9va0hhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2ViZXggY2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdGlhbGl6ZSgpIGZpcnN0LicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgc2VuZChtZXNzYWdlOiBPcGVuQ2xhd091dGJvdW5kTWVzc2FnZSk6IFByb21pc2U8V2ViZXhNZXNzYWdlPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnNlbmRlciEuc2VuZChtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgc2ltcGxlIHRleHQgbWVzc2FnZSB0byBhIHJvb21cbiAgICovXG4gIGFzeW5jIHNlbmRUZXh0KHJvb21JZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPFdlYmV4TWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoe1xuICAgICAgdG86IHJvb21JZCxcbiAgICAgIGNvbnRlbnQ6IHsgdGV4dCB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtYXJrZG93biBtZXNzYWdlIHRvIGEgcm9vbVxuICAgKi9cbiAgYXN5bmMgc2VuZE1hcmtkb3duKHJvb21JZDogc3RyaW5nLCBtYXJrZG93bjogc3RyaW5nKTogUHJvbWlzZTxXZWJleE1lc3NhZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHtcbiAgICAgIHRvOiByb29tSWQsXG4gICAgICBjb250ZW50OiB7IG1hcmtkb3duIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIGRpcmVjdCBtZXNzYWdlIHRvIGEgcGVyc29uXG4gICAqL1xuICBhc3luYyBzZW5kRGlyZWN0KHBlcnNvbklkT3JFbWFpbDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPFdlYmV4TWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoe1xuICAgICAgdG86IHBlcnNvbklkT3JFbWFpbCxcbiAgICAgIGNvbnRlbnQ6IHsgdGV4dCB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGx5IHRvIGEgbWVzc2FnZSBpbiBhIHRocmVhZFxuICAgKi9cbiAgYXN5bmMgcmVwbHkocm9vbUlkOiBzdHJpbmcsIHBhcmVudElkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFByb21pc2U8V2ViZXhNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7XG4gICAgICB0bzogcm9vbUlkLFxuICAgICAgY29udGVudDogeyB0ZXh0IH0sXG4gICAgICBwYXJlbnRJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgaW5jb21pbmcgd2ViaG9va1xuICAgKi9cbiAgYXN5bmMgaGFuZGxlV2ViaG9vayhcbiAgICBwYXlsb2FkOiBXZWJleFdlYmhvb2tQYXlsb2FkLFxuICAgIHNpZ25hdHVyZT86IHN0cmluZ1xuICApOiBQcm9taXNlPE9wZW5DbGF3RW52ZWxvcGUgfCBudWxsPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gICAgY29uc3QgZW52ZWxvcGUgPSBhd2FpdCB0aGlzLndlYmhvb2tIYW5kbGVyIS5oYW5kbGVXZWJob29rKHBheWxvYWQsIHNpZ25hdHVyZSk7XG5cbiAgICBpZiAoZW52ZWxvcGUpIHtcbiAgICAgIC8vIE5vdGlmeSBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVyc1xuICAgICAgYXdhaXQgdGhpcy5ub3RpZnlIYW5kbGVycyhlbnZlbG9wZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudmVsb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbWVzc2FnZSBoYW5kbGVyXG4gICAqL1xuICBvbk1lc3NhZ2UoaGFuZGxlcjogV2ViaG9va0hhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIG1lc3NhZ2UgaGFuZGxlclxuICAgKi9cbiAgb2ZmTWVzc2FnZShoYW5kbGVyOiBXZWJob29rSGFuZGxlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tZXNzYWdlSGFuZGxlcnMuaW5kZXhPZihoYW5kbGVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgYWxsIHJlZ2lzdGVyZWQgaGFuZGxlcnMgb2YgYSBuZXcgbWVzc2FnZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBub3RpZnlIYW5kbGVycyhlbnZlbG9wZTogT3BlbkNsYXdFbnZlbG9wZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLm1lc3NhZ2VIYW5kbGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgaGFuZGxlcihlbnZlbG9wZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBtZXNzYWdlIGhhbmRsZXI6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB3ZWJob29rcyB3aXRoIFdlYmV4XG4gICAqL1xuICBhc3luYyByZWdpc3RlcldlYmhvb2tzKCk6IFByb21pc2U8V2ViZXhXZWJob29rW10+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMud2ViaG9va0hhbmRsZXIhLnJlZ2lzdGVyV2ViaG9va3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlbmRlciBpbnN0YW5jZSBmb3IgYWR2YW5jZWQgb3BlcmF0aW9uc1xuICAgKi9cbiAgZ2V0U2VuZGVyKCk6IFdlYmV4U2VuZGVyIHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuc2VuZGVyITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlYmhvb2sgaGFuZGxlciBpbnN0YW5jZSBmb3IgYWR2YW5jZWQgb3BlcmF0aW9uc1xuICAgKi9cbiAgZ2V0V2ViaG9va0hhbmRsZXIoKTogV2ViZXhXZWJob29rSGFuZGxlciB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLndlYmhvb2tIYW5kbGVyITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgZ2V0Q29uZmlnKCk6IFdlYmV4Q2hhbm5lbENvbmZpZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY2hhbm5lbCBpcyBpbml0aWFsaXplZFxuICAgKi9cbiAgaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnVwIGFuZCBzaHV0ZG93blxuICAgKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlcnMgPSBbXTtcbiAgICB0aGlzLnNlbmRlciA9IG51bGw7XG4gICAgdGhpcy53ZWJob29rSGFuZGxlciA9IG51bGw7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBXZWJleCBjaGFubmVsIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJleENoYW5uZWwoKTogV2ViZXhDaGFubmVsIHtcbiAgcmV0dXJuIG5ldyBXZWJleENoYW5uZWwoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBXZWJleCBjaGFubmVsIHdpdGggY29uZmlnXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBbmRJbml0aWFsaXplKGNvbmZpZzogV2ViZXhDaGFubmVsQ29uZmlnKTogUHJvbWlzZTxXZWJleENoYW5uZWw+IHtcbiAgY29uc3QgY2hhbm5lbCA9IGNyZWF0ZVdlYmV4Q2hhbm5lbCgpO1xuICBhd2FpdCBjaGFubmVsLmluaXRpYWxpemUoY29uZmlnKTtcbiAgcmV0dXJuIGNoYW5uZWw7XG59XG4iXX0=
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Webex Channel Plugin
|
|
3
|
+
*
|
|
4
|
+
* A channel plugin for integrating Cisco Webex messaging with OpenClaw.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { default } from "./plugin";
|
|
9
|
+
export { id } from "./plugin";
|
|
10
|
+
export { WebexSender, WebexApiRequestError } from "./send";
|
|
11
|
+
export { WebexWebhookHandler, WebhookValidationError } from "./webhook";
|
|
12
|
+
export { WebexChannel, createWebexChannel, createAndInitialize } from "./channel";
|
|
13
|
+
export { webexPlugin } from "./channel-plugin";
|
|
14
|
+
export type { WebexChannelConfig, DmPolicy, WebexPerson, WebexRoom, WebexMessage, WebexAttachment, AdaptiveCard, WebexWebhook, WebexWebhookResource, WebexWebhookEvent, WebexWebhookPayload, WebexWebhookData, CreateMessageRequest, CreateWebhookRequest, WebexApiError, PaginatedResponse, OpenClawEnvelope, OpenClawAttachment, OpenClawOutboundMessage, WebexChannelPlugin, WebhookHandler, RetryOptions, RequestOptions, } from "./types";
|
|
15
|
+
export type { ResolvedWebexAccount } from "./channel-plugin";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw Webex Channel Plugin
|
|
4
|
+
*
|
|
5
|
+
* A channel plugin for integrating Cisco Webex messaging with OpenClaw.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.webexPlugin = exports.createAndInitialize = exports.createWebexChannel = exports.WebexChannel = exports.WebhookValidationError = exports.WebexWebhookHandler = exports.WebexApiRequestError = exports.WebexSender = exports.id = exports.default = void 0;
|
|
14
|
+
// Re-export the plugin registration function as default
|
|
15
|
+
var plugin_1 = require("./plugin");
|
|
16
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(plugin_1).default; } });
|
|
17
|
+
var plugin_2 = require("./plugin");
|
|
18
|
+
Object.defineProperty(exports, "id", { enumerable: true, get: function () { return plugin_2.id; } });
|
|
19
|
+
// Re-export existing classes for backwards compatibility and advanced usage
|
|
20
|
+
var send_1 = require("./send");
|
|
21
|
+
Object.defineProperty(exports, "WebexSender", { enumerable: true, get: function () { return send_1.WebexSender; } });
|
|
22
|
+
Object.defineProperty(exports, "WebexApiRequestError", { enumerable: true, get: function () { return send_1.WebexApiRequestError; } });
|
|
23
|
+
var webhook_1 = require("./webhook");
|
|
24
|
+
Object.defineProperty(exports, "WebexWebhookHandler", { enumerable: true, get: function () { return webhook_1.WebexWebhookHandler; } });
|
|
25
|
+
Object.defineProperty(exports, "WebhookValidationError", { enumerable: true, get: function () { return webhook_1.WebhookValidationError; } });
|
|
26
|
+
var channel_1 = require("./channel");
|
|
27
|
+
Object.defineProperty(exports, "WebexChannel", { enumerable: true, get: function () { return channel_1.WebexChannel; } });
|
|
28
|
+
Object.defineProperty(exports, "createWebexChannel", { enumerable: true, get: function () { return channel_1.createWebexChannel; } });
|
|
29
|
+
Object.defineProperty(exports, "createAndInitialize", { enumerable: true, get: function () { return channel_1.createAndInitialize; } });
|
|
30
|
+
var channel_plugin_1 = require("./channel-plugin");
|
|
31
|
+
Object.defineProperty(exports, "webexPlugin", { enumerable: true, get: function () { return channel_plugin_1.webexPlugin; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7O0FBRUgsd0RBQXdEO0FBQ3hELG1DQUFtQztBQUExQixrSEFBQSxPQUFPLE9BQUE7QUFDaEIsbUNBQThCO0FBQXJCLDRGQUFBLEVBQUUsT0FBQTtBQUVYLDRFQUE0RTtBQUM1RSwrQkFBMkQ7QUFBbEQsbUdBQUEsV0FBVyxPQUFBO0FBQUUsNEdBQUEsb0JBQW9CLE9BQUE7QUFDMUMscUNBQXdFO0FBQS9ELDhHQUFBLG1CQUFtQixPQUFBO0FBQUUsaUhBQUEsc0JBQXNCLE9BQUE7QUFDcEQscUNBQWtGO0FBQXpFLHVHQUFBLFlBQVksT0FBQTtBQUFFLDZHQUFBLGtCQUFrQixPQUFBO0FBQUUsOEdBQUEsbUJBQW1CLE9BQUE7QUFDOUQsbURBQStDO0FBQXRDLDZHQUFBLFdBQVcsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkNsYXcgV2ViZXggQ2hhbm5lbCBQbHVnaW5cbiAqXG4gKiBBIGNoYW5uZWwgcGx1Z2luIGZvciBpbnRlZ3JhdGluZyBDaXNjbyBXZWJleCBtZXNzYWdpbmcgd2l0aCBPcGVuQ2xhdy5cbiAqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG4vLyBSZS1leHBvcnQgdGhlIHBsdWdpbiByZWdpc3RyYXRpb24gZnVuY3Rpb24gYXMgZGVmYXVsdFxuZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCIuL3BsdWdpblwiO1xuZXhwb3J0IHsgaWQgfSBmcm9tIFwiLi9wbHVnaW5cIjtcblxuLy8gUmUtZXhwb3J0IGV4aXN0aW5nIGNsYXNzZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBhZHZhbmNlZCB1c2FnZVxuZXhwb3J0IHsgV2ViZXhTZW5kZXIsIFdlYmV4QXBpUmVxdWVzdEVycm9yIH0gZnJvbSBcIi4vc2VuZFwiO1xuZXhwb3J0IHsgV2ViZXhXZWJob29rSGFuZGxlciwgV2ViaG9va1ZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL3dlYmhvb2tcIjtcbmV4cG9ydCB7IFdlYmV4Q2hhbm5lbCwgY3JlYXRlV2ViZXhDaGFubmVsLCBjcmVhdGVBbmRJbml0aWFsaXplIH0gZnJvbSBcIi4vY2hhbm5lbFwiO1xuZXhwb3J0IHsgd2ViZXhQbHVnaW4gfSBmcm9tIFwiLi9jaGFubmVsLXBsdWdpblwiO1xuXG4vLyBSZS1leHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgV2ViZXhDaGFubmVsQ29uZmlnLFxuICBEbVBvbGljeSxcbiAgV2ViZXhQZXJzb24sXG4gIFdlYmV4Um9vbSxcbiAgV2ViZXhNZXNzYWdlLFxuICBXZWJleEF0dGFjaG1lbnQsXG4gIEFkYXB0aXZlQ2FyZCxcbiAgV2ViZXhXZWJob29rLFxuICBXZWJleFdlYmhvb2tSZXNvdXJjZSxcbiAgV2ViZXhXZWJob29rRXZlbnQsXG4gIFdlYmV4V2ViaG9va1BheWxvYWQsXG4gIFdlYmV4V2ViaG9va0RhdGEsXG4gIENyZWF0ZU1lc3NhZ2VSZXF1ZXN0LFxuICBDcmVhdGVXZWJob29rUmVxdWVzdCxcbiAgV2ViZXhBcGlFcnJvcixcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIE9wZW5DbGF3RW52ZWxvcGUsXG4gIE9wZW5DbGF3QXR0YWNobWVudCxcbiAgT3BlbkNsYXdPdXRib3VuZE1lc3NhZ2UsXG4gIFdlYmV4Q2hhbm5lbFBsdWdpbixcbiAgV2ViaG9va0hhbmRsZXIsXG4gIFJldHJ5T3B0aW9ucyxcbiAgUmVxdWVzdE9wdGlvbnMsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZWRXZWJleEFjY291bnQgfSBmcm9tIFwiLi9jaGFubmVsLXBsdWdpblwiO1xuIl19
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Webex Channel Plugin
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the OpenClaw plugin system.
|
|
5
|
+
* Exports a default function that registers the Webex channel.
|
|
6
|
+
*/
|
|
7
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
8
|
+
/**
|
|
9
|
+
* OpenClaw plugin registration function.
|
|
10
|
+
*
|
|
11
|
+
* This is the entry point that OpenClaw calls when loading the plugin.
|
|
12
|
+
* It registers the Webex channel with the plugin system.
|
|
13
|
+
*/
|
|
14
|
+
export default function register(api: OpenClawPluginApi): void;
|
|
15
|
+
export declare const id = "webex";
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw Webex Channel Plugin
|
|
4
|
+
*
|
|
5
|
+
* Main entry point for the OpenClaw plugin system.
|
|
6
|
+
* Exports a default function that registers the Webex channel.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.id = void 0;
|
|
10
|
+
exports.default = register;
|
|
11
|
+
const channel_plugin_1 = require("./channel-plugin");
|
|
12
|
+
/**
|
|
13
|
+
* OpenClaw plugin registration function.
|
|
14
|
+
*
|
|
15
|
+
* This is the entry point that OpenClaw calls when loading the plugin.
|
|
16
|
+
* It registers the Webex channel with the plugin system.
|
|
17
|
+
*/
|
|
18
|
+
function register(api) {
|
|
19
|
+
api.registerChannel({ plugin: channel_plugin_1.webexPlugin });
|
|
20
|
+
}
|
|
21
|
+
// Export the plugin ID for reference
|
|
22
|
+
exports.id = "webex";
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQVdILDJCQUVDO0FBVkQscURBQStDO0FBRS9DOzs7OztHQUtHO0FBQ0gsU0FBd0IsUUFBUSxDQUFDLEdBQXNCO0lBQ3JELEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsNEJBQVcsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELHFDQUFxQztBQUN4QixRQUFBLEVBQUUsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5DbGF3IFdlYmV4IENoYW5uZWwgUGx1Z2luXG4gKlxuICogTWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIE9wZW5DbGF3IHBsdWdpbiBzeXN0ZW0uXG4gKiBFeHBvcnRzIGEgZGVmYXVsdCBmdW5jdGlvbiB0aGF0IHJlZ2lzdGVycyB0aGUgV2ViZXggY2hhbm5lbC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE9wZW5DbGF3UGx1Z2luQXBpIH0gZnJvbSBcIm9wZW5jbGF3L3BsdWdpbi1zZGtcIjtcbmltcG9ydCB7IHdlYmV4UGx1Z2luIH0gZnJvbSBcIi4vY2hhbm5lbC1wbHVnaW5cIjtcblxuLyoqXG4gKiBPcGVuQ2xhdyBwbHVnaW4gcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRoYXQgT3BlbkNsYXcgY2FsbHMgd2hlbiBsb2FkaW5nIHRoZSBwbHVnaW4uXG4gKiBJdCByZWdpc3RlcnMgdGhlIFdlYmV4IGNoYW5uZWwgd2l0aCB0aGUgcGx1Z2luIHN5c3RlbS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoYXBpOiBPcGVuQ2xhd1BsdWdpbkFwaSk6IHZvaWQge1xuICBhcGkucmVnaXN0ZXJDaGFubmVsKHsgcGx1Z2luOiB3ZWJleFBsdWdpbiB9KTtcbn1cblxuLy8gRXhwb3J0IHRoZSBwbHVnaW4gSUQgZm9yIHJlZmVyZW5jZVxuZXhwb3J0IGNvbnN0IGlkID0gXCJ3ZWJleFwiO1xuIl19
|
package/dist/send.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webex Message Sending Module
|
|
3
|
+
*/
|
|
4
|
+
import type { WebexChannelConfig, WebexMessage, OpenClawOutboundMessage } from './types';
|
|
5
|
+
export declare class WebexSender {
|
|
6
|
+
private config;
|
|
7
|
+
private apiBaseUrl;
|
|
8
|
+
private retryOptions;
|
|
9
|
+
constructor(config: WebexChannelConfig);
|
|
10
|
+
/**
|
|
11
|
+
* Send a message to Webex
|
|
12
|
+
*/
|
|
13
|
+
send(message: OpenClawOutboundMessage): Promise<WebexMessage>;
|
|
14
|
+
/**
|
|
15
|
+
* Send a text message to a room
|
|
16
|
+
*/
|
|
17
|
+
sendToRoom(roomId: string, text: string, markdown?: string): Promise<WebexMessage>;
|
|
18
|
+
/**
|
|
19
|
+
* Send a direct message to a person by ID
|
|
20
|
+
*/
|
|
21
|
+
sendDirectById(personId: string, text: string, markdown?: string): Promise<WebexMessage>;
|
|
22
|
+
/**
|
|
23
|
+
* Send a direct message to a person by email
|
|
24
|
+
*/
|
|
25
|
+
sendDirectByEmail(email: string, text: string, markdown?: string): Promise<WebexMessage>;
|
|
26
|
+
/**
|
|
27
|
+
* Send a message with file attachment
|
|
28
|
+
*/
|
|
29
|
+
sendWithFile(roomId: string, text: string, fileUrl: string): Promise<WebexMessage>;
|
|
30
|
+
/**
|
|
31
|
+
* Send a threaded reply
|
|
32
|
+
*/
|
|
33
|
+
sendReply(roomId: string, parentId: string, text: string, markdown?: string): Promise<WebexMessage>;
|
|
34
|
+
/**
|
|
35
|
+
* Get a message by ID
|
|
36
|
+
*/
|
|
37
|
+
getMessage(messageId: string): Promise<WebexMessage>;
|
|
38
|
+
/**
|
|
39
|
+
* Delete a message by ID
|
|
40
|
+
*/
|
|
41
|
+
deleteMessage(messageId: string): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Build a Webex message request from an OpenClaw outbound message
|
|
44
|
+
*/
|
|
45
|
+
private buildMessageRequest;
|
|
46
|
+
/**
|
|
47
|
+
* Create a message via the Webex API
|
|
48
|
+
*/
|
|
49
|
+
private createMessage;
|
|
50
|
+
/**
|
|
51
|
+
* Validate a message request before sending
|
|
52
|
+
*/
|
|
53
|
+
private validateMessageRequest;
|
|
54
|
+
/**
|
|
55
|
+
* Make an API request with retry logic
|
|
56
|
+
*/
|
|
57
|
+
private request;
|
|
58
|
+
/**
|
|
59
|
+
* Execute a single API request
|
|
60
|
+
*/
|
|
61
|
+
private executeRequest;
|
|
62
|
+
/**
|
|
63
|
+
* Parse error response from Webex API
|
|
64
|
+
*/
|
|
65
|
+
private parseErrorResponse;
|
|
66
|
+
/**
|
|
67
|
+
* Determine if a request should be retried
|
|
68
|
+
*/
|
|
69
|
+
private shouldRetry;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate backoff delay with exponential backoff and jitter
|
|
72
|
+
*/
|
|
73
|
+
private calculateBackoff;
|
|
74
|
+
/**
|
|
75
|
+
* Sleep for a given number of milliseconds
|
|
76
|
+
*/
|
|
77
|
+
private sleep;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Custom error class for Webex API errors
|
|
81
|
+
*/
|
|
82
|
+
export declare class WebexApiRequestError extends Error {
|
|
83
|
+
readonly statusCode: number;
|
|
84
|
+
readonly trackingId?: string;
|
|
85
|
+
readonly details?: Array<{
|
|
86
|
+
description: string;
|
|
87
|
+
}>;
|
|
88
|
+
constructor(message: string, statusCode: number, trackingId?: string, details?: Array<{
|
|
89
|
+
description: string;
|
|
90
|
+
}>);
|
|
91
|
+
toJSON(): object;
|
|
92
|
+
}
|