@koralabs/kora-labs-common 6.6.2 → 6.6.4

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.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var _a, _b;
2
+ var _a, _b, _c;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.TWELVE_HOURS_IN_SLOTS = exports.EMPTY = exports.HANDLES_PER_PAGE_MAX = exports.ERROR_TEXT = exports.KORA_USER_AGENT = exports.HANDLES_API_KEY = exports.REGEX_SUB_HANDLE = exports.REGEX_HANDLE = exports.REGEX_SPLIT_ON_NUMS = exports.REGEX_SPLIT_ON_CHARS = exports.RESPONSE_NOT_ALLOWED = exports.RESPONSE_INVALID_HANDLE_FORMAT = exports.RESPONSE_UNAVAILABLE_LEGENDARY = exports.RESPONSE_UNAVAILABLE_RESERVED = exports.RESPONSE_UNAVAILABLE_ACTIVE_SESSION = exports.RESPONSE_UNAVAILABLE_PAID = exports.RESPONSE_AVAILABLE = void 0;
5
5
  const constants_1 = require("../constants");
@@ -14,8 +14,8 @@ exports.REGEX_SPLIT_ON_CHARS = /([0-9a-z]+)[@_.-]*/g;
14
14
  exports.REGEX_SPLIT_ON_NUMS = /([a-z]+)[0-9]*/g;
15
15
  exports.REGEX_HANDLE = new RegExp(/^[a-zA-Z0-9_.-]{1,15}$/);
16
16
  exports.REGEX_SUB_HANDLE = new RegExp(/(?:^[a-z0-9_.-]{1,15}$)|(?:^(?!.{29})[a-z0-9_.-]+@[a-z0-9_.-]{1,15}$)/g);
17
- exports.HANDLES_API_KEY = constants_1.IS_PRODUCTION ? (_a = process.env.HANDLES_API_KEY) !== null && _a !== void 0 ? _a : '' : '';
18
- exports.KORA_USER_AGENT = (_b = process.env.KORA_USER_AGENT) !== null && _b !== void 0 ? _b : '';
17
+ exports.HANDLES_API_KEY = constants_1.IS_PRODUCTION ? (_b = (_a = process.env.HANDLES_API_KEY) !== null && _a !== void 0 ? _a : process.env.HANDLE_ME_API_KEY) !== null && _b !== void 0 ? _b : '' : '';
18
+ exports.KORA_USER_AGENT = (_c = process.env.KORA_USER_AGENT) !== null && _c !== void 0 ? _c : '';
19
19
  var ERROR_TEXT;
20
20
  (function (ERROR_TEXT) {
21
21
  ERROR_TEXT["HANDLE_LIMIT_EXCEEDED"] = "'records_per_page' must be a number";
package/logger/index.d.ts CHANGED
@@ -37,4 +37,5 @@ export declare class Logger {
37
37
  } | string): void;
38
38
  private static log_entry;
39
39
  private static colorize;
40
+ private static escapeJsonStringContent;
40
41
  }
package/logger/index.js CHANGED
@@ -102,11 +102,11 @@ class Logger {
102
102
  }
103
103
  static log_entry(category, message, event, milliseconds, count, dimensions, context) {
104
104
  const now = new Date().toISOString();
105
- message = message.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); // escape double quotes and already escaped escapes
105
+ message = Logger.escapeJsonStringContent(message);
106
106
  const logCategory = category !== null && category !== void 0 ? category : LogCategory.INFO;
107
107
  const logCategoryColor = constants_1.IS_LOCAL ? LOCAL_CATEGORY_COLORS[logCategory] : undefined;
108
108
  const displayCategory = logCategoryColor ? this.colorize(logCategory, logCategoryColor) : logCategory;
109
- const log_event = event ? `, "event": "${event}"` : '';
109
+ const log_event = event ? `, "event": "${Logger.escapeJsonStringContent(event)}"` : '';
110
110
  const log_milliseconds = milliseconds != undefined && milliseconds != null ? `, "milliseconds": ${milliseconds}` : '';
111
111
  const log_count = count != undefined && count != null ? `, "count": ${count}` : '';
112
112
  const log_dimensions = dimensions && Object.keys(dimensions).length ? `, "dimensions": ${JSON.stringify(dimensions)}` : '';
@@ -132,6 +132,54 @@ class Logger {
132
132
  static colorize(value, ansiColor) {
133
133
  return `${ansiColor}${value}${ANSI_RESET}`;
134
134
  }
135
+ // Escape characters that JSON forbids inside a string value: backslash,
136
+ // double quote, and control chars 0x00-0x1F. ESC (0x1B) is left alone so
137
+ // ANSI color sequences from `colorize`/`Logger.local` keep rendering on
138
+ // developer terminals; in production no ANSI is ever introduced, so the
139
+ // emitted line is valid JSON. Newlines/tabs in error stacks would otherwise
140
+ // produce invalid JSON that downstream consumers (CloudWatch subscribers,
141
+ // app-alerts ingestion) can't peel — the previous regex only handled \\ and
142
+ // \", letting stack traces through unescaped.
143
+ static escapeJsonStringContent(s) {
144
+ let out = '';
145
+ for (let i = 0; i < s.length; i++) {
146
+ const ch = s.charCodeAt(i);
147
+ if (ch === 0x5c) {
148
+ out += '\\\\';
149
+ continue;
150
+ }
151
+ if (ch === 0x22) {
152
+ out += '\\"';
153
+ continue;
154
+ }
155
+ if (ch === 0x08) {
156
+ out += '\\b';
157
+ continue;
158
+ }
159
+ if (ch === 0x09) {
160
+ out += '\\t';
161
+ continue;
162
+ }
163
+ if (ch === 0x0a) {
164
+ out += '\\n';
165
+ continue;
166
+ }
167
+ if (ch === 0x0c) {
168
+ out += '\\f';
169
+ continue;
170
+ }
171
+ if (ch === 0x0d) {
172
+ out += '\\r';
173
+ continue;
174
+ }
175
+ if (ch < 0x20 && ch !== 0x1b) {
176
+ out += '\\u' + ch.toString(16).padStart(4, '0');
177
+ continue;
178
+ }
179
+ out += s[i];
180
+ }
181
+ return out;
182
+ }
135
183
  }
136
184
  exports.Logger = Logger;
137
185
  Logger.isInitialized = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koralabs/kora-labs-common",
3
- "version": "6.6.2",
3
+ "version": "6.6.4",
4
4
  "description": "Kora Labs Common Utilities",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",