@contractspec/lib.contracts 1.44.0

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 (528) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/_virtual/rolldown_runtime.js +37 -0
  4. package/dist/app-config/app-config.feature.d.ts +12 -0
  5. package/dist/app-config/app-config.feature.js +54 -0
  6. package/dist/app-config/branding.d.ts +55 -0
  7. package/dist/app-config/branding.js +0 -0
  8. package/dist/app-config/contracts.d.ts +245 -0
  9. package/dist/app-config/contracts.js +395 -0
  10. package/dist/app-config/docs/app-config.docblock.d.ts +6 -0
  11. package/dist/app-config/docs/app-config.docblock.js +21 -0
  12. package/dist/app-config/events.d.ts +122 -0
  13. package/dist/app-config/events.js +174 -0
  14. package/dist/app-config/index.d.ts +9 -0
  15. package/dist/app-config/index.js +8 -0
  16. package/dist/app-config/lifecycle-contracts.d.ts +273 -0
  17. package/dist/app-config/lifecycle-contracts.js +440 -0
  18. package/dist/app-config/lifecycle.d.ts +27 -0
  19. package/dist/app-config/lifecycle.js +0 -0
  20. package/dist/app-config/runtime.d.ts +120 -0
  21. package/dist/app-config/runtime.js +617 -0
  22. package/dist/app-config/spec.d.ts +173 -0
  23. package/dist/app-config/spec.js +36 -0
  24. package/dist/app-config/validation.d.ts +49 -0
  25. package/dist/app-config/validation.js +538 -0
  26. package/dist/capabilities/capabilities.d.ts +48 -0
  27. package/dist/capabilities/capabilities.js +50 -0
  28. package/dist/capabilities/docs/capabilities.docblock.d.ts +6 -0
  29. package/dist/capabilities/docs/capabilities.docblock.js +21 -0
  30. package/dist/capabilities/index.d.ts +3 -0
  31. package/dist/capabilities/index.js +4 -0
  32. package/dist/capabilities/openbanking.d.ts +10 -0
  33. package/dist/capabilities/openbanking.js +92 -0
  34. package/dist/client/index.d.ts +6 -0
  35. package/dist/client/index.js +9 -0
  36. package/dist/client/react/drivers/rn-reusables.d.ts +22 -0
  37. package/dist/client/react/drivers/rn-reusables.js +21 -0
  38. package/dist/client/react/drivers/shadcn.d.ts +12 -0
  39. package/dist/client/react/drivers/shadcn.js +11 -0
  40. package/dist/client/react/feature-render.d.ts +23 -0
  41. package/dist/client/react/feature-render.js +44 -0
  42. package/dist/client/react/form-render.d.ts +92 -0
  43. package/dist/client/react/form-render.js +298 -0
  44. package/dist/client/react/index.d.ts +5 -0
  45. package/dist/client/react/index.js +8 -0
  46. package/dist/contract-registry/index.d.ts +3 -0
  47. package/dist/contract-registry/index.js +3 -0
  48. package/dist/contract-registry/schemas.d.ts +124 -0
  49. package/dist/contract-registry/schemas.js +61 -0
  50. package/dist/contract-registry/types.d.ts +46 -0
  51. package/dist/contract-registry/types.js +0 -0
  52. package/dist/data-views/data-views.d.ts +5 -0
  53. package/dist/data-views/data-views.js +4 -0
  54. package/dist/data-views/docs/data-views.docblock.d.ts +6 -0
  55. package/dist/data-views/docs/data-views.docblock.js +21 -0
  56. package/dist/data-views/index.d.ts +4 -0
  57. package/dist/data-views/index.js +4 -0
  58. package/dist/data-views/query-generator.d.ts +40 -0
  59. package/dist/data-views/query-generator.js +48 -0
  60. package/dist/data-views/registry.d.ts +51 -0
  61. package/dist/data-views/registry.js +82 -0
  62. package/dist/data-views/runtime.d.ts +28 -0
  63. package/dist/data-views/runtime.js +39 -0
  64. package/dist/data-views/spec.d.ts +32 -0
  65. package/dist/data-views/spec.js +10 -0
  66. package/dist/data-views/types.d.ts +157 -0
  67. package/dist/data-views/types.js +0 -0
  68. package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +6 -0
  69. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +17 -0
  70. package/dist/docs/index.d.ts +6 -0
  71. package/dist/docs/index.js +29 -0
  72. package/dist/docs/meta.docs.d.ts +6 -0
  73. package/dist/docs/meta.docs.js +29 -0
  74. package/dist/docs/presentations.d.ts +33 -0
  75. package/dist/docs/presentations.js +64 -0
  76. package/dist/docs/registry.d.ts +23 -0
  77. package/dist/docs/registry.js +51 -0
  78. package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +6 -0
  79. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +81 -0
  80. package/dist/docs/tech/contracts/README.docblock.d.ts +6 -0
  81. package/dist/docs/tech/contracts/README.docblock.js +21 -0
  82. package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +6 -0
  83. package/dist/docs/tech/contracts/create-subscription.docblock.js +21 -0
  84. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +6 -0
  85. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +21 -0
  86. package/dist/docs/tech/contracts/migrations.docblock.d.ts +6 -0
  87. package/dist/docs/tech/contracts/migrations.docblock.js +21 -0
  88. package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +6 -0
  89. package/dist/docs/tech/contracts/openapi-export.docblock.js +58 -0
  90. package/dist/docs/tech/contracts/openapi-import.docblock.d.ts +6 -0
  91. package/dist/docs/tech/contracts/openapi-import.docblock.js +65 -0
  92. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +6 -0
  93. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +21 -0
  94. package/dist/docs/tech/contracts/overlays.docblock.d.ts +6 -0
  95. package/dist/docs/tech/contracts/overlays.docblock.js +21 -0
  96. package/dist/docs/tech/contracts/tests.docblock.d.ts +6 -0
  97. package/dist/docs/tech/contracts/tests.docblock.js +21 -0
  98. package/dist/docs/tech/contracts/themes.docblock.d.ts +6 -0
  99. package/dist/docs/tech/contracts/themes.docblock.js +21 -0
  100. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +6 -0
  101. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +21 -0
  102. package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +6 -0
  103. package/dist/docs/tech/lifecycle-stage-system.docblock.js +17 -0
  104. package/dist/docs/tech/llm/llm-integration.docblock.d.ts +7 -0
  105. package/dist/docs/tech/llm/llm-integration.docblock.js +358 -0
  106. package/dist/docs/tech/mcp-endpoints.docblock.d.ts +6 -0
  107. package/dist/docs/tech/mcp-endpoints.docblock.js +38 -0
  108. package/dist/docs/tech/presentation-runtime.docblock.d.ts +6 -0
  109. package/dist/docs/tech/presentation-runtime.docblock.js +17 -0
  110. package/dist/docs/tech/schema/README.docblock.d.ts +6 -0
  111. package/dist/docs/tech/schema/README.docblock.js +21 -0
  112. package/dist/docs/tech/studio/learning-events.docblock.d.ts +6 -0
  113. package/dist/docs/tech/studio/learning-events.docblock.js +49 -0
  114. package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +6 -0
  115. package/dist/docs/tech/studio/learning-journeys.docblock.js +80 -0
  116. package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +6 -0
  117. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +85 -0
  118. package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +6 -0
  119. package/dist/docs/tech/studio/project-access-teams.docblock.js +46 -0
  120. package/dist/docs/tech/studio/project-routing.docblock.d.ts +6 -0
  121. package/dist/docs/tech/studio/project-routing.docblock.js +68 -0
  122. package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +6 -0
  123. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +41 -0
  124. package/dist/docs/tech/studio/team-invitations.docblock.d.ts +6 -0
  125. package/dist/docs/tech/studio/team-invitations.docblock.js +70 -0
  126. package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +6 -0
  127. package/dist/docs/tech/studio/workspace-ops.docblock.js +48 -0
  128. package/dist/docs/tech/studio/workspaces.docblock.d.ts +6 -0
  129. package/dist/docs/tech/studio/workspaces.docblock.js +63 -0
  130. package/dist/docs/tech/telemetry-ingest.docblock.d.ts +6 -0
  131. package/dist/docs/tech/telemetry-ingest.docblock.js +156 -0
  132. package/dist/docs/tech/templates/runtime.docblock.d.ts +6 -0
  133. package/dist/docs/tech/templates/runtime.docblock.js +21 -0
  134. package/dist/docs/tech/vscode-extension.docblock.d.ts +6 -0
  135. package/dist/docs/tech/vscode-extension.docblock.js +102 -0
  136. package/dist/docs/tech-contracts.docs.d.ts +6 -0
  137. package/dist/docs/tech-contracts.docs.js +96 -0
  138. package/dist/docs/types.d.ts +41 -0
  139. package/dist/docs/types.js +0 -0
  140. package/dist/events.d.ts +47 -0
  141. package/dist/events.js +19 -0
  142. package/dist/experiments/docs/experiments.docblock.d.ts +6 -0
  143. package/dist/experiments/docs/experiments.docblock.js +21 -0
  144. package/dist/experiments/evaluator.d.ts +37 -0
  145. package/dist/experiments/evaluator.js +101 -0
  146. package/dist/experiments/spec-resolver.d.ts +17 -0
  147. package/dist/experiments/spec-resolver.js +0 -0
  148. package/dist/experiments/spec.d.ts +82 -0
  149. package/dist/experiments/spec.js +33 -0
  150. package/dist/features/index.d.ts +5 -0
  151. package/dist/features/index.js +5 -0
  152. package/dist/features/install.d.ts +22 -0
  153. package/dist/features/install.js +36 -0
  154. package/dist/features/registry.d.ts +26 -0
  155. package/dist/features/registry.js +49 -0
  156. package/dist/features/types.d.ts +88 -0
  157. package/dist/features/types.js +0 -0
  158. package/dist/features/validation.d.ts +8 -0
  159. package/dist/features/validation.js +14 -0
  160. package/dist/forms/docs/forms.docblock.d.ts +6 -0
  161. package/dist/forms/docs/forms.docblock.js +21 -0
  162. package/dist/forms/forms.d.ts +266 -0
  163. package/dist/forms/forms.js +146 -0
  164. package/dist/forms/index.d.ts +2 -0
  165. package/dist/forms/index.js +3 -0
  166. package/dist/index.d.ts +147 -0
  167. package/dist/index.js +121 -0
  168. package/dist/install.d.ts +77 -0
  169. package/dist/install.js +40 -0
  170. package/dist/integrations/binding.d.ts +17 -0
  171. package/dist/integrations/binding.js +0 -0
  172. package/dist/integrations/connection.d.ts +51 -0
  173. package/dist/integrations/connection.js +0 -0
  174. package/dist/integrations/docs/integrations.docblock.d.ts +6 -0
  175. package/dist/integrations/docs/integrations.docblock.js +94 -0
  176. package/dist/integrations/health.d.ts +21 -0
  177. package/dist/integrations/health.js +69 -0
  178. package/dist/integrations/index.d.ts +34 -0
  179. package/dist/integrations/index.js +23 -0
  180. package/dist/integrations/integrations.feature.d.ts +12 -0
  181. package/dist/integrations/integrations.feature.js +60 -0
  182. package/dist/integrations/openbanking/contracts/accounts.d.ts +289 -0
  183. package/dist/integrations/openbanking/contracts/accounts.js +236 -0
  184. package/dist/integrations/openbanking/contracts/balances.d.ts +165 -0
  185. package/dist/integrations/openbanking/contracts/balances.js +166 -0
  186. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  187. package/dist/integrations/openbanking/contracts/index.js +12 -0
  188. package/dist/integrations/openbanking/contracts/transactions.d.ts +213 -0
  189. package/dist/integrations/openbanking/contracts/transactions.js +217 -0
  190. package/dist/integrations/openbanking/guards.d.ts +12 -0
  191. package/dist/integrations/openbanking/guards.js +33 -0
  192. package/dist/integrations/openbanking/models.d.ts +228 -0
  193. package/dist/integrations/openbanking/models.js +240 -0
  194. package/dist/integrations/openbanking/openbanking.feature.d.ts +12 -0
  195. package/dist/integrations/openbanking/openbanking.feature.js +69 -0
  196. package/dist/integrations/openbanking/telemetry.d.ts +15 -0
  197. package/dist/integrations/openbanking/telemetry.js +39 -0
  198. package/dist/integrations/operations.d.ts +437 -0
  199. package/dist/integrations/operations.js +392 -0
  200. package/dist/integrations/providers/calendar.d.ts +78 -0
  201. package/dist/integrations/providers/calendar.js +0 -0
  202. package/dist/integrations/providers/elevenlabs.d.ts +7 -0
  203. package/dist/integrations/providers/elevenlabs.js +55 -0
  204. package/dist/integrations/providers/email.d.ts +86 -0
  205. package/dist/integrations/providers/email.js +0 -0
  206. package/dist/integrations/providers/embedding.d.ts +24 -0
  207. package/dist/integrations/providers/embedding.js +0 -0
  208. package/dist/integrations/providers/gcs-storage.d.ts +7 -0
  209. package/dist/integrations/providers/gcs-storage.js +78 -0
  210. package/dist/integrations/providers/gmail.d.ts +7 -0
  211. package/dist/integrations/providers/gmail.js +90 -0
  212. package/dist/integrations/providers/google-calendar.d.ts +7 -0
  213. package/dist/integrations/providers/google-calendar.js +69 -0
  214. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +20 -0
  215. package/dist/integrations/providers/impls/elevenlabs-voice.js +95 -0
  216. package/dist/integrations/providers/impls/gcs-storage.d.ts +24 -0
  217. package/dist/integrations/providers/impls/gcs-storage.js +88 -0
  218. package/dist/integrations/providers/impls/gmail-inbound.d.ts +26 -0
  219. package/dist/integrations/providers/impls/gmail-inbound.js +200 -0
  220. package/dist/integrations/providers/impls/gmail-outbound.d.ts +18 -0
  221. package/dist/integrations/providers/impls/gmail-outbound.js +105 -0
  222. package/dist/integrations/providers/impls/google-calendar.d.ts +23 -0
  223. package/dist/integrations/providers/impls/google-calendar.js +154 -0
  224. package/dist/integrations/providers/impls/index.d.ts +15 -0
  225. package/dist/integrations/providers/impls/index.js +16 -0
  226. package/dist/integrations/providers/impls/mistral-embedding.d.ts +23 -0
  227. package/dist/integrations/providers/impls/mistral-embedding.js +41 -0
  228. package/dist/integrations/providers/impls/mistral-llm.d.ts +31 -0
  229. package/dist/integrations/providers/impls/mistral-llm.js +247 -0
  230. package/dist/integrations/providers/impls/postmark-email.d.ts +19 -0
  231. package/dist/integrations/providers/impls/postmark-email.js +55 -0
  232. package/dist/integrations/providers/impls/powens-client.d.ts +124 -0
  233. package/dist/integrations/providers/impls/powens-client.js +171 -0
  234. package/dist/integrations/providers/impls/powens-openbanking.d.ts +27 -0
  235. package/dist/integrations/providers/impls/powens-openbanking.js +218 -0
  236. package/dist/integrations/providers/impls/provider-factory.d.ts +26 -0
  237. package/dist/integrations/providers/impls/provider-factory.js +145 -0
  238. package/dist/integrations/providers/impls/qdrant-vector.d.ts +24 -0
  239. package/dist/integrations/providers/impls/qdrant-vector.js +69 -0
  240. package/dist/integrations/providers/impls/stripe-payments.d.ts +28 -0
  241. package/dist/integrations/providers/impls/stripe-payments.js +202 -0
  242. package/dist/integrations/providers/impls/twilio-sms.d.ts +20 -0
  243. package/dist/integrations/providers/impls/twilio-sms.js +58 -0
  244. package/dist/integrations/providers/index.d.ts +22 -0
  245. package/dist/integrations/providers/index.js +13 -0
  246. package/dist/integrations/providers/llm.d.ts +82 -0
  247. package/dist/integrations/providers/llm.js +0 -0
  248. package/dist/integrations/providers/mistral.d.ts +7 -0
  249. package/dist/integrations/providers/mistral.js +71 -0
  250. package/dist/integrations/providers/openbanking.d.ts +128 -0
  251. package/dist/integrations/providers/openbanking.js +0 -0
  252. package/dist/integrations/providers/payments.d.ts +109 -0
  253. package/dist/integrations/providers/payments.js +0 -0
  254. package/dist/integrations/providers/postmark.d.ts +7 -0
  255. package/dist/integrations/providers/postmark.js +71 -0
  256. package/dist/integrations/providers/powens.d.ts +7 -0
  257. package/dist/integrations/providers/powens.js +119 -0
  258. package/dist/integrations/providers/qdrant.d.ts +7 -0
  259. package/dist/integrations/providers/qdrant.js +76 -0
  260. package/dist/integrations/providers/registry.d.ts +11 -0
  261. package/dist/integrations/providers/registry.js +34 -0
  262. package/dist/integrations/providers/sms.d.ts +34 -0
  263. package/dist/integrations/providers/sms.js +0 -0
  264. package/dist/integrations/providers/storage.d.ts +60 -0
  265. package/dist/integrations/providers/storage.js +0 -0
  266. package/dist/integrations/providers/stripe.d.ts +7 -0
  267. package/dist/integrations/providers/stripe.js +86 -0
  268. package/dist/integrations/providers/twilio-sms.d.ts +7 -0
  269. package/dist/integrations/providers/twilio-sms.js +64 -0
  270. package/dist/integrations/providers/vector-store.d.ts +43 -0
  271. package/dist/integrations/providers/vector-store.js +0 -0
  272. package/dist/integrations/providers/voice.d.ts +34 -0
  273. package/dist/integrations/providers/voice.js +0 -0
  274. package/dist/integrations/runtime.d.ts +99 -0
  275. package/dist/integrations/runtime.js +186 -0
  276. package/dist/integrations/secrets/aws-secret-manager.d.ts +31 -0
  277. package/dist/integrations/secrets/aws-secret-manager.js +231 -0
  278. package/dist/integrations/secrets/env-secret-provider.d.ts +31 -0
  279. package/dist/integrations/secrets/env-secret-provider.js +81 -0
  280. package/dist/integrations/secrets/gcp-secret-manager.d.ts +32 -0
  281. package/dist/integrations/secrets/gcp-secret-manager.js +229 -0
  282. package/dist/integrations/secrets/index.d.ts +7 -0
  283. package/dist/integrations/secrets/index.js +8 -0
  284. package/dist/integrations/secrets/manager.d.ts +47 -0
  285. package/dist/integrations/secrets/manager.js +103 -0
  286. package/dist/integrations/secrets/provider.d.ts +52 -0
  287. package/dist/integrations/secrets/provider.js +58 -0
  288. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +38 -0
  289. package/dist/integrations/secrets/scaleway-secret-manager.js +247 -0
  290. package/dist/integrations/secrets-types.d.ts +17 -0
  291. package/dist/integrations/secrets-types.js +0 -0
  292. package/dist/integrations/spec.d.ts +75 -0
  293. package/dist/integrations/spec.js +39 -0
  294. package/dist/jobs/define-job.d.ts +18 -0
  295. package/dist/jobs/define-job.js +16 -0
  296. package/dist/jobs/gcp-cloud-tasks.d.ts +41 -0
  297. package/dist/jobs/gcp-cloud-tasks.js +53 -0
  298. package/dist/jobs/gcp-pubsub.d.ts +25 -0
  299. package/dist/jobs/gcp-pubsub.js +39 -0
  300. package/dist/jobs/handlers/gmail-sync-handler.d.ts +9 -0
  301. package/dist/jobs/handlers/gmail-sync-handler.js +9 -0
  302. package/dist/jobs/handlers/index.d.ts +9 -0
  303. package/dist/jobs/handlers/index.js +12 -0
  304. package/dist/jobs/handlers/ping-handler.d.ts +10 -0
  305. package/dist/jobs/handlers/ping-handler.js +15 -0
  306. package/dist/jobs/handlers/storage-document-handler.d.ts +12 -0
  307. package/dist/jobs/handlers/storage-document-handler.js +14 -0
  308. package/dist/jobs/index.d.ts +3 -0
  309. package/dist/jobs/index.js +4 -0
  310. package/dist/jobs/memory-queue.d.ts +18 -0
  311. package/dist/jobs/memory-queue.js +71 -0
  312. package/dist/jobs/queue.d.ts +131 -0
  313. package/dist/jobs/queue.js +33 -0
  314. package/dist/jobs/scaleway-sqs-queue.d.ts +30 -0
  315. package/dist/jobs/scaleway-sqs-queue.js +153 -0
  316. package/dist/jsonschema.d.ts +27 -0
  317. package/dist/jsonschema.js +32 -0
  318. package/dist/knowledge/binding.d.ts +25 -0
  319. package/dist/knowledge/binding.js +0 -0
  320. package/dist/knowledge/docs/knowledge.docblock.d.ts +6 -0
  321. package/dist/knowledge/docs/knowledge.docblock.js +21 -0
  322. package/dist/knowledge/index.d.ts +11 -0
  323. package/dist/knowledge/index.js +10 -0
  324. package/dist/knowledge/ingestion/document-processor.d.ts +24 -0
  325. package/dist/knowledge/ingestion/document-processor.js +54 -0
  326. package/dist/knowledge/ingestion/embedding-service.d.ts +12 -0
  327. package/dist/knowledge/ingestion/embedding-service.js +25 -0
  328. package/dist/knowledge/ingestion/gmail-adapter.d.ts +18 -0
  329. package/dist/knowledge/ingestion/gmail-adapter.js +51 -0
  330. package/dist/knowledge/ingestion/index.d.ts +6 -0
  331. package/dist/knowledge/ingestion/index.js +7 -0
  332. package/dist/knowledge/ingestion/storage-adapter.d.ts +15 -0
  333. package/dist/knowledge/ingestion/storage-adapter.js +26 -0
  334. package/dist/knowledge/ingestion/vector-indexer.d.ts +18 -0
  335. package/dist/knowledge/ingestion/vector-indexer.js +32 -0
  336. package/dist/knowledge/knowledge.feature.d.ts +12 -0
  337. package/dist/knowledge/knowledge.feature.js +61 -0
  338. package/dist/knowledge/operations.d.ts +318 -0
  339. package/dist/knowledge/operations.js +321 -0
  340. package/dist/knowledge/query/index.d.ts +2 -0
  341. package/dist/knowledge/query/index.js +3 -0
  342. package/dist/knowledge/query/service.d.ts +29 -0
  343. package/dist/knowledge/query/service.js +65 -0
  344. package/dist/knowledge/runtime.d.ts +32 -0
  345. package/dist/knowledge/runtime.js +49 -0
  346. package/dist/knowledge/source.d.ts +32 -0
  347. package/dist/knowledge/source.js +0 -0
  348. package/dist/knowledge/spaces/email-threads.d.ts +7 -0
  349. package/dist/knowledge/spaces/email-threads.js +37 -0
  350. package/dist/knowledge/spaces/financial-docs.d.ts +7 -0
  351. package/dist/knowledge/spaces/financial-docs.js +37 -0
  352. package/dist/knowledge/spaces/financial-overview.d.ts +7 -0
  353. package/dist/knowledge/spaces/financial-overview.js +41 -0
  354. package/dist/knowledge/spaces/index.d.ts +7 -0
  355. package/dist/knowledge/spaces/index.js +8 -0
  356. package/dist/knowledge/spaces/product-canon.d.ts +7 -0
  357. package/dist/knowledge/spaces/product-canon.js +37 -0
  358. package/dist/knowledge/spaces/support-faq.d.ts +7 -0
  359. package/dist/knowledge/spaces/support-faq.js +40 -0
  360. package/dist/knowledge/spaces/uploaded-docs.d.ts +7 -0
  361. package/dist/knowledge/spaces/uploaded-docs.js +37 -0
  362. package/dist/knowledge/spec.d.ts +48 -0
  363. package/dist/knowledge/spec.js +39 -0
  364. package/dist/llm/exporters.d.ts +70 -0
  365. package/dist/llm/exporters.js +542 -0
  366. package/dist/llm/index.d.ts +4 -0
  367. package/dist/llm/index.js +4 -0
  368. package/dist/llm/prompts.d.ts +52 -0
  369. package/dist/llm/prompts.js +410 -0
  370. package/dist/llm/types.d.ts +215 -0
  371. package/dist/llm/types.js +0 -0
  372. package/dist/markdown.d.ts +22 -0
  373. package/dist/markdown.js +119 -0
  374. package/dist/migrations.d.ts +52 -0
  375. package/dist/migrations.js +33 -0
  376. package/dist/model-registry.d.ts +13 -0
  377. package/dist/model-registry.js +33 -0
  378. package/dist/onboarding-base.d.ts +138 -0
  379. package/dist/onboarding-base.js +195 -0
  380. package/dist/openapi.d.ts +31 -0
  381. package/dist/openapi.js +75 -0
  382. package/dist/operations/index.d.ts +3 -0
  383. package/dist/operations/index.js +4 -0
  384. package/dist/operations/operation.d.ts +186 -0
  385. package/dist/operations/operation.js +35 -0
  386. package/dist/operations/registry.d.ts +103 -0
  387. package/dist/operations/registry.js +252 -0
  388. package/dist/ownership.d.ts +84 -0
  389. package/dist/ownership.js +38 -0
  390. package/dist/policy/docs/policy.docblock.d.ts +6 -0
  391. package/dist/policy/docs/policy.docblock.js +21 -0
  392. package/dist/policy/engine.d.ts +40 -0
  393. package/dist/policy/engine.js +223 -0
  394. package/dist/policy/index.d.ts +5 -0
  395. package/dist/policy/index.js +5 -0
  396. package/dist/policy/opa-adapter.d.ts +45 -0
  397. package/dist/policy/opa-adapter.js +71 -0
  398. package/dist/policy/registry.d.ts +9 -0
  399. package/dist/policy/registry.js +11 -0
  400. package/dist/policy/spec.d.ts +103 -0
  401. package/dist/policy/spec.js +0 -0
  402. package/dist/presentations/docs/presentations-conventions.docblock.d.ts +6 -0
  403. package/dist/presentations/docs/presentations-conventions.docblock.js +21 -0
  404. package/dist/presentations/index.d.ts +4 -0
  405. package/dist/presentations/index.js +5 -0
  406. package/dist/presentations/presentations.d.ts +50 -0
  407. package/dist/presentations/presentations.js +7 -0
  408. package/dist/presentations/registry.d.ts +10 -0
  409. package/dist/presentations/registry.js +12 -0
  410. package/dist/presentations/transform-engine.d.ts +66 -0
  411. package/dist/presentations/transform-engine.js +282 -0
  412. package/dist/prompt.d.ts +60 -0
  413. package/dist/prompt.js +10 -0
  414. package/dist/promptRegistry.d.ts +15 -0
  415. package/dist/promptRegistry.js +34 -0
  416. package/dist/regenerator/adapters.d.ts +19 -0
  417. package/dist/regenerator/adapters.js +0 -0
  418. package/dist/regenerator/docs/regenerator.docblock.d.ts +6 -0
  419. package/dist/regenerator/docs/regenerator.docblock.js +21 -0
  420. package/dist/regenerator/executor.d.ts +70 -0
  421. package/dist/regenerator/executor.js +86 -0
  422. package/dist/regenerator/index.d.ts +7 -0
  423. package/dist/regenerator/index.js +6 -0
  424. package/dist/regenerator/service.d.ts +33 -0
  425. package/dist/regenerator/service.js +93 -0
  426. package/dist/regenerator/sinks.d.ts +26 -0
  427. package/dist/regenerator/sinks.js +32 -0
  428. package/dist/regenerator/types.d.ts +107 -0
  429. package/dist/regenerator/types.js +0 -0
  430. package/dist/regenerator/utils.d.ts +9 -0
  431. package/dist/regenerator/utils.js +51 -0
  432. package/dist/registry-utils.d.ts +106 -0
  433. package/dist/registry-utils.js +122 -0
  434. package/dist/registry.d.ts +31 -0
  435. package/dist/registry.js +61 -0
  436. package/dist/resources.d.ts +64 -0
  437. package/dist/resources.js +50 -0
  438. package/dist/schema-to-markdown.d.ts +54 -0
  439. package/dist/schema-to-markdown.js +217 -0
  440. package/dist/server/contracts-adapter-hydration.d.ts +15 -0
  441. package/dist/server/contracts-adapter-hydration.js +41 -0
  442. package/dist/server/contracts-adapter-input.d.ts +9 -0
  443. package/dist/server/contracts-adapter-input.js +83 -0
  444. package/dist/server/graphql-pothos.d.ts +31 -0
  445. package/dist/server/graphql-pothos.js +134 -0
  446. package/dist/server/index.d.ts +9 -0
  447. package/dist/server/index.js +10 -0
  448. package/dist/server/mcp/createMcpServer.d.ts +15 -0
  449. package/dist/server/mcp/createMcpServer.js +27 -0
  450. package/dist/server/mcp/mcpTypes.d.ts +27 -0
  451. package/dist/server/mcp/mcpTypes.js +0 -0
  452. package/dist/server/mcp/registerPresentations.d.ts +7 -0
  453. package/dist/server/mcp/registerPresentations.js +63 -0
  454. package/dist/server/mcp/registerPrompts.d.ts +8 -0
  455. package/dist/server/mcp/registerPrompts.js +37 -0
  456. package/dist/server/mcp/registerResources.d.ts +8 -0
  457. package/dist/server/mcp/registerResources.js +35 -0
  458. package/dist/server/mcp/registerTools.d.ts +8 -0
  459. package/dist/server/mcp/registerTools.js +22 -0
  460. package/dist/server/provider-mcp.d.ts +2 -0
  461. package/dist/server/provider-mcp.js +3 -0
  462. package/dist/server/rest-elysia.d.ts +40 -0
  463. package/dist/server/rest-elysia.js +20 -0
  464. package/dist/server/rest-express.d.ts +16 -0
  465. package/dist/server/rest-express.js +36 -0
  466. package/dist/server/rest-generic.d.ts +32 -0
  467. package/dist/server/rest-generic.js +124 -0
  468. package/dist/server/rest-next-app.d.ts +35 -0
  469. package/dist/server/rest-next-app.js +38 -0
  470. package/dist/server/rest-next-mcp.d.ts +11 -0
  471. package/dist/server/rest-next-mcp.js +45 -0
  472. package/dist/server/rest-next-pages.d.ts +9 -0
  473. package/dist/server/rest-next-pages.js +22 -0
  474. package/dist/telemetry/anomaly.d.ts +27 -0
  475. package/dist/telemetry/anomaly.js +48 -0
  476. package/dist/telemetry/docs/telemetry.docblock.d.ts +6 -0
  477. package/dist/telemetry/docs/telemetry.docblock.js +21 -0
  478. package/dist/telemetry/index.d.ts +4 -0
  479. package/dist/telemetry/index.js +5 -0
  480. package/dist/telemetry/spec.d.ts +91 -0
  481. package/dist/telemetry/spec.js +69 -0
  482. package/dist/telemetry/tracker.d.ts +51 -0
  483. package/dist/telemetry/tracker.js +76 -0
  484. package/dist/tests/index.d.ts +3 -0
  485. package/dist/tests/index.js +4 -0
  486. package/dist/tests/runner.d.ts +43 -0
  487. package/dist/tests/runner.js +150 -0
  488. package/dist/tests/spec.d.ts +81 -0
  489. package/dist/tests/spec.js +33 -0
  490. package/dist/themes.d.ts +53 -0
  491. package/dist/themes.js +39 -0
  492. package/dist/translations/catalog.d.ts +28 -0
  493. package/dist/translations/catalog.js +0 -0
  494. package/dist/translations/tenant.d.ts +15 -0
  495. package/dist/translations/tenant.js +0 -0
  496. package/dist/types.d.ts +92 -0
  497. package/dist/types.js +0 -0
  498. package/dist/workflow/adapters/db-adapter.d.ts +46 -0
  499. package/dist/workflow/adapters/db-adapter.js +83 -0
  500. package/dist/workflow/adapters/file-adapter.d.ts +14 -0
  501. package/dist/workflow/adapters/file-adapter.js +11 -0
  502. package/dist/workflow/adapters/index.d.ts +4 -0
  503. package/dist/workflow/adapters/index.js +5 -0
  504. package/dist/workflow/adapters/memory-store.d.ts +18 -0
  505. package/dist/workflow/adapters/memory-store.js +58 -0
  506. package/dist/workflow/expression.d.ts +9 -0
  507. package/dist/workflow/expression.js +99 -0
  508. package/dist/workflow/index.d.ts +10 -0
  509. package/dist/workflow/index.js +9 -0
  510. package/dist/workflow/overview.docblock.d.ts +6 -0
  511. package/dist/workflow/overview.docblock.js +21 -0
  512. package/dist/workflow/runner.d.ts +75 -0
  513. package/dist/workflow/runner.js +337 -0
  514. package/dist/workflow/sla-monitor.d.ts +20 -0
  515. package/dist/workflow/sla-monitor.js +47 -0
  516. package/dist/workflow/spec.d.ts +106 -0
  517. package/dist/workflow/spec.js +55 -0
  518. package/dist/workflow/state.d.ts +35 -0
  519. package/dist/workflow/state.js +0 -0
  520. package/dist/workflow/validation.d.ts +29 -0
  521. package/dist/workflow/validation.js +176 -0
  522. package/dist/workspace-config/contractsrc-schema.d.ts +862 -0
  523. package/dist/workspace-config/contractsrc-schema.js +281 -0
  524. package/dist/workspace-config/index.d.ts +2 -0
  525. package/dist/workspace-config/index.js +3 -0
  526. package/dist/workspace-config/workspace-config.docblock.d.ts +6 -0
  527. package/dist/workspace-config/workspace-config.docblock.js +45 -0
  528. package/package.json +598 -0
