log.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use strict";
  2. // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. exports.formatRequestDetails = exports.parseLogLevel = void 0;
  5. exports.loggerFor = loggerFor;
  6. const values_1 = require("./values.js");
  7. const levelNumbers = {
  8. off: 0,
  9. error: 200,
  10. warn: 300,
  11. info: 400,
  12. debug: 500,
  13. };
  14. const parseLogLevel = (maybeLevel, sourceName, client) => {
  15. if (!maybeLevel) {
  16. return undefined;
  17. }
  18. if ((0, values_1.hasOwn)(levelNumbers, maybeLevel)) {
  19. return maybeLevel;
  20. }
  21. loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);
  22. return undefined;
  23. };
  24. exports.parseLogLevel = parseLogLevel;
  25. function noop() { }
  26. function makeLogFn(fnLevel, logger, logLevel) {
  27. if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {
  28. return noop;
  29. }
  30. else {
  31. // Don't wrap logger functions, we want the stacktrace intact!
  32. return logger[fnLevel].bind(logger);
  33. }
  34. }
  35. const noopLogger = {
  36. error: noop,
  37. warn: noop,
  38. info: noop,
  39. debug: noop,
  40. };
  41. let cachedLoggers = /* @__PURE__ */ new WeakMap();
  42. function loggerFor(client) {
  43. const logger = client.logger;
  44. const logLevel = client.logLevel ?? 'off';
  45. if (!logger) {
  46. return noopLogger;
  47. }
  48. const cachedLogger = cachedLoggers.get(logger);
  49. if (cachedLogger && cachedLogger[0] === logLevel) {
  50. return cachedLogger[1];
  51. }
  52. const levelLogger = {
  53. error: makeLogFn('error', logger, logLevel),
  54. warn: makeLogFn('warn', logger, logLevel),
  55. info: makeLogFn('info', logger, logLevel),
  56. debug: makeLogFn('debug', logger, logLevel),
  57. };
  58. cachedLoggers.set(logger, [logLevel, levelLogger]);
  59. return levelLogger;
  60. }
  61. const formatRequestDetails = (details) => {
  62. if (details.options) {
  63. details.options = { ...details.options };
  64. delete details.options['headers']; // redundant + leaks internals
  65. }
  66. if (details.headers) {
  67. details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [
  68. name,
  69. (name.toLowerCase() === 'authorization' ||
  70. name.toLowerCase() === 'cookie' ||
  71. name.toLowerCase() === 'set-cookie') ?
  72. '***'
  73. : value,
  74. ]));
  75. }
  76. if ('retryOfRequestLogID' in details) {
  77. if (details.retryOfRequestLogID) {
  78. details.retryOf = details.retryOfRequestLogID;
  79. }
  80. delete details.retryOfRequestLogID;
  81. }
  82. return details;
  83. };
  84. exports.formatRequestDetails = formatRequestDetails;
  85. //# sourceMappingURL=log.js.map