@portel/photon 1.22.1 → 1.23.1

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 (214) hide show
  1. package/README.md +19 -8
  2. package/dist/a2ui/mapper.d.ts +40 -0
  3. package/dist/a2ui/mapper.d.ts.map +1 -0
  4. package/dist/a2ui/mapper.js +286 -0
  5. package/dist/a2ui/mapper.js.map +1 -0
  6. package/dist/a2ui/types.d.ts +129 -0
  7. package/dist/a2ui/types.d.ts.map +1 -0
  8. package/dist/a2ui/types.js +20 -0
  9. package/dist/a2ui/types.js.map +1 -0
  10. package/dist/ag-ui/adapter.d.ts +9 -1
  11. package/dist/ag-ui/adapter.d.ts.map +1 -1
  12. package/dist/ag-ui/adapter.js +33 -16
  13. package/dist/ag-ui/adapter.js.map +1 -1
  14. package/dist/auto-ui/beam/routes/api-daemon.d.ts +18 -0
  15. package/dist/auto-ui/beam/routes/api-daemon.d.ts.map +1 -0
  16. package/dist/auto-ui/beam/routes/api-daemon.js +118 -0
  17. package/dist/auto-ui/beam/routes/api-daemon.js.map +1 -0
  18. package/dist/auto-ui/beam.d.ts.map +1 -1
  19. package/dist/auto-ui/beam.js +34 -34
  20. package/dist/auto-ui/beam.js.map +1 -1
  21. package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
  22. package/dist/auto-ui/bridge/renderers.js +371 -0
  23. package/dist/auto-ui/bridge/renderers.js.map +1 -1
  24. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  25. package/dist/auto-ui/streamable-http-transport.js +38 -1
  26. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  27. package/dist/auto-ui/types.d.ts +19 -0
  28. package/dist/auto-ui/types.d.ts.map +1 -1
  29. package/dist/auto-ui/types.js.map +1 -1
  30. package/dist/beam.bundle.js +757 -107
  31. package/dist/beam.bundle.js.map +4 -4
  32. package/dist/cli/commands/beam.d.ts.map +1 -1
  33. package/dist/cli/commands/beam.js +2 -0
  34. package/dist/cli/commands/beam.js.map +1 -1
  35. package/dist/cli/commands/build.d.ts.map +1 -1
  36. package/dist/cli/commands/build.js +2 -0
  37. package/dist/cli/commands/build.js.map +1 -1
  38. package/dist/cli/commands/doctor.d.ts.map +1 -1
  39. package/dist/cli/commands/doctor.js +92 -3
  40. package/dist/cli/commands/doctor.js.map +1 -1
  41. package/dist/cli/commands/host.d.ts.map +1 -1
  42. package/dist/cli/commands/host.js +9 -1
  43. package/dist/cli/commands/host.js.map +1 -1
  44. package/dist/cli/commands/info.d.ts.map +1 -1
  45. package/dist/cli/commands/info.js +7 -3
  46. package/dist/cli/commands/info.js.map +1 -1
  47. package/dist/cli/commands/init.d.ts.map +1 -1
  48. package/dist/cli/commands/init.js +4 -0
  49. package/dist/cli/commands/init.js.map +1 -1
  50. package/dist/cli/commands/maker.d.ts +8 -0
  51. package/dist/cli/commands/maker.d.ts.map +1 -1
  52. package/dist/cli/commands/maker.js +113 -46
  53. package/dist/cli/commands/maker.js.map +1 -1
  54. package/dist/cli/commands/marketplace.d.ts.map +1 -1
  55. package/dist/cli/commands/marketplace.js +7 -1
  56. package/dist/cli/commands/marketplace.js.map +1 -1
  57. package/dist/cli/commands/mcp.d.ts +10 -0
  58. package/dist/cli/commands/mcp.d.ts.map +1 -1
  59. package/dist/cli/commands/mcp.js +215 -4
  60. package/dist/cli/commands/mcp.js.map +1 -1
  61. package/dist/cli/commands/package.d.ts.map +1 -1
  62. package/dist/cli/commands/package.js +33 -15
  63. package/dist/cli/commands/package.js.map +1 -1
  64. package/dist/cli/commands/ps.d.ts +16 -0
  65. package/dist/cli/commands/ps.d.ts.map +1 -0
  66. package/dist/cli/commands/ps.js +267 -0
  67. package/dist/cli/commands/ps.js.map +1 -0
  68. package/dist/cli/commands/run.d.ts.map +1 -1
  69. package/dist/cli/commands/run.js +7 -0
  70. package/dist/cli/commands/run.js.map +1 -1
  71. package/dist/cli/commands/update.d.ts.map +1 -1
  72. package/dist/cli/commands/update.js +14 -4
  73. package/dist/cli/commands/update.js.map +1 -1
  74. package/dist/cli/index.d.ts.map +1 -1
  75. package/dist/cli/index.js +9 -4
  76. package/dist/cli/index.js.map +1 -1
  77. package/dist/context-store.d.ts +4 -4
  78. package/dist/context-store.d.ts.map +1 -1
  79. package/dist/context-store.js +20 -17
  80. package/dist/context-store.js.map +1 -1
  81. package/dist/context.d.ts +5 -4
  82. package/dist/context.d.ts.map +1 -1
  83. package/dist/context.js +68 -14
  84. package/dist/context.js.map +1 -1
  85. package/dist/daemon/client.d.ts +60 -0
  86. package/dist/daemon/client.d.ts.map +1 -1
  87. package/dist/daemon/client.js +76 -0
  88. package/dist/daemon/client.js.map +1 -1
  89. package/dist/daemon/execution-history-sqlite.d.ts +50 -0
  90. package/dist/daemon/execution-history-sqlite.d.ts.map +1 -0
  91. package/dist/daemon/execution-history-sqlite.js +165 -0
  92. package/dist/daemon/execution-history-sqlite.js.map +1 -0
  93. package/dist/daemon/execution-history.d.ts +78 -0
  94. package/dist/daemon/execution-history.d.ts.map +1 -0
  95. package/dist/daemon/execution-history.js +246 -0
  96. package/dist/daemon/execution-history.js.map +1 -0
  97. package/dist/daemon/hot-reload-state.d.ts +27 -0
  98. package/dist/daemon/hot-reload-state.d.ts.map +1 -0
  99. package/dist/daemon/hot-reload-state.js +48 -0
  100. package/dist/daemon/hot-reload-state.js.map +1 -0
  101. package/dist/daemon/protocol.d.ts +5 -1
  102. package/dist/daemon/protocol.d.ts.map +1 -1
  103. package/dist/daemon/protocol.js +13 -0
  104. package/dist/daemon/protocol.js.map +1 -1
  105. package/dist/daemon/registry-keys.d.ts +88 -0
  106. package/dist/daemon/registry-keys.d.ts.map +1 -0
  107. package/dist/daemon/registry-keys.js +91 -0
  108. package/dist/daemon/registry-keys.js.map +1 -0
  109. package/dist/daemon/server.js +1521 -186
  110. package/dist/daemon/server.js.map +1 -1
  111. package/dist/daemon/session-resolver.d.ts +28 -0
  112. package/dist/daemon/session-resolver.d.ts.map +1 -0
  113. package/dist/daemon/session-resolver.js +41 -0
  114. package/dist/daemon/session-resolver.js.map +1 -0
  115. package/dist/data-migration.js +20 -9
  116. package/dist/data-migration.js.map +1 -1
  117. package/dist/loader.d.ts +22 -8
  118. package/dist/loader.d.ts.map +1 -1
  119. package/dist/loader.js +214 -94
  120. package/dist/loader.js.map +1 -1
  121. package/dist/marketplace-manager.d.ts.map +1 -1
  122. package/dist/marketplace-manager.js +9 -5
  123. package/dist/marketplace-manager.js.map +1 -1
  124. package/dist/namespace-migration.d.ts.map +1 -1
  125. package/dist/namespace-migration.js +28 -23
  126. package/dist/namespace-migration.js.map +1 -1
  127. package/dist/photon-cli-runner.d.ts.map +1 -1
  128. package/dist/photon-cli-runner.js +57 -8
  129. package/dist/photon-cli-runner.js.map +1 -1
  130. package/dist/serv/auth/auth-store.d.ts +155 -0
  131. package/dist/serv/auth/auth-store.d.ts.map +1 -0
  132. package/dist/serv/auth/auth-store.js +240 -0
  133. package/dist/serv/auth/auth-store.js.map +1 -0
  134. package/dist/serv/auth/endpoints.d.ts +113 -0
  135. package/dist/serv/auth/endpoints.d.ts.map +1 -0
  136. package/dist/serv/auth/endpoints.js +1005 -0
  137. package/dist/serv/auth/endpoints.js.map +1 -0
  138. package/dist/serv/auth/http-adapter.d.ts +60 -0
  139. package/dist/serv/auth/http-adapter.d.ts.map +1 -0
  140. package/dist/serv/auth/http-adapter.js +235 -0
  141. package/dist/serv/auth/http-adapter.js.map +1 -0
  142. package/dist/serv/auth/jwt.d.ts +92 -6
  143. package/dist/serv/auth/jwt.d.ts.map +1 -1
  144. package/dist/serv/auth/jwt.js +226 -24
  145. package/dist/serv/auth/jwt.js.map +1 -1
  146. package/dist/serv/auth/oauth-sqlite-stores.d.ts +48 -0
  147. package/dist/serv/auth/oauth-sqlite-stores.d.ts.map +1 -0
  148. package/dist/serv/auth/oauth-sqlite-stores.js +212 -0
  149. package/dist/serv/auth/oauth-sqlite-stores.js.map +1 -0
  150. package/dist/serv/auth/sqlite-stores.d.ts +85 -0
  151. package/dist/serv/auth/sqlite-stores.d.ts.map +1 -0
  152. package/dist/serv/auth/sqlite-stores.js +446 -0
  153. package/dist/serv/auth/sqlite-stores.js.map +1 -0
  154. package/dist/serv/auth/well-known.d.ts +54 -1
  155. package/dist/serv/auth/well-known.d.ts.map +1 -1
  156. package/dist/serv/auth/well-known.js +166 -17
  157. package/dist/serv/auth/well-known.js.map +1 -1
  158. package/dist/serv/index.d.ts +45 -2
  159. package/dist/serv/index.d.ts.map +1 -1
  160. package/dist/serv/index.js +65 -1
  161. package/dist/serv/index.js.map +1 -1
  162. package/dist/serv/types/index.d.ts +80 -0
  163. package/dist/serv/types/index.d.ts.map +1 -1
  164. package/dist/serv/types/index.js.map +1 -1
  165. package/dist/server.d.ts.map +1 -1
  166. package/dist/server.js +61 -6
  167. package/dist/server.js.map +1 -1
  168. package/dist/shared/announce-context.d.ts +51 -0
  169. package/dist/shared/announce-context.d.ts.map +1 -0
  170. package/dist/shared/announce-context.js +73 -0
  171. package/dist/shared/announce-context.js.map +1 -0
  172. package/dist/shared/audit-sqlite.d.ts +63 -0
  173. package/dist/shared/audit-sqlite.d.ts.map +1 -0
  174. package/dist/shared/audit-sqlite.js +187 -0
  175. package/dist/shared/audit-sqlite.js.map +1 -0
  176. package/dist/shared/audit.d.ts +25 -3
  177. package/dist/shared/audit.d.ts.map +1 -1
  178. package/dist/shared/audit.js +97 -3
  179. package/dist/shared/audit.js.map +1 -1
  180. package/dist/shared/error-handler.d.ts +10 -1
  181. package/dist/shared/error-handler.d.ts.map +1 -1
  182. package/dist/shared/error-handler.js +17 -2
  183. package/dist/shared/error-handler.js.map +1 -1
  184. package/dist/shared/security.d.ts +12 -0
  185. package/dist/shared/security.d.ts.map +1 -1
  186. package/dist/shared/security.js +80 -0
  187. package/dist/shared/security.js.map +1 -1
  188. package/dist/shared/sqlite-runtime.d.ts +46 -0
  189. package/dist/shared/sqlite-runtime.d.ts.map +1 -0
  190. package/dist/shared/sqlite-runtime.js +120 -0
  191. package/dist/shared/sqlite-runtime.js.map +1 -0
  192. package/dist/tasks/store.d.ts +1 -1
  193. package/dist/tasks/store.d.ts.map +1 -1
  194. package/dist/tasks/store.js +29 -15
  195. package/dist/tasks/store.js.map +1 -1
  196. package/dist/telemetry/metrics.d.ts +26 -0
  197. package/dist/telemetry/metrics.d.ts.map +1 -1
  198. package/dist/telemetry/metrics.js +31 -0
  199. package/dist/telemetry/metrics.js.map +1 -1
  200. package/dist/test-runner.d.ts.map +1 -1
  201. package/dist/test-runner.js +3 -3
  202. package/dist/test-runner.js.map +1 -1
  203. package/dist/tsx-compiler.d.ts.map +1 -1
  204. package/dist/tsx-compiler.js +18 -1
  205. package/dist/tsx-compiler.js.map +1 -1
  206. package/dist/version-checker.d.ts.map +1 -1
  207. package/dist/version-checker.js +7 -14
  208. package/dist/version-checker.js.map +1 -1
  209. package/dist/version.d.ts +12 -0
  210. package/dist/version.d.ts.map +1 -1
  211. package/dist/version.js +103 -1
  212. package/dist/version.js.map +1 -1
  213. package/package.json +10 -2
  214. package/templates/photon.template.ts +7 -13