@@ -0,0 +1,83 @@
1
+ import { isSchemaModel } from "@contractspec/lib.schema";
2
+
3
+ //#region src/server/contracts-adapter-input.ts
4
+ function isFieldType(x) {
5
+ return typeof x?.getPothos === "function";
6
+ }
7
+ function isEnumType(x) {
8
+ return typeof x?.getEnumValues === "function" && typeof x?.getPothos === "function";
9
+ }
10
+ function mapScalarName(name) {
11
+ if (name === "Boolean_unsecure") return "Boolean";
12
+ if (name === "ID_unsecure") return "ID";
13
+ if (name === "String_unsecure") return "String";
14
+ if (name === "Int_unsecure") return "Int";
15
+ if (name === "Float_unsecure") return "Float";
16
+ return name;
17
+ }
18
+ function createInputTypeBuilder(builder) {
19
+ const inputTypeCache = /* @__PURE__ */ new Map();
20
+ const enumTypeCache = /* @__PURE__ */ new Set();
21
+ function registerEnumsForModel(model) {
22
+ const entries = Object.entries(model.config.fields);
23
+ for (const [, field] of entries) {
24
+ const fieldType = field.type;
25
+ if (isSchemaModel(fieldType)) registerEnumsForModel(fieldType);
26
+ else if (isEnumType(field.type)) {
27
+ const enumObj = field.type;
28
+ const name = enumObj.getName?.() ?? enumObj.getPothos().name;
29
+ if (!enumTypeCache.has(name)) {
30
+ builder.enumType(name, { values: enumObj.getEnumValues() });
31
+ enumTypeCache.add(name);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ function ensureInputTypeForModel(model) {
37
+ const typeName = String(model.config?.name ?? "Input");
38
+ const cached = inputTypeCache.get(typeName);
39
+ if (cached) return cached;
40
+ registerEnumsForModel(model);
41
+ const created = builder.inputType(model.getPothosInput(), { fields: (t) => {
42
+ const entries = Object.entries(model.config.fields);
43
+ const acc = {};
44
+ for (const [key, field] of entries) {
45
+ const fieldType = field.type;
46
+ if (isSchemaModel(fieldType)) {
47
+ const nested = ensureInputTypeForModel(fieldType);
48
+ const typeRef = field.isArray ? [nested] : nested;
49
+ acc[key] = t.field({
50
+ type: typeRef,
51
+ required: !field.isOptional
52
+ });
53
+ } else if (isFieldType(field.type)) {
54
+ const typeName$1 = mapScalarName(String(field.type.getPothos().name));
55
+ const typeRef = field.isArray ? [typeName$1] : typeName$1;
56
+ acc[key] = t.field({
57
+ type: typeRef,
58
+ required: !field.isOptional
59
+ });
60
+ } else {
61
+ const typeRef = field.isArray ? ["JSON"] : "JSON";
62
+ acc[key] = t.field({
63
+ type: typeRef,
64
+ required: !field.isOptional
65
+ });
66
+ }
67
+ }
68
+ return acc;
69
+ } });
70
+ inputTypeCache.set(typeName, created);
71
+ return created;
72
+ }
73
+ function buildInputFieldArgs(model) {
74
+ if (!model) return null;
75
+ if (!isSchemaModel(model)) return null;
76
+ if (!model.config?.fields || Object.keys(model.config.fields).length === 0) return null;
77
+ return ensureInputTypeForModel(model);
78
+ }
79
+ return { buildInputFieldArgs };
80
+ }
81
+
82
+ //#endregion
83
+ export { createInputTypeBuilder };
@@ -0,0 +1,31 @@
1
+ import { ResourceRegistry } from "../resources.js";
2
+ import { OperationSpecRegistry } from "../operations/registry.js";
3
+ import "@pothos/plugin-prisma";
4
+ import "@pothos/plugin-complexity";
5
+ import "@pothos/plugin-relay";
6
+ import "@pothos/plugin-dataloader";
7
+ import "@pothos/plugin-tracing";
8
+ import { SchemaTypes } from "@pothos/core";
9
+
10
+ //#region src/server/graphql-pothos.d.ts
11
+
12
+ /**
13
+ * Registers all ContractSpecs from a OperationSpecRegistry onto a Pothos SchemaBuilder.
14
+ *
15
+ * This adapter:
16
+ * 1. Discovers output types from specs and registers them as Pothos object types.
17
+ * 2. Maps `ContractSpec` (OperationSpec) inputs to Pothos input types.
18
+ * 3. Mounts `query` specs as `Query` fields and `command` specs as `Mutation` fields.
19
+ * 4. Wraps the resolver to:
20
+ * - Enforce auth policies (basic check).
21
+ * - Build a `HandlerCtx`.
22
+ * - Execute via `OperationSpecRegistry`.
23
+ * - Hydrate resource references if applicable.
24
+ *
25
+ * @param builder - The Pothos SchemaBuilder instance.
26
+ * @param reg - The OperationSpecRegistry containing operations.
27
+ * @param resources - (Optional) ResourceRegistry for hydrating resource references.
28
+ */
29
+ declare function registerContractsOnBuilder<T extends SchemaTypes>(builder: PothosSchemaTypes.SchemaBuilder<T>, reg: OperationSpecRegistry, resources?: ResourceRegistry): void;
30
+ //#endregion
31
+ export { registerContractsOnBuilder };
@@ -0,0 +1,134 @@
1
+ import { defaultGqlField } from "../jsonschema.js";
2
+ import { createInputTypeBuilder } from "./contracts-adapter-input.js";
3
+ import { hydrateResourceIfNeeded, parseReturns } from "./contracts-adapter-hydration.js";
4
+ import { isSchemaModel } from "@contractspec/lib.schema";
5
+ import "@pothos/plugin-prisma";
6
+ import "@pothos/plugin-complexity";
7
+ import "@pothos/plugin-relay";
8
+ import "@pothos/plugin-dataloader";
9
+ import "@pothos/plugin-tracing";
10
+
11
+ //#region src/server/graphql-pothos.ts
12
+ /**
13
+ * Registers all ContractSpecs from a OperationSpecRegistry onto a Pothos SchemaBuilder.
14
+ *
15
+ * This adapter:
16
+ * 1. Discovers output types from specs and registers them as Pothos object types.
17
+ * 2. Maps `ContractSpec` (OperationSpec) inputs to Pothos input types.
18
+ * 3. Mounts `query` specs as `Query` fields and `command` specs as `Mutation` fields.
19
+ * 4. Wraps the resolver to:
20
+ * - Enforce auth policies (basic check).
21
+ * - Build a `HandlerCtx`.
22
+ * - Execute via `OperationSpecRegistry`.
23
+ * - Hydrate resource references if applicable.
24
+ *
25
+ * @param builder - The Pothos SchemaBuilder instance.
26
+ * @param reg - The OperationSpecRegistry containing operations.
27
+ * @param resources - (Optional) ResourceRegistry for hydrating resource references.
28
+ */
29
+ function registerContractsOnBuilder(builder, reg, resources) {
30
+ const { buildInputFieldArgs } = createInputTypeBuilder(builder);
31
+ const outputTypeCache = /* @__PURE__ */ new Map();
32
+ for (const spec of reg.listSpecs()) {
33
+ const out = spec.io.output;
34
+ if (out && "getZod" in out && typeof out.getZod === "function") {
35
+ const model = out;
36
+ const typeName = isSchemaModel(model) ? model.config?.name : "UnknownOutput";
37
+ if (typeName && !outputTypeCache.has(typeName)) outputTypeCache.set(typeName, model);
38
+ }
39
+ }
40
+ for (const [typeName, model] of outputTypeCache.entries()) {
41
+ if (!isSchemaModel(model)) continue;
42
+ builder.objectType(typeName, { fields: (t) => {
43
+ const entries = Object.entries(model.config.fields);
44
+ const acc = {};
45
+ for (const [key, field] of entries) {
46
+ const fieldType = field.type;
47
+ let gqlType = "JSON";
48
+ if (fieldType && typeof fieldType.getPothos === "function") {
49
+ gqlType = fieldType.getPothos().name || "JSON";
50
+ if (gqlType === "String_unsecure") gqlType = "String";
51
+ if (gqlType === "Int_unsecure") gqlType = "Int";
52
+ if (gqlType === "Float_unsecure") gqlType = "Float";
53
+ if (gqlType === "Boolean_unsecure") gqlType = "Boolean";
54
+ if (gqlType === "ID_unsecure") gqlType = "ID";
55
+ }
56
+ const typeRef = field.isArray ? [gqlType] : gqlType;
57
+ acc[key] = t.field({
58
+ type: typeRef,
59
+ nullable: field.isOptional,
60
+ resolve: (parent) => parent[key]
61
+ });
62
+ }
63
+ return acc;
64
+ } });
65
+ }
66
+ function resolveGraphQLTypeName(contractSpec) {
67
+ const returnsName = contractSpec.transport?.gql?.returns;
68
+ if (returnsName) return returnsName;
69
+ const out = contractSpec.io.output ?? {};
70
+ if (out && "kind" in out && out.kind === "resource_ref" && "graphQLType" in out && out.graphQLType) return String(out.graphQLType);
71
+ if (out && "getZod" in out && typeof out.getZod === "function") {
72
+ const model = out;
73
+ if (isSchemaModel(model)) {
74
+ const typeName = model.config?.name;
75
+ if (typeName && outputTypeCache.has(typeName)) return typeName;
76
+ }
77
+ }
78
+ return "JSON";
79
+ }
80
+ for (const spec of reg.listSpecs()) {
81
+ const fieldName = spec.transport?.gql?.field ?? defaultGqlField(spec.meta.key, spec.meta.version);
82
+ const byIdField = spec.transport?.gql?.byIdField ?? "id";
83
+ const returnsResource = spec.transport?.gql?.resource;
84
+ const isQuery = spec.meta.kind === "query";
85
+ const graphQLTypeName = resolveGraphQLTypeName(spec);
86
+ const returnsDecl = spec.transport?.gql?.returns;
87
+ const parsed = parseReturns(returnsDecl ?? graphQLTypeName);
88
+ const resolveFieldFn = async (_root, args, ctx) => {
89
+ if (spec.policy.auth !== "anonymous" && !ctx.user) throw new Error("Unauthorized");
90
+ const handlerCtx = {
91
+ traceId: ctx.logger?.getTraceId?.() ?? void 0,
92
+ userId: ctx.user?.id ?? null,
93
+ organizationId: ctx.session?.activeOrganizationId ?? null,
94
+ actor: ctx.user ? "user" : "anonymous",
95
+ channel: "web",
96
+ eventPublisher: ctx.eventPublisher
97
+ };
98
+ const parsedInput = spec.io.input?.getZod().parse(args.input ?? {});
99
+ const result = await reg.execute(spec.meta.key, spec.meta.version, parsedInput, handlerCtx);
100
+ const out = spec.io.output;
101
+ if (resources && (returnsResource || out?.kind === "resource_ref")) {
102
+ const varName = byIdField ?? out?.varName ?? "id";
103
+ const hydrated = await hydrateResourceIfNeeded(resources, result, {
104
+ template: returnsResource ?? out?.uriTemplate,
105
+ varName,
106
+ returns: parsed
107
+ });
108
+ if (hydrated !== result) return hydrated;
109
+ }
110
+ if (graphQLTypeName) {
111
+ if (parsed.inner === "Boolean" && !parsed.isList) return Boolean(result?.ok ?? result);
112
+ return result;
113
+ }
114
+ return spec.io.output.getZod().parse(result);
115
+ };
116
+ const fieldSettingsFn = (t) => {
117
+ const inputType = buildInputFieldArgs(spec.io.input);
118
+ return t.field({
119
+ type: parsed.isList ? [parsed.inner] : parsed.inner,
120
+ complexity: () => 10,
121
+ resolve: resolveFieldFn,
122
+ args: inputType ? { input: t.arg({
123
+ type: inputType,
124
+ required: true
125
+ }) } : void 0
126
+ });
127
+ };
128
+ if (isQuery) builder.queryField(fieldName, fieldSettingsFn);
129
+ else builder.mutationField(fieldName, fieldSettingsFn);
130
+ }
131
+ }
132
+
133
+ //#endregion
134
+ export { registerContractsOnBuilder };
@@ -0,0 +1,9 @@
1
+ import { registerContractsOnBuilder } from "./graphql-pothos.js";
2
+ import { createMcpServer } from "./mcp/createMcpServer.js";
3
+ import "./provider-mcp.js";
4
+ import { RestOptions, createFetchHandler } from "./rest-generic.js";
5
+ import { elysiaPlugin } from "./rest-elysia.js";
6
+ import { expressRouter } from "./rest-express.js";
7
+ import { makeNextAppHandler } from "./rest-next-app.js";
8
+ import { makeNextPagesHandler } from "./rest-next-pages.js";
9
+ export { RestOptions, createFetchHandler, createMcpServer, elysiaPlugin, expressRouter, makeNextAppHandler, makeNextPagesHandler, registerContractsOnBuilder };
@@ -0,0 +1,10 @@
1
+ import { registerContractsOnBuilder } from "./graphql-pothos.js";
2
+ import { createMcpServer } from "./mcp/createMcpServer.js";
3
+ import "./provider-mcp.js";
4
+ import { createFetchHandler } from "./rest-generic.js";
5
+ import { elysiaPlugin } from "./rest-elysia.js";
6
+ import { expressRouter } from "./rest-express.js";
7
+ import { makeNextAppHandler } from "./rest-next-app.js";
8
+ import { makeNextPagesHandler } from "./rest-next-pages.js";
9
+
10
+ export { createFetchHandler, createMcpServer, elysiaPlugin, expressRouter, makeNextAppHandler, makeNextPagesHandler, registerContractsOnBuilder };
@@ -0,0 +1,15 @@
1
+ import { ResourceRegistry } from "../../resources.js";
2
+ import { OperationSpecRegistry } from "../../operations/registry.js";
3
+ import { PromptRegistry } from "../../promptRegistry.js";
4
+ import { McpCtxFactories } from "./mcpTypes.js";
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+
7
+ //#region src/server/mcp/createMcpServer.d.ts
8
+
9
+ /**
10
+ * Creates a unified Model Context Protocol (MCP) server exposing operations, resources, prompts,
11
+ * and (optionally) presentations.\n+ *
12
+ * ContractSpec exposes:\n+ * - Tools: `command` operations from `OperationSpecRegistry`.\n+ * - Resources: templates from `ResourceRegistry`.\n+ * - Prompts: templates from `PromptRegistry`.\n+ * - Presentations: V1 registry and/or V2 descriptors as read-only resources.\n+ */
13
+ declare function createMcpServer(server: McpServer, ops: OperationSpecRegistry, resources: ResourceRegistry, prompts: PromptRegistry, ctxFactories: McpCtxFactories): McpServer;
14
+ //#endregion
15
+ export { createMcpServer };
@@ -0,0 +1,27 @@
1
+ import { registerMcpTools } from "./registerTools.js";
2
+ import { registerMcpResources } from "./registerResources.js";
3
+ import { registerMcpPrompts } from "./registerPrompts.js";
4
+ import { registerMcpPresentations } from "./registerPresentations.js";
5
+
6
+ //#region src/server/mcp/createMcpServer.ts
7
+ /**
8
+ * Creates a unified Model Context Protocol (MCP) server exposing operations, resources, prompts,
9
+ * and (optionally) presentations.\n+ *
10
+ * ContractSpec exposes:\n+ * - Tools: `command` operations from `OperationSpecRegistry`.\n+ * - Resources: templates from `ResourceRegistry`.\n+ * - Prompts: templates from `PromptRegistry`.\n+ * - Presentations: V1 registry and/or V2 descriptors as read-only resources.\n+ */
11
+ function createMcpServer(server, ops, resources, prompts, ctxFactories) {
12
+ ctxFactories.logger.info("Creating MCP server");
13
+ registerMcpTools(server, ops, { toolCtx: ctxFactories.toolCtx });
14
+ registerMcpResources(server, resources, {
15
+ logger: ctxFactories.logger,
16
+ resourceCtx: ctxFactories.resourceCtx
17
+ });
18
+ registerMcpPresentations(server, {
19
+ logger: ctxFactories.logger,
20
+ presentations: ctxFactories.presentations
21
+ });
22
+ registerMcpPrompts(server, prompts, { promptCtx: ctxFactories.promptCtx });
23
+ return server;
24
+ }
25
+
26
+ //#endregion
27
+ export { createMcpServer };
@@ -0,0 +1,27 @@
1
+ import { HandlerCtx } from "../../types.js";
2
+ import { PresentationRegistry } from "../../presentations/registry.js";
3
+ import "../../presentations/index.js";
4
+ import { Logger } from "@contractspec/lib.logger";
5
+
6
+ //#region src/server/mcp/mcpTypes.d.ts
7
+ interface McpCtxFactories {
8
+ logger: Logger;
9
+ /** Factory for tool execution context (e.g., system actor) */
10
+ toolCtx: () => HandlerCtx;
11
+ /** Factory for prompt rendering context */
12
+ promptCtx: () => {
13
+ userId?: string | null;
14
+ orgId?: string | null;
15
+ locale?: string;
16
+ };
17
+ /** Factory for resource resolution context */
18
+ resourceCtx: () => {
19
+ userId?: string | null;
20
+ orgId?: string | null;
21
+ locale?: string;
22
+ };
23
+ /** Optional registry for presentations */
24
+ presentations?: PresentationRegistry;
25
+ }
26
+ //#endregion
27
+ export { McpCtxFactories };
File without changes
@@ -0,0 +1,7 @@
1
+ import { McpCtxFactories } from "./mcpTypes.js";
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+
4
+ //#region src/server/mcp/registerPresentations.d.ts
5
+ declare function registerMcpPresentations(server: McpServer, ctx: Pick<McpCtxFactories, 'logger' | 'presentations'>): void;
6
+ //#endregion
7
+ export { registerMcpPresentations };
@@ -0,0 +1,63 @@
1
+ import { createDefaultTransformEngine, registerBasicValidation, registerDefaultReactRenderer } from "../../presentations/transform-engine.js";
2
+ import "../../presentations/index.js";
3
+
4
+ //#region src/server/mcp/registerPresentations.ts
5
+ function isEngineRenderOutput(x) {
6
+ if (!x || typeof x !== "object") return false;
7
+ return "body" in x && typeof x.body === "string";
8
+ }
9
+ function registerMcpPresentations(server, ctx) {
10
+ if (!ctx.presentations?.count()) return;
11
+ const engine = registerBasicValidation(registerDefaultReactRenderer(createDefaultTransformEngine()));
12
+ for (const presentationSpec of ctx.presentations.list()) {
13
+ const baseKey = `presentation.${presentationSpec.meta.key.replace(/\./g, "_")}.v${presentationSpec.meta.version}`;
14
+ const baseUri = `presentation://${presentationSpec.meta.key}/v${presentationSpec.meta.version}`;
15
+ ctx.logger.info(`Registering presentation ${baseUri} for ${baseKey}`);
16
+ server.registerResource(baseKey, baseUri, {
17
+ title: `${presentationSpec.meta.key} v${presentationSpec.meta.version}`,
18
+ description: presentationSpec.meta.description ?? "Presentation",
19
+ mimeType: "application/json"
20
+ }, async () => {
21
+ return { contents: [{
22
+ uri: baseUri,
23
+ mimeType: "application/json",
24
+ text: JSON.stringify({
25
+ meta: presentationSpec.meta,
26
+ source: presentationSpec.source,
27
+ targets: presentationSpec.targets
28
+ }, null, 2)
29
+ }] };
30
+ });
31
+ for (const v of [
32
+ {
33
+ ext: ".md",
34
+ target: "markdown"
35
+ },
36
+ {
37
+ ext: ".json",
38
+ target: "application/json"
39
+ },
40
+ {
41
+ ext: ".xml",
42
+ target: "application/xml"
43
+ }
44
+ ]) {
45
+ const key = `${baseKey}${v.ext}`;
46
+ const uri = `${baseUri}${v.ext}`;
47
+ server.registerResource(key, uri, {
48
+ title: `${presentationSpec.meta.key} v${presentationSpec.meta.version} (${v.ext})`,
49
+ description: `${presentationSpec.meta.description ?? "Presentation"} (${v.ext})`
50
+ }, async () => {
51
+ const out = await engine.render(v.target, presentationSpec);
52
+ return { contents: [{
53
+ uri,
54
+ mimeType: isEngineRenderOutput(out) && out.mimeType ? out.mimeType : v.target === "markdown" ? "text/markdown" : v.target,
55
+ text: isEngineRenderOutput(out) && typeof out.body === "string" ? out.body : String(out)
56
+ }] };
57
+ });
58
+ }
59
+ }
60
+ }
61
+
62
+ //#endregion
63
+ export { registerMcpPresentations };
@@ -0,0 +1,8 @@
1
+ import { PromptRegistry } from "../../promptRegistry.js";
2
+ import { McpCtxFactories } from "./mcpTypes.js";
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+
5
+ //#region src/server/mcp/registerPrompts.d.ts
6
+ declare function registerMcpPrompts(server: McpServer, prompts: PromptRegistry, ctx: Pick<McpCtxFactories, 'promptCtx'>): void;
7
+ //#endregion
8
+ export { registerMcpPrompts };
@@ -0,0 +1,37 @@
1
+ import z from "zod";
2
+
3
+ //#region src/server/mcp/registerPrompts.ts
4
+ function promptArgsSchemaFromPromptArgs(args) {
5
+ const shape = {};
6
+ for (const a of args) shape[a.name] = a.schema;
7
+ return shape;
8
+ }
9
+ function registerMcpPrompts(server, prompts, ctx) {
10
+ for (const prompt of prompts.list()) server.registerPrompt(prompt.meta.key, {
11
+ title: prompt.meta.title,
12
+ description: prompt.meta.description,
13
+ argsSchema: promptArgsSchemaFromPromptArgs(prompt.args)
14
+ }, async (args) => {
15
+ const link = (tpl, vars) => {
16
+ let out = tpl;
17
+ for (const [k, v] of Object.entries(vars)) out = out.replace(new RegExp(`\\{${k}\\}`, "g"), encodeURIComponent(String(v)));
18
+ return out;
19
+ };
20
+ return {
21
+ messages: [{
22
+ role: "assistant",
23
+ content: {
24
+ type: "text",
25
+ text: (await prompt.render(prompt.input.parse(args), {
26
+ ...ctx.promptCtx(),
27
+ link
28
+ })).map((p) => p.type === "text" ? p.text : `See resource: ${p.title ?? p.uri}\nURI: ${p.uri}`).join("\n\n")
29
+ }
30
+ }],
31
+ description: prompt.meta.description
32
+ };
33
+ });
34
+ }
35
+
36
+ //#endregion
37
+ export { registerMcpPrompts };
@@ -0,0 +1,8 @@
1
+ import { ResourceRegistry } from "../../resources.js";
2
+ import { McpCtxFactories } from "./mcpTypes.js";
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+
5
+ //#region src/server/mcp/registerResources.d.ts
6
+ declare function registerMcpResources(server: McpServer, resources: ResourceRegistry, ctx: Pick<McpCtxFactories, 'logger' | 'resourceCtx'>): void;
7
+ //#endregion
8
+ export { registerMcpResources };
@@ -0,0 +1,35 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Buffer } from "node:buffer";
3
+
4
+ //#region src/server/mcp/registerResources.ts
5
+ function mcpResourceMeta(resource) {
6
+ return {
7
+ title: resource.meta.title,
8
+ description: resource.meta.description,
9
+ mimeType: resource.meta.mimeType,
10
+ _meta: { tags: resource.meta.tags ?? [] }
11
+ };
12
+ }
13
+ function registerMcpResources(server, resources, ctx) {
14
+ for (const resource of resources.listTemplates()) {
15
+ ctx.logger.info("Registering resource: " + resource.meta.uriTemplate);
16
+ server.registerResource(resource.meta.uriTemplate, new ResourceTemplate(resource.meta.uriTemplate, { list: void 0 }), mcpResourceMeta(resource), async (_uri, variables) => {
17
+ const parsedArgs = resource.input.parse(variables);
18
+ const out = await resource.resolve(parsedArgs, ctx.resourceCtx());
19
+ if (typeof out.data === "string") return { contents: [{
20
+ uri: out.uri,
21
+ mimeType: out.mimeType ?? resource.meta.mimeType,
22
+ text: out.data
23
+ }] };
24
+ return { contents: [{
25
+ uri: out.uri,
26
+ mimeType: out.mimeType ?? resource.meta.mimeType,
27
+ blob: Buffer.from(out.data).toString("base64")
28
+ }] };
29
+ });
30
+ ctx.logger.info("Registered resource: " + resource.meta.uriTemplate);
31
+ }
32
+ }
33
+
34
+ //#endregion
35
+ export { registerMcpResources };
@@ -0,0 +1,8 @@
1
+ import { OperationSpecRegistry } from "../../operations/registry.js";
2
+ import { McpCtxFactories } from "./mcpTypes.js";
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+
5
+ //#region src/server/mcp/registerTools.d.ts
6
+ declare function registerMcpTools(server: McpServer, ops: OperationSpecRegistry, ctx: Pick<McpCtxFactories, 'toolCtx'>): void;
7
+ //#endregion
8
+ export { registerMcpTools };
@@ -0,0 +1,22 @@
1
+ import { defaultMcpTool } from "../../jsonschema.js";
2
+
3
+ //#region src/server/mcp/registerTools.ts
4
+ function registerMcpTools(server, ops, ctx) {
5
+ for (const spec of ops.listSpecs()) {
6
+ if (spec.meta.kind !== "command") continue;
7
+ const toolName = spec.transport?.mcp?.toolName ?? defaultMcpTool(spec.meta.key, spec.meta.version);
8
+ server.registerTool(toolName, {
9
+ description: spec.meta.description,
10
+ inputSchema: spec.io.input?.getZod()
11
+ }, async (args) => {
12
+ const result = await ops.execute(spec.meta.key, spec.meta.version, args ?? {}, ctx.toolCtx());
13
+ return { content: [{
14
+ type: "text",
15
+ text: JSON.stringify(result, null, 4)
16
+ }] };
17
+ });
18
+ }
19
+ }
20
+
21
+ //#endregion
22
+ export { registerMcpTools };
@@ -0,0 +1,2 @@
1
+ import { createMcpServer } from "./mcp/createMcpServer.js";
2
+ export { createMcpServer };
@@ -0,0 +1,3 @@
1
+ import { createMcpServer } from "./mcp/createMcpServer.js";
2
+
3
+ export { createMcpServer };
@@ -0,0 +1,40 @@
1
+ import { HandlerCtx } from "../types.js";
2
+ import { OperationSpecRegistry } from "../operations/registry.js";
3
+ import { RestOptions } from "./rest-generic.js";
4
+ import { Elysia } from "elysia";
5
+
6
+ //#region src/server/rest-elysia.d.ts
7
+ /** Mount routes on an Elysia instance */
8
+ declare function elysiaPlugin(app: Elysia, reg: OperationSpecRegistry, ctxFactory: (c: {
9
+ request: Request;
10
+ store: unknown;
11
+ }) => HandlerCtx, options?: RestOptions): Elysia<"", {
12
+ decorator: {};
13
+ store: {};
14
+ derive: {};
15
+ resolve: {};
16
+ }, {
17
+ typebox: {};
18
+ error: {};
19
+ }, {
20
+ schema: {};
21
+ standaloneSchema: {};
22
+ macro: {};
23
+ macroFn: {};
24
+ parser: {};
25
+ response: {};
26
+ }, {}, {
27
+ derive: {};
28
+ resolve: {};
29
+ schema: {};
30
+ standaloneSchema: {};
31
+ response: {};
32
+ }, {
33
+ derive: {};
34
+ resolve: {};
35
+ schema: {};
36
+ standaloneSchema: {};
37
+ response: {};
38
+ }>;
39
+ //#endregion
40
+ export { elysiaPlugin };
@@ -0,0 +1,20 @@
1
+ import { createFetchHandler } from "./rest-generic.js";
2
+
3
+ //#region src/server/rest-elysia.ts
4
+ /** Mount routes on an Elysia instance */
5
+ function elysiaPlugin(app, reg, ctxFactory, options) {
6
+ const handler = createFetchHandler(reg, (req) => ctxFactory({
7
+ request: req,
8
+ store: app.store
9
+ }), options);
10
+ for (const spec of reg.listSpecs()) {
11
+ const method = spec.transport?.rest?.method ?? (spec.meta.kind === "query" ? "GET" : "POST");
12
+ const path = (options?.basePath ?? "") + (spec.transport?.rest?.path ?? `/${spec.meta.key.replace(/\./g, "/")}/v${spec.meta.version}`);
13
+ app[method.toLowerCase()](path, ({ request }) => handler(request));
14
+ }
15
+ if (options?.cors) app.options("*", ({ request }) => handler(request));
16
+ return app;
17
+ }
18
+
19
+ //#endregion
20
+ export { elysiaPlugin };
@@ -0,0 +1,16 @@
1
+ import { HandlerCtx } from "../types.js";
2
+ import { OperationSpecRegistry } from "../operations/registry.js";
3
+ import { RestOptions } from "./rest-generic.js";
4
+ import { Request, Router } from "express";
5
+
6
+ //#region src/server/rest-express.d.ts
7
+
8
+ /**
9
+ * Build an Express Router that proxies to the Fetch-style handler.
10
+ * You can mount it at any base path; pass the same basePath in options.
11
+ */
12
+ declare function expressRouter(express: {
13
+ Router: () => Router;
14
+ }, reg: OperationSpecRegistry, ctxFactory: (req: Request) => HandlerCtx, options?: RestOptions): Router;
15
+ //#endregion
16
+ export { expressRouter };