@prefactor/core 0.2.0 → 0.2.2

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 (94) hide show
  1. package/dist/agent/instance-manager.d.ts +5 -8
  2. package/dist/agent/instance-manager.d.ts.map +1 -1
  3. package/dist/agent/instance-manager.js +34 -55
  4. package/dist/agent/instance-manager.js.map +1 -1
  5. package/dist/config.d.ts +15 -63
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +29 -20
  8. package/dist/config.js.map +1 -1
  9. package/dist/create-core.d.ts +0 -2
  10. package/dist/create-core.d.ts.map +1 -1
  11. package/dist/create-core.js +17 -28
  12. package/dist/create-core.js.map +1 -1
  13. package/dist/index.cjs +678 -453
  14. package/dist/index.cjs.map +20 -15
  15. package/dist/index.d.ts +4 -7
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +678 -453
  18. package/dist/index.js.map +20 -15
  19. package/dist/lifecycle.d.ts +5 -0
  20. package/dist/lifecycle.d.ts.map +1 -0
  21. package/dist/lifecycle.js +27 -0
  22. package/dist/lifecycle.js.map +1 -0
  23. package/dist/queue/actions.d.ts +15 -26
  24. package/dist/queue/actions.d.ts.map +1 -1
  25. package/dist/queue/base.d.ts +15 -3
  26. package/dist/queue/base.d.ts.map +1 -1
  27. package/dist/queue/in-memory-queue.d.ts +11 -0
  28. package/dist/queue/in-memory-queue.d.ts.map +1 -0
  29. package/dist/queue/in-memory-queue.js +46 -0
  30. package/dist/queue/in-memory-queue.js.map +1 -0
  31. package/dist/queue/task-executor.d.ts +18 -0
  32. package/dist/queue/task-executor.d.ts.map +1 -0
  33. package/dist/queue/task-executor.js +77 -0
  34. package/dist/queue/task-executor.js.map +1 -0
  35. package/dist/tracing/active-tracer.d.ts +5 -0
  36. package/dist/tracing/active-tracer.d.ts.map +1 -0
  37. package/dist/tracing/active-tracer.js +13 -0
  38. package/dist/tracing/active-tracer.js.map +1 -0
  39. package/dist/tracing/span.d.ts +7 -14
  40. package/dist/tracing/span.d.ts.map +1 -1
  41. package/dist/tracing/span.js +5 -36
  42. package/dist/tracing/span.js.map +1 -1
  43. package/dist/tracing/tracer.d.ts +6 -7
  44. package/dist/tracing/tracer.d.ts.map +1 -1
  45. package/dist/tracing/tracer.js +27 -12
  46. package/dist/tracing/tracer.js.map +1 -1
  47. package/dist/tracing/with-span.d.ts +4 -0
  48. package/dist/tracing/with-span.d.ts.map +1 -0
  49. package/dist/tracing/with-span.js +35 -0
  50. package/dist/tracing/with-span.js.map +1 -0
  51. package/dist/transport/http/agent-instance-client.d.ts +23 -0
  52. package/dist/transport/http/agent-instance-client.d.ts.map +1 -0
  53. package/dist/transport/http/agent-instance-client.js +25 -0
  54. package/dist/transport/http/agent-instance-client.js.map +1 -0
  55. package/dist/transport/http/agent-span-client.d.ts +25 -0
  56. package/dist/transport/http/agent-span-client.d.ts.map +1 -0
  57. package/dist/transport/http/agent-span-client.js +37 -0
  58. package/dist/transport/http/agent-span-client.js.map +1 -0
  59. package/dist/transport/http/http-client.d.ts +43 -0
  60. package/dist/transport/http/http-client.d.ts.map +1 -0
  61. package/dist/transport/http/http-client.js +127 -0
  62. package/dist/transport/http/http-client.js.map +1 -0
  63. package/dist/transport/http/retry-policy.d.ts +4 -0
  64. package/dist/transport/http/retry-policy.d.ts.map +1 -0
  65. package/dist/transport/http/retry-policy.js +10 -0
  66. package/dist/transport/http/retry-policy.js.map +1 -0
  67. package/dist/transport/http.d.ts +34 -50
  68. package/dist/transport/http.d.ts.map +1 -1
  69. package/dist/transport/http.js +163 -227
  70. package/dist/transport/http.js.map +1 -1
  71. package/dist/utils/logging.d.ts.map +1 -1
  72. package/dist/utils/logging.js +7 -1
  73. package/dist/utils/logging.js.map +1 -1
  74. package/package.json +1 -1
  75. package/dist/agent/schema-registry.d.ts +0 -9
  76. package/dist/agent/schema-registry.d.ts.map +0 -1
  77. package/dist/agent/schema-registry.js +0 -16
  78. package/dist/agent/schema-registry.js.map +0 -1
  79. package/dist/queue/in-memory.d.ts +0 -9
  80. package/dist/queue/in-memory.d.ts.map +0 -1
  81. package/dist/queue/in-memory.js +0 -18
  82. package/dist/queue/in-memory.js.map +0 -1
  83. package/dist/transport/base.d.ts +0 -18
  84. package/dist/transport/base.d.ts.map +0 -1
  85. package/dist/transport/base.js +0 -2
  86. package/dist/transport/base.js.map +0 -1
  87. package/dist/transport/stdio.d.ts +0 -36
  88. package/dist/transport/stdio.d.ts.map +0 -1
  89. package/dist/transport/stdio.js +0 -56
  90. package/dist/transport/stdio.js.map +0 -1
  91. package/dist/transport/worker.d.ts +0 -22
  92. package/dist/transport/worker.d.ts.map +0 -1
  93. package/dist/transport/worker.js +0 -85
  94. package/dist/transport/worker.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ import type { HttpTransportConfig } from '../../config.js';
