@gloocan/cat-inspector 0.1.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 (201) hide show
  1. package/dist/artifact-helpers.d.ts +4 -0
  2. package/dist/artifact-helpers.d.ts.map +1 -0
  3. package/dist/artifact-helpers.js +21 -0
  4. package/dist/artifact-helpers.js.map +1 -0
  5. package/dist/ast/get-all-ts-files.d.ts +5 -0
  6. package/dist/ast/get-all-ts-files.d.ts.map +1 -0
  7. package/dist/ast/get-all-ts-files.js +36 -0
  8. package/dist/ast/get-all-ts-files.js.map +1 -0
  9. package/dist/ast/merge-ast.d.ts +3 -0
  10. package/dist/ast/merge-ast.d.ts.map +1 -0
  11. package/dist/ast/merge-ast.js +40 -0
  12. package/dist/ast/merge-ast.js.map +1 -0
  13. package/dist/ast/run-ast-scanner.d.ts +15 -0
  14. package/dist/ast/run-ast-scanner.d.ts.map +1 -0
  15. package/dist/ast/run-ast-scanner.js +44 -0
  16. package/dist/ast/run-ast-scanner.js.map +1 -0
  17. package/dist/ast/scan-for-labels.d.ts +20 -0
  18. package/dist/ast/scan-for-labels.d.ts.map +1 -0
  19. package/dist/ast/scan-for-labels.js +88 -0
  20. package/dist/ast/scan-for-labels.js.map +1 -0
  21. package/dist/ast/scan-for-returns.d.ts +13 -0
  22. package/dist/ast/scan-for-returns.d.ts.map +1 -0
  23. package/dist/ast/scan-for-returns.js +48 -0
  24. package/dist/ast/scan-for-returns.js.map +1 -0
  25. package/dist/ast/type-expand.d.ts +16 -0
  26. package/dist/ast/type-expand.d.ts.map +1 -0
  27. package/dist/ast/type-expand.js +118 -0
  28. package/dist/ast/type-expand.js.map +1 -0
  29. package/dist/ast/visit-node.d.ts +31 -0
  30. package/dist/ast/visit-node.d.ts.map +1 -0
  31. package/dist/ast/visit-node.js +298 -0
  32. package/dist/ast/visit-node.js.map +1 -0
  33. package/dist/bootstrap.d.ts +105 -0
  34. package/dist/bootstrap.d.ts.map +1 -0
  35. package/dist/bootstrap.js +121 -0
  36. package/dist/bootstrap.js.map +1 -0
  37. package/dist/catalog-bootstrap-cache.d.ts +23 -0
  38. package/dist/catalog-bootstrap-cache.d.ts.map +1 -0
  39. package/dist/catalog-bootstrap-cache.js +54 -0
  40. package/dist/catalog-bootstrap-cache.js.map +1 -0
  41. package/dist/catalog-fingerprint.d.ts +20 -0
  42. package/dist/catalog-fingerprint.d.ts.map +1 -0
  43. package/dist/catalog-fingerprint.js +57 -0
  44. package/dist/catalog-fingerprint.js.map +1 -0
  45. package/dist/coverage/compute-coverage.d.ts +41 -0
  46. package/dist/coverage/compute-coverage.d.ts.map +1 -0
  47. package/dist/coverage/compute-coverage.js +229 -0
  48. package/dist/coverage/compute-coverage.js.map +1 -0
  49. package/dist/coverage/scan-all-service-candidates.d.ts +15 -0
  50. package/dist/coverage/scan-all-service-candidates.d.ts.map +1 -0
  51. package/dist/coverage/scan-all-service-candidates.js +73 -0
  52. package/dist/coverage/scan-all-service-candidates.js.map +1 -0
  53. package/dist/coverage/scan-express-candidates.d.ts +17 -0
  54. package/dist/coverage/scan-express-candidates.d.ts.map +1 -0
  55. package/dist/coverage/scan-express-candidates.js +300 -0
  56. package/dist/coverage/scan-express-candidates.js.map +1 -0
  57. package/dist/coverage/scan-reachable-services.d.ts +13 -0
  58. package/dist/coverage/scan-reachable-services.d.ts.map +1 -0
  59. package/dist/coverage/scan-reachable-services.js +469 -0
  60. package/dist/coverage/scan-reachable-services.js.map +1 -0
  61. package/dist/coverage/types.d.ts +32 -0
  62. package/dist/coverage/types.d.ts.map +1 -0
  63. package/dist/coverage/types.js +2 -0
  64. package/dist/coverage/types.js.map +1 -0
  65. package/dist/decorators/cat-class.d.ts +11 -0
  66. package/dist/decorators/cat-class.d.ts.map +1 -0
  67. package/dist/decorators/cat-class.js +20 -0
  68. package/dist/decorators/cat-class.js.map +1 -0
  69. package/dist/decorators/cat.d.ts +3 -0
  70. package/dist/decorators/cat.d.ts.map +1 -0
  71. package/dist/decorators/cat.js +102 -0
  72. package/dist/decorators/cat.js.map +1 -0
  73. package/dist/express-inspector-correlation.d.ts +23 -0
  74. package/dist/express-inspector-correlation.d.ts.map +1 -0
  75. package/dist/express-inspector-correlation.js +50 -0
  76. package/dist/express-inspector-correlation.js.map +1 -0
  77. package/dist/express-playground-mocks.d.ts +28 -0
  78. package/dist/express-playground-mocks.d.ts.map +1 -0
  79. package/dist/express-playground-mocks.js +55 -0
  80. package/dist/express-playground-mocks.js.map +1 -0
  81. package/dist/express-qa-host-minio-upload.d.ts +16 -0
  82. package/dist/express-qa-host-minio-upload.d.ts.map +1 -0
  83. package/dist/express-qa-host-minio-upload.js +56 -0
  84. package/dist/express-qa-host-minio-upload.js.map +1 -0
  85. package/dist/express.d.ts +21 -0
  86. package/dist/express.d.ts.map +1 -0
  87. package/dist/express.js +167 -0
  88. package/dist/express.js.map +1 -0
  89. package/dist/functional.d.ts +15 -0
  90. package/dist/functional.d.ts.map +1 -0
  91. package/dist/functional.js +165 -0
  92. package/dist/functional.js.map +1 -0
  93. package/dist/graph/relationships.d.ts +9 -0
  94. package/dist/graph/relationships.d.ts.map +1 -0
  95. package/dist/graph/relationships.js +92 -0
  96. package/dist/graph/relationships.js.map +1 -0
  97. package/dist/http-bridge-registry.d.ts +26 -0
  98. package/dist/http-bridge-registry.d.ts.map +1 -0
  99. package/dist/http-bridge-registry.js +39 -0
  100. package/dist/http-bridge-registry.js.map +1 -0
  101. package/dist/index.d.ts +36 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +35 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/invoke-policy.d.ts +34 -0
  106. package/dist/invoke-policy.d.ts.map +1 -0
  107. package/dist/invoke-policy.js +72 -0
  108. package/dist/invoke-policy.js.map +1 -0
  109. package/dist/invoke-runtime-config.d.ts +4 -0
  110. package/dist/invoke-runtime-config.d.ts.map +1 -0
  111. package/dist/invoke-runtime-config.js +15 -0
  112. package/dist/invoke-runtime-config.js.map +1 -0
  113. package/dist/jobs/in-memory-job-registry.d.ts +21 -0
  114. package/dist/jobs/in-memory-job-registry.d.ts.map +1 -0
  115. package/dist/jobs/in-memory-job-registry.js +44 -0
  116. package/dist/jobs/in-memory-job-registry.js.map +1 -0
  117. package/dist/logger.d.ts +9 -0
  118. package/dist/logger.d.ts.map +1 -0
  119. package/dist/logger.js +17 -0
  120. package/dist/logger.js.map +1 -0
  121. package/dist/openapi/registry-to-openapi.d.ts +11 -0
  122. package/dist/openapi/registry-to-openapi.d.ts.map +1 -0
  123. package/dist/openapi/registry-to-openapi.js +61 -0
  124. package/dist/openapi/registry-to-openapi.js.map +1 -0
  125. package/dist/registry-state.d.ts +107 -0
  126. package/dist/registry-state.d.ts.map +1 -0
  127. package/dist/registry-state.js +302 -0
  128. package/dist/registry-state.js.map +1 -0
  129. package/dist/return.d.ts +14 -0
  130. package/dist/return.d.ts.map +1 -0
  131. package/dist/return.js +107 -0
  132. package/dist/return.js.map +1 -0
  133. package/dist/rpc.d.ts +7 -0
  134. package/dist/rpc.d.ts.map +1 -0
  135. package/dist/rpc.js +287 -0
  136. package/dist/rpc.js.map +1 -0
  137. package/dist/serialize-rpc-result.d.ts +38 -0
  138. package/dist/serialize-rpc-result.d.ts.map +1 -0
  139. package/dist/serialize-rpc-result.js +132 -0
  140. package/dist/serialize-rpc-result.js.map +1 -0
  141. package/dist/session-store.d.ts +9 -0
  142. package/dist/session-store.d.ts.map +1 -0
  143. package/dist/session-store.js +19 -0
  144. package/dist/session-store.js.map +1 -0
  145. package/dist/source-utils.d.ts +19 -0
  146. package/dist/source-utils.d.ts.map +1 -0
  147. package/dist/source-utils.js +65 -0
  148. package/dist/source-utils.js.map +1 -0
  149. package/dist/transport/remote-bridge-cli.d.ts +2 -0
  150. package/dist/transport/remote-bridge-cli.d.ts.map +1 -0
  151. package/dist/transport/remote-bridge-cli.js +12 -0
  152. package/dist/transport/remote-bridge-cli.js.map +1 -0
  153. package/dist/transport/remote-inspector-bridge.d.ts +18 -0
  154. package/dist/transport/remote-inspector-bridge.d.ts.map +1 -0
  155. package/dist/transport/remote-inspector-bridge.js +71 -0
  156. package/dist/transport/remote-inspector-bridge.js.map +1 -0
  157. package/dist/transport/socket-io-playground.d.ts +78 -0
  158. package/dist/transport/socket-io-playground.d.ts.map +1 -0
  159. package/dist/transport/socket-io-playground.js +875 -0
  160. package/dist/transport/socket-io-playground.js.map +1 -0
  161. package/dist/transport/socket-io.d.ts +4 -0
  162. package/dist/transport/socket-io.d.ts.map +1 -0
  163. package/dist/transport/socket-io.js +4 -0
  164. package/dist/transport/socket-io.js.map +1 -0
  165. package/dist/transport/ws-server.d.ts +42 -0
  166. package/dist/transport/ws-server.d.ts.map +1 -0
  167. package/dist/transport/ws-server.js +429 -0
  168. package/dist/transport/ws-server.js.map +1 -0
  169. package/dist/type-string-normalize.d.ts +24 -0
  170. package/dist/type-string-normalize.d.ts.map +1 -0
  171. package/dist/type-string-normalize.js +178 -0
  172. package/dist/type-string-normalize.js.map +1 -0
  173. package/dist/types.d.ts +218 -0
  174. package/dist/types.d.ts.map +1 -0
  175. package/dist/types.js +2 -0
  176. package/dist/types.js.map +1 -0
  177. package/dist/upload/fetch-file-url.d.ts +24 -0
  178. package/dist/upload/fetch-file-url.d.ts.map +1 -0
  179. package/dist/upload/fetch-file-url.js +130 -0
  180. package/dist/upload/fetch-file-url.js.map +1 -0
  181. package/dist/upload/host-minio-client.d.ts +30 -0
  182. package/dist/upload/host-minio-client.d.ts.map +1 -0
  183. package/dist/upload/host-minio-client.js +56 -0
  184. package/dist/upload/host-minio-client.js.map +1 -0
  185. package/dist/upload/materialize.d.ts +110 -0
  186. package/dist/upload/materialize.d.ts.map +1 -0
  187. package/dist/upload/materialize.js +466 -0
  188. package/dist/upload/materialize.js.map +1 -0
  189. package/dist/upload/upload-store.d.ts +44 -0
  190. package/dist/upload/upload-store.d.ts.map +1 -0
  191. package/dist/upload/upload-store.js +86 -0
  192. package/dist/upload/upload-store.js.map +1 -0
  193. package/dist/validate-params-json-schema.d.ts +13 -0
  194. package/dist/validate-params-json-schema.d.ts.map +1 -0
  195. package/dist/validate-params-json-schema.js +37 -0
  196. package/dist/validate-params-json-schema.js.map +1 -0
  197. package/dist/validate-return-json-schema.d.ts +9 -0
  198. package/dist/validate-return-json-schema.d.ts.map +1 -0
  199. package/dist/validate-return-json-schema.js +33 -0
  200. package/dist/validate-return-json-schema.js.map +1 -0
  201. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-job-registry.d.ts","sourceRoot":"","sources":["../../src/jobs/in-memory-job-registry.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEhE,KAAK,MAAM,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvF;;GAEG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IAEjD,SAAS,IAAI,MAAM;IAOnB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAOjD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAQ/C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAO1C,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,OAAO,CAAC,OAAO;CAKf"}
