@xeonr/upload-pool-sdk 1.2.0 → 1.4.0

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.
@@ -14,6 +14,24 @@ export interface JobEnvelope {
14
14
  config?: string;
15
15
  };
16
16
  folderContext?: FolderContext;
17
+ /**
18
+ * W3C traceparent string forwarded by pipeline-worker. The SDK parses
19
+ * this and uses it as the parent SpanContext for the iq.job root
20
+ * span so worker callbacks nest under the dispatching parseUpload
21
+ * trace. Optional — may be absent for legacy direct-dispatch paths.
22
+ */
23
+ traceContext?: string;
24
+ /**
25
+ * The pipeline workflow run id (workflow_runs.run_id) that owns this
26
+ * job. The SDK stamps it on every span as the `pipeline.run_id`
27
+ * attribute so pipeline-api's trace-store receiver associates the
28
+ * span with the right run. Optional in payload; spans without it
29
+ * are dropped by the receiver.
30
+ */
31
+ wfRunId?: string;
17
32
  }
18
- export declare function createJobContext(envelope: JobEnvelope, rpc: RpcClients, logger: Logger): JobContext;
33
+ export interface CreateJobContextOpts {
34
+ workerId?: string;
35
+ }
36
+ export declare function createJobContext(envelope: JobEnvelope, rpc: RpcClients, logger: Logger, opts?: CreateJobContextOpts): JobContext;
19
37
  //# sourceMappingURL=job-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"job-context.d.ts","sourceRoot":"","sources":["../src/job-context.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EACX,aAAa,EACb,UAAU,EAKV,MAAM,YAAY,CAAC;AAYpB,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,GACZ,UAAU,CA6MZ"}
