@agentunion/fastaun 0.5.30 → 0.5.32

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 (105) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/_packed_docs/CHANGELOG.md +60 -0
  3. package/_packed_docs/sdk/0.5.31-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +162 -0
  4. package/_packed_docs/sdk/0.5.31-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +167 -0
  5. 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
  6. 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
  7. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +12 -5
  8. 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
  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/274/200/345/217/221/347/247/273/346/244/215/346/214/207/345/215/227.md +554 -0
  10. package/_packed_docs/sdk/INDEX.md +27 -5
  11. 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
  12. package/dist/agent-md-schema.js +7 -6
  13. package/dist/agent-md-schema.js.map +1 -1
  14. package/dist/agent-md.d.ts +2 -0
  15. package/dist/agent-md.js +20 -6
  16. package/dist/agent-md.js.map +1 -1
  17. package/dist/aid-store.d.ts +1 -0
  18. package/dist/aid-store.js +1 -0
  19. package/dist/aid-store.js.map +1 -1
  20. package/dist/aid.js +1 -1
  21. package/dist/aid.js.map +1 -1
  22. package/dist/auth.js +1 -1
  23. package/dist/auth.js.map +1 -1
  24. package/dist/client/control-messages.d.ts +22 -7
  25. package/dist/client/control-messages.js +220 -185
  26. package/dist/client/control-messages.js.map +1 -1
  27. package/dist/client/delivery.d.ts +3 -0
  28. package/dist/client/delivery.js +67 -3
  29. package/dist/client/delivery.js.map +1 -1
  30. package/dist/client/group-state.d.ts +3 -0
  31. package/dist/client/group-state.js +48 -14
  32. package/dist/client/group-state.js.map +1 -1
  33. package/dist/client/lifecycle.js +12 -3
  34. package/dist/client/lifecycle.js.map +1 -1
  35. package/dist/client/rpc-pipeline.d.ts +9 -3
  36. package/dist/client/rpc-pipeline.js +61 -26
  37. package/dist/client/rpc-pipeline.js.map +1 -1
  38. package/dist/client/v2-e2ee.d.ts +13 -1
  39. package/dist/client/v2-e2ee.js +32 -19
  40. package/dist/client/v2-e2ee.js.map +1 -1
  41. package/dist/client.d.ts +18 -1
  42. package/dist/client.js +396 -140
  43. package/dist/client.js.map +1 -1
  44. package/dist/discovery.d.ts +1 -0
  45. package/dist/discovery.js +3 -1
  46. package/dist/discovery.js.map +1 -1
  47. package/dist/group-fs.js +1 -1
  48. package/dist/group-fs.js.map +1 -1
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.js +1 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/ownership-v21.d.ts +2 -2
  53. package/dist/ownership-v21.js +18 -21
  54. package/dist/ownership-v21.js.map +1 -1
  55. package/dist/ownership-workflow.js +6 -4
  56. package/dist/ownership-workflow.js.map +1 -1
  57. package/dist/pubsub/binding.d.ts +54 -0
  58. package/dist/pubsub/binding.js +343 -0
  59. package/dist/pubsub/binding.js.map +1 -0
  60. package/dist/pubsub/channel.d.ts +45 -0
  61. package/dist/pubsub/channel.js +137 -0
  62. package/dist/pubsub/channel.js.map +1 -0
  63. package/dist/pubsub/client.d.ts +93 -0
  64. package/dist/pubsub/client.js +318 -0
  65. package/dist/pubsub/client.js.map +1 -0
  66. package/dist/pubsub/credentials.d.ts +51 -0
  67. package/dist/pubsub/credentials.js +360 -0
  68. package/dist/pubsub/credentials.js.map +1 -0
  69. package/dist/pubsub/errors.d.ts +5 -0
  70. package/dist/pubsub/errors.js +6 -0
  71. package/dist/pubsub/errors.js.map +1 -0
  72. package/dist/pubsub/index.d.ts +48 -0
  73. package/dist/pubsub/index.js +152 -0
  74. package/dist/pubsub/index.js.map +1 -0
  75. package/dist/pubsub/scheduler.d.ts +58 -0
  76. package/dist/pubsub/scheduler.js +249 -0
  77. package/dist/pubsub/scheduler.js.map +1 -0
  78. package/dist/pubsub/service.d.ts +100 -0
  79. package/dist/pubsub/service.js +650 -0
  80. package/dist/pubsub/service.js.map +1 -0
  81. package/dist/pubsub/types.d.ts +119 -0
  82. package/dist/pubsub/types.js +2 -0
  83. package/dist/pubsub/types.js.map +1 -0
  84. package/dist/register-flow.js +1 -1
  85. package/dist/register-flow.js.map +1 -1
  86. package/dist/storage/lowlevel.js +49 -8
  87. package/dist/storage/lowlevel.js.map +1 -1
  88. package/dist/storage/read-cache.d.ts +7 -3
  89. package/dist/storage/read-cache.js +137 -18
  90. package/dist/storage/read-cache.js.map +1 -1
  91. package/dist/storage/vfs.d.ts +1 -0
  92. package/dist/storage/vfs.js +12 -4
  93. package/dist/storage/vfs.js.map +1 -1
  94. package/dist/tools/cross-sdk-agent.d.ts +1 -1
  95. package/dist/tools/cross-sdk-agent.js +4 -2
  96. package/dist/tools/cross-sdk-agent.js.map +1 -1
  97. package/dist/tools/pubsub-actor.d.ts +27 -0
  98. package/dist/tools/pubsub-actor.js +260 -0
  99. package/dist/tools/pubsub-actor.js.map +1 -0
  100. package/dist/transport.d.ts +26 -2
  101. package/dist/transport.js +182 -17
  102. package/dist/transport.js.map +1 -1
  103. package/dist/version.d.ts +1 -1
  104. package/dist/version.js +1 -1
  105. package/package.json +1 -1
