@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.
@@ -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=
@@ -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
@@ -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
+ }