phenoml 6.1.0 → 6.3.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 (71) hide show
  1. package/dist/cjs/BaseClient.d.ts +2 -0
  2. package/dist/cjs/Client.js +3 -3
  3. package/dist/cjs/api/resources/agent/client/Client.js +8 -0
  4. package/dist/cjs/api/resources/agent/resources/prompts/client/Client.js +7 -0
  5. package/dist/cjs/api/resources/cohort/client/Client.js +1 -0
  6. package/dist/cjs/api/resources/construe/client/Client.js +10 -0
  7. package/dist/cjs/api/resources/fhir/client/Client.js +6 -0
  8. package/dist/cjs/api/resources/fhirProvider/client/Client.js +7 -0
  9. package/dist/cjs/api/resources/lang2Fhir/client/Client.js +5 -0
  10. package/dist/cjs/api/resources/summary/client/Client.js +6 -0
  11. package/dist/cjs/api/resources/tools/client/Client.js +4 -0
  12. package/dist/cjs/api/resources/tools/resources/mcpServer/client/Client.js +4 -0
  13. package/dist/cjs/api/resources/tools/resources/mcpServer/resources/tools/client/Client.js +4 -0
  14. package/dist/cjs/api/resources/workflows/client/Client.js +6 -0
  15. package/dist/cjs/core/exports.d.ts +1 -0
  16. package/dist/cjs/core/exports.js +17 -0
  17. package/dist/cjs/core/fetcher/Fetcher.d.ts +2 -0
  18. package/dist/cjs/core/fetcher/Fetcher.js +192 -1
  19. package/dist/cjs/core/fetcher/makeRequest.js +0 -2
  20. package/dist/cjs/core/fetcher/requestWithRetries.js +0 -9
  21. package/dist/cjs/core/fetcher/signals.d.ts +0 -6
  22. package/dist/cjs/core/fetcher/signals.js +0 -12
  23. package/dist/cjs/core/index.d.ts +1 -0
  24. package/dist/cjs/core/index.js +2 -1
  25. package/dist/cjs/core/logging/exports.d.ts +18 -0
  26. package/dist/cjs/core/logging/exports.js +45 -0
  27. package/dist/cjs/core/logging/index.d.ts +1 -0
  28. package/dist/cjs/core/logging/index.js +17 -0
  29. package/dist/cjs/core/logging/logger.d.ts +126 -0
  30. package/dist/cjs/core/logging/logger.js +144 -0
  31. package/dist/cjs/core/url/join.js +0 -1
  32. package/dist/cjs/exports.d.ts +1 -0
  33. package/dist/cjs/exports.js +17 -0
  34. package/dist/cjs/version.d.ts +1 -1
  35. package/dist/cjs/version.js +1 -1
  36. package/dist/esm/BaseClient.d.mts +2 -0
  37. package/dist/esm/Client.mjs +3 -3
  38. package/dist/esm/api/resources/agent/client/Client.mjs +8 -0
  39. package/dist/esm/api/resources/agent/resources/prompts/client/Client.mjs +7 -0
  40. package/dist/esm/api/resources/cohort/client/Client.mjs +1 -0
  41. package/dist/esm/api/resources/construe/client/Client.mjs +10 -0
  42. package/dist/esm/api/resources/fhir/client/Client.mjs +6 -0
  43. package/dist/esm/api/resources/fhirProvider/client/Client.mjs +7 -0
  44. package/dist/esm/api/resources/lang2Fhir/client/Client.mjs +5 -0
  45. package/dist/esm/api/resources/summary/client/Client.mjs +6 -0
  46. package/dist/esm/api/resources/tools/client/Client.mjs +4 -0
  47. package/dist/esm/api/resources/tools/resources/mcpServer/client/Client.mjs +4 -0
  48. package/dist/esm/api/resources/tools/resources/mcpServer/resources/tools/client/Client.mjs +4 -0
  49. package/dist/esm/api/resources/workflows/client/Client.mjs +6 -0
  50. package/dist/esm/core/exports.d.mts +1 -0
  51. package/dist/esm/core/exports.mjs +1 -0
  52. package/dist/esm/core/fetcher/Fetcher.d.mts +2 -0
  53. package/dist/esm/core/fetcher/Fetcher.mjs +192 -1
  54. package/dist/esm/core/fetcher/makeRequest.mjs +0 -2
  55. package/dist/esm/core/fetcher/requestWithRetries.mjs +0 -9
  56. package/dist/esm/core/fetcher/signals.d.mts +0 -6
  57. package/dist/esm/core/fetcher/signals.mjs +0 -12
  58. package/dist/esm/core/index.d.mts +1 -0
  59. package/dist/esm/core/index.mjs +1 -0
  60. package/dist/esm/core/logging/exports.d.mts +18 -0
  61. package/dist/esm/core/logging/exports.mjs +9 -0
  62. package/dist/esm/core/logging/index.d.mts +1 -0
  63. package/dist/esm/core/logging/index.mjs +1 -0
  64. package/dist/esm/core/logging/logger.d.mts +126 -0
  65. package/dist/esm/core/logging/logger.mjs +138 -0
  66. package/dist/esm/core/url/join.mjs +0 -1
  67. package/dist/esm/exports.d.mts +1 -0
  68. package/dist/esm/exports.mjs +1 -0
  69. package/dist/esm/version.d.mts +1 -1
  70. package/dist/esm/version.mjs +1 -1
  71. package/package.json +2 -1
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.fetcher = void 0;
13
13
  exports.fetcherImpl = fetcherImpl;
