@private.me/xbind 3.0.2 → 3.0.3

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 (221) hide show
  1. package/README.md +2366 -204
  2. package/README.md.backup +2121 -0
  3. package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1 -1920
  4. package/dist-standalone/_deps/shared/cjs/errors.js +1 -729
  5. package/dist-standalone/_deps/shared/cjs/index.js +1 -463
  6. package/dist-standalone/_deps/shared/cjs/types.js +1 -315
  7. package/dist-standalone/_deps/shared/errors.js +1 -244
  8. package/dist-standalone/_deps/shared/index.js +1 -72
  9. package/dist-standalone/_deps/shared/types.js +1 -86
  10. package/dist-standalone/_deps/ux-helpers/cjs/errors.js +1 -1
  11. package/dist-standalone/_deps/ux-helpers/cjs/index.js +1 -1
  12. package/dist-standalone/_deps/ux-helpers/cjs/pagination.js +1 -1
  13. package/dist-standalone/_deps/ux-helpers/cjs/progress.js +1 -1
  14. package/dist-standalone/_deps/ux-helpers/cjs/search.js +1 -1
  15. package/dist-standalone/_deps/ux-helpers/cjs/types.js +1 -1
  16. package/dist-standalone/_deps/ux-helpers/errors.js +1 -1
  17. package/dist-standalone/_deps/ux-helpers/index.js +1 -1
  18. package/dist-standalone/_deps/ux-helpers/pagination.js +1 -1
  19. package/dist-standalone/_deps/ux-helpers/progress.js +1 -1
  20. package/dist-standalone/_deps/ux-helpers/search.js +1 -1
  21. package/dist-standalone/_deps/xchange/auto-accept.js +1 -1
  22. package/dist-standalone/_deps/xchange/cjs/auto-accept.js +1 -1
  23. package/dist-standalone/_deps/xchange/cjs/errors.js +1 -1
  24. package/dist-standalone/_deps/xchange/cjs/index.js +1 -1
  25. package/dist-standalone/_deps/xchange/cjs/invite-client.js +1 -1
  26. package/dist-standalone/_deps/xchange/cjs/lazy-init.js +1 -1
  27. package/dist-standalone/_deps/xchange/cjs/trust-integration.js +1 -1
  28. package/dist-standalone/_deps/xchange/cjs/xchange.js +1 -1
  29. package/dist-standalone/_deps/xchange/errors.js +1 -1
  30. package/dist-standalone/_deps/xchange/index.js +1 -1
  31. package/dist-standalone/_deps/xchange/invite-client.js +1 -1
  32. package/dist-standalone/_deps/xchange/lazy-init.js +1 -1
  33. package/dist-standalone/_deps/xchange/trust-integration.js +1 -1
  34. package/dist-standalone/_deps/xchange/xchange.js +1 -1
  35. package/dist-standalone/_deps/xregistry/cjs/discovery.js +1 -1
  36. package/dist-standalone/_deps/xregistry/cjs/errors.js +1 -1
  37. package/dist-standalone/_deps/xregistry/cjs/index.js +1 -1
  38. package/dist-standalone/_deps/xregistry/cjs/registry.js +1 -1
  39. package/dist-standalone/_deps/xregistry/cjs/schema.js +1 -1
  40. package/dist-standalone/_deps/xregistry/cjs/types.js +1 -1
  41. package/dist-standalone/_deps/xregistry/discovery.js +1 -1
  42. package/dist-standalone/_deps/xregistry/errors.js +1 -1
  43. package/dist-standalone/_deps/xregistry/index.js +1 -1
  44. package/dist-standalone/_deps/xregistry/registry.js +1 -1
  45. package/dist-standalone/_deps/xregistry/schema.js +1 -1
  46. package/dist-standalone/_deps/xregistry/types.js +1 -1
  47. package/dist-standalone/agent-call.d.ts +2 -2
  48. package/dist-standalone/agent-call.js +1 -659
  49. package/dist-standalone/agent-sdk.js +1 -328
  50. package/dist-standalone/agent.d.ts +2 -0
  51. package/dist-standalone/agent.js +1 -1800
  52. package/dist-standalone/approval.js +1 -193
  53. package/dist-standalone/async-iterators.d.ts +3 -3
  54. package/dist-standalone/async-iterators.js +1 -382
  55. package/dist-standalone/auth.js +1 -219
  56. package/dist-standalone/auto-accept.js +1 -229
  57. package/dist-standalone/backup-config.js +1 -201
  58. package/dist-standalone/backup.js +1 -326
  59. package/dist-standalone/batch-operations.js +1 -388
  60. package/dist-standalone/cancellation.js +1 -477
  61. package/dist-standalone/checkpoint.js +1 -186
  62. package/dist-standalone/circuit-breaker.js +1 -468
  63. package/dist-standalone/cjs/agent-call.js +1 -701
  64. package/dist-standalone/cjs/agent-sdk.js +1 -332
  65. package/dist-standalone/cjs/agent.js +1 -1837
  66. package/dist-standalone/cjs/approval.js +1 -199
  67. package/dist-standalone/cjs/async-iterators.js +1 -392
  68. package/dist-standalone/cjs/auth.js +1 -225
  69. package/dist-standalone/cjs/auto-accept.js +1 -233
  70. package/dist-standalone/cjs/backup-config.js +1 -207
  71. package/dist-standalone/cjs/backup.js +1 -330
  72. package/dist-standalone/cjs/batch-operations.js +1 -397
  73. package/dist-standalone/cjs/cancellation.js +1 -490
  74. package/dist-standalone/cjs/checkpoint.js +1 -193
  75. package/dist-standalone/cjs/circuit-breaker.js +1 -476
  76. package/dist-standalone/cjs/cli/init.js +1 -492
  77. package/dist-standalone/cjs/config-validation.js +1 -522
  78. package/dist-standalone/cjs/connect.js +1 -312
  79. package/dist-standalone/cjs/connection-pool.js +1 -506
  80. package/dist-standalone/cjs/correlation-id.js +1 -339
  81. package/dist-standalone/cjs/crypto-utils.js +1 -176
  82. package/dist-standalone/cjs/debug-mode.js +1 -534
  83. package/dist-standalone/cjs/did-document.js +1 -101
  84. package/dist-standalone/cjs/did-privateme.js +1 -130
  85. package/dist-standalone/cjs/did-web.js +1 -201
  86. package/dist-standalone/cjs/discovery.js +1 -462
  87. package/dist-standalone/cjs/dual-mode.js +1 -251
  88. package/dist-standalone/cjs/email-templates.js +1 -313
  89. package/dist-standalone/cjs/email-transport.js +1 -239
  90. package/dist-standalone/cjs/envelope.js +1 -538
  91. package/dist-standalone/cjs/errors.js +1 -913
  92. package/dist-standalone/cjs/event-emitter.js +1 -461
  93. package/dist-standalone/cjs/gateway-state.js +1 -55
  94. package/dist-standalone/cjs/gateway-transport.js +1 -120
  95. package/dist-standalone/cjs/graceful-degradation.js +1 -403
  96. package/dist-standalone/cjs/guardrails.js +1 -223
  97. package/dist-standalone/cjs/health-check.js +1 -336
  98. package/dist-standalone/cjs/http-compat.js +1 -272
  99. package/dist-standalone/cjs/http-status-map.js +1 -571
  100. package/dist-standalone/cjs/identity.js +1 -645
  101. package/dist-standalone/cjs/index.js +1 -406
  102. package/dist-standalone/cjs/invitation.js +1 -421
  103. package/dist-standalone/cjs/invite.js +1 -328
  104. package/dist-standalone/cjs/key-agreement.js +1 -335
  105. package/dist-standalone/cjs/lazy-init.js +1 -300
  106. package/dist-standalone/cjs/logger.js +1 -291
  107. package/dist-standalone/cjs/loopback-transport.js +1 -0
  108. package/dist-standalone/cjs/mdns-discovery.js +1 -202
  109. package/dist-standalone/cjs/nonce-store.js +1 -80
  110. package/dist-standalone/cjs/pairing-manager.js +1 -223
  111. package/dist-standalone/cjs/plugin-system.js +1 -264
  112. package/dist-standalone/cjs/plugins/logging.js +1 -168
  113. package/dist-standalone/cjs/plugins/metrics.js +1 -181
  114. package/dist-standalone/cjs/plugins/validation.js +1 -302
  115. package/dist-standalone/cjs/policy.js +1 -320
  116. package/dist-standalone/cjs/progress-callbacks.js +1 -583
  117. package/dist-standalone/cjs/redis-nonce-store.js +1 -76
  118. package/dist-standalone/cjs/registry-middleware.js +1 -50
  119. package/dist-standalone/cjs/retry-strategies.js +1 -544
  120. package/dist-standalone/cjs/retry-transport.js +1 -102
  121. package/dist-standalone/cjs/runtime/browser.js +1 -533
  122. package/dist-standalone/cjs/runtime/edge.js +1 -526
  123. package/dist-standalone/cjs/runtime/react-native.js +1 -394
  124. package/dist-standalone/cjs/security-policy.js +1 -245
  125. package/dist-standalone/cjs/serialization.js +1 -1040
  126. package/dist-standalone/cjs/split-channel.js +1 -225
  127. package/dist-standalone/cjs/subscription-proof.js +1 -230
  128. package/dist-standalone/cjs/succession.js +1 -148
  129. package/dist-standalone/cjs/timeouts.js +1 -412
  130. package/dist-standalone/cjs/trace-context.js +1 -424
  131. package/dist-standalone/cjs/trace-spans.js +1 -495
  132. package/dist-standalone/cjs/transport.js +1 -63
  133. package/dist-standalone/cjs/trust-registry.js +1 -991
  134. package/dist-standalone/cjs/types/error-response.js +1 -56
  135. package/dist-standalone/cjs/vault-auth.js +1 -178
  136. package/dist-standalone/cjs/vault-store-loader.js +1 -194
  137. package/dist-standalone/cjs/verify.js +1 -25
  138. package/dist-standalone/cjs/version-info.js +1 -543
  139. package/dist-standalone/cjs/xfetch.js +1 -340
  140. package/dist-standalone/cli/init.js +1 -455
  141. package/dist-standalone/cli/setup.js +1 -514
  142. package/dist-standalone/cli/types.js +1 -27
  143. package/dist-standalone/cli/xbind.js +1 -148
  144. package/dist-standalone/config-validation.js +1 -513
  145. package/dist-standalone/connect.js +1 -274
  146. package/dist-standalone/connection-pool.js +1 -500
  147. package/dist-standalone/correlation-id.js +1 -326
  148. package/dist-standalone/crypto-utils.d.ts +2 -7
  149. package/dist-standalone/crypto-utils.js +1 -157
  150. package/dist-standalone/debug-mode.js +1 -510
  151. package/dist-standalone/did-document.js +1 -96
  152. package/dist-standalone/did-privateme.js +1 -121
  153. package/dist-standalone/did-web.js +1 -196
  154. package/dist-standalone/discovery.js +1 -458
  155. package/dist-standalone/dual-mode.js +1 -247
  156. package/dist-standalone/email-templates.js +1 -309
  157. package/dist-standalone/email-transport.d.ts +2 -2
  158. package/dist-standalone/email-transport.js +1 -232
  159. package/dist-standalone/envelope.js +1 -525
  160. package/dist-standalone/errors.d.ts +13 -3
  161. package/dist-standalone/errors.js +1 -896
  162. package/dist-standalone/event-emitter.js +1 -456
  163. package/dist-standalone/gateway-state.d.ts +1 -1
  164. package/dist-standalone/gateway-state.js +1 -51
  165. package/dist-standalone/gateway-transport.js +1 -116
  166. package/dist-standalone/graceful-degradation.js +1 -396
  167. package/dist-standalone/guardrails.js +1 -216
  168. package/dist-standalone/health-check.d.ts +5 -1
  169. package/dist-standalone/health-check.js +1 -332
  170. package/dist-standalone/http-compat.d.ts +1 -1
  171. package/dist-standalone/http-compat.js +1 -267
  172. package/dist-standalone/http-status-map.js +1 -561
  173. package/dist-standalone/identity.js +1 -619
  174. package/dist-standalone/index.d.ts +15 -4
  175. package/dist-standalone/index.js +1 -78
  176. package/dist-standalone/invitation.js +1 -415
  177. package/dist-standalone/invite.js +1 -324
  178. package/dist-standalone/key-agreement.js +1 -325
  179. package/dist-standalone/lazy-init.d.ts +11 -6
  180. package/dist-standalone/lazy-init.js +1 -295
  181. package/dist-standalone/logger.js +1 -285
  182. package/dist-standalone/loopback-transport.d.ts +87 -0
  183. package/dist-standalone/loopback-transport.js +1 -0
  184. package/dist-standalone/mdns-discovery.js +1 -195
  185. package/dist-standalone/nonce-store.js +1 -76
  186. package/dist-standalone/pairing-manager.js +1 -219
  187. package/dist-standalone/plugin-system.js +1 -257
  188. package/dist-standalone/plugins/logging.js +1 -163
  189. package/dist-standalone/plugins/metrics.d.ts +4 -4
  190. package/dist-standalone/plugins/metrics.js +1 -176
  191. package/dist-standalone/plugins/validation.js +1 -297
  192. package/dist-standalone/policy.js +1 -315
  193. package/dist-standalone/progress-callbacks.js +1 -576
  194. package/dist-standalone/redis-nonce-store.js +1 -72
  195. package/dist-standalone/registry-middleware.js +1 -47
  196. package/dist-standalone/retry-strategies.js +1 -534
  197. package/dist-standalone/retry-transport.js +1 -98
  198. package/dist-standalone/runtime/browser.js +1 -516
  199. package/dist-standalone/runtime/edge.js +1 -511
  200. package/dist-standalone/runtime/react-native.d.ts +1 -1
  201. package/dist-standalone/runtime/react-native.js +1 -383
  202. package/dist-standalone/security-policy.js +1 -239
  203. package/dist-standalone/serialization.js +1 -1031
  204. package/dist-standalone/split-channel.js +1 -219
  205. package/dist-standalone/subscription-proof.js +1 -224
  206. package/dist-standalone/succession.js +1 -142
  207. package/dist-standalone/timeouts.js +1 -398
  208. package/dist-standalone/trace-context.js +1 -414
  209. package/dist-standalone/trace-spans.js +1 -488
  210. package/dist-standalone/transport.js +1 -59
  211. package/dist-standalone/trust-registry.d.ts +3 -3
  212. package/dist-standalone/trust-registry.js +1 -950
  213. package/dist-standalone/types/error-response.js +1 -52
  214. package/dist-standalone/vault-auth.js +1 -174
  215. package/dist-standalone/vault-store-loader.d.ts +9 -0
  216. package/dist-standalone/vault-store-loader.js +1 -187
  217. package/dist-standalone/verify.js +1 -16
  218. package/dist-standalone/version-info.js +1 -530
  219. package/dist-standalone/xfetch.js +1 -335
  220. package/package.json +1 -1
  221. package/share1.dat +0 -0
