@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.
Files changed (88) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/_packed_docs/CHANGELOG.md +56 -1
  3. package/_packed_docs/INDEX.md +18 -11
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +9 -9
  5. package/_packed_docs/agent.md/SCHEMA.md +1 -1
  6. 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
  7. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +17 -17
  8. package/_packed_docs/protocol/echo-probe-gateway.md +99 -0
  9. package/_packed_docs/protocol/echo-probe-sdk.md +91 -0
  10. 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
  11. 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
  12. 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
  13. 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
  14. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +2 -2
  15. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +32 -6
  16. package/_packed_docs/sdk/09-group-rpc-manual.md +7 -7
  17. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +13 -13
  18. 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
  19. 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
  20. package/_packed_docs/sdk/INDEX.md +23 -18
  21. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +1 -1
  22. 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
  23. 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
  24. package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +9 -9
  25. 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
  26. 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
  27. package/dist/agent-md.d.ts +2 -1
  28. package/dist/agent-md.js +33 -6
  29. package/dist/agent-md.js.map +1 -1
  30. package/dist/aid-store.js +5 -1
  31. package/dist/aid-store.js.map +1 -1
  32. package/dist/auth.js +36 -45
  33. package/dist/auth.js.map +1 -1
  34. package/dist/client/delivery.d.ts +8 -1
  35. package/dist/client/delivery.js +203 -50
  36. package/dist/client/delivery.js.map +1 -1
  37. package/dist/client/lifecycle.js +10 -1
  38. package/dist/client/lifecycle.js.map +1 -1
  39. package/dist/client/rpc-pipeline.d.ts +4 -0
  40. package/dist/client/rpc-pipeline.js +93 -10
  41. package/dist/client/rpc-pipeline.js.map +1 -1
  42. package/dist/client/sync-channels.d.ts +2 -1
  43. package/dist/client/sync-channels.js +33 -14
  44. package/dist/client/sync-channels.js.map +1 -1
  45. package/dist/client/v2-e2ee.d.ts +1 -0
  46. package/dist/client/v2-e2ee.js +24 -6
  47. package/dist/client/v2-e2ee.js.map +1 -1
  48. package/dist/client.d.ts +15 -0
  49. package/dist/client.js +329 -56
  50. package/dist/client.js.map +1 -1
  51. package/dist/events.d.ts +1 -0
  52. package/dist/events.js +5 -0
  53. package/dist/events.js.map +1 -1
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +1 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/mail-client.d.ts +101 -0
  58. package/dist/mail-client.js +369 -0
  59. package/dist/mail-client.js.map +1 -0
  60. package/dist/ownership-v21.d.ts +2 -1
  61. package/dist/ownership-v21.js +19 -9
  62. package/dist/ownership-v21.js.map +1 -1
  63. package/dist/pubsub/binding.js +9 -2
  64. package/dist/pubsub/binding.js.map +1 -1
  65. package/dist/pubsub/channel.d.ts +11 -3
  66. package/dist/pubsub/channel.js +91 -10
  67. package/dist/pubsub/channel.js.map +1 -1
  68. package/dist/pubsub/client.d.ts +8 -2
  69. package/dist/pubsub/client.js +62 -21
  70. package/dist/pubsub/client.js.map +1 -1
  71. package/dist/pubsub/index.d.ts +2 -2
  72. package/dist/pubsub/index.js +1 -1
  73. package/dist/pubsub/index.js.map +1 -1
  74. package/dist/pubsub/service.d.ts +6 -0
  75. package/dist/pubsub/service.js +101 -10
  76. package/dist/pubsub/service.js.map +1 -1
  77. package/dist/pubsub/types.d.ts +11 -1
  78. package/dist/tools/cross-sdk-agent.d.ts +1 -1
  79. package/dist/transport.d.ts +4 -0
  80. package/dist/transport.js +39 -2
  81. package/dist/transport.js.map +1 -1
  82. package/dist/udp-standby.d.ts +88 -0
  83. package/dist/udp-standby.js +483 -0
  84. package/dist/udp-standby.js.map +1 -0
  85. package/dist/version.d.ts +1 -1
  86. package/dist/version.js +1 -1
  87. package/package.json +5 -1
  88. package/scripts/patch-imapflow-external.mjs +69 -0
@@ -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
- constructor(sdk: PubSubSDK, serviceAid: string, receiver: (sender: string, payload: JsonMap, route?: EventRoute) => boolean | void, clock?: () => number, publishReceiver?: boolean);
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>;
@@ -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 = 65536;
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 > 65536)
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(65536, this.bytes + elapsed * 262.144); this.updated = now; return Math.max(0, (1 - this.calls) / 0.04, (size - this.bytes) / 262.144); }
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
- constructor(sdk, serviceAid, receiver, clock = () => Date.now(), publishReceiver = false) {
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
- if (typeof message.message_id === 'string' && message.message_id) {
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${message.message_id}`;
134
+ const key = `${sender}\0${messageId}`;
85
135
  if (this.seen.has(key))
86
136
  return true;
87
- if (this.receiver(sender, message.payload, route) === false)
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(message.payload.expires_at ?? now + 60_000), now + 3_600_000));
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, message.payload, route) === false)
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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"}
@@ -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
- subscribe(events: string[]): Promise<JsonMap>;
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;
@@ -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, max_event_bytes: 65536, publish_results: 1024, publish_result_bytes: 4194304, send_attempts: 2, request_timeout: 60, renew_interval_seconds: 3600, ...options.limits };
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.request('subscribe', { events: [...this.subscriptions] });
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
- async subscribe(events) { const generation = this.generation; return this.serializeSubscriptions(async () => { const result = await this.request('subscribe', { events }); if (!this.running || generation !== this.generation)
228
- throw new PubSubError('CLOSED'); events.forEach(event => this.subscriptions.add(event)); await this.saveState(); return result; }); }
229
- async unsubscribe(events) { const generation = this.generation; return this.serializeSubscriptions(async () => { const result = await this.request('unsubscribe', { events }); if (!this.running || generation !== this.generation)
230
- throw new PubSubError('CLOSED'); events.forEach(event => this.subscriptions.delete(event)); await this.saveState(); return result; }); }
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.max_event_bytes)
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 (bytes > this.limits.max_event_bytes || this.receivedBytes + bytes > this.limits.receive_queue_bytes || this.receivedCount >= this.limits.receive_queue_size || this.seen.size >= this.limits.receive_queue_size * 4)
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.request('subscribe', { events: subscriptions }); this.subscriptionsPending = false; }); })().finally(() => { this.recovering = undefined; this.resumePublications(); this.signal(); }); return this.recovering; }
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