git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
"use strict";
|
|
/**
|
|
* BaseAdapter - Abstract Channel Adapter
|
|
*
|
|
* Base class for all channel adapters providing a unified interface
|
|
* for multi-channel messaging support.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.BaseAdapter = void 0;
|
|
const uuid_1 = require("uuid");
|
|
// ============================================================================
|
|
// BaseAdapter Abstract Class
|
|
// ============================================================================
|
|
class BaseAdapter {
|
|
constructor(config) {
|
|
this.messageHandlers = [];
|
|
this.config = {
|
|
...config,
|
|
enabled: config.enabled ?? true,
|
|
};
|
|
this.status = {
|
|
connected: false,
|
|
errorCount: 0,
|
|
messageCount: 0,
|
|
};
|
|
}
|
|
/**
|
|
* Get channel type
|
|
*/
|
|
get type() {
|
|
return this.config.type;
|
|
}
|
|
/**
|
|
* Get tenant ID
|
|
*/
|
|
get tenantId() {
|
|
return this.config.tenantId;
|
|
}
|
|
/**
|
|
* Check if adapter is enabled
|
|
*/
|
|
get enabled() {
|
|
return this.config.enabled ?? true;
|
|
}
|
|
/**
|
|
* Get adapter status
|
|
*/
|
|
getStatus() {
|
|
return { ...this.status };
|
|
}
|
|
/**
|
|
* Register a message handler
|
|
*/
|
|
onMessage(handler) {
|
|
this.messageHandlers.push(handler);
|
|
}
|
|
/**
|
|
* Remove a message handler
|
|
*/
|
|
offMessage(handler) {
|
|
const index = this.messageHandlers.indexOf(handler);
|
|
if (index > -1) {
|
|
this.messageHandlers.splice(index, 1);
|
|
}
|
|
}
|
|
/**
|
|
* Emit a received message to all handlers
|
|
*/
|
|
async emitMessage(message) {
|
|
this.status.messageCount++;
|
|
this.status.lastActivity = new Date();
|
|
for (const handler of this.messageHandlers) {
|
|
try {
|
|
await handler(message);
|
|
}
|
|
catch (error) {
|
|
this.status.errorCount++;
|
|
console.error(`Message handler error in ${this.type}:`, error);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Create a unified message from raw input
|
|
*/
|
|
createUnifiedMessage(content, userId, channelId, extra = {}) {
|
|
return {
|
|
id: (0, uuid_1.v4)(),
|
|
channelId,
|
|
channelType: this.config.type,
|
|
tenantId: this.config.tenantId,
|
|
userId,
|
|
content,
|
|
timestamp: new Date(),
|
|
metadata: {},
|
|
...extra,
|
|
};
|
|
}
|
|
}
|
|
exports.BaseAdapter = BaseAdapter;
|
|
exports.default = BaseAdapter;
|
|
//# sourceMappingURL=BaseAdapter.js.map
|