2
+ export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
3
+ export type HttpClientDependencies = {
4
+ fetchFn?: FetchLike;
5
+ sleep?: (delayMs: number) => Promise<void>;
6
+ random?: () => number;
7
+ };
8
+ export type HttpRequestOptions = Omit<RequestInit, 'body' | 'headers' | 'signal'> & {
9
+ body?: unknown;
10
+ headers?: RequestInit['headers'];
11
+ timeoutMs?: number;
12
+ };
13
+ export interface HttpRequester {
14
+ request<TResponse = unknown>(path: string, options?: HttpRequestOptions): Promise<TResponse>;
15
+ }
16
+ type HttpClientErrorOptions = {
17
+ url: string;
18
+ method: string;
19
+ status?: number;
20
+ statusText?: string;
21
+ responseBody?: unknown;
22
+ retryable: boolean;
23
+ cause?: unknown;
24
+ };
25
+ export declare class HttpClientError extends Error {
26
+ readonly url: string;
27
+ readonly method: string;
28
+ readonly status?: number;
29
+ readonly statusText?: string;
30
+ readonly responseBody?: unknown;
31
+ readonly retryable: boolean;
32
+ constructor(message: string, options: HttpClientErrorOptions);
33
+ }
34
+ export declare class HttpClient {
35
+ private readonly config;
36
+ private readonly fetchFn;
37
+ private readonly sleep;
38
+ private readonly random;
39
+ constructor(config: HttpTransportConfig, dependencies?: HttpClientDependencies);
40
+ request<TResponse = unknown>(path: string, options?: HttpRequestOptions): Promise<TResponse>;
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/transport/http/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjG,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC9F;AAED,KAAK,sBAAsB,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;CAU7D;AAED,qBAAa,UAAU;IAMnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAGnB,MAAM,EAAE,mBAAmB,EAC5C,YAAY,GAAE,sBAA2B;IAQrC,OAAO,CAAC,SAAS,GAAG,OAAO,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,SAAS,CAAC;CAoEtB"}
@@ -0,0 +1,127 @@
1
+ import { calculateRetryDelay, shouldRetryStatusCode } from './retry-policy.js';
2
+ export class HttpClientError extends Error {
3
+ url;
4
+ method;
5
+ status;
6
+ statusText;
7
+ responseBody;
8
+ retryable;
9
+ constructor(message, options) {
10
+ super(message, { cause: options.cause });
11
+ this.name = 'HttpClientError';
12
+ this.url = options.url;
13
+ this.method = options.method;
14
+ this.status = options.status;
15
+ this.statusText = options.statusText;
16
+ this.responseBody = options.responseBody;
17
+ this.retryable = options.retryable;
18
+ }
19
+ }
20
+ export class HttpClient {
21
+ config;
22
+ fetchFn;
23
+ sleep;
24
+ random;
25
+ constructor(config, dependencies = {}) {
26
+ this.config = config;
27
+ this.fetchFn = dependencies.fetchFn ?? fetch;
28
+ this.sleep =
29
+ dependencies.sleep ?? ((delayMs) => new Promise((resolve) => setTimeout(resolve, delayMs)));
30
+ this.random = dependencies.random ?? Math.random;
31
+ }
32
+ async request(path, options = {}) {
33
+ const url = new URL(path, this.config.apiUrl).toString();
34
+ const method = options.method ?? 'GET';
35
+ let attempt = 0;
36
+ while (true) {
37
+ const headers = new Headers(options.headers);
38
+ headers.set('Authorization', `Bearer ${this.config.apiToken}`);
39
+ if (options.body !== undefined && !headers.has('Content-Type')) {
40
+ headers.set('Content-Type', 'application/json');
41
+ }
42
+ const requestInit = {
43
+ ...options,
44
+ method,
45
+ headers,
46
+ body: options.body === undefined ? undefined : JSON.stringify(options.body),
47
+ signal: AbortSignal.timeout(options.timeoutMs ?? this.config.requestTimeout),
48
+ };
49
+ try {
50
+ const response = await this.fetchFn(url, requestInit);
51
+ if (response.ok) {
52
+ return (await parseResponseBody(response));
53
+ }
54
+ const responseBody = await parseResponseBody(response);
55
+ const canRetry = attempt < this.config.maxRetries &&
56
+ shouldRetryStatusCode(response.status, this.config.retryOnStatusCodes);
57
+ if (canRetry) {
58
+ const delayMs = calculateRetryDelay(attempt, this.config, this.random);
59
+ await this.sleep(delayMs);
60
+ attempt += 1;
61
+ continue;
62
+ }
63
+ throw new HttpClientError(`HTTP request failed with status ${response.status}`, {
64
+ url,
65
+ method,
66
+ status: response.status,
67
+ statusText: response.statusText,
68
+ responseBody,
69
+ retryable: shouldRetryStatusCode(response.status, this.config.retryOnStatusCodes),
70
+ });
71
+ }
72
+ catch (error) {
73
+ if (error instanceof HttpClientError) {
74
+ throw error;
75
+ }
76
+ const canRetry = attempt < this.config.maxRetries && isRetryableNetworkError(error);
77
+ if (canRetry) {
78
+ const delayMs = calculateRetryDelay(attempt, this.config, this.random);
79
+ await this.sleep(delayMs);
80
+ attempt += 1;
81
+ continue;
82
+ }
83
+ throw new HttpClientError('HTTP request failed due to network error', {
84
+ url,
85
+ method,
86
+ retryable: false,
87
+ cause: error,
88
+ });
89
+ }
90
+ }
91
+ }
92
+ }
93
+ function isRetryableNetworkError(error) {
94
+ if (error instanceof TypeError) {
95
+ return true;
96
+ }
97
+ if (error instanceof DOMException &&
98
+ (error.name === 'AbortError' || error.name === 'TimeoutError')) {
99
+ return true;
100
+ }
101
+ if (error instanceof Error && (error.name === 'AbortError' || error.name === 'TimeoutError')) {
102
+ return true;
103
+ }
104
+ return false;
105
+ }
106
+ async function parseResponseBody(response) {
107
+ const bodyText = await response.text();
108
+ if (!bodyText) {
109
+ return null;
110
+ }
111
+ const contentType = response.headers.get('content-type') ?? '';
112
+ if (contentType.includes('application/json')) {
113
+ try {
114
+ return JSON.parse(bodyText);
115
+ }
116
+ catch {
117
+ return bodyText;
118
+ }
119
+ }
120
+ try {
121
+ return JSON.parse(bodyText);
122
+ }
123
+ catch {
124
+ return bodyText;
125
+ }
126
+ }
127
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/transport/http/http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { HttpTransportConfig } from '../../config.js';
2
+ export declare function shouldRetryStatusCode(statusCode: number, retryOnStatusCodes: number[]): boolean;
3
+ export declare function calculateRetryDelay(attempt: number, config: Pick<HttpTransportConfig, 'initialRetryDelay' | 'maxRetryDelay' | 'retryMultiplier'>, random?: () => number): number;
4
+ //# sourceMappingURL=retry-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../../src/transport/http/retry-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI3D,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAE/F;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,CAAC,EAC5F,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CAOR"}
@@ -0,0 +1,10 @@
1
+ const JITTER_MIN = 0.5;
2
+ export function shouldRetryStatusCode(statusCode, retryOnStatusCodes) {
3
+ return retryOnStatusCodes.includes(statusCode);
4
+ }
5
+ export function calculateRetryDelay(attempt, config, random = Math.random) {
6
+ const baseDelay = Math.min(config.initialRetryDelay * config.retryMultiplier ** attempt, config.maxRetryDelay);
7
+ const jitterMultiplier = JITTER_MIN + random() * JITTER_MIN;
8
+ return Math.round(baseDelay * jitterMultiplier);
9
+ }
10
+ //# sourceMappingURL=retry-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy.js","sourceRoot":"","sources":["../../../src/transport/http/retry-policy.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,kBAA4B;IACpF,OAAO,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,MAA4F,EAC5F,SAAuB,IAAI,CAAC,MAAM;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,eAAe,IAAI,OAAO,EAC5D,MAAM,CAAC,aAAa,CACrB,CAAC;IACF,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC;AAClD,CAAC"}
@@ -1,67 +1,51 @@
1
1
  import type { HttpTransportConfig } from '../config.js';
2
- import type { QueueAction } from '../queue/actions.js';
3
- import type { Transport } from './base.js';
4
- /**
5
- * HTTP transport sends spans to a remote API endpoint.
6
- *
7
- * Features:
8
- * - Exponential backoff retry logic
9
- * - Span ID mapping (SDK ID → backend ID)
10
- * - Agent instance lifecycle management
11
- *
12
- * @example
13
- * ```typescript
14
- * const transport = new HttpTransport({
15
- * apiUrl: 'https://api.prefactor.ai',
16
- * apiToken: process.env.PREFACTOR_API_TOKEN!,
17
- * });
18
- * ```
19
- */
2
+ import type { Span } from '../tracing/span.js';
3
+ export type AgentInstanceOptions = {
4
+ agentId?: string;
5
+ agentIdentifier?: string;
6
+ agentName?: string;
7
+ agentDescription?: string;
8
+ };
9
+ export interface Transport {
10
+ emit(span: Span): void;
11
+ finishSpan(spanId: string, endTime: number): void;
12
+ startAgentInstance(options?: AgentInstanceOptions): void;
13
+ finishAgentInstance(): void;
14
+ registerSchema(schema: Record<string, unknown>): void;
15
+ close(): void | Promise<void>;
16
+ }
20
17
  export declare class HttpTransport implements Transport {
21
18
  private config;
22
19
  private closed;
20
+ private readonly actionQueue;
21
+ private readonly taskExecutor;
22
+ private readonly agentInstanceClient;
23
+ private readonly agentSpanClient;
24
+ private previousAgentSchema;
25
+ private requiresNewAgentIdentifier;
26
+ private previousAgentIdentifier;
23
27
  private agentInstanceId;
24
28
  private spanIdMap;
25
29
  private pendingFinishes;
30
+ private pendingChildren;
26
31
  constructor(config: HttpTransportConfig);
27
- processBatch(items: QueueAction[]): Promise<void>;
28
- /**
29
- * Process any pending finishes for a span that was just registered.
30
- */
32
+ registerSchema(schema: Record<string, unknown>): void;
33
+ startAgentInstance(options?: AgentInstanceOptions): void;
34
+ finishAgentInstance(): void;
35
+ emit(span: Span): void;
36
+ finishSpan(spanId: string, endTime: number): void;
37
+ close(): Promise<void>;
38
+ private enqueue;
39
+ private processAction;
31
40
  private processPendingFinishes;
32
- /**
33
- * Send a span to the API
34
- */
35
41
  private sendSpan;
36
- /**
37
- * Transform span to backend API format with nested details/payload structure
38
- */
42
+ private queuePendingChild;
43
+ private processPendingChildren;
39
44
  private transformSpanToApiFormat;
40
- /**
41
- * Get default schema (v1.0.0) with span schemas for all supported types
42
- */
43
- private getDefaultSchema;
44
- /**
45
- * Ensure an agent instance is registered
46
- */
45
+ private mapStatusForApi;
47
46
  private ensureAgentRegistered;
48
- /**
49
- * Start agent instance execution
50
- */
51
47
  private startAgentInstanceHttp;
52
- /**
53
- * Finish agent instance execution
54
- */
55
48
  private finishAgentInstanceHttp;
56
- /**
57
- * Finish a span via HTTP
58
- */
59
49
  private finishSpanHttp;
60
- /**
61
- * Close the transport and wait for queue to drain
62
- *
63
- * @returns Promise that resolves when transport is closed
64
- */
65
- close(): Promise<void>;
66
50
  }
67
51
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAI3C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,YAAW,SAAS;IAOjC,OAAO,CAAC,MAAM;IAN1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAA6B;IAE9C,OAAO,CAAC,eAAe,CAA6B;gBAEhC,MAAM,EAAE,mBAAmB;IAEzC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DvD;;OAEG;YACW,sBAAsB;IAepC;;OAEG;YACW,QAAQ;IAqDtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmDhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;YACW,qBAAqB;IA4DnC;;OAEG;YACW,sBAAsB;IA6BpC;;OAEG;YACW,uBAAuB;IA8BrC;;OAEG;YACW,cAAc;IA4B5B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAU/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAEvB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElD,kBAAkB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAEzD,mBAAmB,IAAI,IAAI,CAAC;IAE5B,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEtD,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAID,qBAAa,aAAc,YAAW,SAAS;IAcjC,OAAO,CAAC,MAAM;IAb1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,uBAAuB,CAAuB;IACtD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,eAAe,CAA6B;gBAEhC,MAAM,EAAE,mBAAmB;IAa/C,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIrD,kBAAkB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAIxD,mBAAmB,IAAI,IAAI;IAI3B,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAItB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,aAAa,CAmEnB;YAEY,sBAAsB;YAmBtB,QAAQ;IAkBtB,OAAO,CAAC,iBAAiB;YAMX,sBAAsB;IAYpC,OAAO,CAAC,wBAAwB;IAgDhC,OAAO,CAAC,eAAe;YAaT,qBAAqB;YA8BrB,sBAAsB;YActB,uBAAuB;YAevB,cAAc;CAa7B"}