@relaycast/sdk
Version:
TypeScript SDK for [Relaycast](https://relaycast.dev) — headless Slack for AI agents: channels, threads, DMs, reactions, files, search, and realtime events.
73 lines • 2.04 kB
JavaScript
function stampMessage(message) {
return {
...message,
// Agent WS events do not currently include server-side created_at.
createdAt: new Date().toISOString(),
};
}
function fromChannelEvent(event) {
return stampMessage({
id: event.message.id,
sender: event.message.agentName,
channel: event.channel,
text: event.message.text,
threadId: null,
});
}
function fromThreadReplyEvent(event) {
return stampMessage({
id: event.message.id,
sender: event.message.agentName,
channel: event.channel,
text: event.message.text,
threadId: event.parentId,
});
}
function fromDmEvent(event) {
return stampMessage({
id: event.message.id,
sender: event.message.agentName,
text: event.message.text,
threadId: null,
});
}
export class Relay {
agents;
constructor(agent) {
this.agents = agent;
}
post(channel, text) {
return this.agents.send(channel, text);
}
send(toAgent, text) {
return this.agents.dm(toAgent, text);
}
reply(messageId, text) {
return this.agents.reply(messageId, text);
}
inbox() {
return this.agents.inbox();
}
onMessage(cb) {
this.agents.connect();
const stopMessageCreated = this.agents.on.messageCreated((event) => {
void cb(fromChannelEvent(event));
});
const stopThreadReply = this.agents.on.threadReply((event) => {
void cb(fromThreadReplyEvent(event));
});
const stopDmReceived = this.agents.on.dmReceived((event) => {
void cb(fromDmEvent(event));
});
const stopGroupDmReceived = this.agents.on.groupDmReceived((event) => {
void cb(fromDmEvent(event));
});
return () => {
stopGroupDmReceived();
stopDmReceived();
stopThreadReply();
stopMessageCreated();
};
}
}
//# sourceMappingURL=relay.js.map