@v3finance/monitoring-sdk 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +322 -2
  4. package/dist/cjs/client.d.ts +46 -0
  5. package/dist/cjs/client.d.ts.map +1 -0
  6. package/dist/cjs/client.js +80 -0
  7. package/dist/cjs/client.js.map +1 -0
  8. package/dist/cjs/core/errors.d.ts +64 -0
  9. package/dist/cjs/core/errors.d.ts.map +1 -0
  10. package/dist/cjs/core/errors.js +95 -0
  11. package/dist/cjs/core/errors.js.map +1 -0
  12. package/dist/cjs/core/http.d.ts +58 -0
  13. package/dist/cjs/core/http.d.ts.map +1 -0
  14. package/dist/cjs/core/http.js +143 -0
  15. package/dist/cjs/core/http.js.map +1 -0
  16. package/dist/cjs/core/pagination.d.ts +12 -0
  17. package/dist/cjs/core/pagination.d.ts.map +1 -0
  18. package/dist/cjs/core/pagination.js +15 -0
  19. package/dist/cjs/core/pagination.js.map +1 -0
  20. package/dist/cjs/core/scope.d.ts +8 -0
  21. package/dist/cjs/core/scope.d.ts.map +1 -0
  22. package/dist/cjs/core/scope.js +3 -0
  23. package/dist/cjs/core/scope.js.map +1 -0
  24. package/dist/cjs/generated/types.d.ts +336 -0
  25. package/dist/cjs/generated/types.d.ts.map +1 -0
  26. package/dist/cjs/generated/types.js +5 -0
  27. package/dist/cjs/generated/types.js.map +1 -0
  28. package/dist/cjs/index.d.ts +23 -0
  29. package/dist/cjs/index.d.ts.map +1 -0
  30. package/dist/cjs/index.js +47 -0
  31. package/dist/cjs/index.js.map +1 -0
  32. package/dist/cjs/package.json +1 -0
  33. package/dist/cjs/resources/account.d.ts +22 -0
  34. package/dist/cjs/resources/account.d.ts.map +1 -0
  35. package/dist/cjs/resources/account.js +31 -0
  36. package/dist/cjs/resources/account.js.map +1 -0
  37. package/dist/cjs/resources/addresses.d.ts +93 -0
  38. package/dist/cjs/resources/addresses.d.ts.map +1 -0
  39. package/dist/cjs/resources/addresses.js +128 -0
  40. package/dist/cjs/resources/addresses.js.map +1 -0
  41. package/dist/cjs/resources/catalog.d.ts +37 -0
  42. package/dist/cjs/resources/catalog.d.ts.map +1 -0
  43. package/dist/cjs/resources/catalog.js +52 -0
  44. package/dist/cjs/resources/catalog.js.map +1 -0
  45. package/dist/cjs/resources/deliveries.d.ts +61 -0
  46. package/dist/cjs/resources/deliveries.d.ts.map +1 -0
  47. package/dist/cjs/resources/deliveries.js +53 -0
  48. package/dist/cjs/resources/deliveries.js.map +1 -0
  49. package/dist/cjs/resources/transactions.d.ts +28 -0
  50. package/dist/cjs/resources/transactions.d.ts.map +1 -0
  51. package/dist/cjs/resources/transactions.js +34 -0
  52. package/dist/cjs/resources/transactions.js.map +1 -0
  53. package/dist/cjs/resources/webhooks.d.ts +22 -0
  54. package/dist/cjs/resources/webhooks.d.ts.map +1 -0
  55. package/dist/cjs/resources/webhooks.js +35 -0
  56. package/dist/cjs/resources/webhooks.js.map +1 -0
  57. package/dist/cjs/units.d.ts +29 -0
  58. package/dist/cjs/units.d.ts.map +1 -0
  59. package/dist/cjs/units.js +62 -0
  60. package/dist/cjs/units.js.map +1 -0
  61. package/dist/cjs/version.d.ts +5 -0
  62. package/dist/cjs/version.d.ts.map +1 -0
  63. package/dist/cjs/version.js +8 -0
  64. package/dist/cjs/version.js.map +1 -0
  65. package/dist/cjs/webhooks.d.ts +82 -0
  66. package/dist/cjs/webhooks.d.ts.map +1 -0
  67. package/dist/cjs/webhooks.js +133 -0
  68. package/dist/cjs/webhooks.js.map +1 -0
  69. package/dist/esm/client.d.ts +46 -0
  70. package/dist/esm/client.d.ts.map +1 -0
  71. package/dist/esm/client.js +76 -0
  72. package/dist/esm/client.js.map +1 -0
  73. package/dist/esm/core/errors.d.ts +64 -0
  74. package/dist/esm/core/errors.d.ts.map +1 -0
  75. package/dist/esm/core/errors.js +86 -0
  76. package/dist/esm/core/errors.js.map +1 -0
  77. package/dist/esm/core/http.d.ts +58 -0
  78. package/dist/esm/core/http.d.ts.map +1 -0
  79. package/dist/esm/core/http.js +138 -0
  80. package/dist/esm/core/http.js.map +1 -0
  81. package/dist/esm/core/pagination.d.ts +12 -0
  82. package/dist/esm/core/pagination.d.ts.map +1 -0
  83. package/dist/esm/core/pagination.js +12 -0
  84. package/dist/esm/core/pagination.js.map +1 -0
  85. package/dist/esm/core/scope.d.ts +8 -0
  86. package/dist/esm/core/scope.d.ts.map +1 -0
  87. package/dist/esm/core/scope.js +2 -0
  88. package/dist/esm/core/scope.js.map +1 -0
  89. package/dist/esm/generated/types.d.ts +336 -0
  90. package/dist/esm/generated/types.d.ts.map +1 -0
  91. package/dist/esm/generated/types.js +4 -0
  92. package/dist/esm/generated/types.js.map +1 -0
  93. package/dist/esm/index.d.ts +23 -0
  94. package/dist/esm/index.d.ts.map +1 -0
  95. package/dist/esm/index.js +20 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/resources/account.d.ts +22 -0
  98. package/dist/esm/resources/account.d.ts.map +1 -0
  99. package/dist/esm/resources/account.js +27 -0
  100. package/dist/esm/resources/account.js.map +1 -0
  101. package/dist/esm/resources/addresses.d.ts +93 -0
  102. package/dist/esm/resources/addresses.d.ts.map +1 -0
  103. package/dist/esm/resources/addresses.js +124 -0
  104. package/dist/esm/resources/addresses.js.map +1 -0
  105. package/dist/esm/resources/catalog.d.ts +37 -0
  106. package/dist/esm/resources/catalog.d.ts.map +1 -0
  107. package/dist/esm/resources/catalog.js +47 -0
  108. package/dist/esm/resources/catalog.js.map +1 -0
  109. package/dist/esm/resources/deliveries.d.ts +61 -0
  110. package/dist/esm/resources/deliveries.d.ts.map +1 -0
  111. package/dist/esm/resources/deliveries.js +49 -0
  112. package/dist/esm/resources/deliveries.js.map +1 -0
  113. package/dist/esm/resources/transactions.d.ts +28 -0
  114. package/dist/esm/resources/transactions.d.ts.map +1 -0
  115. package/dist/esm/resources/transactions.js +30 -0
  116. package/dist/esm/resources/transactions.js.map +1 -0
  117. package/dist/esm/resources/webhooks.d.ts +22 -0
  118. package/dist/esm/resources/webhooks.d.ts.map +1 -0
  119. package/dist/esm/resources/webhooks.js +31 -0
  120. package/dist/esm/resources/webhooks.js.map +1 -0
  121. package/dist/esm/units.d.ts +29 -0
  122. package/dist/esm/units.d.ts.map +1 -0
  123. package/dist/esm/units.js +58 -0
  124. package/dist/esm/units.js.map +1 -0
  125. package/dist/esm/version.d.ts +5 -0
  126. package/dist/esm/version.d.ts.map +1 -0
  127. package/dist/esm/version.js +5 -0
  128. package/dist/esm/version.js.map +1 -0
  129. package/dist/esm/webhooks.d.ts +82 -0
  130. package/dist/esm/webhooks.d.ts.map +1 -0
  131. package/dist/esm/webhooks.js +125 -0
  132. package/dist/esm/webhooks.js.map +1 -0
  133. package/package.json +69 -4
  134. package/src/client.ts +83 -0
  135. package/src/core/errors.ts +99 -0
  136. package/src/core/http.ts +183 -0
  137. package/src/core/pagination.ts +20 -0
  138. package/src/core/scope.ts +8 -0
  139. package/src/generated/types.ts +369 -0
  140. package/src/index.ts +43 -0
  141. package/src/resources/account.ts +33 -0
  142. package/src/resources/addresses.ts +165 -0
  143. package/src/resources/catalog.ts +56 -0
  144. package/src/resources/deliveries.ts +82 -0
  145. package/src/resources/transactions.ts +34 -0
  146. package/src/resources/webhooks.ts +36 -0
  147. package/src/units.ts +56 -0
  148. package/src/version.ts +5 -0
  149. package/src/webhooks.ts +138 -0