@@ -0,0 +1,343 @@
1
+ import { PubSubError } from './errors.js';
2
+ import { ConnectionError, TimeoutError } from '../errors.js';
3
+ import { SDKChannel, object, identifier } from './channel.js';
4
+ const ingress = () => ({ queues: new Map(), ready: [], active: new Set(), count: 0, bytes: 0, aidCounts: new Map() });
5
+ export class EventServiceBinding {
6
+ service;
7
+ sdk;
8
+ options;
9
+ publishExpiry;
10
+ capacityUnsubscribe;
11
+ running = false;
12
+ channel;
13
+ starting;
14
+ closing;
15
+ tasks = new Set();
16
+ drainWaiters = new Set();
17
+ registrationId;
18
+ registrationDeadline = 0;
19
+ renewTimer;
20
+ expiryTimer;
21
+ renewing;
22
+ stateSubscription;
23
+ registrationGeneration = 0;
24
+ queues = { publish: ingress(), management: ingress(), lease: ingress() };
25
+ replies = [[], []];
26
+ replyActive = [0, 0];
27
+ replyBytes = [0, 0];
28
+ constructor(service, sdk, options = {}) {
29
+ this.service = service;
30
+ this.sdk = sdk;
31
+ this.options = options;
32
+ }
33
+ async start() {
34
+ if (this.closing)
35
+ await this.closing;
36
+ if (this.starting)
37
+ return this.starting;
38
+ if (this.running && this.leaseActive())
39
+ return this;
40
+ if (this.running)
41
+ await this.close();
42
+ if (this.sdk.aid !== this.service.service_aid)
43
+ throw new PubSubError('SERVICE_IDENTITY_MISMATCH');
44
+ this.starting = (async () => {
45
+ this.channel = new SDKChannel(this.sdk, this.service.service_aid, (sender, payload, route) => this.receive(sender, payload, route), this.service.clock, true);
46
+ this.service.setSend(async (to, payload, ttl, messageId, background, deadline, route) => { const remaining = this.registrationDeadline - performance.now(); if (!this.leaseActive() || remaining < 1000)
47
+ throw new PubSubError('SERVICE_LEASE_LOST'); return this.channel.send(to, payload, Math.min(ttl, Math.floor(remaining / 1000)), messageId, background, Math.min(deadline ?? Number(payload.expires_at), Date.now() + remaining), route); });
48
+ this.registrationId = identifier();
49
+ this.registrationGeneration++;
50
+ try {
51
+ await this.service.start();
52
+ this.channel.start();
53
+ await this.registrationCall('register');
54
+ this.running = true;
55
+ this.capacityUnsubscribe = this.service.onPublishCapacity(() => { this.pump('publish'); this.resumePulls(); });
56
+ this.stateSubscription = this.sdk.on('state_change', this.stateChange);
57
+ this.resumePulls();
58
+ return this;
59
+ }
60
+ catch (error) {
61
+ this.running = false;
62
+ this.clearRegistrationTimers();
63
+ this.channel?.close();
64
+ this.channel = undefined;
65
+ this.registrationId = undefined;
66
+ await this.service.close();
67
+ throw this.registrationError(error);
68
+ }
69
+ })();
70
+ try {
71
+ return await this.starting;
72
+ }
73
+ finally {
74
+ this.starting = undefined;
75
+ }
76
+ }
77
+ registrationError(error) {
78
+ if (error instanceof PubSubError)
79
+ return error;
80
+ const failure = error;
81
+ return new PubSubError(failure?.data?.code || failure?.stringCode || (typeof failure?.code === 'string' ? failure.code : error instanceof TimeoutError ? 'TIMEOUT' : error instanceof ConnectionError ? 'CONNECTION_ERROR' : 'SERVICE_UNAVAILABLE'), failure?.message);
82
+ }
83
+ clearRegistrationTimers() { if (this.renewTimer)
84
+ clearTimeout(this.renewTimer); if (this.expiryTimer)
85
+ clearTimeout(this.expiryTimer); this.renewTimer = this.expiryTimer = undefined; }
86
+ stateChange = (value) => { if (value?.state === 'ready' && this.running)
87
+ void this.renewRegistration(); };
88
+ leaseActive() { return this.running && performance.now() < this.registrationDeadline; }
89
+ async registrationCall(operation) {
90
+ const generation = this.registrationGeneration, registrationId = this.registrationId, started = performance.now();
91
+ const deadline = Date.now() + Math.min(10_000, operation === 'renew' ? Math.max(1, this.registrationDeadline - performance.now()) : 10_000);
92
+ let result;
93
+ for (let attempt = 0;; attempt++) {
94
+ try {
95
+ result = await this.sdk.call(`message.evtsvc.${operation}`, { service: 'event_service', registration_id: registrationId }, { background: false, deadline });
96
+ break;
97
+ }
98
+ catch (error) {
99
+ const failure = this.registrationError(error);
100
+ if (operation !== 'register' || attempt || !['TIMEOUT', 'CONNECTION_ERROR'].includes(failure.code) || Date.now() >= deadline)
101
+ throw error;
102
+ }
103
+ }
104
+ if (generation !== this.registrationGeneration)
105
+ return;
106
+ const expires = Number(result?.expires_at), interval = Number(result?.renew_after_seconds), ttl = Number(result?.ttl_seconds);
107
+ if (result?.registration_id !== registrationId || !Number.isFinite(expires) || !Number.isFinite(ttl) || ttl <= 0 || !Number.isFinite(interval) || interval <= 0)
108
+ throw new PubSubError('SERVICE_UNAVAILABLE');
109
+ this.registrationDeadline = started + ttl * 1000;
110
+ if (performance.now() >= this.registrationDeadline)
111
+ throw new PubSubError('SERVICE_LEASE_LOST');
112
+ this.clearRegistrationTimers();
113
+ this.expiryTimer = setTimeout(() => { this.expiryTimer = undefined; if (this.running && generation === this.registrationGeneration)
114
+ void this.close(); }, Math.max(1, this.registrationDeadline - performance.now()));
115
+ this.renewTimer = setTimeout(() => { this.renewTimer = undefined; void this.renewRegistration(); }, Math.max(1, Math.min(interval * 1000, this.registrationDeadline - performance.now() - 1)));
116
+ }
117
+ renewRegistration() {
118
+ if (this.renewing)
119
+ return this.renewing;
120
+ if (!this.running || !this.registrationId)
121
+ return Promise.resolve();
122
+ const generation = this.registrationGeneration;
123
+ this.renewing = this.registrationCall('renew').catch(async (error) => {
124
+ if (!this.running || generation !== this.registrationGeneration)
125
+ return;
126
+ const failure = this.registrationError(error);
127
+ if (['SERVICE_LEASE_LOST', 'DEVICE_CONFLICT', 'SERVICE_NOT_STARTED'].includes(failure.code) || performance.now() >= this.registrationDeadline) {
128
+ await this.close();
129
+ return;
130
+ }
131
+ if (this.renewTimer)
132
+ clearTimeout(this.renewTimer);
133
+ this.renewTimer = setTimeout(() => { this.renewTimer = undefined; void this.renewRegistration(); }, Math.max(1, Math.min(1000, this.registrationDeadline - performance.now())));
134
+ }).finally(() => { this.renewing = undefined; });
135
+ return this.renewing;
136
+ }
137
+ close() {
138
+ if (this.closing)
139
+ return this.closing;
140
+ const closing = this.stop().finally(() => { if (this.closing === closing)
141
+ this.closing = undefined; });
142
+ this.closing = closing;
143
+ return closing;
144
+ }
145
+ async stop() {
146
+ if (this.starting) {
147
+ try {
148
+ await this.starting;
149
+ }
150
+ catch { }
151
+ }
152
+ const registrationId = this.registrationId;
153
+ this.registrationId = undefined;
154
+ this.registrationGeneration++;
155
+ this.clearRegistrationTimers();
156
+ this.stateSubscription?.unsubscribe();
157
+ this.sdk.off?.('state_change', this.stateChange);
158
+ this.stateSubscription = undefined;
159
+ this.running = false;
160
+ if (this.publishExpiry)
161
+ clearTimeout(this.publishExpiry);
162
+ this.publishExpiry = undefined;
163
+ this.capacityUnsubscribe?.();
164
+ this.capacityUnsubscribe = undefined;
165
+ this.channel?.close();
166
+ this.channel = undefined;
167
+ for (const queue of Object.values(this.queues)) {
168
+ for (const items of queue.queues.values())
169
+ for (const item of items) {
170
+ this.account(queue, item, -1);
171
+ this.releaseBody(item);
172
+ }
173
+ queue.queues.clear();
174
+ queue.ready = [];
175
+ }
176
+ for (let i = 0; i < this.replies.length; i++) {
177
+ for (const item of this.replies[i])
178
+ this.replyBytes[i] -= item.size;
179
+ this.replies[i] = [];
180
+ }
181
+ this.changed();
182
+ const serviceClosing = this.service.close();
183
+ await Promise.allSettled([...this.tasks]);
184
+ await serviceClosing;
185
+ if (registrationId) {
186
+ try {
187
+ await this.sdk.call('message.evtsvc.unregister', { service: 'event_service', registration_id: registrationId }, { background: false, deadline: Date.now() + 10_000 });
188
+ }
189
+ catch { }
190
+ }
191
+ }
192
+ async drain() {
193
+ while (Object.values(this.queues).some(queue => queue.count) || this.replies.some((queue, i) => queue.length || this.replyActive[i]))
194
+ await new Promise(resolve => { this.drainWaiters.add(resolve); });
195
+ await this.service.drain();
196
+ }
197
+ changed() { for (const wake of this.drainWaiters)
198
+ wake(); this.drainWaiters.clear(); }
199
+ limit(name, fallback) { const value = this.service.limits[name]; return typeof value === 'number' && value > 0 ? value : fallback; }
200
+ account(queue, item, direction) {
201
+ queue.count += direction;
202
+ queue.bytes += direction * item.size;
203
+ const count = (queue.aidCounts.get(item.sender) ?? 0) + direction;
204
+ if (count)
205
+ queue.aidCounts.set(item.sender, count);
206
+ else
207
+ queue.aidCounts.delete(item.sender);
208
+ }
209
+ releaseBody(item) { if (item.reservation?.bytes) {
210
+ const size = item.reservation.bytes;
211
+ item.reservation.bytes = 0;
212
+ this.service.releaseIngressBody(size);
213
+ } }
214
+ resumePulls() { if (this.running && this.publishCapacity())
215
+ this.sdk._controlMessages?.().resumePubsubPulls?.(); }
216
+ publishCapacity(size = 0) { const queue = this.queues.publish; return queue.count + (this.service.fanoutCount ?? 0) < Math.min(this.limit('ingress_items', 64), 64) && queue.bytes + size <= Math.min(this.limit('ingress_bytes', 2 * 1024 * 1024), 64 * 1024 * 1024) && this.service.publishCapacityAvailable(size); }
217
+ receive(sender, payload, route) {
218
+ if (!this.leaseActive())
219
+ return this.starting ? false : undefined;
220
+ if (!object(payload) || payload.op === 'event' || String(payload.op ?? '').endsWith('.result') || Number(payload.expires_at ?? 0) <= this.service.clock())
221
+ return;
222
+ const kind = payload.op === 'publish' ? 'publish' : ['renew', 'unsubscribe', 'revoke_grant'].includes(String(payload.op)) ? 'lease' : 'management';
223
+ const queue = this.queues[kind], size = new TextEncoder().encode(JSON.stringify(payload)).byteLength;
224
+ const prefix = kind === 'publish' ? 'ingress' : kind === 'lease' ? 'lease' : 'management';
225
+ if (kind === 'publish' && !this.publishCapacity(size))
226
+ return false;
227
+ if (queue.count >= this.limit(`${prefix}_items`, kind === 'publish' ? 64 : 128) || queue.bytes + size > this.limit(`${prefix}_bytes`, kind === 'publish' ? 2 * 1024 * 1024 : 1024 * 1024) || (queue.aidCounts.get(sender) ?? 0) >= this.limit('ingress_aid_items', 64)) {
228
+ if (kind === 'publish')
229
+ return false;
230
+ this.enqueueReply(sender, payload, undefined, { code: 'OVERLOADED', message: 'OVERLOADED' }, route);
231
+ return;
232
+ }
233
+ if (kind === 'publish' && !this.service.reserveIngressBody(size))
234
+ return false;
235
+ const item = { route, sender, payload: structuredClone(payload), size, ...(kind === 'publish' ? { reservation: { bytes: size } } : {}) };
236
+ let items = queue.queues.get(sender);
237
+ if (!items) {
238
+ items = [];
239
+ queue.queues.set(sender, items);
240
+ }
241
+ items.push(item);
242
+ this.account(queue, item, 1);
243
+ if (items.length === 1 && !queue.active.has(sender))
244
+ queue.ready.push(sender);
245
+ this.pump(kind);
246
+ return true;
247
+ }
248
+ pump(kind) {
249
+ const queue = this.queues[kind], max = kind === 'publish' ? this.options.publishWorkers ?? 4 : kind === 'lease' ? this.options.leaseWorkers ?? 2 : this.options.requestWorkers ?? 2;
250
+ if (kind === 'publish' && this.publishExpiry) {
251
+ clearTimeout(this.publishExpiry);
252
+ this.publishExpiry = undefined;
253
+ }
254
+ let waiting = queue.ready.length;
255
+ while (this.leaseActive() && queue.active.size < max && queue.ready.length) {
256
+ const first = queue.queues.get(queue.ready[0])[0];
257
+ if (kind === 'publish' && Number(first.payload.expires_at) > this.service.clock() && !this.service.publishCapacityAvailable(first.size, first.reservation?.bytes ?? 0)) {
258
+ queue.ready.push(queue.ready.shift());
259
+ if (--waiting <= 0)
260
+ break;
261
+ continue;
262
+ }
263
+ waiting = queue.ready.length - 1;
264
+ const sender = queue.ready.shift(), item = queue.queues.get(sender).shift();
265
+ queue.active.add(sender);
266
+ const task = this.handle(item).finally(() => {
267
+ queue.active.delete(sender);
268
+ this.account(queue, item, -1);
269
+ if (queue.queues.get(sender)?.length)
270
+ queue.ready.push(sender);
271
+ else
272
+ queue.queues.delete(sender);
273
+ this.tasks.delete(task);
274
+ this.releaseBody(item);
275
+ this.pump(kind);
276
+ if (kind === 'publish')
277
+ this.resumePulls();
278
+ this.changed();
279
+ });
280
+ this.tasks.add(task);
281
+ }
282
+ if (kind === 'publish' && this.leaseActive() && queue.ready.length && queue.active.size < max) {
283
+ const deadline = Math.min(...queue.ready.map(sender => Number(queue.queues.get(sender)[0].payload.expires_at)));
284
+ this.publishExpiry = setTimeout(() => { this.publishExpiry = undefined; this.pump('publish'); this.resumePulls(); }, Math.max(1, deadline - this.service.clock()));
285
+ }
286
+ }
287
+ async handle(item) {
288
+ const payload = item.payload;
289
+ if (!this.leaseActive() || Number(payload.expires_at ?? 0) <= this.service.clock())
290
+ return;
291
+ try {
292
+ const result = item.route ? await this.service.handle(item.sender, payload, item.reservation, item.route) : item.reservation ? await this.service.handle(item.sender, payload, item.reservation) : await this.service.handle(item.sender, payload);
293
+ this.enqueueReply(item.sender, payload, result, undefined, item.route);
294
+ }
295
+ catch (error) {
296
+ const e = error;
297
+ this.enqueueReply(item.sender, payload, undefined, { code: e.code ?? 'INTERNAL_ERROR', message: e.message }, item.route);
298
+ }
299
+ }
300
+ enqueueReply(sender, request, result, error, route) {
301
+ if (!this.leaseActive() || request.op === 'publish' && request.reply_mode !== 'accepted' || !request.request_id)
302
+ return;
303
+ const index = request.op === 'publish' ? 1 : 0;
304
+ const replyRequest = { type: 'app.pubsub.v1', op: request.op, request_id: request.request_id, expires_at: request.expires_at, reply_mode: request.reply_mode, ...(request.event_id ? { event_id: request.event_id } : {}) };
305
+ const size = new TextEncoder().encode(JSON.stringify({ sender, request: replyRequest, result, error })).byteLength + 128;
306
+ if (this.replies[index].length + this.replyActive[index] >= this.limit('reply_items', 128) || this.replyBytes[index] + size > this.limit('reply_bytes', 1024 * 1024))
307
+ return;
308
+ this.replies[index].push({ route, sender, request: replyRequest, result, error, size });
309
+ this.replyBytes[index] += size;
310
+ this.pumpReplies(index);
311
+ }
312
+ pumpReplies(index) {
313
+ while (this.leaseActive() && this.replyActive[index] < 2 && this.replies[index].length) {
314
+ const item = this.replies[index].shift();
315
+ this.replyActive[index]++;
316
+ const task = this.reply(item.sender, item.request, item.result, item.error, item.route).finally(() => { this.replyActive[index]--; this.replyBytes[index] -= item.size; this.tasks.delete(task); this.pumpReplies(index); this.changed(); });
317
+ this.tasks.add(task);
318
+ }
319
+ }
320
+ async reply(sender, request, result, error, route) {
321
+ if (request.op === 'publish' && request.reply_mode !== 'accepted' || !request.request_id)
322
+ return;
323
+ const reply = { type: 'app.pubsub.v1', op: `${request.op}.result`, service_aid: this.service.service_aid, request_id: request.request_id, expires_at: Math.min(this.service.clock() + 60_000, Number(request.expires_at)), ...(request.event_id ? { event_id: request.event_id } : {}), ...(error ? { error } : { result }) };
324
+ for (let attempt = 0; attempt < (this.service.limits.send_attempts ?? 2); attempt++) {
325
+ const ttl = Math.floor((Number(reply.expires_at) - this.service.clock()) / 1000);
326
+ if (!this.leaseActive() || !this.channel || ttl < 1)
327
+ return;
328
+ const remaining = this.registrationDeadline - performance.now();
329
+ if (remaining < 1000)
330
+ return;
331
+ try {
332
+ await this.channel.send(sender, reply, Math.min(ttl, Math.floor(remaining / 1000)), `${request.request_id}:result${route ? ':' + route.device_id + ':' + route.slot_id : ''}`, request.op === 'publish', Math.min(Number(reply.expires_at), Date.now() + remaining), route);
333
+ return;
334
+ }
335
+ catch (error) {
336
+ const failure = error;
337
+ if (!failure?.retryable && !failure?.data?.retryable && !['TIMEOUT', 'CONNECTION_ERROR'].includes(String(failure?.stringCode || failure?.code || '')) && !/timeout|connection/i.test(String(error)))
338
+ return;
339
+ }
340
+ }
341
+ }
342
+ }
343
+ //# sourceMappingURL=binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/pubsub/binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { EventRoute, JsonMap } from './types.js';
2
+ export interface PubSubSDK {
3
+ aid: string | null;
4
+ call(method: string, params?: any, options?: any): Promise<any>;
5
+ on(event: string, handler: (value: any) => void | Promise<void>): {
6
+ unsubscribe(): void;
7
+ } | void;
8
+ off?(event: string, handler: (value: any) => void | Promise<void>): void;
9
+ [key: string]: any;
10
+ }
11
+ export declare const object: (value: unknown) => value is JsonMap;
12
+ export declare const clone: <T>(value: T) => T;
13
+ export declare const wireSize: (value: unknown) => number;
14
+ export declare const identifier: () => string;
15
+ export declare class TokenBucket {
16
+ private readonly clock;
17
+ private calls;
18
+ private bytes;
19
+ private updated;
20
+ constructor(clock?: () => number);
21
+ delay(size: number): number;
22
+ take(size: number): boolean;
23
+ }
24
+ export declare class SDKChannel {
25
+ readonly sdk: PubSubSDK;
26
+ readonly serviceAid: string;
27
+ readonly receiver: (sender: string, payload: JsonMap, route?: EventRoute) => boolean | void;
28
+ readonly clock: () => number;
29
+ readonly publishReceiver: boolean;
30
+ private started;
31
+ private subscription?;
32
+ private unregister?;
33
+ private seen;
34
+ private rate;
35
+ private generation;
36
+ private waits;
37
+ constructor(sdk: PubSubSDK, serviceAid: string, receiver: (sender: string, payload: JsonMap, route?: EventRoute) => boolean | void, clock?: () => number, publishReceiver?: boolean);
38
+ private readonly receiveEvent;
39
+ private readonly receive;
40
+ start(): void;
41
+ close(): void;
42
+ private pause;
43
+ private pressure;
44
+ send(to: string, payload: JsonMap, ttl: number, messageId: string, background?: boolean, deadline?: number, route?: EventRoute): Promise<JsonMap>;
45
+ }
@@ -0,0 +1,137 @@
1
+ import { PubSubError } from './errors.js';
2
+ export const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
3
+ export const clone = (value) => structuredClone(value);
4
+ export const wireSize = (value) => new TextEncoder().encode(JSON.stringify(value)).byteLength;
5
+ export const identifier = () => crypto.randomUUID().replace(/-/g, '');
6
+ export class TokenBucket {
7
+ clock;
8
+ calls = 4;
9
+ bytes = 65536;
10
+ updated;
11
+ constructor(clock = () => performance.now()) {
12
+ this.clock = clock;
13
+ this.updated = clock();
14
+ }
15
+ delay(size) { if (size > 65536)
16
+ 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); }
17
+ take(size) { if (this.delay(size) > 0)
18
+ return false; this.calls--; this.bytes -= size; return true; }
19
+ }
20
+ export class SDKChannel {
21
+ sdk;
22
+ serviceAid;
23
+ receiver;
24
+ clock;
25
+ publishReceiver;
26
+ started = false;
27
+ subscription;
28
+ unregister;
29
+ seen = new Map();
30
+ rate = new TokenBucket();
31
+ generation = 0;
32
+ waits = new Set();
33
+ constructor(sdk, serviceAid, receiver, clock = () => Date.now(), publishReceiver = false) {
34
+ this.sdk = sdk;
35
+ this.serviceAid = serviceAid;
36
+ this.receiver = receiver;
37
+ this.clock = clock;
38
+ this.publishReceiver = publishReceiver;
39
+ }
40
+ receiveEvent = (message) => { this.receive(message); };
41
+ receive = (message) => {
42
+ if (!this.started || !object(message) || message.encrypted !== true || message._decrypt_error || !object(message.payload))
43
+ return;
44
+ if (!object(message.protected_headers) || message.protected_headers.message_class !== 'sdk_control' || message.protected_headers.sdk_control_protocol !== 'aun.pubsub' || message.protected_headers.sdk_control_version !== 1 && message.protected_headers.sdk_control_version !== '1')
45
+ return;
46
+ const sender = message.from ?? message.from_aid ?? message.sender_aid;
47
+ if (typeof sender !== 'string' || !sender || message.payload.type !== 'app.pubsub.v1' || message.to && message.to !== this.sdk.aid)
48
+ return;
49
+ const device = typeof message.sender_device_id === 'string' ? message.sender_device_id.trim() : '', slot = typeof message.sender_slot_id === 'string' ? message.sender_slot_id.trim() : '';
50
+ const route = device && slot ? { device_id: device, slot_id: slot } : undefined;
51
+ if (this.publishReceiver && !route)
52
+ return;
53
+ if (typeof message.message_id === 'string' && message.message_id) {
54
+ const now = this.clock();
55
+ for (const [key, expires] of this.seen)
56
+ if (expires <= now)
57
+ this.seen.delete(key);
58
+ const key = `${sender}\0${message.message_id}`;
59
+ if (this.seen.has(key))
60
+ return true;
61
+ if (this.receiver(sender, message.payload, route) === false)
62
+ return false;
63
+ this.seen.set(key, Math.min(Number(message.payload.expires_at ?? now + 60_000), now + 3_600_000));
64
+ if (this.seen.size > 4096)
65
+ this.seen.delete(this.seen.keys().next().value);
66
+ }
67
+ else if (this.receiver(sender, message.payload, route) === false)
68
+ return false;
69
+ return true;
70
+ };
71
+ start() {
72
+ if (this.started)
73
+ return;
74
+ this.started = true;
75
+ const controls = this.sdk._controlMessages?.();
76
+ if (typeof controls?.registerPubsub === 'function')
77
+ this.unregister = controls.registerPubsub(this.receive, { serviceAid: this.serviceAid, clock: this.clock, publishReceiver: this.publishReceiver });
78
+ else if (typeof this.sdk.registerPubSubReceiver === 'function')
79
+ this.unregister = this.sdk.registerPubSubReceiver(this.receive, { serviceAid: this.serviceAid, clock: this.clock, publishReceiver: this.publishReceiver });
80
+ else
81
+ this.subscription = this.sdk.on('message.received', this.receiveEvent);
82
+ }
83
+ close() {
84
+ this.started = false;
85
+ this.generation++;
86
+ for (const cancel of [...this.waits])
87
+ cancel();
88
+ this.unregister?.();
89
+ this.unregister = undefined;
90
+ this.subscription?.unsubscribe();
91
+ this.sdk.off?.('message.received', this.receiveEvent);
92
+ this.subscription = undefined;
93
+ this.seen.clear();
94
+ }
95
+ 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)
96
+ reject(new PubSubError('CLOSED'));
97
+ else
98
+ resolve(); }, Math.max(1, delay)); this.waits.add(cancel); }); }
99
+ pressure(transport, timeout, generation) { if (typeof transport?._eventBackpressure !== 'function')
100
+ return Promise.resolve(Number(transport?.foregroundWaiting ?? 0) > 0 || Number(transport?._ws?.bufferedAmount ?? 0) >= 65536); return new Promise((resolve, reject) => { const request = transport._eventBackpressure(timeout); const cancel = () => { request.cancel?.(); this.waits.delete(cancel); reject(new PubSubError('CLOSED')); }; this.waits.add(cancel); Promise.resolve(request).then(value => { if (generation !== this.generation)
101
+ reject(new PubSubError('CLOSED'));
102
+ else
103
+ resolve(value); }, reject).finally(() => this.waits.delete(cancel)); }); }
104
+ async send(to, payload, ttl, messageId, background = false, deadline, route) {
105
+ const generation = this.generation, expires = Number(payload.expires_at ?? this.clock() + ttl * 1000), operationDeadline = Math.min(expires, deadline ?? Infinity);
106
+ if (background) {
107
+ const size = wireSize(payload), transport = this.sdk._transport;
108
+ while (true) {
109
+ if (generation !== this.generation)
110
+ throw new PubSubError('CLOSED');
111
+ if (this.clock() >= operationDeadline)
112
+ throw new PubSubError(operationDeadline < expires ? 'TIMEOUT' : 'EXPIRED');
113
+ if (expires - this.clock() < 1000)
114
+ throw new PubSubError('EXPIRED');
115
+ const blocked = await this.pressure(transport, operationDeadline - this.clock(), generation);
116
+ if (generation !== this.generation)
117
+ throw new PubSubError('CLOSED');
118
+ if (blocked) {
119
+ await this.pause(Math.min(10, operationDeadline - this.clock()), generation);
120
+ continue;
121
+ }
122
+ if (this.rate.take(size))
123
+ break;
124
+ await this.pause(Math.min(this.rate.delay(size), operationDeadline - this.clock()), generation);
125
+ }
126
+ }
127
+ const remaining = Math.floor((expires - this.clock()) / 1000);
128
+ ttl = Math.min(ttl, remaining, 3600);
129
+ if (!Number.isInteger(ttl) || ttl < 1)
130
+ throw new PubSubError('EXPIRED');
131
+ if (this.publishReceiver && (!route?.device_id || !route.slot_id))
132
+ throw new PubSubError('INVALID_TARGET');
133
+ const headers = { message_class: 'sdk_control', sdk_control_protocol: 'aun.pubsub', sdk_control_version: 1, ...(this.publishReceiver ? { target_device_id: route.device_id, target_slot_id: route.slot_id } : { service_target: 'event_service' }) };
134
+ return this.sdk.call('message.send', { to, payload, ttl, message_id: messageId, encrypt: true, ...(route ? { device_id: route.device_id } : {}), message_class: 'sdk_control', sdk_control_protocol: 'aun.pubsub', sdk_control_version: 1, protected_headers: headers, _rpc_background_kind: background ? 'event' : undefined, _rpc_deadline: operationDeadline }, { background: background ? 'event' : false, deadline: operationDeadline });
135
+ }
136
+ }
137
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/pubsub/channel.ts"],"names":[],"mappings":"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"}