open-agents-nexus 1.4.1 → 1.5.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/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/room.d.ts +17 -0
- package/dist/chat/room.js +64 -0
- package/dist/chat/room.js.map +1 -1
- package/dist/index.d.ts +70 -2
- package/dist/index.js +392 -1
- package/dist/index.js.map +1 -1
- package/dist/metering/file-logger.d.ts +14 -0
- package/dist/metering/file-logger.js +25 -0
- package/dist/metering/file-logger.js.map +1 -0
- package/dist/metering/index.d.ts +90 -0
- package/dist/metering/index.js +143 -0
- package/dist/metering/index.js.map +1 -0
- package/dist/nats/index.d.ts +2 -0
- package/dist/nats/index.js.map +1 -1
- package/dist/protocol/types.d.ts +1 -1
- package/dist/protocols/index.js +1 -0
- package/dist/protocols/index.js.map +1 -1
- package/dist/protocols/invoke.d.ts +28 -1
- package/dist/protocols/invoke.js.map +1 -1
- package/package.json +1 -1
package/dist/chat/index.d.ts
CHANGED
package/dist/chat/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAEjC,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IACrC,MAAM,CAAS;IACvB,8DAA8D;IACtD,MAAM,CAAM;IACZ,SAAS,CAAY;IACrB,WAAW,CAA4B;IAE/C,YACE,MAAc;IACd,8DAA8D;IAC9D,MAAW,EACX,SAAoB,EACpB,cAAyC,IAAI;QAE7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,SAAS,CACxB,MAAM,EACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAEjC,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IACrC,MAAM,CAAS;IACvB,8DAA8D;IACtD,MAAM,CAAM;IACZ,SAAS,CAAY;IACrB,WAAW,CAA4B;IAE/C,YACE,MAAc;IACd,8DAA8D;IAC9D,MAAW,EACX,SAAoB,EACpB,cAAyC,IAAI;QAE7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,SAAS,CACxB,MAAM,EACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/chat/room.d.ts
CHANGED
|
@@ -12,6 +12,14 @@
|
|
|
12
12
|
import type { NexusMessage, ContentFormat } from '../protocol/index.js';
|
|
13
13
|
import type { AgentInfo } from './messages.js';
|
|
14
14
|
import type { ContentPropagation } from '../storage/propagation.js';
|
|
15
|
+
export interface RoomMember {
|
|
16
|
+
peerId: string;
|
|
17
|
+
agentName: string;
|
|
18
|
+
agentType: string;
|
|
19
|
+
status: 'online' | 'idle' | 'busy' | 'offline';
|
|
20
|
+
capabilities: string[];
|
|
21
|
+
lastSeen: number;
|
|
22
|
+
}
|
|
15
23
|
export interface SendOptions {
|
|
16
24
|
format?: ContentFormat;
|
|
17
25
|
replyTo?: string | null;
|
|
@@ -24,6 +32,8 @@ type RoomEventMap = {
|
|
|
24
32
|
loaded: number;
|
|
25
33
|
total: number;
|
|
26
34
|
};
|
|
35
|
+
'member:join': RoomMember;
|
|
36
|
+
'member:leave': RoomMember;
|
|
27
37
|
};
|
|
28
38
|
type RoomEventListener<K extends keyof RoomEventMap> = (value: RoomEventMap[K]) => void;
|
|
29
39
|
export declare class NexusRoom {
|
|
@@ -36,7 +46,9 @@ export declare class NexusRoom {
|
|
|
36
46
|
private listeners;
|
|
37
47
|
private pubsubHandler;
|
|
38
48
|
private heartbeatInterval;
|
|
49
|
+
private staleEvictionTimer;
|
|
39
50
|
private joined;
|
|
51
|
+
private memberMap;
|
|
40
52
|
constructor(roomId: string, peerId: string, pubsub: any, agentInfo: AgentInfo, propagation?: ContentPropagation | null);
|
|
41
53
|
on<K extends keyof RoomEventMap>(event: K, listener: RoomEventListener<K>): this;
|
|
42
54
|
off<K extends keyof RoomEventMap>(event: K, listener: RoomEventListener<K>): this;
|
|
@@ -45,5 +57,10 @@ export declare class NexusRoom {
|
|
|
45
57
|
send(content: string, options?: SendOptions): Promise<string>;
|
|
46
58
|
leave(): Promise<void>;
|
|
47
59
|
private publishPresence;
|
|
60
|
+
private trackMemberPresence;
|
|
61
|
+
private evictStaleMembers;
|
|
62
|
+
get members(): RoomMember[];
|
|
63
|
+
getMember(peerId: string): RoomMember | undefined;
|
|
64
|
+
findMemberByName(name: string): RoomMember | undefined;
|
|
48
65
|
}
|
|
49
66
|
export {};
|
package/dist/chat/room.js
CHANGED
|
@@ -16,6 +16,7 @@ import { validateNexusMessage } from '../security/validators.js';
|
|
|
16
16
|
import { createLogger } from '../logger.js';
|
|
17
17
|
const log = createLogger('chat:room');
|
|
18
18
|
const PRESENCE_INTERVAL_MS = 60_000;
|
|
19
|
+
const STALE_TIMEOUT_MS = PRESENCE_INTERVAL_MS * 2; // 120s — 2x heartbeat
|
|
19
20
|
export class NexusRoom {
|
|
20
21
|
roomId;
|
|
21
22
|
topic;
|
|
@@ -26,7 +27,9 @@ export class NexusRoom {
|
|
|
26
27
|
listeners = new Map();
|
|
27
28
|
pubsubHandler = null;
|
|
28
29
|
heartbeatInterval = null;
|
|
30
|
+
staleEvictionTimer = null;
|
|
29
31
|
joined = false;
|
|
32
|
+
memberMap = new Map();
|
|
30
33
|
constructor(roomId, peerId, pubsub, agentInfo, propagation = null) {
|
|
31
34
|
this.roomId = roomId;
|
|
32
35
|
this.topic = roomTopic(roomId);
|
|
@@ -83,6 +86,7 @@ export class NexusRoom {
|
|
|
83
86
|
}
|
|
84
87
|
else if (msg.type === 'presence') {
|
|
85
88
|
this.emit('presence', msg);
|
|
89
|
+
this.trackMemberPresence(msg);
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
catch {
|
|
@@ -96,6 +100,10 @@ export class NexusRoom {
|
|
|
96
100
|
this.heartbeatInterval = setInterval(async () => {
|
|
97
101
|
await this.publishPresence('online');
|
|
98
102
|
}, PRESENCE_INTERVAL_MS);
|
|
103
|
+
// Start stale member eviction (check every 30s)
|
|
104
|
+
this.staleEvictionTimer = setInterval(() => {
|
|
105
|
+
this.evictStaleMembers();
|
|
106
|
+
}, 30_000);
|
|
99
107
|
this.joined = true;
|
|
100
108
|
log.info(`Joined room: ${this.roomId}`);
|
|
101
109
|
}
|
|
@@ -116,6 +124,11 @@ export class NexusRoom {
|
|
|
116
124
|
clearInterval(this.heartbeatInterval);
|
|
117
125
|
this.heartbeatInterval = null;
|
|
118
126
|
}
|
|
127
|
+
// Stop stale eviction
|
|
128
|
+
if (this.staleEvictionTimer !== null) {
|
|
129
|
+
clearInterval(this.staleEvictionTimer);
|
|
130
|
+
this.staleEvictionTimer = null;
|
|
131
|
+
}
|
|
119
132
|
// Publish offline presence
|
|
120
133
|
await this.publishPresence('offline');
|
|
121
134
|
// Remove pubsub handler
|
|
@@ -131,5 +144,56 @@ export class NexusRoom {
|
|
|
131
144
|
const msg = createPresenceMessage(this.roomId, this.peerId, status, this.agentInfo);
|
|
132
145
|
await this.pubsub.publish(this.topic, encodeMessage(msg));
|
|
133
146
|
}
|
|
147
|
+
// --- Member tracking ---
|
|
148
|
+
trackMemberPresence(msg) {
|
|
149
|
+
const payload = msg.payload;
|
|
150
|
+
if (!payload || !payload.status)
|
|
151
|
+
return;
|
|
152
|
+
const peerId = msg.sender;
|
|
153
|
+
const existing = this.memberMap.get(peerId);
|
|
154
|
+
if (payload.status === 'offline') {
|
|
155
|
+
if (existing) {
|
|
156
|
+
this.memberMap.delete(peerId);
|
|
157
|
+
this.emit('member:leave', existing);
|
|
158
|
+
}
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const member = {
|
|
162
|
+
peerId,
|
|
163
|
+
agentName: payload.agentName ?? '',
|
|
164
|
+
agentType: payload.agentType ?? '',
|
|
165
|
+
status: payload.status,
|
|
166
|
+
capabilities: payload.capabilities ?? [],
|
|
167
|
+
lastSeen: msg.timestamp,
|
|
168
|
+
};
|
|
169
|
+
const isNew = !existing;
|
|
170
|
+
this.memberMap.set(peerId, member);
|
|
171
|
+
if (isNew) {
|
|
172
|
+
this.emit('member:join', member);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
evictStaleMembers() {
|
|
176
|
+
const cutoff = Date.now() - STALE_TIMEOUT_MS;
|
|
177
|
+
for (const [peerId, member] of this.memberMap) {
|
|
178
|
+
if (member.lastSeen < cutoff) {
|
|
179
|
+
this.memberMap.delete(peerId);
|
|
180
|
+
this.emit('member:leave', member);
|
|
181
|
+
log.debug(`Evicted stale member ${peerId.slice(0, 12)}... from ${this.roomId}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
get members() {
|
|
186
|
+
return Array.from(this.memberMap.values());
|
|
187
|
+
}
|
|
188
|
+
getMember(peerId) {
|
|
189
|
+
return this.memberMap.get(peerId);
|
|
190
|
+
}
|
|
191
|
+
findMemberByName(name) {
|
|
192
|
+
for (const member of this.memberMap.values()) {
|
|
193
|
+
if (member.agentName === name)
|
|
194
|
+
return member;
|
|
195
|
+
}
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
134
198
|
}
|
|
135
199
|
//# sourceMappingURL=room.js.map
|
package/dist/chat/room.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room.js","sourceRoot":"","sources":["../../src/chat/room.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAEtC,MAAM,oBAAoB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"room.js","sourceRoot":"","sources":["../../src/chat/room.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,9 +10,12 @@ import { type BootstrapSource } from './bootstrap/index.js';
|
|
|
10
10
|
import type { AgentProfile, RoomInfo, ContributeOptions, AgentRole } from './protocol/types.js';
|
|
11
11
|
import { X402PaymentRail } from './x402/index.js';
|
|
12
12
|
import type { X402Config } from './x402/index.js';
|
|
13
|
-
import { type InvokeEvent } from './protocols/index.js';
|
|
13
|
+
import { type InvokeEvent, type InvokeHandler } from './protocols/index.js';
|
|
14
14
|
import { NatsDiscovery } from './nats/index.js';
|
|
15
15
|
import { NknFallback } from './nkn/index.js';
|
|
16
|
+
import { DefaultTrustPolicy } from './trust/index.js';
|
|
17
|
+
import type { TrustConfig } from './trust/index.js';
|
|
18
|
+
import { MeteringEngine } from './metering/index.js';
|
|
16
19
|
import { NexusRoom } from './chat/index.js';
|
|
17
20
|
export interface NexusClientOptions {
|
|
18
21
|
privateKey?: Uint8Array;
|
|
@@ -36,6 +39,7 @@ export interface NexusClientOptions {
|
|
|
36
39
|
natsServers?: string[];
|
|
37
40
|
enableNkn?: boolean;
|
|
38
41
|
nknIdentifier?: string;
|
|
42
|
+
trustPolicy?: TrustConfig;
|
|
39
43
|
}
|
|
40
44
|
export interface CreateRoomOptions {
|
|
41
45
|
roomId: string;
|
|
@@ -44,11 +48,36 @@ export interface CreateRoomOptions {
|
|
|
44
48
|
type?: 'persistent' | 'ephemeral';
|
|
45
49
|
access?: 'public';
|
|
46
50
|
}
|
|
51
|
+
export interface CapabilityOptions {
|
|
52
|
+
/** When set, the provider gates the capability behind x402 payment.
|
|
53
|
+
* Amount is in smallest unit (e.g. "100000" = 0.10 USDC with 6 decimals).
|
|
54
|
+
* Set amount to "0" for free-tier (protocol dance without on-chain tx). */
|
|
55
|
+
pricing?: {
|
|
56
|
+
amount: string;
|
|
57
|
+
currency: 'USDC' | 'ETH' | 'BASE_ETH';
|
|
58
|
+
description?: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
47
61
|
type NexusEventMap = {
|
|
48
62
|
'peer:discovered': string;
|
|
49
63
|
'peer:connected': string;
|
|
50
64
|
'peer:disconnected': string;
|
|
51
65
|
'error': Error;
|
|
66
|
+
'message': {
|
|
67
|
+
roomId: string;
|
|
68
|
+
message: import('./protocol/types.js').NexusMessage;
|
|
69
|
+
};
|
|
70
|
+
'dm': {
|
|
71
|
+
from: string;
|
|
72
|
+
content: string;
|
|
73
|
+
format: string;
|
|
74
|
+
messageId: string;
|
|
75
|
+
};
|
|
76
|
+
'invoke': {
|
|
77
|
+
from: string;
|
|
78
|
+
capability: string;
|
|
79
|
+
requestId: string;
|
|
80
|
+
};
|
|
52
81
|
};
|
|
53
82
|
type NexusEventListener<K extends keyof NexusEventMap> = (value: NexusEventMap[K]) => void;
|
|
54
83
|
export declare class NexusClient {
|
|
@@ -64,8 +93,15 @@ export declare class NexusClient {
|
|
|
64
93
|
private natsDiscovery;
|
|
65
94
|
private natsAnnounceTimer;
|
|
66
95
|
private nknFallback;
|
|
96
|
+
private capabilityHandlers;
|
|
97
|
+
private capabilityPricing;
|
|
98
|
+
private _trustPolicy;
|
|
99
|
+
private _metering;
|
|
100
|
+
private invokeHandlerRegistered;
|
|
67
101
|
constructor(options?: NexusClientOptions);
|
|
68
102
|
get x402(): X402PaymentRail;
|
|
103
|
+
get metering(): MeteringEngine;
|
|
104
|
+
get trustPolicy(): DefaultTrustPolicy;
|
|
69
105
|
on<K extends keyof NexusEventMap>(event: K, listener: NexusEventListener<K>): this;
|
|
70
106
|
off<K extends keyof NexusEventMap>(event: K, listener: NexusEventListener<K>): this;
|
|
71
107
|
private emit;
|
|
@@ -113,6 +149,34 @@ export declare class NexusClient {
|
|
|
113
149
|
* The stream is opened, the message is sent, and the stream is closed.
|
|
114
150
|
*/
|
|
115
151
|
sendDM(peerId: string, content: string, format?: string): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* Register a named capability handler. When a remote peer invokes this
|
|
154
|
+
* capability via the /nexus/invoke/1.1.0 protocol, the handler is called.
|
|
155
|
+
*
|
|
156
|
+
* When `options.pricing` is set, the provider gates the capability behind
|
|
157
|
+
* x402 payment: sends invoke.payment_required, waits for proof, validates,
|
|
158
|
+
* then dispatches to the handler.
|
|
159
|
+
*
|
|
160
|
+
* On first registration, the libp2p protocol handler is set up.
|
|
161
|
+
*/
|
|
162
|
+
registerCapability(name: string, handler: InvokeHandler, options?: CapabilityOptions): void;
|
|
163
|
+
/**
|
|
164
|
+
* Remove a previously registered capability handler.
|
|
165
|
+
*/
|
|
166
|
+
unregisterCapability(name: string): void;
|
|
167
|
+
/**
|
|
168
|
+
* List all registered capability names.
|
|
169
|
+
*/
|
|
170
|
+
getRegisteredCapabilities(): string[];
|
|
171
|
+
private handleIncomingInvoke;
|
|
172
|
+
/**
|
|
173
|
+
* Block a peer from invoking capabilities and sending DMs.
|
|
174
|
+
*/
|
|
175
|
+
blockPeer(peerId: string): void;
|
|
176
|
+
/**
|
|
177
|
+
* Remove a peer from the block list.
|
|
178
|
+
*/
|
|
179
|
+
unblockPeer(peerId: string): void;
|
|
116
180
|
store(data: Uint8Array | string | object): Promise<string>;
|
|
117
181
|
retrieve(cidString: string): Promise<unknown>;
|
|
118
182
|
contribute(options: ContributeOptions): void;
|
|
@@ -146,7 +210,7 @@ export { DEFAULT_X402_CONFIG } from './x402/index.js';
|
|
|
146
210
|
export { PaymentVerifier, PaymentSubmitter, generateWallet, loadWallet, saveWallet, loadOrCreateWallet, signPaymentAuthorization, verifyPaymentSignature, generateNonce, USDC_BASE_ADDRESS, USDC_EIP712_DOMAIN, BASE_CHAIN_ID, TRANSFER_WITH_AUTH_TYPES, } from './x402/index.js';
|
|
147
211
|
export type { VerificationResult, SubmitResult, AgentWallet, TransferAuthMessage, } from './x402/index.js';
|
|
148
212
|
export { STREAM_PROTOCOLS, INVOKE_PROTOCOL, HANDSHAKE_PROTOCOL, DM_PROTOCOL, CHAT_SYNC_PROTOCOL, encodeStreamMessage, decodeStreamMessage, } from './protocols/index.js';
|
|
149
|
-
export type { InvokeOpen, InvokeChunk, InvokeAccept, InvokeEvent, InvokeDone, InvokeError, InvokeCancel, InvokeMessage, InvokeHandler, HandshakeInit, HandshakeAck, DmMessage, SyncRequest, SyncResponse, } from './protocols/index.js';
|
|
213
|
+
export type { InvokeOpen, InvokeChunk, InvokeAccept, InvokeEvent, InvokeDone, InvokeError, InvokeCancel, InvokePaymentRequired, InvokePaymentProof, InvokeMessage, InvokeHandler, InvokeStreamHandle, HandshakeInit, HandshakeAck, DmMessage, SyncRequest, SyncResponse, } from './protocols/index.js';
|
|
150
214
|
export { validateManifestStructure, isManifestExpired, extractPeersFromManifest, savePeerCache, loadPeerCache, resolveBootstrap, defaultBootstrapSources, } from './bootstrap/index.js';
|
|
151
215
|
export type { BootstrapSeed, BootstrapManifest, PeerCache, BootstrapSource, BootstrapResult, } from './bootstrap/index.js';
|
|
152
216
|
export { DefaultTrustPolicy } from './trust/index.js';
|
|
@@ -159,3 +223,7 @@ export { NatsDiscovery, DEFAULT_NATS_CONFIG, NATS_DISCOVERY_SERVERS, NATS_DISCOV
|
|
|
159
223
|
export type { NatsDiscoveryConfig, NatsAgentAnnouncement } from './nats/index.js';
|
|
160
224
|
export { NknFallback, DEFAULT_NKN_CONFIG } from './nkn/index.js';
|
|
161
225
|
export type { NknConfig, NknAddressInfo } from './nkn/index.js';
|
|
226
|
+
export type { RoomMember } from './chat/index.js';
|
|
227
|
+
export { MeteringEngine } from './metering/index.js';
|
|
228
|
+
export { createFileAuditHook } from './metering/file-logger.js';
|
|
229
|
+
export type { UsageRecord, PeerUsageSummary, UsageFilter, MeteringHook } from './metering/index.js';
|