veryfront 0.1.748 → 0.1.749

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 (83) hide show
  1. package/esm/cli/templates/manifest.js +2 -2
  2. package/esm/deno.js +1 -1
  3. package/esm/src/build/production-build/static-generation.d.ts.map +1 -1
  4. package/esm/src/build/production-build/static-generation.js +2 -0
  5. package/esm/src/cache/backends/disk.d.ts +1 -1
  6. package/esm/src/cache/backends/disk.d.ts.map +1 -1
  7. package/esm/src/cache/backends/disk.js +41 -13
  8. package/esm/src/cache/backends/glob.d.ts +6 -0
  9. package/esm/src/cache/backends/glob.d.ts.map +1 -0
  10. package/esm/src/cache/backends/glob.js +41 -0
  11. package/esm/src/cache/backends/memory.d.ts +1 -1
  12. package/esm/src/cache/backends/memory.d.ts.map +1 -1
  13. package/esm/src/cache/backends/memory.js +14 -12
  14. package/esm/src/cache/backends/redis.d.ts.map +1 -1
  15. package/esm/src/cache/backends/redis.js +33 -7
  16. package/esm/src/cache/dependency-graph.d.ts +1 -0
  17. package/esm/src/cache/dependency-graph.d.ts.map +1 -1
  18. package/esm/src/cache/dependency-graph.js +15 -1
  19. package/esm/src/cache/paths.d.ts.map +1 -1
  20. package/esm/src/cache/paths.js +5 -0
  21. package/esm/src/embedding/index.d.ts +4 -1
  22. package/esm/src/embedding/index.d.ts.map +1 -1
  23. package/esm/src/embedding/index.js +3 -1
  24. package/esm/src/embedding/rag-store.d.ts.map +1 -1
  25. package/esm/src/embedding/rag-store.js +157 -8
  26. package/esm/src/embedding/react/use-uploads.d.ts +1 -0
  27. package/esm/src/embedding/react/use-uploads.d.ts.map +1 -1
  28. package/esm/src/embedding/react/use-uploads.js +4 -1
  29. package/esm/src/embedding/upload-handler.d.ts +29 -8
  30. package/esm/src/embedding/upload-handler.d.ts.map +1 -1
  31. package/esm/src/embedding/upload-handler.js +66 -6
  32. package/esm/src/html/html-shell-generator.js +5 -5
  33. package/esm/src/html/nonce-injection.d.ts.map +1 -1
  34. package/esm/src/html/nonce-injection.js +11 -4
  35. package/esm/src/html/utils.d.ts +5 -0
  36. package/esm/src/html/utils.d.ts.map +1 -1
  37. package/esm/src/html/utils.js +19 -9
  38. package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.d.ts.map +1 -1
  39. package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.js +12 -5
  40. package/esm/src/modules/server/module-batch-handler.d.ts +1 -0
  41. package/esm/src/modules/server/module-batch-handler.d.ts.map +1 -1
  42. package/esm/src/modules/server/module-batch-handler.js +52 -26
  43. package/esm/src/modules/server/module-server.d.ts.map +1 -1
  44. package/esm/src/modules/server/module-server.js +87 -69
  45. package/esm/src/modules/server/module-source-resolution-cache.d.ts +16 -0
  46. package/esm/src/modules/server/module-source-resolution-cache.d.ts.map +1 -0
  47. package/esm/src/modules/server/module-source-resolution-cache.js +43 -0
  48. package/esm/src/oauth/providers/base.d.ts +0 -2
  49. package/esm/src/oauth/providers/base.d.ts.map +1 -1
  50. package/esm/src/oauth/providers/base.js +35 -10
  51. package/esm/src/oauth/token-store/memory.d.ts +7 -0
  52. package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
  53. package/esm/src/oauth/token-store/memory.js +14 -1
  54. package/esm/src/observability/file-log-subscriber.d.ts +1 -0
  55. package/esm/src/observability/file-log-subscriber.d.ts.map +1 -1
  56. package/esm/src/observability/file-log-subscriber.js +2 -1
  57. package/esm/src/observability/tracing/api-shim.d.ts +1 -0
  58. package/esm/src/observability/tracing/api-shim.d.ts.map +1 -1
  59. package/esm/src/observability/tracing/api-shim.js +7 -0
  60. package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
  61. package/esm/src/observability/tracing/otlp-setup.js +17 -7
  62. package/esm/src/proxy/handler.d.ts +5 -2
  63. package/esm/src/proxy/handler.d.ts.map +1 -1
  64. package/esm/src/proxy/handler.js +26 -25
  65. package/esm/src/proxy/main.js +8 -11
  66. package/esm/src/rendering/renderer.d.ts.map +1 -1
  67. package/esm/src/rendering/renderer.js +32 -12
  68. package/esm/src/server/context/cache-invalidation.d.ts.map +1 -1
  69. package/esm/src/server/context/cache-invalidation.js +2 -0
  70. package/esm/src/server/handlers/dev/scripts/error-overlay.d.ts.map +1 -1
  71. package/esm/src/server/handlers/dev/scripts/error-overlay.js +32 -18
  72. package/esm/src/server/handlers/monitoring/client-log.handler.d.ts +1 -0
  73. package/esm/src/server/handlers/monitoring/client-log.handler.d.ts.map +1 -1
  74. package/esm/src/server/handlers/monitoring/client-log.handler.js +39 -5
  75. package/esm/src/server/handlers/request/module/batch-module-handler.d.ts.map +1 -1
  76. package/esm/src/server/handlers/request/module/batch-module-handler.js +2 -1
  77. package/esm/src/utils/logger/redact.d.ts.map +1 -1
  78. package/esm/src/utils/logger/redact.js +13 -1
  79. package/esm/src/utils/redis-client.d.ts +1 -0
  80. package/esm/src/utils/redis-client.d.ts.map +1 -1
  81. package/esm/src/utils/version-constant.d.ts +1 -1
  82. package/esm/src/utils/version-constant.js +1 -1
  83. package/package.json +1 -1