@@ -0,0 +1,64 @@
1
+ import type { ApiErrorBody } from '../generated/types.js';
2
+ /** A per-item problem of a batch request: the item's index in your request and the reason. */
3
+ export type ErrorDetail = NonNullable<ApiErrorBody['error']['details']>[number];
4
+ /**
5
+ * Base class of every error thrown by the SDK.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * try {
10
+ * await monitoring.addresses.add(items)
11
+ * } catch (error) {
12
+ * if (error instanceof MonitoringApiError && error.status === 400) console.log(error.details)
13
+ * else throw error
14
+ * }
15
+ * ```
16
+ */
17
+ export declare class MonitoringError extends Error {
18
+ constructor(message: string, options?: {
19
+ cause?: unknown;
20
+ });
21
+ }
22
+ /** The API responded with an error status (4xx or 5xx). */
23
+ export declare class MonitoringApiError extends MonitoringError {
24
+ /** HTTP status code. */
25
+ readonly status: number;
26
+ /**
27
+ * Machine-readable error code, e.g. `invalid_request`, `unauthorized`, `forbidden`, `not_found`,
28
+ * `rate_limited`, `upstream_error`, `upstream_rate_limited`.
29
+ */
30
+ readonly code: string;
31
+ /** Per-item problems of a batch request, such as invalid addresses. Empty when there are none. */
32
+ readonly details: ErrorDetail[];
33
+ /** Request ID. Include it when contacting support. */
34
+ readonly requestId: string | undefined;
35
+ /** Raw response body. */
36
+ readonly body: unknown;
37
+ constructor(init: {
38
+ status: number;
39
+ code: string;
40
+ message: string;
41
+ details?: ErrorDetail[];
42
+ requestId?: string;
43
+ body?: unknown;
44
+ });
45
+ /** `true` for transient errors — rate limits and unavailable upstream providers — that can be retried later. */
46
+ get retryable(): boolean;
47
+ }
48
+ /** The request did not get a response because of a network or connection failure. */
49
+ export declare class MonitoringConnectionError extends MonitoringError {
50
+ constructor(message: string, options?: {
51
+ cause?: unknown;
52
+ });
53
+ }
54
+ /** The request did not complete within `timeoutMs`. */
55
+ export declare class MonitoringTimeoutError extends MonitoringConnectionError {
56
+ constructor(timeoutMs: number);
57
+ }
58
+ /** The webhook signature does not match: the body was altered or is verified with the wrong secret. */
59
+ export declare class WebhookSignatureError extends MonitoringError {
60
+ constructor(message?: string);
61
+ }
62
+ /** Builds an error from any error body the API returns. */
63
+ export declare function apiErrorFrom(status: number, body: unknown, requestId: string | undefined): MonitoringApiError;
64
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,8FAA8F;AAC9F,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/E;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,2DAA2D;AAC3D,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kGAAkG;IAClG,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAA;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IAEtB,YAAY,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,EAQ/H;IAED,gHAAgH;IAChH,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,qFAAqF;AACrF,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,uDAAuD;AACvD,qBAAa,sBAAuB,SAAQ,yBAAyB;IACnE,YAAY,SAAS,EAAE,MAAM,EAG5B;CACF;AAED,uGAAuG;AACvG,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,YAAY,OAAO,SAA+B,EAGjD;CACF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAW7G"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Base class of every error thrown by the SDK.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * try {
7
+ * await monitoring.addresses.add(items)
8
+ * } catch (error) {
9
+ * if (error instanceof MonitoringApiError && error.status === 400) console.log(error.details)
10
+ * else throw error
11
+ * }
12
+ * ```
13
+ */
14
+ export class MonitoringError extends Error {
15
+ constructor(message, options) {
16
+ super(message, options);
17
+ this.name = 'MonitoringError';
18
+ }
19
+ }
20
+ /** The API responded with an error status (4xx or 5xx). */
21
+ export class MonitoringApiError extends MonitoringError {
22
+ /** HTTP status code. */
23
+ status;
24
+ /**
25
+ * Machine-readable error code, e.g. `invalid_request`, `unauthorized`, `forbidden`, `not_found`,
26
+ * `rate_limited`, `upstream_error`, `upstream_rate_limited`.
27
+ */
28
+ code;
29
+ /** Per-item problems of a batch request, such as invalid addresses. Empty when there are none. */
30
+ details;
31
+ /** Request ID. Include it when contacting support. */
32
+ requestId;
33
+ /** Raw response body. */
34
+ body;
35
+ constructor(init) {
36
+ super(`${init.message} (HTTP ${init.status}, ${init.code})`);
37
+ this.name = 'MonitoringApiError';
38
+ this.status = init.status;
39
+ this.code = init.code;
40
+ this.details = init.details ?? [];
41
+ this.requestId = init.requestId;
42
+ this.body = init.body;
43
+ }
44
+ /** `true` for transient errors — rate limits and unavailable upstream providers — that can be retried later. */
45
+ get retryable() {
46
+ return this.status === 429 || this.status === 503;
47
+ }
48
+ }
49
+ /** The request did not get a response because of a network or connection failure. */
50
+ export class MonitoringConnectionError extends MonitoringError {
51
+ constructor(message, options) {
52
+ super(message, options);
53
+ this.name = 'MonitoringConnectionError';
54
+ }
55
+ }
56
+ /** The request did not complete within `timeoutMs`. */
57
+ export class MonitoringTimeoutError extends MonitoringConnectionError {
58
+ constructor(timeoutMs) {
59
+ super(`request timed out after ${timeoutMs} ms`);
60
+ this.name = 'MonitoringTimeoutError';
61
+ }
62
+ }
63
+ /** The webhook signature does not match: the body was altered or is verified with the wrong secret. */
64
+ export class WebhookSignatureError extends MonitoringError {
65
+ constructor(message = 'webhook signature mismatch') {
66
+ super(message);
67
+ this.name = 'WebhookSignatureError';
68
+ }
69
+ }
70
+ /** Builds an error from any error body the API returns. */
71
+ export function apiErrorFrom(status, body, requestId) {
72
+ const b = (body ?? {});
73
+ const v1 = typeof b.error === 'object' && b.error !== null ? b.error : undefined;
74
+ const message = (typeof v1?.message === 'string' && v1.message) ||
75
+ (typeof b.error === 'string' && b.error) ||
76
+ (typeof b.message === 'string' && b.message) ||
77
+ `HTTP ${status}`;
78
+ const code = (typeof v1?.code === 'string' && v1.code) || (typeof b.code === 'string' && b.code.toLowerCase()) || defaultCode(status);
79
+ const details = (Array.isArray(v1?.details) ? v1.details : Array.isArray(b.details) ? b.details : []);
80
+ return new MonitoringApiError({ status, code, message, details, requestId, body });
81
+ }
82
+ function defaultCode(status) {
83
+ const codes = { 400: 'invalid_request', 401: 'unauthorized', 403: 'forbidden', 404: 'not_found', 409: 'conflict', 429: 'rate_limited' };
84
+ return codes[status] ?? (status >= 500 ? 'server_error' : 'http_error');
85
+ }
86
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /** Per-request options, accepted as the last argument of every method. */
2
+ export interface RequestOptions {
3
+ /** Cancels the request, including pending retries. */
4
+ signal?: AbortSignal;
5
+ /** Timeout for this request in milliseconds. Overrides {@link ClientOptions.timeoutMs}. */
6
+ timeoutMs?: number;
7
+ /** Maximum number of retries for this request. Overrides {@link ClientOptions.maxRetries}. */
8
+ maxRetries?: number;
9
+ }
10
+ /** Options of {@link MonitoringClient}. */
11
+ export interface ClientOptions {
12
+ /** Your API key. Sent in the `x-api-key` header. */
13
+ apiKey: string;
14
+ /**
15
+ * Your client ID. Optional: when omitted, it is resolved from the API key on first use and cached.
16
+ */
17
+ clientId?: string;
18
+ /** API base URL. Defaults to `https://monitoring.v3.finance`. */
19
+ baseUrl?: string;
20
+ /** Request timeout in milliseconds. Defaults to `30000`. */
21
+ timeoutMs?: number;
22
+ /**
23
+ * Maximum number of retries for transient errors. Defaults to `2`.
24
+ *
25
+ * `429` and `503` responses are retried for every request, honoring `Retry-After`. Network errors and timeouts are
26
+ * retried only for requests that are safe to repeat. Backoff is exponential with jitter.
27
+ */
28
+ maxRetries?: number;
29
+ /** Custom `fetch` implementation, e.g. for proxies or instrumentation. Defaults to the global `fetch`. */
30
+ fetch?: typeof fetch;
31
+ /** Additional headers sent with every request. */
32
+ headers?: Record<string, string>;
33
+ }
34
+ type Query = Record<string, string | number | boolean | null | undefined>;
35
+ /** @internal A request to the API. */
36
+ export interface Call {
37
+ method: 'GET' | 'POST' | 'PATCH' | 'DELETE';
38
+ path: string;
39
+ query?: Query;
40
+ body?: unknown;
41
+ /** The request can be repeated after a network failure without changing the outcome. */
42
+ idempotent: boolean;
43
+ /** Statuses returned as data rather than thrown. */
44
+ acceptStatuses?: number[];
45
+ options?: RequestOptions | undefined;
46
+ }
47
+ /** @internal Transport: base URL, authentication, timeouts, retries and error mapping. */
48
+ export declare class HttpClient {
49
+ #private;
50
+ readonly baseUrl: string;
51
+ constructor(options: ClientOptions, defaultBaseUrl: string);
52
+ /** Sends a request and returns the parsed JSON response. */
53
+ request<T>(call: Call): Promise<T>;
54
+ }
55
+ /** @internal Encodes a path segment. */
56
+ export declare const seg: (value: string | number) => string;
57
+ export {};
58
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"AAGA,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0GAA0G;IAC1G,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAEzE,sCAAsC;AACtC,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wFAAwF;IACxF,UAAU,EAAE,OAAO,CAAA;IACnB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CACrC;AAKD,0FAA0F;AAC1F,qBAAa,UAAU;;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAOxB,YAAY,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAUzD;IAED,4DAA4D;IACtD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAmCvC;CA6BF;AAuCD,wCAAwC;AACxC,eAAO,MAAM,GAAG,UAAW,MAAM,GAAG,MAAM,WAAsC,CAAA"}
@@ -0,0 +1,138 @@
1
+ import { SDK_VERSION } from '../version.js';
2
+ import { apiErrorFrom, MonitoringConnectionError, MonitoringError, MonitoringTimeoutError } from './errors.js';
3
+ const DEFAULTS = { timeoutMs: 30_000, maxRetries: 2 };
4
+ const MAX_RETRY_DELAY_MS = 60_000;
5
+ /** @internal Transport: base URL, authentication, timeouts, retries and error mapping. */
6
+ export class HttpClient {
7
+ baseUrl;
8
+ #apiKey;
9
+ #timeoutMs;
10
+ #maxRetries;
11
+ #fetch;
12
+ #headers;
13
+ constructor(options, defaultBaseUrl) {
14
+ if (!options?.apiKey)
15
+ throw new MonitoringError('apiKey is required');
16
+ this.baseUrl = (options.baseUrl ?? defaultBaseUrl).replace(/\/+$/, '');
17
+ this.#apiKey = options.apiKey;
18
+ this.#timeoutMs = options.timeoutMs ?? DEFAULTS.timeoutMs;
19
+ this.#maxRetries = options.maxRetries ?? DEFAULTS.maxRetries;
20
+ const f = options.fetch ?? globalThis.fetch;
21
+ if (typeof f !== 'function')
22
+ throw new MonitoringError('fetch is not available: use Node.js 20 or later, or pass options.fetch');
23
+ this.#fetch = f;
24
+ this.#headers = { ...options.headers };
25
+ }
26
+ /** Sends a request and returns the parsed JSON response. */
27
+ async request(call) {
28
+ const url = this.#url(call.path, call.query);
29
+ const headers = {
30
+ accept: 'application/json',
31
+ 'user-agent': `@v3finance/monitoring-sdk/${SDK_VERSION}`,
32
+ ...this.#headers,
33
+ 'x-api-key': this.#apiKey,
34
+ };
35
+ if (call.body !== undefined)
36
+ headers['content-type'] = 'application/json';
37
+ const body = call.body === undefined ? undefined : JSON.stringify(call.body);
38
+ const maxRetries = call.options?.maxRetries ?? this.#maxRetries;
39
+ const timeoutMs = call.options?.timeoutMs ?? this.#timeoutMs;
40
+ const signal = call.options?.signal;
41
+ for (let attempt = 0;; attempt++) {
42
+ let res;
43
+ try {
44
+ res = await this.#send(url, { method: call.method, headers, body }, timeoutMs, signal);
45
+ }
46
+ catch (error) {
47
+ if (signal?.aborted)
48
+ throw signal.reason;
49
+ if (call.idempotent && attempt < maxRetries) {
50
+ await sleep(backoff(attempt), signal);
51
+ continue;
52
+ }
53
+ throw error;
54
+ }
55
+ if ((res.status >= 200 && res.status < 300) || call.acceptStatuses?.includes(res.status))
56
+ return res.data;
57
+ const error = apiErrorFrom(res.status, res.data, res.headers.get('cf-ray') ?? undefined);
58
+ // 429 and 503 mean the request was not processed, so retrying is safe for any method
59
+ if (error.retryable && attempt < maxRetries) {
60
+ await sleep(retryAfter(res.headers) ?? backoff(attempt), signal);
61
+ continue;
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ #url(path, query) {
67
+ const url = new URL(this.baseUrl + path);
68
+ for (const [k, v] of Object.entries(query ?? {}))
69
+ if (v !== undefined && v !== null && v !== '')
70
+ url.searchParams.set(k, String(v));
71
+ return url.toString();
72
+ }
73
+ /** One attempt, with a single timeout covering both the connection and the response body. */
74
+ async #send(url, init, timeoutMs, signal) {
75
+ const controller = new AbortController();
76
+ const timer = setTimeout(() => controller.abort(new MonitoringTimeoutError(timeoutMs)), timeoutMs);
77
+ const onAbort = () => controller.abort(signal.reason);
78
+ if (signal?.aborted)
79
+ onAbort();
80
+ signal?.addEventListener('abort', onAbort, { once: true });
81
+ try {
82
+ const res = await this.#fetch(url, { ...init, signal: controller.signal });
83
+ const text = await res.text();
84
+ return { status: res.status, headers: res.headers, data: text ? parseJson(text) : undefined };
85
+ }
86
+ catch (error) {
87
+ const reason = controller.signal.reason;
88
+ if (reason instanceof MonitoringTimeoutError)
89
+ throw reason;
90
+ if (signal?.aborted)
91
+ throw signal.reason;
92
+ throw new MonitoringConnectionError(`request to ${new URL(url).origin} failed: ${error.message}`, { cause: error });
93
+ }
94
+ finally {
95
+ clearTimeout(timer);
96
+ signal?.removeEventListener('abort', onAbort);
97
+ }
98
+ }
99
+ }
100
+ function parseJson(text) {
101
+ try {
102
+ return JSON.parse(text);
103
+ }
104
+ catch {
105
+ return text;
106
+ }
107
+ }
108
+ /** Exponential backoff with jitter: ~0.5 s, 1 s, 2 s… capped at 8 s. */
109
+ function backoff(attempt) {
110
+ return Math.min(8_000, 500 * 2 ** attempt) * (0.5 + Math.random() / 2);
111
+ }
112
+ /** Delay from a `Retry-After` header: seconds or an HTTP date. */
113
+ function retryAfter(headers) {
114
+ const raw = headers.get('retry-after');
115
+ if (!raw)
116
+ return undefined;
117
+ const seconds = Number(raw);
118
+ const ms = Number.isFinite(seconds) ? seconds * 1000 : Date.parse(raw) - Date.now();
119
+ return Number.isFinite(ms) ? Math.min(Math.max(ms, 0), MAX_RETRY_DELAY_MS) : undefined;
120
+ }
121
+ function sleep(ms, signal) {
122
+ return new Promise((resolve, reject) => {
123
+ if (signal?.aborted)
124
+ return reject(signal.reason);
125
+ const timer = setTimeout(() => {
126
+ signal?.removeEventListener('abort', onAbort);
127
+ resolve();
128
+ }, ms);
129
+ const onAbort = () => {
130
+ clearTimeout(timer);
131
+ reject(signal.reason);
132
+ };
133
+ signal?.addEventListener('abort', onAbort, { once: true });
134
+ });
135
+ }
136
+ /** @internal Encodes a path segment. */
137
+ export const seg = (value) => encodeURIComponent(String(value));
138
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAoD9G,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;AACrD,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAEjC,0FAA0F;AAC1F,MAAM,OAAO,UAAU;IACZ,OAAO,CAAQ;IACf,OAAO,CAAQ;IACf,UAAU,CAAQ;IAClB,WAAW,CAAQ;IACnB,MAAM,CAAc;IACpB,QAAQ,CAAwB;IAEzC,YAAY,OAAsB,EAAE,cAAsB;QACxD,IAAI,CAAC,OAAO,EAAE,MAAM;YAAE,MAAM,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAA;QACrE,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACtE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAA;QACzD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAA;QAC5D,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;QAC3C,IAAI,OAAO,CAAC,KAAK,UAAU;YAAE,MAAM,IAAI,eAAe,CAAC,wEAAwE,CAAC,CAAA;QAChI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;IACxC,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,OAAO,CAAI,IAAU;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,6BAA6B,WAAW,EAAE;YACxD,GAAG,IAAI,CAAC,QAAQ;YAChB,WAAW,EAAE,IAAI,CAAC,OAAO;SAC1B,CAAA;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,WAAW,CAAA;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU,CAAA;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAA;QAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;YAClC,IAAI,GAAwD,CAAA;YAC5D,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YACxF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,MAAM,CAAC,MAAM,CAAA;gBACxC,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBAC5C,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;oBACrC,SAAQ;gBACV,CAAC;gBACD,MAAM,KAAK,CAAA;YACb,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,GAAG,CAAC,IAAS,CAAA;YAC9G,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAA;YACxF,qFAAqF;YACrF,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBAC5C,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;gBAChE,SAAQ;YACV,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,KAAa;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACnI,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;IACvB,CAAC;IAED,6FAA6F;IAC7F,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,IAAiB,EAAE,SAAiB,EAAE,MAA+B;QAC5F,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QAClG,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAO,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,CAAA;QAC9B,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;YAC1E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;QAC/F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAY,UAAU,CAAC,MAAM,CAAC,MAAM,CAAA;YAChD,IAAI,MAAM,YAAY,sBAAsB;gBAAE,MAAM,MAAM,CAAA;YAC1D,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,MAAM,CAAC,MAAM,CAAA;YACxC,MAAM,IAAI,yBAAyB,CAAC,cAAc,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,YAAa,KAAe,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAChI,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;CACF;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,SAAS,OAAO,CAAC,OAAe;IAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,kEAAkE;AAClE,SAAS,UAAU,CAAC,OAAgB;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACnF,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACxF,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAA+B;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACjD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC7C,OAAO,EAAE,CAAA;QACX,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAA;QACxB,CAAC,CAAA;QACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * A page of results. `next` is the cursor of the next page; `null` when there are no more pages.
3
+ *
4
+ * @typeParam T - Item type.
5
+ */
6
+ export interface Page<T> {
7
+ items: T[];
8
+ next: number | null;
9
+ }
10
+ /** @internal Yields every item, fetching the next page only when the current one is exhausted. */
11
+ export declare function paginate<T>(fetchPage: (cursor: number | undefined) => Promise<Page<T>>): AsyncGenerator<T, void, undefined>;
12
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/core/pagination.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED,kGAAkG;AAClG,wBAAuB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAQlI"}
@@ -0,0 +1,12 @@
1
+ /** @internal Yields every item, fetching the next page only when the current one is exhausted. */
2
+ export async function* paginate(fetchPage) {
3
+ let cursor;
4
+ for (;;) {
5
+ const page = await fetchPage(cursor);
6
+ yield* page.items;
7
+ if (page.next === null || page.next === undefined)
8
+ return;
9
+ cursor = page.next;
10
+ }
11
+ }
12
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/core/pagination.ts"],"names":[],"mappings":"AAUA,kGAAkG;AAClG,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAI,SAA2D;IAC5F,IAAI,MAA0B,CAAA;IAC9B,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAA;QACpC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAM;QACzD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { HttpClient } from './http.js';
2
+ /** @internal What resources share: the transport and the client ID of the API key. */
3
+ export interface Scope {
4
+ http: HttpClient;
5
+ /** Path segment of the client: resolved from the API key once, then cached. */
6
+ clientPath: () => Promise<string>;
7
+ }
8
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/core/scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,sFAAsF;AACtF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/core/scope.ts"],"names":[],"mappings":""}