@agentunion/fastaun 0.5.34 → 0.5.36
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/CHANGELOG.md +56 -1
- package/_packed_docs/CHANGELOG.md +56 -1
- package/_packed_docs/INDEX.md +18 -11
- package/_packed_docs/KITE_DOCS_GUIDE.md +9 -9
- package/_packed_docs/agent.md/SCHEMA.md +1 -1
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +2 -2
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +17 -17
- package/_packed_docs/protocol/echo-probe-gateway.md +99 -0
- package/_packed_docs/protocol/echo-probe-sdk.md +91 -0
- package/_packed_docs/sdk/0.5.35-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +189 -0
- package/_packed_docs/sdk/0.5.35-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +204 -0
- package/_packed_docs/sdk/0.5.36-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +130 -0
- package/_packed_docs/sdk/0.5.36-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +176 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +2 -2
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +32 -6
- package/_packed_docs/sdk/09-group-rpc-manual.md +7 -7
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +13 -13
- 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 +73 -3
- 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 +50 -8
- package/_packed_docs/sdk/INDEX.md +23 -18
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +1 -1
- package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +5 -5
- package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +5 -5
- package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +9 -9
- package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/345/256/236/346/226/275/350/256/241/345/210/222.md +400 -0
- package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/346/226/271/346/241/210.md +485 -0
- package/dist/agent-md.d.ts +2 -1
- package/dist/agent-md.js +33 -6
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.js +5 -1
- package/dist/aid-store.js.map +1 -1
- package/dist/auth.js +36 -45
- package/dist/auth.js.map +1 -1
- package/dist/client/delivery.d.ts +8 -1
- package/dist/client/delivery.js +203 -50
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/lifecycle.js +10 -1
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +4 -0
- package/dist/client/rpc-pipeline.js +93 -10
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/sync-channels.d.ts +2 -1
- package/dist/client/sync-channels.js +33 -14
- package/dist/client/sync-channels.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +1 -0
- package/dist/client/v2-e2ee.js +24 -6
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +15 -0
- package/dist/client.js +329 -56
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +1 -0
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mail-client.d.ts +101 -0
- package/dist/mail-client.js +369 -0
- package/dist/mail-client.js.map +1 -0
- package/dist/ownership-v21.d.ts +2 -1
- package/dist/ownership-v21.js +19 -9
- package/dist/ownership-v21.js.map +1 -1
- package/dist/pubsub/binding.js +9 -2
- package/dist/pubsub/binding.js.map +1 -1
- package/dist/pubsub/channel.d.ts +11 -3
- package/dist/pubsub/channel.js +91 -10
- package/dist/pubsub/channel.js.map +1 -1
- package/dist/pubsub/client.d.ts +8 -2
- package/dist/pubsub/client.js +62 -21
- package/dist/pubsub/client.js.map +1 -1
- package/dist/pubsub/index.d.ts +2 -2
- package/dist/pubsub/index.js +1 -1
- package/dist/pubsub/index.js.map +1 -1
- package/dist/pubsub/service.d.ts +6 -0
- package/dist/pubsub/service.js +101 -10
- package/dist/pubsub/service.js.map +1 -1
- package/dist/pubsub/types.d.ts +11 -1
- package/dist/tools/cross-sdk-agent.d.ts +1 -1
- package/dist/transport.d.ts +4 -0
- package/dist/transport.js +39 -2
- package/dist/transport.js.map +1 -1
- package/dist/udp-standby.d.ts +88 -0
- package/dist/udp-standby.js +483 -0
- package/dist/udp-standby.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -1
- package/scripts/patch-imapflow-external.mjs +69 -0
package/dist/pubsub/channel.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type { EventRoute, JsonMap } from './types.js';
|
|
1
|
+
import type { EventRoute, JsonMap, PublisherFilter } from './types.js';
|
|
2
|
+
export declare function validatePattern(pattern: string): void;
|
|
3
|
+
export declare function matchPattern(pattern: string, value: string): boolean;
|
|
4
|
+
export declare function publisherFilter(value: unknown): PublisherFilter;
|
|
2
5
|
export interface PubSubSDK {
|
|
3
6
|
aid: string | null;
|
|
4
7
|
call(method: string, params?: any, options?: any): Promise<any>;
|
|
@@ -28,9 +31,10 @@ export declare class TokenBucket {
|
|
|
28
31
|
export declare class SDKChannel {
|
|
29
32
|
readonly sdk: PubSubSDK;
|
|
30
33
|
readonly serviceAid: string;
|
|
31
|
-
readonly receiver: (sender: string, payload: JsonMap, route?: EventRoute) => boolean | void;
|
|
34
|
+
readonly receiver: (sender: string, payload: JsonMap, route?: EventRoute, local?: boolean) => boolean | void;
|
|
32
35
|
readonly clock: () => number;
|
|
33
36
|
readonly publishReceiver: boolean;
|
|
37
|
+
readonly localActive?: (() => boolean) | undefined;
|
|
34
38
|
private started;
|
|
35
39
|
private subscription?;
|
|
36
40
|
private unregister?;
|
|
@@ -38,11 +42,15 @@ export declare class SDKChannel {
|
|
|
38
42
|
private rate;
|
|
39
43
|
private generation;
|
|
40
44
|
private waits;
|
|
41
|
-
|
|
45
|
+
private capacityWaiters;
|
|
46
|
+
constructor(sdk: PubSubSDK, serviceAid: string, receiver: (sender: string, payload: JsonMap, route?: EventRoute, local?: boolean) => boolean | void, clock?: () => number, publishReceiver?: boolean, localActive?: (() => boolean) | undefined);
|
|
42
47
|
private readonly receiveEvent;
|
|
43
48
|
private readonly receive;
|
|
49
|
+
private receivePayload;
|
|
44
50
|
start(): void;
|
|
45
51
|
close(): void;
|
|
52
|
+
notifyCapacity(): void;
|
|
53
|
+
private waitCapacity;
|
|
46
54
|
private pause;
|
|
47
55
|
private pressure;
|
|
48
56
|
send(to: string, payload: JsonMap, ttl: number, messageId: string, background?: boolean, deadline?: number, route?: EventRoute): Promise<JsonMap>;
|
package/dist/pubsub/channel.js
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
import { PubSubError } from './errors.js';
|
|
2
2
|
import { slotIsolationKey } from '../config.js';
|
|
3
|
+
export function validatePattern(pattern) { if (typeof pattern !== 'string' || pattern.includes('**') || pattern.split('.').some(part => !part))
|
|
4
|
+
throw new PubSubError('INVALID_PATTERN'); }
|
|
5
|
+
export function matchPattern(pattern, value) {
|
|
6
|
+
const patterns = pattern.split('.'), values = value.split('.');
|
|
7
|
+
if (patterns.length !== values.length || values.some(part => !part))
|
|
8
|
+
return false;
|
|
9
|
+
return patterns.every((part, layer) => {
|
|
10
|
+
const value = values[layer];
|
|
11
|
+
let p = 0, v = 0, star = -1, next = 0;
|
|
12
|
+
while (v < value.length) {
|
|
13
|
+
if (part[p] === '*') {
|
|
14
|
+
star = p++;
|
|
15
|
+
next = v;
|
|
16
|
+
}
|
|
17
|
+
else if (p < part.length && part[p] === value[v]) {
|
|
18
|
+
p++;
|
|
19
|
+
v++;
|
|
20
|
+
}
|
|
21
|
+
else if (star >= 0) {
|
|
22
|
+
p = star + 1;
|
|
23
|
+
v = ++next;
|
|
24
|
+
}
|
|
25
|
+
else
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
while (part[p] === '*')
|
|
29
|
+
p++;
|
|
30
|
+
return p === part.length;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function publisherFilter(value) {
|
|
34
|
+
const filter = {};
|
|
35
|
+
for (const key of ['publisher_aids', 'publisher_types', 'publisher_exttypes']) {
|
|
36
|
+
const items = value?.[key];
|
|
37
|
+
if (items === undefined)
|
|
38
|
+
continue;
|
|
39
|
+
if (!Array.isArray(items) || !items.length || items.length > 64 || items.some(item => typeof item !== 'string' || !item || new TextEncoder().encode(item).byteLength > 256))
|
|
40
|
+
throw new PubSubError('INVALID_FILTER');
|
|
41
|
+
items.forEach(validatePattern);
|
|
42
|
+
filter[key] = [...items];
|
|
43
|
+
}
|
|
44
|
+
return filter;
|
|
45
|
+
}
|
|
3
46
|
export const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
4
47
|
export const clone = (value) => structuredClone(value);
|
|
5
48
|
export const wireSize = (value) => new TextEncoder().encode(JSON.stringify(value)).byteLength;
|
|
@@ -32,23 +75,25 @@ export function defaultState(sdk, serviceAid, kind) {
|
|
|
32
75
|
export class TokenBucket {
|
|
33
76
|
clock;
|
|
34
77
|
calls = 4;
|
|
35
|
-
bytes =
|
|
78
|
+
bytes = 1_000_000;
|
|
36
79
|
updated;
|
|
37
80
|
constructor(clock = () => performance.now()) {
|
|
38
81
|
this.clock = clock;
|
|
39
82
|
this.updated = clock();
|
|
40
83
|
}
|
|
41
|
-
delay(size) { if (size >
|
|
42
|
-
throw new PubSubError('MESSAGE_TOO_LARGE'); const now = this.clock(), elapsed = Math.max(0, now - this.updated); this.calls = Math.min(4, this.calls + elapsed * 0.04); this.bytes = Math.min(
|
|
84
|
+
delay(size) { if (size > 1_000_000)
|
|
85
|
+
throw new PubSubError('MESSAGE_TOO_LARGE'); const now = this.clock(), elapsed = Math.max(0, now - this.updated); this.calls = Math.min(4, this.calls + elapsed * 0.04); this.bytes = Math.min(1_000_000, this.bytes + elapsed * 262.144); this.updated = now; return Math.max(0, (1 - this.calls) / 0.04, (size - this.bytes) / 262.144); }
|
|
43
86
|
take(size) { if (this.delay(size) > 0)
|
|
44
87
|
return false; this.calls--; this.bytes -= size; return true; }
|
|
45
88
|
}
|
|
89
|
+
const localChannels = new WeakMap();
|
|
46
90
|
export class SDKChannel {
|
|
47
91
|
sdk;
|
|
48
92
|
serviceAid;
|
|
49
93
|
receiver;
|
|
50
94
|
clock;
|
|
51
95
|
publishReceiver;
|
|
96
|
+
localActive;
|
|
52
97
|
started = false;
|
|
53
98
|
subscription;
|
|
54
99
|
unregister;
|
|
@@ -56,12 +101,14 @@ export class SDKChannel {
|
|
|
56
101
|
rate = new TokenBucket();
|
|
57
102
|
generation = 0;
|
|
58
103
|
waits = new Set();
|
|
59
|
-
|
|
104
|
+
capacityWaiters = new Set();
|
|
105
|
+
constructor(sdk, serviceAid, receiver, clock = () => Date.now(), publishReceiver = false, localActive) {
|
|
60
106
|
this.sdk = sdk;
|
|
61
107
|
this.serviceAid = serviceAid;
|
|
62
108
|
this.receiver = receiver;
|
|
63
109
|
this.clock = clock;
|
|
64
110
|
this.publishReceiver = publishReceiver;
|
|
111
|
+
this.localActive = localActive;
|
|
65
112
|
}
|
|
66
113
|
receiveEvent = (message) => { this.receive(message); };
|
|
67
114
|
receive = (message) => {
|
|
@@ -76,28 +123,35 @@ export class SDKChannel {
|
|
|
76
123
|
const route = device && slot ? { device_id: device, slot_id: slot } : undefined;
|
|
77
124
|
if (this.publishReceiver && !route)
|
|
78
125
|
return;
|
|
79
|
-
|
|
126
|
+
return this.receivePayload(sender, message.payload, message.message_id, route);
|
|
127
|
+
};
|
|
128
|
+
receivePayload(sender, payload, messageId, route, local = false) {
|
|
129
|
+
if (typeof messageId === 'string' && messageId) {
|
|
80
130
|
const now = this.clock();
|
|
81
131
|
for (const [key, expires] of this.seen)
|
|
82
132
|
if (expires <= now)
|
|
83
133
|
this.seen.delete(key);
|
|
84
|
-
const key = `${sender}\0${
|
|
134
|
+
const key = `${sender}\0${messageId}`;
|
|
85
135
|
if (this.seen.has(key))
|
|
86
136
|
return true;
|
|
87
|
-
if (this.receiver(sender,
|
|
137
|
+
if ((local ? this.receiver(sender, payload, route, true) : this.receiver(sender, payload, route)) === false)
|
|
88
138
|
return false;
|
|
89
|
-
this.seen.set(key, Math.min(Number(
|
|
139
|
+
this.seen.set(key, Math.min(Number(payload.expires_at ?? now + 60_000), now + 3_600_000));
|
|
90
140
|
if (this.seen.size > 4096)
|
|
91
141
|
this.seen.delete(this.seen.keys().next().value);
|
|
92
142
|
}
|
|
93
|
-
else if (this.receiver(sender,
|
|
143
|
+
else if ((local ? this.receiver(sender, payload, route, true) : this.receiver(sender, payload, route)) === false)
|
|
94
144
|
return false;
|
|
95
145
|
return true;
|
|
96
|
-
}
|
|
146
|
+
}
|
|
97
147
|
start() {
|
|
98
148
|
if (this.started)
|
|
99
149
|
return;
|
|
100
150
|
this.started = true;
|
|
151
|
+
let channels = localChannels.get(this.sdk);
|
|
152
|
+
if (!channels)
|
|
153
|
+
localChannels.set(this.sdk, channels = new Set());
|
|
154
|
+
channels.add(this);
|
|
101
155
|
const controls = this.sdk._controlMessages?.();
|
|
102
156
|
if (typeof controls?.registerPubsub === 'function')
|
|
103
157
|
this.unregister = controls.registerPubsub(this.receive, { serviceAid: this.serviceAid, clock: this.clock, publishReceiver: this.publishReceiver });
|
|
@@ -109,6 +163,8 @@ export class SDKChannel {
|
|
|
109
163
|
close() {
|
|
110
164
|
this.started = false;
|
|
111
165
|
this.generation++;
|
|
166
|
+
localChannels.get(this.sdk)?.delete(this);
|
|
167
|
+
this.notifyCapacity();
|
|
112
168
|
for (const cancel of [...this.waits])
|
|
113
169
|
cancel();
|
|
114
170
|
this.unregister?.();
|
|
@@ -118,6 +174,9 @@ export class SDKChannel {
|
|
|
118
174
|
this.subscription = undefined;
|
|
119
175
|
this.seen.clear();
|
|
120
176
|
}
|
|
177
|
+
notifyCapacity() { for (const wake of [...this.capacityWaiters])
|
|
178
|
+
wake(); }
|
|
179
|
+
waitCapacity(target, deadline) { return new Promise((resolve, reject) => { const cleanup = () => { clearTimeout(timer); target.capacityWaiters.delete(wake); this.waits.delete(cancel); }; const wake = () => { cleanup(); resolve(); }; const cancel = () => { cleanup(); reject(new PubSubError('CLOSED')); }; const timer = setTimeout(wake, Math.max(1, deadline - this.clock())); target.capacityWaiters.add(wake); this.waits.add(cancel); }); }
|
|
121
180
|
pause(delay, generation) { return new Promise((resolve, reject) => { const cancel = () => { clearTimeout(timer); this.waits.delete(cancel); reject(new PubSubError('CLOSED')); }; const timer = setTimeout(() => { this.waits.delete(cancel); if (generation !== this.generation)
|
|
122
181
|
reject(new PubSubError('CLOSED'));
|
|
123
182
|
else
|
|
@@ -129,6 +188,28 @@ export class SDKChannel {
|
|
|
129
188
|
resolve(value); }, reject).finally(() => this.waits.delete(cancel)); }); }
|
|
130
189
|
async send(to, payload, ttl, messageId, background = false, deadline, route) {
|
|
131
190
|
const generation = this.generation, expires = Number(payload.expires_at ?? this.clock() + ttl * 1000), operationDeadline = Math.min(expires, deadline ?? Infinity);
|
|
191
|
+
const device = typeof this.sdk._deviceId === 'string' ? this.sdk._deviceId.trim() : '', slot = typeof this.sdk._slotId === 'string' ? this.sdk._slotId.trim() : '';
|
|
192
|
+
const localRoute = route ? route.device_id === device && !!route.slot_id && slotIsolationKey(route.slot_id) === slotIsolationKey(slot) : !this.publishReceiver;
|
|
193
|
+
const targets = this.started && this.sdk.aid === to && this.serviceAid === to && device && slot && localRoute ? [...(localChannels.get(this.sdk) ?? [])].filter(target => target.serviceAid === this.serviceAid && (this.publishReceiver ? !target.publishReceiver && !!this.localActive : target.publishReceiver && !!target.localActive)) : [];
|
|
194
|
+
if (targets.length) {
|
|
195
|
+
const snapshot = JSON.parse(JSON.stringify(payload)), generations = new Map(targets.map(target => [target, target.generation]));
|
|
196
|
+
await Promise.resolve();
|
|
197
|
+
for (const target of targets)
|
|
198
|
+
while (true) {
|
|
199
|
+
if (generation !== this.generation || !this.started)
|
|
200
|
+
throw new PubSubError('CLOSED');
|
|
201
|
+
if (!target.started || target.generation !== generations.get(target) || (this.publishReceiver ? !this.localActive?.() : !target.localActive?.()))
|
|
202
|
+
throw new PubSubError('SERVICE_LEASE_LOST');
|
|
203
|
+
if (this.clock() >= operationDeadline)
|
|
204
|
+
throw new PubSubError(operationDeadline < expires ? 'TIMEOUT' : 'EXPIRED');
|
|
205
|
+
if (expires - this.clock() < 1000 || !Number.isInteger(ttl) || ttl < 1)
|
|
206
|
+
throw new PubSubError('EXPIRED');
|
|
207
|
+
if (target.receivePayload(this.sdk.aid, JSON.parse(JSON.stringify(snapshot)), messageId, { device_id: device, slot_id: slot }, true) !== false)
|
|
208
|
+
break;
|
|
209
|
+
await this.waitCapacity(target, operationDeadline);
|
|
210
|
+
}
|
|
211
|
+
return { storage: 'volatile' };
|
|
212
|
+
}
|
|
132
213
|
if (background) {
|
|
133
214
|
const size = wireSize(payload), transport = this.sdk._transport;
|
|
134
215
|
while (true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/pubsub/channel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/pubsub/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/pubsub/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SDKChannel, type PubSubSDK } from './channel.js';
|
|
2
|
-
import type { JsonMap } from './types.js';
|
|
2
|
+
import type { JsonMap, SubscribeOptions } from './types.js';
|
|
3
3
|
export interface PubSubClientOptions {
|
|
4
4
|
clock?: () => number;
|
|
5
5
|
limits?: Record<string, number>;
|
|
@@ -24,6 +24,9 @@ export declare class PubSubClient {
|
|
|
24
24
|
lease: JsonMap | null;
|
|
25
25
|
private auth?;
|
|
26
26
|
private subscriptions;
|
|
27
|
+
private subscriptionFilters;
|
|
28
|
+
private subscriptionVersions;
|
|
29
|
+
private subscriptionGeneration;
|
|
27
30
|
private subscriptionChain;
|
|
28
31
|
private catalogEntries;
|
|
29
32
|
private catalogHistory;
|
|
@@ -73,7 +76,10 @@ export declare class PubSubClient {
|
|
|
73
76
|
authorize(authMode: 'allowlist' | 'credential', events: string[], actions: Array<'publish' | 'subscribe'>, credential?: JsonMap): Promise<JsonMap>;
|
|
74
77
|
private setLease;
|
|
75
78
|
private serializeSubscriptions;
|
|
76
|
-
|
|
79
|
+
private checkSubscriptionBudget;
|
|
80
|
+
private pruneSubscriptionFilters;
|
|
81
|
+
private restoreSubscriptions;
|
|
82
|
+
subscribe(events: string[], options?: SubscribeOptions): Promise<JsonMap>;
|
|
77
83
|
unsubscribe(events: string[]): Promise<JsonMap>;
|
|
78
84
|
renew(): Promise<JsonMap>;
|
|
79
85
|
private cacheCatalog;
|
package/dist/pubsub/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildRequestBinding, digest } from '../org-protocol.js';
|
|
2
2
|
import { PubSubError } from './errors.js';
|
|
3
|
-
import { SDKChannel, TokenBucket, clone, defaultState, identifier, object, wireSize } from './channel.js';
|
|
3
|
+
import { SDKChannel, TokenBucket, clone, defaultState, identifier, object, wireSize, matchPattern, publisherFilter } from './channel.js';
|
|
4
4
|
function deferred() { let resolve, reject; const value = { promise: new Promise((r, j) => { resolve = r; reject = j; }), resolve: (_) => { }, reject: (_) => { }, settled: false }; value.resolve = v => { if (!value.settled) {
|
|
5
5
|
value.settled = true;
|
|
6
6
|
resolve(v);
|
|
@@ -17,6 +17,9 @@ export class PubSubClient {
|
|
|
17
17
|
lease = null;
|
|
18
18
|
auth;
|
|
19
19
|
subscriptions = new Set();
|
|
20
|
+
subscriptionFilters = new Map();
|
|
21
|
+
subscriptionVersions = new Map();
|
|
22
|
+
subscriptionGeneration = 0;
|
|
20
23
|
subscriptionChain = Promise.resolve();
|
|
21
24
|
catalogEntries = new Map();
|
|
22
25
|
catalogHistory = new Map();
|
|
@@ -53,8 +56,8 @@ export class PubSubClient {
|
|
|
53
56
|
this.sdk = sdk;
|
|
54
57
|
this.serviceAid = serviceAid;
|
|
55
58
|
this.clock = options.clock ?? (() => Date.now());
|
|
56
|
-
this.limits = { publish_queue_size: 256, publish_queue_bytes: 1048576, publish_workers: 4, pending_requests: 64, accepted_requests: 64, receive_queue_size: 256, receive_queue_bytes: 1048576,
|
|
57
|
-
this.channel = new SDKChannel(sdk, serviceAid, (sender, payload) => this.receive(sender, payload), this.clock);
|
|
59
|
+
this.limits = { publish_queue_size: 256, publish_queue_bytes: 1048576, publish_workers: 4, pending_requests: 64, accepted_requests: 64, receive_queue_size: 256, receive_queue_bytes: 1048576, publish_results: 1024, publish_result_bytes: 4194304, send_attempts: 2, request_timeout: 60, renew_interval_seconds: 3600, ...options.limits };
|
|
60
|
+
this.channel = new SDKChannel(sdk, serviceAid, (sender, payload, _route, local) => this.receive(sender, payload, local), this.clock);
|
|
58
61
|
this.state = defaultState(sdk, serviceAid, options.stateKey ?? 'client');
|
|
59
62
|
}
|
|
60
63
|
async start() {
|
|
@@ -70,6 +73,9 @@ export class PubSubClient {
|
|
|
70
73
|
if (saved?.service_aid === this.serviceAid) {
|
|
71
74
|
this.auth = saved.auth;
|
|
72
75
|
this.subscriptions = new Set(saved.subscriptions ?? []);
|
|
76
|
+
if (wireSize(saved.subscription_filters ?? []) > 8 * 1024 * 1024)
|
|
77
|
+
throw new PubSubError('OVERLOADED');
|
|
78
|
+
this.subscriptionFilters = new Map((saved.subscription_filters ?? []).filter(([event]) => this.subscriptions.has(event)).map(([event, filter]) => [event, publisherFilter(filter)]));
|
|
73
79
|
this.cacheCatalog({ items: saved.catalog ?? [] });
|
|
74
80
|
for (const item of saved.publications ?? []) {
|
|
75
81
|
const record = { payload: clone(item.payload), fingerprint: item.fingerprint, bytes: wireSize(item.payload), result: deferred(), durable: true };
|
|
@@ -106,7 +112,7 @@ export class PubSubClient {
|
|
|
106
112
|
return this.starting;
|
|
107
113
|
}
|
|
108
114
|
saveState(publication) {
|
|
109
|
-
const records = [...this.results.values()], value = clone({ version: 1, service_aid: this.serviceAid, auth: this.auth, catalog: [...this.catalogEntries].map(([event_name, entry]) => ({ ...entry, event_name })), subscriptions: [...this.subscriptions] });
|
|
115
|
+
const records = [...this.results.values()], value = clone({ version: 1, service_aid: this.serviceAid, auth: this.auth, catalog: [...this.catalogEntries].map(([event_name, entry]) => ({ ...entry, event_name })), subscriptions: [...this.subscriptions], subscription_filters: [...this.subscriptionFilters] });
|
|
110
116
|
const write = this.stateWrite.then(() => {
|
|
111
117
|
const retained = records.map(record => record.durable || record === publication ? record : record.previous).filter((record) => !!record && !record.published);
|
|
112
118
|
for (const record of retained)
|
|
@@ -133,7 +139,7 @@ export class PubSubClient {
|
|
|
133
139
|
table.clear();
|
|
134
140
|
} for (const record of this.results.values())
|
|
135
141
|
record.result.reject(new PubSubError('CLOSED')); for (const waiter of this.waiters)
|
|
136
|
-
waiter.reject(new PubSubError('CLOSED')); this.waiters = []; this.queue = []; this.events = []; this.seen.clear(); this.results.clear(); this.queuedBytes = this.resultBytes = 0; this.lease = null; this.auth = undefined; this.subscriptions.clear(); this.subscriptionsPending = false; this.signal(); await this.stateWrite; }
|
|
142
|
+
waiter.reject(new PubSubError('CLOSED')); this.waiters = []; this.queue = []; this.events = []; this.seen.clear(); this.results.clear(); this.queuedBytes = this.resultBytes = 0; this.lease = null; this.auth = undefined; this.subscriptions.clear(); this.subscriptionFilters.clear(); this.subscriptionVersions.clear(); this.subscriptionsPending = false; this.signal(); await this.stateWrite; }
|
|
137
143
|
signal() { const previous = this.changed; this.changed = deferred(); previous.resolve(); }
|
|
138
144
|
scheduleRenewal() { if (this.renewTimer)
|
|
139
145
|
clearTimeout(this.renewTimer); this.renewTimer = undefined; if (!this.running || !this.auth || !this.lease)
|
|
@@ -210,10 +216,11 @@ export class PubSubClient {
|
|
|
210
216
|
this.cacheCatalog({ items: [...entries.values()] });
|
|
211
217
|
this.auth = auth;
|
|
212
218
|
this.subscriptions = new Set([...this.subscriptions].filter(event => auth.actions.includes('subscribe') && auth.events.includes(event)));
|
|
219
|
+
this.pruneSubscriptionFilters();
|
|
213
220
|
this.setLease(result);
|
|
214
221
|
this.subscriptionsPending = this.subscriptions.size > 0;
|
|
215
222
|
if (this.subscriptionsPending) {
|
|
216
|
-
await this.
|
|
223
|
+
await this.restoreSubscriptions();
|
|
217
224
|
check();
|
|
218
225
|
this.subscriptionsPending = false;
|
|
219
226
|
}
|
|
@@ -224,17 +231,52 @@ export class PubSubClient {
|
|
|
224
231
|
}
|
|
225
232
|
setLease(result) { const { catalog: _catalog, ...lease } = result; this.lease = { ...this.lease, ...lease }; this.nextRenewAt = this.clock() + Number(result.renew_after_seconds ?? this.limits.renew_interval_seconds) * 1000; this.scheduleRenewal(); }
|
|
226
233
|
serializeSubscriptions(action) { const result = this.subscriptionChain.then(action); this.subscriptionChain = result.then(() => { }, () => { }); return result; }
|
|
227
|
-
|
|
228
|
-
throw new PubSubError('
|
|
229
|
-
|
|
230
|
-
|
|
234
|
+
checkSubscriptionBudget(filters) { if (wireSize([...filters]) > 8 * 1024 * 1024)
|
|
235
|
+
throw new PubSubError('OVERLOADED'); }
|
|
236
|
+
pruneSubscriptionFilters() { for (const event of this.subscriptionFilters.keys())
|
|
237
|
+
if (!this.subscriptions.has(event)) {
|
|
238
|
+
this.subscriptionFilters.delete(event);
|
|
239
|
+
this.subscriptionVersions.delete(event);
|
|
240
|
+
} }
|
|
241
|
+
async restoreSubscriptions() {
|
|
242
|
+
const groups = new Map();
|
|
243
|
+
for (const event of this.subscriptions) {
|
|
244
|
+
const filter = this.subscriptionFilters.get(event) ?? {}, key = JSON.stringify(filter);
|
|
245
|
+
let group = groups.get(key);
|
|
246
|
+
if (!group)
|
|
247
|
+
groups.set(key, group = { events: [], filter });
|
|
248
|
+
group.events.push(event);
|
|
249
|
+
}
|
|
250
|
+
for (const { events, filter } of groups.values())
|
|
251
|
+
await this.request('subscribe', { events, ...filter });
|
|
252
|
+
}
|
|
253
|
+
async subscribe(events, options = {}) {
|
|
254
|
+
const generation = this.generation, filter = publisherFilter({ publisher_aids: options.publisherAids, publisher_types: options.publisherTypes, publisher_exttypes: options.publisherExttypes });
|
|
255
|
+
return this.serializeSubscriptions(async () => { const proposed = new Map([...this.subscriptions].map(event => [event, this.subscriptionFilters.get(event) ?? {}])); const permitted = Array.isArray(this.lease?.scope) ? this.lease.scope.filter(item => item.action === 'subscribe').map(item => item.event_name) : [...this.catalogEntries.keys()]; for (const event of permitted)
|
|
256
|
+
if (events.some(pattern => matchPattern(pattern, event)))
|
|
257
|
+
proposed.set(event, filter); this.checkSubscriptionBudget(proposed); const result = await this.request('subscribe', { events, ...filter }); if (!this.running || generation !== this.generation)
|
|
258
|
+
throw new PubSubError('CLOSED'); const names = (Array.isArray(result.events) ? result.events : events), actual = new Map(this.subscriptionFilters); for (const event of names)
|
|
259
|
+
actual.set(event, clone(filter)); this.checkSubscriptionBudget(actual); this.subscriptionFilters = actual; for (const event of names) {
|
|
260
|
+
this.subscriptions.add(event);
|
|
261
|
+
this.subscriptionVersions.set(event, ++this.subscriptionGeneration);
|
|
262
|
+
} await this.saveState(); return result; });
|
|
263
|
+
}
|
|
264
|
+
async unsubscribe(events) {
|
|
265
|
+
const generation = this.generation;
|
|
266
|
+
return this.serializeSubscriptions(async () => { const result = await this.request('unsubscribe', { events }); if (!this.running || generation !== this.generation)
|
|
267
|
+
throw new PubSubError('CLOSED'); for (const event of new Set([...(Array.isArray(result.events) ? result.events : []), ...[...this.subscriptions].filter(name => events.some(pattern => matchPattern(pattern, name)))])) {
|
|
268
|
+
this.subscriptions.delete(event);
|
|
269
|
+
this.subscriptionFilters.delete(event);
|
|
270
|
+
this.subscriptionVersions.delete(event);
|
|
271
|
+
} await this.saveState(); return result; });
|
|
272
|
+
}
|
|
231
273
|
async renew() { const generation = this.generation; if (!this.lease)
|
|
232
274
|
throw new PubSubError('REAUTH_REQUIRED'); const result = await this.request('renew'); if (!this.running || generation !== this.generation)
|
|
233
275
|
throw new PubSubError('CLOSED'); this.setLease(result); if (this.auth && Array.isArray(result.scope)) {
|
|
234
276
|
const scope = result.scope;
|
|
235
277
|
this.auth.events = this.auth.events.filter(event => this.auth.actions.every(action => scope.some(item => item.event_name === event && item.action === action)));
|
|
236
278
|
this.subscriptions = new Set([...this.subscriptions].filter(event => scope.some(item => item.event_name === event && item.action === 'subscribe')));
|
|
237
|
-
} await this.saveState(); return result; }
|
|
279
|
+
} this.pruneSubscriptionFilters(); await this.saveState(); return result; }
|
|
238
280
|
cacheCatalog(result) { const entries = result.events ?? result.items ?? []; for (const value of Array.isArray(entries) ? entries : Object.entries(entries).map(([event_name, entry]) => ({ event_name, ...entry }))) {
|
|
239
281
|
const item = value;
|
|
240
282
|
const previous = this.catalogEntries.get(item.event_name);
|
|
@@ -270,8 +312,7 @@ export class PubSubClient {
|
|
|
270
312
|
if (upgrade)
|
|
271
313
|
payload.reply_mode = 'accepted';
|
|
272
314
|
this.preparePublication(payload);
|
|
273
|
-
} payload ??= this.payload('publish', { lease_id: this.lease.lease_id, event_name: eventName, schema_version: version, reply_mode: mode, event_id: id, data, expires_at: this.clock() + ttl * 1000 }); const bytes = wireSize(payload); if (bytes > this.limits.
|
|
274
|
-
throw new PubSubError('MESSAGE_TOO_LARGE'); if (this.queue.length + this.active + this.accepted.size + this.publishCallbacks >= this.limits.publish_queue_size || this.queuedBytes + bytes > this.limits.publish_queue_bytes)
|
|
315
|
+
} payload ??= this.payload('publish', { lease_id: this.lease.lease_id, event_name: eventName, schema_version: version, reply_mode: mode, event_id: id, data, expires_at: this.clock() + ttl * 1000 }); const bytes = wireSize(payload); if (this.queue.length + this.active + this.accepted.size + this.publishCallbacks >= this.limits.publish_queue_size || this.queuedBytes + bytes > this.limits.publish_queue_bytes)
|
|
275
316
|
throw new PubSubError('OVERLOADED'); while (this.results.size - (previous ? 1 : 0) >= this.limits.publish_results || this.resultBytes - (previous?.bytes ?? 0) + bytes > this.limits.publish_result_bytes) {
|
|
276
317
|
const oldest = this.results.entries().next().value;
|
|
277
318
|
if (!oldest || oldest[0] === id || !oldest[1].result.settled || !oldest[1].published && oldest[1].payload.expires_at > this.clock())
|
|
@@ -369,7 +410,7 @@ export class PubSubClient {
|
|
|
369
410
|
break;
|
|
370
411
|
await Promise.resolve().then(() => handler(completion)).catch(() => { });
|
|
371
412
|
} }).finally(() => { this.publishCallbacks--; this.pump(); this.signal(); }); }
|
|
372
|
-
receive(sender, payload) { if (!this.running || sender !== this.serviceAid || payload.type !== 'app.pubsub.v1' || payload.service_aid && payload.service_aid !== this.serviceAid || typeof payload.op !== 'string')
|
|
413
|
+
receive(sender, payload, local = false) { if (!this.running || sender !== this.serviceAid || payload.type !== 'app.pubsub.v1' || payload.service_aid && payload.service_aid !== this.serviceAid || typeof payload.op !== 'string')
|
|
373
414
|
return; if (payload.op.endsWith('.result')) {
|
|
374
415
|
const table = payload.op === 'publish.result' ? this.accepted : this.pending;
|
|
375
416
|
const pending = table.get(String(payload.request_id));
|
|
@@ -384,11 +425,11 @@ export class PubSubClient {
|
|
|
384
425
|
return; const key = `${sender}\0${payload.publisher_aid}\0${payload.event_id}`; for (const [k, expiry] of this.seen)
|
|
385
426
|
if (expiry <= this.clock())
|
|
386
427
|
this.seen.delete(k); if (this.seen.has(key))
|
|
387
|
-
return; const bytes = wireSize(payload); if (
|
|
388
|
-
return; if (!this.receiveRate.take(bytes))
|
|
389
|
-
return; this.seen.set(key, Number(payload.expires_at)); this.receivedBytes += bytes; this.receivedCount++; const item = clone(payload), generation = this.generation; if (this.eventHandlers.size) {
|
|
428
|
+
return; const bytes = wireSize(payload); if (this.receivedBytes + bytes > this.limits.receive_queue_bytes || this.receivedCount >= this.limits.receive_queue_size || this.seen.size >= this.limits.receive_queue_size * 4)
|
|
429
|
+
return; if (!local && !this.receiveRate.take(bytes))
|
|
430
|
+
return; this.seen.set(key, Number(payload.expires_at)); this.receivedBytes += bytes; this.receivedCount++; const item = clone(payload), generation = this.generation, subscriptionVersion = this.subscriptionVersions.get(String(payload.event_name)) ?? 0; if (this.eventHandlers.size) {
|
|
390
431
|
this.handlerChain = this.handlerChain.then(async () => { for (const handler of this.eventHandlers) {
|
|
391
|
-
if (!this.running || generation !== this.generation || !this.validEvent(item))
|
|
432
|
+
if (!this.running || generation !== this.generation || subscriptionVersion !== (this.subscriptionVersions.get(String(item.event_name)) ?? 0) || !this.validEvent(item))
|
|
392
433
|
break;
|
|
393
434
|
await Promise.resolve().then(() => handler(clone(item))).catch(() => { });
|
|
394
435
|
} }).finally(() => { this.receivedBytes -= bytes; this.receivedCount--; this.signal(); });
|
|
@@ -401,14 +442,14 @@ export class PubSubClient {
|
|
|
401
442
|
waiter.resolve(item);
|
|
402
443
|
}
|
|
403
444
|
else
|
|
404
|
-
this.events.push({ payload: item, bytes });
|
|
445
|
+
this.events.push({ payload: item, bytes, subscriptionVersion });
|
|
405
446
|
} }
|
|
406
447
|
validEvent(payload) { const name = String(payload.event_name), entry = this.catalogEntries.get(name), version = Number(payload.schema_version); return this.subscriptions.has(name) && this.lease !== null && this.clock() < Number(this.lease.expires_at) && Number.isInteger(payload.expires_at) && this.clock() < Number(payload.expires_at) && typeof payload.publisher_aid === 'string' && !!payload.publisher_aid && typeof payload.event_id === 'string' && !!payload.event_id && !!entry && (version === (entry.schema_version ?? 1) || (this.catalogHistory.get(`${name}\0${version}`) ?? 0) > this.clock()); }
|
|
407
448
|
async nextEvent(timeout) { this.ensureRunning(); while (this.events.length) {
|
|
408
449
|
const item = this.events.shift();
|
|
409
450
|
this.receivedBytes -= item.bytes;
|
|
410
451
|
this.receivedCount--;
|
|
411
|
-
if (this.validEvent(item.payload))
|
|
452
|
+
if (item.subscriptionVersion === (this.subscriptionVersions.get(String(item.payload.event_name)) ?? 0) && this.validEvent(item.payload))
|
|
412
453
|
return item.payload;
|
|
413
454
|
} const waiter = deferred(); this.waiters.push(waiter); let timer; if (timeout !== undefined)
|
|
414
455
|
timer = setTimeout(() => waiter.reject(new PubSubError('TIMEOUT')), timeout * 1000); try {
|
|
@@ -436,6 +477,6 @@ export class PubSubClient {
|
|
|
436
477
|
return; if (!this.lease || this.clock() >= Number(this.lease.expires_at)) {
|
|
437
478
|
await this.authorize(auth.authMode, auth.events, auth.actions, auth.credential);
|
|
438
479
|
} const subscriptions = [...this.subscriptions]; if (this.subscriptionsPending && subscriptions.length)
|
|
439
|
-
await this.
|
|
480
|
+
await this.restoreSubscriptions(); this.subscriptionsPending = false; }); })().finally(() => { this.recovering = undefined; this.resumePublications(); this.signal(); }); return this.recovering; }
|
|
440
481
|
}
|
|
441
482
|
//# sourceMappingURL=client.js.map
|