@towns-protocol/bot 0.0.260
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.txt +21 -0
- package/README.md +19 -0
- package/dist/bot.d.ts +273 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +705 -0
- package/dist/bot.js.map +1 -0
- package/dist/bot.test.d.ts +2 -0
- package/dist/bot.test.d.ts.map +1 -0
- package/dist/bot.test.js +420 -0
- package/dist/bot.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 River Association
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @towns-protocol/bot
|
|
2
|
+
|
|
3
|
+
A bot framework for Towns.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { makeTownsBot } from "@towns-protocol/bot";
|
|
9
|
+
import { serve } from "@hono/node-server";
|
|
10
|
+
|
|
11
|
+
const bot = await makeTownsBot("<app-private-data-base64>", "<env>");
|
|
12
|
+
|
|
13
|
+
bot.onMentioned((client, { channelId }) =>
|
|
14
|
+
client.sendMessage(channelId, "Hello, world!"),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
const { fetch } = await bot.start();
|
|
18
|
+
serve({ fetch });
|
|
19
|
+
```
|
package/dist/bot.d.ts
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import 'fake-indexeddb/auto';
|
|
2
|
+
import { type ClientV2, type makeRiverConfig, type ParsedEvent } from '@towns-protocol/sdk';
|
|
3
|
+
import TypedEmitter from 'typed-emitter';
|
|
4
|
+
import { type ChannelMessage_Post_Attachment, type ChannelMessage_Post_Mention, ChannelMessage, type UserInboxPayload_GroupEncryptionSessions, type PlainMessage, type ChunkedMedia, Tags } from '@towns-protocol/proto';
|
|
5
|
+
import { GroupEncryptionAlgorithmId } from '@towns-protocol/encryption';
|
|
6
|
+
import { type Abi, type Account, type Chain, type Client as ViemClient, type ContractFunctionArgs, type ContractFunctionName } from 'viem';
|
|
7
|
+
import { type ReadContractParameters, type WriteContractParameters } from 'viem/actions';
|
|
8
|
+
type BotActions = ReturnType<typeof buildBotActions>;
|
|
9
|
+
export type BotPayload<T extends keyof BotEvents> = Parameters<BotEvents[T]>[1];
|
|
10
|
+
type MessageOpts = {
|
|
11
|
+
threadId?: string;
|
|
12
|
+
replyId?: string;
|
|
13
|
+
mentions?: PlainMessage<ChannelMessage_Post_Mention>[];
|
|
14
|
+
attachments?: PlainMessage<ChannelMessage_Post_Attachment>[];
|
|
15
|
+
};
|
|
16
|
+
export type UserData = {
|
|
17
|
+
/** The user ID of the user */
|
|
18
|
+
userId: string;
|
|
19
|
+
/** The username of the user */
|
|
20
|
+
username: string | null;
|
|
21
|
+
/** The display name of the user */
|
|
22
|
+
displayName: string | null;
|
|
23
|
+
/** The ENS address of the user */
|
|
24
|
+
ensAddress?: string;
|
|
25
|
+
/** The bio of the user */
|
|
26
|
+
bio: string | null;
|
|
27
|
+
/** The NFT that the user is currently showcasing */
|
|
28
|
+
nft?: {
|
|
29
|
+
tokenId: string;
|
|
30
|
+
contractAddress: string;
|
|
31
|
+
chainId: number;
|
|
32
|
+
};
|
|
33
|
+
/** URL that points to the profile picture of the user */
|
|
34
|
+
profilePictureUrl: string;
|
|
35
|
+
};
|
|
36
|
+
export type BotEvents = {
|
|
37
|
+
message: (handler: BotActions, event: BasePayload & {
|
|
38
|
+
/** The decrypted message content */
|
|
39
|
+
message: string;
|
|
40
|
+
/** You can use this to check if the message is a direct message */
|
|
41
|
+
isDm: boolean;
|
|
42
|
+
/** You can use this to check if the message is a group message */
|
|
43
|
+
isGdm: boolean;
|
|
44
|
+
}) => void | Promise<void>;
|
|
45
|
+
redaction: (handler: BotActions, event: BasePayload & {
|
|
46
|
+
/** The event ID that got redacted */
|
|
47
|
+
refEventId: string;
|
|
48
|
+
}) => void | Promise<void>;
|
|
49
|
+
messageEdit: (handler: BotActions, event: BasePayload & {
|
|
50
|
+
/** The event ID of the message that got edited */
|
|
51
|
+
refEventId: string;
|
|
52
|
+
/** New message */
|
|
53
|
+
message: string;
|
|
54
|
+
}) => void | Promise<void>;
|
|
55
|
+
mentioned: (handler: BotActions, event: BasePayload & {
|
|
56
|
+
/** The decrypted message content */
|
|
57
|
+
message: string;
|
|
58
|
+
}) => void | Promise<void>;
|
|
59
|
+
reply: (handler: BotActions, event: BasePayload & {
|
|
60
|
+
/** The decrypted message content */
|
|
61
|
+
message: string;
|
|
62
|
+
}) => void | Promise<void>;
|
|
63
|
+
reaction: (handler: BotActions, event: BasePayload & {
|
|
64
|
+
/** The reaction that was added */
|
|
65
|
+
reaction: string;
|
|
66
|
+
/** The event ID of the message that got reacted to */
|
|
67
|
+
messageId: string;
|
|
68
|
+
/** The user ID of the user that added the reaction */
|
|
69
|
+
userId: string;
|
|
70
|
+
}) => Promise<void> | void;
|
|
71
|
+
eventRevoke: (handler: BotActions, event: BasePayload & {
|
|
72
|
+
/** The event ID of the message that got revoked */
|
|
73
|
+
refEventId: string;
|
|
74
|
+
}) => Promise<void> | void;
|
|
75
|
+
tip: (handler: BotActions, event: BasePayload & {
|
|
76
|
+
/** The amount of the tip */
|
|
77
|
+
amount: bigint;
|
|
78
|
+
/** The currency of the tip */
|
|
79
|
+
currency: `0x${string}`;
|
|
80
|
+
}) => Promise<void> | void;
|
|
81
|
+
channelJoin: (handler: BotActions, event: BasePayload) => Promise<void> | void;
|
|
82
|
+
channelLeave: (handler: BotActions, event: BasePayload) => Promise<void> | void;
|
|
83
|
+
streamEvent: (handler: BotActions, event: BasePayload & {
|
|
84
|
+
event: ParsedEvent;
|
|
85
|
+
}) => Promise<void> | void;
|
|
86
|
+
threadMessage: (handler: BotActions, event: BasePayload & {
|
|
87
|
+
/** The thread id where the message belongs to */
|
|
88
|
+
threadId: string;
|
|
89
|
+
/** The decrypted message content */
|
|
90
|
+
message: string;
|
|
91
|
+
}) => Promise<void> | void;
|
|
92
|
+
};
|
|
93
|
+
type BasePayload = {
|
|
94
|
+
/** The user ID of the user that triggered the event */
|
|
95
|
+
userId: string;
|
|
96
|
+
/** The space ID that the event was triggered in */
|
|
97
|
+
spaceId: string;
|
|
98
|
+
/** channelId that the event was triggered in */
|
|
99
|
+
channelId: string;
|
|
100
|
+
/** The ID of the event that triggered */
|
|
101
|
+
eventId: string;
|
|
102
|
+
};
|
|
103
|
+
declare const Bot_base: new () => TypedEmitter<BotEvents>;
|
|
104
|
+
export declare class Bot extends Bot_base {
|
|
105
|
+
private readonly server;
|
|
106
|
+
private readonly client;
|
|
107
|
+
botId: string;
|
|
108
|
+
viemClient: ViemClient;
|
|
109
|
+
private readonly jwtSecret;
|
|
110
|
+
private currentMessageTags;
|
|
111
|
+
constructor(clientV2: ClientV2<BotActions>, viemClient: ViemClient, jwtSecretBase64: string);
|
|
112
|
+
start(): Promise<{
|
|
113
|
+
fetch: (request: Request, Env?: unknown, executionCtx?: import("hono").ExecutionContext) => Response | Promise<Response>;
|
|
114
|
+
}>;
|
|
115
|
+
private webhookResponseHandler;
|
|
116
|
+
private handleEvent;
|
|
117
|
+
handleChannelMessage(streamId: string, parsed: ParsedEvent, { payload }: ChannelMessage): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Send a message to a stream
|
|
120
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
121
|
+
* @param message - The cleartext of the message
|
|
122
|
+
*/
|
|
123
|
+
sendMessage(streamId: string, message: string, opts?: MessageOpts): Promise<{
|
|
124
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
125
|
+
eventId: string;
|
|
126
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
127
|
+
}>;
|
|
128
|
+
/**
|
|
129
|
+
* Send a reaction to a stream
|
|
130
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
131
|
+
* @param refEventId - The eventId of the event to react to
|
|
132
|
+
* @param reaction - The reaction to send
|
|
133
|
+
*/
|
|
134
|
+
sendReaction(streamId: string, refEventId: string, reaction: string): Promise<{
|
|
135
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
136
|
+
eventId: string;
|
|
137
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
138
|
+
}>;
|
|
139
|
+
/**
|
|
140
|
+
* Remove an specific event from a stream
|
|
141
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
142
|
+
* @param refEventId - The eventId of the event to remove
|
|
143
|
+
*/
|
|
144
|
+
removeEvent(streamId: string, refEventId: string): Promise<{
|
|
145
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
146
|
+
eventId: string;
|
|
147
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* Edit an specific message from a stream
|
|
151
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
152
|
+
* @param messageId - The eventId of the message to edit
|
|
153
|
+
* @param message - The new message text
|
|
154
|
+
*/
|
|
155
|
+
editMessage(streamId: string, messageId: string, message: string): Promise<{
|
|
156
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
157
|
+
eventId: string;
|
|
158
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
159
|
+
}>;
|
|
160
|
+
writeContract<chain extends Chain | undefined, account extends Account | undefined, const abi extends Abi | readonly unknown[], functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>, args extends ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>, chainOverride extends Chain | undefined>(tx: WriteContractParameters<abi, functionName, args, chain, account, chainOverride>): Promise<`0x${string}`>;
|
|
161
|
+
readContract<const abi extends Abi | readonly unknown[], functionName extends ContractFunctionName<abi, 'pure' | 'view'>, const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>>(parameters: ReadContractParameters<abi, functionName, args>): Promise<import("viem").ContractFunctionReturnType<abi, "view" | "pure", functionName, args>>;
|
|
162
|
+
/**
|
|
163
|
+
* Triggered when someone sends a message.
|
|
164
|
+
* This is triggered for all messages, including direct messages and group messages.
|
|
165
|
+
*/
|
|
166
|
+
onMessage(fn: BotEvents['message']): void;
|
|
167
|
+
onRedaction(fn: BotEvents['redaction']): void;
|
|
168
|
+
/**
|
|
169
|
+
* Triggered when a message gets edited
|
|
170
|
+
*/
|
|
171
|
+
onMessageEdit(fn: BotEvents['messageEdit']): void;
|
|
172
|
+
/**
|
|
173
|
+
* Triggered when someone mentions the bot in a message
|
|
174
|
+
*/
|
|
175
|
+
onMentioned(fn: BotEvents['mentioned']): void;
|
|
176
|
+
/**
|
|
177
|
+
* Triggered when someone replies to a message
|
|
178
|
+
*/
|
|
179
|
+
onReply(fn: BotEvents['reply']): void;
|
|
180
|
+
/**
|
|
181
|
+
* Triggered when someone reacts to a message
|
|
182
|
+
*/
|
|
183
|
+
onReaction(fn: BotEvents['reaction']): void;
|
|
184
|
+
/**
|
|
185
|
+
* Triggered when a message is revoked by a moderator
|
|
186
|
+
*/
|
|
187
|
+
onEventRevoke(fn: BotEvents['eventRevoke']): void;
|
|
188
|
+
/**
|
|
189
|
+
* Triggered when someone tips the bot
|
|
190
|
+
* TODO: impl
|
|
191
|
+
*/
|
|
192
|
+
onTip(fn: BotEvents['tip']): void;
|
|
193
|
+
/**
|
|
194
|
+
* Triggered when someone joins a channel
|
|
195
|
+
*/
|
|
196
|
+
onChannelJoin(fn: BotEvents['channelJoin']): void;
|
|
197
|
+
/**
|
|
198
|
+
* Triggered when someone leaves a channel
|
|
199
|
+
*/
|
|
200
|
+
onChannelLeave(fn: BotEvents['channelLeave']): void;
|
|
201
|
+
onStreamEvent(fn: BotEvents['streamEvent']): void;
|
|
202
|
+
onThreadMessage(fn: BotEvents['threadMessage']): void;
|
|
203
|
+
}
|
|
204
|
+
export declare const makeTownsBot: (appPrivateDataBase64: string, jwtSecretBase64: string, env: Parameters<typeof makeRiverConfig>[0], baseRpcUrl?: string) => Promise<Bot>;
|
|
205
|
+
declare const buildBotActions: (client: ClientV2, viemClient: ViemClient) => {
|
|
206
|
+
writeContract: <chain extends Chain | undefined, account extends Account | undefined, const abi extends Abi | readonly unknown[], functionName extends ContractFunctionName<abi, "nonpayable" | "payable">, args extends ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined>(tx: WriteContractParameters<abi, functionName, args, chain, account, chainOverride>) => Promise<`0x${string}`>;
|
|
207
|
+
readContract: <const abi extends Abi | readonly unknown[], functionName extends ContractFunctionName<abi, "pure" | "view">, const args extends ContractFunctionArgs<abi, "pure" | "view", functionName>>(parameters: ReadContractParameters<abi, functionName, args>) => Promise<import("viem").ContractFunctionReturnType<abi, "view" | "pure", functionName, args>>;
|
|
208
|
+
sendMessage: (streamId: string, message: string, opts?: {
|
|
209
|
+
threadId?: string;
|
|
210
|
+
replyId?: string;
|
|
211
|
+
mentions?: PlainMessage<ChannelMessage_Post_Mention>[];
|
|
212
|
+
attachments?: PlainMessage<ChannelMessage_Post_Attachment>[];
|
|
213
|
+
}, tags?: PlainMessage<Tags>) => Promise<{
|
|
214
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
215
|
+
eventId: string;
|
|
216
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
217
|
+
}>;
|
|
218
|
+
editMessage: (streamId: string, messageId: string, message: string, tags?: PlainMessage<Tags>) => Promise<{
|
|
219
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
220
|
+
eventId: string;
|
|
221
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
222
|
+
}>;
|
|
223
|
+
sendDm: (userId: string, message: string, opts?: {
|
|
224
|
+
threadId?: string;
|
|
225
|
+
replyId?: string;
|
|
226
|
+
mentions?: ChannelMessage_Post_Mention[];
|
|
227
|
+
attachments?: ChannelMessage_Post_Attachment[];
|
|
228
|
+
}) => Promise<{
|
|
229
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
230
|
+
eventId: string;
|
|
231
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
232
|
+
}>;
|
|
233
|
+
sendReaction: (streamId: string, messageId: string, reaction: string, tags?: PlainMessage<Tags>) => Promise<{
|
|
234
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
235
|
+
eventId: string;
|
|
236
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
237
|
+
}>;
|
|
238
|
+
removeEvent: (streamId: string, messageId: string, tags?: PlainMessage<Tags>) => Promise<{
|
|
239
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
240
|
+
eventId: string;
|
|
241
|
+
prevMiniblockHash: Uint8Array<ArrayBufferLike>;
|
|
242
|
+
}>;
|
|
243
|
+
sendKeySolicitation: (streamId: string, sessionIds: string[]) => Promise<{
|
|
244
|
+
eventId: string;
|
|
245
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
246
|
+
}>;
|
|
247
|
+
uploadDeviceKeys: () => Promise<{
|
|
248
|
+
eventId: string;
|
|
249
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
250
|
+
}>;
|
|
251
|
+
decryptSessions: (streamId: string, sessions: UserInboxPayload_GroupEncryptionSessions) => Promise<{
|
|
252
|
+
streamId: string;
|
|
253
|
+
sessionId: string;
|
|
254
|
+
sessionKey: string;
|
|
255
|
+
algorithm: GroupEncryptionAlgorithmId;
|
|
256
|
+
}[]>;
|
|
257
|
+
setUsername: (streamId: string, username: string) => Promise<{
|
|
258
|
+
eventId: string;
|
|
259
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
260
|
+
}>;
|
|
261
|
+
setDisplayName: (streamId: string, displayName: string) => Promise<{
|
|
262
|
+
eventId: string;
|
|
263
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
264
|
+
}>;
|
|
265
|
+
setUserProfileImage: (chunkedMediaInfo: PlainMessage<ChunkedMedia>) => Promise<{
|
|
266
|
+
eventId: string;
|
|
267
|
+
error: import("@towns-protocol/proto").AddEventResponse_Error | undefined;
|
|
268
|
+
}>;
|
|
269
|
+
/** @deprecated Not planned for now */
|
|
270
|
+
getUserData: (streamId: string, userId: string) => Promise<UserData | null>;
|
|
271
|
+
};
|
|
272
|
+
export {};
|
|
273
|
+
//# sourceMappingURL=bot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
|