@zhin.js/testing 1.0.7 → 1.0.8

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.
@@ -5,10 +5,31 @@ import type { MiddlewareDefinition } from 'zhin.js/middleware';
5
5
  import { type AgentToolDefinition, type ToolExecutionContext, type ToolInvocationOrigin, type ToolInvocationPolicy, type ToolQuestionPort } from '@zhin.js/tool';
6
6
  import { type OperationClientPort } from 'zhin.js';
7
7
  import type { FakePlugin } from './fake-plugin.js';
8
- /** Inbound message with recorded replies. */
8
+ export interface FakeSentDelivery {
9
+ readonly target: {
10
+ readonly kind: 'private' | 'group' | 'channel';
11
+ readonly id: string;
12
+ readonly parent?: {
13
+ readonly kind: 'private' | 'group' | 'channel';
14
+ readonly id: string;
15
+ };
16
+ readonly threadId?: string;
17
+ };
18
+ readonly content: unknown;
19
+ }
20
+ /** Inbound message with recorded replies and targeted sends. */
9
21
  export interface FakeMessage extends CommandMessage {
10
- /** Everything passed to `$reply`, in order. */
22
+ /** Everything passed to `$reply`, `$sendTo`, `$replyToPrivate`, `$replyToGroup`, or `$replyToChannel`, in order. */
11
23
  readonly replies: unknown[];
24
+ /** Targeted sends invoked via `$sendTo`, `$replyToPrivate`, `$replyToGroup`, or `$replyToChannel`. */
25
+ readonly sent: FakeSentDelivery[];
26
+ $sendTo(conversation: FakeSentDelivery['target'], content: unknown): Promise<string>;
27
+ $replyToPrivate(content: unknown, from?: boolean | {
28
+ readonly kind: 'group' | 'channel';
29
+ readonly id: string;
30
+ }): Promise<string>;
31
+ $replyToGroup(groupIdOrContent: string | unknown, content?: unknown): Promise<string>;
32
+ $replyToChannel(channelIdOrContent: string | unknown, guildId?: string, content?: unknown, threadId?: string): Promise<string>;
12
33
  }