14
14
  const json_js_1 = require("../json.js");
15
+ const logger_js_1 = require("../logging/logger.js");
15
16
  const createRequestUrl_js_1 = require("./createRequestUrl.js");
16
17
  const EndpointSupplier_js_1 = require("./EndpointSupplier.js");
17
18
  const getErrorResponseBody_js_1 = require("./getErrorResponseBody.js");
@@ -21,6 +22,135 @@ const getResponseBody_js_1 = require("./getResponseBody.js");
21
22
  const makeRequest_js_1 = require("./makeRequest.js");
22
23
  const RawResponse_js_1 = require("./RawResponse.js");
23
24
  const requestWithRetries_js_1 = require("./requestWithRetries.js");
25
+ const SENSITIVE_HEADERS = new Set([
26
+ "authorization",
27
+ "www-authenticate",
28
+ "x-api-key",
29
+ "api-key",
30
+ "apikey",
31
+ "x-api-token",
32
+ "x-auth-token",
33
+ "auth-token",
34
+ "cookie",
35
+ "set-cookie",
36
+ "proxy-authorization",
37
+ "proxy-authenticate",
38
+ "x-csrf-token",
39
+ "x-xsrf-token",
40
+ "x-session-token",
41
+ "x-access-token",
42
+ ]);
43
+ function redactHeaders(headers) {
44
+ const filtered = {};
45
+ for (const [key, value] of Object.entries(headers)) {
46
+ if (SENSITIVE_HEADERS.has(key.toLowerCase())) {
47
+ filtered[key] = "[REDACTED]";
48
+ }
49
+ else {
50
+ filtered[key] = value;
51
+ }
52
+ }
53
+ return filtered;
54
+ }
55
+ const SENSITIVE_QUERY_PARAMS = new Set([
56
+ "api_key",
57
+ "api-key",
58
+ "apikey",
59
+ "token",
60
+ "access_token",
61
+ "access-token",
62
+ "auth_token",
63
+ "auth-token",
64
+ "password",
65
+ "passwd",
66
+ "secret",
67
+ "api_secret",
68
+ "api-secret",
69
+ "apisecret",
70
+ "key",
71
+ "session",
72
+ "session_id",
73
+ "session-id",
74
+ ]);
75
+ function redactQueryParameters(queryParameters) {
76
+ if (queryParameters == null) {
77
+ return queryParameters;
78
+ }
79
+ const redacted = {};
80
+ for (const [key, value] of Object.entries(queryParameters)) {
81
+ if (SENSITIVE_QUERY_PARAMS.has(key.toLowerCase())) {
82
+ redacted[key] = "[REDACTED]";
83
+ }
84
+ else {
85
+ redacted[key] = value;
86
+ }
87
+ }
88
+ return redacted;
89
+ }
90
+ function redactUrl(url) {
91
+ const protocolIndex = url.indexOf("://");
92
+ if (protocolIndex === -1)
93
+ return url;
94
+ const afterProtocol = protocolIndex + 3;
95
+ // Find the first delimiter that marks the end of the authority section
96
+ const pathStart = url.indexOf("/", afterProtocol);
97
+ let queryStart = url.indexOf("?", afterProtocol);
98
+ let fragmentStart = url.indexOf("#", afterProtocol);
99
+ const firstDelimiter = Math.min(pathStart === -1 ? url.length : pathStart, queryStart === -1 ? url.length : queryStart, fragmentStart === -1 ? url.length : fragmentStart);
100
+ // Find the LAST @ before the delimiter (handles multiple @ in credentials)
101
+ let atIndex = -1;
102
+ for (let i = afterProtocol; i < firstDelimiter; i++) {
103
+ if (url[i] === "@") {
104
+ atIndex = i;
105
+ }
106
+ }
107
+ if (atIndex !== -1) {
108
+ url = `${url.slice(0, afterProtocol)}[REDACTED]@${url.slice(atIndex + 1)}`;
109
+ }
110
+ // Recalculate queryStart since url might have changed
111
+ queryStart = url.indexOf("?");
112
+ if (queryStart === -1)
113
+ return url;
114
+ fragmentStart = url.indexOf("#", queryStart);
115
+ const queryEnd = fragmentStart !== -1 ? fragmentStart : url.length;
116
+ const queryString = url.slice(queryStart + 1, queryEnd);
117
+ if (queryString.length === 0)
118
+ return url;
119
+ // FAST PATH: Quick check if any sensitive keywords present
120
+ // Using indexOf is faster than regex for simple substring matching
121
+ const lower = queryString.toLowerCase();
122
+ const hasSensitive = lower.includes("token") ||
123
+ lower.includes("key") ||
124
+ lower.includes("password") ||
125
+ lower.includes("passwd") ||
126
+ lower.includes("secret") ||
127
+ lower.includes("session") ||
128
+ lower.includes("auth");
129
+ if (!hasSensitive) {
130
+ return url;
131
+ }
132
+ // SLOW PATH: Parse and redact
133
+ const redactedParams = [];
134
+ const params = queryString.split("&");
135
+ for (const param of params) {
136
+ const equalIndex = param.indexOf("=");
137
+ if (equalIndex === -1) {
138
+ redactedParams.push(param);
139
+ continue;
140
+ }
141
+ const key = param.slice(0, equalIndex);
142
+ let shouldRedact = SENSITIVE_QUERY_PARAMS.has(key.toLowerCase());
143
+ if (!shouldRedact && key.includes("%")) {
144
+ try {
145
+ const decodedKey = decodeURIComponent(key);
146
+ shouldRedact = SENSITIVE_QUERY_PARAMS.has(decodedKey.toLowerCase());
147
+ }
148
+ catch (_a) { }
149
+ }
150
+ redactedParams.push(shouldRedact ? `${key}=[REDACTED]` : param);
151
+ }
152
+ return url.slice(0, queryStart + 1) + redactedParams.join("&") + url.slice(queryEnd);
153
+ }
24
154
  function getHeaders(args) {
25
155
  return __awaiter(this, void 0, void 0, function* () {
26
156
  var _a;
@@ -54,11 +184,32 @@ function fetcherImpl(args) {
54
184
  type: (_a = args.requestType) !== null && _a !== void 0 ? _a : "other",
55
185
  });
56
186
  const fetchFn = (_b = args.fetchFn) !== null && _b !== void 0 ? _b : (yield (0, getFetchFn_js_1.getFetchFn)());
187
+ const headers = yield getHeaders(args);
188
+ const logger = (0, logger_js_1.createLogger)(args.logging);
189
+ if (logger.isDebug()) {
190
+ const metadata = {
191
+ method: args.method,
192
+ url: redactUrl(url),
193
+ headers: redactHeaders(headers),
194
+ queryParameters: redactQueryParameters(args.queryParameters),
195
+ hasBody: requestBody != null,
196
+ };
197
+ logger.debug("Making HTTP request", metadata);
198
+ }
57
199
  try {
58
200
  const response = yield (0, requestWithRetries_js_1.requestWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
59
- return (0, makeRequest_js_1.makeRequest)(fetchFn, url, args.method, yield getHeaders(args), requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex);
201
+ return (0, makeRequest_js_1.makeRequest)(fetchFn, url, args.method, headers, requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex);
60
202
  }), args.maxRetries);
61
203
  if (response.status >= 200 && response.status < 400) {
204
+ if (logger.isDebug()) {
205
+ const metadata = {
206
+ method: args.method,
207
+ url: redactUrl(url),
208
+ statusCode: response.status,
209
+ responseHeaders: redactHeaders(Object.fromEntries(response.headers.entries())),
210
+ };
211
+ logger.debug("HTTP request succeeded", metadata);
212
+ }
62
213
  return {
63
214
  ok: true,
64
215
  body: (yield (0, getResponseBody_js_1.getResponseBody)(response, args.responseType)),
@@ -67,6 +218,15 @@ function fetcherImpl(args) {
67
218
  };
68
219
  }
69
220
  else {
221
+ if (logger.isError()) {
222
+ const metadata = {
223
+ method: args.method,
224
+ url: redactUrl(url),
225
+ statusCode: response.status,
226
+ responseHeaders: redactHeaders(Object.fromEntries(response.headers.entries())),
227
+ };
228
+ logger.error("HTTP request failed with error status", metadata);
229
+ }
70
230
  return {
71
231
  ok: false,
72
232
  error: {
@@ -80,6 +240,13 @@ function fetcherImpl(args) {
80
240
  }
81
241
  catch (error) {
82
242
  if ((_c = args.abortSignal) === null || _c === void 0 ? void 0 : _c.aborted) {
243
+ if (logger.isError()) {
244
+ const metadata = {
245
+ method: args.method,
246
+ url: redactUrl(url),
247
+ };
248
+ logger.error("HTTP request was aborted", metadata);
249
+ }
83
250
  return {
84
251
  ok: false,
85
252
  error: {
@@ -90,6 +257,14 @@ function fetcherImpl(args) {
90
257
  };
91
258
  }
92
259
  else if (error instanceof Error && error.name === "AbortError") {
260
+ if (logger.isError()) {
261
+ const metadata = {
262
+ method: args.method,
263
+ url: redactUrl(url),
264
+ timeoutMs: args.timeoutMs,
265
+ };
266
+ logger.error("HTTP request timed out", metadata);
267
+ }
93
268
  return {
94
269
  ok: false,
95
270
  error: {
@@ -99,6 +274,14 @@ function fetcherImpl(args) {
99
274
  };
100
275
  }
101
276
  else if (error instanceof Error) {
277
+ if (logger.isError()) {
278
+ const metadata = {
279
+ method: args.method,
280
+ url: redactUrl(url),
281
+ errorMessage: error.message,
282
+ };
283
+ logger.error("HTTP request failed with error", metadata);
284
+ }
102
285
  return {
103
286
  ok: false,
104
287
  error: {
@@ -108,6 +291,14 @@ function fetcherImpl(args) {
108
291
  rawResponse: RawResponse_js_1.unknownRawResponse,
109
292
  };
110
293
  }
294
+ if (logger.isError()) {
295
+ const metadata = {
296
+ method: args.method,
297
+ url: redactUrl(url),
298
+ error: (0, json_js_1.toJson)(error),
299
+ };
300
+ logger.error("HTTP request failed with unknown error", metadata);
301
+ }
111
302
  return {
112
303
  ok: false,
113
304
  error: {
@@ -13,14 +13,12 @@ exports.makeRequest = void 0;
13
13
  const signals_js_1 = require("./signals.js");
14
14
  const makeRequest = (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex) => __awaiter(void 0, void 0, void 0, function* () {
15
15
  const signals = [];
16
- // Add timeout signal
17
16
  let timeoutAbortId;
18
17
  if (timeoutMs != null) {
19
18
  const { signal, abortId } = (0, signals_js_1.getTimeoutSignal)(timeoutMs);
20
19
  timeoutAbortId = abortId;
21
20
  signals.push(signal);
22
21
  }
23
- // Add arbitrary signal
24
22
  if (abortSignal != null) {
25
23
  signals.push(abortSignal);
26
24
  }
@@ -15,25 +15,20 @@ const MAX_RETRY_DELAY = 60000; // in milliseconds
15
15
  const DEFAULT_MAX_RETRIES = 2;
16
16
  const JITTER_FACTOR = 0.2; // 20% random jitter
17
17
  function addPositiveJitter(delay) {
18
- // Generate a random value between 0 and +JITTER_FACTOR
19
18
  const jitterMultiplier = 1 + Math.random() * JITTER_FACTOR;
20
19
  return delay * jitterMultiplier;
21
20
  }
22
21
  function addSymmetricJitter(delay) {
23
- // Generate a random value in a JITTER_FACTOR-sized percentage range around delay
24
22
  const jitterMultiplier = 1 + (Math.random() - 0.5) * JITTER_FACTOR;
25
23
  return delay * jitterMultiplier;
26
24
  }
27
25
  function getRetryDelayFromHeaders(response, retryAttempt) {
28
- // Check for Retry-After header first (RFC 7231), with no jitter
29
26
  const retryAfter = response.headers.get("Retry-After");
30
27
  if (retryAfter) {
31
- // Parse as number of seconds...
32
28
  const retryAfterSeconds = parseInt(retryAfter, 10);
33
29
  if (!Number.isNaN(retryAfterSeconds) && retryAfterSeconds > 0) {
34
30
  return Math.min(retryAfterSeconds * 1000, MAX_RETRY_DELAY);
35
31
  }
36
- // ...or as an HTTP date; both are valid
37
32
  const retryAfterDate = new Date(retryAfter);
38
33
  if (!Number.isNaN(retryAfterDate.getTime())) {
39
34
  const delay = retryAfterDate.getTime() - Date.now();
@@ -42,19 +37,16 @@ function getRetryDelayFromHeaders(response, retryAttempt) {
42
37
  }
43
38
  }
44
39
  }
45
- // Then check for industry-standard X-RateLimit-Reset header, with positive jitter
46
40
  const rateLimitReset = response.headers.get("X-RateLimit-Reset");
47
41
  if (rateLimitReset) {
48
42
  const resetTime = parseInt(rateLimitReset, 10);
49
43
  if (!Number.isNaN(resetTime)) {
50
- // Assume Unix timestamp in epoch seconds
51
44
  const delay = resetTime * 1000 - Date.now();
52
45
  if (delay > 0) {
53
46
  return addPositiveJitter(Math.min(delay, MAX_RETRY_DELAY));
54
47
  }
55
48
  }
56
49
  }
57
- // Fall back to exponential backoff, with symmetric jitter
58
50
  return addSymmetricJitter(Math.min(INITIAL_RETRY_DELAY * Math.pow(2, retryAttempt), MAX_RETRY_DELAY));
59
51
  }
60
52
  function requestWithRetries(requestFn_1) {
@@ -62,7 +54,6 @@ function requestWithRetries(requestFn_1) {
62
54
  let response = yield requestFn();
63
55
  for (let i = 0; i < maxRetries; ++i) {
64
56
  if ([408, 429].includes(response.status) || response.status >= 500) {
65
- // Get delay with appropriate jitter applied
66
57
  const delay = getRetryDelayFromHeaders(response, i);
67
58
  yield new Promise((resolve) => setTimeout(resolve, delay));
68
59
  response = yield requestFn();
@@ -2,10 +2,4 @@ export declare function getTimeoutSignal(timeoutMs: number): {
2
2
  signal: AbortSignal;
3
3
  abortId: NodeJS.Timeout;
4
4
  };
5
- /**
6
- * Returns an abort signal that is getting aborted when
7
- * at least one of the specified abort signals is aborted.
8
- *
9
- * Requires at least node.js 18.
10
- */
11
5
  export declare function anySignal(...args: AbortSignal[] | [AbortSignal[]]): AbortSignal;
@@ -8,26 +8,14 @@ function getTimeoutSignal(timeoutMs) {
8
8
  const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs);
9
9
  return { signal: controller.signal, abortId };
10
10
  }
11
- /**
12
- * Returns an abort signal that is getting aborted when
13
- * at least one of the specified abort signals is aborted.
14
- *
15
- * Requires at least node.js 18.
16
- */
17
11
  function anySignal(...args) {
18
- // Allowing signals to be passed either as array
19
- // of signals or as multiple arguments.
20
12
  const signals = (args.length === 1 && Array.isArray(args[0]) ? args[0] : args);
21
13
  const controller = new AbortController();
22
14
  for (const signal of signals) {
23
15
  if (signal.aborted) {
24
- // Exiting early if one of the signals
25
- // is already aborted.
26
16
  controller.abort(signal === null || signal === void 0 ? void 0 : signal.reason);
27
17
  break;
28
18
  }
29
- // Listening for signals and removing the listeners
30
- // when at least one symbol is aborted.
31
19
  signal.addEventListener("abort", () => controller.abort(signal === null || signal === void 0 ? void 0 : signal.reason), {
32
20
  signal: controller.signal,
33
21
  });
@@ -1,5 +1,6 @@
1
1
  export * from "./auth/index.js";
2
2
  export * from "./base64.js";
3
3
  export * from "./fetcher/index.js";
4
+ export * as logging from "./logging/index.js";
4
5
  export * from "./runtime/index.js";
5
6
  export * as url from "./url/index.js";
@@ -36,9 +36,10 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.url = void 0;
39
+ exports.url = exports.logging = void 0;
40
40
  __exportStar(require("./auth/index.js"), exports);
41
41
  __exportStar(require("./base64.js"), exports);
42
42
  __exportStar(require("./fetcher/index.js"), exports);
43
+ exports.logging = __importStar(require("./logging/index.js"));
43
44
  __exportStar(require("./runtime/index.js"), exports);
44
45
  exports.url = __importStar(require("./url/index.js"));
@@ -0,0 +1,18 @@
1
+ import * as logger from "./logger.js";
2
+ export declare namespace logging {
3
+ /**
4
+ * Configuration for logger instances.
5
+ */
6
+ type LogConfig = logger.LogConfig;
7
+ type LogLevel = logger.LogLevel;
8
+ const LogLevel: typeof logger.LogLevel;
9
+ type ILogger = logger.ILogger;
10
+ /**
11
+ * Console logger implementation that outputs to the console.
12
+ */
13
+ type ConsoleLogger = logger.ConsoleLogger;
14
+ /**
15
+ * Console logger implementation that outputs to the console.
16
+ */
17
+ const ConsoleLogger: typeof logger.ConsoleLogger;
18
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.logging = void 0;
37
+ const logger = __importStar(require("./logger.js"));
38
+ var logging;
39
+ (function (logging) {
40
+ logging.LogLevel = logger.LogLevel;
41
+ /**
42
+ * Console logger implementation that outputs to the console.
43
+ */
44
+ logging.ConsoleLogger = logger.ConsoleLogger;
45
+ })(logging || (exports.logging = logging = {}));
@@ -0,0 +1 @@
1
+ export * from "./logger.js";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./logger.js"), exports);
@@ -0,0 +1,126 @@
1
+ export declare const LogLevel: {
2
+ readonly Debug: "debug";
3
+ readonly Info: "info";
4
+ readonly Warn: "warn";
5
+ readonly Error: "error";
6
+ };
7
+ export type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];
8
+ export interface ILogger {
9
+ /**
10
+ * Logs a debug message.
11
+ * @param message - The message to log
12
+ * @param args - Additional arguments to log
13
+ */
14
+ debug(message: string, ...args: unknown[]): void;
15
+ /**
16
+ * Logs an info message.
17
+ * @param message - The message to log
18
+ * @param args - Additional arguments to log
19
+ */
20
+ info(message: string, ...args: unknown[]): void;
21
+ /**
22
+ * Logs a warning message.
23
+ * @param message - The message to log
24
+ * @param args - Additional arguments to log
25
+ */
26
+ warn(message: string, ...args: unknown[]): void;
27
+ /**
28
+ * Logs an error message.
29
+ * @param message - The message to log
30
+ * @param args - Additional arguments to log
31
+ */
32
+ error(message: string, ...args: unknown[]): void;
33
+ }
34
+ /**
35
+ * Configuration for logger initialization.
36
+ */
37
+ export interface LogConfig {
38
+ /**
39
+ * Minimum log level to output.
40
+ * @default LogLevel.Info
41
+ */
42
+ level?: LogLevel;
43
+ /**
44
+ * Logger implementation to use.
45
+ * @default new ConsoleLogger()
46
+ */
47
+ logger?: ILogger;
48
+ /**
49
+ * Whether logging should be silenced.
50
+ * @default true
51
+ */
52
+ silent?: boolean;
53
+ }
54
+ /**
55
+ * Default console-based logger implementation.
56
+ */
57
+ export declare class ConsoleLogger implements ILogger {
58
+ debug(message: string, ...args: unknown[]): void;
59
+ info(message: string, ...args: unknown[]): void;
60
+ warn(message: string, ...args: unknown[]): void;
61
+ error(message: string, ...args: unknown[]): void;
62
+ }
63
+ /**
64
+ * Logger class that provides level-based logging functionality.
65
+ */
66
+ export declare class Logger {
67
+ private readonly level;
68
+ private readonly logger;
69
+ private readonly silent;
70
+ /**
71
+ * Creates a new logger instance.
72
+ * @param config - Logger configuration
73
+ */
74
+ constructor(config: Required<LogConfig>);
75
+ /**
76
+ * Checks if a log level should be output based on configuration.
77
+ * @param level - The log level to check
78
+ * @returns True if the level should be logged
79
+ */
80
+ shouldLog(level: LogLevel): boolean;
81
+ /**
82
+ * Checks if debug logging is enabled.
83
+ * @returns True if debug logs should be output
84
+ */
85
+ isDebug(): boolean;
86
+ /**
87
+ * Logs a debug message if debug logging is enabled.
88
+ * @param message - The message to log
89
+ * @param args - Additional arguments to log
90
+ */
91
+ debug(message: string, ...args: unknown[]): void;
92
+ /**
93
+ * Checks if info logging is enabled.
94
+ * @returns True if info logs should be output
95
+ */
96
+ isInfo(): boolean;
97
+ /**
98
+ * Logs an info message if info logging is enabled.
99
+ * @param message - The message to log
100
+ * @param args - Additional arguments to log
101
+ */
102
+ info(message: string, ...args: unknown[]): void;
103
+ /**
104
+ * Checks if warning logging is enabled.
105
+ * @returns True if warning logs should be output
106
+ */
107
+ isWarn(): boolean;
108
+ /**
109
+ * Logs a warning message if warning logging is enabled.
110
+ * @param message - The message to log
111
+ * @param args - Additional arguments to log
112
+ */
113
+ warn(message: string, ...args: unknown[]): void;
114
+ /**
115
+ * Checks if error logging is enabled.
116
+ * @returns True if error logs should be output
117
+ */
118
+ isError(): boolean;
119
+ /**
120
+ * Logs an error message if error logging is enabled.
121
+ * @param message - The message to log
122
+ * @param args - Additional arguments to log
123
+ */
124
+ error(message: string, ...args: unknown[]): void;
125
+ }
126
+ export declare function createLogger(config?: LogConfig | Logger): Logger;