@@ -0,0 +1,44 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { broadcastJobProgress } from '../registry-state.js';
3
+ /**
4
+ * Minimal in-memory job registry for QA demos: creates ids, updates status, fans out `JOB_PROGRESS` on the inspector broadcast path.
5
+ */
6
+ export class InMemoryJobRegistry {
7
+ jobs = new Map();
8
+ createJob() {
9
+ const jobId = randomUUID();
10
+ this.jobs.set(jobId, { status: 'queued', percent: 0 });
11
+ broadcastJobProgress({ jobId, status: 'queued', percent: 0 });
12
+ return jobId;
13
+ }
14
+ setRunning(jobId, percent) {
15
+ const j = this.require(jobId);
16
+ j.status = 'running';
17
+ if (percent !== undefined)
18
+ j.percent = percent;
19
+ broadcastJobProgress({ jobId, status: 'running', percent: j.percent, detail: j.detail });
20
+ }
21
+ complete(jobId, result) {
22
+ const j = this.require(jobId);
23
+ j.status = 'done';
24
+ j.percent = 100;
25
+ j.result = result;
26
+ broadcastJobProgress({ jobId, status: 'done', percent: 100, detail: j.detail });
27
+ }
28
+ fail(jobId, detail) {
29
+ const j = this.require(jobId);
30
+ j.status = 'failed';
31
+ j.detail = detail;
32
+ broadcastJobProgress({ jobId, status: 'failed', percent: j.percent, detail });
33
+ }
34
+ get(jobId) {
35
+ return this.jobs.get(jobId);
36
+ }
37
+ require(jobId) {
38
+ const j = this.jobs.get(jobId);
39
+ if (!j)
40
+ throw new Error(`unknown jobId ${jobId}`);
41
+ return j;
42
+ }
43
+ }
44
+ //# sourceMappingURL=in-memory-job-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-job-registry.js","sourceRoot":"","sources":["../../src/jobs/in-memory-job-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAM3D;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACd,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEjD,SAAS;QACR,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QACtD,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QAC7D,OAAO,KAAK,CAAA;IACb,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,OAAgB;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,MAAM,GAAG,SAAS,CAAA;QACpB,IAAI,OAAO,KAAK,SAAS;YAAE,CAAC,CAAC,OAAO,GAAG,OAAO,CAAA;QAC9C,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IACzF,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,MAAgB;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAA;QACjB,CAAC,CAAC,OAAO,GAAG,GAAG,CAAA;QACf,CAAC,CAAC,MAAM,GAAG,MAAM,CAAA;QACjB,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,MAAe;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAA;QACnB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAA;QACjB,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,GAAG,CAAC,KAAa;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAEO,OAAO,CAAC,KAAa;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,CAAA;IACT,CAAC;CACD"}
@@ -0,0 +1,9 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
2
+ export interface Logger {
3
+ debug: (...args: unknown[]) => void;
4
+ info: (...args: unknown[]) => void;
5
+ warn: (...args: unknown[]) => void;
6
+ error: (...args: unknown[]) => void;
7
+ }
8
+ export declare function createLogger(level?: LogLevel): Logger;
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,MAAM;IACtB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACnC;AAID,wBAAgB,YAAY,CAAC,KAAK,GAAE,QAAiB,GAAG,MAAM,CAmB7D"}
package/dist/logger.js ADDED
@@ -0,0 +1,17 @@
1
+ const PREFIX = '[cat-inspector]';
2
+ export function createLogger(level = 'info') {
3
+ const order = ['debug', 'info', 'warn', 'error'];
4
+ const min = order.indexOf(level);
5
+ function emit(lv, fn, args) {
6
+ if (order.indexOf(lv) < min)
7
+ return;
8
+ fn(PREFIX, ...args);
9
+ }
10
+ return {
11
+ debug: (...args) => emit('debug', console.log, args),
12
+ info: (...args) => emit('info', console.log, args),
13
+ warn: (...args) => emit('warn', console.warn, args),
14
+ error: (...args) => emit('error', console.error, args),
15
+ };
16
+ }
17
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAEhC,MAAM,UAAU,YAAY,CAAC,QAAkB,MAAM;IACpD,MAAM,KAAK,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAEhC,SAAS,IAAI,CACZ,EAAY,EACZ,EAAsB,EACtB,IAAe;QAEf,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG;YAAE,OAAM;QACnC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IACpB,CAAC;IAED,OAAO;QACN,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;QAC/D,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;QAC7D,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC9D,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;KACjE,CAAA;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { RegistryEntry } from '../types.js';
2
+ /**
3
+ * Build a minimal OpenAPI 3.1 document from a registry snapshot.
4
+ * - Express-backed entries (`route` + `httpMethod`) become real paths.
5
+ * - Every `fnKey` also gets a documented `POST /qa/rpc/{fnKey}` placeholder (not mounted by the SDK).
6
+ */
7
+ export declare function exportRegistryOpenApi(registry: Record<string, RegistryEntry>, opts?: {
8
+ title?: string;
9
+ version?: string;
10
+ }): Record<string, unknown>;
11
+ //# sourceMappingURL=registry-to-openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-to-openapi.d.ts","sourceRoot":"","sources":["../../src/openapi/registry-to-openapi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuDzB"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Build a minimal OpenAPI 3.1 document from a registry snapshot.
3
+ * - Express-backed entries (`route` + `httpMethod`) become real paths.
4
+ * - Every `fnKey` also gets a documented `POST /qa/rpc/{fnKey}` placeholder (not mounted by the SDK).
5
+ */
6
+ export function exportRegistryOpenApi(registry, opts) {
7
+ const paths = {};
8
+ for (const [fnKey, e] of Object.entries(registry)) {
9
+ if (e.route && e.httpMethod) {
10
+ const route = e.route.startsWith('/') ? e.route : `/${e.route}`;
11
+ const method = e.httpMethod.toLowerCase();
12
+ if (!paths[route])
13
+ paths[route] = {};
14
+ paths[route][method] = {
15
+ summary: fnKey,
16
+ operationId: fnKey.replace(/[^a-zA-Z0-9_]/g, '_'),
17
+ responses: {
18
+ '200': { description: 'Handler response (shape varies)' },
19
+ },
20
+ };
21
+ }
22
+ const rpcPath = `/qa/rpc/${encodeURIComponent(fnKey)}`;
23
+ if (!paths[rpcPath]) {
24
+ paths[rpcPath] = {
25
+ post: {
26
+ summary: `RPC invoke ${fnKey}`,
27
+ operationId: `rpc_${fnKey.replace(/[^a-zA-Z0-9_]/g, '_')}`,
28
+ requestBody: {
29
+ required: true,
30
+ content: {
31
+ 'application/json': {
32
+ schema: {
33
+ type: 'object',
34
+ required: ['type', 'requestId', 'fnKey', 'args'],
35
+ properties: {
36
+ type: { const: 'RPC_CALL' },
37
+ requestId: { type: 'string' },
38
+ fnKey: { const: fnKey },
39
+ args: { type: 'array' },
40
+ },
41
+ },
42
+ },
43
+ },
44
+ },
45
+ responses: {
46
+ '200': { description: 'RPC_RESPONSE JSON' },
47
+ },
48
+ },
49
+ };
50
+ }
51
+ }
52
+ return {
53
+ openapi: '3.1.0',
54
+ info: {
55
+ title: opts?.title ?? 'Cat inspector registry',
56
+ version: opts?.version ?? '1.0.0',
57
+ },
58
+ paths,
59
+ };
60
+ }
61
+ //# sourceMappingURL=registry-to-openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-to-openapi.js","sourceRoot":"","sources":["../../src/openapi/registry-to-openapi.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACpC,QAAuC,EACvC,IAA2C;IAE3C,MAAM,KAAK,GAA4C,EAAE,CAAA;IAEzD,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;YAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;YACpC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG;gBACtB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;gBACjD,SAAS,EAAE;oBACV,KAAK,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE;iBACzD;aACD,CAAA;QACF,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAA;QACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE;oBACL,OAAO,EAAE,cAAc,KAAK,EAAE;oBAC9B,WAAW,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE;oBAC1D,WAAW,EAAE;wBACZ,QAAQ,EAAE,IAAI;wBACd,OAAO,EAAE;4BACR,kBAAkB,EAAE;gCACnB,MAAM,EAAE;oCACP,IAAI,EAAE,QAAQ;oCACd,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;oCAChD,UAAU,EAAE;wCACX,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;wCAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wCAC7B,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;wCACvB,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;qCACvB;iCACD;6BACD;yBACD;qBACD;oBACD,SAAS,EAAE;wBACV,KAAK,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE;qBAC3C;iBACD;aACD,CAAA;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACL,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,wBAAwB;YAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,OAAO;SACjC;QACD,KAAK;KACL,CAAA;AACF,CAAC"}
@@ -0,0 +1,107 @@
1
+ import type { IncomingHttpHeaders } from 'node:http';
2
+ import WebSocket from 'ws';
3
+ import type { ApiResponseEvent, ErrorThrownEvent, JobProgressWireEvent, MiddlewareNextEvent, ReturnResolvedEvent } from './types.js';
4
+ export declare const Registry: Map<string, import("./types.js").RegistryEntry>;
5
+ /** Live instances for RPC calls */
6
+ export declare const InstanceRegistry: Map<string, unknown>;
7
+ /**
8
+ * Instances resolved implicitly (via resolver or constructor fallback).
9
+ * Kept separate from `InstanceRegistry` so explicit registrations remain visible/distinct.
10
+ */
11
+ export declare const AutoInstanceRegistry: Map<string, unknown>;
12
+ export declare const ClassConstructorRegistry: Map<string, new (...args: any[]) => any>;
13
+ export declare function registerClassConstructor(className: string, ctor: new (...args: any[]) => any): void;
14
+ export declare function resolveInstanceForClassName(className: string): unknown | null;
15
+ export declare const ActiveContext: {
16
+ stack: string[];
17
+ push(key: string): void;
18
+ pop(): string | null;
19
+ set(key: string): void;
20
+ get(): string | null;
21
+ clear(): void;
22
+ };
23
+ export declare const ApiContext: {
24
+ currentEndpoint: string | null;
25
+ set(key: string): void;
26
+ get(): string | null;
27
+ clear(): void;
28
+ };
29
+ export declare const LabelCapture: {
30
+ current: string | null;
31
+ capture(label: string): void;
32
+ read(): string | null;
33
+ clear(): void;
34
+ };
35
+ export declare const ErrorCapture: {
36
+ current: {
37
+ label: string;
38
+ error: Error;
39
+ } | null;
40
+ capture(label: string, error: Error): void;
41
+ read(): {
42
+ label: string;
43
+ error: Error;
44
+ } | null;
45
+ hasCurrent(): boolean;
46
+ clear(): void;
47
+ };
48
+ export declare function clearExpressApiInvokeCapture(): void;
49
+ export declare function recordExpressApiInvokeCapture(endpointKey: string, payload: {
50
+ label: string;
51
+ statusCode: number;
52
+ body: unknown;
53
+ }): void;
54
+ export declare function readExpressApiInvokeCapture(endpointKey: string): {
55
+ label: string;
56
+ statusCode: number;
57
+ body: unknown;
58
+ } | undefined;
59
+ export declare const wsClients: Set<WebSocket>;
60
+ export type InspectorBroadcastSource = 'rpc' | 'http';
61
+ export type InspectorBroadcastStore = {
62
+ socketId: string;
63
+ source: InspectorBroadcastSource;
64
+ /**
65
+ * Optional per-request correlation id.
66
+ * Used by HTTP inspector to group events belonging to a single inbound request.
67
+ */
68
+ correlationId?: string;
69
+ /**
70
+ * Optional: which pipeline handler is currently executing (middleware or endpoint).
71
+ * Used to tag API responses so the UI can attribute early responses to the correct middleware.
72
+ */
73
+ producerFnKey?: string | null;
74
+ };
75
+ export declare function setBroadcastSink(fn: ((data: object) => void) | null): void;
76
+ export declare function clearBroadcastSink(): void;
77
+ export declare function getInspectorBroadcastStore(): InspectorBroadcastStore | undefined;
78
+ /**
79
+ * Correlate subsequent `broadcast()` calls with a Socket.IO tab (or other sink).
80
+ * Default source `rpc` (not gated by HTTP inspector toggle). Use `http` from REST middleware.
81
+ */
82
+ export declare function runWithInspectorBroadcastTarget<T>(socketId: string, fn: () => T, options?: {
83
+ source?: InspectorBroadcastSource;
84
+ correlationId?: string;
85
+ }): T;
86
+ /**
87
+ * Run within the current inspector broadcast store but with an updated producer fnKey.
88
+ * No-op if there is no active inspector store (i.e. no X-Socket-Id correlation).
89
+ */
90
+ export declare function runWithProducerFnKey<T>(producerFnKey: string | null, fn: () => T): T;
91
+ export declare const INSPECTOR_SOCKET_ID_HEADER = "x-socket-id";
92
+ /** Read Socket.IO correlation id from Express / Node request headers */
93
+ export declare function readInspectorSocketIdFromHeaders(headers: IncomingHttpHeaders): string | undefined;
94
+ export declare function broadcast(data: object): void;
95
+ export declare function broadcastReturnResolved(payload: Omit<ReturnResolvedEvent, 'protocolVersion' | 'timestamp'>): void;
96
+ export declare function broadcastErrorThrown(payload: Omit<ErrorThrownEvent, 'protocolVersion' | 'timestamp'>): void;
97
+ export declare function broadcastApiResponse(payload: Omit<ApiResponseEvent, 'protocolVersion' | 'timestamp'>): void;
98
+ export declare function broadcastMiddlewareNext(payload: Omit<MiddlewareNextEvent, 'protocolVersion' | 'timestamp'>): void;
99
+ export declare function broadcastJobProgress(payload: Omit<JobProgressWireEvent, 'event' | 'protocolVersion' | 'timestamp'>): void;
100
+ /** Attach or clear a JSON Schema used by QA to validate RPC `result` for this `fnKey`. */
101
+ export declare function registerReturnJsonSchema(fnKey: string, schema: Record<string, unknown> | null): void;
102
+ /** Attach or clear a JSON Schema used to validate RPC `args` (whole tuple) for this `fnKey`. */
103
+ export declare function registerParamsJsonSchema(fnKey: string, schema: Record<string, unknown> | null): void;
104
+ export declare function registerInstance(instance: unknown): void;
105
+ /** Test-only: reset in-memory state */
106
+ export declare function resetInspectorState(): void;
107
+ //# sourceMappingURL=registry-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-state.d.ts","sourceRoot":"","sources":["../src/registry-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,302 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import WebSocket from 'ws';
3
+ import { resetInvokePolicy } from './invoke-policy.js';
4
+ import { resetInvokeTimeoutMs } from './invoke-runtime-config.js';
5
+ import { clearHttpBridgeRegistry } from './http-bridge-registry.js';
6
+ import { resetParamsJsonSchemaValidators } from './validate-params-json-schema.js';
7
+ import { resetReturnJsonSchemaValidators } from './validate-return-json-schema.js';
8
+ import { resetRpcSerializationConfig } from './serialize-rpc-result.js';
9
+ import { resetSessionStore } from './session-store.js';
10
+ import { PROTOCOL_VERSION } from './types.js';
11
+ export const Registry = new Map();
12
+ /** Live instances for RPC calls */
13
+ export const InstanceRegistry = new Map();
14
+ /**
15
+ * Instances resolved implicitly (via resolver or constructor fallback).
16
+ * Kept separate from `InstanceRegistry` so explicit registrations remain visible/distinct.
17
+ */
18
+ export const AutoInstanceRegistry = new Map();
19
+ export const ClassConstructorRegistry = new Map();
20
+ export function registerClassConstructor(className, ctor) {
21
+ if (!className)
22
+ return;
23
+ const existing = ClassConstructorRegistry.get(className);
24
+ if (existing) {
25
+ // Idempotent: allow repeated registration of the same constructor.
26
+ if (existing === ctor)
27
+ return;
28
+ throw new Error(`registerClassConstructor: duplicate className "${className}"`);
29
+ }
30
+ ClassConstructorRegistry.set(className, ctor);
31
+ }
32
+ export function resolveInstanceForClassName(className) {
33
+ const explicit = InstanceRegistry.get(className);
34
+ if (explicit)
35
+ return explicit;
36
+ const cached = AutoInstanceRegistry.get(className);
37
+ if (cached)
38
+ return cached;
39
+ const ctor = ClassConstructorRegistry.get(className);
40
+ if (ctor) {
41
+ const created = new ctor();
42
+ AutoInstanceRegistry.set(className, created);
43
+ return created;
44
+ }
45
+ return null;
46
+ }
47
+ export const ActiveContext = {
48
+ stack: [],
49
+ push(key) {
50
+ this.stack.push(key);
51
+ },
52
+ pop() {
53
+ const v = this.stack.pop();
54
+ return v ?? null;
55
+ },
56
+ set(key) {
57
+ // Back-compat alias (prefer push/pop).
58
+ this.push(key);
59
+ },
60
+ get() {
61
+ const v = this.stack[this.stack.length - 1];
62
+ return v ?? null;
63
+ },
64
+ clear() {
65
+ // Back-compat: clear entire stack (reset state).
66
+ this.stack = [];
67
+ },
68
+ };
69
+ export const ApiContext = {
70
+ currentEndpoint: null,
71
+ set(key) {
72
+ this.currentEndpoint = key;
73
+ },
74
+ get() {
75
+ return this.currentEndpoint;
76
+ },
77
+ clear() {
78
+ this.currentEndpoint = null;
79
+ },
80
+ };
81
+ export const LabelCapture = {
82
+ current: null,
83
+ capture(label) {
84
+ this.current = label;
85
+ },
86
+ read() {
87
+ return this.current;
88
+ },
89
+ clear() {
90
+ this.current = null;
91
+ },
92
+ };
93
+ export const ErrorCapture = {
94
+ current: null,
95
+ capture(label, error) {
96
+ this.current = { label, error };
97
+ },
98
+ read() {
99
+ return this.current;
100
+ },
101
+ hasCurrent() {
102
+ return this.current !== null;
103
+ },
104
+ clear() {
105
+ this.current = null;
106
+ },
107
+ };
108
+ /**
109
+ * Last `ApiReturn` payload per endpoint `fnKey`, for correlating express playground RPC
110
+ * with controller-level API semantics. Cleared per express invoke and on inspector reset.
111
+ */
112
+ const expressApiInvokeCaptureByEndpoint = new Map();
113
+ export function clearExpressApiInvokeCapture() {
114
+ expressApiInvokeCaptureByEndpoint.clear();
115
+ }
116
+ export function recordExpressApiInvokeCapture(endpointKey, payload) {
117
+ expressApiInvokeCaptureByEndpoint.set(endpointKey, payload);
118
+ }
119
+ export function readExpressApiInvokeCapture(endpointKey) {
120
+ return expressApiInvokeCaptureByEndpoint.get(endpointKey);
121
+ }
122
+ export const wsClients = new Set();
123
+ const inspectorBroadcastAls = new AsyncLocalStorage();
124
+ /** Optional second fan-out (e.g. Socket.IO); receives same object as native ws broadcast */
125
+ let broadcastSink = null;
126
+ export function setBroadcastSink(fn) {
127
+ broadcastSink = fn;
128
+ }
129
+ export function clearBroadcastSink() {
130
+ broadcastSink = null;
131
+ }
132
+ export function getInspectorBroadcastStore() {
133
+ return inspectorBroadcastAls.getStore();
134
+ }
135
+ /**
136
+ * Correlate subsequent `broadcast()` calls with a Socket.IO tab (or other sink).
137
+ * Default source `rpc` (not gated by HTTP inspector toggle). Use `http` from REST middleware.
138
+ */
139
+ export function runWithInspectorBroadcastTarget(socketId, fn, options) {
140
+ const source = options?.source ?? 'rpc';
141
+ return inspectorBroadcastAls.run({ socketId, source, correlationId: options?.correlationId }, fn);
142
+ }
143
+ /**
144
+ * Run within the current inspector broadcast store but with an updated producer fnKey.
145
+ * No-op if there is no active inspector store (i.e. no X-Socket-Id correlation).
146
+ */
147
+ export function runWithProducerFnKey(producerFnKey, fn) {
148
+ const store = getInspectorBroadcastStore();
149
+ if (!store)
150
+ return fn();
151
+ return inspectorBroadcastAls.run({ ...store, producerFnKey }, fn);
152
+ }
153
+ export const INSPECTOR_SOCKET_ID_HEADER = 'x-socket-id';
154
+ function firstHeaderValue(value) {
155
+ if (value === undefined)
156
+ return undefined;
157
+ const s = Array.isArray(value) ? value[0] : value;
158
+ const t = typeof s === 'string' ? s.trim() : '';
159
+ return t.length > 0 ? t : undefined;
160
+ }
161
+ /** Read Socket.IO correlation id from Express / Node request headers */
162
+ export function readInspectorSocketIdFromHeaders(headers) {
163
+ return firstHeaderValue(headers[INSPECTOR_SOCKET_ID_HEADER]);
164
+ }
165
+ export function broadcast(data) {
166
+ const msg = JSON.stringify(data);
167
+ for (const client of wsClients) {
168
+ if (client.readyState === WebSocket.OPEN) {
169
+ client.send(msg);
170
+ }
171
+ }
172
+ if (broadcastSink) {
173
+ try {
174
+ broadcastSink(data);
175
+ }
176
+ catch {
177
+ /* sink errors must not break native ws path */
178
+ }
179
+ }
180
+ }
181
+ export function broadcastReturnResolved(payload) {
182
+ const store = getInspectorBroadcastStore();
183
+ const correlationId = payload.correlationId ?? store?.correlationId;
184
+ broadcast({
185
+ ...payload,
186
+ ...(correlationId ? { correlationId } : {}),
187
+ protocolVersion: PROTOCOL_VERSION,
188
+ timestamp: new Date().toISOString(),
189
+ });
190
+ }
191
+ export function broadcastErrorThrown(payload) {
192
+ const store = getInspectorBroadcastStore();
193
+ const correlationId = payload.correlationId ?? store?.correlationId;
194
+ broadcast({
195
+ ...payload,
196
+ ...(correlationId ? { correlationId } : {}),
197
+ protocolVersion: PROTOCOL_VERSION,
198
+ timestamp: new Date().toISOString(),
199
+ });
200
+ }
201
+ export function broadcastApiResponse(payload) {
202
+ const store = getInspectorBroadcastStore();
203
+ const correlationId = payload.correlationId ?? store?.correlationId;
204
+ const producerFnKey = 'producerFnKey' in payload
205
+ ? payload.producerFnKey
206
+ : (store?.producerFnKey ?? undefined);
207
+ let safeBody = undefined;
208
+ if ('body' in payload) {
209
+ // Best-effort, size-limited JSON clone for inspector display.
210
+ // Prevents huge payloads from spamming the live inspector feed.
211
+ try {
212
+ const asJson = JSON.stringify(payload.body);
213
+ if (asJson.length <= 10_000) {
214
+ safeBody = JSON.parse(asJson);
215
+ }
216
+ else {
217
+ safeBody = { __omitted: 'body_too_large', bytes: asJson.length };
218
+ }
219
+ }
220
+ catch {
221
+ safeBody = { __omitted: 'body_unserializable' };
222
+ }
223
+ }
224
+ const out = {
225
+ ...payload,
226
+ ...(correlationId ? { correlationId } : {}),
227
+ ...(producerFnKey !== undefined ? { producerFnKey } : {}),
228
+ ...(safeBody !== undefined ? { body: safeBody } : {}),
229
+ protocolVersion: PROTOCOL_VERSION,
230
+ timestamp: new Date().toISOString(),
231
+ };
232
+ broadcast(out);
233
+ }
234
+ export function broadcastMiddlewareNext(payload) {
235
+ const store = getInspectorBroadcastStore();
236
+ const correlationId = payload.correlationId ?? store?.correlationId;
237
+ broadcast({
238
+ ...payload,
239
+ ...(correlationId ? { correlationId } : {}),
240
+ protocolVersion: PROTOCOL_VERSION,
241
+ timestamp: new Date().toISOString(),
242
+ });
243
+ }
244
+ export function broadcastJobProgress(payload) {
245
+ broadcast({
246
+ event: 'JOB_PROGRESS',
247
+ protocolVersion: PROTOCOL_VERSION,
248
+ timestamp: new Date().toISOString(),
249
+ ...payload,
250
+ });
251
+ }
252
+ /** Attach or clear a JSON Schema used by QA to validate RPC `result` for this `fnKey`. */
253
+ export function registerReturnJsonSchema(fnKey, schema) {
254
+ const entry = Registry.get(fnKey);
255
+ if (!entry) {
256
+ throw new Error(`registerReturnJsonSchema: unknown fnKey "${fnKey}"`);
257
+ }
258
+ entry.returnJsonSchema = schema;
259
+ }
260
+ /** Attach or clear a JSON Schema used to validate RPC `args` (whole tuple) for this `fnKey`. */
261
+ export function registerParamsJsonSchema(fnKey, schema) {
262
+ const entry = Registry.get(fnKey);
263
+ if (!entry) {
264
+ throw new Error(`registerParamsJsonSchema: unknown fnKey "${fnKey}"`);
265
+ }
266
+ entry.paramsJsonSchema = schema;
267
+ }
268
+ export function registerInstance(instance) {
269
+ if (typeof instance !== 'object' && typeof instance !== 'function')
270
+ return;
271
+ const name = typeof instance === 'object'
272
+ ? instance.constructor?.name
273
+ : instance.name;
274
+ if (!name)
275
+ return;
276
+ if (InstanceRegistry.has(name)) {
277
+ throw new Error(`registerInstance: duplicate instance name "${name}" (already registered). Use unique class names or register only once.`);
278
+ }
279
+ InstanceRegistry.set(name, instance);
280
+ }
281
+ /** Test-only: reset in-memory state */
282
+ export function resetInspectorState() {
283
+ clearHttpBridgeRegistry();
284
+ resetReturnJsonSchemaValidators();
285
+ resetParamsJsonSchemaValidators();
286
+ Registry.clear();
287
+ InstanceRegistry.clear();
288
+ AutoInstanceRegistry.clear();
289
+ ClassConstructorRegistry.clear();
290
+ ActiveContext.clear();
291
+ ApiContext.clear();
292
+ LabelCapture.clear();
293
+ ErrorCapture.clear();
294
+ clearExpressApiInvokeCapture();
295
+ wsClients.clear();
296
+ clearBroadcastSink();
297
+ resetRpcSerializationConfig();
298
+ resetInvokePolicy();
299
+ resetInvokeTimeoutMs();
300
+ resetSessionStore();
301
+ }
302
+ //# sourceMappingURL=registry-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-state.js","sourceRoot":"","sources":["../src/registry-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare function getType(value: unknown): string;
2
+ export declare function getShape(value: unknown, depth?: number): string;
3
+ export type Labeled<L extends string, T> = T & {
4
+ readonly __brand?: L;
5
+ };
6
+ /** Runtime behavior unchanged; inferred return type is `T` so catalog `declaredReturn` matches `getType`. */
7
+ export declare function Return<L extends string, T>(label: L, value: T): T;
8
+ export declare function Throw<L extends string>(label: L, error: Error): never;
9
+ export interface ApiPayload<T> {
10
+ statusCode: number;
11
+ body: T;
12
+ }
13
+ export declare function ApiReturn<L extends string, T>(label: L, statusCode: number, body: T): ApiPayload<T>;
14
+ //# sourceMappingURL=return.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"return.d.ts","sourceRoot":"","sources":["../src/return.ts"],"names":[],"mappings":"AAYA,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAe9C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CAkB1D;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAEvE,6GAA6G;AAC7G,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAsBjE;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAoBrE;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,CAAC,CAAA;CACP;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAC5C,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,GACL,UAAU,CAAC,CAAC,CAAC,CAqBf"}