@pingops/core 0.1.0 → 0.1.1
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/context-keys.d.ts +12 -0
- package/dist/context-keys.d.ts.map +1 -1
- package/dist/context-keys.js +12 -0
- package/dist/context-keys.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/span-extractor.d.ts +1 -1
- package/dist/utils/span-extractor.d.ts.map +1 -1
- package/dist/utils/span-extractor.js +32 -1
- package/dist/utils/span-extractor.js.map +1 -1
- package/dist/wrap-http.d.ts.map +1 -1
- package/dist/wrap-http.js +7 -1
- package/dist/wrap-http.js.map +1 -1
- package/package.json +1 -1
- package/dist/transport/client.d.ts +0 -46
- package/dist/transport/client.d.ts.map +0 -1
- package/dist/transport/client.js +0 -110
- package/dist/transport/client.js.map +0 -1
package/dist/context-keys.d.ts
CHANGED
|
@@ -27,4 +27,16 @@ export declare const PINGOPS_TAGS: symbol;
|
|
|
27
27
|
* Used to propagate metadata object to all spans in the context.
|
|
28
28
|
*/
|
|
29
29
|
export declare const PINGOPS_METADATA: symbol;
|
|
30
|
+
/**
|
|
31
|
+
* Context key for capturing request body.
|
|
32
|
+
* When set, controls whether request bodies should be captured for HTTP spans.
|
|
33
|
+
* This allows wrapHttp to control body capture per-request.
|
|
34
|
+
*/
|
|
35
|
+
export declare const PINGOPS_CAPTURE_REQUEST_BODY: symbol;
|
|
36
|
+
/**
|
|
37
|
+
* Context key for capturing response body.
|
|
38
|
+
* When set, controls whether response bodies should be captured for HTTP spans.
|
|
39
|
+
* This allows wrapHttp to control body capture per-request.
|
|
40
|
+
*/
|
|
41
|
+
export declare const PINGOPS_CAPTURE_RESPONSE_BODY: symbol;
|
|
30
42
|
//# sourceMappingURL=context-keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-keys.d.ts","sourceRoot":"","sources":["../src/context-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAA2C,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAsC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAyC,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,YAAY,QAAmC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAuC,CAAC"}
|
|
1
|
+
{"version":3,"file":"context-keys.d.ts","sourceRoot":"","sources":["../src/context-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAA2C,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAsC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAyC,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,YAAY,QAAmC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAuC,CAAC;AAErE;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,QAExC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,QAEzC,CAAC"}
|
package/dist/context-keys.js
CHANGED
|
@@ -28,4 +28,16 @@ export const PINGOPS_TAGS = createContextKey("pingops-tags");
|
|
|
28
28
|
* Used to propagate metadata object to all spans in the context.
|
|
29
29
|
*/
|
|
30
30
|
export const PINGOPS_METADATA = createContextKey("pingops-metadata");
|
|
31
|
+
/**
|
|
32
|
+
* Context key for capturing request body.
|
|
33
|
+
* When set, controls whether request bodies should be captured for HTTP spans.
|
|
34
|
+
* This allows wrapHttp to control body capture per-request.
|
|
35
|
+
*/
|
|
36
|
+
export const PINGOPS_CAPTURE_REQUEST_BODY = createContextKey("pingops-capture-request-body");
|
|
37
|
+
/**
|
|
38
|
+
* Context key for capturing response body.
|
|
39
|
+
* When set, controls whether response bodies should be captured for HTTP spans.
|
|
40
|
+
* This allows wrapHttp to control body capture per-request.
|
|
41
|
+
*/
|
|
42
|
+
export const PINGOPS_CAPTURE_RESPONSE_BODY = createContextKey("pingops-capture-response-body");
|
|
31
43
|
//# sourceMappingURL=context-keys.js.map
|
package/dist/context-keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-keys.js","sourceRoot":"","sources":["../src/context-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;AAE7E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"context-keys.js","sourceRoot":"","sources":["../src/context-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;AAE7E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AAErE;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,gBAAgB,CAC1D,8BAA8B,CAC/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,gBAAgB,CAC3D,+BAA+B,CAChC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface DomainRule {
|
|
|
6
6
|
paths?: string[];
|
|
7
7
|
headersAllowList?: string[];
|
|
8
8
|
headersDenyList?: string[];
|
|
9
|
+
captureRequestBody?: boolean;
|
|
10
|
+
captureResponseBody?: boolean;
|
|
9
11
|
}
|
|
10
12
|
export interface SpanPayload {
|
|
11
13
|
traceId: string;
|
|
@@ -30,5 +32,15 @@ export interface WrapHttpAttributes {
|
|
|
30
32
|
sessionId?: string;
|
|
31
33
|
tags?: string[];
|
|
32
34
|
metadata?: Record<string, string>;
|
|
35
|
+
/**
|
|
36
|
+
* Whether to capture request body for HTTP spans in this context.
|
|
37
|
+
* Takes precedence over domain-specific rules and global config.
|
|
38
|
+
*/
|
|
39
|
+
captureRequestBody?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Whether to capture response body for HTTP spans in this context.
|
|
42
|
+
* Takes precedence over domain-specific rules and global config.
|
|
43
|
+
*/
|
|
44
|
+
captureResponseBody?: boolean;
|
|
33
45
|
}
|
|
34
46
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B"}
|
|
@@ -6,5 +6,5 @@ import type { DomainRule, SpanPayload } from "../types";
|
|
|
6
6
|
/**
|
|
7
7
|
* Extracts structured payload from a span
|
|
8
8
|
*/
|
|
9
|
-
export declare function extractSpanPayload(span: ReadableSpan, domainAllowList?: DomainRule[], globalHeadersAllowList?: string[], globalHeadersDenyList?: string[]): SpanPayload | null;
|
|
9
|
+
export declare function extractSpanPayload(span: ReadableSpan, domainAllowList?: DomainRule[], globalHeadersAllowList?: string[], globalHeadersDenyList?: string[], globalCaptureRequestBody?: boolean, globalCaptureResponseBody?: boolean): SpanPayload | null;
|
|
10
10
|
//# sourceMappingURL=span-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-extractor.d.ts","sourceRoot":"","sources":["../../src/utils/span-extractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"span-extractor.d.ts","sourceRoot":"","sources":["../../src/utils/span-extractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAsExD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,eAAe,CAAC,EAAE,UAAU,EAAE,EAC9B,sBAAsB,CAAC,EAAE,MAAM,EAAE,EACjC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,wBAAwB,CAAC,EAAE,OAAO,EAClC,yBAAyB,CAAC,EAAE,OAAO,GAClC,WAAW,GAAG,IAAI,CA6JpB"}
|
|
@@ -32,10 +32,31 @@ function getDomainRule(url, domainAllowList) {
|
|
|
32
32
|
}
|
|
33
33
|
return undefined;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Determines if body should be captured based on priority:
|
|
37
|
+
* domain rule > global config > default (false)
|
|
38
|
+
*/
|
|
39
|
+
function shouldCaptureBody(domainRule, globalConfig, bodyType) {
|
|
40
|
+
// Check domain-specific rule first
|
|
41
|
+
if (domainRule) {
|
|
42
|
+
const domainValue = bodyType === "request"
|
|
43
|
+
? domainRule.captureRequestBody
|
|
44
|
+
: domainRule.captureResponseBody;
|
|
45
|
+
if (domainValue !== undefined) {
|
|
46
|
+
return domainValue;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Fall back to global config
|
|
50
|
+
if (globalConfig !== undefined) {
|
|
51
|
+
return globalConfig;
|
|
52
|
+
}
|
|
53
|
+
// Default to false
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
35
56
|
/**
|
|
36
57
|
* Extracts structured payload from a span
|
|
37
58
|
*/
|
|
38
|
-
export function extractSpanPayload(span, domainAllowList, globalHeadersAllowList, globalHeadersDenyList) {
|
|
59
|
+
export function extractSpanPayload(span, domainAllowList, globalHeadersAllowList, globalHeadersDenyList, globalCaptureRequestBody, globalCaptureResponseBody) {
|
|
39
60
|
const attributes = span.attributes;
|
|
40
61
|
const url = attributes["http.url"] || attributes["url.full"];
|
|
41
62
|
// Get domain-specific rule if available
|
|
@@ -43,6 +64,9 @@ export function extractSpanPayload(span, domainAllowList, globalHeadersAllowList
|
|
|
43
64
|
// Merge global and domain-specific header rules
|
|
44
65
|
const headersAllowList = domainRule?.headersAllowList ?? globalHeadersAllowList;
|
|
45
66
|
const headersDenyList = domainRule?.headersDenyList ?? globalHeadersDenyList;
|
|
67
|
+
// Determine if bodies should be captured
|
|
68
|
+
const shouldCaptureReqBody = shouldCaptureBody(domainRule, globalCaptureRequestBody, "request");
|
|
69
|
+
const shouldCaptureRespBody = shouldCaptureBody(domainRule, globalCaptureResponseBody, "response");
|
|
46
70
|
// Extract HTTP headers if available
|
|
47
71
|
let requestHeaders = {};
|
|
48
72
|
let responseHeaders = {};
|
|
@@ -99,6 +123,13 @@ export function extractSpanPayload(span, domainAllowList, globalHeadersAllowList
|
|
|
99
123
|
if (Object.keys(responseHeaders).length > 0) {
|
|
100
124
|
extractedAttributes["http.response.header"] = responseHeaders;
|
|
101
125
|
}
|
|
126
|
+
// Remove body attributes if capture is disabled
|
|
127
|
+
if (!shouldCaptureReqBody) {
|
|
128
|
+
delete extractedAttributes["http.request.body"];
|
|
129
|
+
}
|
|
130
|
+
if (!shouldCaptureRespBody) {
|
|
131
|
+
delete extractedAttributes["http.response.body"];
|
|
132
|
+
}
|
|
102
133
|
// Build span payload
|
|
103
134
|
const spanContext = span.spanContext();
|
|
104
135
|
// parentSpanId may not be available in all versions of ReadableSpan
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-extractor.js","sourceRoot":"","sources":["../../src/utils/span-extractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,aAAa,EACb,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,GAAW,EACX,eAA8B;IAE9B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IACE,MAAM,KAAK,IAAI,CAAC,MAAM;YACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAkB,EAClB,eAA8B,EAC9B,sBAAiC,EACjC,qBAAgC;
|
|
1
|
+
{"version":3,"file":"span-extractor.js","sourceRoot":"","sources":["../../src/utils/span-extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/wrap-http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-http.d.ts","sourceRoot":"","sources":["../src/wrap-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"wrap-http.d.ts","sourceRoot":"","sources":["../src/wrap-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;OAGG;IACH,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC;;;OAGG;IACH,8BAA8B,EAAE,MAAM,OAAO,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,OAAO,EAAE,eAAe,EACxB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoDhB"}
|
package/dist/wrap-http.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { context } from "@opentelemetry/api";
|
|
14
14
|
import { createLogger } from "./logger";
|
|
15
|
-
import { PINGOPS_HTTP_ENABLED, PINGOPS_USER_ID, PINGOPS_SESSION_ID, PINGOPS_TAGS, PINGOPS_METADATA, } from "./context-keys";
|
|
15
|
+
import { PINGOPS_HTTP_ENABLED, PINGOPS_USER_ID, PINGOPS_SESSION_ID, PINGOPS_TAGS, PINGOPS_METADATA, PINGOPS_CAPTURE_REQUEST_BODY, PINGOPS_CAPTURE_RESPONSE_BODY, } from "./context-keys";
|
|
16
16
|
const logger = createLogger("[PingOps wrapHttp]");
|
|
17
17
|
/**
|
|
18
18
|
* Wraps a function to set attributes on HTTP spans created within the wrapped block.
|
|
@@ -103,6 +103,12 @@ function executeWrapHttpWithContext(options, fn) {
|
|
|
103
103
|
if (attributes.metadata !== undefined) {
|
|
104
104
|
contextWithAttributes = contextWithAttributes.setValue(PINGOPS_METADATA, attributes.metadata);
|
|
105
105
|
}
|
|
106
|
+
if (attributes.captureRequestBody !== undefined) {
|
|
107
|
+
contextWithAttributes = contextWithAttributes.setValue(PINGOPS_CAPTURE_REQUEST_BODY, attributes.captureRequestBody);
|
|
108
|
+
}
|
|
109
|
+
if (attributes.captureResponseBody !== undefined) {
|
|
110
|
+
contextWithAttributes = contextWithAttributes.setValue(PINGOPS_CAPTURE_RESPONSE_BODY, attributes.captureResponseBody);
|
|
111
|
+
}
|
|
106
112
|
}
|
|
107
113
|
// Run user code inside the context with attributes
|
|
108
114
|
return context.with(contextWithAttributes, () => {
|
package/dist/wrap-http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-http.js","sourceRoot":"","sources":["../src/wrap-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,
|
|
1
|
+
{"version":3,"file":"wrap-http.js","sourceRoot":"","sources":["../src/wrap-http.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP transport client for sending spans to PingOps backend
|
|
3
|
-
* Fire-and-forget, batched, with error handling
|
|
4
|
-
*/
|
|
5
|
-
import type { SpanPayload } from '../types';
|
|
6
|
-
export interface TransportConfig {
|
|
7
|
-
apiKey?: string;
|
|
8
|
-
baseUrl: string;
|
|
9
|
-
batchSize?: number;
|
|
10
|
-
batchTimeout?: number;
|
|
11
|
-
debug?: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* HTTP client for PingOps backend
|
|
15
|
-
*/
|
|
16
|
-
export declare class PingopsTransportClient {
|
|
17
|
-
private config;
|
|
18
|
-
private batch;
|
|
19
|
-
private batchTimeoutId;
|
|
20
|
-
constructor(config: TransportConfig);
|
|
21
|
-
/**
|
|
22
|
-
* Adds a span to the batch and sends if batch is full
|
|
23
|
-
*/
|
|
24
|
-
addSpan(payload: SpanPayload): void;
|
|
25
|
-
/**
|
|
26
|
-
* Sends a span immediately (for immediate export mode)
|
|
27
|
-
*/
|
|
28
|
-
sendSpanImmediately(payload: SpanPayload): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Schedules a flush after batchTimeout
|
|
31
|
-
*/
|
|
32
|
-
private scheduleFlush;
|
|
33
|
-
/**
|
|
34
|
-
* Flushes the current batch to the backend
|
|
35
|
-
*/
|
|
36
|
-
flush(): void;
|
|
37
|
-
/**
|
|
38
|
-
* Sends a batch of spans to the backend
|
|
39
|
-
*/
|
|
40
|
-
private sendBatch;
|
|
41
|
-
/**
|
|
42
|
-
* Forces a flush and waits for completion (for shutdown)
|
|
43
|
-
*/
|
|
44
|
-
shutdown(): Promise<void>;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/transport/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE,eAAe;IAanC;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAY1C;;OAEG;IACU,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACI,KAAK,IAAI,IAAI;IAsBpB;;OAEG;YACW,SAAS;IA4BvB;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKvC"}
|
package/dist/transport/client.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP transport client for sending spans to PingOps backend
|
|
3
|
-
* Fire-and-forget, batched, with error handling
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* HTTP client for PingOps backend
|
|
7
|
-
*/
|
|
8
|
-
export class PingopsTransportClient {
|
|
9
|
-
config;
|
|
10
|
-
batch = [];
|
|
11
|
-
batchTimeoutId = null;
|
|
12
|
-
constructor(config) {
|
|
13
|
-
// Get API key from config or environment
|
|
14
|
-
const apiKey = config.apiKey || process.env.PINGOPS_API_KEY || '';
|
|
15
|
-
this.config = {
|
|
16
|
-
apiKey,
|
|
17
|
-
baseUrl: config.baseUrl,
|
|
18
|
-
batchSize: config.batchSize ?? 50,
|
|
19
|
-
batchTimeout: config.batchTimeout ?? 5000, // 5 seconds
|
|
20
|
-
debug: config.debug ?? false,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Adds a span to the batch and sends if batch is full
|
|
25
|
-
*/
|
|
26
|
-
addSpan(payload) {
|
|
27
|
-
this.batch.push(payload);
|
|
28
|
-
// Send immediately if batch is full
|
|
29
|
-
if (this.batch.length >= this.config.batchSize) {
|
|
30
|
-
this.flush();
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
// Set timeout for sending batch
|
|
34
|
-
this.scheduleFlush();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Sends a span immediately (for immediate export mode)
|
|
39
|
-
*/
|
|
40
|
-
async sendSpanImmediately(payload) {
|
|
41
|
-
await this.sendBatch([payload]);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Schedules a flush after batchTimeout
|
|
45
|
-
*/
|
|
46
|
-
scheduleFlush() {
|
|
47
|
-
if (this.batchTimeoutId) {
|
|
48
|
-
return; // Already scheduled
|
|
49
|
-
}
|
|
50
|
-
this.batchTimeoutId = setTimeout(() => {
|
|
51
|
-
this.batchTimeoutId = null;
|
|
52
|
-
this.flush();
|
|
53
|
-
}, this.config.batchTimeout);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Flushes the current batch to the backend
|
|
57
|
-
*/
|
|
58
|
-
flush() {
|
|
59
|
-
if (this.batch.length === 0) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const batchToSend = [...this.batch];
|
|
63
|
-
this.batch = [];
|
|
64
|
-
if (this.batchTimeoutId) {
|
|
65
|
-
clearTimeout(this.batchTimeoutId);
|
|
66
|
-
this.batchTimeoutId = null;
|
|
67
|
-
}
|
|
68
|
-
// Fire-and-forget: don't await
|
|
69
|
-
this.sendBatch(batchToSend).catch((error) => {
|
|
70
|
-
// Error handling: log but don't crash
|
|
71
|
-
if (this.config.debug) {
|
|
72
|
-
console.error('[PingOps] Failed to send batch:', error);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Sends a batch of spans to the backend
|
|
78
|
-
*/
|
|
79
|
-
async sendBatch(spans) {
|
|
80
|
-
const url = `${this.config.baseUrl}/api/v1/spans`;
|
|
81
|
-
const headers = {
|
|
82
|
-
'Content-Type': 'application/json',
|
|
83
|
-
};
|
|
84
|
-
if (this.config.apiKey) {
|
|
85
|
-
headers['Authorization'] = `Bearer ${this.config.apiKey}`;
|
|
86
|
-
}
|
|
87
|
-
// Use native fetch (Node 20+) or fallback to undici if available
|
|
88
|
-
const response = await fetch(url, {
|
|
89
|
-
method: 'POST',
|
|
90
|
-
headers,
|
|
91
|
-
body: JSON.stringify({ spans }),
|
|
92
|
-
});
|
|
93
|
-
if (!response.ok) {
|
|
94
|
-
const errorText = await response.text().catch(() => 'Unknown error');
|
|
95
|
-
throw new Error(`PingOps API error: ${response.status} ${response.statusText} - ${errorText}`);
|
|
96
|
-
}
|
|
97
|
-
if (this.config.debug) {
|
|
98
|
-
console.log(`[PingOps] Sent ${spans.length} spans successfully`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Forces a flush and waits for completion (for shutdown)
|
|
103
|
-
*/
|
|
104
|
-
async shutdown() {
|
|
105
|
-
this.flush();
|
|
106
|
-
// Give a small delay for the async send to complete
|
|
107
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/transport/client.ts"],"names":[],"mappings":"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"}
|