@xmtp/agent-sdk 1.1.3 → 1.1.5
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 +17 -6
- package/dist/core/MessageContext.d.ts +3 -4
- package/dist/core/MessageContext.js +3 -0
- package/dist/core/MessageContext.js.map +1 -1
- package/dist/core/filter.d.ts +7 -12
- package/dist/core/filter.js.map +1 -1
- package/dist/demo.js +8 -0
- package/dist/demo.js.map +1 -1
- package/dist/utils/TestUtil.d.ts +30 -0
- package/dist/utils/TestUtil.js +68 -0
- package/dist/utils/TestUtil.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -87,12 +87,13 @@ Subscribe only to what you need using Node’s `EventEmitter` interface. Events
|
|
|
87
87
|
|
|
88
88
|
**Message Events**
|
|
89
89
|
|
|
90
|
-
- `attachment` –
|
|
91
|
-
- `message` – all
|
|
92
|
-
- `
|
|
93
|
-
- `
|
|
94
|
-
- `
|
|
95
|
-
- `
|
|
90
|
+
- `attachment` – an incoming [remote attachment message](https://docs.xmtp.org/chat-apps/content-types/attachments)
|
|
91
|
+
- `message` – all messages that are not having a [custom content type](https://docs.xmtp.org/agents/content-types/content-types#custom-content-types)
|
|
92
|
+
- `group-update` – an incoming [group update](https://docs.xmtp.org/agents/content-types/group-updates#listen-for-group-updates) (like name change, member update, etc.)
|
|
93
|
+
- `reaction` – an incoming [reaction message](https://docs.xmtp.org/agents/content-types/reactions)
|
|
94
|
+
- `reply` – an incoming [reply message](https://docs.xmtp.org/agents/content-types/replies)
|
|
95
|
+
- `text` – an incoming [text message](https://docs.xmtp.org/agents/content-types/content-types#text-content-type)
|
|
96
|
+
- `unknownMessage` – a message event that does not correspond to any of the pre-implemented event types
|
|
96
97
|
|
|
97
98
|
**Conversation Events**
|
|
98
99
|
|
|
@@ -353,6 +354,16 @@ const agent = await Agent.create(signer, {
|
|
|
353
354
|
});
|
|
354
355
|
```
|
|
355
356
|
|
|
357
|
+
## LibXMTP Version
|
|
358
|
+
|
|
359
|
+
[LibXMTP](https://github.com/xmtp/libxmtp/) is a shared library encapsulating the core functionality of the XMTP messaging protocol, such as cryptography, networking, and language bindings. This version of the Agent SDK uses:
|
|
360
|
+
|
|
361
|
+
| XMTP Node SDK Version | LibXMTP Version |
|
|
362
|
+
| --------------------- | --------------- |
|
|
363
|
+
| 4.2.2 | 1.5.3 |
|
|
364
|
+
|
|
365
|
+
To verify which LibXMTP version is installed, run `npm why @xmtp/node-bindings` after installing the Agent SDK.
|
|
366
|
+
|
|
356
367
|
## Debugging
|
|
357
368
|
|
|
358
369
|
- [Debug an agent](https://docs.xmtp.org/agents/debug-agents)
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
+
import type { ContentCodec } from "@xmtp/content-type-primitives";
|
|
1
2
|
import { type Reaction, type ReactionCodec } from "@xmtp/content-type-reaction";
|
|
2
3
|
import type { RemoteAttachmentCodec } from "@xmtp/content-type-remote-attachment";
|
|
3
4
|
import { type ReplyCodec } from "@xmtp/content-type-reply";
|
|
4
5
|
import { type TextCodec } from "@xmtp/content-type-text";
|
|
5
|
-
import type
|
|
6
|
+
import { type DecodedMessageWithContent } from "../core/filter.js";
|
|
6
7
|
import type { AgentBaseContext } from "./Agent.js";
|
|
7
8
|
import { ConversationContext } from "./ConversationContext.js";
|
|
8
|
-
export type DecodedMessageWithContent<ContentTypes = unknown> = DecodedMessage<ContentTypes> & {
|
|
9
|
-
content: ContentTypes;
|
|
10
|
-
};
|
|
11
9
|
export type MessageContextParams<ContentTypes = unknown> = Omit<AgentBaseContext<ContentTypes>, "message"> & {
|
|
12
10
|
message: DecodedMessageWithContent<ContentTypes>;
|
|
13
11
|
};
|
|
14
12
|
export declare class MessageContext<ContentTypes = unknown> extends ConversationContext<ContentTypes> {
|
|
15
13
|
#private;
|
|
16
14
|
constructor({ message, conversation, client, }: MessageContextParams<ContentTypes>);
|
|
15
|
+
usesCodec<T extends ContentCodec>(codecClass: new () => T): this is MessageContext<ReturnType<T["decode"]>>;
|
|
17
16
|
isText(): this is MessageContext<ReturnType<TextCodec["decode"]>>;
|
|
18
17
|
isReply(): this is MessageContext<ReturnType<ReplyCodec["decode"]>>;
|
|
19
18
|
isReaction(): this is MessageContext<ReturnType<ReactionCodec["decode"]>>;
|
|
@@ -9,6 +9,9 @@ export class MessageContext extends ConversationContext {
|
|
|
9
9
|
super({ conversation, client });
|
|
10
10
|
this.#message = message;
|
|
11
11
|
}
|
|
12
|
+
usesCodec(codecClass) {
|
|
13
|
+
return (this.#message.contentType?.sameAs(new codecClass().contentType) || false);
|
|
14
|
+
}
|
|
12
15
|
isText() {
|
|
13
16
|
return filter.isText(this.#message);
|
|
14
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageContext.js","sourceRoot":"","sources":["../../src/core/MessageContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageContext.js","sourceRoot":"","sources":["../../src/core/MessageContext.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,GAGpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,gBAAgB,GAGjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAkB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAkC,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAS/D,MAAM,OAAO,cAEX,SAAQ,mBAAiC;IACzC,QAAQ,CAA0C;IAElD,YAAY,EACV,OAAO,EACP,YAAY,EACZ,MAAM,GAC6B;QACnC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,SAAS,CACP,UAAuB;QAEvB,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,CACzE,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,UAAU;QACR,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB;QAGhB,OAAO,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,SAA6B,SAAS;QACxE,MAAM,QAAQ,GAAa;YACzB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa;YAC7C,MAAM;YACN,OAAO;SACR,CAAC;QACF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAU;YACnB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa;YAC7C,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,IAAI;SACd,CAAC;QACF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,aAAa;SAC5B,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
|
package/dist/core/filter.d.ts
CHANGED
|
@@ -4,11 +4,12 @@ import { type RemoteAttachmentCodec } from "@xmtp/content-type-remote-attachment
|
|
|
4
4
|
import { type ReplyCodec } from "@xmtp/content-type-reply";
|
|
5
5
|
import { type TextCodec } from "@xmtp/content-type-text";
|
|
6
6
|
import { Dm, Group, type Client, type Conversation, type DecodedMessage } from "@xmtp/node-sdk";
|
|
7
|
+
export type DecodedMessageWithContent<ContentTypes = unknown> = DecodedMessage<ContentTypes> & {
|
|
8
|
+
content: ContentTypes;
|
|
9
|
+
};
|
|
7
10
|
export declare const filter: {
|
|
8
11
|
fromSelf: <ContentTypes>(message: DecodedMessage<ContentTypes>, client: Client<ContentTypes>) => boolean;
|
|
9
|
-
hasContent: <ContentTypes>(message: DecodedMessage<ContentTypes>) => message is
|
|
10
|
-
content: NonNullable<ContentTypes>;
|
|
11
|
-
};
|
|
12
|
+
hasContent: <ContentTypes>(message: DecodedMessage<ContentTypes>) => message is DecodedMessageWithContent<ContentTypes>;
|
|
12
13
|
isDM: (conversation: Conversation) => conversation is Dm;
|
|
13
14
|
isGroup: (conversation: Conversation) => conversation is Group;
|
|
14
15
|
isGroupAdmin: (conversation: Conversation, message: DecodedMessage) => boolean;
|
|
@@ -25,16 +26,12 @@ export declare const filter: {
|
|
|
25
26
|
isReply: (message: DecodedMessage) => message is DecodedMessage & {
|
|
26
27
|
content: ReturnType<ReplyCodec["decode"]>;
|
|
27
28
|
};
|
|
28
|
-
isText: (message: DecodedMessage) => message is
|
|
29
|
-
content: ReturnType<TextCodec["decode"]>;
|
|
30
|
-
};
|
|
29
|
+
isText: (message: DecodedMessage) => message is DecodedMessageWithContent<ReturnType<TextCodec["decode"]>>;
|
|
31
30
|
isTextReply: (message: DecodedMessage) => boolean;
|
|
32
31
|
};
|
|
33
32
|
export declare const f: {
|
|
34
33
|
fromSelf: <ContentTypes>(message: DecodedMessage<ContentTypes>, client: Client<ContentTypes>) => boolean;
|
|
35
|
-
hasContent: <ContentTypes>(message: DecodedMessage<ContentTypes>) => message is
|
|
36
|
-
content: NonNullable<ContentTypes>;
|
|
37
|
-
};
|
|
34
|
+
hasContent: <ContentTypes>(message: DecodedMessage<ContentTypes>) => message is DecodedMessageWithContent<ContentTypes>;
|
|
38
35
|
isDM: (conversation: Conversation) => conversation is Dm;
|
|
39
36
|
isGroup: (conversation: Conversation) => conversation is Group;
|
|
40
37
|
isGroupAdmin: (conversation: Conversation, message: DecodedMessage) => boolean;
|
|
@@ -51,8 +48,6 @@ export declare const f: {
|
|
|
51
48
|
isReply: (message: DecodedMessage) => message is DecodedMessage & {
|
|
52
49
|
content: ReturnType<ReplyCodec["decode"]>;
|
|
53
50
|
};
|
|
54
|
-
isText: (message: DecodedMessage) => message is
|
|
55
|
-
content: ReturnType<TextCodec["decode"]>;
|
|
56
|
-
};
|
|
51
|
+
isText: (message: DecodedMessage) => message is DecodedMessageWithContent<ReturnType<TextCodec["decode"]>>;
|
|
57
52
|
isTextReply: (message: DecodedMessage) => boolean;
|
|
58
53
|
};
|
package/dist/core/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/core/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,2BAA2B,GAE5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAkB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACL,EAAE,EACF,KAAK,GAIN,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/core/filter.ts"],"names":[],"mappings":"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"}
|
package/dist/demo.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadEnvFile } from "node:process";
|
|
2
|
+
import { TextCodec } from "@xmtp/content-type-text";
|
|
2
3
|
import { Agent, AgentError } from "./core/index.js";
|
|
3
4
|
import { getTestUrl } from "./debug/log.js";
|
|
4
5
|
import { CommandRouter } from "./middleware/CommandRouter.js";
|
|
@@ -52,6 +53,13 @@ agent.on("start", (ctx) => {
|
|
|
52
53
|
agent.on("stop", (ctx) => {
|
|
53
54
|
console.log("Agent stopped", ctx);
|
|
54
55
|
});
|
|
56
|
+
agent.on("unknownMessage", (ctx) => {
|
|
57
|
+
// Narrow down by codec
|
|
58
|
+
if (ctx.usesCodec(TextCodec)) {
|
|
59
|
+
const content = ctx.message.content;
|
|
60
|
+
console.log(`Text content: ${content.toUpperCase()}`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
55
63
|
await agent.start();
|
|
56
64
|
console.log("Agent has started.");
|
|
57
65
|
const resolveName = createNameResolver(process.env.WEB3BIO_API_KEY);
|
package/dist/demo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE1D,IAAI,CAAC;IACH,WAAW,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAChD,CAAC;AAAC,MAAM,CAAC,CAAA,CAAC;AAEV,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe;IACvC,CAAC,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE;IAC7B,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE;QAC7C,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AAEP,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACvC,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AAE/B,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;IAC7B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7B,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,EAAE;IACtC,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;AACH,CAAC,CAAC;AAEF,KAAK,CAAC,EAAE,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAEzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE;IACjC,uBAAuB;IACvB,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;AACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAElC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACpE,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { GroupUpdated } from "@xmtp/content-type-group-updated";
|
|
2
|
+
import type { Reaction } from "@xmtp/content-type-reaction";
|
|
3
|
+
import type { RemoteAttachment } from "@xmtp/content-type-remote-attachment";
|
|
4
|
+
import type { Reply } from "@xmtp/content-type-reply";
|
|
5
|
+
import type { Client, Conversation, DecodedMessage } from "@xmtp/node-sdk";
|
|
6
|
+
import type { Mock } from "vitest";
|
|
7
|
+
import { Agent } from "../core/Agent.js";
|
|
8
|
+
import type { DecodedMessageWithContent } from "../core/filter.js";
|
|
9
|
+
export type CurrentClientTypes = string | Reaction | Reply | RemoteAttachment | GroupUpdated;
|
|
10
|
+
export declare const createMockMessage: <ContentType>(overrides: Partial<DecodedMessage> & {
|
|
11
|
+
content: ContentType;
|
|
12
|
+
}) => DecodedMessageWithContent<ContentType>;
|
|
13
|
+
export declare const makeAgent: () => {
|
|
14
|
+
agent: Agent<string | import("@xmtp/proto/ts/dist/types/mls/message_contents/transcript_messages.pb.js").GroupUpdated>;
|
|
15
|
+
mockClient: Client<string | import("@xmtp/proto/ts/dist/types/mls/message_contents/transcript_messages.pb.js").GroupUpdated> & {
|
|
16
|
+
conversations: {
|
|
17
|
+
stream: Mock;
|
|
18
|
+
streamAllMessages: Mock;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export declare const mockClient: Client & {
|
|
23
|
+
conversations: {
|
|
24
|
+
stream: Mock;
|
|
25
|
+
streamAllMessages: Mock;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export declare const createMockStreamWithCallbacks: (messages: DecodedMessage[]) => Mock<(...args: any[]) => any>;
|
|
29
|
+
export declare const createMockConversationStreamWithCallbacks: (conversations: Conversation[]) => Mock<(...args: any[]) => any>;
|
|
30
|
+
export declare const flushMicrotasks: () => Promise<void>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ContentTypeText } from "@xmtp/content-type-text";
|
|
2
|
+
import { Agent } from "../core/Agent.js";
|
|
3
|
+
export const createMockMessage = (overrides) => {
|
|
4
|
+
const { content, ...rest } = overrides;
|
|
5
|
+
return {
|
|
6
|
+
id: "mock-message-id",
|
|
7
|
+
conversationId: "test-conversation-id",
|
|
8
|
+
senderInboxId: "sender-inbox-id",
|
|
9
|
+
contentType: ContentTypeText,
|
|
10
|
+
...rest,
|
|
11
|
+
content,
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export const makeAgent = () => {
|
|
15
|
+
return { agent: new Agent({ client: mockClient }), mockClient };
|
|
16
|
+
};
|
|
17
|
+
export const mockClient = {
|
|
18
|
+
inboxId: "test-inbox-id",
|
|
19
|
+
conversations: {
|
|
20
|
+
sync: vi.fn().mockResolvedValue(undefined),
|
|
21
|
+
stream: vi.fn().mockResolvedValue(undefined),
|
|
22
|
+
streamAllMessages: vi.fn(),
|
|
23
|
+
getConversationById: vi.fn().mockResolvedValue({
|
|
24
|
+
send: vi.fn().mockResolvedValue(undefined),
|
|
25
|
+
}),
|
|
26
|
+
},
|
|
27
|
+
preferences: {
|
|
28
|
+
inboxStateFromInboxIds: vi.fn(),
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export const createMockStreamWithCallbacks = (messages) => {
|
|
32
|
+
const mockStream = {
|
|
33
|
+
end: vi.fn().mockResolvedValue(undefined),
|
|
34
|
+
[Symbol.asyncIterator]: vi.fn(),
|
|
35
|
+
};
|
|
36
|
+
return vi
|
|
37
|
+
.fn()
|
|
38
|
+
.mockImplementation((options) => {
|
|
39
|
+
// Simulate async message delivery
|
|
40
|
+
queueMicrotask(() => {
|
|
41
|
+
messages.forEach((message) => {
|
|
42
|
+
options.onValue(message);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
return Promise.resolve(mockStream);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
export const createMockConversationStreamWithCallbacks = (conversations) => {
|
|
49
|
+
const mockStream = {
|
|
50
|
+
end: vi.fn().mockResolvedValue(undefined),
|
|
51
|
+
[Symbol.asyncIterator]: vi.fn(),
|
|
52
|
+
};
|
|
53
|
+
return vi
|
|
54
|
+
.fn()
|
|
55
|
+
.mockImplementation((options) => {
|
|
56
|
+
// Simulate async conversation delivery
|
|
57
|
+
queueMicrotask(() => {
|
|
58
|
+
conversations.forEach((conversation) => {
|
|
59
|
+
options.onValue(conversation);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return Promise.resolve(mockStream);
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
export const flushMicrotasks = async () => {
|
|
66
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=TestUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestUtil.js","sourceRoot":"","sources":["../../src/utils/TestUtil.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"@xmtp/content-type-remote-attachment": "^2.0.2",
|
|
9
9
|
"@xmtp/content-type-reply": "^2.0.2",
|
|
10
10
|
"@xmtp/content-type-text": "^2.0.2",
|
|
11
|
-
"@xmtp/node-sdk": "^4.2.
|
|
11
|
+
"@xmtp/node-sdk": "^4.2.2",
|
|
12
12
|
"uint8arrays": "^5.1.0",
|
|
13
13
|
"viem": "^2.37.6"
|
|
14
14
|
},
|
|
@@ -89,5 +89,5 @@
|
|
|
89
89
|
"typecheck": "tsc --noEmit"
|
|
90
90
|
},
|
|
91
91
|
"type": "module",
|
|
92
|
-
"version": "1.1.
|
|
92
|
+
"version": "1.1.5"
|
|
93
93
|
}
|