@observa/sdk 2.3.1 → 2.4.5

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 (79) hide show
  1. package/README.md +140 -157
  2. package/dist/apis/ingestApi.d.ts +1 -15
  3. package/dist/apis/ingestApi.d.ts.map +1 -1
  4. package/dist/apis/ingestApi.js +2 -151
  5. package/dist/apis/ingestApi.js.map +1 -1
  6. package/dist/apis/uptimeApi.js +1 -1
  7. package/dist/apis/uptimeApi.js.map +1 -1
  8. package/dist/domain/ingest.d.ts +4 -33
  9. package/dist/domain/ingest.d.ts.map +1 -1
  10. package/dist/http/httpClient.d.ts +5 -2
  11. package/dist/http/httpClient.d.ts.map +1 -1
  12. package/dist/http/httpClient.js +44 -8
  13. package/dist/http/httpClient.js.map +1 -1
  14. package/dist/index.d.ts +18 -494
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +17 -568
  17. package/dist/index.js.map +1 -1
  18. package/dist/sdk.d.ts +4 -9
  19. package/dist/sdk.d.ts.map +1 -1
  20. package/dist/sdk.js +7 -19
  21. package/dist/sdk.js.map +1 -1
  22. package/package.json +9 -16
  23. package/dist/src/apis/ingestApi.d.ts +0 -22
  24. package/dist/src/apis/ingestApi.js +0 -167
  25. package/dist/src/apis/ingestApi.js.map +0 -1
  26. package/dist/src/apis/uptimeApi.d.ts +0 -11
  27. package/dist/src/apis/uptimeApi.js +0 -39
  28. package/dist/src/apis/uptimeApi.js.map +0 -1
  29. package/dist/src/domain/ingest.d.ts +0 -47
  30. package/dist/src/domain/ingest.js +0 -2
  31. package/dist/src/domain/ingest.js.map +0 -1
  32. package/dist/src/domain/uptime.d.ts +0 -23
  33. package/dist/src/domain/uptime.js +0 -2
  34. package/dist/src/domain/uptime.js.map +0 -1
  35. package/dist/src/http/errors.d.ts +0 -33
  36. package/dist/src/http/errors.js +0 -54
  37. package/dist/src/http/errors.js.map +0 -1
  38. package/dist/src/http/httpClient.d.ts +0 -45
  39. package/dist/src/http/httpClient.js +0 -165
  40. package/dist/src/http/httpClient.js.map +0 -1
  41. package/dist/src/index.d.ts +0 -12
  42. package/dist/src/index.js +0 -7
  43. package/dist/src/index.js.map +0 -1
  44. package/dist/src/sdk.d.ts +0 -23
  45. package/dist/src/sdk.js +0 -40
  46. package/dist/src/sdk.js.map +0 -1
  47. package/dist/src/utils/processContext.d.ts +0 -34
  48. package/dist/src/utils/processContext.js +0 -47
  49. package/dist/src/utils/processContext.js.map +0 -1
  50. package/dist/src/utils/validate.d.ts +0 -2
  51. package/dist/src/utils/validate.js +0 -12
  52. package/dist/src/utils/validate.js.map +0 -1
  53. package/dist/tests/httpClient.test.d.ts +0 -1
  54. package/dist/tests/httpClient.test.js +0 -47
  55. package/dist/tests/httpClient.test.js.map +0 -1
  56. package/dist/tests/ingestApi.test.d.ts +0 -1
  57. package/dist/tests/ingestApi.test.js +0 -65
  58. package/dist/tests/ingestApi.test.js.map +0 -1
  59. package/dist/tests/observaSdk.integration.test.d.ts +0 -1
  60. package/dist/tests/observaSdk.integration.test.js +0 -51
  61. package/dist/tests/observaSdk.integration.test.js.map +0 -1
  62. package/dist/tests/sdk.test.d.ts +0 -1
  63. package/dist/tests/sdk.test.js +0 -104
  64. package/dist/tests/sdk.test.js.map +0 -1
  65. package/dist/tsconfig.build.tsbuildinfo +0 -1
  66. package/dist/utils/processContext.d.ts +0 -35
  67. package/dist/utils/processContext.d.ts.map +0 -1
  68. package/dist/utils/processContext.js +0 -47
  69. package/dist/utils/processContext.js.map +0 -1
  70. package/src/apis/ingestApi.ts +0 -185
  71. package/src/apis/uptimeApi.ts +0 -58
  72. package/src/domain/ingest.ts +0 -89
  73. package/src/domain/uptime.ts +0 -86
  74. package/src/http/errors.ts +0 -88
  75. package/src/http/httpClient.ts +0 -277
  76. package/src/index.ts +0 -68
  77. package/src/sdk.ts +0 -103
  78. package/src/utils/processContext.ts +0 -84
  79. package/src/utils/validate.ts +0 -19
