@towns-labs/agent 2.0.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/README.md +151 -0
- package/dist/agent.d.ts +480 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1758 -0
- package/dist/agent.js.map +1 -0
- package/dist/agent.test.d.ts +2 -0
- package/dist/agent.test.d.ts.map +1 -0
- package/dist/agent.test.js +1315 -0
- package/dist/agent.test.js.map +1 -0
- package/dist/eventDedup.d.ts +73 -0
- package/dist/eventDedup.d.ts.map +1 -0
- package/dist/eventDedup.js +105 -0
- package/dist/eventDedup.js.map +1 -0
- package/dist/eventDedup.test.d.ts +2 -0
- package/dist/eventDedup.test.d.ts.map +1 -0
- package/dist/eventDedup.test.js +222 -0
- package/dist/eventDedup.test.js.map +1 -0
- package/dist/identity-types.d.ts +43 -0
- package/dist/identity-types.d.ts.map +1 -0
- package/dist/identity-types.js +2 -0
- package/dist/identity-types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction-api.d.ts +61 -0
- package/dist/interaction-api.d.ts.map +1 -0
- package/dist/interaction-api.js +95 -0
- package/dist/interaction-api.js.map +1 -0
- package/dist/payments.d.ts +89 -0
- package/dist/payments.d.ts.map +1 -0
- package/dist/payments.js +144 -0
- package/dist/payments.js.map +1 -0
- package/dist/re-exports.d.ts +2 -0
- package/dist/re-exports.d.ts.map +1 -0
- package/dist/re-exports.js +2 -0
- package/dist/re-exports.js.map +1 -0
- package/dist/smart-account.d.ts +54 -0
- package/dist/smart-account.d.ts.map +1 -0
- package/dist/smart-account.js +132 -0
- package/dist/smart-account.js.map +1 -0
- package/dist/snapshot-getter.d.ts +21 -0
- package/dist/snapshot-getter.d.ts.map +1 -0
- package/dist/snapshot-getter.js +27 -0
- package/dist/snapshot-getter.js.map +1 -0
- package/package.json +67 -0
package/README.md
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# @towns-labs/agent
|
|
2
|
+
|
|
3
|
+
An agent framework for Towns.
|
|
4
|
+
|
|
5
|
+
## Installing
|
|
6
|
+
|
|
7
|
+
We suggest users to quickstart a project using our cli.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
$ bunx towns-agent init
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If you prefer to install manually:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
$ bun add @towns-labs/agent viem hono
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
With Node:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { makeTownsAgent } from "@towns-labs/agent";
|
|
25
|
+
import { serve } from "@hono/node-server";
|
|
26
|
+
|
|
27
|
+
const app = new Hono();
|
|
28
|
+
const agent = await makeTownsAgent("<app-private-data-base64>", "<jwt-secret>");
|
|
29
|
+
|
|
30
|
+
agent.onMessage((handler, { channelId, isMentioned }) => {
|
|
31
|
+
if (isMentioned) {
|
|
32
|
+
handler.sendMessage(channelId, "Hello, world!");
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const { jwtMiddleware, handler } = agent.start();
|
|
37
|
+
app.post("/webhook", jwtMiddleware, handler);
|
|
38
|
+
|
|
39
|
+
serve({ fetch: app.fetch });
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
With Bun:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { makeTownsAgent } from "@towns-labs/agent";
|
|
46
|
+
|
|
47
|
+
const app = new Hono();
|
|
48
|
+
const agent = await makeTownsAgent("<app-private-data-base64>", "<jwt-secret>");
|
|
49
|
+
|
|
50
|
+
agent.onMessage((handler, { channelId, isMentioned }) => {
|
|
51
|
+
if (isMentioned) {
|
|
52
|
+
handler.sendMessage(channelId, "Hello, world!");
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const { jwtMiddleware, handler } = agent.start();
|
|
57
|
+
app.post("/webhook", jwtMiddleware, handler);
|
|
58
|
+
|
|
59
|
+
export default app;
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Identity Metadata (ERC-8004)
|
|
63
|
+
|
|
64
|
+
Agents can optionally define ERC-8004 compliant identity metadata for agent discovery and trust.
|
|
65
|
+
|
|
66
|
+
### Minimal Example
|
|
67
|
+
|
|
68
|
+
Create `identity.ts`:
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import type { AgentAgentIdentityConfig } from "@towns-labs/agent";
|
|
72
|
+
|
|
73
|
+
const identity = {
|
|
74
|
+
name: "My Agent",
|
|
75
|
+
description: "A helpful agent for Towns",
|
|
76
|
+
image: "https://example.com/agent-logo.png",
|
|
77
|
+
domain: "myAgent.example.com",
|
|
78
|
+
} as const satisfies AgentIdentityConfig;
|
|
79
|
+
|
|
80
|
+
export default identity;
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Use in agent setup:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import identity from "./identity";
|
|
87
|
+
|
|
88
|
+
const agent = await makeTownsAgent(
|
|
89
|
+
process.env.APP_PRIVATE_DATA!,
|
|
90
|
+
process.env.JWT_SECRET!,
|
|
91
|
+
{
|
|
92
|
+
commands,
|
|
93
|
+
identity,
|
|
94
|
+
},
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
// Get metadata for hosting at /.well-known/agent-metadata.json
|
|
98
|
+
const metadata = agent.getIdentityMetadata();
|
|
99
|
+
app.get("/.well-known/agent-metadata.json", metadata);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Advanced Example
|
|
103
|
+
|
|
104
|
+
For full ERC-8004 compliance with endpoints and trust models:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import type { AgentIdentityConfig } from "@towns-labs/agent";
|
|
108
|
+
|
|
109
|
+
const identity = {
|
|
110
|
+
name: "Advanced Agent",
|
|
111
|
+
description: "AI-powered agent with multi-protocol support",
|
|
112
|
+
image: "https://example.com/agent-logo.png",
|
|
113
|
+
motto: "Building the future of agent economies",
|
|
114
|
+
domain: "agent.example.com",
|
|
115
|
+
|
|
116
|
+
endpoints: [
|
|
117
|
+
{
|
|
118
|
+
name: "A2A",
|
|
119
|
+
endpoint: "https://agent.example.com/.well-known/agent-card.json",
|
|
120
|
+
version: "0.3.0",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "MCP",
|
|
124
|
+
endpoint: "https://mcp.agent.example.com/",
|
|
125
|
+
version: "2025-06-18",
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
|
|
129
|
+
registrations: [],
|
|
130
|
+
|
|
131
|
+
supportedTrust: ["reputation", "crypto-economic"],
|
|
132
|
+
|
|
133
|
+
attributes: [
|
|
134
|
+
{ trait_type: "Category", value: "Gateway" },
|
|
135
|
+
{ trait_type: "Model", value: "GPT-4" },
|
|
136
|
+
],
|
|
137
|
+
} as const satisfies AgentIdentityConfig;
|
|
138
|
+
|
|
139
|
+
export default identity;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The agent automatically adds `agentWallet` endpoint using the agent's app address and `A2A` endpoint if domain is configured.
|
|
143
|
+
|
|
144
|
+
## Debug Logging
|
|
145
|
+
|
|
146
|
+
Agent framework uses `debug` package for logging.
|
|
147
|
+
You can enable by setting the `DEBUG` environment variable to `csb:agent`.
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
DEBUG=csb:agent node dist/agent.cjs
|
|
151
|
+
```
|
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { SpaceDapp, type SendTipMemberParams } from '@towns-labs/web3';
|
|
2
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
3
|
+
import { type ClientV2, type ParsedEvent, type CreateTownsClientParams } from '@towns-labs/sdk';
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { type ChannelMessage_Post_Mention, ChannelMessage, type PlainMessage, Tags, type SlashCommand, type BlockchainTransaction, InteractionRequestPayload, InteractionResponsePayload, StreamEvent } from '@towns-labs/proto';
|
|
6
|
+
import { type EventDedupConfig } from './eventDedup';
|
|
7
|
+
import { type FlattenedInteractionRequest } from './interaction-api';
|
|
8
|
+
import type { FacilitatorConfig, RouteConfig } from 'x402/types';
|
|
9
|
+
import { type Chain, type Transport, type Address, type Account, type WalletClient, type TransactionReceipt } from 'viem';
|
|
10
|
+
import type { AgentIdentityConfig, AgentIdentityMetadata } from './identity-types';
|
|
11
|
+
type AgentActions = ReturnType<typeof buildAgentActions>;
|
|
12
|
+
export type AgentCommand = PlainMessage<SlashCommand> & {
|
|
13
|
+
paid?: RouteConfig;
|
|
14
|
+
};
|
|
15
|
+
export type AgentHandler = ReturnType<typeof buildAgentActions>;
|
|
16
|
+
export type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['input'];
|
|
17
|
+
export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['output'];
|
|
18
|
+
export type AgentPayload<T extends keyof AgentEvents<Commands>, Commands extends AgentCommand[] = []> = Parameters<AgentEvents<Commands>[T]>[1];
|
|
19
|
+
type ImageAttachment = {
|
|
20
|
+
type: 'image';
|
|
21
|
+
alt?: string;
|
|
22
|
+
url: string;
|
|
23
|
+
};
|
|
24
|
+
type ChunkedMediaAttachment = {
|
|
25
|
+
type: 'chunked';
|
|
26
|
+
data: Blob;
|
|
27
|
+
width?: number;
|
|
28
|
+
height?: number;
|
|
29
|
+
filename: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'chunked';
|
|
32
|
+
data: Uint8Array;
|
|
33
|
+
width?: number;
|
|
34
|
+
height?: number;
|
|
35
|
+
filename: string;
|
|
36
|
+
mimetype: string;
|
|
37
|
+
};
|
|
38
|
+
type LinkAttachment = {
|
|
39
|
+
type: 'link';
|
|
40
|
+
url: string;
|
|
41
|
+
title?: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
image?: {
|
|
44
|
+
width: number;
|
|
45
|
+
height: number;
|
|
46
|
+
url: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
type MiniAppAttachment = {
|
|
50
|
+
type: 'miniapp';
|
|
51
|
+
url: string;
|
|
52
|
+
};
|
|
53
|
+
type TickerAttachment = {
|
|
54
|
+
type: 'ticker';
|
|
55
|
+
address: string;
|
|
56
|
+
chainId: string;
|
|
57
|
+
};
|
|
58
|
+
export type MessageOpts = {
|
|
59
|
+
threadId?: string;
|
|
60
|
+
replyId?: string;
|
|
61
|
+
ephemeral?: boolean;
|
|
62
|
+
};
|
|
63
|
+
export type PostMessageOpts = MessageOpts & {
|
|
64
|
+
mentions?: Array<{
|
|
65
|
+
userId: string;
|
|
66
|
+
displayName: string;
|
|
67
|
+
} | {
|
|
68
|
+
roleId: number;
|
|
69
|
+
} | {
|
|
70
|
+
atChannel: true;
|
|
71
|
+
}>;
|
|
72
|
+
attachments?: Array<ImageAttachment | ChunkedMediaAttachment | LinkAttachment | TickerAttachment | MiniAppAttachment>;
|
|
73
|
+
};
|
|
74
|
+
export type DecryptedInteractionResponse = {
|
|
75
|
+
recipient: Uint8Array;
|
|
76
|
+
payload: PlainMessage<InteractionResponsePayload>;
|
|
77
|
+
};
|
|
78
|
+
export type AgentEvents<Commands extends AgentCommand[] = []> = {
|
|
79
|
+
message: (handler: AgentActions, event: BasePayload & {
|
|
80
|
+
/** The decrypted message content */
|
|
81
|
+
message: string;
|
|
82
|
+
/** In case of a reply, that's the eventId of the message that got replied */
|
|
83
|
+
replyId: string | undefined;
|
|
84
|
+
/** In case of a thread, that's the thread id where the message belongs to */
|
|
85
|
+
threadId: string | undefined;
|
|
86
|
+
/** Users mentioned in the message */
|
|
87
|
+
mentions: Pick<ChannelMessage_Post_Mention, 'userId' | 'displayName'>[];
|
|
88
|
+
/** Convenience flag to check if the agent was mentioned */
|
|
89
|
+
isMentioned: boolean;
|
|
90
|
+
}) => void | Promise<void>;
|
|
91
|
+
redaction: (handler: AgentActions, event: BasePayload & {
|
|
92
|
+
/** The event ID that got redacted */
|
|
93
|
+
refEventId: string;
|
|
94
|
+
}) => void | Promise<void>;
|
|
95
|
+
messageEdit: (handler: AgentActions, event: BasePayload & {
|
|
96
|
+
/** The event ID of the message that got edited */
|
|
97
|
+
refEventId: string;
|
|
98
|
+
/** New message */
|
|
99
|
+
message: string;
|
|
100
|
+
/** In case of a reply, that's the eventId of the message that got replied */
|
|
101
|
+
replyId: string | undefined;
|
|
102
|
+
/** In case of a thread, that's the thread id where the message belongs to */
|
|
103
|
+
threadId: string | undefined;
|
|
104
|
+
/** Users mentioned in the message */
|
|
105
|
+
mentions: Pick<ChannelMessage_Post_Mention, 'userId' | 'displayName'>[];
|
|
106
|
+
/** Convenience flag to check if the agent was mentioned */
|
|
107
|
+
isMentioned: boolean;
|
|
108
|
+
}) => void | Promise<void>;
|
|
109
|
+
reaction: (handler: AgentActions, event: BasePayload & {
|
|
110
|
+
/** The reaction that was added */
|
|
111
|
+
reaction: string;
|
|
112
|
+
/** The event ID of the message that got reacted to */
|
|
113
|
+
messageId: string;
|
|
114
|
+
/** The user ID of the user that added the reaction */
|
|
115
|
+
userId: string;
|
|
116
|
+
}) => Promise<void> | void;
|
|
117
|
+
eventRevoke: (handler: AgentActions, event: BasePayload & {
|
|
118
|
+
/** The event ID of the message that got revoked */
|
|
119
|
+
refEventId: string;
|
|
120
|
+
}) => Promise<void> | void;
|
|
121
|
+
tip: (handler: AgentActions, event: BasePayload & {
|
|
122
|
+
/** The message ID of the parent of the tip */
|
|
123
|
+
messageId: string;
|
|
124
|
+
/** The address that sent the tip */
|
|
125
|
+
senderAddress: Address;
|
|
126
|
+
/** The address that received the tip */
|
|
127
|
+
receiverAddress: Address;
|
|
128
|
+
/** The user ID that received the tip */
|
|
129
|
+
receiverUserId: string;
|
|
130
|
+
/** The amount of the tip */
|
|
131
|
+
amount: bigint;
|
|
132
|
+
/** The currency of the tip */
|
|
133
|
+
currency: Address;
|
|
134
|
+
}) => Promise<void> | void;
|
|
135
|
+
channelJoin: (handler: AgentActions, event: BasePayload) => Promise<void> | void;
|
|
136
|
+
channelLeave: (handler: AgentActions, event: BasePayload) => Promise<void> | void;
|
|
137
|
+
streamEvent: (handler: AgentActions, event: BasePayload & {
|
|
138
|
+
parsed: ParsedEvent;
|
|
139
|
+
}) => Promise<void> | void;
|
|
140
|
+
slashCommand: (handler: AgentActions, event: BasePayload & {
|
|
141
|
+
/** The slash command that was invoked (without the /) */
|
|
142
|
+
command: Commands[number]['name'];
|
|
143
|
+
/** Arguments passed after the command
|
|
144
|
+
* @example
|
|
145
|
+
* ```
|
|
146
|
+
* /help
|
|
147
|
+
* args: []
|
|
148
|
+
* ```
|
|
149
|
+
* ```
|
|
150
|
+
* /sum 1 2
|
|
151
|
+
* args: ['1', '2']
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
args: string[];
|
|
155
|
+
/** Users mentioned in the command */
|
|
156
|
+
mentions: Pick<ChannelMessage_Post_Mention, 'userId' | 'displayName'>[];
|
|
157
|
+
/** The eventId of the message that got replied */
|
|
158
|
+
replyId: string | undefined;
|
|
159
|
+
/** The thread id where the message belongs to */
|
|
160
|
+
threadId: string | undefined;
|
|
161
|
+
}) => Promise<void> | void;
|
|
162
|
+
rawGmMessage: (handler: AgentActions, event: BasePayload & {
|
|
163
|
+
typeUrl: string;
|
|
164
|
+
message: Uint8Array;
|
|
165
|
+
}) => void | Promise<void>;
|
|
166
|
+
gm: <Schema extends StandardSchemaV1>(handler: AgentActions, event: BasePayload & {
|
|
167
|
+
typeUrl: string;
|
|
168
|
+
schema: Schema;
|
|
169
|
+
data: InferOutput<Schema>;
|
|
170
|
+
}) => void | Promise<void>;
|
|
171
|
+
interactionResponse: (handler: AgentActions, event: BasePayload & {
|
|
172
|
+
/** The interaction response that was received */
|
|
173
|
+
response: DecryptedInteractionResponse;
|
|
174
|
+
threadId: string | undefined;
|
|
175
|
+
}) => void | Promise<void>;
|
|
176
|
+
};
|
|
177
|
+
export type BasePayload = {
|
|
178
|
+
/** The user ID of the user that triggered the event */
|
|
179
|
+
userId: Address;
|
|
180
|
+
/** channelId that the event was triggered in */
|
|
181
|
+
channelId: string;
|
|
182
|
+
/** The ID of the event that triggered */
|
|
183
|
+
eventId: string;
|
|
184
|
+
/** The creation time of the event */
|
|
185
|
+
createdAt: Date;
|
|
186
|
+
/** The raw event payload */
|
|
187
|
+
event: StreamEvent;
|
|
188
|
+
/** Convenience flag to check if the event triggered on a DM channel */
|
|
189
|
+
isDm: boolean;
|
|
190
|
+
/** Convenience flag to check if the event triggered on a GDM channel */
|
|
191
|
+
isGdm: boolean;
|
|
192
|
+
};
|
|
193
|
+
export declare class Agent<Commands extends AgentCommand[] = []> {
|
|
194
|
+
readonly client: ClientV2<AgentActions>;
|
|
195
|
+
readonly appAddress: Address;
|
|
196
|
+
agentUserId: string;
|
|
197
|
+
viem: WalletClient<Transport, Chain, Account>;
|
|
198
|
+
private readonly jwtSecret;
|
|
199
|
+
private currentMessageTags;
|
|
200
|
+
private readonly emitter;
|
|
201
|
+
private readonly slashCommandHandlers;
|
|
202
|
+
private readonly gmTypedHandlers;
|
|
203
|
+
private readonly commands;
|
|
204
|
+
private readonly identityConfig?;
|
|
205
|
+
private readonly eventDedup;
|
|
206
|
+
private readonly paymentConfig?;
|
|
207
|
+
private readonly pendingPayments;
|
|
208
|
+
private readonly paymentCommands;
|
|
209
|
+
constructor(clientV2: ClientV2<AgentActions>, viem: WalletClient<Transport, Chain, Account>, jwtSecretBase64: string, appAddress: Address, commands?: Commands, identityConfig?: AgentIdentityConfig, dedupConfig?: EventDedupConfig, paymentConfig?: FacilitatorConfig);
|
|
210
|
+
start(): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
211
|
+
private jwtMiddleware;
|
|
212
|
+
private webhookHandler;
|
|
213
|
+
private handleEvent;
|
|
214
|
+
private handleChannelMessage;
|
|
215
|
+
private handlePaymentResponse;
|
|
216
|
+
/**
|
|
217
|
+
* get the public device key of the agent
|
|
218
|
+
* @returns the public device key of the agent
|
|
219
|
+
*/
|
|
220
|
+
getUserDevice(): import("@towns-labs/encryption").UserDevice;
|
|
221
|
+
/**
|
|
222
|
+
* Send a message to a stream
|
|
223
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
224
|
+
* @param message - The cleartext of the message
|
|
225
|
+
* @param opts - The options for the message
|
|
226
|
+
*/
|
|
227
|
+
sendMessage(streamId: string, message: string, opts?: PostMessageOpts): Promise<{
|
|
228
|
+
eventId: string;
|
|
229
|
+
prevMiniblockHash: Uint8Array;
|
|
230
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
231
|
+
}>;
|
|
232
|
+
/**
|
|
233
|
+
* Send a reaction to a stream
|
|
234
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
235
|
+
* @param refEventId - The eventId of the event to react to
|
|
236
|
+
* @param reaction - The reaction to send
|
|
237
|
+
*/
|
|
238
|
+
sendReaction(streamId: string, refEventId: string, reaction: string): Promise<{
|
|
239
|
+
eventId: string;
|
|
240
|
+
prevMiniblockHash: Uint8Array;
|
|
241
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
242
|
+
}>;
|
|
243
|
+
/**
|
|
244
|
+
* Remove an specific event from a stream
|
|
245
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
246
|
+
* @param refEventId - The eventId of the event to remove
|
|
247
|
+
*/
|
|
248
|
+
removeEvent(streamId: string, refEventId: string): Promise<{
|
|
249
|
+
eventId: string;
|
|
250
|
+
prevMiniblockHash: Uint8Array;
|
|
251
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
252
|
+
}>;
|
|
253
|
+
/**
|
|
254
|
+
* Edit an specific message from a stream
|
|
255
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
256
|
+
* @param messageId - The eventId of the message to edit
|
|
257
|
+
* @param message - The new message text
|
|
258
|
+
*/
|
|
259
|
+
editMessage(streamId: string, messageId: string, message: string, opts?: PostMessageOpts): Promise<{
|
|
260
|
+
eventId: string;
|
|
261
|
+
prevMiniblockHash: Uint8Array;
|
|
262
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
263
|
+
}>;
|
|
264
|
+
/**
|
|
265
|
+
* Send a GM (generic message) to a stream with schema validation
|
|
266
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
267
|
+
* @param typeUrl - The type URL identifying the message format
|
|
268
|
+
* @param schema - StandardSchema for validation
|
|
269
|
+
* @param data - Data to validate and send
|
|
270
|
+
*/
|
|
271
|
+
sendGM<Schema extends StandardSchemaV1>(streamId: string, typeUrl: string, schema: Schema, data: InferInput<Schema>, opts?: MessageOpts): Promise<{
|
|
272
|
+
eventId: string;
|
|
273
|
+
prevMiniblockHash: Uint8Array;
|
|
274
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
275
|
+
}>;
|
|
276
|
+
/**
|
|
277
|
+
* Send a raw GM (generic message) to a stream without schema validation
|
|
278
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
279
|
+
* @param typeUrl - The type URL identifying the message format
|
|
280
|
+
* @param message - Optional raw message data as bytes
|
|
281
|
+
* @param opts - The options for the message
|
|
282
|
+
*/
|
|
283
|
+
sendRawGM(streamId: string, typeUrl: string, message: Uint8Array, opts?: MessageOpts): Promise<{
|
|
284
|
+
eventId: string;
|
|
285
|
+
prevMiniblockHash: Uint8Array;
|
|
286
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
287
|
+
}>;
|
|
288
|
+
/**
|
|
289
|
+
* Send an interaction request to a stream
|
|
290
|
+
* @param streamId - Id of the stream. Usually channelId or userId
|
|
291
|
+
* @param contentOrPayload - The interaction request content (old format) or flattened payload (new format)
|
|
292
|
+
* @param recipientOrOpts - Recipient bytes (old format) or message options (new format)
|
|
293
|
+
* @param opts - The options for the interaction request (old format only)
|
|
294
|
+
* @returns The eventId of the interaction request
|
|
295
|
+
*/
|
|
296
|
+
sendInteractionRequest(streamId: string, content: PlainMessage<InteractionRequestPayload['content']>, recipient?: Uint8Array, opts?: MessageOpts): Promise<{
|
|
297
|
+
eventId: string;
|
|
298
|
+
}>;
|
|
299
|
+
sendInteractionRequest(streamId: string, payload: FlattenedInteractionRequest, opts?: MessageOpts): Promise<{
|
|
300
|
+
eventId: string;
|
|
301
|
+
}>;
|
|
302
|
+
pinMessage(streamId: string, eventId: string, streamEvent: StreamEvent): Promise<{
|
|
303
|
+
eventId: string;
|
|
304
|
+
prevMiniblockHash: Uint8Array;
|
|
305
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
306
|
+
}>;
|
|
307
|
+
unpinMessage(streamId: string, eventId: string): Promise<{
|
|
308
|
+
eventId: string;
|
|
309
|
+
prevMiniblockHash: Uint8Array;
|
|
310
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
311
|
+
}>;
|
|
312
|
+
/** Sends a tip to a user by looking up their smart account.
|
|
313
|
+
* Tip will always get funds from the app account balance.
|
|
314
|
+
* @param params - Tip parameters including userId, amount, messageId, channelId, currency.
|
|
315
|
+
* @returns The transaction hash and event ID
|
|
316
|
+
*/
|
|
317
|
+
sendTip(params: Omit<SendTipMemberParams, 'spaceId' | 'tokenId' | 'currency' | 'receiver'> & {
|
|
318
|
+
currency?: Address;
|
|
319
|
+
userId: Address;
|
|
320
|
+
}): Promise<{
|
|
321
|
+
txHash: string;
|
|
322
|
+
eventId: string;
|
|
323
|
+
}>;
|
|
324
|
+
/**
|
|
325
|
+
* Triggered when someone sends a message.
|
|
326
|
+
* This is triggered for all messages, including direct messages and group messages.
|
|
327
|
+
*/
|
|
328
|
+
onMessage(fn: AgentEvents['message']): import("nanoevents").Unsubscribe;
|
|
329
|
+
onRedaction(fn: AgentEvents['redaction']): import("nanoevents").Unsubscribe;
|
|
330
|
+
/**
|
|
331
|
+
* Triggered when a message gets edited
|
|
332
|
+
*/
|
|
333
|
+
onMessageEdit(fn: AgentEvents['messageEdit']): import("nanoevents").Unsubscribe;
|
|
334
|
+
/**
|
|
335
|
+
* Triggered when someone reacts to a message
|
|
336
|
+
*/
|
|
337
|
+
onReaction(fn: AgentEvents['reaction']): import("nanoevents").Unsubscribe;
|
|
338
|
+
/**
|
|
339
|
+
* Triggered when a message is revoked by a moderator
|
|
340
|
+
*/
|
|
341
|
+
onEventRevoke(fn: AgentEvents['eventRevoke']): import("nanoevents").Unsubscribe;
|
|
342
|
+
/**
|
|
343
|
+
* Triggered when someone tips the agent
|
|
344
|
+
*/
|
|
345
|
+
onTip(fn: AgentEvents['tip']): import("nanoevents").Unsubscribe;
|
|
346
|
+
/**
|
|
347
|
+
* Triggered when someone joins a channel
|
|
348
|
+
*/
|
|
349
|
+
onChannelJoin(fn: AgentEvents['channelJoin']): import("nanoevents").Unsubscribe;
|
|
350
|
+
/**
|
|
351
|
+
* Triggered when someone leaves a channel
|
|
352
|
+
*/
|
|
353
|
+
onChannelLeave(fn: AgentEvents['channelLeave']): import("nanoevents").Unsubscribe;
|
|
354
|
+
onStreamEvent(fn: AgentEvents['streamEvent']): import("nanoevents").Unsubscribe;
|
|
355
|
+
onSlashCommand(command: Commands[number]['name'], fn: AgentEvents<Commands>['slashCommand']): () => void;
|
|
356
|
+
/**
|
|
357
|
+
* Triggered when someone sends a GM (generic message) with type validation using StandardSchema
|
|
358
|
+
* @param typeUrl - The type URL to listen for
|
|
359
|
+
* @param schema - The StandardSchema to validate the message data
|
|
360
|
+
* @param handler - The handler function to call when a message is received
|
|
361
|
+
*/
|
|
362
|
+
onGmMessage<Schema extends StandardSchemaV1>(typeUrl: string, schema: Schema, handler: (handler: AgentActions, event: BasePayload & {
|
|
363
|
+
typeUrl: string;
|
|
364
|
+
data: InferOutput<Schema>;
|
|
365
|
+
}) => void | Promise<void>): () => void;
|
|
366
|
+
onRawGmMessage(handler: AgentEvents['rawGmMessage']): import("nanoevents").Unsubscribe;
|
|
367
|
+
/**
|
|
368
|
+
* Triggered when someone sends an interaction response
|
|
369
|
+
* @param fn - The handler function to call when an interaction response is received
|
|
370
|
+
*/
|
|
371
|
+
onInteractionResponse(fn: AgentEvents['interactionResponse']): import("nanoevents").Unsubscribe;
|
|
372
|
+
/**
|
|
373
|
+
* Get the stream view for a stream
|
|
374
|
+
* Stream views contain contextual information about the stream (space, channel, etc)
|
|
375
|
+
* Stream views contain member data for all streams - you can iterate over all members in a channel via: `streamView.getMembers().joined.keys()`
|
|
376
|
+
* note: potentially expensive operation because streams can be large, fine to use in small streams
|
|
377
|
+
* @param streamId - The stream ID to get the view for
|
|
378
|
+
* @returns The stream view
|
|
379
|
+
*/
|
|
380
|
+
getStreamView(streamId: string): Promise<import("@towns-labs/sdk").StreamStateView>;
|
|
381
|
+
/**
|
|
382
|
+
* Get the ERC-8004 compliant metadata JSON
|
|
383
|
+
* This should be hosted at /.well-known/agent-metadata.json
|
|
384
|
+
* Fetches metadata from the App Registry and merges with local config
|
|
385
|
+
* @returns The ERC-8004 compliant metadata object or null
|
|
386
|
+
*/
|
|
387
|
+
getIdentityMetadata(): Promise<AgentIdentityMetadata | null>;
|
|
388
|
+
/**
|
|
389
|
+
* Get the tokenURI that would be used for ERC-8004 registration
|
|
390
|
+
* Returns null if no domain is configured
|
|
391
|
+
* @returns The .well-known URL or null
|
|
392
|
+
*/
|
|
393
|
+
getTokenURI(): string | null;
|
|
394
|
+
}
|
|
395
|
+
export declare const makeTownsAgent: <Commands extends AgentCommand[] = []>(appPrivateData: string, jwtSecretBase64: string, opts?: {
|
|
396
|
+
baseRpcUrl?: string;
|
|
397
|
+
commands?: Commands;
|
|
398
|
+
identity?: AgentIdentityConfig;
|
|
399
|
+
dedup?: EventDedupConfig;
|
|
400
|
+
paymentConfig?: FacilitatorConfig;
|
|
401
|
+
} & Partial<Omit<CreateTownsClientParams, "env" | "encryptionDevice">>) => Promise<Agent<Commands>>;
|
|
402
|
+
declare const buildAgentActions: (client: ClientV2, viem: WalletClient<Transport, Chain, Account>, spaceDapp: SpaceDapp, appAddress: Address) => {
|
|
403
|
+
sendMessage: (streamId: string, message: string, opts?: PostMessageOpts, tags?: PlainMessage<Tags>) => Promise<{
|
|
404
|
+
eventId: string;
|
|
405
|
+
prevMiniblockHash: Uint8Array;
|
|
406
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
407
|
+
}>;
|
|
408
|
+
editMessage: (streamId: string, messageId: string, message: string, opts?: PostMessageOpts, tags?: PlainMessage<Tags>) => Promise<{
|
|
409
|
+
eventId: string;
|
|
410
|
+
prevMiniblockHash: Uint8Array;
|
|
411
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
412
|
+
}>;
|
|
413
|
+
sendReaction: (streamId: string, messageId: string, reaction: string, tags?: PlainMessage<Tags>) => Promise<{
|
|
414
|
+
eventId: string;
|
|
415
|
+
prevMiniblockHash: Uint8Array;
|
|
416
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
417
|
+
}>;
|
|
418
|
+
sendInteractionRequest: {
|
|
419
|
+
(streamId: string, content: PlainMessage<InteractionRequestPayload["content"]>, recipient?: Uint8Array, opts?: MessageOpts, tags?: PlainMessage<Tags>): Promise<{
|
|
420
|
+
eventId: string;
|
|
421
|
+
}>;
|
|
422
|
+
(streamId: string, payload: FlattenedInteractionRequest, opts?: MessageOpts, tags?: PlainMessage<Tags>): Promise<{
|
|
423
|
+
eventId: string;
|
|
424
|
+
}>;
|
|
425
|
+
};
|
|
426
|
+
sendGM: <Schema extends StandardSchemaV1>(streamId: string, typeUrl: string, schema: Schema, data: InferInput<Schema>, opts?: MessageOpts, tags?: PlainMessage<Tags>) => ReturnType<({ streamId, payload, tags, ephemeral, }: {
|
|
427
|
+
streamId: string;
|
|
428
|
+
payload: ChannelMessage;
|
|
429
|
+
tags?: PlainMessage<Tags>;
|
|
430
|
+
ephemeral?: boolean;
|
|
431
|
+
}) => Promise<{
|
|
432
|
+
eventId: string;
|
|
433
|
+
prevMiniblockHash: Uint8Array;
|
|
434
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
435
|
+
}>>;
|
|
436
|
+
sendRawGM: (streamId: string, typeUrl: string, message: Uint8Array, opts?: MessageOpts, tags?: PlainMessage<Tags>) => Promise<{
|
|
437
|
+
eventId: string;
|
|
438
|
+
prevMiniblockHash: Uint8Array;
|
|
439
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
440
|
+
}>;
|
|
441
|
+
removeEvent: (streamId: string, messageId: string, tags?: PlainMessage<Tags>) => Promise<{
|
|
442
|
+
eventId: string;
|
|
443
|
+
prevMiniblockHash: Uint8Array;
|
|
444
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
445
|
+
}>;
|
|
446
|
+
sendKeySolicitation: (streamId: string, sessionIds: string[]) => Promise<{
|
|
447
|
+
eventId: string;
|
|
448
|
+
prevMiniblockHash: Uint8Array;
|
|
449
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
450
|
+
}>;
|
|
451
|
+
uploadDeviceKeys: () => Promise<{
|
|
452
|
+
eventId: string;
|
|
453
|
+
prevMiniblockHash: Uint8Array;
|
|
454
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
455
|
+
}>;
|
|
456
|
+
pinMessage: (streamId: string, eventId: string, streamEvent: StreamEvent) => Promise<{
|
|
457
|
+
eventId: string;
|
|
458
|
+
prevMiniblockHash: Uint8Array;
|
|
459
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
460
|
+
}>;
|
|
461
|
+
unpinMessage: (streamId: string, eventId: string) => Promise<{
|
|
462
|
+
eventId: string;
|
|
463
|
+
prevMiniblockHash: Uint8Array;
|
|
464
|
+
envelope: import("@towns-labs/proto").Envelope;
|
|
465
|
+
}>;
|
|
466
|
+
getChannelSettings: (channelId: string) => Promise<import("@towns-labs/sdk").ParsedChannelProperties>;
|
|
467
|
+
sendBlockchainTransaction: (chainId: number, receipt: TransactionReceipt, content?: PlainMessage<BlockchainTransaction>["content"], tags?: PlainMessage<Tags>) => Promise<{
|
|
468
|
+
txHash: string;
|
|
469
|
+
eventId: string;
|
|
470
|
+
}>;
|
|
471
|
+
sendTip: (params: Omit<SendTipMemberParams, "spaceId" | "tokenId" | "currency" | "receiver"> & {
|
|
472
|
+
currency?: Address;
|
|
473
|
+
userId: Address;
|
|
474
|
+
}, tags?: PlainMessage<Tags>) => Promise<{
|
|
475
|
+
txHash: string;
|
|
476
|
+
eventId: string;
|
|
477
|
+
}>;
|
|
478
|
+
};
|
|
479
|
+
export {};
|
|
480
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|