@agentunion/fastaun 0.5.31 → 0.5.33

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.
Files changed (91) hide show
  1. package/CHANGELOG.md +69 -1
  2. package/_packed_docs/CHANGELOG.md +69 -1
  3. package/_packed_docs/sdk/0.5.32-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +350 -0
  4. package/_packed_docs/sdk/0.5.32-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +319 -0
  5. package/_packed_docs/sdk/0.5.33-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +316 -0
  6. package/_packed_docs/sdk/0.5.33-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +304 -0
  7. package/_packed_docs/sdk/09-storage-rpc-manual.md +33 -16
  8. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +12 -5
  9. package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +459 -0
  10. package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/274/200/345/217/221/347/247/273/346/244/215/346/214/207/345/215/227.md +554 -0
  11. package/_packed_docs/sdk/INDEX.md +27 -5
  12. package/_packed_docs/sdk//345/255/220AID/344/277/256/346/224/271agent.md/351/200/232/347/237/245Owner/345/234/272/346/231/257/346/214/207/345/215/227.md +234 -0
  13. package/dist/agent-md.d.ts +2 -1
  14. package/dist/agent-md.js +17 -0
  15. package/dist/agent-md.js.map +1 -1
  16. package/dist/client/control-messages.d.ts +22 -6
  17. package/dist/client/control-messages.js +210 -148
  18. package/dist/client/control-messages.js.map +1 -1
  19. package/dist/client/delivery.d.ts +3 -0
  20. package/dist/client/delivery.js +67 -3
  21. package/dist/client/delivery.js.map +1 -1
  22. package/dist/client/group-state.d.ts +3 -0
  23. package/dist/client/group-state.js +48 -14
  24. package/dist/client/group-state.js.map +1 -1
  25. package/dist/client/lifecycle.js +3 -2
  26. package/dist/client/lifecycle.js.map +1 -1
  27. package/dist/client/rpc-pipeline.d.ts +9 -3
  28. package/dist/client/rpc-pipeline.js +80 -27
  29. package/dist/client/rpc-pipeline.js.map +1 -1
  30. package/dist/client/v2-e2ee.d.ts +13 -1
  31. package/dist/client/v2-e2ee.js +32 -19
  32. package/dist/client/v2-e2ee.js.map +1 -1
  33. package/dist/client.d.ts +13 -5
  34. package/dist/client.js +121 -37
  35. package/dist/client.js.map +1 -1
  36. package/dist/group-fs.js +1 -1
  37. package/dist/group-fs.js.map +1 -1
  38. package/dist/index.d.ts +3 -1
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/ownership-workflow.d.ts +23 -3
  42. package/dist/ownership-workflow.js +39 -16
  43. package/dist/ownership-workflow.js.map +1 -1
  44. package/dist/pubsub/binding.d.ts +54 -0
  45. package/dist/pubsub/binding.js +343 -0
  46. package/dist/pubsub/binding.js.map +1 -0
  47. package/dist/pubsub/channel.d.ts +45 -0
  48. package/dist/pubsub/channel.js +137 -0
  49. package/dist/pubsub/channel.js.map +1 -0
  50. package/dist/pubsub/client.d.ts +93 -0
  51. package/dist/pubsub/client.js +318 -0
  52. package/dist/pubsub/client.js.map +1 -0
  53. package/dist/pubsub/credentials.d.ts +51 -0
  54. package/dist/pubsub/credentials.js +360 -0
  55. package/dist/pubsub/credentials.js.map +1 -0
  56. package/dist/pubsub/errors.d.ts +5 -0
  57. package/dist/pubsub/errors.js +6 -0
  58. package/dist/pubsub/errors.js.map +1 -0
  59. package/dist/pubsub/index.d.ts +48 -0
  60. package/dist/pubsub/index.js +152 -0
  61. package/dist/pubsub/index.js.map +1 -0
  62. package/dist/pubsub/scheduler.d.ts +58 -0
  63. package/dist/pubsub/scheduler.js +249 -0
  64. package/dist/pubsub/scheduler.js.map +1 -0
  65. package/dist/pubsub/service.d.ts +100 -0
  66. package/dist/pubsub/service.js +650 -0
  67. package/dist/pubsub/service.js.map +1 -0
  68. package/dist/pubsub/types.d.ts +119 -0
  69. package/dist/pubsub/types.js +2 -0
  70. package/dist/pubsub/types.js.map +1 -0
  71. package/dist/storage/lowlevel.d.ts +4 -2
  72. package/dist/storage/lowlevel.js +46 -7
  73. package/dist/storage/lowlevel.js.map +1 -1
  74. package/dist/storage/read-cache.d.ts +7 -3
  75. package/dist/storage/read-cache.js +149 -18
  76. package/dist/storage/read-cache.js.map +1 -1
  77. package/dist/storage/vfs.d.ts +5 -2
  78. package/dist/storage/vfs.js +13 -3
  79. package/dist/storage/vfs.js.map +1 -1
  80. package/dist/tools/cross-sdk-agent.d.ts +8 -2
  81. package/dist/tools/cross-sdk-agent.js +81 -16
  82. package/dist/tools/cross-sdk-agent.js.map +1 -1
  83. package/dist/tools/pubsub-actor.d.ts +27 -0
  84. package/dist/tools/pubsub-actor.js +260 -0
  85. package/dist/tools/pubsub-actor.js.map +1 -0
  86. package/dist/transport.d.ts +25 -1
  87. package/dist/transport.js +175 -10
  88. package/dist/transport.js.map +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/package.json +1 -1
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import { CrossSdkTsAgent } from './cross-sdk-agent.js';
3
+ import { type EventService, type EventServiceStartOptions } from '../pubsub/index.js';
4
+ import type { JsonMap } from '../pubsub/types.js';
5
+ export declare function pubsubErrorCode(error: unknown): string;
6
+ export declare class PubSubActor {
7
+ readonly agent: CrossSdkTsAgent;
8
+ readonly role: string;
9
+ readonly serviceAid: string;
10
+ events?: EventService;
11
+ boundRole: string;
12
+ startupError: string;
13
+ ready: boolean;
14
+ readonly instances: Map<string, PubSubActor>;
15
+ readonly observations: JsonMap[];
16
+ readonly observationSubscriptions: Array<{
17
+ unsubscribe(): void;
18
+ }>;
19
+ busOptions: EventServiceStartOptions;
20
+ constructor(agent?: CrossSdkTsAgent, role?: string);
21
+ start(): Promise<void>;
22
+ close(): Promise<void>;
23
+ observeTransport(): void;
24
+ private openDevice;
25
+ identity(): JsonMap;
26
+ call(op: string, body: JsonMap): Promise<unknown>;
27
+ }
@@ -0,0 +1,260 @@
1
+ #!/usr/bin/env node
2
+ import * as http from 'node:http';
3
+ import * as fs from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import * as path from 'node:path';
6
+ import { randomUUID } from 'node:crypto';
7
+ import { CrossSdkTsAgent } from './cross-sdk-agent.js';
8
+ import { AID } from '../aid.js';
9
+ import { AUNClient } from '../client.js';
10
+ import { PubSubError } from '../pubsub/index.js';
11
+ const eventName = String(process.env.AUN_PUBSUB_EVENT ?? 'task.completed');
12
+ const catalog = {
13
+ [eventName]: {
14
+ description: 'cross-sdk event', schema_version: 1,
15
+ content_schema: { task_id: 'string', status: 'string' },
16
+ default_ttl_seconds: 30, max_ttl_seconds: 120,
17
+ },
18
+ };
19
+ const listEnv = (name) => String(process.env[name] ?? '').split(',').map(v => v.trim()).filter(Boolean);
20
+ const flag = (name) => ['1', 'true', 'yes', 'on'].includes(String(process.env[name] ?? '').trim().toLowerCase());
21
+ function stateFile(filename) {
22
+ let saving = Promise.resolve();
23
+ return {
24
+ async load() { try {
25
+ return JSON.parse(await fs.promises.readFile(filename, 'utf8'));
26
+ }
27
+ catch (error) {
28
+ if (error.code === 'ENOENT')
29
+ return null;
30
+ throw error;
31
+ } },
32
+ save(value) { const text = JSON.stringify(value); saving = saving.then(async () => { await fs.promises.mkdir(path.dirname(filename), { recursive: true }); await fs.promises.writeFile(`${filename}.tmp`, text, { mode: 0o600 }); await fs.promises.rename(`${filename}.tmp`, filename); }); return saving; },
33
+ };
34
+ }
35
+ const safe = (value) => {
36
+ try {
37
+ JSON.stringify(value);
38
+ return value;
39
+ }
40
+ catch {
41
+ return String(value);
42
+ }
43
+ };
44
+ export function pubsubErrorCode(error) {
45
+ const value = error;
46
+ return String(value?.data?.code || value?.stringCode || (typeof value?.code === 'string' ? value.code : '') || value?.name || 'Error');
47
+ }
48
+ export class PubSubActor {
49
+ agent;
50
+ role;
51
+ serviceAid = String(process.env.AUN_PUBSUB_SERVICE_AID ?? '').trim();
52
+ events;
53
+ boundRole = '';
54
+ startupError = '';
55
+ ready = false;
56
+ instances = new Map();
57
+ observations = [];
58
+ observationSubscriptions = [];
59
+ busOptions = {};
60
+ constructor(agent = new CrossSdkTsAgent(), role = String(process.env.AUN_PUBSUB_ROLE ?? 'client').trim() || 'client') {
61
+ this.agent = agent;
62
+ this.role = role;
63
+ }
64
+ async start() {
65
+ await this.agent.start();
66
+ const serviceAid = this.serviceAid || this.agent.aid;
67
+ this.events = this.agent.client.EventService;
68
+ this.observeTransport();
69
+ if (this.role === 'service') {
70
+ const allowAll = flag('AUN_PUBSUB_ALLOW_ALL');
71
+ const publishers = allowAll ? ['*'] : listEnv('AUN_PUBSUB_PUBLISHER_AIDS');
72
+ const subscribers = allowAll ? ['*'] : listEnv('AUN_PUBSUB_SUBSCRIBER_AIDS');
73
+ const statePath = String(process.env.AUN_PUBSUB_STATE_PATH ?? path.join(this.agent.aunPath, 'pubsub-service'));
74
+ this.busOptions = { catalog,
75
+ allowlist: { [eventName]: { publish_aids: publishers, subscribe_aids: subscribers } },
76
+ state: stateFile(path.join(statePath, 'event-service.json')),
77
+ credentialOptions: { state: stateFile(path.join(statePath, 'credential-state.json')) } };
78
+ await this.events.start(serviceAid, this.busOptions);
79
+ this.boundRole = 'bus';
80
+ }
81
+ this.ready = true;
82
+ }
83
+ async close() {
84
+ for (const child of this.instances.values())
85
+ await child.close();
86
+ this.instances.clear();
87
+ if (this.boundRole)
88
+ await this.events?.close(this.serviceAid || this.agent.aid);
89
+ for (const subscription of this.observationSubscriptions.splice(0))
90
+ subscription.unsubscribe();
91
+ await this.agent.close();
92
+ this.ready = false;
93
+ }
94
+ observeTransport() {
95
+ const receive = (value) => {
96
+ if (!value || typeof value !== 'object')
97
+ return;
98
+ const data = value, row = (data.inline_message ?? data);
99
+ this.observations.push(Object.fromEntries(['message_id', 'from_aid', 'sender_device_id', 'sender_slot_id', 'device_id', 'to_slot_id', 'volatile_cursor', 'message_class'].filter(key => key in row).map(key => [key, row[key]])));
100
+ if (this.observations.length > 256)
101
+ this.observations.splice(0, this.observations.length - 256);
102
+ };
103
+ for (const event of ['_raw.message.received', '_raw.peer.v2.message_received'])
104
+ this.observationSubscriptions.push(this.agent.client.on(event, receive));
105
+ }
106
+ async openDevice(instance, body) {
107
+ if (!instance || this.instances.has(instance) || this.instances.size >= 4)
108
+ throw new PubSubError('DEVICE_INSTANCE_INVALID');
109
+ const source = this.agent.client.currentAid;
110
+ const identity = AID._create({ aid: source.aid, aunPath: source.aunPath, certPem: source.certPem, privateKeyPem: source.privateKeyPem,
111
+ certValid: source.isCertValid(), privateKeyValid: source.isPrivateKeyValid(), deviceId: body.same_device ? source.deviceId : `pubsub-device-${randomUUID()}`,
112
+ slotId: `pubsub-slot-${randomUUID()}`, verifySsl: source.verifySsl, rootCaPath: source.rootCaPath, debug: source.debug });
113
+ const client = new AUNClient(identity);
114
+ client._configModel.requireForwardSecrecy = false;
115
+ const agent = { aid: source.aid, client, close: () => client.close(), identity: () => ({ aid: source.aid, device_id: identity.deviceId, slot_id: identity.slotId }) };
116
+ const child = new PubSubActor(agent, 'client');
117
+ child.busOptions = { catalog: this.busOptions.catalog, allowlist: this.busOptions.allowlist };
118
+ child.events = client.EventService;
119
+ child.observeTransport();
120
+ try {
121
+ await client.connect({ auto_reconnect: false, background_sync: body.background_sync !== false });
122
+ }
123
+ catch (error) {
124
+ await child.close();
125
+ throw error;
126
+ }
127
+ child.ready = true;
128
+ this.instances.set(instance, child);
129
+ return child.identity();
130
+ }
131
+ identity() {
132
+ return { ok: !this.startupError, ...this.agent.identity(), role: this.role,
133
+ service_aid: this.serviceAid || this.agent.aid, event: eventName, client_role: this.boundRole, facade: 'EventService', agent_ready: this.ready,
134
+ startup_error: this.startupError };
135
+ }
136
+ async call(op, body) {
137
+ if (!this.events)
138
+ throw new Error('PUBSUB_CLIENT_UNAVAILABLE');
139
+ body = { ...body };
140
+ const instance = String(body.instance ?? '');
141
+ delete body.instance;
142
+ if (op === 'device_open')
143
+ return this.openDevice(instance, body);
144
+ if (instance) {
145
+ const child = this.instances.get(instance);
146
+ if (!child)
147
+ throw new PubSubError('DEVICE_INSTANCE_INVALID');
148
+ if (op === 'device_close') {
149
+ await child.close();
150
+ this.instances.delete(instance);
151
+ return { closed: true };
152
+ }
153
+ return child.call(op, body);
154
+ }
155
+ const bus_aid = String(body.bus_aid ?? (this.serviceAid || this.agent.aid));
156
+ delete body.bus_aid;
157
+ switch (op) {
158
+ case 'bus_start': {
159
+ const options = { ...this.busOptions };
160
+ for (const key of ['catalog', 'allowlist'])
161
+ if (body[key] !== undefined)
162
+ Object.assign(options, { [key]: body[key] });
163
+ await this.events.start(bus_aid, options);
164
+ this.boundRole = 'bus';
165
+ return { started: true };
166
+ }
167
+ case 'bus_stop':
168
+ await this.events.close(bus_aid);
169
+ return { stopped: true };
170
+ case 'update_config':
171
+ await this.events.updateConfig(bus_aid, Object.fromEntries(Object.entries(body).filter(([key]) => key === 'catalog' || key === 'allowlist')));
172
+ return { updated: true };
173
+ case 'transport': {
174
+ const method = String(body.method);
175
+ if (!['message.peers', 'message.pull', 'message.ack'].includes(method))
176
+ throw new PubSubError('TRANSPORT_METHOD_INVALID');
177
+ return this.agent.client.call(method, body.params ?? {});
178
+ }
179
+ case 'observations': {
180
+ const messages = [...this.observations];
181
+ if (body.clear)
182
+ this.observations.length = 0;
183
+ return { messages };
184
+ }
185
+ case 'catalog': return this.events.catalog(bus_aid, body);
186
+ case 'authorize': {
187
+ const role = String(body.role ?? '');
188
+ if (role !== 'pub' && role !== 'sub')
189
+ throw new PubSubError('INVALID_ROLE');
190
+ this.boundRole ||= role;
191
+ return this.events.authorize(bus_aid, role, String(body.auth_mode ?? 'allowlist'), body.events ?? [eventName], body.credential);
192
+ }
193
+ case 'subscribe': return this.events.subscribe(bus_aid, body.events ?? [eventName]);
194
+ case 'unsubscribe': return this.events.unsubscribe(bus_aid, body.events ?? [eventName]);
195
+ case 'renew': return this.events.renew(bus_aid);
196
+ case 'publish': return { event_id: await this.events.publish(bus_aid, String(body.event_name ?? eventName), body.data, { schemaVersion: Number(body.schema_version ?? 1), ttlSeconds: Number(body.ttl_seconds ?? 30), replyMode: String(body.reply_mode ?? 'none'), eventId: body.event_id }) };
197
+ case 'wait_published': return this.events.waitPublished(bus_aid, String(body.event_id));
198
+ case 'next': return this.events.nextEvent(bus_aid, Number(body.timeout_seconds ?? 10));
199
+ case 'stats': return this.events.stats(bus_aid, body);
200
+ case 'issue_grant': return this.events.issueGrant(bus_aid, body);
201
+ case 'revoke_grant': return this.events.revokeGrant(bus_aid, body);
202
+ default: throw new PubSubError('INVALID_OPERATION');
203
+ }
204
+ }
205
+ }
206
+ async function readJson(req) {
207
+ const chunks = [];
208
+ for await (const chunk of req)
209
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
210
+ if (!chunks.length)
211
+ return {};
212
+ try {
213
+ const value = JSON.parse(Buffer.concat(chunks).toString('utf8'));
214
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
215
+ }
216
+ catch {
217
+ return {};
218
+ }
219
+ }
220
+ function send(res, status, body) {
221
+ const text = JSON.stringify(safe(body));
222
+ res.writeHead(status, { 'content-type': 'application/json; charset=utf-8', 'content-length': Buffer.byteLength(text) });
223
+ res.end(text);
224
+ }
225
+ async function main() {
226
+ const actor = new PubSubActor();
227
+ void actor.start().catch(error => { actor.startupError = `${error instanceof Error ? error.name : 'Error'}: ${error instanceof Error ? error.message : String(error)}`; });
228
+ const server = http.createServer(async (req, res) => {
229
+ try {
230
+ const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
231
+ if (req.method === 'GET' && url.pathname === '/identity') {
232
+ send(res, 200, actor.identity());
233
+ return;
234
+ }
235
+ if (req.method === 'GET' && url.pathname === '/health') {
236
+ send(res, actor.startupError ? 503 : 200, actor.identity());
237
+ return;
238
+ }
239
+ if (req.method === 'POST' && url.pathname.startsWith('/pubsub/')) {
240
+ const result = await actor.call(url.pathname.slice('/pubsub/'.length), await readJson(req));
241
+ send(res, 200, { ok: true, result: safe(result) });
242
+ return;
243
+ }
244
+ send(res, 404, { ok: false, error_code: 'not_found' });
245
+ }
246
+ catch (error) {
247
+ const code = pubsubErrorCode(error);
248
+ send(res, 400, { ok: false, error_code: code, error_message: error instanceof Error ? error.message : String(error) });
249
+ }
250
+ });
251
+ const host = String(process.env.AUN_CONTROL_HOST ?? '0.0.0.0');
252
+ const port = Number(process.env.AUN_CONTROL_PORT ?? 9001) || 9001;
253
+ server.listen(port, host, () => console.log(`pubsub ts actor listening on ${host}:${port}`));
254
+ const stop = async () => { server.close(); await actor.close(); process.exit(0); };
255
+ process.on('SIGINT', () => { void stop(); });
256
+ process.on('SIGTERM', () => { void stop(); });
257
+ }
258
+ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url))
259
+ void main();
260
+ //# sourceMappingURL=pubsub-actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub-actor.js","sourceRoot":"","sources":["../../src/tools/pubsub-actor.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import type { EventDispatcher } from './events.js';
11
11
  import { type ModuleLogger } from './logger.js';
