@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.
- package/dist/agent/instance-manager.d.ts +5 -8
- package/dist/agent/instance-manager.d.ts.map +1 -1
- package/dist/agent/instance-manager.js +34 -55
- package/dist/agent/instance-manager.js.map +1 -1
- package/dist/config.d.ts +15 -63
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -20
- package/dist/config.js.map +1 -1
- package/dist/create-core.d.ts +0 -2
- package/dist/create-core.d.ts.map +1 -1
- package/dist/create-core.js +17 -28
- package/dist/create-core.js.map +1 -1
- package/dist/index.cjs +678 -453
- package/dist/index.cjs.map +20 -15
- package/dist/index.d.ts +4 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +678 -453
- package/dist/index.js.map +20 -15
- package/dist/lifecycle.d.ts +5 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +27 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/queue/actions.d.ts +15 -26
- package/dist/queue/actions.d.ts.map +1 -1
- package/dist/queue/base.d.ts +15 -3
- package/dist/queue/base.d.ts.map +1 -1
- package/dist/queue/in-memory-queue.d.ts +11 -0
- package/dist/queue/in-memory-queue.d.ts.map +1 -0
- package/dist/queue/in-memory-queue.js +46 -0
- package/dist/queue/in-memory-queue.js.map +1 -0
- package/dist/queue/task-executor.d.ts +18 -0
- package/dist/queue/task-executor.d.ts.map +1 -0
- package/dist/queue/task-executor.js +77 -0
- package/dist/queue/task-executor.js.map +1 -0
- package/dist/tracing/active-tracer.d.ts +5 -0
- package/dist/tracing/active-tracer.d.ts.map +1 -0
- package/dist/tracing/active-tracer.js +13 -0
- package/dist/tracing/active-tracer.js.map +1 -0
- package/dist/tracing/span.d.ts +7 -14
- package/dist/tracing/span.d.ts.map +1 -1
- package/dist/tracing/span.js +5 -36
- package/dist/tracing/span.js.map +1 -1
- package/dist/tracing/tracer.d.ts +6 -7
- package/dist/tracing/tracer.d.ts.map +1 -1
- package/dist/tracing/tracer.js +27 -12
- package/dist/tracing/tracer.js.map +1 -1
- package/dist/tracing/with-span.d.ts +4 -0
- package/dist/tracing/with-span.d.ts.map +1 -0
- package/dist/tracing/with-span.js +35 -0
- package/dist/tracing/with-span.js.map +1 -0
- package/dist/transport/http/agent-instance-client.d.ts +23 -0
- package/dist/transport/http/agent-instance-client.d.ts.map +1 -0
- package/dist/transport/http/agent-instance-client.js +25 -0
- package/dist/transport/http/agent-instance-client.js.map +1 -0
- package/dist/transport/http/agent-span-client.d.ts +25 -0
- package/dist/transport/http/agent-span-client.d.ts.map +1 -0
- package/dist/transport/http/agent-span-client.js +37 -0
- package/dist/transport/http/agent-span-client.js.map +1 -0
- package/dist/transport/http/http-client.d.ts +43 -0
- package/dist/transport/http/http-client.d.ts.map +1 -0
- package/dist/transport/http/http-client.js +127 -0
- package/dist/transport/http/http-client.js.map +1 -0
- package/dist/transport/http/retry-policy.d.ts +4 -0
- package/dist/transport/http/retry-policy.d.ts.map +1 -0
- package/dist/transport/http/retry-policy.js +10 -0
- package/dist/transport/http/retry-policy.js.map +1 -0
- package/dist/transport/http.d.ts +34 -50
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +163 -227
- package/dist/transport/http.js.map +1 -1
- package/dist/utils/logging.d.ts.map +1 -1
- package/dist/utils/logging.js +7 -1
- package/dist/utils/logging.js.map +1 -1
- package/package.json +1 -1
- package/dist/agent/schema-registry.d.ts +0 -9
- package/dist/agent/schema-registry.d.ts.map +0 -1
- package/dist/agent/schema-registry.js +0 -16
- package/dist/agent/schema-registry.js.map +0 -1
- package/dist/queue/in-memory.d.ts +0 -9
- package/dist/queue/in-memory.d.ts.map +0 -1
- package/dist/queue/in-memory.js +0 -18
- package/dist/queue/in-memory.js.map +0 -1
- package/dist/transport/base.d.ts +0 -18
- package/dist/transport/base.d.ts.map +0 -1
- package/dist/transport/base.js +0 -2
- package/dist/transport/base.js.map +0 -1
- package/dist/transport/stdio.d.ts +0 -36
- package/dist/transport/stdio.d.ts.map +0 -1
- package/dist/transport/stdio.js +0 -56
- package/dist/transport/stdio.js.map +0 -1
- package/dist/transport/worker.d.ts +0 -22
- package/dist/transport/worker.d.ts.map +0 -1
- package/dist/transport/worker.js +0 -85
- 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"}
|
package/dist/transport/http.d.ts
CHANGED
|
@@ -1,67 +1,51 @@
|
|
|
1
1
|
import type { HttpTransportConfig } from '../config.js';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|