@@ -51,6 +51,18 @@ export declare function getCorsOrigin(req: IncomingMessage): string | undefined;
51
51
  * Sets standard security headers on an HTTP response.
52
52
  */
53
53
  export declare function setSecurityHeaders(res: ServerResponse): void;
54
+ /**
55
+ * Return true when `ip` is inside any of the given CIDR ranges or equals
56
+ * any literal entry. Silently ignores malformed CIDRs (the caller should
57
+ * log them at config-parse time).
58
+ */
59
+ export declare function ipInAllowlist(ip: string, ranges: string[]): boolean;
60
+ /**
61
+ * Parse a comma-separated list of CIDR ranges / literal IPs from env
62
+ * config. Empty string → empty array (allow all). Malformed entries are
63
+ * dropped (matching the ipInAllowlist tolerance).
64
+ */
65
+ export declare function parseAllowlistEnv(raw: string | undefined): string[];
54
66
  /**
55
67
  * Simple in-memory rate limiter using a sliding window.
56
68
  */
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/shared/security.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAI5D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAW3D;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAWD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D;AAYD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAqBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOnE;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,eAAe,EACpB,QAAQ,GAAE,MAA+B,GACxC,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAQrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAMtE;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI5D;AAID;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,OAAO,CAA+B;gBAG3B,WAAW,GAAE,MAAW,EACxB,QAAQ,GAAE,MAAe;IAG5C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAuB/B;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAO1B;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAGhF;AAaD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxD"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/shared/security.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAI5D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAW3D;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAWD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D;AAYD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAqBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOnE;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,eAAe,EACpB,QAAQ,GAAE,MAA+B,GACxC,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAQrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAMtE;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI5D;AAsCD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAiBnE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAMnE;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,OAAO,CAA+B;gBAG3B,WAAW,GAAE,MAAW,EACxB,QAAQ,GAAE,MAAe;IAG5C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAuB/B;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAO1B;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAGhF;AAaD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxD"}
@@ -171,6 +171,86 @@ export function setSecurityHeaders(res) {
171
171
  res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
172
172
  }