@@ -11,6 +11,28 @@ const CLIENT_LOG_MAX_BODY_BYTES = 64 * 1024;
11
11
  const CLIENT_LOG_MESSAGE_MAX_LENGTH = 5_000;
12
12
  /** Max chars of raw body shown in parse-error diagnostics */
13
13
  const CLIENT_LOG_BODY_PREVIEW_LENGTH = 500;
14
+ function escapeControlCharacter(char) {
15
+ switch (char) {
16
+ case "\n":
17
+ return "\\n";
18
+ case "\r":
19
+ return "\\r";
20
+ case "\t":
21
+ return "\\t";
22
+ default:
23
+ return `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}`;
24
+ }
25
+ }
26
+ export function sanitizeClientLogPreview(value, maxLength = CLIENT_LOG_BODY_PREVIEW_LENGTH) {
27
+ let sanitized = "";
28
+ for (const char of value.slice(0, maxLength)) {
29
+ const code = char.charCodeAt(0);
30
+ sanitized += code <= 0x1f || (code >= 0x7f && code <= 0x9f)
31
+ ? escapeControlCharacter(char)
32
+ : char;
33
+ }
34
+ return sanitized;
35
+ }
14
36
  export class ClientLogHandler extends BaseHandler {
15
37
  metadata = {
16
38
  name: "ClientLogHandler",
@@ -71,9 +93,14 @@ export class ClientLogHandler extends BaseHandler {
71
93
  return ClientLogHandler.LOG_PREFIXES[level] ?? ClientLogHandler.LOG_PREFIXES.info ?? "[CLIENT]";
72
94
  }
73
95
  handleParseError(e, body) {
74
- serverLogger.error("[ClientLogHandler] Failed to parse client log. Error:", getErrorMessage(e));
75
- serverLogger.error(`[ClientLogHandler] Raw body received (first ${CLIENT_LOG_BODY_PREVIEW_LENGTH} chars):`, body.slice(0, CLIENT_LOG_BODY_PREVIEW_LENGTH));
76
- logger.error("Body length:", body.length);
96
+ serverLogger.error("[ClientLogHandler] Failed to parse client log", {
97
+ parse_error_message: getErrorMessage(e),
98
+ });
99
+ serverLogger.error("[ClientLogHandler] Sanitized body preview", {
100
+ body_length: body.length,
101
+ body_preview: sanitizeClientLogPreview(body),
102
+ preview_length: CLIENT_LOG_BODY_PREVIEW_LENGTH,
103
+ });
77
104
  // Try to identify the problematic character for SyntaxError
78
105
  if (!(e instanceof SyntaxError) || !e.message.includes("position")) {
79
106
  return;
@@ -85,7 +112,14 @@ export class ClientLogHandler extends BaseHandler {
85
112
  const pos = parseInt(posStr, 10);
86
113
  const start = Math.max(0, pos - 20);
87
114
  const end = Math.min(body.length, pos + 20);
88
- logger.error("Context around error position:", body.slice(start, end));
89
- serverLogger.error("[ClientLogHandler] Character at position:", body.charCodeAt(pos), "which is:", body.charAt(pos));
115
+ logger.error("Context around error position", {
116
+ body_context: sanitizeClientLogPreview(body.slice(start, end)),
117
+ error_position: pos,
118
+ });
119
+ serverLogger.error("[ClientLogHandler] Character at error position", {
120
+ char_code: body.charCodeAt(pos),
121
+ char_preview: sanitizeClientLogPreview(body.charAt(pos), 1),
122
+ error_position: pos,
123
+ });
90
124
  }
91
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"batch-module-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/batch-module-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAOrE,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,cAAc,EACnB,sBAAsB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAChE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,GAC7C,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
1
+ {"version":3,"file":"batch-module-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/batch-module-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAOrE,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,cAAc,EACnB,sBAAsB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAChE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,GAC7C,OAAO,CAAC,aAAa,CAAC,CAwBxB"}
@@ -13,7 +13,8 @@ export function handleBatchModuleEndpoint(req, ctx, _createResponseBuilder, resp
13
13
  adapter: ctx.adapter,
14
14
  projectSlug: ctx.projectSlug,
15
15
  projectId: ctx.projectId,
16
- branch: ctx.parsedDomain?.branch ?? null,
16
+ branch: ctx.requestContext?.branch ?? ctx.parsedDomain?.branch ?? null,
17
+ releaseId: ctx.releaseId ?? null,
17
18
  dev: !!ctx.isLocalProject,
18
19
  allowedImportDirs: ctx.config?.security?.allowedImportDirs,
19
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,eAAe,CAAC;AA2CrC;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AA6ED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEhD;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B5D;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EAC5D,KAAK,EAAE,CAAC,GAAG,CAAC,CAMb"}
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,eAAe,CAAC;AA8CrC;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAcnD;AA6ED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEhD;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B5D;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EAC5D,KAAK,EAAE,CAAC,GAAG,CAAC,CAMb"}
@@ -56,6 +56,8 @@ const SENSITIVE_KEY_PATTERNS = [
56
56
  "xsrf",
57
57
  "csrf",
58
58
  ];
59
+ const SENSITIVE_KEY_CACHE_MAX_SIZE = 512;
60
+ const sensitiveKeyCache = new Map();
59
61
  /** Stop traversing past this depth to keep the pass cheap and stack-safe. */
60
62
  const MAX_DEPTH = 16;
61
63
  /**
@@ -67,8 +69,18 @@ const MAX_DEPTH = 16;
67
69
  * normalizes to `author`, which contains none of the patterns.
68
70
  */
69
71
  export function isSensitiveKey(key) {
72
+ const cached = sensitiveKeyCache.get(key);
73
+ if (cached !== undefined)
74
+ return cached;
70
75
  const normalized = key.toLowerCase().replace(/[^a-z0-9]/g, "");
71
- return SENSITIVE_KEY_PATTERNS.some((pattern) => normalized.includes(pattern));
76
+ const sensitive = SENSITIVE_KEY_PATTERNS.some((pattern) => normalized.includes(pattern));
77
+ if (sensitiveKeyCache.size >= SENSITIVE_KEY_CACHE_MAX_SIZE) {
78
+ const oldestKey = sensitiveKeyCache.keys().next().value;
79
+ if (oldestKey !== undefined)
80
+ sensitiveKeyCache.delete(oldestKey);
81
+ }
82
+ sensitiveKeyCache.set(key, sensitive);
83
+ return sensitive;
72
84
  }
73
85
  /**
74
86
  * A non-null, non-array object. {@link isRecord} covers class instances too,
@@ -2,6 +2,7 @@ export interface RedisClient {
2
2
  connect(): Promise<void>;
3
3
  disconnect(): Promise<void>;
4
4
  get(key: string): Promise<string | null>;
5
+ mGet(keys: string[]): Promise<Array<string | null>>;
5
6
  set(key: string, value: string, options?: {
6
7
  EX?: number;
7
8
  }): Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../../../src/src/utils/redis-client.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAsBD,wBAAsB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4B3F;AA6DD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
1
+ {"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../../../src/src/utils/redis-client.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACpD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAsBD,wBAAsB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4B3F;AA6DD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.748";
2
+ export declare const VERSION = "0.1.749";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.748";
4
+ export const VERSION = "0.1.749";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.748",
3
+ "version": "0.1.749",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",