1
+ {"version":3,"file":"job-context.d.ts","sourceRoot":"","sources":["../src/job-context.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO1C,OAAO,KAAK,EACX,aAAa,EACb,UAAU,EAKV,MAAM,YAAY,CAAC;AAYpB,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAkDD,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,oBAAyB,GAC7B,UAAU,CA6SZ"}
@@ -7,8 +7,10 @@
7
7
  */
8
8
  import { writeFile } from "node:fs/promises";
9
9
  import { create } from "@bufbuild/protobuf";
10
+ import { SpanStatusCode } from "@opentelemetry/api";
10
11
  import { ConfirmMetaUploadRequestSchema, InternalUpdateUploadRequestSchema, InternalUpdateUploadRequest_AiMetadataSchema, MetaTypeSchema, MetaUploadType, RequestMetaUploadRequestSchema, } from "./protocol/uplim/api/v1/uploads_pb.js";
11
12
  import { UploadMetadataSchema } from "./protocol/uplim/api/v1/metadata_pb.js";
13
+ import { SPAN_ATTR, getTracingHandle, recordSpanError, stampJobAttributes, } from "./tracing.js";
12
14
  const META_TYPE_MAP = {
13
15
  THUMBNAIL_LIGHT: MetaUploadType.MetaUploadType_THUMBNAIL_LIGHT,
14
16
  THUMBNAIL_DARK: MetaUploadType.MetaUploadType_THUMBNAIL_DARK,
@@ -18,7 +20,51 @@ const META_TYPE_MAP = {
18
20
  AI_CONTENT: MetaUploadType.MetaUploadType_AI_CONTENT,
19
21
  RENDERER_CONFIG: MetaUploadType.MetaUploadType_RENDERER_CONFIG,
20
22
  };
21
- export function createJobContext(envelope, rpc, logger) {
23
+ /**
24
+ * Wrap an async fn in an `iq.ctx.*` span stamped with the job's identifiers.
25
+ * Used for every ctx.* method so the admin UI sees a row per handler
26
+ * callback with its own latency and (where applicable) request/response
27
+ * body on span events.
28
+ *
29
+ * No-op when tracing is uninitialised (e.g. in tests): the inner fn runs
30
+ * directly and we lose the span, no exception.
31
+ */
32
+ function withCtxSpan(name, envelope, workerId, fn, attrs) {
33
+ const handle = getTracingHandle();
34
+ if (!handle) {
35
+ return fn();
36
+ }
37
+ return handle.tracer.startActiveSpan(name, async (span) => {
38
+ stampJobAttributes(span, {
39
+ runId: envelope.wfRunId ?? "",
40
+ jobId: envelope.jobId,
41
+ uploadId: envelope.uploadId,
42
+ urn: envelope.contentTypeContext.urn,
43
+ workerId,
44
+ });
45
+ if (attrs) {
46
+ for (const [k, v] of Object.entries(attrs)) {
47
+ span.setAttribute(k, v);
48
+ }
49
+ }
50
+ const startedAt = Date.now();
51
+ try {
52
+ const result = await fn();
53
+ span.setAttribute("ctx.duration_ms", Date.now() - startedAt);
54
+ span.setStatus({ code: SpanStatusCode.OK });
55
+ return result;
56
+ }
57
+ catch (err) {
58
+ recordSpanError(span, err);
59
+ throw err;
60
+ }
61
+ finally {
62
+ span.end();
63
+ }
64
+ });
65
+ }
66
+ export function createJobContext(envelope, rpc, logger, opts = {}) {
67
+ const workerId = opts.workerId;
22
68
  const ctx = {
23
69
  jobId: envelope.jobId,
24
70
  uploadId: envelope.uploadId,
@@ -34,164 +80,209 @@ export function createJobContext(envelope, rpc, logger) {
34
80
  folderContext: envelope.folderContext,
35
81
  sourceUrl: envelope.sourceUrl,
36
82
  async download() {
37
- logger.debug("source.download.start");
38
- const resp = await fetch(envelope.sourceUrl);
39
- if (!resp.ok || !resp.body) {
40
- logger.error("source.download.failed", {
41
- status: resp.status,
42
- statusText: resp.statusText,
43
- });
44
- throw new Error(`source download failed: ${resp.status} ${resp.statusText}`);
45
- }
46
- return resp.body;
83
+ return withCtxSpan("iq.ctx.download", envelope, workerId, async () => {
84
+ logger.debug("source.download.start");
85
+ const resp = await fetch(envelope.sourceUrl);
86
+ if (!resp.ok || !resp.body) {
87
+ logger.error("source.download.failed", {
88
+ status: resp.status,
89
+ statusText: resp.statusText,
90
+ });
91
+ throw new Error(`source download failed: ${resp.status} ${resp.statusText}`);
92
+ }
93
+ return resp.body;
94
+ }, { "ctx.mode": "stream" });
47
95
  },
48
96
  async downloadBuffer() {
49
- logger.debug("source.download.start", { mode: "buffer" });
50
- const resp = await fetch(envelope.sourceUrl);
51
- if (!resp.ok) {
52
- logger.error("source.download.failed", {
53
- status: resp.status,
54
- statusText: resp.statusText,
55
- });
56
- throw new Error(`source download failed: ${resp.status} ${resp.statusText}`);
57
- }
58
- const buf = await resp.arrayBuffer();
59
- logger.debug("source.download.complete", { sizeBytes: buf.byteLength });
60
- return new Uint8Array(buf);
97
+ return withCtxSpan("iq.ctx.download", envelope, workerId, async () => {
98
+ logger.debug("source.download.start", { mode: "buffer" });
99
+ const resp = await fetch(envelope.sourceUrl);
100
+ if (!resp.ok) {
101
+ logger.error("source.download.failed", {
102
+ status: resp.status,
103
+ statusText: resp.statusText,
104
+ });
105
+ throw new Error(`source download failed: ${resp.status} ${resp.statusText}`);
106
+ }
107
+ const buf = await resp.arrayBuffer();
108
+ logger.debug("source.download.complete", { sizeBytes: buf.byteLength });
109
+ return new Uint8Array(buf);
110
+ }, { "ctx.mode": "buffer" });
61
111
  },
62
112
  async downloadToFile(path) {
63
- const data = await ctx.downloadBuffer();
64
- await writeFile(path, data);
65
- logger.debug("source.download.to_file", { path, sizeBytes: data.byteLength });
113
+ return withCtxSpan("iq.ctx.download_to_file", envelope, workerId, async () => {
114
+ const data = await ctx.downloadBuffer();
115
+ await writeFile(path, data);
116
+ logger.debug("source.download.to_file", {
117
+ path,
118
+ sizeBytes: data.byteLength,
119
+ });
120
+ });
66
121
  },
67
122
  async uploadMeta(opts) {
68
- logger.debug("meta.upload.start", {
69
- type: opts.type,
70
- instance: opts.instance,
71
- filename: opts.filename,
72
- });
73
- const protoType = META_TYPE_MAP[opts.type];
74
- const metaType = create(MetaTypeSchema, {
75
- type: protoType,
76
- n: opts.instance,
77
- filename: opts.filename,
78
- });
79
- // 1. RequestMetaUpload → presigned URL.
80
- const requested = await rpc.internalUploads.requestMetaUpload(create(RequestMetaUploadRequestSchema, {
81
- updateToken: envelope.updateToken,
82
- metaType: [metaType],
83
- }));
84
- const meta = requested.metaUploads[0];
85
- if (!meta) {
86
- throw new Error("RequestMetaUpload returned no meta_uploads");
87
- }
88
- // 2. S3 PUT.
89
- const contentType = opts.contentType ?? inferContentType(opts.type);
90
- const body = opts.data instanceof Uint8Array
91
- ? opts.data
92
- : opts.data;
93
- const putResp = await fetch(meta.uploadUrl, {
94
- method: "PUT",
95
- body: body,
96
- headers: { "Content-Type": contentType },
97
- duplex: "half",
98
- });
99
- if (!putResp.ok) {
100
- throw new Error(`meta upload PUT failed: ${putResp.status} ${putResp.statusText}`);
101
- }
102
- // 3. ConfirmMetaUpload.
103
- await rpc.internalUploads.confirmMetaUpload(create(ConfirmMetaUploadRequestSchema, {
104
- updateToken: envelope.updateToken,
105
- metadataId: [meta.metadataId],
106
- }));
107
- logger.info("meta.upload.complete", {
108
- type: opts.type,
109
- metadataId: meta.metadataId,
110
- });
123
+ return withCtxSpan("iq.ctx.upload_meta", envelope, workerId, async () => {
124
+ logger.debug("meta.upload.start", {
125
+ type: opts.type,
126
+ instance: opts.instance,
127
+ filename: opts.filename,
128
+ });
129
+ const protoType = META_TYPE_MAP[opts.type];
130
+ const metaType = create(MetaTypeSchema, {
131
+ type: protoType,
132
+ n: opts.instance,
133
+ filename: opts.filename,
134
+ });
135
+ // 1. RequestMetaUpload presigned URL.
136
+ const requested = await rpc.internalUploads.requestMetaUpload(create(RequestMetaUploadRequestSchema, {
137
+ updateToken: envelope.updateToken,
138
+ metaType: [metaType],
139
+ }));
140
+ const meta = requested.metaUploads[0];
141
+ if (!meta) {
142
+ throw new Error("RequestMetaUpload returned no meta_uploads");
143
+ }
144
+ // 2. S3 PUT own span so the upload's bytes/duration are
145
+ // visible separately from the API round-trips.
146
+ const contentType = opts.contentType ?? inferContentType(opts.type);
147
+ const body = opts.data instanceof Uint8Array ? opts.data : opts.data;
148
+ await withCtxSpan("iq.s3.put", envelope, workerId, async () => {
149
+ const handle = getTracingHandle();
150
+ const span = handle?.tracer
151
+ ? undefined
152
+ : undefined;
153
+ void span;
154
+ const putResp = await fetch(meta.uploadUrl, {
155
+ method: "PUT",
156
+ body: body,
157
+ headers: { "Content-Type": contentType },
158
+ duplex: "half",
159
+ });
160
+ if (!putResp.ok) {
161
+ throw new Error(`meta upload PUT failed: ${putResp.status} ${putResp.statusText}`);
162
+ }
163
+ }, {
164
+ [SPAN_ATTR.S3_URL_ORIGIN]: safeOrigin(meta.uploadUrl),
165
+ [SPAN_ATTR.S3_BYTES]: body instanceof Uint8Array ? body.byteLength : 0,
166
+ "s3.content_type": contentType,
167
+ "s3.meta_type": opts.type,
168
+ });
169
+ // 3. ConfirmMetaUpload.
170
+ await rpc.internalUploads.confirmMetaUpload(create(ConfirmMetaUploadRequestSchema, {
171
+ updateToken: envelope.updateToken,
172
+ metadataId: [meta.metadataId],
173
+ }));
174
+ logger.info("meta.upload.complete", {
175
+ type: opts.type,
176
+ metadataId: meta.metadataId,
177
+ });
178
+ }, { "ctx.meta_type": opts.type });
111
179
  },
112
180
  async setMetadata(metadata) {
113
- // Distinguish a pre-built proto from a partial: protos carry the
114
- // @bufbuild/protobuf $typeName brand.
115
- const isProto = metadata.$typeName !== undefined;
116
- let protoMetadata;
117
- let thumbnailVersion;
118
- if (isProto) {
119
- protoMetadata = metadata;
120
- }
121
- else {
122
- const partial = metadata;
123
- protoMetadata = create(UploadMetadataSchema, {});
124
- // Server-side proto has typed sub-messages; the SDK's
125
- // UploadMetadataPartial is intentionally loose so workers can
126
- // populate just what they computed. Cast into the proto via
127
- // the JSON path fields that don't map are ignored.
128
- Object.assign(protoMetadata, partial);
129
- thumbnailVersion = partial.thumbnailGenerationVersion;
130
- }
131
- await rpc.internalUploads.updateUpload(create(InternalUpdateUploadRequestSchema, {
132
- updateToken: envelope.updateToken,
133
- metadata: protoMetadata,
134
- thumbnailGenerationVersion: thumbnailVersion,
135
- }));
136
- logger.debug("metadata.set", { thumbnailVersion });
181
+ return withCtxSpan("iq.ctx.set_metadata", envelope, workerId, async () => {
182
+ // Distinguish a pre-built proto from a partial: protos carry
183
+ // the @bufbuild/protobuf $typeName brand.
184
+ const isProto = metadata.$typeName !== undefined;
185
+ let protoMetadata;
186
+ let thumbnailVersion;
187
+ if (isProto) {
188
+ protoMetadata = metadata;
189
+ }
190
+ else {
191
+ const partial = metadata;
192
+ protoMetadata = create(UploadMetadataSchema, {});
193
+ // Server-side proto has typed sub-messages; the SDK's
194
+ // UploadMetadataPartial is intentionally loose so workers
195
+ // can populate just what they computed. Cast into the
196
+ // proto via the JSON path — fields that don't map are
197
+ // ignored.
198
+ Object.assign(protoMetadata, partial);
199
+ thumbnailVersion = partial.thumbnailGenerationVersion;
200
+ }
201
+ await rpc.internalUploads.updateUpload(create(InternalUpdateUploadRequestSchema, {
202
+ updateToken: envelope.updateToken,
203
+ metadata: protoMetadata,
204
+ thumbnailGenerationVersion: thumbnailVersion,
205
+ }));
206
+ logger.debug("metadata.set", { thumbnailVersion });
207
+ });
137
208
  },
138
209
  async markHasThumbnail(version) {
139
- await rpc.internalUploads.updateUpload(create(InternalUpdateUploadRequestSchema, {
140
- updateToken: envelope.updateToken,
141
- hasThumbnail: true,
142
- thumbnailGenerationVersion: version,
143
- }));
144
- logger.info("thumbnail.marked", { version });
210
+ return withCtxSpan("iq.ctx.mark_has_thumbnail", envelope, workerId, async () => {
211
+ await rpc.internalUploads.updateUpload(create(InternalUpdateUploadRequestSchema, {
212
+ updateToken: envelope.updateToken,
213
+ hasThumbnail: true,
214
+ thumbnailGenerationVersion: version,
215
+ }));
216
+ logger.info("thumbnail.marked", { version });
217
+ }, { "ctx.thumbnail_version": version });
145
218
  },
146
219
  async setDescription(text, tags) {
147
- await rpc.internalUploads.updateUpload(create(InternalUpdateUploadRequestSchema, {
148
- updateToken: envelope.updateToken,
149
- aiMetadata: create(InternalUpdateUploadRequest_AiMetadataSchema, {
150
- description: text,
151
- generatedTags: tags ?? [],
152
- }),
153
- }));
154
- logger.info("description.set", {
155
- length: text.length,
156
- tags: tags?.length ?? 0,
220
+ return withCtxSpan("iq.ctx.set_description", envelope, workerId, async () => {
221
+ await rpc.internalUploads.updateUpload(create(InternalUpdateUploadRequestSchema, {
222
+ updateToken: envelope.updateToken,
223
+ aiMetadata: create(InternalUpdateUploadRequest_AiMetadataSchema, {
224
+ description: text,
225
+ generatedTags: tags ?? [],
226
+ }),
227
+ }));
228
+ logger.info("description.set", {
229
+ length: text.length,
230
+ tags: tags?.length ?? 0,
231
+ });
232
+ }, {
233
+ "ctx.description_length": text.length,
234
+ "ctx.tag_count": tags?.length ?? 0,
157
235
  });
158
236
  },
159
237
  async withPresignedUploads(opts, callback) {
160
- logger.debug("presigned.upload.request", {
161
- count: opts.length,
162
- types: opts.map((o) => o.type),
163
- });
164
- const metaTypes = opts.map((opt) => create(MetaTypeSchema, {
165
- type: META_TYPE_MAP[opt.type],
166
- n: opt.instance,
167
- filename: opt.filename,
168
- }));
169
- const requested = await rpc.internalUploads.requestMetaUpload(create(RequestMetaUploadRequestSchema, {
170
- updateToken: envelope.updateToken,
171
- metaType: metaTypes,
172
- }));
173
- if (requested.metaUploads.length !== opts.length) {
174
- throw new Error(`RequestMetaUpload returned ${requested.metaUploads.length} URLs, expected ${opts.length}`);
175
- }
176
- const handles = requested.metaUploads.map((m) => ({
177
- uploadUrl: m.uploadUrl,
178
- downloadUrl: m.downloadUrl,
179
- metadataId: m.metadataId,
180
- }));
181
- const result = await callback(handles);
182
- // Confirm only after the callback resolves cleanly — on throw,
183
- // the rows stay unfinalised and will be cleaned up by the next
184
- // confirm sweep or expire naturally.
185
- await rpc.internalUploads.confirmMetaUpload(create(ConfirmMetaUploadRequestSchema, {
186
- updateToken: envelope.updateToken,
187
- metadataId: requested.metaUploads.map((m) => m.metadataId),
188
- }));
189
- logger.info("presigned.upload.complete", { count: handles.length });
190
- return result;
238
+ return withCtxSpan("iq.ctx.with_presigned_uploads", envelope, workerId, async () => {
239
+ logger.debug("presigned.upload.request", {
240
+ count: opts.length,
241
+ types: opts.map((o) => o.type),
242
+ });
243
+ const metaTypes = opts.map((opt) => create(MetaTypeSchema, {
244
+ type: META_TYPE_MAP[opt.type],
245
+ n: opt.instance,
246
+ filename: opt.filename,
247
+ }));
248
+ const requested = await rpc.internalUploads.requestMetaUpload(create(RequestMetaUploadRequestSchema, {
249
+ updateToken: envelope.updateToken,
250
+ metaType: metaTypes,
251
+ }));
252
+ if (requested.metaUploads.length !== opts.length) {
253
+ throw new Error(`RequestMetaUpload returned ${requested.metaUploads.length} URLs, expected ${opts.length}`);
254
+ }
255
+ const handles = requested.metaUploads.map((m) => ({
256
+ uploadUrl: m.uploadUrl,
257
+ downloadUrl: m.downloadUrl,
258
+ metadataId: m.metadataId,
259
+ }));
260
+ const result = await callback(handles);
261
+ // Confirm only after the callback resolves cleanly on
262
+ // throw, the rows stay unfinalised and will be cleaned up
263
+ // by the next confirm sweep or expire naturally.
264
+ await rpc.internalUploads.confirmMetaUpload(create(ConfirmMetaUploadRequestSchema, {
265
+ updateToken: envelope.updateToken,
266
+ metadataId: requested.metaUploads.map((m) => m.metadataId),
267
+ }));
268
+ logger.info("presigned.upload.complete", {
269
+ count: handles.length,
270
+ });
271
+ return result;
272
+ }, { "ctx.upload_count": opts.length });
191
273
  },
192
274
  };
193
275
  return ctx;
194
276
  }
277
+ function safeOrigin(url) {
278
+ try {
279
+ const u = new URL(url);
280
+ return `${u.protocol}//${u.host}${u.pathname}`;
281
+ }
282
+ catch {
283
+ return "<malformed>";
284
+ }
285
+ }
195
286
  function inferContentType(metaType) {
196
287
  switch (metaType) {
197
288
  case "THUMBNAIL_LIGHT":
@@ -1 +1 @@
1
- {"version":3,"file":"job-context.js","sourceRoot":"","sources":["../src/job-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-context.js","sourceRoot":"","sources":["../src/job-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACN,8BAA8B,EAC9B,iCAAiC,EACjC,4CAA4C,EAC5C,cAAc,EACd,cAAc,EACd,8BAA8B,GAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAG9E,OAAO,EACN,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GAClB,MAAM,cAAc,CAAC;AAUtB,MAAM,aAAa,GAAmD;IACrE,eAAe,EAAE,cAAc,CAAC,8BAA8B;IAC9D,cAAc,EAAE,cAAc,CAAC,6BAA6B;IAC5D,cAAc,EAAE,cAAc,CAAC,+BAA+B;IAC9D,YAAY,EAAE,cAAc,CAAC,2BAA2B;IACxD,YAAY,EAAE,cAAc,CAAC,2BAA2B;IACxD,UAAU,EAAE,cAAc,CAAC,yBAAyB;IACpD,eAAe,EAAE,cAAc,CAAC,8BAA8B;CAC9D,CAAC;AAgCF;;;;;;;;GAQG;AACH,SAAS,WAAW,CACnB,IAAY,EACZ,QAAqB,EACrB,QAA4B,EAC5B,EAAoB,EACpB,KAAiD;IAEjD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACzD,kBAAkB,CAAC,IAAI,EAAE;YACxB,KAAK,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG;YACpC,QAAQ;SACR,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,CAAC;QACF,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3B,MAAM,GAAG,CAAC;QACX,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,gBAAgB,CAC/B,QAAqB,EACrB,GAAe,EACf,MAAc,EACd,OAA6B,EAAE;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,GAAG,GAAe;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,WAAW,EAAE;YACZ,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG;YACpC,EAAE,EAAE,QAAQ,CAAC,kBAAkB,CAAC,aAAa;YAC7C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,MAAM;gBACzC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAC3D,CAAC,CAAC,IAAI,UAAU,EAAE;SACnB;QACD,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAE7B,KAAK,CAAC,QAAQ;YACb,OAAO,WAAW,CAAC,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBACtC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC3B,CAAC,CAAC;oBACH,MAAM,IAAI,KAAK,CACd,2BAA2B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAC3D,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC;YAClB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,CAAC,cAAc;YACnB,OAAO,WAAW,CAAC,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC1D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBACtC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC3B,CAAC,CAAC;oBACH,MAAM,IAAI,KAAK,CACd,2BAA2B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAC3D,CAAC;gBACH,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxE,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,IAAY;YAChC,OAAO,WAAW,CACjB,yBAAyB,EACzB,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;gBACV,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;gBACxC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;oBACvC,IAAI;oBACJ,SAAS,EAAE,IAAI,CAAC,UAAU;iBAC1B,CAAC,CAAC;YACJ,CAAC,CACD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAoB;YACpC,OAAO,WAAW,CACjB,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;oBACjC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE;oBACvC,IAAI,EAAE,SAAS;oBACf,CAAC,EAAE,IAAI,CAAC,QAAQ;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAC;gBAEH,wCAAwC;gBACxC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAC5D,MAAM,CAAC,8BAA8B,EAAE;oBACtC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,CAAC,QAAQ,CAAC;iBACpB,CAAC,CACF,CAAC;gBAEF,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC/D,CAAC;gBAED,0DAA0D;gBAC1D,+CAA+C;gBAC/C,MAAM,WAAW,GAChB,IAAI,CAAC,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,IAAI,GACT,IAAI,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzD,MAAM,WAAW,CAChB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;oBACV,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;oBAClC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM;wBAC1B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,SAAS,CAAC;oBACb,KAAK,IAAI,CAAC;oBACV,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;wBAC3C,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,IAAgB;wBACtB,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE;wBACxC,MAAM,EAAE,MAAM;qBACuB,CAAC,CAAC;oBACxC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;wBACjB,MAAM,IAAI,KAAK,CACd,2BAA2B,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CACjE,CAAC;oBACH,CAAC;gBACF,CAAC,EACD;oBACC,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrD,CAAC,SAAS,CAAC,QAAQ,CAAC,EACnB,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBACjD,iBAAiB,EAAE,WAAW;oBAC9B,cAAc,EAAE,IAAI,CAAC,IAAI;iBACzB,CACD,CAAC;gBAEF,wBAAwB;gBACxB,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAC1C,MAAM,CAAC,8BAA8B,EAAE;oBACtC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;iBAC7B,CAAC,CACF,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBACnC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC3B,CAAC,CAAC;YACJ,CAAC,EACD,EAAE,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,CAC9B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,QAAqD;YACtE,OAAO,WAAW,CACjB,qBAAqB,EACrB,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;gBACV,6DAA6D;gBAC7D,0CAA0C;gBAC1C,MAAM,OAAO,GACX,QAAgC,CAAC,SAAS,KAAK,SAAS,CAAC;gBAC3D,IAAI,aAEH,CAAC;gBACF,IAAI,gBAAoC,CAAC;gBACzC,IAAI,OAAO,EAAE,CAAC;oBACb,aAAa,GAAG,QAEf,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,OAAO,GAAG,QAAiC,CAAC;oBAClD,aAAa,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;oBACjD,sDAAsD;oBACtD,0DAA0D;oBAC1D,sDAAsD;oBACtD,sDAAsD;oBACtD,WAAW;oBACX,MAAM,CAAC,MAAM,CAAC,aAAuB,EAAE,OAAO,CAAC,CAAC;oBAChD,gBAAgB,GAAG,OAAO,CAAC,0BAA0B,CAAC;gBACvD,CAAC;gBAED,MAAM,GAAG,CAAC,eAAe,CAAC,YAAY,CACrC,MAAM,CAAC,iCAAiC,EAAE;oBACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,aAAa;oBACvB,0BAA0B,EAAE,gBAAgB;iBAC5C,CAAC,CACF,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACpD,CAAC,CACD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;YACrC,OAAO,WAAW,CACjB,2BAA2B,EAC3B,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;gBACV,MAAM,GAAG,CAAC,eAAe,CAAC,YAAY,CACrC,MAAM,CAAC,iCAAiC,EAAE;oBACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,YAAY,EAAE,IAAI;oBAClB,0BAA0B,EAAE,OAAO;iBACnC,CAAC,CACF,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC,EACD,EAAE,uBAAuB,EAAE,OAAO,EAAE,CACpC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAAe;YACjD,OAAO,WAAW,CACjB,wBAAwB,EACxB,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;gBACV,MAAM,GAAG,CAAC,eAAe,CAAC,YAAY,CACrC,MAAM,CAAC,iCAAiC,EAAE;oBACzC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,UAAU,EAAE,MAAM,CACjB,4CAA4C,EAC5C;wBACC,WAAW,EAAE,IAAI;wBACjB,aAAa,EAAE,IAAI,IAAI,EAAE;qBACzB,CACD;iBACD,CAAC,CACF,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;iBACvB,CAAC,CAAC;YACJ,CAAC,EACD;gBACC,wBAAwB,EAAE,IAAI,CAAC,MAAM;gBACrC,eAAe,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;aAClC,CACD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,oBAAoB,CACzB,IAA8B,EAC9B,QAA0E;YAE1E,OAAO,WAAW,CACjB,+BAA+B,EAC/B,QAAQ,EACR,QAAQ,EACR,KAAK,IAAI,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;oBACxC,KAAK,EAAE,IAAI,CAAC,MAAM;oBAClB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC9B,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAClC,MAAM,CAAC,cAAc,EAAE;oBACtB,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7B,CAAC,EAAE,GAAG,CAAC,QAAQ;oBACf,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACtB,CAAC,CACF,CAAC;gBACF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAC5D,MAAM,CAAC,8BAA8B,EAAE;oBACtC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,SAAS;iBACnB,CAAC,CACF,CAAC;gBACF,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CACd,8BAA8B,SAAS,CAAC,WAAW,CAAC,MAAM,mBAAmB,IAAI,CAAC,MAAM,EAAE,CAC1F,CAAC;gBACH,CAAC;gBACD,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjD,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;iBACxB,CAAC,CAAC,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACvC,wDAAwD;gBACxD,0DAA0D;gBAC1D,iDAAiD;gBACjD,MAAM,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAC1C,MAAM,CAAC,8BAA8B,EAAE;oBACtC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;iBAC1D,CAAC,CACF,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;oBACxC,KAAK,EAAE,OAAO,CAAC,MAAM;iBACrB,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;YACf,CAAC,EACD,EAAE,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,CACnC,CAAC;QACH,CAAC;KACD,CAAC;IAEF,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC9B,IAAI,CAAC;QACJ,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,aAAa,CAAC;IACtB,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgC;IACzD,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB,CAAC;QACtB,KAAK,cAAc;YAClB,OAAO,WAAW,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB;YACrB,OAAO,0BAA0B,CAAC;IACpC,CAAC;AACF,CAAC"}
package/dist/pool.d.ts CHANGED
@@ -4,10 +4,33 @@ export declare class Pool {
4
4
  private readonly rpc;
5
5
  private readonly sse;
6
6
  private readonly logger;
7
+ private readonly tracing;
7
8
  private inFlight;
8
9
  private readonly workerId;
9
10
  private readonly capabilities;
11
+ private runningPromise;
12
+ private runningResolve;
13
+ private keepAliveInterval;
10
14
  constructor(config: PoolConfig);
15
+ /**
16
+ * Start the pool and keep the worker process alive until `stop()` is
17
+ * called.
18
+ *
19
+ * We deliberately return a never-resolving promise (resolved only by
20
+ * stop()) for two reasons:
21
+ *
22
+ * 1. ESM top-level `await pool.start()` is the documented worker
23
+ * entrypoint. If start() resolved as soon as the SSE client was
24
+ * kicked off, the script would end and Node would exit — the
25
+ * EventSource's underlying fetch socket isn't enough to hold the
26
+ * event loop open by itself in Node 20+ (undici unrefs idle
27
+ * connections under some conditions).
28
+ * 2. A keep-alive interval lives next to the unresolved promise so
29
+ * even if every socket is unrefed, the loop stays open.
30
+ *
31
+ * Callers that integrate the pool into a larger app (where some other
32
+ * piece holds the event loop) can ignore the returned promise.
33
+ */
11
34
  start(): Promise<void>;
12
35
  stop(): Promise<void>;
13
36
  private handleDispatch;
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAGX,UAAU,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,IAAI;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;gBAE5B,MAAM,EAAE,UAAU;IA6CxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKb,cAAc;IA2E5B,OAAO,CAAC,cAAc;YAIR,WAAW;CAwBzB"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAGX,UAAU,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,IAAI;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,iBAAiB,CAA+B;gBAE5C,MAAM,EAAE,UAAU;IA0D9B;;;;;;;;;;;;;;;;;;OAkBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiBb,cAAc;IAiJ5B,OAAO,CAAC,cAAc;YAIR,WAAW;CAwBzB"}