@@ -1,45 +0,0 @@
1
- export type AuthMode = 'apiKey' | 'none';
2
- export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
3
- export type QueryParams = Record<string, string | number | boolean | undefined>;
4
- export type RetryPolicy = {
5
- retries: number;
6
- retryDelayMs?: (attempt: number, response?: Response, error?: unknown) => number;
7
- retryOn?: (response?: Response, error?: unknown) => boolean;
8
- };
9
- export type HttpClientOptions = {
10
- baseUrl: string;
11
- apiKey?: string;
12
- timeoutMs?: number;
13
- headers?: Record<string, string>;
14
- retry?: RetryPolicy;
15
- };
16
- export type RequestOptions = {
17
- method: HttpMethod;
18
- path: string;
19
- query?: QueryParams;
20
- body?: unknown;
21
- headers?: Record<string, string>;
22
- auth?: AuthMode;
23
- };
24
- export declare class HttpClient {
25
- private apiKey?;
26
- private readonly baseUrl;
27
- private readonly timeoutMs;
28
- private readonly headers;
29
- private readonly retry?;
30
- private healthCheckPromise?;
31
- constructor(options: HttpClientOptions);
32
- setApiKey(apiKey?: string): void;
33
- startHealthCheck(healthCheck: () => Promise<unknown>): void;
34
- get<T>(path: string, options?: Omit<RequestOptions, 'method' | 'path'>): Promise<T>;
35
- post<T>(path: string, body?: unknown, options?: Omit<RequestOptions, 'method' | 'path' | 'body'>): Promise<T>;
36
- put<T>(path: string, body?: unknown, options?: Omit<RequestOptions, 'method' | 'path' | 'body'>): Promise<T>;
37
- patch<T>(path: string, body?: unknown, options?: Omit<RequestOptions, 'method' | 'path' | 'body'>): Promise<T>;
38
- delete<T>(path: string, options?: Omit<RequestOptions, 'method' | 'path'>): Promise<T>;
39
- request<T>(options: RequestOptions): Promise<T>;
40
- private execute;
41
- private buildUrl;
42
- private readBody;
43
- private parseRetryAfter;
44
- private delay;
45
- }
@@ -1,165 +0,0 @@
1
- import { AuthError, NetworkError, TimeoutError, mapHttpError } from './errors.js';
2
- export class HttpClient {
3
- apiKey;
4
- baseUrl;
5
- timeoutMs;
6
- headers;
7
- retry;
8
- healthCheckPromise;
9
- constructor(options) {
10
- this.baseUrl = options.baseUrl.replace(/\/+$/, '');
11
- this.apiKey = options.apiKey;
12
- this.timeoutMs = options.timeoutMs ?? 5000;
13
- this.headers = options.headers ?? {};
14
- this.retry = options.retry;
15
- }
16
- setApiKey(apiKey) {
17
- this.apiKey = apiKey;
18
- }
19
- startHealthCheck(healthCheck) {
20
- if (!this.healthCheckPromise) {
21
- const promise = healthCheck();
22
- this.healthCheckPromise = promise;
23
- promise.catch(() => undefined);
24
- }
25
- }
26
- async get(path, options) {
27
- return this.request({ method: 'GET', path, ...options });
28
- }
29
- async post(path, body, options) {
30
- return this.request({ method: 'POST', path, body, ...options });
31
- }
32
- async put(path, body, options) {
33
- return this.request({ method: 'PUT', path, body, ...options });
34
- }
35
- async patch(path, body, options) {
36
- return this.request({ method: 'PATCH', path, body, ...options });
37
- }
38
- async delete(path, options) {
39
- return this.request({ method: 'DELETE', path, ...options });
40
- }
41
- async request(options) {
42
- if (this.healthCheckPromise) {
43
- await this.healthCheckPromise;
44
- }
45
- const retry = this.retry ?? { retries: 0 };
46
- const retryOn = retry.retryOn ?? ((response, error) => {
47
- if (response)
48
- return response.status === 429 || response.status >= 500;
49
- return error instanceof NetworkError || error instanceof TimeoutError || error instanceof TypeError;
50
- });
51
- const retryDelayMs = retry.retryDelayMs ?? ((attempt) => Math.min(1000 * 2 ** (attempt - 1), 8000));
52
- let lastError;
53
- for (let attempt = 0; attempt <= retry.retries; attempt += 1) {
54
- try {
55
- const { response, data } = await this.execute(options);
56
- if (!response.ok) {
57
- const retryAfter = this.parseRetryAfter(response.headers.get('retry-after'));
58
- const error = mapHttpError(response.status, data, retryAfter);
59
- if (retryOn(response, error) && attempt < retry.retries) {
60
- await this.delay(retryDelayMs(attempt + 1, response, error));
61
- continue;
62
- }
63
- throw error;
64
- }
65
- return data;
66
- }
67
- catch (error) {
68
- lastError = error;
69
- if (retryOn(undefined, error) && attempt < retry.retries) {
70
- await this.delay(retryDelayMs(attempt + 1, undefined, error));
71
- continue;
72
- }
73
- throw error;
74
- }
75
- }
76
- throw lastError;
77
- }
78
- async execute(options) {
79
- const url = this.buildUrl(options.path, options.query);
80
- const headers = { ...this.headers, ...options.headers };
81
- if (options.body !== undefined)
82
- headers['content-type'] = 'application/json';
83
- const authMode = options.auth ?? 'none';
84
- if (authMode === 'apiKey') {
85
- if (!this.apiKey)
86
- throw new AuthError('API key is required');
87
- headers['x-api-key'] = this.apiKey;
88
- }
89
- const controller = new AbortController();
90
- const timer = setTimeout(() => controller.abort(), this.timeoutMs);
91
- try {
92
- const response = await fetch(url, {
93
- method: options.method,
94
- headers,
95
- body: options.body === undefined ? undefined : JSON.stringify(options.body),
96
- signal: controller.signal,
97
- });
98
- const data = await this.readBody(response);
99
- return { response, data };
100
- }
101
- catch (error) {
102
- if (error?.name === 'AbortError') {
103
- throw new TimeoutError('Request timeout');
104
- }
105
- if (error instanceof NetworkError || error instanceof TimeoutError)
106
- throw error;
107
- if (error instanceof Error) {
108
- if (error instanceof AuthError)
109
- throw error;
110
- }
111
- if (error instanceof Error && 'status' in error)
112
- throw error;
113
- throw new NetworkError('Network error', { details: error });
114
- }
115
- finally {
116
- clearTimeout(timer);
117
- }
118
- }
119
- buildUrl(path, query) {
120
- const base = this.baseUrl;
121
- const fullPath = path.startsWith('http') ? path : `${base}${path.startsWith('/') ? '' : '/'}${path}`;
122
- if (!query)
123
- return fullPath;
124
- const params = new URLSearchParams();
125
- for (const [key, value] of Object.entries(query)) {
126
- if (value === undefined)
127
- continue;
128
- params.set(key, String(value));
129
- }
130
- const suffix = params.toString();
131
- return suffix ? `${fullPath}?${suffix}` : fullPath;
132
- }
133
- async readBody(response) {
134
- if (response.status === 204)
135
- return undefined;
136
- const text = await response.text();
137
- if (!text)
138
- return undefined;
139
- try {
140
- return JSON.parse(text);
141
- }
142
- catch {
143
- return text;
144
- }
145
- }
146
- parseRetryAfter(value) {
147
- if (!value)
148
- return undefined;
149
- const seconds = Number(value);
150
- if (!Number.isNaN(seconds) && Number.isFinite(seconds)) {
151
- return Math.max(0, seconds);
152
- }
153
- const parsedDate = Date.parse(value);
154
- if (Number.isNaN(parsedDate))
155
- return undefined;
156
- const diffMs = parsedDate - Date.now();
157
- if (diffMs <= 0)
158
- return 0;
159
- return Math.ceil(diffMs / 1000);
160
- }
161
- async delay(ms) {
162
- await new Promise(resolve => setTimeout(resolve, ms));
163
- }
164
- }
165
- //# sourceMappingURL=httpClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../../src/http/httpClient.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export { ObservaSDK } from './sdk';
2
- export type { ObservaSDKOptions } from './sdk';
3
- export { HttpClient } from './http/httpClient';
4
- export type { HttpClientOptions, RequestOptions, RetryPolicy, AuthMode } from './http/httpClient';
5
- export { SdkError, ValidationError, AuthError, ForbiddenError, NotFoundError, ConflictError, RateLimitError, ServerError, NetworkError, TimeoutError, } from './http/errors';
6
- export { UptimeApi } from './apis/uptimeApi';
7
- export { IngestApi } from './apis/ingestApi';
8
- export type { IngestNormalizationOptions } from './apis/ingestApi';
9
- export type { UptimeEvent, UptimeStatus, UptimeHeartbeatInput, UptimeSummary } from './domain/uptime';
10
- export type { IngestEvent, IngestEventContext, IngestException, IngestLevel, IngestRequest, IngestResponse, RequestContext, Stacktrace, StacktraceFrame, } from './domain/ingest';
11
- export type { ProcessContext, ProcessContextDynamic, ProcessContextDynamicOptions, ProcessContextOptions, ProcessContextStatic, ProcessContextStaticOptions, } from './utils/processContext';
12
- export { getProcessContext, getProcessContextDynamic, getProcessContextStatic } from './utils/processContext';
package/dist/src/index.js DELETED
@@ -1,7 +0,0 @@
1
- export { ObservaSDK } from './sdk.js';
2
- export { HttpClient } from './http/httpClient.js';
3
- export { SdkError, ValidationError, AuthError, ForbiddenError, NotFoundError, ConflictError, RateLimitError, ServerError, NetworkError, TimeoutError, } from './http/errors.js';
4
- export { UptimeApi } from './apis/uptimeApi.js';
5
- export { IngestApi } from './apis/ingestApi.js';
6
- export { getProcessContext, getProcessContextDynamic, getProcessContextStatic } from './utils/processContext.js';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AASlC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAS9C,OAAO,EACL,QAAQ,EACR,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAA;AAKtB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AA6B5C,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA"}
package/dist/src/sdk.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import { IngestApi, type IngestNormalizationOptions } from './apis/ingestApi';
2
- import { UptimeApi } from './apis/uptimeApi';
3
- import { type RetryPolicy } from './http/httpClient';
4
- import { type ProcessContext, type ProcessContextDynamic, type ProcessContextDynamicOptions, type ProcessContextOptions, type ProcessContextStatic, type ProcessContextStaticOptions } from './utils/processContext';
5
- export type ObservaSDKOptions = {
6
- apiKey: string;
7
- dsnKey: string;
8
- baseUrl?: string;
9
- timeoutMs?: number;
10
- retry?: RetryPolicy;
11
- headers?: Record<string, string>;
12
- ingest?: IngestNormalizationOptions;
13
- };
14
- export declare class ObservaSDK {
15
- readonly uptime: UptimeApi;
16
- readonly ingest: IngestApi;
17
- private readonly http;
18
- constructor(options: ObservaSDKOptions);
19
- setApiKey(apiKey: string): void;
20
- getProcessContext(options?: ProcessContextOptions): ProcessContext;
21
- getProcessContextStatic(options?: ProcessContextStaticOptions): ProcessContextStatic;
22
- getProcessContextDynamic(options?: ProcessContextDynamicOptions): ProcessContextDynamic;
23
- }
package/dist/src/sdk.js DELETED
@@ -1,40 +0,0 @@
1
- import { IngestApi } from './apis/ingestApi.js';
2
- import { UptimeApi } from './apis/uptimeApi.js';
3
- import { HttpClient } from './http/httpClient.js';
4
- import { getProcessContext, getProcessContextDynamic, getProcessContextStatic, } from './utils/processContext.js';
5
- const DEFAULT_BASE_URL = 'https://backend-observa-production.up.railway.app/v1';
6
- export class ObservaSDK {
7
- uptime;
8
- ingest;
9
- http;
10
- constructor(options) {
11
- if (!options || !options.apiKey || !options.dsnKey) {
12
- throw new Error('ObservaSDK requires both apiKey and dsnKey');
13
- }
14
- const baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
15
- const normalizedBaseUrl = baseUrl.endsWith('/v1') ? baseUrl : `${baseUrl}/v1`;
16
- this.http = new HttpClient({
17
- baseUrl: normalizedBaseUrl,
18
- apiKey: options.apiKey,
19
- timeoutMs: options.timeoutMs,
20
- retry: options.retry,
21
- headers: options.headers,
22
- });
23
- this.ingest = new IngestApi(this.http, options.dsnKey, options.ingest);
24
- this.uptime = new UptimeApi(this.http, options.dsnKey);
25
- this.http.startHealthCheck(() => this.ingest.health(options.dsnKey));
26
- }
27
- setApiKey(apiKey) {
28
- this.http.setApiKey(apiKey);
29
- }
30
- getProcessContext(options) {
31
- return getProcessContext(options);
32
- }
33
- getProcessContextStatic(options) {
34
- return getProcessContextStatic(options);
35
- }
36
- getProcessContextDynamic(options) {
37
- return getProcessContextDynamic(options);
38
- }
39
- }
40
- //# sourceMappingURL=sdk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmC,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAA;AAChE,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,GAO1B,MAAM,wBAAwB,CAAA;AAiC/B,MAAM,gBAAgB,GAAG,sDAAsD,CAAA;AAK/E,MAAM,OAAO,UAAU;IAIV,MAAM,CAAW;IAIjB,MAAM,CAAW;IAET,IAAI,CAAY;IAKjC,YAAY,OAA0B;QAClC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACzE,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAA;QAC7E,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;YACvB,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACxE,CAAC;IAKD,SAAS,CAAC,MAAc;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC/B,CAAC;IAED,iBAAiB,CAAC,OAA+B;QAC7C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,uBAAuB,CAAC,OAAqC;QACzD,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,wBAAwB,CAAC,OAAsC;QAC3D,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;CACJ"}
@@ -1,34 +0,0 @@
1
- export type ProcessContextStatic = {
2
- versions?: NodeJS.ProcessVersions;
3
- node?: string;
4
- platform?: NodeJS.Platform;
5
- arch?: string;
6
- releaseName?: string;
7
- };
8
- export type ProcessContextDynamic = {
9
- pid?: number;
10
- uptimeSeconds?: number;
11
- memory?: NodeJS.MemoryUsage;
12
- };
13
- export type ProcessContext = ProcessContextStatic & ProcessContextDynamic;
14
- export type ProcessContextOptions = {
15
- includeStatic?: boolean;
16
- includeDynamic?: boolean;
17
- includeVersions?: boolean;
18
- includeRuntime?: boolean;
19
- includePid?: boolean;
20
- includeUptime?: boolean;
21
- includeMemory?: boolean;
22
- };
23
- export type ProcessContextStaticOptions = {
24
- includeVersions?: boolean;
25
- includeRuntime?: boolean;
26
- };
27
- export type ProcessContextDynamicOptions = {
28
- includePid?: boolean;
29
- includeUptime?: boolean;
30
- includeMemory?: boolean;
31
- };
32
- export declare function getProcessContext(options?: ProcessContextOptions): ProcessContext;
33
- export declare function getProcessContextStatic(options?: ProcessContextStaticOptions): ProcessContextStatic;
34
- export declare function getProcessContextDynamic(options?: ProcessContextDynamicOptions): ProcessContextDynamic;
@@ -1,47 +0,0 @@
1
- export function getProcessContext(options) {
2
- const includeStatic = options?.includeStatic ?? true;
3
- const includeDynamic = options?.includeDynamic ?? true;
4
- const includeVersions = options?.includeVersions ?? true;
5
- const includeRuntime = options?.includeRuntime ?? true;
6
- const includePid = options?.includePid ?? true;
7
- const includeUptime = options?.includeUptime ?? true;
8
- const includeMemory = options?.includeMemory ?? true;
9
- const context = {};
10
- if (includeDynamic) {
11
- if (includePid)
12
- context.pid = process.pid;
13
- if (includeUptime)
14
- context.uptimeSeconds = Math.round(process.uptime());
15
- if (includeMemory)
16
- context.memory = process.memoryUsage();
17
- }
18
- if (includeStatic) {
19
- if (includeVersions)
20
- context.versions = process.versions;
21
- if (includeRuntime) {
22
- context.node = process.versions.node;
23
- context.platform = process.platform;
24
- context.arch = process.arch;
25
- context.releaseName = process.release?.name;
26
- }
27
- }
28
- return context;
29
- }
30
- export function getProcessContextStatic(options) {
31
- return getProcessContext({
32
- includeDynamic: false,
33
- includeStatic: true,
34
- includeVersions: options?.includeVersions,
35
- includeRuntime: options?.includeRuntime,
36
- });
37
- }
38
- export function getProcessContextDynamic(options) {
39
- return getProcessContext({
40
- includeStatic: false,
41
- includeDynamic: true,
42
- includePid: options?.includePid,
43
- includeUptime: options?.includeUptime,
44
- includeMemory: options?.includeMemory,
45
- });
46
- }
47
- //# sourceMappingURL=processContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processContext.js","sourceRoot":"","sources":["../../../src/utils/processContext.ts"],"names":[],"mappings":"AAqCA,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAC7D,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,CAAA;IACpD,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAA;IACtD,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,IAAI,IAAI,CAAA;IACxD,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAA;IACtD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAA;IAC9C,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,CAAA;IACpD,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,CAAA;IACpD,MAAM,OAAO,GAAmB,EAAE,CAAA;IAElC,IAAI,cAAc,EAAE,CAAC;QACjB,IAAI,UAAU;YAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACzC,IAAI,aAAa;YAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACvE,IAAI,aAAa;YAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAC7D,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAChB,IAAI,eAAe;YAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACxD,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;YACpC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;YACnC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;YAC3B,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAA;QAC/C,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAqC;IACzE,OAAO,iBAAiB,CAAC;QACrB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,cAAc,EAAE,OAAO,EAAE,cAAc;KAC1C,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAsC;IAC3E,OAAO,iBAAiB,CAAC;QACrB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,aAAa,EAAE,OAAO,EAAE,aAAa;QACrC,aAAa,EAAE,OAAO,EAAE,aAAa;KACxC,CAAC,CAAA;AACN,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function ensureNonEmpty(value: string, name: string): void;
2
- export declare function ensureDefined<T>(value: T | null | undefined, name: string): asserts value is T;
@@ -1,12 +0,0 @@
1
- import { ValidationError } from '../http/errors.js';
2
- export function ensureNonEmpty(value, name) {
3
- if (!value || value.trim().length === 0) {
4
- throw new ValidationError(`${name} is required`);
5
- }
6
- }
7
- export function ensureDefined(value, name) {
8
- if (value === null || value === undefined) {
9
- throw new ValidationError(`${name} is required`);
10
- }
11
- }
12
- //# sourceMappingURL=validate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/utils/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAKhD,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,IAAY;IACtD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,cAAc,CAAC,CAAA;IACpD,CAAC;AACL,CAAC;AAKD,MAAM,UAAU,aAAa,CAAI,KAA2B,EAAE,IAAY;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,cAAc,CAAC,CAAA;IACpD,CAAC;AACL,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,47 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { HttpClient } from '../src/http/httpClient.js';
3
- import { AuthError } from '../src/http/errors.js';
4
- describe('HttpClient', () => {
5
- const originalFetch = global.fetch;
6
- afterEach(() => {
7
- global.fetch = originalFetch;
8
- jest.resetAllMocks();
9
- });
10
- test('adjunta x-api-key cuando auth es apiKey', async () => {
11
- const fetchMock = jest.fn().mockImplementation(async () => ({
12
- ok: true,
13
- status: 200,
14
- text: async () => JSON.stringify({ ok: true }),
15
- }));
16
- global.fetch = fetchMock;
17
- const client = new HttpClient({ baseUrl: 'http://localhost', apiKey: 'key123' });
18
- await client.get('/ping', { auth: 'apiKey' });
19
- const [, options] = global.fetch.mock.calls[0];
20
- expect(options.headers['x-api-key']).toBe('key123');
21
- });
22
- test('mapea 401 a AuthError', async () => {
23
- const fetchMock = jest.fn().mockImplementation(async () => ({
24
- ok: false,
25
- status: 401,
26
- headers: { get: () => null },
27
- text: async () => JSON.stringify({ message: 'unauthorized' }),
28
- }));
29
- global.fetch = fetchMock;
30
- const client = new HttpClient({ baseUrl: 'http://localhost', apiKey: 'key123' });
31
- await expect(client.get('/private', { auth: 'apiKey' })).rejects.toBeInstanceOf(AuthError);
32
- });
33
- test('agrega content-type y construye url con baseUrl', async () => {
34
- const fetchMock = jest.fn().mockImplementation(async () => ({
35
- ok: true,
36
- status: 200,
37
- text: async () => JSON.stringify({ ok: true }),
38
- }));
39
- global.fetch = fetchMock;
40
- const client = new HttpClient({ baseUrl: 'http://localhost/api', apiKey: 'key123' });
41
- await client.post('ingest/events', { dsnKey: 'dsn_1', event: { level: 'error' } }, { auth: 'apiKey' });
42
- const [url, options] = global.fetch.mock.calls[0];
43
- expect(url).toBe('http://localhost/api/ingest/events');
44
- expect(options.headers['content-type']).toBe('application/json');
45
- });
46
- });
47
- //# sourceMappingURL=httpClient.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"httpClient.test.js","sourceRoot":"","sources":["../../tests/httpClient.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,65 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { IngestApi } from '../src/apis/ingestApi.js';
3
- import { HttpClient } from '../src/http/httpClient.js';
4
- import { ValidationError } from '../src/http/errors.js';
5
- describe('IngestApi', () => {
6
- const originalFetch = global.fetch;
7
- afterEach(() => {
8
- global.fetch = originalFetch;
9
- jest.resetAllMocks();
10
- });
11
- test('envía headers opcionales y dsnKey por defecto', async () => {
12
- const fetchMock = jest.fn().mockImplementation(async () => ({
13
- ok: true,
14
- status: 200,
15
- text: async () => JSON.stringify({ event_id: 'evt_10' }),
16
- }));
17
- global.fetch = fetchMock;
18
- const client = new HttpClient({ baseUrl: 'http://localhost', apiKey: 'key_1' });
19
- const api = new IngestApi(client, 'dsn_1');
20
- await api.event({
21
- event: {
22
- level: 'error',
23
- message: 'boom',
24
- },
25
- idempotencyKey: 'req_10',
26
- sdkVersion: '2.0.0',
27
- });
28
- const [url, options] = global.fetch.mock.calls[0];
29
- expect(url).toBe('http://localhost/ingest/events');
30
- expect(options.headers['x-idempotency-key']).toBe('req_10');
31
- expect(options.headers['x-sdk-version']).toBe('2.0.0');
32
- const body = JSON.parse(options.body);
33
- expect(body.dsnKey).toBe('dsn_1');
34
- expect(body.event.schema_version).toBe(1);
35
- expect(body.event.event_id).toBeDefined();
36
- expect(new Date(body.event.timestamp).toString()).not.toBe('Invalid Date');
37
- expect(body.event.context.system.pid).toBe(process.pid);
38
- expect(body.event.context.runtime.arch).toBe(process.arch);
39
- });
40
- test('valida tamaño de idempotencyKey', async () => {
41
- const client = new HttpClient({ baseUrl: 'http://localhost', apiKey: 'key_1' });
42
- const api = new IngestApi(client, 'dsn_1');
43
- await expect(api.event({
44
- event: { level: 'error', message: 'boom' },
45
- idempotencyKey: 'a'.repeat(129),
46
- })).rejects.toBeInstanceOf(ValidationError);
47
- });
48
- test('health usa POST /ingest/health con dsnKey', async () => {
49
- const fetchMock = jest.fn().mockImplementation(async () => ({
50
- ok: true,
51
- status: 200,
52
- text: async () => JSON.stringify({ ok: true }),
53
- }));
54
- global.fetch = fetchMock;
55
- const client = new HttpClient({ baseUrl: 'http://localhost', apiKey: 'key_1' });
56
- const api = new IngestApi(client, 'dsn_1');
57
- const result = await api.health();
58
- expect(result.ok).toBe(true);
59
- const [url, options] = global.fetch.mock.calls[0];
60
- expect(url).toBe('http://localhost/ingest/health');
61
- expect(options.method).toBe('POST');
62
- expect(JSON.parse(options.body).dsnKey).toBe('dsn_1');
63
- });
64
- });
65
- //# sourceMappingURL=ingestApi.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ingestApi.test.js","sourceRoot":"","sources":["../../tests/ingestApi.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,51 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { ObservaSDK } from '../src/sdk.js';
3
- describe('ObservaSDK integration', () => {
4
- const originalFetch = global.fetch;
5
- afterEach(() => {
6
- global.fetch = originalFetch;
7
- jest.resetAllMocks();
8
- });
9
- test('flujo completo de health + ingest con payload enriquecido', async () => {
10
- const fetchMock = jest.fn()
11
- .mockImplementationOnce(async () => ({
12
- ok: true,
13
- status: 200,
14
- text: async () => JSON.stringify({ ok: true }),
15
- }))
16
- .mockImplementationOnce(async () => ({
17
- ok: true,
18
- status: 200,
19
- text: async () => JSON.stringify({ event_id: 'evt_99' }),
20
- }));
21
- global.fetch = fetchMock;
22
- const sdk = new ObservaSDK({ apiKey: 'api_1', dsnKey: 'dsn_9', baseUrl: 'http://localhost' });
23
- const result = await sdk.ingest.event({
24
- event: {
25
- level: 'error',
26
- message: 'boom',
27
- exception: {
28
- type: 'Error',
29
- value: 'Timeout',
30
- stacktrace: {
31
- frames: [{ filename: 'src/a.ts', function: 'f', lineno: 1, colno: 2 }],
32
- },
33
- },
34
- tags: { service: 'billing' },
35
- extra: { orderId: 'ord_1' },
36
- },
37
- idempotencyKey: 'req_99',
38
- sdkVersion: '2.0.0',
39
- });
40
- expect(result.event_id).toBe('evt_99');
41
- const [, eventOptions] = global.fetch.mock.calls[1];
42
- const body = JSON.parse(eventOptions.body);
43
- expect(body.dsnKey).toBe('dsn_9');
44
- expect(body.event.exception.type).toBe('Error');
45
- expect(body.event.tags.service).toBe('billing');
46
- expect(body.event.extra.orderId).toBe('ord_1');
47
- expect(eventOptions.headers['x-idempotency-key']).toBe('req_99');
48
- expect(eventOptions.headers['x-sdk-version']).toBe('2.0.0');
49
- });
50
- });
51
- //# sourceMappingURL=observaSdk.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"observaSdk.integration.test.js","sourceRoot":"","sources":["../../tests/observaSdk.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAY,CAAA;IAEzC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,CAAC,KAAK,GAAG,aAAa,CAAA;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,SAAS,GAAI,IAAI,CAAC,EAAE,EAAU;aAC/B,sBAAsB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACjC,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACjD,CAAC,CAAC;aACF,sBAAsB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACjC,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;SAC3D,CAAC,CAAC,CAAA;QACP,MAAM,CAAC,KAAK,GAAG,SAAgB,CAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAA;QAC7F,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE;gBACH,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE;wBACR,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;qBACzE;iBACJ;gBACD,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;gBAC5B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;aAC9B;YACD,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,OAAO;SACtB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,EAAE,YAAY,CAAC,GAAI,MAAM,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};