@rei-standard/amsg-shared 0.4.0-next.8 → 0.4.0-next.9

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.
package/dist/index.cjs CHANGED
@@ -424,7 +424,10 @@ function looksLikeJson(raw) {
424
424
  function salvageJsonStringFields(raw) {
425
425
  const found = {};
426
426
  for (const match of raw.matchAll(JSON_STRING_FIELD)) {
427
- if (found[match[1]] === void 0) found[match[1]] = unescapeJsonString(match[2]);
427
+ if (found[match[1]] !== void 0) continue;
428
+ const value = unescapeJsonString(match[2]);
429
+ if (match[1] === "type" && value === "error") continue;
430
+ found[match[1]] = value;
428
431
  }
429
432
  return {
430
433
  message: firstNonEmptyString(found.message, found.detail),
@@ -471,15 +474,27 @@ var UUID_SHAPE = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
471
474
  function alternationCount(segment) {
472
475
  return (segment.match(/[a-z]+|[0-9]+/g) || []).length;
473
476
  }
477
+ var MOE_SIZE_SEGMENT = /^\d+x\d+b$/;
478
+ var HEX_SEGMENT = /^[0-9a-f]+$/;
479
+ var HEX_RUN_MAX_CHARS = 15;
474
480
  function looksLikeModelId(token) {
475
481
  if (token.length > MODEL_ID_MAX_CHARS) return false;
476
482
  if (!MODEL_ID_LIKE.test(token)) return false;
477
483
  if (UUID_SHAPE.test(token)) return false;
478
484
  const segments = token.split(/[.-]/);
479
485
  if (CREDENTIAL_PREFIX_SEGMENTS.has(segments[0])) return false;
480
- const randomLooking = segments.filter((segment) => alternationCount(segment) >= 3);
481
- if (randomLooking.length === 0) return true;
482
- return randomLooking.length === 1 && randomLooking[0].length <= 5;
486
+ let hexRunChars = 0;
487
+ for (const segment of segments) {
488
+ if (HEX_SEGMENT.test(segment)) {
489
+ hexRunChars += segment.length;
490
+ if (hexRunChars > HEX_RUN_MAX_CHARS) return false;
491
+ } else {
492
+ hexRunChars = 0;
493
+ }
494
+ }
495
+ return segments.every(
496
+ (segment) => alternationCount(segment) < 3 || MOE_SIZE_SEGMENT.test(segment)
497
+ );
483
498
  }
484
499
  function redactCredentials(text) {
485
500
  let s = text;
package/dist/index.mjs CHANGED
@@ -339,7 +339,10 @@ function looksLikeJson(raw) {
339
339
  function salvageJsonStringFields(raw) {
340
340
  const found = {};
341
341
  for (const match of raw.matchAll(JSON_STRING_FIELD)) {
342
- if (found[match[1]] === void 0) found[match[1]] = unescapeJsonString(match[2]);
342
+ if (found[match[1]] !== void 0) continue;
343
+ const value = unescapeJsonString(match[2]);
344
+ if (match[1] === "type" && value === "error") continue;
345
+ found[match[1]] = value;
343
346
  }
344
347
  return {
345
348
  message: firstNonEmptyString(found.message, found.detail),
@@ -386,15 +389,27 @@ var UUID_SHAPE = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
386
389
  function alternationCount(segment) {
387
390
  return (segment.match(/[a-z]+|[0-9]+/g) || []).length;
388
391
  }
392
+ var MOE_SIZE_SEGMENT = /^\d+x\d+b$/;
393
+ var HEX_SEGMENT = /^[0-9a-f]+$/;
394
+ var HEX_RUN_MAX_CHARS = 15;
389
395
  function looksLikeModelId(token) {
390
396
  if (token.length > MODEL_ID_MAX_CHARS) return false;
391
397
  if (!MODEL_ID_LIKE.test(token)) return false;
392
398
  if (UUID_SHAPE.test(token)) return false;
393
399
  const segments = token.split(/[.-]/);
394
400
  if (CREDENTIAL_PREFIX_SEGMENTS.has(segments[0])) return false;
395
- const randomLooking = segments.filter((segment) => alternationCount(segment) >= 3);
396
- if (randomLooking.length === 0) return true;
397
- return randomLooking.length === 1 && randomLooking[0].length <= 5;
401
+ let hexRunChars = 0;
402
+ for (const segment of segments) {
403
+ if (HEX_SEGMENT.test(segment)) {
404
+ hexRunChars += segment.length;
405
+ if (hexRunChars > HEX_RUN_MAX_CHARS) return false;
406
+ } else {
407
+ hexRunChars = 0;
408
+ }
409
+ }
410
+ return segments.every(
411
+ (segment) => alternationCount(segment) < 3 || MOE_SIZE_SEGMENT.test(segment)
412
+ );
398
413
  }
399
414
  function redactCredentials(text) {
400
415
  let s = text;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rei-standard/amsg-shared",
3
- "version": "0.4.0-next.8",
3
+ "version": "0.4.0-next.9",
4
4
  "description": "ReiStandard Active Messaging shared types and push builders — the lowest layer (no deps on other amsg packages)",
5
5
  "repository": {
6
6
  "type": "git",