13
34
  export interface FakeMessageInit {
14
35
  readonly locale?: Locale;
@@ -24,6 +45,27 @@ export interface FakeMessageInit {
24
45
  readonly $client?: unknown;
25
46
  }
26
47
  export declare function createFakeMessage(init?: FakeMessageInit): FakeMessage;
48
+ export type FakeInteraction = NonNullable<CommandContext['interaction']> & {
49
+ /** Every interaction request presented via `ask`, `sequence`, `confirm`, or `select`, in order. */
50
+ readonly prompts: Parameters<NonNullable<CommandContext['interaction']>['ask']>[0][];
51
+ /** Append additional scripted answers to the queue. */
52
+ enqueue(...answers: unknown[]): void;
53
+ /** Convenience helper for confirm requests. */
54
+ confirm(title: string, defaultValue?: boolean): Promise<boolean>;
55
+ /** Convenience helper for select requests. */
56
+ select<V = string>(title: string, options: readonly (V | {
57
+ readonly label: string;
58
+ readonly value: V;
59
+ })[]): Promise<V>;
60
+ };
61
+ export interface FakeInteractionOptions {
62
+ readonly answers?: readonly unknown[];
63
+ }
64
+ /**
65
+ * Create a scripted `UserInteraction` double for unit-testing commands and handlers that use
66
+ * `interaction.ask()`, `interaction.sequence()`, `interaction.confirm()`, or `interaction.select()`.
67
+ */
68
+ export declare function createFakeInteraction(init?: readonly unknown[] | FakeInteractionOptions): FakeInteraction;
27
69
  export interface RunCommandOptions<TInput extends CommandMessage = FakeMessage> {
28
70
  readonly locale?: Locale;
29
71
  readonly formatCommand?: CommandContext['formatCommand'];
@@ -1 +1 @@
1
- {"version":3,"file":"fake-runners.d.ts","sourceRoot":"","sources":["../src/fake-runners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EACV,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EACzE,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EACS,oBAAoB,EACxC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAC9E,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EACjD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,6CAA6C;AAC7C,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,eAAoB,GAAG,WAAW,CAczE;AAED,MAAM,WAAW,iBAAiB,CAAC,MAAM,SAAS,cAAc,GAAG,WAAW;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IACrD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAChC;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,SAAS,cAAc,GAAG,WAAW,EACvF,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,OAAO,GAAE,iBAAiB,CAAC,MAAM,CAAM,GACtC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAqBrD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,cAAc,GAAG,WAAW,EAC5F,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,UAAU,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3E,OAAO,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAClC,OAAO,CAAC,OAAO,CAAC,CAGlB;AAcD,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,oGAAoG;AACpG,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAC/D,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,UAAU,EAAE,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,EACrE,KAAK,GAAE,MAAsC,GAC5C,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,gFAAgF;AAChF,wBAAsB,UAAU,CAAC,OAAO,EACtC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,4GAA4G;IAC5G,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,oBAAoB,CAWnF;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EACxF,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,OAAO,GAAE,cAAmB,GAC3B,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAgCzC;AAED;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,EAClF,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAChF,KAAK,CAAC,EAAE,OAAO,EACf,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CASlB"}
1
+ {"version":3,"file":"fake-runners.d.ts","sourceRoot":"","sources":["../src/fake-runners.ts"],"names":[],"mappings":"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"}
@@ -4,17 +4,112 @@ import { readOperationSession } from 'zhin.js';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  export function createFakeMessage(init = {}) {
6
6
  const replies = [];
7
+ const sent = [];
7
8
  const conversation = {
8
9
  endpoint: { id: 'test', adapter: 'test' }, kind: 'group', id: 'test-group', ...init.conversation,
9
10
  };
11
+ const sender = init.sender ?? { id: 'test-user', name: 'Tester', roles: [] };
12
+ const recordSend = (target, content) => {
13
+ replies.push(content);
14
+ sent.push({ target, content });
15
+ return `reply-${replies.length}`;
16
+ };
10
17
  return {
11
18
  conversation, content: init.content ?? '', locale: resolveLocale(init.locale),
12
- sender: init.sender ?? { id: 'test-user', name: 'Tester', roles: [] },
19
+ sender,
13
20
  ...(init.id === undefined ? {} : { id: init.id }),
14
21
  ...(init.metadata === undefined ? {} : { metadata: init.metadata }),
15
22
  ...(init.$client === undefined ? {} : { $client: init.$client }),
16
23
  replies,
24
+ sent,
17
25
  async $reply(content) { replies.push(content); return `reply-${replies.length}`; },
26
+ async $sendTo(target, content) {
27
+ return recordSend(target, content);
28
+ },
29
+ async $replyToPrivate(content, from) {
30
+ let parent;
31
+ if (from === true && (conversation.kind === 'group' || conversation.kind === 'channel')) {
32
+ parent = { kind: conversation.kind, id: conversation.id };
33
+ }
34
+ else if (from != null && typeof from === 'object') {
35
+ parent = from;
36
+ }
37
+ return recordSend({
38
+ kind: 'private',
39
+ id: sender.id,
40
+ ...(parent ? { parent } : {}),
41
+ }, content);
42
+ },
43
+ async $replyToGroup(groupIdOrContent, maybeContent) {
44
+ if (maybeContent === undefined) {
45
+ return recordSend({ kind: 'group', id: conversation.id }, groupIdOrContent);
46
+ }
47
+ return recordSend({ kind: 'group', id: String(groupIdOrContent) }, maybeContent);
48
+ },
49
+ async $replyToChannel(channelIdOrContent, guildId, content, threadId) {
50
+ if (guildId === undefined && content === undefined) {
51
+ return recordSend({ kind: 'channel', id: conversation.id }, channelIdOrContent);
52
+ }
53
+ return recordSend({
54
+ kind: 'channel',
55
+ id: String(channelIdOrContent),
56
+ ...(guildId ? { parent: { kind: 'channel', id: guildId } } : {}),
57
+ ...(threadId ? { threadId } : {}),
58
+ }, content);
59
+ },
60
+ };
61
+ }
62
+ /**
63
+ * Create a scripted `UserInteraction` double for unit-testing commands and handlers that use
64
+ * `interaction.ask()`, `interaction.sequence()`, `interaction.confirm()`, or `interaction.select()`.
65
+ */
66
+ export function createFakeInteraction(init = []) {
67
+ const queue = Array.isArray(init)
68
+ ? [...init]
69
+ : [...init.answers ?? []];
70
+ const prompts = [];
71
+ const ask = (async (request) => {
72
+ prompts.push(request);
73
+ if (queue.length > 0) {
74
+ const next = queue.shift();
75
+ return typeof next === 'function' ? await next(request) : next;
76
+ }
77
+ if ('default' in request && request.default !== undefined) {
78
+ return request.default;
79
+ }
80
+ throw new Error(`No scripted answer remaining for interaction prompt: ${request.title}`);
81
+ });
82
+ const sequence = (async (seq) => {
83
+ const acc = {};
84
+ for (const step of seq.steps) {
85
+ acc[step.id] = await ask(step);
86
+ }
87
+ return Object.freeze({ ...acc });
88
+ });
89
+ return {
90
+ prompts,
91
+ enqueue(...answers) {
92
+ queue.push(...answers);
93
+ },
94
+ ask,
95
+ sequence,
96
+ confirm(title, defaultValue) {
97
+ return ask({
98
+ type: 'confirm',
99
+ title,
100
+ ...(defaultValue === undefined ? {} : { default: defaultValue }),
101
+ });
102
+ },
103
+ select(title, options) {
104
+ const normalized = options.map((opt) => opt !== null && typeof opt === 'object' && 'value' in opt && 'label' in opt
105
+ ? opt
106
+ : { label: String(opt), value: opt });
107
+ return ask({
108
+ type: 'select',
109
+ title,
110
+ options: normalized,
111
+ });
112
+ },
18
113
  };
19
114
  }
20
115
  /** Build the context a command receives from the fake plugin; usable for direct `execute()` calls. */
@@ -47,7 +142,80 @@ export function createCommandContext(fake, options = {}) {
47
142
  */
48
143
  export async function runCommand(fake, definition, options) {
49
144
  const command = options?.source === undefined ? definition : await bindSource(definition, options.source);
50
- return command.execute(createCommandContext(fake, options));
145
+ const resolvedOptions = populateCommandOptionsFromDefinition(command, options);
146
+ return command.execute(createCommandContext(fake, resolvedOptions));
147
+ }
148
+ function populateCommandOptionsFromDefinition(command, options) {
149
+ if (!command.params && !command.options)
150
+ return options;
151
+ const args = options?.args ?? [];
152
+ const input = (options?.input ?? createFakeMessage());
153
+ const session = {
154
+ adapter: input.conversation.endpoint.adapter,
155
+ endpoint: input.conversation.endpoint.id,
156
+ scene: input.scene ?? { id: input.conversation.id, type: input.conversation.kind },
157
+ ...(input.sender ? { sender: { id: input.sender.id, name: input.sender.name, role: input.sender.roles ?? [] } } : {}),
158
+ };
159
+ const resolveDefault = (def) => {
160
+ if (def === undefined)
161
+ return undefined;
162
+ return typeof def === 'function' ? def(session) : def;
163
+ };
164
+ const inferredParams = {};
165
+ if (command.params) {
166
+ const entries = Object.entries(command.params);
167
+ for (let i = 0; i < entries.length; i++) {
168
+ const [name, schema] = entries[i];
169
+ if (schema.rest) {
170
+ const rest = args.slice(i);
171
+ if (rest.length > 0) {
172
+ inferredParams[name] = rest.map((token) => coerceCommandScalar(token, schema));
173
+ }
174
+ else {
175
+ const def = resolveDefault(schema.default);
176
+ if (def !== undefined)
177
+ inferredParams[name] = def;
178
+ }
179
+ break;
180
+ }
181
+ const raw = args[i];
182
+ if (raw !== undefined) {
183
+ inferredParams[name] = coerceCommandScalar(raw, schema);
184
+ }
185
+ else {
186
+ const def = resolveDefault(schema.default);
187
+ if (def !== undefined)
188
+ inferredParams[name] = def;
189
+ }
190
+ }
191
+ }
192
+ const inferredOptions = {};
193
+ if (command.options) {
194
+ for (const [name, opt] of Object.entries(command.options)) {
195
+ const def = resolveDefault(opt.default);
196
+ if (def !== undefined) {
197
+ inferredOptions[name] = def;
198
+ }
199
+ }
200
+ }
201
+ return {
202
+ ...options,
203
+ params: { ...inferredParams, ...(options?.params ?? {}) },
204
+ options: { ...inferredOptions, ...(options?.options ?? {}) },
205
+ };
206
+ }
207
+ function coerceCommandScalar(raw, schema) {
208
+ if (schema.type === 'number' || schema.type === 'integer' || schema.type === 'float' || schema.type === 'dice' || schema.type === 'rps') {
209
+ const parsed = Number(raw);
210
+ return Number.isNaN(parsed) ? raw : parsed;
211
+ }
212
+ if (schema.type === 'boolean') {
213
+ if (raw === 'true' || raw === '1')
214
+ return true;
215
+ if (raw === 'false' || raw === '0')
216
+ return false;
217
+ }
218
+ return raw;
51
219
  }
52
220
  async function bindSource(definition, source) {
53
221
  const path = source instanceof URL || source.startsWith('file:') ? fileURLToPath(source) : source;
@@ -1 +1 @@
1
- {"version":3,"file":"fake-runners.js","sourceRoot":"","sources":["../src/fake-runners.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fake-runners.js","sourceRoot":"","sources":["../src/fake-runners.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { FakeClock, FakeScheduleRootHost, parseCron, type FakeScheduledJob } fro
7
7
  export { FakeDatabaseRootHost, FakeOutboundRootHost, type FakeOutboundCall } from './fake-hosts.js';
8
8
  export { FakePlugin, createFakePlugin, runPluginSetup, resolvePluginConfig, PluginConfigValidationError, fakeResource, type FakePluginOptions, type RunPluginSetupOptions, type FakeResource, type FakeRegisteredFeature } from './fake-plugin.js';
9
9
  export { fakeOf } from './partial.js';
10
- export { createFakeMessage, createCommandContext, runCommand, runMiddleware, runHandler, createToolContext, runTool, toolOriginFromMessage, type FakeMessage, type RunToolOptions, type FakeMessageInit, type RunCommandOptions, type RunMiddlewareResult } from './fake-runners.js';
10
+ export { createFakeMessage, createFakeInteraction, createCommandContext, runCommand, runMiddleware, runHandler, createToolContext, runTool, toolOriginFromMessage, type FakeMessage, type FakeSentDelivery, type FakeInteraction, type FakeInteractionOptions, type RunToolOptions, type FakeMessageInit, type RunCommandOptions, type RunMiddlewareResult } from './fake-runners.js';
11
11
  export interface PluginTestKitOptions {
12
12
  /** A real, disposable test app with its own package.json, plugin entry, dependencies and mounts. */
13
13
  readonly projectRoot: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -10,7 +10,7 @@ export { FakeClock, FakeScheduleRootHost, parseCron } from './fake-clock.js';
10
10
  export { FakeDatabaseRootHost, FakeOutboundRootHost } from './fake-hosts.js';
11
11
  export { FakePlugin, createFakePlugin, runPluginSetup, resolvePluginConfig, PluginConfigValidationError, fakeResource } from './fake-plugin.js';
12
12
  export { fakeOf } from './partial.js';
13
- export { createFakeMessage, createCommandContext, runCommand, runMiddleware, runHandler, createToolContext, runTool, toolOriginFromMessage } from './fake-runners.js';
13
+ export { createFakeMessage, createFakeInteraction, createCommandContext, runCommand, runMiddleware, runHandler, createToolContext, runTool, toolOriginFromMessage } from './fake-runners.js';
14
14
  /**
15
15
  * Owns a test IM host and synthetic transports. Every operation enters the real Root Runtime.
16
16
  * It does not install dependencies or replace providers. Discovered plugins still execute normally;
@@ -37,34 +37,46 @@ export class PluginTestKit {
37
37
  || names.some(name => !/^[a-z][a-z0-9-]*$/.test(name))) {
38
38
  throw new TypeError('Test endpoints must have unique lowercase names');
39
39
  }
40
- this.#defaultEndpoint = names[0];
41
- const kit = this;
40
+ const [firstEndpoint = 'test'] = names;
41
+ this.#defaultEndpoint = firstEndpoint;
42
+ const recordAttempt = (endpoint, request) => {
43
+ const id = `test-${this.#nextDelivery++}`;
44
+ this.#attempts.push(Object.freeze({
45
+ endpoint,
46
+ id,
47
+ conversation: captureDeliveryValue(request.conversation),
48
+ payload: captureDeliveryValue(request.payload),
49
+ }));
50
+ return id;
51
+ };
52
+ const registerOpen = (endpoint, spec) => {
53
+ this.#identities.set(endpoint, spec.identity);
54
+ this.#sinks.set(endpoint, spec.events);
55
+ };
56
+ const releaseEndpoint = (endpoint, spec) => {
57
+ if (this.#sinks.get(endpoint) !== spec.events)
58
+ return;
59
+ this.#sinks.delete(endpoint);
60
+ this.#identities.delete(endpoint);
61
+ };
42
62
  const definitions = new Map(names.map(name => {
43
63
  class SyntheticClient {
44
64
  synthetic = true;
45
65
  send(request) {
46
- const id = `test-${kit.#nextDelivery++}`;
47
- kit.#attempts.push(Object.freeze({ endpoint: name, id,
48
- conversation: captureDeliveryValue(request.conversation), payload: captureDeliveryValue(request.payload),
49
- }));
50
- return id;
66
+ return recordAttempt(name, request);
51
67
  }
52
68
  }
53
69
  class SyntheticEndpoint extends SyntheticClient {
54
70
  [endpointSpec] = createEndpointSpecification(this, {
55
71
  start: signal => signal.throwIfAborted(),
56
72
  open: () => {
57
- kit.#identities.set(name, this[endpointSpec].identity);
58
- kit.#sinks.set(name, this[endpointSpec].events);
73
+ registerOpen(name, this[endpointSpec]);
59
74
  },
60
75
  close: () => this.#release(), stop: () => this.#release(),
61
76
  send: request => this.send(request),
62
77
  });
63
78
  #release() {
64
- if (kit.#sinks.get(name) !== this[endpointSpec].events)
65
- return;
66
- kit.#sinks.delete(name);
67
- kit.#identities.delete(name);
79
+ releaseEndpoint(name, this[endpointSpec]);
68
80
  }
69
81
  }
70
82
  class SyntheticAdapter extends Adapter {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-module-runtime.d.ts","sourceRoot":"","sources":["../src/test-module-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAChD,aAAa,CA2Bf"}
1
+ {"version":3,"file":"test-module-runtime.d.ts","sourceRoot":"","sources":["../src/test-module-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAChD,aAAa,CA0Cf"}
@@ -19,7 +19,23 @@ export function withTestEndpoints(delegate, rootEntry, endpoints) {
19
19
  });
20
20
  return { ...loaded, default: definition };
21
21
  },
22
- ...(delegate.loadClientModule ? { loadClientModule: delegate.loadClientModule.bind(delegate) } : {}),
22
+ loadClientModule: delegate.loadClientModule
23
+ ? delegate.loadClientModule.bind(delegate)
24
+ : async (source) => {
25
+ let metadata;
26
+ try {
27
+ const loaded = await delegate.load(source);
28
+ metadata = loaded?.meta;
29
+ }
30
+ catch {
31
+ // Browser-only client modules may not load in headless Node test mode; fall back to default metadata.
32
+ }
33
+ return Object.freeze({
34
+ module: source,
35
+ hash: 'test',
36
+ ...(metadata !== undefined ? { metadata } : {}),
37
+ });
38
+ },
23
39
  ...(delegate.invalidate ? { invalidate: delegate.invalidate.bind(delegate) } : {}),
24
40
  ...(delegate.affectedSources ? { affectedSources: delegate.affectedSources.bind(delegate) } : {}),
25
41
  ...(delegate.requiresProcessRestart ? { requiresProcessRestart: delegate.requiresProcessRestart.bind(delegate) } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"test-module-runtime.js","sourceRoot":"","sources":["../src/test-module-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-module-runtime.js","sourceRoot":"","sources":["../src/test-module-runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/testing",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "Real Plugin Runtime integration fixtures with synthetic IM endpoints",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -17,22 +17,22 @@
17
17
  "README.md"
18
18
  ],
19
19
  "peerDependencies": {
20
- "zhin.js": "^1.1.19",
21
- "@zhin.js/runtime": "^1.1.16",
22
- "@zhin.js/tool": "^1.1.13"
20
+ "zhin.js": "^1.1.22",
21
+ "@zhin.js/runtime": "^1.1.19",
22
+ "@zhin.js/tool": "^1.1.16"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^26.1.2",
26
26
  "typescript": "^6.0.3",
27
27
  "vitest": "^4.1.10",
28
- "@zhin.js/adapter": "1.1.26",
29
- "@zhin.js/command": "1.1.12",
30
- "@zhin.js/core": "1.1.54",
31
- "@zhin.js/middleware": "1.1.11",
32
- "@zhin.js/plugin-runtime": "1.1.18",
33
- "@zhin.js/runtime": "1.1.16",
34
- "@zhin.js/tool": "1.1.13",
35
- "zhin.js": "1.1.19"
28
+ "@zhin.js/adapter": "1.1.29",
29
+ "@zhin.js/command": "1.1.15",
30
+ "@zhin.js/core": "1.1.57",
31
+ "@zhin.js/middleware": "1.1.14",
32
+ "@zhin.js/plugin-runtime": "1.1.21",
33
+ "@zhin.js/runtime": "1.1.19",
34
+ "@zhin.js/tool": "1.1.16",
35
+ "zhin.js": "1.1.22"
36
36
  },
37
37
  "engines": {
38
38
  "node": ">=22.19.0"
@@ -1,6 +1,6 @@
1
1
  import { resolveLocale, type Locale } from 'zhin.js/i18n';
2
2
  import type {
3
- CommandContext, CommandDefinition, CommandMessage, CommandParameterValue,
3
+ CommandContext, CommandDefinition, CommandMessage, CommandParamSchema, CommandParameterValue, CommandSession,
4
4
  } from 'zhin.js/command';
5
5
  import type { HandlerContext, HandlerDefinition } from 'zhin.js/handler';
6
6
  import type {
@@ -15,10 +15,37 @@ import { readOperationSession, type OperationClientPort } from 'zhin.js';
15
15
  import type { FakePlugin } from './fake-plugin.js';
16
16
  import { fileURLToPath } from 'node:url';
17
17
 
18
- /** Inbound message with recorded replies. */
18
+ export interface FakeSentDelivery {
19
+ readonly target: {
20
+ readonly kind: 'private' | 'group' | 'channel';
21
+ readonly id: string;
22
+ readonly parent?: { readonly kind: 'private' | 'group' | 'channel'; readonly id: string };
23
+ readonly threadId?: string;
24
+ };
25
+ readonly content: unknown;
26
+ }
27
+
28
+ /** Inbound message with recorded replies and targeted sends. */
19
29
  export interface FakeMessage extends CommandMessage {
20
- /** Everything passed to `$reply`, in order. */
30
+ /** Everything passed to `$reply`, `$sendTo`, `$replyToPrivate`, `$replyToGroup`, or `$replyToChannel`, in order. */
21
31
  readonly replies: unknown[];
32
+ /** Targeted sends invoked via `$sendTo`, `$replyToPrivate`, `$replyToGroup`, or `$replyToChannel`. */
33
+ readonly sent: FakeSentDelivery[];
34
+ $sendTo(
35
+ conversation: FakeSentDelivery['target'],
36
+ content: unknown,
37
+ ): Promise<string>;
38
+ $replyToPrivate(
39
+ content: unknown,
40
+ from?: boolean | { readonly kind: 'group' | 'channel'; readonly id: string },
41
+ ): Promise<string>;
42
+ $replyToGroup(groupIdOrContent: string | unknown, content?: unknown): Promise<string>;
43
+ $replyToChannel(
44
+ channelIdOrContent: string | unknown,
45
+ guildId?: string,
46
+ content?: unknown,
47
+ threadId?: string,
48
+ ): Promise<string>;
22
49
  }
23
50
 
24
51
  export interface FakeMessageInit {
@@ -33,17 +60,147 @@ export interface FakeMessageInit {
33
60
 
34
61
  export function createFakeMessage(init: FakeMessageInit = {}): FakeMessage {
35
62
  const replies: unknown[] = [];
63
+ const sent: FakeSentDelivery[] = [];
36
64
  const conversation: CommandMessage['conversation'] = {
37
65
  endpoint: { id: 'test', adapter: 'test' }, kind: 'group', id: 'test-group', ...init.conversation,
38
66
  };
67
+ const sender = init.sender ?? { id: 'test-user', name: 'Tester', roles: [] };
68
+ const recordSend = (target: FakeSentDelivery['target'], content: unknown): string => {
69
+ replies.push(content);
70
+ sent.push({ target, content });
71
+ return `reply-${replies.length}`;
72
+ };
39
73
  return {
40
74
  conversation, content: init.content ?? '', locale: resolveLocale(init.locale),
41
- sender: init.sender ?? { id: 'test-user', name: 'Tester', roles: [] },
75
+ sender,
42
76
  ...(init.id === undefined ? {} : { id: init.id }),
43
77
  ...(init.metadata === undefined ? {} : { metadata: init.metadata }),
44
78
  ...(init.$client === undefined ? {} : { $client: init.$client }),
45
79
  replies,
80
+ sent,
46
81
  async $reply(content: unknown) { replies.push(content); return `reply-${replies.length}`; },
82
+ async $sendTo(target, content) {
83
+ return recordSend(target, content);
84
+ },
85
+ async $replyToPrivate(content, from) {
86
+ let parent: FakeSentDelivery['target']['parent'];
87
+ if (from === true && (conversation.kind === 'group' || conversation.kind === 'channel')) {
88
+ parent = { kind: conversation.kind, id: conversation.id };
89
+ } else if (from != null && typeof from === 'object') {
90
+ parent = from;
91
+ }
92
+ return recordSend({
93
+ kind: 'private',
94
+ id: sender.id,
95
+ ...(parent ? { parent } : {}),
96
+ }, content);
97
+ },
98
+ async $replyToGroup(groupIdOrContent: string | unknown, maybeContent?: unknown) {
99
+ if (maybeContent === undefined) {
100
+ return recordSend({ kind: 'group', id: conversation.id }, groupIdOrContent);
101
+ }
102
+ return recordSend({ kind: 'group', id: String(groupIdOrContent) }, maybeContent);
103
+ },
104
+ async $replyToChannel(
105
+ channelIdOrContent: string | unknown,
106
+ guildId?: string,
107
+ content?: unknown,
108
+ threadId?: string,
109
+ ) {
110
+ if (guildId === undefined && content === undefined) {
111
+ return recordSend({ kind: 'channel', id: conversation.id }, channelIdOrContent);
112
+ }
113
+ return recordSend({
114
+ kind: 'channel',
115
+ id: String(channelIdOrContent),
116
+ ...(guildId ? { parent: { kind: 'channel', id: guildId } } : {}),
117
+ ...(threadId ? { threadId } : {}),
118
+ }, content);
119
+ },
120
+ };
121
+ }
122
+
123
+ export type FakeInteraction = NonNullable<CommandContext['interaction']> & {
124
+ /** Every interaction request presented via `ask`, `sequence`, `confirm`, or `select`, in order. */
125
+ readonly prompts: Parameters<NonNullable<CommandContext['interaction']>['ask']>[0][];
126
+ /** Append additional scripted answers to the queue. */
127
+ enqueue(...answers: unknown[]): void;
128
+ /** Convenience helper for confirm requests. */
129
+ confirm(title: string, defaultValue?: boolean): Promise<boolean>;
130
+ /** Convenience helper for select requests. */
131
+ select<V = string>(
132
+ title: string,
133
+ options: readonly (V | { readonly label: string; readonly value: V })[],
134
+ ): Promise<V>;
135
+ };
136
+
137
+ export interface FakeInteractionOptions {
138
+ readonly answers?: readonly unknown[];
139
+ }
140
+
141
+ /**
142
+ * Create a scripted `UserInteraction` double for unit-testing commands and handlers that use
143
+ * `interaction.ask()`, `interaction.sequence()`, `interaction.confirm()`, or `interaction.select()`.
144
+ */
145
+ export function createFakeInteraction(
146
+ init: readonly unknown[] | FakeInteractionOptions = [],
147
+ ): FakeInteraction {
148
+ type Interaction = NonNullable<CommandContext['interaction']>;
149
+ type Request = Parameters<Interaction['ask']>[0];
150
+ const queue: unknown[] = Array.isArray(init)
151
+ ? [...init]
152
+ : [...(init as FakeInteractionOptions).answers ?? []];
153
+ const prompts: Request[] = [];
154
+
155
+ const ask: Interaction['ask'] = (async (request: Request) => {
156
+ prompts.push(request);
157
+ if (queue.length > 0) {
158
+ const next = queue.shift();
159
+ return typeof next === 'function' ? await (next as (r: Request) => unknown)(request) : next;
160
+ }
161
+ if ('default' in request && request.default !== undefined) {
162
+ return request.default;
163
+ }
164
+ throw new Error(`No scripted answer remaining for interaction prompt: ${request.title}`);
165
+ }) as Interaction['ask'];
166
+
167
+ const sequence: Interaction['sequence'] = (async (seq) => {
168
+ const acc: Record<string, unknown> = {};
169
+ for (const step of seq.steps) {
170
+ acc[step.id] = await ask(step);
171
+ }
172
+ return Object.freeze({ ...acc });
173
+ }) as Interaction['sequence'];
174
+
175
+ return {
176
+ prompts,
177
+ enqueue(...answers: unknown[]) {
178
+ queue.push(...answers);
179
+ },
180
+ ask,
181
+ sequence,
182
+ confirm(title: string, defaultValue?: boolean): Promise<boolean> {
183
+ return ask({
184
+ type: 'confirm',
185
+ title,
186
+ ...(defaultValue === undefined ? {} : { default: defaultValue }),
187
+ });
188
+ },
189
+ select<V = string>(
190
+ title: string,
191
+ options: readonly (V | { readonly label: string; readonly value: V })[],
192
+ ): Promise<V> {
193
+ const normalized = options.map((opt) =>
194
+ opt !== null && typeof opt === 'object' && 'value' in opt && 'label' in opt
195
+ ? opt
196
+ : { label: String(opt), value: opt as V },
197
+ );
198
+ return ask({
199
+ type: 'select',
200
+ title,
201
+ options: normalized,
202
+ }) as Promise<V>;
203
+ },
47
204
  };
48
205
  }
49
206
 
@@ -104,7 +261,77 @@ export async function runCommand<TConfig, TResult, TInput extends CommandMessage
104
261
  options?: RunCommandOptions<TInput>,
105
262
  ): Promise<TResult> {
106
263
  const command = options?.source === undefined ? definition : await bindSource(definition, options.source);
107
- return command.execute(createCommandContext(fake, options));
264
+ const resolvedOptions = populateCommandOptionsFromDefinition(command, options);
265
+ return command.execute(createCommandContext(fake, resolvedOptions));
266
+ }
267
+
268
+ function populateCommandOptionsFromDefinition<TConfig, TResult, TInput extends CommandMessage>(
269
+ command: CommandDefinition<TConfig, TResult, TInput, string | undefined>,
270
+ options?: RunCommandOptions<TInput>,
271
+ ): RunCommandOptions<TInput> | undefined {
272
+ if (!command.params && !command.options) return options;
273
+ const args = options?.args ?? [];
274
+ const input = (options?.input ?? createFakeMessage()) as TInput;
275
+ const session: CommandSession = {
276
+ adapter: input.conversation.endpoint.adapter,
277
+ endpoint: input.conversation.endpoint.id,
278
+ scene: input.scene ?? { id: input.conversation.id, type: input.conversation.kind },
279
+ ...(input.sender ? { sender: { id: input.sender.id, name: input.sender.name, role: input.sender.roles ?? [] } } : {}),
280
+ };
281
+ const resolveDefault = (def: CommandParamSchema['default']): CommandParameterValue | undefined => {
282
+ if (def === undefined) return undefined;
283
+ return typeof def === 'function' ? def(session) : def;
284
+ };
285
+ const inferredParams: Record<string, CommandParameterValue> = {};
286
+ if (command.params) {
287
+ const entries = Object.entries(command.params);
288
+ for (let i = 0; i < entries.length; i++) {
289
+ const [name, schema] = entries[i]!;
290
+ if (schema.rest) {
291
+ const rest = args.slice(i);
292
+ if (rest.length > 0) {
293
+ inferredParams[name] = rest.map((token) => coerceCommandScalar(token, schema));
294
+ } else {
295
+ const def = resolveDefault(schema.default);
296
+ if (def !== undefined) inferredParams[name] = def;
297
+ }
298
+ break;
299
+ }
300
+ const raw = args[i];
301
+ if (raw !== undefined) {
302
+ inferredParams[name] = coerceCommandScalar(raw, schema);
303
+ } else {
304
+ const def = resolveDefault(schema.default);
305
+ if (def !== undefined) inferredParams[name] = def;
306
+ }
307
+ }
308
+ }
309
+ const inferredOptions: Record<string, CommandParameterValue> = {};
310
+ if (command.options) {
311
+ for (const [name, opt] of Object.entries(command.options)) {
312
+ const def = resolveDefault(opt.default);
313
+ if (def !== undefined) {
314
+ inferredOptions[name] = def;
315
+ }
316
+ }
317
+ }
318
+ return {
319
+ ...options,
320
+ params: { ...inferredParams, ...(options?.params ?? {}) },
321
+ options: { ...inferredOptions, ...(options?.options ?? {}) },
322
+ };
323
+ }
324
+
325
+ function coerceCommandScalar(raw: string, schema: CommandParamSchema): string | number | boolean {
326
+ if (schema.type === 'number' || schema.type === 'integer' || schema.type === 'float' || schema.type === 'dice' || schema.type === 'rps') {
327
+ const parsed = Number(raw);
328
+ return Number.isNaN(parsed) ? raw : parsed;
329
+ }
330
+ if (schema.type === 'boolean') {
331
+ if (raw === 'true' || raw === '1') return true;
332
+ if (raw === 'false' || raw === '0') return false;
333
+ }
334
+ return raw;
108
335
  }
109
336
 
110
337
  async function bindSource<T extends CommandDefinition<never, unknown, never, string | undefined>>(
package/src/index.ts CHANGED
@@ -16,9 +16,10 @@ export { FakeDatabaseRootHost, FakeOutboundRootHost, type FakeOutboundCall } fro
16
16
  export { FakePlugin, createFakePlugin, runPluginSetup, resolvePluginConfig, PluginConfigValidationError, fakeResource,
17
17
  type FakePluginOptions, type RunPluginSetupOptions, type FakeResource, type FakeRegisteredFeature } from './fake-plugin.js';
18
18
  export { fakeOf } from './partial.js';
19
- export { createFakeMessage, createCommandContext, runCommand, runMiddleware, runHandler,
19
+ export { createFakeMessage, createFakeInteraction, createCommandContext, runCommand, runMiddleware, runHandler,
20
20
  createToolContext, runTool, toolOriginFromMessage,
21
- type FakeMessage, type RunToolOptions, type FakeMessageInit, type RunCommandOptions, type RunMiddlewareResult } from './fake-runners.js';
21
+ type FakeMessage, type FakeSentDelivery, type FakeInteraction, type FakeInteractionOptions,
22
+ type RunToolOptions, type FakeMessageInit, type RunCommandOptions, type RunMiddlewareResult } from './fake-runners.js';
22
23
 
23
24
  export interface PluginTestKitOptions {
24
25
  /** A real, disposable test app with its own package.json, plugin entry, dependencies and mounts. */
@@ -80,32 +81,45 @@ export class PluginTestKit {
80
81
  || names.some(name => !/^[a-z][a-z0-9-]*$/.test(name))) {
81
82
  throw new TypeError('Test endpoints must have unique lowercase names');
82
83
  }
83
- this.#defaultEndpoint = names[0]!;
84
- const kit = this;
84
+ const [firstEndpoint = 'test'] = names;
85
+ this.#defaultEndpoint = firstEndpoint;
86
+ const recordAttempt = (endpoint: string, request: EndpointSendRequest): string => {
87
+ const id = `test-${this.#nextDelivery++}`;
88
+ this.#attempts.push(Object.freeze({
89
+ endpoint,
90
+ id,
91
+ conversation: captureDeliveryValue(request.conversation),
92
+ payload: captureDeliveryValue(request.payload),
93
+ }));
94
+ return id;
95
+ };
96
+ const registerOpen = (endpoint: string, spec: Endpoint[typeof endpointSpec]): void => {
97
+ this.#identities.set(endpoint, spec.identity);
98
+ this.#sinks.set(endpoint, spec.events);
99
+ };
100
+ const releaseEndpoint = (endpoint: string, spec: Endpoint[typeof endpointSpec]): void => {
101
+ if (this.#sinks.get(endpoint) !== spec.events) return;
102
+ this.#sinks.delete(endpoint);
103
+ this.#identities.delete(endpoint);
104
+ };
85
105
  const definitions = new Map<string, AdapterDefinition>(names.map(name => {
86
106
  class SyntheticClient {
87
107
  readonly synthetic = true;
88
108
  send(request: EndpointSendRequest): string {
89
- const id = `test-${kit.#nextDelivery++}`;
90
- kit.#attempts.push(Object.freeze({ endpoint: name, id,
91
- conversation: captureDeliveryValue(request.conversation), payload: captureDeliveryValue(request.payload),
92
- }));
93
- return id;
109
+ return recordAttempt(name, request);
94
110
  }
95
111
  }
96
112
  class SyntheticEndpoint extends SyntheticClient implements Endpoint {
97
113
  readonly [endpointSpec] = createEndpointSpecification(this, {
98
114
  start: signal => signal.throwIfAborted(),
99
115
  open: () => {
100
- kit.#identities.set(name, this[endpointSpec].identity);
101
- kit.#sinks.set(name, this[endpointSpec].events);
116
+ registerOpen(name, this[endpointSpec]);
102
117
  },
103
118
  close: () => this.#release(), stop: () => this.#release(),
104
119
  send: request => this.send(request),
105
120
  });
106
121
  #release(): void {
107
- if (kit.#sinks.get(name) !== this[endpointSpec].events) return;
108
- kit.#sinks.delete(name); kit.#identities.delete(name);
122
+ releaseEndpoint(name, this[endpointSpec]);
109
123
  }
110
124
  }
111
125
  class SyntheticAdapter extends Adapter<SyntheticEndpoint> {
@@ -24,7 +24,22 @@ export function withTestEndpoints(
24
24
  });
25
25
  return { ...loaded, default: definition } as T;
26
26
  },
27
- ...(delegate.loadClientModule ? { loadClientModule: delegate.loadClientModule.bind(delegate) } : {}),
27
+ loadClientModule: delegate.loadClientModule
28
+ ? delegate.loadClientModule.bind(delegate)
29
+ : async <T = unknown>(source: string): Promise<T> => {
30
+ let metadata: unknown;
31
+ try {
32
+ const loaded = await delegate.load<{ meta?: unknown }>(source);
33
+ metadata = loaded?.meta;
34
+ } catch {
35
+ // Browser-only client modules may not load in headless Node test mode; fall back to default metadata.
36
+ }
37
+ return Object.freeze({
38
+ module: source,
39
+ hash: 'test',
40
+ ...(metadata !== undefined ? { metadata } : {}),
41
+ }) as T;
42
+ },
28
43
  ...(delegate.invalidate ? { invalidate: delegate.invalidate.bind(delegate) } : {}),
29
44
  ...(delegate.affectedSources ? { affectedSources: delegate.affectedSources.bind(delegate) } : {}),
30
45
  ...(delegate.requiresProcessRestart ? { requiresProcessRestart: delegate.requiresProcessRestart.bind(delegate) } : {}),