12
12
  import { type JsonObject, type RpcMessage, type RpcParams, type RpcResult } from './types.js';
13
13
  import { type ServiceEventVerificationResult } from './org-protocol.js';
14
+ export type RpcBackground = false | true | 'event' | 'pull';
14
15
  /** 断线回调,closeCode 为 WebSocket close code(1006 = 网络异常断开,其他 = 服务端主动关闭) */
15
16
  export type DisconnectCallback = (error: Error | null, closeCode?: number) => void | Promise<void>;
16
17
  /** RPC envelope 的 _meta 字段观察者;observer 抛错被吞掉,不影响业务。 */
@@ -51,9 +52,14 @@ export declare class RPCTransport {
51
52
  private _pending;
52
53
  private _pendingMeta;
53
54
  private _pendingBackground;
55
+ private _pendingEvent;
56
+ private _pendingPull;
54
57
  private _rpcQueue;
55
58
  private _backgroundRpcQueue;
56
59
  private _drainingRpcQueue;
60
+ private _rateLimitUntil;
61
+ private _rateLimitTimer;
62
+ private _rateLimitWaiters;
57
63
  _onForegroundDrained?: () => void;
58
64
  _onRpcResponse?: () => void;
59
65
  private _sendQueue;
@@ -82,6 +88,16 @@ export declare class RPCTransport {
82
88
  private _workerConnectAttempt;
83
89
  private _workerBufferedEvents;
84
90
  private _workerOptions;
91
+ get inflightCounts(): {
92
+ total: number;
93
+ background: number;
94
+ event: number;
95
+ pull: number;
96
+ };
97
+ get foregroundWaiting(): number;
98
+ _eventBackpressure(timeout?: number): Promise<boolean> & {
99
+ cancel?: () => void;
100
+ };
85
101
  constructor(opts: {
86
102
  eventDispatcher: EventDispatcher;
87
103
  timeout?: number;
@@ -158,7 +174,7 @@ export declare class RPCTransport {
158
174
  /**
159
175
  * 发送 JSON-RPC 2.0 请求并等待响应。
160
176
  */
161
- call(method: string, params?: RpcParams, timeout?: number, trace?: string, background?: boolean): Promise<RpcResult>;
177
+ call(method: string, params?: RpcParams, timeout?: number, trace?: string, background?: RpcBackground): Promise<RpcResult>;
162
178
  private _callWithSent;
163
179
  private _call;
164
180
  private _callAdmitted;
@@ -169,6 +185,14 @@ export declare class RPCTransport {
169
185
  private _notifyLocal;
170
186
  private _messagePriority;
171
187
  private _isRiskControlMethod;
188
+ _rateLimitRemainingMs(): number;
189
+ private _rateLimitError;
190
+ _waitRateLimit(timeout?: number, signal?: AbortSignal): Promise<void>;
191
+ _observeRateLimit(error: {
192
+ code?: unknown;
193
+ data?: unknown;
194
+ }): void;
195
+ private _canDispatch;
172
196
  private _enqueueSend;
173
197
  private _startSendQueue;
174
198
  private _sendText;