173
173
  // ─── Rate Limiting ──────────────────────────────────────────────────
174
+ /**
175
+ * Parse a CIDR notation string into a {base, prefix} pair. Returns null
176
+ * for malformed input. Supports IPv4 only for now — IPv6 allowlists are
177
+ * handled separately by exact-match since realistic webhook sources are
178
+ * IPv4 in practice.
179
+ */
180
+ function parseCidrV4(cidr) {
181
+ const [ip, prefixRaw] = cidr.trim().split('/');
182
+ if (!ip)
183
+ return null;
184
+ const prefix = prefixRaw === undefined ? 32 : parseInt(prefixRaw, 10);
185
+ if (!Number.isFinite(prefix) || prefix < 0 || prefix > 32)
186
+ return null;
187
+ const octets = ip.split('.');
188
+ if (octets.length !== 4)
189
+ return null;
190
+ let base = 0;
191
+ for (const o of octets) {
192
+ const n = parseInt(o, 10);
193
+ if (!Number.isFinite(n) || n < 0 || n > 255)
194
+ return null;
195
+ base = ((base << 8) | n) >>> 0;
196
+ }
197
+ return { base, prefix };
198
+ }
199
+ function ipv4ToInt(ip) {
200
+ const octets = ip.split('.');
201
+ if (octets.length !== 4)
202
+ return null;
203
+ let n = 0;
204
+ for (const o of octets) {
205
+ const v = parseInt(o, 10);
206
+ if (!Number.isFinite(v) || v < 0 || v > 255)
207
+ return null;
208
+ n = ((n << 8) | v) >>> 0;
209
+ }
210
+ return n;
211
+ }
212
+ /**
213
+ * Return true when `ip` is inside any of the given CIDR ranges or equals
214
+ * any literal entry. Silently ignores malformed CIDRs (the caller should
215
+ * log them at config-parse time).
216
+ */
217
+ export function ipInAllowlist(ip, ranges) {
218
+ if (ranges.length === 0)
219
+ return true; // no allowlist = allow all
220
+ // Strip IPv6-mapped IPv4 prefix so "::ffff:10.0.0.1" matches "10.0.0.0/8".
221
+ const normalized = ip.startsWith('::ffff:') ? ip.slice(7) : ip;
222
+ const addr = ipv4ToInt(normalized);
223
+ for (const raw of ranges) {
224
+ const entry = raw.trim();
225
+ if (!entry)
226
+ continue;
227
+ // Exact-match fallback (covers IPv6 literals without CIDR math).
228
+ if (entry === ip || entry === normalized)
229
+ return true;
230
+ if (addr === null)
231
+ continue;
232
+ const parsed = parseCidrV4(entry);
233
+ if (!parsed)
234
+ continue;
235
+ const mask = parsed.prefix === 0 ? 0 : (~0 << (32 - parsed.prefix)) >>> 0;
236
+ if ((addr & mask) === (parsed.base & mask))
237
+ return true;
238
+ }
239
+ return false;
240
+ }
241
+ /**
242
+ * Parse a comma-separated list of CIDR ranges / literal IPs from env
243
+ * config. Empty string → empty array (allow all). Malformed entries are
244
+ * dropped (matching the ipInAllowlist tolerance).
245
+ */
246
+ export function parseAllowlistEnv(raw) {
247
+ if (!raw)
248
+ return [];
249
+ return raw
250
+ .split(',')
251
+ .map((s) => s.trim())
252
+ .filter(Boolean);
253
+ }
174
254
  /**
175
255
  * Simple in-memory rate limiter using a sliding window.
176
256
  */
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/shared/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/shared/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Runtime-agnostic SQLite loader.
3
+ *
4
+ * Under Bun: uses the built-in `bun:sqlite` (zero install). Under Node: falls
5
+ * back to `better-sqlite3` loaded as an optional peer dependency. API surface
6
+ * of both databases is equivalent for the subset we use (`prepare`, `run`,
7
+ * `get`, `all`, `exec`, `pragma`, `transaction`, `close`), so callers can
8
+ * treat the returned handle uniformly.
9
+ *
10
+ * Callers should treat the database handle as `SqliteDatabase` (structurally
11
+ * typed) and the statement handle as `SqliteStatement`. Runtime detection
12
+ * happens once per process; subsequent opens reuse the same constructor.
13
+ */
14
+ export type SqliteDatabase = any;
15
+ export type SqliteStatement = any;
16
+ type SqliteCtor = new (path: string, opts?: any) => SqliteDatabase;
17
+ /**
18
+ * @returns 'bun' if running under Bun, else 'node'.
19
+ */
20
+ export declare function detectSqliteRuntime(): 'bun' | 'node';
21
+ /**
22
+ * Load the SQLite Database constructor for the current runtime.
23
+ * Caches the result so subsequent calls skip the dynamic import.
24
+ */
25
+ export declare function loadSqliteCtor(): Promise<SqliteCtor>;
26
+ /**
27
+ * Open a SQLite database at `path` with sensible defaults (WAL journal,
28
+ * foreign keys on). The schema init function runs once on the returned
29
+ * handle before it's returned to the caller.
30
+ */
31
+ export declare function openSqlite(path: string, initSchema: (db: SqliteDatabase) => void): Promise<SqliteDatabase>;
32
+ /**
33
+ * @returns whether SQLite is currently available in this process.
34
+ */
35
+ export declare function isSqliteAvailable(): Promise<boolean>;
36
+ /**
37
+ * @returns the cached runtime label, or null if the loader hasn't run yet.
38
+ * For diagnostics and logs.
39
+ */
40
+ export declare function getResolvedSqliteRuntime(): 'bun' | 'node' | null;
41
+ /**
42
+ * Internal: reset the cached constructor. For tests only.
43
+ */
44
+ export declare function __resetSqliteCache(): void;
45
+ export {};
46
+ //# sourceMappingURL=sqlite-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-runtime.d.ts","sourceRoot":"","sources":["../../src/shared/sqlite-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC;AAElC,KAAK,UAAU,GAAG,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,cAAc,CAAC;AAKnE;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,KAAK,GAAG,MAAM,CAIpD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAiC1D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,IAAI,GACvC,OAAO,CAAC,cAAc,CAAC,CAMzB;AAeD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,KAAK,GAAG,MAAM,GAAG,IAAI,CAEhE;AAaD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Runtime-agnostic SQLite loader.
3
+ *
4
+ * Under Bun: uses the built-in `bun:sqlite` (zero install). Under Node: falls
5
+ * back to `better-sqlite3` loaded as an optional peer dependency. API surface
6
+ * of both databases is equivalent for the subset we use (`prepare`, `run`,
7
+ * `get`, `all`, `exec`, `pragma`, `transaction`, `close`), so callers can
8
+ * treat the returned handle uniformly.
9
+ *
10
+ * Callers should treat the database handle as `SqliteDatabase` (structurally
11
+ * typed) and the statement handle as `SqliteStatement`. Runtime detection
12
+ * happens once per process; subsequent opens reuse the same constructor.
13
+ */
14
+ let cachedCtor = null;
15
+ let cachedRuntime = null;
16
+ /**
17
+ * @returns 'bun' if running under Bun, else 'node'.
18
+ */
19
+ export function detectSqliteRuntime() {
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ const hasBun = typeof globalThis.Bun !== 'undefined';
22
+ return hasBun ? 'bun' : 'node';
23
+ }
24
+ /**
25
+ * Load the SQLite Database constructor for the current runtime.
26
+ * Caches the result so subsequent calls skip the dynamic import.
27
+ */
28
+ export async function loadSqliteCtor() {
29
+ if (cachedCtor)
30
+ return cachedCtor;
31
+ const runtime = detectSqliteRuntime();
32
+ cachedRuntime = runtime;
33
+ if (runtime === 'bun') {
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ const mod = await dynamicImport('bun:sqlite');
36
+ cachedCtor = mod.Database;
37
+ return cachedCtor;
38
+ }
39
+ try {
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ const mod = await dynamicImport('better-sqlite3');
42
+ cachedCtor = (mod.default ?? mod);
43
+ return cachedCtor;
44
+ }
45
+ catch (err) {
46
+ // Two common causes: not installed, or install script was blocked by
47
+ // Bun's default trust gate so the native binding never compiled.
48
+ // Surface both with copy-pasteable fix commands.
49
+ const msg = err instanceof Error ? err.message : String(err);
50
+ const looksTrustBlocked = /MODULE_NOT_FOUND|Cannot find module|find the prebuilt|ELIFECYCLE|postinstall/i.test(msg);
51
+ throw new Error(looksTrustBlocked
52
+ ? 'SQLite backend requires better-sqlite3 but its install script was blocked.\n' +
53
+ ' Fix (Bun): bun pm -g trust better-sqlite3\n' +
54
+ ' Fix (npm): npm rebuild better-sqlite3\n' +
55
+ ' Under Bun, bun:sqlite works out of the box without better-sqlite3.'
56
+ : 'SQLite not available on Node: install with `npm install better-sqlite3`. Under Bun no install is needed (bun:sqlite is built in).');
57
+ }
58
+ }
59
+ /**
60
+ * Open a SQLite database at `path` with sensible defaults (WAL journal,
61
+ * foreign keys on). The schema init function runs once on the returned
62
+ * handle before it's returned to the caller.
63
+ */
64
+ export async function openSqlite(path, initSchema) {
65
+ const Ctor = await loadSqliteCtor();
66
+ const db = new Ctor(path);
67
+ applyDefaultPragmas(db);
68
+ initSchema(db);
69
+ return db;
70
+ }
71
+ /**
72
+ * Best-effort pragma application. Both backends accept the pragma() helper
73
+ * but some older versions don't; swallowing errors keeps startup robust.
74
+ */
75
+ function applyDefaultPragmas(db) {
76
+ try {
77
+ db.exec('PRAGMA journal_mode = WAL');
78
+ db.exec('PRAGMA foreign_keys = ON');
79
+ }
80
+ catch {
81
+ // non-fatal; the DB still works without WAL
82
+ }
83
+ }
84
+ /**
85
+ * @returns whether SQLite is currently available in this process.
86
+ */
87
+ export async function isSqliteAvailable() {
88
+ try {
89
+ await loadSqliteCtor();
90
+ return true;
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
96
+ /**
97
+ * @returns the cached runtime label, or null if the loader hasn't run yet.
98
+ * For diagnostics and logs.
99
+ */
100
+ export function getResolvedSqliteRuntime() {
101
+ return cachedRuntime;
102
+ }
103
+ /**
104
+ * Dynamic import that bypasses TypeScript module-resolution checks,
105
+ * letting us reference `bun:sqlite` (which only exists under Bun) and
106
+ * `better-sqlite3` (an optional dep) without compile-time errors.
107
+ */
108
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ async function dynamicImport(modName) {
110
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
111
+ return await new Function('m', 'return import(m)')(modName);
112
+ }
113
+ /**
114
+ * Internal: reset the cached constructor. For tests only.
115
+ */
116
+ export function __resetSqliteCache() {
117
+ cachedCtor = null;
118
+ cachedRuntime = null;
119
+ }
120
+ //# sourceMappingURL=sqlite-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-runtime.js","sourceRoot":"","sources":["../../src/shared/sqlite-runtime.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,6 @@ export declare function listTasks(photon?: string): Task[];
21
21
  * and also removes non-terminal tasks that have been alive longer than their TTL
22
22
  */
23
23
  export declare function cleanExpiredTasks(): number;
24
- /** Override tasks dir for testing */
24
+ /** Return the current tasks dir resolves per call so tests can switch PHOTON_DIR. */
25
25
  export declare function _getTasksDir(): string;
26
26
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tasks/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,KAAK,IAAI,EAAuD,MAAM,YAAY,CAAC;AAkB5F,2CAA2C;AAC3C,eAAO,MAAM,UAAU,uBAAqB,CAAC;AAM7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAEpF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEzE;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAkBN;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS/C;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CACd,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,CAClF,GACA,IAAI,GAAG,IAAI,CAcb;AAED,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAejD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA+B1C;AAED,qCAAqC;AACrC,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tasks/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,KAAK,IAAI,EAAuD,MAAM,YAAY,CAAC;AA8B5F,2CAA2C;AAC3C,eAAO,MAAM,UAAU,uBAAqB,CAAC;AAM7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAEpF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEzE;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAkBN;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS/C;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CACd,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,CAClF,GACA,IAAI,GAAG,IAAI,CAcb;AAED,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAejD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA+B1C;AAED,uFAAuF;AACvF,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -12,17 +12,31 @@ import { randomUUID } from 'crypto';
12
12
  import { EventEmitter } from 'events';
13
13
  import { TERMINAL_STATES, DEFAULT_TTL, DEFAULT_POLL_INTERVAL } from './types.js';
14
14
  import { getTasksDir, getLegacyTasksDir } from '@portel/photon-core';
15
- // Tasks are ephemeral/global — use .data/tasks/
16
- // Check legacy path for existing tasks during migration
17
- const newDir = getTasksDir();
18
- const legacyDir = getLegacyTasksDir();
19
- const TASKS_DIR = existsSync(newDir) ? newDir : existsSync(legacyDir) ? legacyDir : newDir;
15
+ /**
16
+ * Resolve the tasks directory at call time rather than module import.
17
+ *
18
+ * A long-lived daemon serves multiple PHOTON_DIRs over its lifetime;
19
+ * freezing the path at import meant every task landed under whichever
20
+ * base imported first. Resolving per-call lets each task live under the
21
+ * PHOTON_DIR active at the moment of creation. The legacy fallback is
22
+ * only consulted if the new path does not yet exist, matching the
23
+ * migration pattern used elsewhere.
24
+ */
25
+ function resolveTasksDir() {
26
+ const newDir = getTasksDir();
27
+ if (existsSync(newDir))
28
+ return newDir;
29
+ const legacyDir = getLegacyTasksDir();
30
+ if (existsSync(legacyDir))
31
+ return legacyDir;
32
+ return newDir;
33
+ }
20
34
  /** Ensure tasks directory exists (idempotent) */
21
35
  function ensureDir() {
22
- mkdirSync(TASKS_DIR, { recursive: true });
36
+ mkdirSync(resolveTasksDir(), { recursive: true });
23
37
  }
24
38
  function taskPath(id) {
25
- return join(TASKS_DIR, `${id}.json`);
39
+ return join(resolveTasksDir(), `${id}.json`);
26
40
  }
27
41
  /** Event emitter for task state changes */
28
42
  export const taskEvents = new EventEmitter();
@@ -84,11 +98,11 @@ export function updateTask(id, updates) {
84
98
  }
85
99
  export function listTasks(photon) {
86
100
  ensureDir();
87
- const files = readdirSync(TASKS_DIR).filter((f) => f.endsWith('.json'));
101
+ const files = readdirSync(resolveTasksDir()).filter((f) => f.endsWith('.json'));
88
102
  const tasks = [];
89
103
  for (const file of files) {
90
104
  try {
91
- const task = readJSONSync(join(TASKS_DIR, file));
105
+ const task = readJSONSync(join(resolveTasksDir(), file));
92
106
  if (!photon || task.photon === photon) {
93
107
  tasks.push(task);
94
108
  }
@@ -105,19 +119,19 @@ export function listTasks(photon) {
105
119
  */
106
120
  export function cleanExpiredTasks() {
107
121
  ensureDir();
108
- const files = readdirSync(TASKS_DIR).filter((f) => f.endsWith('.json'));
122
+ const files = readdirSync(resolveTasksDir()).filter((f) => f.endsWith('.json'));
109
123
  const now = Date.now();
110
124
  let cleaned = 0;
111
125
  for (const file of files) {
112
126
  try {
113
- const task = readJSONSync(join(TASKS_DIR, file));
127
+ const task = readJSONSync(join(resolveTasksDir(), file));
114
128
  const age = now - new Date(task.createdAt).getTime();
115
129
  const ttl = task.ttl || DEFAULT_TTL;
116
130
  if (age > ttl) {
117
131
  // Terminal tasks: always clean
118
132
  // Non-terminal tasks past TTL: force-cancel and clean
119
133
  if (TERMINAL_STATES.includes(task.state)) {
120
- unlinkSync(join(TASKS_DIR, file));
134
+ unlinkSync(join(resolveTasksDir(), file));
121
135
  cleaned++;
122
136
  }
123
137
  else {
@@ -126,7 +140,7 @@ export function cleanExpiredTasks() {
126
140
  if (controller)
127
141
  controller.abort();
128
142
  unregisterController(task.id);
129
- unlinkSync(join(TASKS_DIR, file));
143
+ unlinkSync(join(resolveTasksDir(), file));
130
144
  cleaned++;
131
145
  }
132
146
  }
@@ -137,9 +151,9 @@ export function cleanExpiredTasks() {
137
151
  }
138
152
  return cleaned;
139
153
  }
140
- /** Override tasks dir for testing */
154
+ /** Return the current tasks dir resolves per call so tests can switch PHOTON_DIR. */
141
155
  export function _getTasksDir() {
142
- return TASKS_DIR;
156
+ return resolveTasksDir();
143
157
  }
144
158
  // Startup cleanup
145
159
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tasks/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tasks/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAa,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;;;;;;;GASG;AACH,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iDAAiD;AACjD,SAAS,SAAS;IAChB,SAAS,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU;IAC1B,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;AAC7C,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC;AAEnE,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAE7D,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,UAA2B;IAC5E,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,MAAc,EACd,MAAgC,EAChC,GAAY;IAEZ,SAAS,EAAE,CAAC;IACZ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAS;QACjB,EAAE,EAAE,UAAU,EAAE;QAChB,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,mCAAmC;QAClD,GAAG,EAAE,GAAG,IAAI,WAAW;QACvB,YAAY,EAAE,qBAAqB;QACnC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,SAAS,EAAE,CAAC;IACZ,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,EAAU,EACV,OAEC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACtE,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAElC,+BAA+B;IAC/B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAe;IACvC,SAAS,EAAE,CAAC;IACZ,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAChF,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAS,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,SAAS,EAAE,CAAC;IACZ,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAS,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC;YAEpC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;gBACd,+BAA+B;gBAC/B,sDAAsD;gBACtD,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC1C,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,wCAAwC;oBACxC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1C,IAAI,UAAU;wBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC9B,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC1C,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,YAAY;IAC1B,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED,kBAAkB;AAClB,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,kBAAkB,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,cAAc;AAChB,CAAC"}
@@ -56,6 +56,32 @@ export declare function recordCircuitStateChange(params: {
56
56
  from: 'closed' | 'open' | 'half-open';
57
57
  to: 'closed' | 'open' | 'half-open';
58
58
  }): void;
59
+ /**
60
+ * Record an OAuth authorization-server event. One counter per endpoint +
61
+ * status so operators can alert on error rates and track CIMD vs DCR
62
+ * adoption without sampling logs.
63
+ */
64
+ export declare function recordAuthEvent(params: {
65
+ /** Which AS endpoint. */
66
+ endpoint: 'authorize' | 'token' | 'register' | 'consent';
67
+ /** Outcome bucket. */
68
+ status: 'ok' | 'error';
69
+ /** For /token, which grant_type was requested. */
70
+ grantType?: 'authorization_code' | 'refresh_token' | 'client_credentials' | 'unknown';
71
+ /** Client registration mode that resolved this request. */
72
+ clientType?: 'cimd' | 'dcr' | 'unknown';
73
+ /** For errors, the spec error code (invalid_grant, invalid_client, ...) for drill-down. */
74
+ errorCode?: string;
75
+ }): void;
76
+ /**
77
+ * Record a CIMD metadata-fetch outcome. `cached=true` means the document
78
+ * was served from the in-memory LRU without a network round-trip.
79
+ */
80
+ export declare function recordCimdFetch(params: {
81
+ status: 'ok' | 'error';
82
+ cached: boolean;
83
+ errorCode?: string;
84
+ }): void;
59
85
  /**
60
86
  * Returns true if OpenTelemetry metrics are available.
61
87
  */
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CACrF;AA0FD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,IAAI,CAgBP;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;CACrC,GAAG,IAAI,CAYP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CACrF;AA0FD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,IAAI,CAgBP;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;CACrC,GAAG,IAAI,CAYP;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,yBAAyB;IACzB,QAAQ,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACzD,sBAAsB;IACtB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,kDAAkD;IAClD,SAAS,CAAC,EAAE,oBAAoB,GAAG,eAAe,GAAG,oBAAoB,GAAG,SAAS,CAAC;IACtF,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IACxC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CASP;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CAOP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
@@ -161,6 +161,37 @@ export function recordCircuitStateChange(params) {
161
161
  attrs['photon.instance'] = params.instance;
162
162
  getCounter('photon.circuit_breaker.transitions', 'Circuit-breaker state transitions', '1').add(1, attrs);
163
163
  }
164
+ /**
165
+ * Record an OAuth authorization-server event. One counter per endpoint +
166
+ * status so operators can alert on error rates and track CIMD vs DCR
167
+ * adoption without sampling logs.
168
+ */
169
+ export function recordAuthEvent(params) {
170
+ const attrs = {
171
+ 'mcp_auth.endpoint': params.endpoint,
172
+ status: params.status,
173
+ };
174
+ if (params.grantType)
175
+ attrs['mcp_auth.grant_type'] = params.grantType;
176
+ if (params.clientType)
177
+ attrs['mcp_auth.client_type'] = params.clientType;
178
+ if (params.errorCode)
179
+ attrs['mcp_auth.error_code'] = params.errorCode;
180
+ getCounter('mcp_auth.events', 'OAuth authorization-server endpoint events', '1').add(1, attrs);
181
+ }
182
+ /**
183
+ * Record a CIMD metadata-fetch outcome. `cached=true` means the document
184
+ * was served from the in-memory LRU without a network round-trip.
185
+ */
186
+ export function recordCimdFetch(params) {
187
+ const attrs = {
188
+ status: params.status,
189
+ cached: params.cached,
190
+ };
191
+ if (params.errorCode)
192
+ attrs['mcp_auth.cimd_error'] = params.errorCode;
193
+ getCounter('mcp_auth.cimd.fetches', 'CIMD document fetches', '1').add(1, attrs);
194
+ }
164
195
  /**
165
196
  * Returns true if OpenTelemetry metrics are available.
166
197
  */
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsBH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,QAAQ,CAAC;CAChB;AA8nCD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC,CA8B1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAO,GAChD,OAAO,CAAC,WAAW,CAAC,CA8JtB"}
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAuBH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,QAAQ,CAAC;CAChB;AA8nCD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC,CA8B1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAO,GAChD,OAAO,CAAC,WAAW,CAAC,CA6JtB"}
@@ -13,10 +13,11 @@
13
13
  * Usage: photon test [photon] [testName] [--mode direct|cli|all]
14
14
  */
15
15
  import * as path from 'path';
16
- import { existsSync, readFileSync, readdirSync } from 'fs';
16
+ import { existsSync, readFileSync } from 'fs';
17
17
  import { spawn } from 'child_process';
18
18
  import { fileURLToPath, pathToFileURL } from 'url';
19
19
  import { PhotonLoader } from './loader.js';
20
+ import { listPhotonSourceFiles } from '@portel/photon-core';
20
21
  import { listPhotonMCPs, resolvePhotonPath } from './path-resolver.js';
21
22
  import { logger } from './shared/logger.js';
22
23
  import { SchemaExtractor, compilePhotonTS } from '@portel/photon-core';
@@ -1072,8 +1073,7 @@ export async function runTests(workingDir, photonName, testName, options = {}) {
1072
1073
  // Discover photons in CWD (development repos)
1073
1074
  if (cwdIsDifferent && existsSync(cwd)) {
1074
1075
  try {
1075
- const cwdFiles = readdirSync(cwd).filter((f) => f.endsWith('.photon.ts'));
1076
- for (const file of cwdFiles) {
1076
+ for (const file of listPhotonSourceFiles(cwd, { extensions: ['.photon.ts'] })) {
1077
1077
  const name = file.replace(/\.photon\.ts$/, '');
1078
1078
  photonMap.set(name, path.join(cwd, file)); // CWD overrides installed
1079
1079
  }