@@ -1,397 +1 @@
1
- "use strict";
2
- /**
3
- * @module batch-operations
4
- * Batch operations support for xBind - enhanced API efficiency
5
- *
6
- * Provides batch operations for:
7
- * - Send: Multiple messages in one call (reduces round-trips)
8
- * - Receive: Batch envelope processing
9
- * - Registry: Bulk registration/revocation/updates
10
- *
11
- * Features:
12
- * - Atomic semantics where possible (registry operations)
13
- * - Partial success handling (graceful degradation)
14
- * - Progress tracking for long-running batches
15
- * - Performance optimization (parallel processing)
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.BatchOperationError = void 0;
19
- exports.batchSend = batchSend;
20
- exports.batchReceive = batchReceive;
21
- exports.batchRegistryOps = batchRegistryOps;
22
- exports.batchResolve = batchResolve;
23
- exports.batchGetEntries = batchGetEntries;
24
- const shared_1 = require("../_deps/shared/index.js");
25
- const ux_helpers_1 = require("../_deps/ux-helpers/index.js");
26
- /**
27
- * Error thrown when batch operation fails.
28
- */
29
- class BatchOperationError extends Error {
30
- summary;
31
- constructor(message, summary) {
32
- super(message);
33
- this.summary = summary;
34
- this.name = 'BatchOperationError';
35
- }
36
- }
37
- exports.BatchOperationError = BatchOperationError;
38
- /* ── Implementation ── */
39
- /**
40
- * Batch send multiple messages.
41
- *
42
- * Performance optimization: Sends messages in parallel (default) or sequentially.
43
- * Reduces round-trips for bulk message delivery.
44
- *
45
- * @param agent - Agent instance
46
- * @param options - Batch send options
47
- * @returns Batch summary with individual results
48
- *
49
- * @example
50
- * ```typescript
51
- * const agent = await Agent.create({ name: 'sender', registry });
52
- * const summary = await batchSend(agent, {
53
- * messages: [
54
- * { to: 'did:key:abc', payload: { msg: 1 }, scope: 'chat' },
55
- * { to: 'did:key:def', payload: { msg: 2 }, scope: 'chat' },
56
- * ],
57
- * strategy: 'parallel',
58
- * });
59
- * console.log(`Sent ${summary.succeeded}/${summary.total} messages`);
60
- * ```
61
- */
62
- async function batchSend(agent, options) {
63
- const progress = new ux_helpers_1.ProgressReporter(options.onProgress);
64
- const startTime = Date.now();
65
- const { messages, strategy = 'parallel', concurrency = 10, continueOnError = true, } = options;
66
- progress.start(`Sending ${messages.length} messages (${strategy} mode)...`);
67
- const results = [];
68
- if (strategy === 'sequential') {
69
- // Sequential: preserve ordering
70
- for (let i = 0; i < messages.length; i++) {
71
- const msg = messages[i];
72
- const opStart = Date.now();
73
- progress.update(`Sending message ${i + 1}/${messages.length}...`, (i / messages.length) * 100);
74
- const result = await agent.send(msg);
75
- const durationMs = Date.now() - opStart;
76
- results.push({ index: i, result, durationMs });
77
- if (!continueOnError && !result.ok) {
78
- break;
79
- }
80
- }
81
- }
82
- else if (strategy === 'failfast') {
83
- // Parallel with fail-fast: stop immediately on first error
84
- const promises = messages.map((msg, index) => {
85
- const opStart = Date.now();
86
- return agent.send(msg).then(result => {
87
- const durationMs = Date.now() - opStart;
88
- if (!result.ok) {
89
- throw new BatchOperationError(`Batch send failed at index ${index}: ${result.error}`, createSummary(results, Date.now() - startTime));
90
- }
91
- return { index, result, durationMs };
92
- });
93
- });
94
- try {
95
- const allResults = await Promise.all(promises);
96
- results.push(...allResults);
97
- }
98
- catch (error) {
99
- if (error instanceof BatchOperationError) {
100
- throw error;
101
- }
102
- throw new BatchOperationError('Batch send failed', createSummary(results, Date.now() - startTime));
103
- }
104
- }
105
- else {
106
- // Parallel: process concurrently with controlled concurrency
107
- const chunks = chunkArray(messages, concurrency);
108
- for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
109
- const chunk = chunks[chunkIndex];
110
- const baseIndex = chunkIndex * concurrency;
111
- progress.update(`Processing chunk ${chunkIndex + 1}/${chunks.length}...`, (chunkIndex / chunks.length) * 100);
112
- const chunkResults = await Promise.all(chunk.map(async (msg, offset) => {
113
- const index = baseIndex + offset;
114
- const opStart = Date.now();
115
- const result = await agent.send(msg);
116
- const durationMs = Date.now() - opStart;
117
- return { index, result, durationMs };
118
- }));
119
- results.push(...chunkResults);
120
- }
121
- }
122
- progress.complete();
123
- return createSummary(results, Date.now() - startTime);
124
- }
125
- /**
126
- * Batch receive multiple envelopes.
127
- *
128
- * Performance optimization: Processes envelopes in parallel (default).
129
- * Useful for bulk message ingestion from queues or webhooks.
130
- *
131
- * @param agent - Agent instance
132
- * @param options - Batch receive options
133
- * @returns Batch summary with individual results
134
- *
135
- * @example
136
- * ```typescript
137
- * const agent = await Agent.create({ name: 'receiver', registry });
138
- * const summary = await batchReceive(agent, {
139
- * envelopes: incomingEnvelopes,
140
- * strategy: 'parallel',
141
- * });
142
- * console.log(`Processed ${summary.succeeded}/${summary.total} envelopes`);
143
- * ```
144
- */
145
- async function batchReceive(agent, options) {
146
- const progress = new ux_helpers_1.ProgressReporter(options.onProgress);
147
- const startTime = Date.now();
148
- const { envelopes, receiveOptions, strategy = 'parallel', concurrency = 10, continueOnError = true, } = options;
149
- progress.start(`Receiving ${envelopes.length} envelopes (${strategy} mode)...`);
150
- const results = [];
151
- if (strategy === 'sequential') {
152
- // Sequential: preserve ordering
153
- for (let i = 0; i < envelopes.length; i++) {
154
- const envelope = envelopes[i];
155
- const opStart = Date.now();
156
- progress.update(`Receiving envelope ${i + 1}/${envelopes.length}...`, (i / envelopes.length) * 100);
157
- const result = await agent.receive(envelope, receiveOptions);
158
- const durationMs = Date.now() - opStart;
159
- results.push({ index: i, result, durationMs });
160
- if (!continueOnError && !result.ok) {
161
- break;
162
- }
163
- }
164
- }
165
- else {
166
- // Parallel: process concurrently with controlled concurrency
167
- const chunks = chunkArray(envelopes, concurrency);
168
- for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
169
- const chunk = chunks[chunkIndex];
170
- const baseIndex = chunkIndex * concurrency;
171
- progress.update(`Processing chunk ${chunkIndex + 1}/${chunks.length}...`, (chunkIndex / chunks.length) * 100);
172
- const chunkResults = await Promise.all(chunk.map(async (envelope, offset) => {
173
- const index = baseIndex + offset;
174
- const opStart = Date.now();
175
- const result = await agent.receive(envelope, receiveOptions);
176
- const durationMs = Date.now() - opStart;
177
- return { index, result, durationMs };
178
- }));
179
- results.push(...chunkResults);
180
- }
181
- }
182
- progress.complete();
183
- return createSummary(results, Date.now() - startTime);
184
- }
185
- /**
186
- * Batch registry operations (register, revoke, updateScopes).
187
- *
188
- * Performance optimization: Groups operations by type for efficient processing.
189
- * Atomic semantics: When atomic=true, all operations succeed or all fail.
190
- *
191
- * @param registry - Trust registry instance
192
- * @param options - Batch registry options
193
- * @returns Batch summary with individual results
194
- *
195
- * @example
196
- * ```typescript
197
- * const summary = await batchRegistryOps(registry, {
198
- * operations: [
199
- * { type: 'register', did: 'did:key:abc', params: { publicKey, name: 'Alice' } },
200
- * { type: 'revoke', did: 'did:key:old' },
201
- * ],
202
- * atomic: false, // best-effort mode
203
- * });
204
- * console.log(`Completed ${summary.succeeded}/${summary.total} operations`);
205
- * ```
206
- */
207
- async function batchRegistryOps(registry, options) {
208
- const progress = new ux_helpers_1.ProgressReporter(options.onProgress);
209
- const startTime = Date.now();
210
- const { operations, atomic = false, strategy = 'parallel', concurrency = 5, } = options;
211
- progress.start(`Executing ${operations.length} registry operations (${atomic ? 'atomic' : 'best-effort'} mode)...`);
212
- const results = [];
213
- // Atomic mode: execute all or rollback (not implemented in base TrustRegistry)
214
- // This is a placeholder for future transaction support
215
- if (atomic) {
216
- progress.update('Warning: Atomic mode not fully implemented - using best-effort', 10);
217
- }
218
- if (strategy === 'sequential') {
219
- // Sequential: preserve ordering
220
- for (let i = 0; i < operations.length; i++) {
221
- const op = operations[i];
222
- const opStart = Date.now();
223
- progress.update(`Operation ${i + 1}/${operations.length}: ${op.type} ${op.did}`, (i / operations.length) * 100);
224
- const result = await executeRegistryOperation(registry, op);
225
- const durationMs = Date.now() - opStart;
226
- results.push({ index: i, result, durationMs });
227
- if (atomic && !result.ok) {
228
- // TODO: Rollback previous operations
229
- break;
230
- }
231
- }
232
- }
233
- else {
234
- // Parallel: process concurrently with controlled concurrency
235
- const chunks = chunkArray(operations, concurrency);
236
- for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
237
- const chunk = chunks[chunkIndex];
238
- const baseIndex = chunkIndex * concurrency;
239
- progress.update(`Processing chunk ${chunkIndex + 1}/${chunks.length}...`, (chunkIndex / chunks.length) * 100);
240
- const chunkResults = await Promise.all(chunk.map(async (op, offset) => {
241
- const index = baseIndex + offset;
242
- const opStart = Date.now();
243
- const result = await executeRegistryOperation(registry, op);
244
- const durationMs = Date.now() - opStart;
245
- return { index, result, durationMs };
246
- }));
247
- results.push(...chunkResults);
248
- if (atomic && chunkResults.some(r => !r.result.ok)) {
249
- // TODO: Rollback all operations
250
- break;
251
- }
252
- }
253
- }
254
- progress.complete();
255
- return createSummary(results, Date.now() - startTime);
256
- }
257
- /**
258
- * Batch resolve multiple DIDs.
259
- *
260
- * Performance optimization: Resolves DIDs in parallel.
261
- * Useful for resolving recipient keys before bulk message sending.
262
- *
263
- * @param registry - Trust registry instance
264
- * @param dids - DIDs to resolve
265
- * @param options - Optional progress callback and concurrency
266
- * @returns Batch summary with resolution results
267
- *
268
- * @example
269
- * ```typescript
270
- * const summary = await batchResolve(registry, [
271
- * 'did:key:abc',
272
- * 'did:key:def',
273
- * 'did:key:ghi',
274
- * ]);
275
- * const keys = summary.results
276
- * .filter(r => r.result.ok)
277
- * .map(r => r.result.value);
278
- * ```
279
- */
280
- async function batchResolve(registry, dids, options) {
281
- const progress = new ux_helpers_1.ProgressReporter(options?.onProgress);
282
- const startTime = Date.now();
283
- const concurrency = options?.concurrency ?? 10;
284
- progress.start(`Resolving ${dids.length} DIDs...`);
285
- const results = [];
286
- const chunks = chunkArray(dids, concurrency);
287
- for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
288
- const chunk = chunks[chunkIndex];
289
- const baseIndex = chunkIndex * concurrency;
290
- progress.update(`Resolving chunk ${chunkIndex + 1}/${chunks.length}...`, (chunkIndex / chunks.length) * 100);
291
- const chunkResults = await Promise.all(chunk.map(async (did, offset) => {
292
- const index = baseIndex + offset;
293
- const opStart = Date.now();
294
- const result = await registry.resolve(did);
295
- const durationMs = Date.now() - opStart;
296
- return { index, result, durationMs };
297
- }));
298
- results.push(...chunkResults);
299
- }
300
- progress.complete();
301
- return createSummary(results, Date.now() - startTime);
302
- }
303
- /**
304
- * Batch get registry entries.
305
- *
306
- * Performance optimization: Fetches entries in parallel.
307
- * Returns full registry metadata for multiple DIDs.
308
- *
309
- * @param registry - Trust registry instance
310
- * @param dids - DIDs to fetch
311
- * @param options - Optional progress callback and concurrency
312
- * @returns Batch summary with entry results
313
- *
314
- * @example
315
- * ```typescript
316
- * const summary = await batchGetEntries(registry, dids);
317
- * const entries = summary.results
318
- * .filter(r => r.result.ok)
319
- * .map(r => r.result.value);
320
- * ```
321
- */
322
- async function batchGetEntries(registry, dids, options) {
323
- const progress = new ux_helpers_1.ProgressReporter(options?.onProgress);
324
- const startTime = Date.now();
325
- const concurrency = options?.concurrency ?? 10;
326
- progress.start(`Fetching ${dids.length} registry entries...`);
327
- const results = [];
328
- const chunks = chunkArray(dids, concurrency);
329
- for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
330
- const chunk = chunks[chunkIndex];
331
- const baseIndex = chunkIndex * concurrency;
332
- progress.update(`Fetching chunk ${chunkIndex + 1}/${chunks.length}...`, (chunkIndex / chunks.length) * 100);
333
- const chunkResults = await Promise.all(chunk.map(async (did, offset) => {
334
- const index = baseIndex + offset;
335
- const opStart = Date.now();
336
- const result = await registry.getEntry(did);
337
- const durationMs = Date.now() - opStart;
338
- return { index, result, durationMs };
339
- }));
340
- results.push(...chunkResults);
341
- }
342
- progress.complete();
343
- return createSummary(results, Date.now() - startTime);
344
- }
345
- /* ── Helper Functions ── */
346
- /**
347
- * Execute a single registry operation.
348
- */
349
- async function executeRegistryOperation(registry, op) {
350
- switch (op.type) {
351
- case 'register': {
352
- if (!op.params) {
353
- return (0, shared_1.err)('INVALID_PARAMS');
354
- }
355
- const { publicKey, name, scopes, x25519PublicKey, mlKemPublicKey, mlDsaPublicKey, xchange, receiveScopes, sdkVersion, minEnvelopeVersion, maxEnvelopeVersion, ttlMs } = op.params;
356
- return registry.register(op.did, publicKey, name, scopes, x25519PublicKey, mlKemPublicKey, mlDsaPublicKey, xchange, receiveScopes, sdkVersion, minEnvelopeVersion, maxEnvelopeVersion, ttlMs);
357
- }
358
- case 'revoke':
359
- return registry.revoke(op.did);
360
- case 'updateScopes': {
361
- if (!op.newScopes || !('updateScopes' in registry) || typeof registry.updateScopes !== 'function') {
362
- return (0, shared_1.err)('INVALID_PARAMS');
363
- }
364
- return registry.updateScopes(op.did, op.newScopes);
365
- }
366
- default:
367
- return (0, shared_1.err)('INVALID_OPERATION');
368
- }
369
- }
370
- /**
371
- * Create batch summary from results.
372
- */
373
- function createSummary(results, totalDurationMs) {
374
- const succeeded = results.filter(r => r.result.ok).length;
375
- const failed = results.filter(r => !r.result.ok).length;
376
- const avgDurationMs = results.length > 0
377
- ? results.reduce((sum, r) => sum + r.durationMs, 0) / results.length
378
- : 0;
379
- return {
380
- total: results.length,
381
- succeeded,
382
- failed,
383
- results,
384
- totalDurationMs,
385
- avgDurationMs,
386
- };
387
- }
388
- /**
389
- * Split array into chunks of specified size.
390
- */
391
- function chunkArray(array, size) {
392
- const chunks = [];
393
- for (let i = 0; i < array.length; i += size) {
394
- chunks.push(array.slice(i, i + size));
395
- }
396
- return chunks;
397
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BatchOperationError=void 0,exports.batchSend=batchSend,exports.batchReceive=batchReceive,exports.batchRegistryOps=batchRegistryOps,exports.batchResolve=batchResolve,exports.batchGetEntries=batchGetEntries;const shared_1=require("../_deps/shared/index.js"),ux_helpers_1=require("../_deps/ux-helpers/index.js");class BatchOperationError extends Error{summary;constructor(e,t){super(e),this.summary=t,this.name="BatchOperationError"}}async function batchSend(e,t){const r=new ux_helpers_1.ProgressReporter(t.onProgress),n=Date.now(),{messages:s,strategy:o="parallel",concurrency:a=10,continueOnError:c=!0}=t;r.start(`Sending ${s.length} messages (${o} mode)...`);const i=[];if("sequential"===o)for(let t=0;t<s.length;t++){const n=s[t],o=Date.now();r.update(`Sending message ${t+1}/${s.length}...`,t/s.length*100);const a=await e.send(n),u=Date.now()-o;if(i.push({index:t,result:a,durationMs:u}),!c&&!a.ok)break}else if("failfast"===o){const t=s.map((t,r)=>{const s=Date.now();return e.send(t).then(e=>{const t=Date.now()-s;if(!e.ok)throw new BatchOperationError(`Batch send failed at index ${r}: ${e.error}`,createSummary(i,Date.now()-n));return{index:r,result:e,durationMs:t}})});try{const e=await Promise.all(t);i.push(...e)}catch(e){if(e instanceof BatchOperationError)throw e;throw new BatchOperationError("Batch send failed",createSummary(i,Date.now()-n))}}else{const t=chunkArray(s,a);for(let n=0;n<t.length;n++){const s=t[n],o=n*a;r.update(`Processing chunk ${n+1}/${t.length}...`,n/t.length*100);const c=await Promise.all(s.map(async(t,r)=>{const n=o+r,s=Date.now();return{index:n,result:await e.send(t),durationMs:Date.now()-s}}));i.push(...c)}}return r.complete(),createSummary(i,Date.now()-n)}async function batchReceive(e,t){const r=new ux_helpers_1.ProgressReporter(t.onProgress),n=Date.now(),{envelopes:s,receiveOptions:o,strategy:a="parallel",concurrency:c=10,continueOnError:i=!0}=t;r.start(`Receiving ${s.length} envelopes (${a} mode)...`);const u=[];if("sequential"===a)for(let t=0;t<s.length;t++){const n=s[t],a=Date.now();r.update(`Receiving envelope ${t+1}/${s.length}...`,t/s.length*100);const c=await e.receive(n,o),l=Date.now()-a;if(u.push({index:t,result:c,durationMs:l}),!i&&!c.ok)break}else{const t=chunkArray(s,c);for(let n=0;n<t.length;n++){const s=t[n],a=n*c;r.update(`Processing chunk ${n+1}/${t.length}...`,n/t.length*100);const i=await Promise.all(s.map(async(t,r)=>{const n=a+r,s=Date.now();return{index:n,result:await e.receive(t,o),durationMs:Date.now()-s}}));u.push(...i)}}return r.complete(),createSummary(u,Date.now()-n)}async function batchRegistryOps(e,t){const r=new ux_helpers_1.ProgressReporter(t.onProgress),n=Date.now(),{operations:s,atomic:o=!1,strategy:a="parallel",concurrency:c=5}=t;r.start(`Executing ${s.length} registry operations (${o?"atomic":"best-effort"} mode)...`);const i=[];if(o&&r.update("Warning: Atomic mode not fully implemented - using best-effort",10),"sequential"===a)for(let t=0;t<s.length;t++){const n=s[t],a=Date.now();r.update(`Operation ${t+1}/${s.length}: ${n.type} ${n.did}`,t/s.length*100);const c=await executeRegistryOperation(e,n),u=Date.now()-a;if(i.push({index:t,result:c,durationMs:u}),o&&!c.ok)break}else{const t=chunkArray(s,c);for(let n=0;n<t.length;n++){const s=t[n],a=n*c;r.update(`Processing chunk ${n+1}/${t.length}...`,n/t.length*100);const u=await Promise.all(s.map(async(t,r)=>{const n=a+r,s=Date.now();return{index:n,result:await executeRegistryOperation(e,t),durationMs:Date.now()-s}}));if(i.push(...u),o&&u.some(e=>!e.result.ok))break}}return r.complete(),createSummary(i,Date.now()-n)}async function batchResolve(e,t,r){const n=new ux_helpers_1.ProgressReporter(r?.onProgress),s=Date.now(),o=r?.concurrency??10;n.start(`Resolving ${t.length} DIDs...`);const a=[],c=chunkArray(t,o);for(let t=0;t<c.length;t++){const r=c[t],s=t*o;n.update(`Resolving chunk ${t+1}/${c.length}...`,t/c.length*100);const i=await Promise.all(r.map(async(t,r)=>{const n=s+r,o=Date.now();return{index:n,result:await e.resolve(t),durationMs:Date.now()-o}}));a.push(...i)}return n.complete(),createSummary(a,Date.now()-s)}async function batchGetEntries(e,t,r){const n=new ux_helpers_1.ProgressReporter(r?.onProgress),s=Date.now(),o=r?.concurrency??10;n.start(`Fetching ${t.length} registry entries...`);const a=[],c=chunkArray(t,o);for(let t=0;t<c.length;t++){const r=c[t],s=t*o;n.update(`Fetching chunk ${t+1}/${c.length}...`,t/c.length*100);const i=await Promise.all(r.map(async(t,r)=>{const n=s+r,o=Date.now();return{index:n,result:await e.getEntry(t),durationMs:Date.now()-o}}));a.push(...i)}return n.complete(),createSummary(a,Date.now()-s)}async function executeRegistryOperation(e,t){switch(t.type){case"register":{if(!t.params)return(0,shared_1.err)("INVALID_PARAMS");const{publicKey:r,name:n,scopes:s,x25519PublicKey:o,mlKemPublicKey:a,mlDsaPublicKey:c,xchange:i,receiveScopes:u,sdkVersion:l,minEnvelopeVersion:h,maxEnvelopeVersion:p,ttlMs:g}=t.params;return e.register(t.did,r,n,s,o,a,c,i,u,l,h,p,g)}case"revoke":return e.revoke(t.did);case"updateScopes":return t.newScopes&&"updateScopes"in e&&"function"==typeof e.updateScopes?e.updateScopes(t.did,t.newScopes):(0,shared_1.err)("INVALID_PARAMS");default:return(0,shared_1.err)("INVALID_OPERATION")}}function createSummary(e,t){const r=e.filter(e=>e.result.ok).length,n=e.filter(e=>!e.result.ok).length,s=e.length>0?e.reduce((e,t)=>e+t.durationMs,0)/e.length:0;return{total:e.length,succeeded:r,failed:n,results:e,totalDurationMs:t,avgDurationMs:s}}function chunkArray(e,t){const r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}exports.BatchOperationError=BatchOperationError;