@lssm/lib.contracts 1.2.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 (611) hide show
  1. package/README.md +361 -0
  2. package/dist/app-config/branding.d.ts +56 -0
  3. package/dist/app-config/branding.d.ts.map +1 -0
  4. package/dist/app-config/branding.js +0 -0
  5. package/dist/app-config/contracts.d.ts +243 -0
  6. package/dist/app-config/contracts.d.ts.map +1 -0
  7. package/dist/app-config/contracts.js +2 -0
  8. package/dist/app-config/contracts.js.map +1 -0
  9. package/dist/app-config/events.d.ts +121 -0
  10. package/dist/app-config/events.d.ts.map +1 -0
  11. package/dist/app-config/events.js +2 -0
  12. package/dist/app-config/events.js.map +1 -0
  13. package/dist/app-config/index.d.ts +8 -0
  14. package/dist/app-config/index.js +1 -0
  15. package/dist/app-config/lifecycle-contracts.d.ts +381 -0
  16. package/dist/app-config/lifecycle-contracts.d.ts.map +1 -0
  17. package/dist/app-config/lifecycle-contracts.js +2 -0
  18. package/dist/app-config/lifecycle-contracts.js.map +1 -0
  19. package/dist/app-config/lifecycle.d.ts +28 -0
  20. package/dist/app-config/lifecycle.d.ts.map +1 -0
  21. package/dist/app-config/lifecycle.js +0 -0
  22. package/dist/app-config/runtime.d.ts +115 -0
  23. package/dist/app-config/runtime.d.ts.map +1 -0
  24. package/dist/app-config/runtime.js +2 -0
  25. package/dist/app-config/runtime.js.map +1 -0
  26. package/dist/app-config/spec.d.ts +176 -0
  27. package/dist/app-config/spec.d.ts.map +1 -0
  28. package/dist/app-config/spec.js +2 -0
  29. package/dist/app-config/spec.js.map +1 -0
  30. package/dist/app-config/validation.d.ts +48 -0
  31. package/dist/app-config/validation.d.ts.map +1 -0
  32. package/dist/app-config/validation.js +2 -0
  33. package/dist/app-config/validation.js.map +1 -0
  34. package/dist/capabilities/openbanking.d.ts +10 -0
  35. package/dist/capabilities/openbanking.d.ts.map +1 -0
  36. package/dist/capabilities/openbanking.js +2 -0
  37. package/dist/capabilities/openbanking.js.map +1 -0
  38. package/dist/capabilities.d.ts +45 -0
  39. package/dist/capabilities.d.ts.map +1 -0
  40. package/dist/capabilities.js +2 -0
  41. package/dist/capabilities.js.map +1 -0
  42. package/dist/client/index.d.ts +6 -0
  43. package/dist/client/index.js +1 -0
  44. package/dist/client/react/drivers/rn-reusables.d.ts +23 -0
  45. package/dist/client/react/drivers/rn-reusables.d.ts.map +1 -0
  46. package/dist/client/react/drivers/rn-reusables.js +2 -0
  47. package/dist/client/react/drivers/rn-reusables.js.map +1 -0
  48. package/dist/client/react/drivers/shadcn.d.ts +13 -0
  49. package/dist/client/react/drivers/shadcn.d.ts.map +1 -0
  50. package/dist/client/react/drivers/shadcn.js +2 -0
  51. package/dist/client/react/drivers/shadcn.js.map +1 -0
  52. package/dist/client/react/feature-render.d.ts +21 -0
  53. package/dist/client/react/feature-render.d.ts.map +1 -0
  54. package/dist/client/react/feature-render.js +2 -0
  55. package/dist/client/react/feature-render.js.map +1 -0
  56. package/dist/client/react/form-render.d.ts +91 -0
  57. package/dist/client/react/form-render.d.ts.map +1 -0
  58. package/dist/client/react/form-render.js +2 -0
  59. package/dist/client/react/form-render.js.map +1 -0
  60. package/dist/client/react/index.d.ts +5 -0
  61. package/dist/client/react/index.js +1 -0
  62. package/dist/contracts-adapter-hydration.d.ts +16 -0
  63. package/dist/contracts-adapter-hydration.d.ts.map +1 -0
  64. package/dist/contracts-adapter-hydration.js +2 -0
  65. package/dist/contracts-adapter-hydration.js.map +1 -0
  66. package/dist/contracts-adapter-input.d.ts +10 -0
  67. package/dist/contracts-adapter-input.d.ts.map +1 -0
  68. package/dist/contracts-adapter-input.js +2 -0
  69. package/dist/contracts-adapter-input.js.map +1 -0
  70. package/dist/data-views.d.ts +132 -0
  71. package/dist/data-views.d.ts.map +1 -0
  72. package/dist/data-views.js +2 -0
  73. package/dist/data-views.js.map +1 -0
  74. package/dist/events.d.ts +44 -0
  75. package/dist/events.d.ts.map +1 -0
  76. package/dist/events.js +2 -0
  77. package/dist/events.js.map +1 -0
  78. package/dist/experiments/evaluator.d.ts +38 -0
  79. package/dist/experiments/evaluator.d.ts.map +1 -0
  80. package/dist/experiments/evaluator.js +2 -0
  81. package/dist/experiments/evaluator.js.map +1 -0
  82. package/dist/experiments/spec.d.ts +90 -0
  83. package/dist/experiments/spec.d.ts.map +1 -0
  84. package/dist/experiments/spec.js +2 -0
  85. package/dist/experiments/spec.js.map +1 -0
  86. package/dist/features.d.ts +88 -0
  87. package/dist/features.d.ts.map +1 -0
  88. package/dist/features.js +2 -0
  89. package/dist/features.js.map +1 -0
  90. package/dist/forms.d.ts +258 -0
  91. package/dist/forms.d.ts.map +1 -0
  92. package/dist/forms.js +2 -0
  93. package/dist/forms.js.map +1 -0
  94. package/dist/graphql-federation/src/index.js +2 -0
  95. package/dist/graphql-federation/src/index.js.map +1 -0
  96. package/dist/index.d.ts +129 -0
  97. package/dist/index.js +1 -0
  98. package/dist/install.d.ts +76 -0
  99. package/dist/install.d.ts.map +1 -0
  100. package/dist/install.js +2 -0
  101. package/dist/install.js.map +1 -0
  102. package/dist/integrations/binding.d.ts +18 -0
  103. package/dist/integrations/binding.d.ts.map +1 -0
  104. package/dist/integrations/binding.js +0 -0
  105. package/dist/integrations/connection.d.ts +52 -0
  106. package/dist/integrations/connection.d.ts.map +1 -0
  107. package/dist/integrations/connection.js +0 -0
  108. package/dist/integrations/contracts.d.ts +434 -0
  109. package/dist/integrations/contracts.d.ts.map +1 -0
  110. package/dist/integrations/contracts.js +2 -0
  111. package/dist/integrations/contracts.js.map +1 -0
  112. package/dist/integrations/health.d.ts +22 -0
  113. package/dist/integrations/health.d.ts.map +1 -0
  114. package/dist/integrations/health.js +2 -0
  115. package/dist/integrations/health.js.map +1 -0
  116. package/dist/integrations/index.d.ts +53 -0
  117. package/dist/integrations/index.js +1 -0
  118. package/dist/integrations/openbanking/contracts/accounts.d.ts +286 -0
  119. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +1 -0
  120. package/dist/integrations/openbanking/contracts/accounts.js +2 -0
  121. package/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
  122. package/dist/integrations/openbanking/contracts/balances.d.ts +162 -0
  123. package/dist/integrations/openbanking/contracts/balances.d.ts.map +1 -0
  124. package/dist/integrations/openbanking/contracts/balances.js +2 -0
  125. package/dist/integrations/openbanking/contracts/balances.js.map +1 -0
  126. package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
  127. package/dist/integrations/openbanking/contracts/index.d.ts.map +1 -0
  128. package/dist/integrations/openbanking/contracts/index.js +2 -0
  129. package/dist/integrations/openbanking/contracts/index.js.map +1 -0
  130. package/dist/integrations/openbanking/contracts/transactions.d.ts +210 -0
  131. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +1 -0
  132. package/dist/integrations/openbanking/contracts/transactions.js +2 -0
  133. package/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
  134. package/dist/integrations/openbanking/guards.d.ts +13 -0
  135. package/dist/integrations/openbanking/guards.d.ts.map +1 -0
  136. package/dist/integrations/openbanking/guards.js +2 -0
  137. package/dist/integrations/openbanking/guards.js.map +1 -0
  138. package/dist/integrations/openbanking/models.d.ts +226 -0
  139. package/dist/integrations/openbanking/models.d.ts.map +1 -0
  140. package/dist/integrations/openbanking/models.js +2 -0
  141. package/dist/integrations/openbanking/models.js.map +1 -0
  142. package/dist/integrations/openbanking/telemetry.d.ts +16 -0
  143. package/dist/integrations/openbanking/telemetry.d.ts.map +1 -0
  144. package/dist/integrations/openbanking/telemetry.js +2 -0
  145. package/dist/integrations/openbanking/telemetry.js.map +1 -0
  146. package/dist/integrations/providers/calendar.d.ts +79 -0
  147. package/dist/integrations/providers/calendar.d.ts.map +1 -0
  148. package/dist/integrations/providers/calendar.js +0 -0
  149. package/dist/integrations/providers/elevenlabs.d.ts +8 -0
  150. package/dist/integrations/providers/elevenlabs.d.ts.map +1 -0
  151. package/dist/integrations/providers/elevenlabs.js +2 -0
  152. package/dist/integrations/providers/elevenlabs.js.map +1 -0
  153. package/dist/integrations/providers/email.d.ts +87 -0
  154. package/dist/integrations/providers/email.d.ts.map +1 -0
  155. package/dist/integrations/providers/email.js +0 -0
  156. package/dist/integrations/providers/embedding.d.ts +25 -0
  157. package/dist/integrations/providers/embedding.d.ts.map +1 -0
  158. package/dist/integrations/providers/embedding.js +0 -0
  159. package/dist/integrations/providers/gcs-storage.d.ts +8 -0
  160. package/dist/integrations/providers/gcs-storage.d.ts.map +1 -0
  161. package/dist/integrations/providers/gcs-storage.js +2 -0
  162. package/dist/integrations/providers/gcs-storage.js.map +1 -0
  163. package/dist/integrations/providers/gmail.d.ts +8 -0
  164. package/dist/integrations/providers/gmail.d.ts.map +1 -0
  165. package/dist/integrations/providers/gmail.js +2 -0
  166. package/dist/integrations/providers/gmail.js.map +1 -0
  167. package/dist/integrations/providers/google-calendar.d.ts +8 -0
  168. package/dist/integrations/providers/google-calendar.d.ts.map +1 -0
  169. package/dist/integrations/providers/google-calendar.js +2 -0
  170. package/dist/integrations/providers/google-calendar.js.map +1 -0
  171. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +21 -0
  172. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +1 -0
  173. package/dist/integrations/providers/impls/elevenlabs-voice.js +2 -0
  174. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +1 -0
  175. package/dist/integrations/providers/impls/gcs-storage.d.ts +25 -0
  176. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +1 -0
  177. package/dist/integrations/providers/impls/gcs-storage.js +2 -0
  178. package/dist/integrations/providers/impls/gcs-storage.js.map +1 -0
  179. package/dist/integrations/providers/impls/gmail-inbound.d.ts +27 -0
  180. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +1 -0
  181. package/dist/integrations/providers/impls/gmail-inbound.js +2 -0
  182. package/dist/integrations/providers/impls/gmail-inbound.js.map +1 -0
  183. package/dist/integrations/providers/impls/gmail-outbound.d.ts +19 -0
  184. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +1 -0
  185. package/dist/integrations/providers/impls/gmail-outbound.js +7 -0
  186. package/dist/integrations/providers/impls/gmail-outbound.js.map +1 -0
  187. package/dist/integrations/providers/impls/google-calendar.d.ts +24 -0
  188. package/dist/integrations/providers/impls/google-calendar.d.ts.map +1 -0
  189. package/dist/integrations/providers/impls/google-calendar.js +2 -0
  190. package/dist/integrations/providers/impls/google-calendar.js.map +1 -0
  191. package/dist/integrations/providers/impls/index.d.ts +15 -0
  192. package/dist/integrations/providers/impls/index.js +1 -0
  193. package/dist/integrations/providers/impls/mistral-embedding.d.ts +24 -0
  194. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +1 -0
  195. package/dist/integrations/providers/impls/mistral-embedding.js +2 -0
  196. package/dist/integrations/providers/impls/mistral-embedding.js.map +1 -0
  197. package/dist/integrations/providers/impls/mistral-llm.d.ts +32 -0
  198. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +1 -0
  199. package/dist/integrations/providers/impls/mistral-llm.js +2 -0
  200. package/dist/integrations/providers/impls/mistral-llm.js.map +1 -0
  201. package/dist/integrations/providers/impls/postmark-email.d.ts +20 -0
  202. package/dist/integrations/providers/impls/postmark-email.d.ts.map +1 -0
  203. package/dist/integrations/providers/impls/postmark-email.js +2 -0
  204. package/dist/integrations/providers/impls/postmark-email.js.map +1 -0
  205. package/dist/integrations/providers/impls/powens-client.d.ts +125 -0
  206. package/dist/integrations/providers/impls/powens-client.d.ts.map +1 -0
  207. package/dist/integrations/providers/impls/powens-client.js +2 -0
  208. package/dist/integrations/providers/impls/powens-client.js.map +1 -0
  209. package/dist/integrations/providers/impls/powens-openbanking.d.ts +28 -0
  210. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +1 -0
  211. package/dist/integrations/providers/impls/powens-openbanking.js +2 -0
  212. package/dist/integrations/providers/impls/powens-openbanking.js.map +1 -0
  213. package/dist/integrations/providers/impls/provider-factory.d.ts +27 -0
  214. package/dist/integrations/providers/impls/provider-factory.d.ts.map +1 -0
  215. package/dist/integrations/providers/impls/provider-factory.js +2 -0
  216. package/dist/integrations/providers/impls/provider-factory.js.map +1 -0
  217. package/dist/integrations/providers/impls/qdrant-vector.d.ts +25 -0
  218. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +1 -0
  219. package/dist/integrations/providers/impls/qdrant-vector.js +2 -0
  220. package/dist/integrations/providers/impls/qdrant-vector.js.map +1 -0
  221. package/dist/integrations/providers/impls/stripe-payments.d.ts +29 -0
  222. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +1 -0
  223. package/dist/integrations/providers/impls/stripe-payments.js +2 -0
  224. package/dist/integrations/providers/impls/stripe-payments.js.map +1 -0
  225. package/dist/integrations/providers/impls/twilio-sms.d.ts +21 -0
  226. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +1 -0
  227. package/dist/integrations/providers/impls/twilio-sms.js +2 -0
  228. package/dist/integrations/providers/impls/twilio-sms.js.map +1 -0
  229. package/dist/integrations/providers/index.d.ts +36 -0
  230. package/dist/integrations/providers/index.js +1 -0
  231. package/dist/integrations/providers/llm.d.ts +83 -0
  232. package/dist/integrations/providers/llm.d.ts.map +1 -0
  233. package/dist/integrations/providers/llm.js +0 -0
  234. package/dist/integrations/providers/mistral.d.ts +8 -0
  235. package/dist/integrations/providers/mistral.d.ts.map +1 -0
  236. package/dist/integrations/providers/mistral.js +2 -0
  237. package/dist/integrations/providers/mistral.js.map +1 -0
  238. package/dist/integrations/providers/openbanking.d.ts +129 -0
  239. package/dist/integrations/providers/openbanking.d.ts.map +1 -0
  240. package/dist/integrations/providers/openbanking.js +0 -0
  241. package/dist/integrations/providers/payments.d.ts +110 -0
  242. package/dist/integrations/providers/payments.d.ts.map +1 -0
  243. package/dist/integrations/providers/payments.js +0 -0
  244. package/dist/integrations/providers/postmark.d.ts +8 -0
  245. package/dist/integrations/providers/postmark.d.ts.map +1 -0
  246. package/dist/integrations/providers/postmark.js +2 -0
  247. package/dist/integrations/providers/postmark.js.map +1 -0
  248. package/dist/integrations/providers/powens.d.ts +8 -0
  249. package/dist/integrations/providers/powens.d.ts.map +1 -0
  250. package/dist/integrations/providers/powens.js +2 -0
  251. package/dist/integrations/providers/powens.js.map +1 -0
  252. package/dist/integrations/providers/qdrant.d.ts +8 -0
  253. package/dist/integrations/providers/qdrant.d.ts.map +1 -0
  254. package/dist/integrations/providers/qdrant.js +2 -0
  255. package/dist/integrations/providers/qdrant.js.map +1 -0
  256. package/dist/integrations/providers/sms.d.ts +35 -0
  257. package/dist/integrations/providers/sms.d.ts.map +1 -0
  258. package/dist/integrations/providers/sms.js +0 -0
  259. package/dist/integrations/providers/storage.d.ts +61 -0
  260. package/dist/integrations/providers/storage.d.ts.map +1 -0
  261. package/dist/integrations/providers/storage.js +0 -0
  262. package/dist/integrations/providers/stripe.d.ts +8 -0
  263. package/dist/integrations/providers/stripe.d.ts.map +1 -0
  264. package/dist/integrations/providers/stripe.js +2 -0
  265. package/dist/integrations/providers/stripe.js.map +1 -0
  266. package/dist/integrations/providers/twilio-sms.d.ts +8 -0
  267. package/dist/integrations/providers/twilio-sms.d.ts.map +1 -0
  268. package/dist/integrations/providers/twilio-sms.js +2 -0
  269. package/dist/integrations/providers/twilio-sms.js.map +1 -0
  270. package/dist/integrations/providers/vector-store.d.ts +44 -0
  271. package/dist/integrations/providers/vector-store.d.ts.map +1 -0
  272. package/dist/integrations/providers/vector-store.js +0 -0
  273. package/dist/integrations/providers/voice.d.ts +35 -0
  274. package/dist/integrations/providers/voice.d.ts.map +1 -0
  275. package/dist/integrations/providers/voice.js +0 -0
  276. package/dist/integrations/runtime.d.ts +100 -0
  277. package/dist/integrations/runtime.d.ts.map +1 -0
  278. package/dist/integrations/runtime.js +2 -0
  279. package/dist/integrations/runtime.js.map +1 -0
  280. package/dist/integrations/secrets/env-secret-provider.d.ts +32 -0
  281. package/dist/integrations/secrets/env-secret-provider.d.ts.map +1 -0
  282. package/dist/integrations/secrets/env-secret-provider.js +2 -0
  283. package/dist/integrations/secrets/env-secret-provider.js.map +1 -0
  284. package/dist/integrations/secrets/gcp-secret-manager.d.ts +33 -0
  285. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +1 -0
  286. package/dist/integrations/secrets/gcp-secret-manager.js +2 -0
  287. package/dist/integrations/secrets/gcp-secret-manager.js.map +1 -0
  288. package/dist/integrations/secrets/index.d.ts +5 -0
  289. package/dist/integrations/secrets/index.js +1 -0
  290. package/dist/integrations/secrets/manager.d.ts +48 -0
  291. package/dist/integrations/secrets/manager.d.ts.map +1 -0
  292. package/dist/integrations/secrets/manager.js +2 -0
  293. package/dist/integrations/secrets/manager.js.map +1 -0
  294. package/dist/integrations/secrets/provider.d.ts +53 -0
  295. package/dist/integrations/secrets/provider.d.ts.map +1 -0
  296. package/dist/integrations/secrets/provider.js +2 -0
  297. package/dist/integrations/secrets/provider.js.map +1 -0
  298. package/dist/integrations/spec.d.ts +80 -0
  299. package/dist/integrations/spec.d.ts.map +1 -0
  300. package/dist/integrations/spec.js +2 -0
  301. package/dist/integrations/spec.js.map +1 -0
  302. package/dist/jobs/gcp-cloud-tasks.d.ts +42 -0
  303. package/dist/jobs/gcp-cloud-tasks.d.ts.map +1 -0
  304. package/dist/jobs/gcp-cloud-tasks.js +2 -0
  305. package/dist/jobs/gcp-cloud-tasks.js.map +1 -0
  306. package/dist/jobs/gcp-pubsub.d.ts +26 -0
  307. package/dist/jobs/gcp-pubsub.d.ts.map +1 -0
  308. package/dist/jobs/gcp-pubsub.js +2 -0
  309. package/dist/jobs/gcp-pubsub.js.map +1 -0
  310. package/dist/jobs/handlers/gmail-sync-handler.d.ts +10 -0
  311. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +1 -0
  312. package/dist/jobs/handlers/gmail-sync-handler.js +2 -0
  313. package/dist/jobs/handlers/gmail-sync-handler.js.map +1 -0
  314. package/dist/jobs/handlers/index.d.ts +3 -0
  315. package/dist/jobs/handlers/index.js +1 -0
  316. package/dist/jobs/handlers/storage-document-handler.d.ts +13 -0
  317. package/dist/jobs/handlers/storage-document-handler.d.ts.map +1 -0
  318. package/dist/jobs/handlers/storage-document-handler.js +2 -0
  319. package/dist/jobs/handlers/storage-document-handler.js.map +1 -0
  320. package/dist/jobs/index.d.ts +7 -0
  321. package/dist/jobs/index.js +1 -0
  322. package/dist/jobs/memory-queue.d.ts +19 -0
  323. package/dist/jobs/memory-queue.d.ts.map +1 -0
  324. package/dist/jobs/memory-queue.js +2 -0
  325. package/dist/jobs/memory-queue.js.map +1 -0
  326. package/dist/jobs/queue.d.ts +27 -0
  327. package/dist/jobs/queue.d.ts.map +1 -0
  328. package/dist/jobs/queue.js +0 -0
  329. package/dist/jsonschema.d.ts +27 -0
  330. package/dist/jsonschema.d.ts.map +1 -0
  331. package/dist/jsonschema.js +2 -0
  332. package/dist/jsonschema.js.map +1 -0
  333. package/dist/knowledge/binding.d.ts +26 -0
  334. package/dist/knowledge/binding.d.ts.map +1 -0
  335. package/dist/knowledge/binding.js +0 -0
  336. package/dist/knowledge/contracts.d.ts +315 -0
  337. package/dist/knowledge/contracts.d.ts.map +1 -0
  338. package/dist/knowledge/contracts.js +2 -0
  339. package/dist/knowledge/contracts.js.map +1 -0
  340. package/dist/knowledge/index.d.ts +10 -0
  341. package/dist/knowledge/index.js +1 -0
  342. package/dist/knowledge/ingestion/document-processor.d.ts +25 -0
  343. package/dist/knowledge/ingestion/document-processor.d.ts.map +1 -0
  344. package/dist/knowledge/ingestion/document-processor.js +2 -0
  345. package/dist/knowledge/ingestion/document-processor.js.map +1 -0
  346. package/dist/knowledge/ingestion/embedding-service.d.ts +13 -0
  347. package/dist/knowledge/ingestion/embedding-service.d.ts.map +1 -0
  348. package/dist/knowledge/ingestion/embedding-service.js +2 -0
  349. package/dist/knowledge/ingestion/embedding-service.js.map +1 -0
  350. package/dist/knowledge/ingestion/gmail-adapter.d.ts +19 -0
  351. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +1 -0
  352. package/dist/knowledge/ingestion/gmail-adapter.js +7 -0
  353. package/dist/knowledge/ingestion/gmail-adapter.js.map +1 -0
  354. package/dist/knowledge/ingestion/index.d.ts +6 -0
  355. package/dist/knowledge/ingestion/index.js +1 -0
  356. package/dist/knowledge/ingestion/storage-adapter.d.ts +16 -0
  357. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +1 -0
  358. package/dist/knowledge/ingestion/storage-adapter.js +2 -0
  359. package/dist/knowledge/ingestion/storage-adapter.js.map +1 -0
  360. package/dist/knowledge/ingestion/vector-indexer.d.ts +19 -0
  361. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +1 -0
  362. package/dist/knowledge/ingestion/vector-indexer.js +2 -0
  363. package/dist/knowledge/ingestion/vector-indexer.js.map +1 -0
  364. package/dist/knowledge/query/index.d.ts +2 -0
  365. package/dist/knowledge/query/index.js +1 -0
  366. package/dist/knowledge/query/service.d.ts +30 -0
  367. package/dist/knowledge/query/service.d.ts.map +1 -0
  368. package/dist/knowledge/query/service.js +4 -0
  369. package/dist/knowledge/query/service.js.map +1 -0
  370. package/dist/knowledge/runtime.d.ts +33 -0
  371. package/dist/knowledge/runtime.d.ts.map +1 -0
  372. package/dist/knowledge/runtime.js +2 -0
  373. package/dist/knowledge/runtime.js.map +1 -0
  374. package/dist/knowledge/source.d.ts +33 -0
  375. package/dist/knowledge/source.d.ts.map +1 -0
  376. package/dist/knowledge/source.js +0 -0
  377. package/dist/knowledge/spaces/email-threads.d.ts +8 -0
  378. package/dist/knowledge/spaces/email-threads.d.ts.map +1 -0
  379. package/dist/knowledge/spaces/email-threads.js +2 -0
  380. package/dist/knowledge/spaces/email-threads.js.map +1 -0
  381. package/dist/knowledge/spaces/financial-docs.d.ts +8 -0
  382. package/dist/knowledge/spaces/financial-docs.d.ts.map +1 -0
  383. package/dist/knowledge/spaces/financial-docs.js +2 -0
  384. package/dist/knowledge/spaces/financial-docs.js.map +1 -0
  385. package/dist/knowledge/spaces/financial-overview.d.ts +8 -0
  386. package/dist/knowledge/spaces/financial-overview.d.ts.map +1 -0
  387. package/dist/knowledge/spaces/financial-overview.js +2 -0
  388. package/dist/knowledge/spaces/financial-overview.js.map +1 -0
  389. package/dist/knowledge/spaces/index.d.ts +7 -0
  390. package/dist/knowledge/spaces/index.js +1 -0
  391. package/dist/knowledge/spaces/product-canon.d.ts +8 -0
  392. package/dist/knowledge/spaces/product-canon.d.ts.map +1 -0
  393. package/dist/knowledge/spaces/product-canon.js +2 -0
  394. package/dist/knowledge/spaces/product-canon.js.map +1 -0
  395. package/dist/knowledge/spaces/support-faq.d.ts +8 -0
  396. package/dist/knowledge/spaces/support-faq.d.ts.map +1 -0
  397. package/dist/knowledge/spaces/support-faq.js +2 -0
  398. package/dist/knowledge/spaces/support-faq.js.map +1 -0
  399. package/dist/knowledge/spaces/uploaded-docs.d.ts +8 -0
  400. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +1 -0
  401. package/dist/knowledge/spaces/uploaded-docs.js +2 -0
  402. package/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
  403. package/dist/knowledge/spec.d.ts +53 -0
  404. package/dist/knowledge/spec.d.ts.map +1 -0
  405. package/dist/knowledge/spec.js +2 -0
  406. package/dist/knowledge/spec.js.map +1 -0
  407. package/dist/markdown.d.ts +22 -0
  408. package/dist/markdown.d.ts.map +1 -0
  409. package/dist/markdown.js +4 -0
  410. package/dist/markdown.js.map +1 -0
  411. package/dist/migrations.d.ts +53 -0
  412. package/dist/migrations.d.ts.map +1 -0
  413. package/dist/migrations.js +2 -0
  414. package/dist/migrations.js.map +1 -0
  415. package/dist/onboarding-base.d.ts +136 -0
  416. package/dist/onboarding-base.d.ts.map +1 -0
  417. package/dist/onboarding-base.js +2 -0
  418. package/dist/onboarding-base.js.map +1 -0
  419. package/dist/ownership.d.ts +76 -0
  420. package/dist/ownership.d.ts.map +1 -0
  421. package/dist/ownership.js +2 -0
  422. package/dist/ownership.js.map +1 -0
  423. package/dist/policy/engine.d.ts +40 -0
  424. package/dist/policy/engine.d.ts.map +1 -0
  425. package/dist/policy/engine.js +2 -0
  426. package/dist/policy/engine.js.map +1 -0
  427. package/dist/policy/opa-adapter.d.ts +46 -0
  428. package/dist/policy/opa-adapter.d.ts.map +1 -0
  429. package/dist/policy/opa-adapter.js +2 -0
  430. package/dist/policy/opa-adapter.js.map +1 -0
  431. package/dist/policy/spec.d.ts +115 -0
  432. package/dist/policy/spec.d.ts.map +1 -0
  433. package/dist/policy/spec.js +2 -0
  434. package/dist/policy/spec.js.map +1 -0
  435. package/dist/presentations.backcompat.d.ts +8 -0
  436. package/dist/presentations.backcompat.d.ts.map +1 -0
  437. package/dist/presentations.backcompat.js +2 -0
  438. package/dist/presentations.backcompat.js.map +1 -0
  439. package/dist/presentations.d.ts +96 -0
  440. package/dist/presentations.d.ts.map +1 -0
  441. package/dist/presentations.js +2 -0
  442. package/dist/presentations.js.map +1 -0
  443. package/dist/presentations.v2.d.ts +95 -0
  444. package/dist/presentations.v2.d.ts.map +1 -0
  445. package/dist/presentations.v2.js +2 -0
  446. package/dist/presentations.v2.js.map +1 -0
  447. package/dist/prompt.d.ts +61 -0
  448. package/dist/prompt.d.ts.map +1 -0
  449. package/dist/prompt.js +2 -0
  450. package/dist/prompt.js.map +1 -0
  451. package/dist/promptRegistry.d.ts +16 -0
  452. package/dist/promptRegistry.d.ts.map +1 -0
  453. package/dist/promptRegistry.js +2 -0
  454. package/dist/promptRegistry.js.map +1 -0
  455. package/dist/regenerator/adapters.d.ts +20 -0
  456. package/dist/regenerator/adapters.d.ts.map +1 -0
  457. package/dist/regenerator/adapters.js +0 -0
  458. package/dist/regenerator/executor.d.ts +71 -0
  459. package/dist/regenerator/executor.d.ts.map +1 -0
  460. package/dist/regenerator/executor.js +2 -0
  461. package/dist/regenerator/executor.js.map +1 -0
  462. package/dist/regenerator/index.d.ts +7 -0
  463. package/dist/regenerator/index.js +1 -0
  464. package/dist/regenerator/service.d.ts +34 -0
  465. package/dist/regenerator/service.d.ts.map +1 -0
  466. package/dist/regenerator/service.js +2 -0
  467. package/dist/regenerator/service.js.map +1 -0
  468. package/dist/regenerator/sinks.d.ts +27 -0
  469. package/dist/regenerator/sinks.d.ts.map +1 -0
  470. package/dist/regenerator/sinks.js +2 -0
  471. package/dist/regenerator/sinks.js.map +1 -0
  472. package/dist/regenerator/types.d.ts +108 -0
  473. package/dist/regenerator/types.d.ts.map +1 -0
  474. package/dist/regenerator/types.js +0 -0
  475. package/dist/regenerator/utils.d.ts +10 -0
  476. package/dist/regenerator/utils.d.ts.map +1 -0
  477. package/dist/regenerator/utils.js +2 -0
  478. package/dist/regenerator/utils.js.map +1 -0
  479. package/dist/registry.d.ts +45 -0
  480. package/dist/registry.d.ts.map +1 -0
  481. package/dist/registry.js +2 -0
  482. package/dist/registry.js.map +1 -0
  483. package/dist/resources.d.ts +65 -0
  484. package/dist/resources.d.ts.map +1 -0
  485. package/dist/resources.js +2 -0
  486. package/dist/resources.js.map +1 -0
  487. package/dist/schema/src/EnumType.js +1 -0
  488. package/dist/schema/src/FieldType.js +2 -0
  489. package/dist/schema/src/FieldType.js.map +1 -0
  490. package/dist/schema/src/ScalarTypeEnum.js +2 -0
  491. package/dist/schema/src/ScalarTypeEnum.js.map +1 -0
  492. package/dist/schema/src/SchemaModel.js +2 -0
  493. package/dist/schema/src/SchemaModel.js.map +1 -0
  494. package/dist/schema/src/index.js +1 -0
  495. package/dist/server/graphql-pothos.d.ts +19 -0
  496. package/dist/server/graphql-pothos.d.ts.map +1 -0
  497. package/dist/server/graphql-pothos.js +2 -0
  498. package/dist/server/graphql-pothos.js.map +1 -0
  499. package/dist/server/graphql-schema-export.d.ts +7 -0
  500. package/dist/server/graphql-schema-export.d.ts.map +1 -0
  501. package/dist/server/graphql-schema-export.js +2 -0
  502. package/dist/server/graphql-schema-export.js.map +1 -0
  503. package/dist/server/index.d.ts +9 -0
  504. package/dist/server/index.js +1 -0
  505. package/dist/server/provider-mcp.d.ts +34 -0
  506. package/dist/server/provider-mcp.d.ts.map +1 -0
  507. package/dist/server/provider-mcp.js +2 -0
  508. package/dist/server/provider-mcp.js.map +1 -0
  509. package/dist/server/rest-elysia.d.ts +41 -0
  510. package/dist/server/rest-elysia.d.ts.map +1 -0
  511. package/dist/server/rest-elysia.js +2 -0
  512. package/dist/server/rest-elysia.js.map +1 -0
  513. package/dist/server/rest-express.d.ts +17 -0
  514. package/dist/server/rest-express.d.ts.map +1 -0
  515. package/dist/server/rest-express.js +2 -0
  516. package/dist/server/rest-express.js.map +1 -0
  517. package/dist/server/rest-generic.d.ts +33 -0
  518. package/dist/server/rest-generic.d.ts.map +1 -0
  519. package/dist/server/rest-generic.js +2 -0
  520. package/dist/server/rest-generic.js.map +1 -0
  521. package/dist/server/rest-next-app.d.ts +16 -0
  522. package/dist/server/rest-next-app.d.ts.map +1 -0
  523. package/dist/server/rest-next-app.js +2 -0
  524. package/dist/server/rest-next-app.js.map +1 -0
  525. package/dist/server/rest-next-mcp.d.ts +12 -0
  526. package/dist/server/rest-next-mcp.d.ts.map +1 -0
  527. package/dist/server/rest-next-mcp.js +2 -0
  528. package/dist/server/rest-next-mcp.js.map +1 -0
  529. package/dist/server/rest-next-pages.d.ts +10 -0
  530. package/dist/server/rest-next-pages.d.ts.map +1 -0
  531. package/dist/server/rest-next-pages.js +2 -0
  532. package/dist/server/rest-next-pages.js.map +1 -0
  533. package/dist/spec.d.ts +149 -0
  534. package/dist/spec.d.ts.map +1 -0
  535. package/dist/spec.js +2 -0
  536. package/dist/spec.js.map +1 -0
  537. package/dist/telemetry/anomaly.d.ts +28 -0
  538. package/dist/telemetry/anomaly.d.ts.map +1 -0
  539. package/dist/telemetry/anomaly.js +2 -0
  540. package/dist/telemetry/anomaly.js.map +1 -0
  541. package/dist/telemetry/index.d.ts +4 -0
  542. package/dist/telemetry/index.js +1 -0
  543. package/dist/telemetry/spec.d.ts +99 -0
  544. package/dist/telemetry/spec.d.ts.map +1 -0
  545. package/dist/telemetry/spec.js +2 -0
  546. package/dist/telemetry/spec.js.map +1 -0
  547. package/dist/telemetry/tracker.d.ts +52 -0
  548. package/dist/telemetry/tracker.d.ts.map +1 -0
  549. package/dist/telemetry/tracker.js +2 -0
  550. package/dist/telemetry/tracker.js.map +1 -0
  551. package/dist/tests/index.d.ts +3 -0
  552. package/dist/tests/index.js +1 -0
  553. package/dist/tests/runner.d.ts +44 -0
  554. package/dist/tests/runner.d.ts.map +1 -0
  555. package/dist/tests/runner.js +2 -0
  556. package/dist/tests/runner.js.map +1 -0
  557. package/dist/tests/spec.d.ts +90 -0
  558. package/dist/tests/spec.d.ts.map +1 -0
  559. package/dist/tests/spec.js +2 -0
  560. package/dist/tests/spec.js.map +1 -0
  561. package/dist/themes.d.ts +56 -0
  562. package/dist/themes.d.ts.map +1 -0
  563. package/dist/themes.js +2 -0
  564. package/dist/themes.js.map +1 -0
  565. package/dist/translations/catalog.d.ts +29 -0
  566. package/dist/translations/catalog.d.ts.map +1 -0
  567. package/dist/translations/catalog.js +0 -0
  568. package/dist/translations/tenant.d.ts +16 -0
  569. package/dist/translations/tenant.d.ts.map +1 -0
  570. package/dist/translations/tenant.js +0 -0
  571. package/dist/types/all.d.ts +60 -0
  572. package/dist/types/all.js +0 -0
  573. package/dist/types.d.ts +86 -0
  574. package/dist/types.d.ts.map +1 -0
  575. package/dist/types.js +0 -0
  576. package/dist/workflow/adapters/db-adapter.d.ts +15 -0
  577. package/dist/workflow/adapters/db-adapter.d.ts.map +1 -0
  578. package/dist/workflow/adapters/db-adapter.js +2 -0
  579. package/dist/workflow/adapters/db-adapter.js.map +1 -0
  580. package/dist/workflow/adapters/file-adapter.d.ts +15 -0
  581. package/dist/workflow/adapters/file-adapter.d.ts.map +1 -0
  582. package/dist/workflow/adapters/file-adapter.js +2 -0
  583. package/dist/workflow/adapters/file-adapter.js.map +1 -0
  584. package/dist/workflow/adapters/index.d.ts +4 -0
  585. package/dist/workflow/adapters/index.js +1 -0
  586. package/dist/workflow/adapters/memory-store.d.ts +19 -0
  587. package/dist/workflow/adapters/memory-store.d.ts.map +1 -0
  588. package/dist/workflow/adapters/memory-store.js +2 -0
  589. package/dist/workflow/adapters/memory-store.js.map +1 -0
  590. package/dist/workflow/expression.d.ts +10 -0
  591. package/dist/workflow/expression.d.ts.map +1 -0
  592. package/dist/workflow/expression.js +2 -0
  593. package/dist/workflow/expression.js.map +1 -0
  594. package/dist/workflow/index.d.ts +10 -0
  595. package/dist/workflow/index.js +1 -0
  596. package/dist/workflow/runner.d.ts +74 -0
  597. package/dist/workflow/runner.d.ts.map +1 -0
  598. package/dist/workflow/runner.js +2 -0
  599. package/dist/workflow/runner.js.map +1 -0
  600. package/dist/workflow/spec.d.ts +100 -0
  601. package/dist/workflow/spec.d.ts.map +1 -0
  602. package/dist/workflow/spec.js +2 -0
  603. package/dist/workflow/spec.js.map +1 -0
  604. package/dist/workflow/state.d.ts +35 -0
  605. package/dist/workflow/state.d.ts.map +1 -0
  606. package/dist/workflow/state.js +0 -0
  607. package/dist/workflow/validation.d.ts +29 -0
  608. package/dist/workflow/validation.d.ts.map +1 -0
  609. package/dist/workflow/validation.js +2 -0
  610. package/dist/workflow/validation.js.map +1 -0
  611. package/package.json +401 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinks.js","names":["executor: ProposalExecutor","options: ExecutorSinkOptions"],"sources":["../../src/regenerator/sinks.ts"],"sourcesContent":["import type { ProposalSink, RegenerationContext, SpecChangeProposal } from './types';\nimport { ProposalExecutor } from './executor';\nimport type { ProposalExecutionResult } from './executor';\n\nexport interface ExecutorResultPayload {\n context: RegenerationContext;\n proposal: SpecChangeProposal;\n result: ProposalExecutionResult;\n}\n\nexport interface ExecutorSinkLogger {\n info?: (message: string, meta?: Record<string, unknown>) => void;\n error?: (message: string, error: Error, meta?: Record<string, unknown>) => void;\n}\n\nexport interface ExecutorSinkOptions {\n dryRun?: boolean;\n onResult?: (payload: ExecutorResultPayload) => void | Promise<void>;\n logger?: ExecutorSinkLogger;\n}\n\nexport class ExecutorProposalSink implements ProposalSink {\n constructor(\n private readonly executor: ProposalExecutor,\n private readonly options: ExecutorSinkOptions = {}\n ) {}\n\n async submit(\n context: RegenerationContext,\n proposal: SpecChangeProposal\n ): Promise<void> {\n const dryRun = this.options.dryRun ?? false;\n try {\n const result = await this.executor.execute(context, proposal, { dryRun });\n if (this.options.logger?.info) {\n this.options.logger.info('[regenerator] proposal executed', {\n proposalId: proposal.id,\n contextId: context.id,\n status: result.status,\n });\n }\n if (this.options.onResult) {\n await this.options.onResult({ context, proposal, result });\n }\n } catch (error) {\n if (this.options.logger?.error) {\n this.options.logger.error(\n '[regenerator] proposal execution failed',\n error instanceof Error ? error : new Error(String(error)),\n { proposalId: proposal.id, contextId: context.id }\n );\n }\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n}\n\n\n\n"],"mappings":"AAqBA,IAAa,EAAb,KAA0D,CACxD,YACE,EACA,EAAgD,EAAE,CAClD,CAFiB,KAAA,SAAA,EACA,KAAA,QAAA,EAGnB,MAAM,OACJ,EACA,EACe,CACf,IAAM,EAAS,KAAK,QAAQ,QAAU,GACtC,GAAI,CACF,IAAM,EAAS,MAAM,KAAK,SAAS,QAAQ,EAAS,EAAU,CAAE,SAAQ,CAAC,CACrE,KAAK,QAAQ,QAAQ,MACvB,KAAK,QAAQ,OAAO,KAAK,kCAAmC,CAC1D,WAAY,EAAS,GACrB,UAAW,EAAQ,GACnB,OAAQ,EAAO,OAChB,CAAC,CAEA,KAAK,QAAQ,UACf,MAAM,KAAK,QAAQ,SAAS,CAAE,UAAS,WAAU,SAAQ,CAAC,OAErD,EAAO,CAQd,MAPI,KAAK,QAAQ,QAAQ,OACvB,KAAK,QAAQ,OAAO,MAClB,0CACA,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC,CACzD,CAAE,WAAY,EAAS,GAAI,UAAW,EAAQ,GAAI,CACnD,CAEG,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { TelemetrySpec } from "../telemetry/spec.js";
2
+ import { AppBlueprintSpec, TenantAppConfig } from "../app-config/spec.js";
3
+ import { ResolvedAppConfig } from "../app-config/runtime.js";
4
+
5
+ //#region src/regenerator/types.d.ts
6
+ type RegeneratorSignal = TelemetrySignalEnvelope | ErrorSignalEnvelope | BehaviorSignalEnvelope;
7
+ interface TelemetrySignalEnvelope {
8
+ type: 'telemetry';
9
+ contextId: string;
10
+ signal: TelemetrySignal;
11
+ }
12
+ interface TelemetrySignal {
13
+ eventName: string;
14
+ eventVersion: number;
15
+ count: number;
16
+ windowStart: Date;
17
+ windowEnd: Date;
18
+ anomalyScore?: number;
19
+ classification?: 'normal' | 'warning' | 'critical';
20
+ metadata?: Record<string, unknown>;
21
+ telemetrySpec?: TelemetrySpec;
22
+ }
23
+ interface ErrorSignalEnvelope {
24
+ type: 'error';
25
+ contextId: string;
26
+ signal: ErrorSignal;
27
+ }
28
+ interface ErrorSignal {
29
+ id: string;
30
+ classification: 'runtime' | 'policy' | 'workflow' | 'unknown';
31
+ message: string;
32
+ occurredAt: Date;
33
+ count: number;
34
+ metadata?: Record<string, unknown>;
35
+ }
36
+ interface BehaviorSignalEnvelope {
37
+ type: 'behavior';
38
+ contextId: string;
39
+ signal: BehaviorSignal;
40
+ }
41
+ interface BehaviorSignal {
42
+ feature: string;
43
+ metric: 'usage' | 'conversion' | 'latency' | 'custom';
44
+ value: number;
45
+ baseline?: number;
46
+ windowStart: Date;
47
+ windowEnd: Date;
48
+ metadata?: Record<string, unknown>;
49
+ }
50
+ interface SpecChangeProposal {
51
+ id: string;
52
+ title: string;
53
+ summary: string;
54
+ confidence: ProposalConfidence;
55
+ rationale: string[];
56
+ target: ProposalTarget;
57
+ diff?: string;
58
+ actions: ProposalAction[];
59
+ blockers?: ProposalBlocker[];
60
+ createdAt: Date;
61
+ signalIds: string[];
62
+ }
63
+ type ProposalConfidence = 'low' | 'medium' | 'high';
64
+ interface ProposalTarget {
65
+ specType: 'workflow' | 'capability' | 'policy' | 'dataView' | 'telemetry' | 'experiment' | 'theme' | 'unknown';
66
+ reference: {
67
+ name: string;
68
+ version?: number;
69
+ };
70
+ tenantScoped?: boolean;
71
+ }
72
+ type ProposalAction = {
73
+ kind: 'update_blueprint';
74
+ summary: string;
75
+ } | {
76
+ kind: 'update_tenant_config';
77
+ summary: string;
78
+ } | {
79
+ kind: 'run_tests';
80
+ tests: string[];
81
+ } | {
82
+ kind: 'run_migrations';
83
+ migrations: string[];
84
+ } | {
85
+ kind: 'trigger_regeneration';
86
+ summary?: string;
87
+ };
88
+ interface ProposalBlocker {
89
+ description: string;
90
+ kind: 'missing_context' | 'insufficient_data' | 'user_feedback' | 'manual_review';
91
+ }
92
+ interface RegenerationContext {
93
+ id: string;
94
+ blueprint: AppBlueprintSpec;
95
+ tenantConfig: TenantAppConfig;
96
+ resolved: ResolvedAppConfig;
97
+ }
98
+ interface RegenerationRule {
99
+ readonly id: string;
100
+ readonly description: string;
101
+ evaluate(context: RegenerationContext, signals: RegeneratorSignal[]): Promise<SpecChangeProposal[]>;
102
+ }
103
+ interface ProposalSink {
104
+ submit(context: RegenerationContext, proposal: SpecChangeProposal): Promise<void>;
105
+ }
106
+ //#endregion
107
+ export { BehaviorSignal, BehaviorSignalEnvelope, ErrorSignal, ErrorSignalEnvelope, ProposalAction, ProposalBlocker, ProposalConfidence, ProposalSink, ProposalTarget, RegenerationContext, RegenerationRule, RegeneratorSignal, SpecChangeProposal, TelemetrySignal, TelemetrySignalEnvelope };
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/regenerator/types.ts"],"sourcesContent":[],"mappings":";;;;;KAOY,iBAAA,GACR,0BACA,sBACA;UAEa,uBAAA;EALL,IAAA,EAAA,WAAA;EACR,SAAA,EAAA,MAAA;EACA,MAAA,EAMM,eANN;;AACsB,UAQT,eAAA,CARS;EAET,SAAA,EAAA,MAAA;EAMA,YAAA,EAAA,MAAe;EAIjB,KAAA,EAAA,MAAA;EACF,WAAA,EADE,IACF;EAGA,SAAA,EAHA,IAGA;EACK,YAAA,CAAA,EAAA,MAAA;EAAa,cAAA,CAAA,EAAA,QAAA,GAAA,SAAA,GAAA,UAAA;EAGd,QAAA,CAAA,EAJJ,MAII,CAAA,MAAmB,EAAA,OAAA,CAAA;EAMnB,aAAA,CAAW,EATV,aAaJ;AAKd;AAMiB,UArBA,mBAAA,CAqBc;EAKhB,IAAA,EAAA,OAAA;EACF,SAAA,EAAA,MAAA;EACA,MAAA,EAzBH,WAyBG;;AAGI,UAzBA,WAAA,CAyBkB;EAIrB,EAAA,EAAA,MAAA;EAEJ,cAAA,EAAA,SAAA,GAAA,QAAA,GAAA,UAAA,GAAA,SAAA;EAEC,OAAA,EAAA,MAAA;EACE,UAAA,EA9BC,IA8BD;EACA,KAAA,EAAA,MAAA;EAAI,QAAA,CAAA,EA7BJ,MA6BI,CAAA,MAAA,EAAA,OAAA,CAAA;AAIjB;AAEiB,UAhCA,sBAAA,CAgCc;EAiBnB,IAAA,EAAA,UAAA;EAsBK,SAAA,EAAA,MAAA;EAKA,MAAA,EAzEP,cAyE0B;;AAGpB,UAzEC,cAAA,CAyED;EACJ,OAAA,EAAA,MAAA;EAAiB,MAAA,EAAA,OAAA,GAAA,YAAA,GAAA,SAAA,GAAA,QAAA;EAGZ,KAAA,EAAA,MAAA;EAIJ,QAAA,CAAA,EAAA,MAAA;EACA,WAAA,EA7EE,IA6EF;EACA,SAAA,EA7EA,IA6EA;EAAR,QAAA,CAAA,EA5EQ,MA4ER,CAAA,MAAA,EAAA,OAAA,CAAA;;AAGY,UA5EA,kBAAA,CA4EY;EAEhB,EAAA,EAAA,MAAA;EACC,KAAA,EAAA,MAAA;EACT,OAAA,EAAA,MAAA;EAAO,UAAA,EA5EE,kBA4EF;;UA1EF;;WAEC;aACE;aACA;;;KAID,kBAAA;UAEK,cAAA;;;;;;;;KAiBL,cAAA;;;;;;;;;;;;;;;;UAsBK,eAAA;;;;UAKA,mBAAA;;aAEJ;gBACG;YACJ;;UAGK,gBAAA;;;oBAIJ,8BACA,sBACR,QAAQ;;UAGI,YAAA;kBAEJ,+BACC,qBACT"}
File without changes
@@ -0,0 +1,10 @@
1
+ import { BehaviorSignal, BehaviorSignalEnvelope, ErrorSignal, ErrorSignalEnvelope, TelemetrySignal, TelemetrySignalEnvelope } from "./types.js";
2
+
3
+ //#region src/regenerator/utils.d.ts
4
+ type Clock = () => Date;
5
+ declare function telemetryToEnvelope(contextId: string, signal: TelemetrySignal, clock: Clock): TelemetrySignalEnvelope;
6
+ declare function errorToEnvelope(contextId: string, signal: ErrorSignal, clock: Clock): ErrorSignalEnvelope;
7
+ declare function behaviorToEnvelope(contextId: string, signal: BehaviorSignal, clock: Clock): BehaviorSignalEnvelope;
8
+ //#endregion
9
+ export { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope };
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/regenerator/utils.ts"],"sourcesContent":[],"mappings":";;;KASK,KAAA,SAAc;iBAEH,mBAAA,4BAEN,wBACD,QACN;AANE,iBAcW,eAAA,CAdO,SAAA,EAAA,MAAA,EAAA,MAAA,EAgBb,WAhBa,EAAA,KAAA,EAiBd,KAjBc,CAAA,EAkBpB,mBAlBoB;AAEP,iBAwBA,kBAAA,CAxBmB,SAAA,EAAA,MAAA,EAAA,MAAA,EA0BzB,cA1ByB,EAAA,KAAA,EA2B1B,KA3B0B,CAAA,EA4BhC,sBA5BgC"}
@@ -0,0 +1,2 @@
1
+ function e(e,t,n){return{type:`telemetry`,contextId:e,signal:r(t,n)}}function t(e,t,n){return{type:`error`,contextId:e,signal:i(t,n)}}function n(e,t,n){return{type:`behavior`,contextId:e,signal:a(t,n)}}function r(e,t){return{...e,windowStart:o(e.windowStart,t),windowEnd:o(e.windowEnd,t)}}function i(e,t){return{...e,occurredAt:o(e.occurredAt,t)}}function a(e,t){return{...e,windowStart:o(e.windowStart,t),windowEnd:o(e.windowEnd,t)}}function o(e,t){if(e instanceof Date)return e;let n=new Date(e);return Number.isNaN(n.getTime())?t():n}export{n as behaviorToEnvelope,t as errorToEnvelope,e as telemetryToEnvelope};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/regenerator/utils.ts"],"sourcesContent":["import type {\n BehaviorSignal,\n BehaviorSignalEnvelope,\n ErrorSignal,\n ErrorSignalEnvelope,\n TelemetrySignal,\n TelemetrySignalEnvelope,\n} from './types';\n\ntype Clock = () => Date;\n\nexport function telemetryToEnvelope(\n contextId: string,\n signal: TelemetrySignal,\n clock: Clock\n): TelemetrySignalEnvelope {\n return {\n type: 'telemetry',\n contextId,\n signal: normalizeTelemetryDates(signal, clock),\n };\n}\n\nexport function errorToEnvelope(\n contextId: string,\n signal: ErrorSignal,\n clock: Clock\n): ErrorSignalEnvelope {\n return {\n type: 'error',\n contextId,\n signal: normalizeErrorDates(signal, clock),\n };\n}\n\nexport function behaviorToEnvelope(\n contextId: string,\n signal: BehaviorSignal,\n clock: Clock\n): BehaviorSignalEnvelope {\n return {\n type: 'behavior',\n contextId,\n signal: normalizeBehaviorDates(signal, clock),\n };\n}\n\nfunction normalizeTelemetryDates(\n signal: TelemetrySignal,\n clock: Clock\n): TelemetrySignal {\n return {\n ...signal,\n windowStart: toDate(signal.windowStart, clock),\n windowEnd: toDate(signal.windowEnd, clock),\n };\n}\n\nfunction normalizeErrorDates(\n signal: ErrorSignal,\n clock: Clock\n): ErrorSignal {\n return {\n ...signal,\n occurredAt: toDate(signal.occurredAt, clock),\n };\n}\n\nfunction normalizeBehaviorDates(\n signal: BehaviorSignal,\n clock: Clock\n): BehaviorSignal {\n return {\n ...signal,\n windowStart: toDate(signal.windowStart, clock),\n windowEnd: toDate(signal.windowEnd, clock),\n };\n}\n\nfunction toDate(value: Date | string, clock: Clock): Date {\n if (value instanceof Date) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return clock();\n }\n return parsed;\n}\n\n\n\n"],"mappings":"AAWA,SAAgB,EACd,EACA,EACA,EACyB,CACzB,MAAO,CACL,KAAM,YACN,YACA,OAAQ,EAAwB,EAAQ,EAAM,CAC/C,CAGH,SAAgB,EACd,EACA,EACA,EACqB,CACrB,MAAO,CACL,KAAM,QACN,YACA,OAAQ,EAAoB,EAAQ,EAAM,CAC3C,CAGH,SAAgB,EACd,EACA,EACA,EACwB,CACxB,MAAO,CACL,KAAM,WACN,YACA,OAAQ,EAAuB,EAAQ,EAAM,CAC9C,CAGH,SAAS,EACP,EACA,EACiB,CACjB,MAAO,CACL,GAAG,EACH,YAAa,EAAO,EAAO,YAAa,EAAM,CAC9C,UAAW,EAAO,EAAO,UAAW,EAAM,CAC3C,CAGH,SAAS,EACP,EACA,EACa,CACb,MAAO,CACL,GAAG,EACH,WAAY,EAAO,EAAO,WAAY,EAAM,CAC7C,CAGH,SAAS,EACP,EACA,EACgB,CAChB,MAAO,CACL,GAAG,EACH,YAAa,EAAO,EAAO,YAAa,EAAM,CAC9C,UAAW,EAAO,EAAO,UAAW,EAAM,CAC3C,CAGH,SAAS,EAAO,EAAsB,EAAoB,CACxD,GAAI,aAAiB,KAAM,OAAO,EAClC,IAAM,EAAS,IAAI,KAAK,EAAM,CAI9B,OAHI,OAAO,MAAM,EAAO,SAAS,CAAC,CACzB,GAAO,CAET"}
@@ -0,0 +1,45 @@
1
+ import { ResourceRefDescriptor } from "./resources.js";
2
+ import { ContractSpec } from "./spec.js";
3
+ import { HandlerCtx } from "./types.js";
4
+ import { HandlerFor } from "./install.js";
5
+
6
+ //#region src/registry.d.ts
7
+
8
+ type OperationKey = `${string}.v${number}`;
9
+ declare function opKey(name: string, version: number): OperationKey;
10
+ type AnySpec = ContractSpec<AnySchemaModel, AnySchemaModel | ResourceRefDescriptor<boolean>>;
11
+ type AnyHandler = (args: any, ctx: HandlerCtx) => Promise<unknown>;
12
+ /**
13
+ * In-memory registry for ContractSpecs and their bound handlers.
14
+ * Provides validation, policy enforcement, and guarded event emission at execute time.
15
+ */
16
+ declare class SpecRegistry {
17
+ private specs;
18
+ private handlers;
19
+ /** Register a ContractSpec. Throws if duplicate key. */
20
+ register<I extends AnySchemaModel, O extends AnySchemaModel | ResourceRefDescriptor<boolean>>(spec: ContractSpec<I, O>): this;
21
+ /** Bind a handler implementation to a previously-registered spec. */
22
+ bind<I extends AnySchemaModel, O extends AnySchemaModel | ResourceRefDescriptor<boolean>>(spec: ContractSpec<I, O>, handler: HandlerFor<ContractSpec<I, O>>): this;
23
+ /** Retrieve a spec; if version omitted, returns highest version. */
24
+ getSpec(name: string, version?: number): AnySpec | undefined;
25
+ /** Retrieve a handler for given name/version. */
26
+ getHandler(name: string, version?: number): AnyHandler | undefined;
27
+ /** Iterate all registered specs. */
28
+ listSpecs(): AnySpec[];
29
+ /** Iterate all bound operations (spec+handler). */
30
+ listBound(): {
31
+ spec: AnySpec;
32
+ handler: AnyHandler;
33
+ }[];
34
+ /**
35
+ * Execute an operation by name/version:
36
+ * - Validates input against zod
37
+ * - Enforces policy (auth/flags/rate-limit/escalation)
38
+ * - Guards event emission to declared events (via ctx.__emitGuard__)
39
+ * - Validates output (SchemaModel outputs)
40
+ */
41
+ execute(name: string, version: number | undefined, rawInput: unknown, ctx: HandlerCtx): Promise<unknown>;
42
+ }
43
+ //#endregion
44
+ export { OperationKey, SpecRegistry, opKey };
45
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","names":[],"sources":["../src/registry.ts"],"sourcesContent":[],"mappings":";;;;;;;AAqB2B,KANf,YAAA,GAMe,GAAA,MAAA,KAAA,MAAA,EAAA;AAItB,iBARW,KAAA,CAQmB,IAAA,EAAA,MAAe,EAAA,OAAO,EAAA,MAAA,CAAA,EARH,YAQG;AAMzD,KAVK,OAAA,GAAU,YAUU,CATvB,cASuB,EARvB,cAQuB,GARN,qBAQM,CAAA,OAAA,CAAA,CAAA;KANpB,UAAA,GAYS,CAAA,IAAA,EAAA,GAAA,EAAA,GAAA,EAZqB,UAYrB,EAAA,GAZoC,OAYpC,CAAA,OAAA,CAAA;;;;;AAEJ,cARG,YAAA,CAQH;EASI,QAAA,KAAA;EACA,QAAA,QAAA;EAAiB;EACR,QAAA,CAAA,UAbT,cAaS,EAAA,UAZT,cAYS,GAZQ,qBAYR,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,EAXb,YAWa,CAXA,CAWA,EAXG,CAWH,CAAA,CAAA,EAAA,IAAA;EAAG;EAAhB,IAAA,CAAA,UAFI,cAEJ,EAAA,UADI,cACJ,GADqB,qBACrB,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,EAAA,YAAA,CAAa,CAAb,EAAgB,CAAhB,CAAA,EAAA,OAAA,EAA6B,UAA7B,CAAwC,YAAxC,CAAqD,CAArD,EAAwD,CAAxD,CAAA,CAAA,CAAA,EAAA,IAAA;EAAqD;EAAG,OAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAYvB,OAZuB,GAAA,SAAA;EAAhB;EAAX,UAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EA4BO,UA5BP,GAAA,SAAA;EAYI;EAgBG,SAAA,CAAA,CAAA,EAO/B,OAP+B,EAAA;EAO/B;EAKQ,SAAA,CAAA,CAAA,EAAA;IAAkB,IAAA,EAAlB,OAAkB;IAoBhC,OAAA,EApBgC,UAoBhC;EACJ,CAAA,EAAA;EAAO;;;;;;;6EADH,aACJ"}
@@ -0,0 +1,2 @@
1
+ import{eventKey as e}from"./events.js";import{isEmitDeclRef as t}from"./spec.js";function n(e,t){return`${e}.v${t}`}var r=class{specs=new Map;handlers=new Map;register(e){let t=n(e.meta.name,e.meta.version);if(this.specs.has(t))throw Error(`Duplicate spec ${t}`);return this.specs.set(t,e),this}bind(e,t){let r=n(e.meta.name,e.meta.version);if(!this.specs.has(r))throw Error(`Cannot bind; spec not found: ${r}`);if(this.handlers.has(r))throw Error(`Handler already bound for ${r}`);return this.handlers.set(r,t),this}getSpec(e,t){if(t!=null)return this.specs.get(n(e,t));let r,i=-1/0;for(let[t,n]of this.specs.entries())t.startsWith(`${e}.v`)&&n.meta.version>i&&(i=n.meta.version,r=n);return r}getHandler(e,t){let r=this.getSpec(e,t);if(r)return this.handlers.get(n(r.meta.name,r.meta.version))}listSpecs(){return[...this.specs.values()]}listBound(){let e=[];for(let[t,n]of this.specs.entries()){let r=this.handlers.get(t);r&&e.push({spec:n,handler:r})}return e}async execute(r,i,a,o){let s=this.getSpec(r,i);if(!s)throw Error(`Spec not found for ${r}${i?`.v${i}`:``}`);let c=n(s.meta.name,s.meta.version),l=this.handlers.get(c);if(!l)throw Error(`No handler bound for ${c}`);let u=s.io.input?.getZod().parse(a);if(o.decide){let[e,t]=s.meta.name.split(`.`),n=await o.decide({service:e,command:t,version:s.meta.version,actor:o.actor??`anonymous`,channel:o.channel,roles:o.roles,organizationId:o.organizationId,userId:o.userId,flags:[]});if(n.effect===`deny`)throw Error(`PolicyDenied: ${s.meta.name}.v${s.meta.version}`);if(n.rateLimit&&o.rateLimit){let e=n.rateLimit.key??`default`,t=n.rateLimit.rpm??60;await o.rateLimit(e,1,t)}}let d=new Map;if(s.sideEffects?.emits)for(let e of s.sideEffects.emits)t(e)?d.set(`${e.ref.name}.v${e.ref.version}`,e.ref.payload):d.set(`${e.name}.v${e.version}`,e.payload);let f=async(t,r,i)=>{let a=e(t,r),c=d.get(a);if(!c)throw Error(`UndeclaredEvent: ${a} not allowed by ${n(s.meta.name,s.meta.version)}`);let l=c.getZod().parse(i);await o.eventPublisher?.({name:t,version:r,payload:l,traceId:o.traceId})};o.appConfig&&(o.branding||=o.appConfig.branding,o.translation?o.translation.config||(o.translation={...o.translation,config:o.appConfig.translation}):o.translation={config:o.appConfig.translation});let p=o.telemetry,m=async(e,t)=>{if(!(!p||!e?.event))try{let n=e.properties?.(t)??{};await p.track(e.event.name,e.event.version??1,n,{tenantId:o.organizationId??void 0,organizationId:o.organizationId,userId:o.userId,actor:o.actor,channel:o.channel,metadata:o.traceId?{traceId:o.traceId}:void 0})}catch{}},h;try{h=await l(u,{...o,__emitGuard__:f})}catch(e){throw s.telemetry?.failure&&await m(s.telemetry.failure,{input:u??a,error:e}),e}s.telemetry?.success&&await m(s.telemetry.success,{input:u??a,output:h});let g=s.io.output;return g?.getZod?g.getZod().parse(h):h}};export{r as SpecRegistry,n as opKey};
2
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","names":["key: OperationKey","found: AnySpec | undefined","out: { spec: AnySpec; handler: AnyHandler }[]","key","result: unknown"],"sources":["../src/registry.ts"],"sourcesContent":["/**\n * SpecRegistry:\n * - Registers ContractSpecs (unique by name+version)\n * - Binds runtime handlers to specs\n * - Provides lookup, iteration, and a safe execute() with validation/policy/enforcement\n *\n * Includes a minimal OpRegistry shim for backward-compat (deprecated).\n */\nimport { type ContractSpec, type TelemetryTrigger, isEmitDeclRef } from './spec';\nimport type { ResourceRefDescriptor } from './resources';\nimport type { HandlerCtx } from './types';\nimport { eventKey } from './events';\nimport type { AnySchemaModel, ZodSchemaModel } from '@lssm/lib.schema';\nimport type { HandlerFor } from './install';\n\nexport type OperationKey = `${string}.v${number}`;\n\nexport function opKey(name: string, version: number): OperationKey {\n return `${name}.v${version}`;\n}\n\ntype AnySpec = ContractSpec<\n AnySchemaModel,\n AnySchemaModel | ResourceRefDescriptor<boolean>\n>;\ntype AnyHandler = (args: any, ctx: HandlerCtx) => Promise<unknown>;\n\n/**\n * In-memory registry for ContractSpecs and their bound handlers.\n * Provides validation, policy enforcement, and guarded event emission at execute time.\n */\nexport class SpecRegistry {\n private specs = new Map<OperationKey, AnySpec>();\n private handlers = new Map<OperationKey, AnyHandler>();\n\n /** Register a ContractSpec. Throws if duplicate key. */\n register<\n I extends AnySchemaModel,\n O extends AnySchemaModel | ResourceRefDescriptor<boolean>,\n >(spec: ContractSpec<I, O>): this {\n const key = opKey(spec.meta.name, spec.meta.version);\n if (this.specs.has(key)) throw new Error(`Duplicate spec ${key}`);\n this.specs.set(key, spec as AnySpec);\n return this;\n }\n\n /** Bind a handler implementation to a previously-registered spec. */\n bind<\n I extends AnySchemaModel,\n O extends AnySchemaModel | ResourceRefDescriptor<boolean>,\n >(spec: ContractSpec<I, O>, handler: HandlerFor<ContractSpec<I, O>>): this {\n const key: OperationKey = opKey(spec.meta.name, spec.meta.version);\n\n if (!this.specs.has(key))\n throw new Error(`Cannot bind; spec not found: ${key}`);\n if (this.handlers.has(key))\n throw new Error(`Handler already bound for ${key}`);\n this.handlers.set(key, handler);\n return this;\n }\n\n /** Retrieve a spec; if version omitted, returns highest version. */\n getSpec(name: string, version?: number): AnySpec | undefined {\n if (version != null) return this.specs.get(opKey(name, version));\n // find highest version by scanning keys of the same name\n let found: AnySpec | undefined;\n let maxV = -Infinity;\n for (const [k, s] of this.specs.entries()) {\n if (!k.startsWith(`${name}.v`)) continue;\n if (s.meta.version > maxV) {\n maxV = s.meta.version;\n found = s;\n }\n }\n return found;\n }\n\n /** Retrieve a handler for given name/version. */\n getHandler(name: string, version?: number): AnyHandler | undefined {\n const spec = this.getSpec(name, version);\n if (!spec) return undefined;\n return this.handlers.get(opKey(spec.meta.name, spec.meta.version));\n }\n\n /** Iterate all registered specs. */\n listSpecs(): AnySpec[] {\n return [...this.specs.values()];\n }\n\n /** Iterate all bound operations (spec+handler). */\n listBound(): { spec: AnySpec; handler: AnyHandler }[] {\n const out: { spec: AnySpec; handler: AnyHandler }[] = [];\n for (const [k, spec] of this.specs.entries()) {\n const h = this.handlers.get(k);\n if (h) out.push({ spec, handler: h });\n }\n return out;\n }\n\n /**\n * Execute an operation by name/version:\n * - Validates input against zod\n * - Enforces policy (auth/flags/rate-limit/escalation)\n * - Guards event emission to declared events (via ctx.__emitGuard__)\n * - Validates output (SchemaModel outputs)\n */\n async execute(\n name: string,\n version: number | undefined,\n rawInput: unknown,\n ctx: HandlerCtx\n ): Promise<unknown> {\n const spec = this.getSpec(name, version);\n if (!spec)\n throw new Error(\n `Spec not found for ${name}${version ? `.v${version}` : ''}`\n );\n\n const key = opKey(spec.meta.name, spec.meta.version);\n const handler = this.handlers.get(key);\n if (!handler) throw new Error(`No handler bound for ${key}`);\n\n // 1) Validate input\n const parsedInput = spec.io.input?.getZod().parse(rawInput);\n\n // 2) Policy enforcement\n if (ctx.decide) {\n const [service, command] = spec.meta.name.split('.');\n const decision = await ctx.decide({\n service: service!,\n command: command!,\n version: spec.meta.version,\n actor: ctx.actor ?? 'anonymous',\n channel: ctx.channel,\n roles: ctx.roles,\n organizationId: ctx.organizationId,\n userId: ctx.userId,\n flags: [], // adapter may fill flags from request\n });\n if (decision.effect === 'deny') {\n throw new Error(\n `PolicyDenied: ${spec.meta.name}.v${spec.meta.version}`\n );\n }\n if (decision.rateLimit && ctx.rateLimit) {\n const key = decision.rateLimit.key ?? 'default';\n const rpm = decision.rateLimit.rpm ?? 60;\n await ctx.rateLimit(key, 1, rpm);\n }\n // escalations are advisory; adapter may short-circuit if needed\n }\n\n // 3) Event emission guard\n const allowedEvents = new Map<string, AnySchemaModel>();\n if (spec.sideEffects?.emits) {\n for (const e of spec.sideEffects.emits) {\n if (isEmitDeclRef(e)) {\n allowedEvents.set(`${e.ref.name}.v${e.ref.version}`, e.ref.payload);\n } else {\n allowedEvents.set(`${e.name}.v${e.version}`, e.payload);\n }\n }\n }\n\n const emitGuard = async (\n eventName: string,\n eventVersion: number,\n payload: unknown\n ) => {\n const key2 = eventKey(eventName, eventVersion);\n const schema = allowedEvents.get(key2);\n if (!schema)\n throw new Error(\n `UndeclaredEvent: ${key2} not allowed by ${opKey(spec.meta.name, spec.meta.version)}`\n );\n const parsed = schema.getZod().parse(payload);\n // Delegate to service publisher if present\n await ctx.eventPublisher?.({\n name: eventName,\n version: eventVersion,\n payload: parsed,\n traceId: ctx.traceId,\n });\n };\n\n // 4) Execute handler with guarded ctx\n if (ctx.appConfig) {\n if (!ctx.branding) {\n ctx.branding = ctx.appConfig.branding;\n }\n if (!ctx.translation) {\n ctx.translation = { config: ctx.appConfig.translation };\n } else if (!ctx.translation.config) {\n ctx.translation = {\n ...ctx.translation,\n config: ctx.appConfig.translation,\n };\n }\n }\n const telemetryContext = ctx.telemetry;\n const trackTelemetry = async (\n trigger: TelemetryTrigger | undefined,\n details: { input: unknown; output?: unknown; error?: unknown }\n ) => {\n if (!telemetryContext || !trigger?.event) return;\n try {\n const props = trigger.properties?.(details) ?? {};\n await telemetryContext.track(\n trigger.event.name,\n trigger.event.version ?? 1,\n props,\n {\n tenantId: ctx.organizationId ?? undefined,\n organizationId: ctx.organizationId,\n userId: ctx.userId,\n actor: ctx.actor,\n channel: ctx.channel,\n metadata: ctx.traceId ? { traceId: ctx.traceId } : undefined,\n }\n );\n } catch (_error) {\n // Best-effort telemetry: swallow errors to avoid breaking the handler.\n }\n };\n\n let result: unknown;\n try {\n result = await handler(parsedInput, {\n ...ctx,\n __emitGuard__: emitGuard,\n });\n } catch (error) {\n if (spec.telemetry?.failure) {\n await trackTelemetry(spec.telemetry.failure, {\n input: parsedInput ?? rawInput,\n error,\n });\n }\n throw error;\n }\n\n if (spec.telemetry?.success) {\n await trackTelemetry(spec.telemetry.success, {\n input: parsedInput ?? rawInput,\n output: result,\n });\n }\n\n // 5) Validate output when the spec declares a SchemaModel output.\n const outputModel = spec.io.output as\n | AnySchemaModel\n | ResourceRefDescriptor<boolean>;\n if ((outputModel as AnySchemaModel)?.getZod) {\n const parsedOutput = (outputModel as AnySchemaModel)\n .getZod()\n .parse(result);\n return parsedOutput;\n }\n // ResourceRefDescriptor path: adapter may hydrate entity; leave as-is\n return result;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Tag } from "./ownership.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/resources.d.ts
5
+ interface ResourceMeta {
6
+ /** URI scheme, e.g. "content://doc/{id}" or "marketplace://offers/{city}/{tag}" */
7
+ uriTemplate: string;
8
+ /** Human title for discovery */
9
+ title: string;
10
+ /** Short description */
11
+ description?: string;
12
+ /** MIME type for resource body */
13
+ mimeType: string;
14
+ /** Tags for filtering/grouping */
15
+ tags?: Tag[];
16
+ }
17
+ interface ResourceTemplateSpec<I extends z.ZodType> {
18
+ meta: ResourceMeta;
19
+ /** Arguments to materialize the URI (zod validates input) */
20
+ input: I;
21
+ /**
22
+ * Resolve returns the resource body and a resolved URI.
23
+ * It MUST be read-only (no side effects).
24
+ */
25
+ resolve: (args: z.infer<I>, ctx: {
26
+ userId?: string | null;
27
+ orgId?: string | null;
28
+ locale?: string;
29
+ }) => Promise<{
30
+ uri: string;
31
+ mimeType?: string;
32
+ data: Uint8Array | string;
33
+ }>;
34
+ }
35
+ declare function defineResourceTemplate<I extends z.ZodType>(spec: ResourceTemplateSpec<I>): ResourceTemplateSpec<I>;
36
+ declare class ResourceRegistry {
37
+ private templates;
38
+ register<I extends z.ZodType>(tmpl: ResourceTemplateSpec<I>): this;
39
+ listTemplates(): ResourceTemplateSpec<any>[];
40
+ /** Try to match a concrete URI to a template by naive pattern substitution */
41
+ match(uri: string): {
42
+ tmpl: ResourceTemplateSpec<any>;
43
+ params: Record<string, string>;
44
+ } | undefined;
45
+ }
46
+ interface ResourceRefDescriptor<Many extends boolean> {
47
+ kind: 'resource_ref';
48
+ /** URI template, e.g. 'strit://spot/{id}' */
49
+ uriTemplate: string;
50
+ /** Variable name inside result payload to substitute into template; defaults to 'id' */
51
+ varName?: string;
52
+ /** Optional GraphQL type name to use when exposing over GraphQL (e.g., 'Spot') */
53
+ graphQLType: string;
54
+ /** Cardinality: when present and true, the handler returns an array of resources */
55
+ many: Many;
56
+ }
57
+ declare function resourceRef<Many extends boolean>(uriTemplate: string, opts: {
58
+ varName?: string;
59
+ graphQLType: string;
60
+ many: Many;
61
+ }): ResourceRefDescriptor<Many>;
62
+ declare function isResourceRef(x: unknown): x is ResourceRefDescriptor<boolean>;
63
+ //#endregion
64
+ export { ResourceMeta, ResourceRefDescriptor, ResourceRegistry, ResourceTemplateSpec, defineResourceTemplate, isResourceRef, resourceRef };
65
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","names":[],"sources":["../src/resources.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,YAAA;;EAAA,WAAA,EAAA,MAAY;EAaZ;EAAiC,KAAA,EAAA,MAAA;EAC1C;EAEC,WAAA,CAAA,EAAA,MAAA;EAMS;EAAN,QAAA,EAAA,MAAA;EAE2C;EAAhD,IAAA,CAAA,EAdE,GAcF,EAAA;;AAGS,UAdC,oBAcqB,CAAA,UAdU,CAAA,CAAE,OAcZ,CAAA,CAAA;EAAa,IAAA,EAb3C,YAa2C;EACtB;EAArB,KAAA,EAZC,CAYD;EACgB;;;AAIxB;EAGuB,OAAA,EAAA,CAAA,IAAA,EAdb,CAAA,CAAE,KAcW,CAdL,CAcK,CAAA,EAAA,GAAA,EAAA;IAAoC,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAArB,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAKvB,MAAA,CAAA,EAAA,MAAA;EASD,CAAA,EAAA,GA1BP,OA0BO,CAAA;IAAmC,GAAA,EAAA,MAAA;IAAM,QAAA,CAAA,EAAA,MAAA;IAoBtC,IAAA,EA9CsC,UA8CtC,GAAA,MAAqB;EAYtB,CAAA,CAAA;;AAGS,iBA1DT,sBA0DS,CAAA,UA1DwB,CAAA,CAAE,OA0D1B,CAAA,CAAA,IAAA,EAzDjB,oBAyDiB,CAzDI,CAyDJ,CAAA,CAAA,EAxDtB,oBAwDsB,CAxDD,CAwDC,CAAA;AAAtB,cApDU,gBAAA,CAoDV;EAAqB,QAAA,SAAA;EAUR,QAAA,CAAA,UA3DK,CAAA,CAAE,OA2DM,CAAmB,CAAA,IAAA,EA3DV,oBA2D+B,CA3DV,CA2DU,CAAA,CAAA,EAAA,IAAA;mBAtDtD;;;UASD;YAAmC;;;UAoBhC;;;;;;;;;QAST;;iBAGQ;;;QAEuC;IACpD,sBAAsB;iBAUT,aAAA,mBAAgC"}
@@ -0,0 +1,2 @@
1
+ import{z as e}from"zod";function t(e){return e}var n=class{templates=[];register(e){return this.templates.push(e),this}listTemplates(){return[...this.templates]}match(e){for(let t of this.templates){let n=RegExp(`^`+t.meta.uriTemplate.replace(/\{[^}]+\}/g,`([^/]+)`)+`$`),r=e.match(n);if(!r)continue;let i=[...t.meta.uriTemplate.matchAll(/\{([^}]+)\}/g)].map(e=>e[1]),a={};return i.forEach((e,t)=>a[e]=decodeURIComponent(r[t+1])),{tmpl:t,params:a}}}};function r(e,t){return{kind:`resource_ref`,uriTemplate:e,varName:t.varName??`id`,graphQLType:t.graphQLType,many:t.many}}function i(e){let t=e;return!!t&&t.kind===`resource_ref`&&typeof t.uriTemplate==`string`}export{n as ResourceRegistry,t as defineResourceTemplate,i as isResourceRef,r as resourceRef};
2
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","names":["params: Record<string, string>"],"sources":["../src/resources.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { Tag } from './ownership';\n\nexport interface ResourceMeta {\n /** URI scheme, e.g. \"content://doc/{id}\" or \"marketplace://offers/{city}/{tag}\" */\n uriTemplate: string;\n /** Human title for discovery */\n title: string;\n /** Short description */\n description?: string;\n /** MIME type for resource body */\n mimeType: string; // e.g., \"application/json\" | \"text/markdown\"\n /** Tags for filtering/grouping */\n tags?: Tag[];\n}\n\nexport interface ResourceTemplateSpec<I extends z.ZodType> {\n meta: ResourceMeta;\n /** Arguments to materialize the URI (zod validates input) */\n input: I;\n /**\n * Resolve returns the resource body and a resolved URI.\n * It MUST be read-only (no side effects).\n */\n resolve: (\n args: z.infer<I>,\n ctx: { userId?: string | null; orgId?: string | null; locale?: string }\n ) => Promise<{ uri: string; mimeType?: string; data: Uint8Array | string }>;\n}\n\nexport function defineResourceTemplate<I extends z.ZodType>(\n spec: ResourceTemplateSpec<I>\n): ResourceTemplateSpec<I> {\n return spec;\n}\n\nexport class ResourceRegistry {\n private templates: ResourceTemplateSpec<any>[] = [];\n\n register<I extends z.ZodType>(tmpl: ResourceTemplateSpec<I>): this {\n this.templates.push(tmpl);\n return this;\n }\n\n listTemplates() {\n return [...this.templates];\n }\n\n /** Try to match a concrete URI to a template by naive pattern substitution */\n // MVP: simple matcher; replace {param} with (.+) and capture\n match(\n uri: string\n ):\n | { tmpl: ResourceTemplateSpec<any>; params: Record<string, string> }\n | undefined {\n for (const tmpl of this.templates) {\n const re = new RegExp(\n '^' + tmpl.meta.uriTemplate.replace(/\\{[^}]+\\}/g, '([^/]+)') + '$'\n );\n const m = uri.match(re);\n if (!m) continue;\n const names = [...tmpl.meta.uriTemplate.matchAll(/\\{([^}]+)\\}/g)].map(\n (x) => x[1]\n );\n const params: Record<string, string> = {};\n names.forEach((n, i) => (params[n!] = decodeURIComponent(m[i + 1]!)));\n return { tmpl, params };\n }\n return undefined;\n }\n}\n\n// ResourceRef (output descriptor for ContractSpecs)\nexport interface ResourceRefDescriptor<Many extends boolean> {\n kind: 'resource_ref';\n /** URI template, e.g. 'strit://spot/{id}' */\n uriTemplate: string;\n /** Variable name inside result payload to substitute into template; defaults to 'id' */\n varName?: string;\n /** Optional GraphQL type name to use when exposing over GraphQL (e.g., 'Spot') */\n graphQLType: string;\n /** Cardinality: when present and true, the handler returns an array of resources */\n many: Many;\n}\n\nexport function resourceRef<Many extends boolean>(\n uriTemplate: string,\n opts: { varName?: string; graphQLType: string; many: Many }\n): ResourceRefDescriptor<Many> {\n return {\n kind: 'resource_ref',\n uriTemplate,\n varName: opts.varName ?? 'id',\n graphQLType: opts.graphQLType,\n many: opts.many,\n };\n}\n\nexport function isResourceRef(x: unknown): x is ResourceRefDescriptor<boolean> {\n const o = x as any;\n return !!o && o.kind === 'resource_ref' && typeof o.uriTemplate === 'string';\n}\n"],"mappings":"wBA8BA,SAAgB,EACd,EACyB,CACzB,OAAO,EAGT,IAAa,EAAb,KAA8B,CAC5B,UAAiD,EAAE,CAEnD,SAA8B,EAAqC,CAEjE,OADA,KAAK,UAAU,KAAK,EAAK,CAClB,KAGT,eAAgB,CACd,MAAO,CAAC,GAAG,KAAK,UAAU,CAK5B,MACE,EAGY,CACZ,IAAK,IAAM,KAAQ,KAAK,UAAW,CACjC,IAAM,EAAS,OACb,IAAM,EAAK,KAAK,YAAY,QAAQ,aAAc,UAAU,CAAG,IAChE,CACK,EAAI,EAAI,MAAM,EAAG,CACvB,GAAI,CAAC,EAAG,SACR,IAAM,EAAQ,CAAC,GAAG,EAAK,KAAK,YAAY,SAAS,eAAe,CAAC,CAAC,IAC/D,GAAM,EAAE,GACV,CACKA,EAAiC,EAAE,CAEzC,OADA,EAAM,SAAS,EAAG,IAAO,EAAO,GAAM,mBAAmB,EAAE,EAAI,GAAI,CAAE,CAC9D,CAAE,OAAM,SAAQ,IAmB7B,SAAgB,EACd,EACA,EAC6B,CAC7B,MAAO,CACL,KAAM,eACN,cACA,QAAS,EAAK,SAAW,KACzB,YAAa,EAAK,YAClB,KAAM,EAAK,KACZ,CAGH,SAAgB,EAAc,EAAiD,CAC7E,IAAM,EAAI,EACV,MAAO,CAAC,CAAC,GAAK,EAAE,OAAS,gBAAkB,OAAO,EAAE,aAAgB"}
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";import"graphql";
@@ -0,0 +1,2 @@
1
+ import{z as e}from"zod";import{GraphQLScalarType as t,Kind as n}from"graphql";var r=class extends t{zodSchema;jsonSchemaDef;constructor(e){super(e),this.zodSchema=e.zod,this.jsonSchemaDef=e.jsonSchema}getZod(){return this.zodSchema}getPothos(){return this}getJson(){return typeof this.jsonSchemaDef==`function`?this.jsonSchemaDef():this.jsonSchemaDef}getJsonSchemaDef(){return this.jsonSchemaDef}getJsonSchema(){let e=t=>{let n=typeof t==`function`?t():t;if(Array.isArray(n))return n.map(t=>e(t));if(n&&typeof n==`object`){let t={};for(let[r,i]of Object.entries(n))t[r]=e(i);return t}return n};return e(this.getJson())}};export{r as FieldType};
2
+ //# sourceMappingURL=FieldType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldType.js","names":["obj: Record<string, unknown>"],"sources":["../../../../schema/src/FieldType.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n GraphQLScalarType,\n type GraphQLScalarTypeConfig,\n Kind,\n type ValueNode,\n} from 'graphql';\n\nexport interface FieldTypeConfig<TInternal, TExternal = TInternal>\n extends GraphQLScalarTypeConfig<TInternal, TExternal> {\n zod: z.ZodType<TInternal>;\n jsonSchema: unknown | (() => unknown);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyFieldType = FieldType<any, any>;\n\n/**\n * GraphQL scalar wrapper that carries zod and JSON Schema metadata.\n *\n * TInternal is the runtime representation; TExternal is the GraphQL output.\n */\nexport class FieldType<\n TInternal,\n TExternal = TInternal,\n> extends GraphQLScalarType<TInternal, TExternal> {\n private zodSchema: z.ZodType<TInternal>;\n private readonly jsonSchemaDef?: unknown | (() => unknown);\n\n constructor(config: FieldTypeConfig<TInternal, TExternal>) {\n super(config);\n this.zodSchema = config.zod;\n this.jsonSchemaDef = config.jsonSchema;\n }\n\n /** Return the attached zod schema for validation. */\n getZod(): z.ZodType<TInternal> {\n return this.zodSchema;\n }\n\n /** GraphQL scalar instance usable by Pothos or vanilla GraphQL. */\n getPothos(): GraphQLScalarType<TInternal, TExternal> {\n return this;\n }\n\n /** Return the JSON Schema (evaluates factory if provided). */\n getJson(): unknown {\n return typeof this.jsonSchemaDef === 'function'\n ? (this.jsonSchemaDef as () => unknown)()\n : this.jsonSchemaDef;\n }\n\n // Return the raw jsonSchema config (value or factory)\n getJsonSchemaDef(): unknown | (() => unknown) {\n return this.jsonSchemaDef;\n }\n\n // Return a deep-resolved JSON Schema (evaluates factory and nested factories)\n getJsonSchema(): unknown {\n const deepResolve = (v: unknown): unknown => {\n const value = typeof v === 'function' ? (v as () => unknown)() : v;\n if (Array.isArray(value)) return value.map((item) => deepResolve(item));\n if (value && typeof value === 'object') {\n const obj: Record<string, unknown> = {};\n for (const [k, val] of Object.entries(\n value as Record<string, unknown>\n )) {\n obj[k] = deepResolve(val);\n }\n return obj;\n }\n return value;\n };\n return deepResolve(this.getJson());\n }\n}\n\nexport type ZodFieldType<Field extends AnyFieldType> = z.infer<\n ReturnType<Field['getZod']>\n>;\n"],"mappings":"8EAsBA,IAAa,EAAb,cAGU,CAAwC,CAChD,UACA,cAEA,YAAY,EAA+C,CACzD,MAAM,EAAO,CACb,KAAK,UAAY,EAAO,IACxB,KAAK,cAAgB,EAAO,WAI9B,QAA+B,CAC7B,OAAO,KAAK,UAId,WAAqD,CACnD,OAAO,KAIT,SAAmB,CACjB,OAAO,OAAO,KAAK,eAAkB,WAChC,KAAK,eAAiC,CACvC,KAAK,cAIX,kBAA8C,CAC5C,OAAO,KAAK,cAId,eAAyB,CACvB,IAAM,EAAe,GAAwB,CAC3C,IAAM,EAAQ,OAAO,GAAM,WAAc,GAAqB,CAAG,EACjE,GAAI,MAAM,QAAQ,EAAM,CAAE,OAAO,EAAM,IAAK,GAAS,EAAY,EAAK,CAAC,CACvE,GAAI,GAAS,OAAO,GAAU,SAAU,CACtC,IAAMA,EAA+B,EAAE,CACvC,IAAK,GAAM,CAAC,EAAG,KAAQ,OAAO,QAC5B,EACD,CACC,EAAI,GAAK,EAAY,EAAI,CAE3B,OAAO,EAET,OAAO,GAET,OAAO,EAAY,KAAK,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{FieldType as e}from"./FieldType.js";import{z as t}from"zod";import{Kind as n}from"graphql";const r=/^[A-Za-z]{2}(?:-[A-Za-z0-9]{2,8})*$/,i=/^(?:UTC|[A-Za-z_]+\/[A-Za-z_]+)$/,a=/^[+]?\d[\d\s().-]{3,}$/,o=/^[A-Z]{3}$/,s=/^[A-Z]{2}$/,c=-180,l={String_unsecure:()=>new e({name:`String_unsecure`,description:`Unvalidated string scalar`,zod:t.string(),parseValue:e=>t.string().parse(e),serialize:e=>String(e),parseLiteral:e=>{if(e.kind!==n.STRING)throw TypeError(`Invalid literal`);return e.value},jsonSchema:{type:`string`}}),Int_unsecure:()=>new e({name:`Int_unsecure`,description:`Unvalidated integer scalar`,zod:t.number().int(),parseValue:e=>{let n=typeof e==`number`?e:Number(e);return t.number().int().parse(n)},serialize:e=>Math.trunc(typeof e==`number`?e:Number(e)),parseLiteral:e=>{if(e.kind!==n.INT)throw TypeError(`Invalid literal`);return Number(e.value)},jsonSchema:{type:`integer`}}),Float_unsecure:()=>new e({name:`Float_unsecure`,description:`Unvalidated float scalar`,zod:t.number(),parseValue:e=>{let n=typeof e==`number`?e:Number(e);return t.number().parse(n)},serialize:e=>Number(e),parseLiteral:e=>{if(e.kind!==n.FLOAT&&e.kind!==n.INT)throw TypeError(`Invalid literal`);return Number(e.value)},jsonSchema:{type:`number`}}),Boolean:()=>new e({name:`Boolean`,description:`Unvalidated boolean scalar`,zod:t.boolean(),parseValue:e=>t.coerce.boolean().parse(e),serialize:e=>!!e,parseLiteral:e=>{if(e.kind!==n.BOOLEAN)throw TypeError(`Invalid literal`);return e.value},jsonSchema:{type:`boolean`}}),ID:()=>new e({name:`ID`,description:`Unvalidated id scalar`,zod:t.string(),parseValue:e=>t.string().parse(e),serialize:e=>String(e),parseLiteral:e=>{if(e.kind!==n.STRING)throw TypeError(`Invalid literal`);return e.value},jsonSchema:{type:`string`}}),JSON:()=>new e({name:`JSON`,zod:t.any(),parseValue:e=>e,serialize:e=>e,jsonSchema:{}}),JSONObject:()=>new e({name:`JSONObject`,zod:t.record(t.string(),t.any()),parseValue:e=>t.record(t.string(),t.any()).parse(e),serialize:e=>e??{},jsonSchema:{type:`object`}}),Date:()=>new e({name:`Date`,zod:t.date(),parseValue:e=>e instanceof Date?e:new Date(String(e)),serialize:e=>e instanceof Date?e.toISOString().split(`T`)[0]:String(e),jsonSchema:{type:`string`,format:`date`}}),DateTime:()=>new e({name:`DateTime`,zod:t.date(),parseValue:e=>e instanceof Date?e:new Date(String(e)),serialize:e=>e instanceof Date?e.toISOString():String(e),jsonSchema:{type:`string`,format:`date-time`}}),Time:()=>new e({name:`Time`,zod:t.string().regex(/^\d{2}:\d{2}(:\d{2})?$/),parseValue:e=>t.string().regex(/^\d{2}:\d{2}(:\d{2})?$/).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:`^\\d{2}:\\d{2}(:\\d{2})?$`}}),EmailAddress:()=>new e({name:`EmailAddress`,zod:t.string().email(),parseValue:e=>t.string().email().parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,format:`email`}}),URL:()=>new e({name:`URL`,zod:t.string().url(),parseValue:e=>t.string().url().parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,format:`uri`}}),PhoneNumber:()=>new e({name:`PhoneNumber`,zod:t.string().regex(a),parseValue:e=>t.string().regex(a).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:a.source}}),NonEmptyString:()=>new e({name:`NonEmptyString`,zod:t.string().min(1),parseValue:e=>t.string().min(1).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,minLength:1}}),Locale:()=>new e({name:`Locale`,zod:t.string().regex(r),parseValue:e=>t.string().regex(r).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:r.source}}),TimeZone:()=>new e({name:`TimeZone`,zod:t.string().regex(i),parseValue:e=>t.string().regex(i).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:i.source}}),Latitude:()=>new e({name:`Latitude`,zod:t.number().min(-90).max(90),parseValue:e=>t.coerce.number().min(-90).max(90).parse(e),serialize:e=>Number(e),jsonSchema:{type:`number`,minimum:-90,maximum:90}}),Longitude:()=>new e({name:`Longitude`,zod:t.number().min(c).max(180),parseValue:e=>t.coerce.number().min(c).max(180).parse(e),serialize:e=>Number(e),jsonSchema:{type:`number`,minimum:c,maximum:180}}),Currency:()=>new e({name:`Currency`,zod:t.string().regex(o),parseValue:e=>t.string().regex(o).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:o.source}}),CountryCode:()=>new e({name:`CountryCode`,zod:t.string().regex(s),parseValue:e=>t.string().regex(s).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:s.source}})};export{l as ScalarTypeEnum};
2
+ //# sourceMappingURL=ScalarTypeEnum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScalarTypeEnum.js","names":[],"sources":["../../../../schema/src/ScalarTypeEnum.ts"],"sourcesContent":["import { z } from 'zod';\nimport { type GraphQLScalarTypeConfig, Kind, type ValueNode } from 'graphql';\nimport { FieldType } from './FieldType';\n\n// Helpers to build standard scalars\nconst localeRegex = /^[A-Za-z]{2}(?:-[A-Za-z0-9]{2,8})*$/;\nconst timezoneRegex = /^(?:UTC|[A-Za-z_]+\\/[A-Za-z_]+)$/;\nconst phoneRegex = /^[+]?\\d[\\d\\s().-]{3,}$/;\nconst currencyRegex = /^[A-Z]{3}$/;\nconst countryRegex = /^[A-Z]{2}$/;\nconst latMin = -90;\nconst latMax = 90;\nconst lonMin = -180;\nconst lonMax = 180;\n\n/**\n * Factory functions for common scalar FieldTypes with zod/GraphQL/JSON Schema.\n */\nexport const ScalarTypeEnum = {\n // primitives (_unsecure)\n String_unsecure: (): FieldType<string> =>\n new FieldType<string>({\n name: 'String_unsecure',\n description: 'Unvalidated string scalar',\n zod: z.string(),\n parseValue: (v) => z.string().parse(v),\n serialize: (v) => String(v),\n parseLiteral: (ast: ValueNode) => {\n if (ast.kind !== Kind.STRING) throw new TypeError('Invalid literal');\n return ast.value;\n },\n jsonSchema: { type: 'string' },\n }),\n Int_unsecure: (): FieldType<number> =>\n new FieldType<number>({\n name: 'Int_unsecure',\n description: 'Unvalidated integer scalar',\n zod: z.number().int(),\n parseValue: (v) => {\n const num = typeof v === 'number' ? v : Number(v as unknown);\n return z.number().int().parse(num);\n },\n serialize: (v) => Math.trunc(typeof v === 'number' ? v : Number(v)),\n parseLiteral: (ast: ValueNode) => {\n if (ast.kind !== Kind.INT) throw new TypeError('Invalid literal');\n return Number(ast.value);\n },\n jsonSchema: { type: 'integer' },\n }),\n Float_unsecure: (): FieldType<number> =>\n new FieldType<number>({\n name: 'Float_unsecure',\n description: 'Unvalidated float scalar',\n zod: z.number(),\n parseValue: (v) => {\n const num = typeof v === 'number' ? v : Number(v as unknown);\n return z.number().parse(num);\n },\n serialize: (v) => Number(v),\n parseLiteral: (ast: ValueNode) => {\n if (ast.kind !== Kind.FLOAT && ast.kind !== Kind.INT)\n throw new TypeError('Invalid literal');\n return Number(ast.value);\n },\n jsonSchema: { type: 'number' },\n }),\n Boolean: (): FieldType<boolean> =>\n new FieldType<boolean>({\n name: 'Boolean',\n description: 'Unvalidated boolean scalar',\n zod: z.boolean(),\n parseValue: (v) => z.coerce.boolean().parse(v),\n serialize: (v) => Boolean(v),\n parseLiteral: (ast: ValueNode) => {\n if (ast.kind !== Kind.BOOLEAN) throw new TypeError('Invalid literal');\n return ast.value;\n },\n jsonSchema: { type: 'boolean' },\n }),\n ID: (): FieldType<string> =>\n new FieldType<string>({\n name: 'ID',\n description: 'Unvalidated id scalar',\n zod: z.string(),\n parseValue: (v) => z.string().parse(v),\n serialize: (v) => String(v),\n parseLiteral: (ast: ValueNode) => {\n if (ast.kind !== Kind.STRING) throw new TypeError('Invalid literal');\n return ast.value;\n },\n jsonSchema: { type: 'string' },\n }),\n\n // Validated custom scalars\n JSON: (): FieldType<unknown> =>\n new FieldType<unknown>({\n name: 'JSON',\n zod: z.any(),\n parseValue: (v) => v,\n serialize: (v) => v,\n jsonSchema: {},\n }),\n JSONObject: (): FieldType<Record<string, unknown>> =>\n new FieldType<Record<string, unknown>>({\n name: 'JSONObject',\n zod: z.record(z.string(), z.any()),\n parseValue: (v) => z.record(z.string(), z.any()).parse(v),\n serialize: (v) => (v ?? {}) as Record<string, unknown>,\n jsonSchema: { type: 'object' },\n }),\n Date: (): FieldType<Date, string> =>\n new FieldType<Date, string>({\n name: 'Date',\n zod: z.date(),\n parseValue: (v) => (v instanceof Date ? v : new Date(String(v))),\n serialize: (v) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n v instanceof Date ? v.toISOString().split('T')[0]! : String(v),\n jsonSchema: { type: 'string', format: 'date' },\n }),\n DateTime: (): FieldType<Date, string> =>\n new FieldType<Date, string>({\n name: 'DateTime',\n zod: z.date(),\n parseValue: (v) => (v instanceof Date ? v : new Date(String(v))),\n serialize: (v) => {\n return v instanceof Date ? v.toISOString() : String(v);\n },\n jsonSchema: { type: 'string', format: 'date-time' },\n }),\n Time: (): FieldType<string> =>\n new FieldType<string>({\n name: 'Time',\n zod: z.string().regex(/^\\d{2}:\\d{2}(:\\d{2})?$/),\n parseValue: (v) =>\n z\n .string()\n .regex(/^\\d{2}:\\d{2}(:\\d{2})?$/)\n .parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', pattern: '^\\\\d{2}:\\\\d{2}(:\\\\d{2})?$' },\n }),\n EmailAddress: (): FieldType<string> =>\n new FieldType<string>({\n name: 'EmailAddress',\n zod: z.string().email(),\n parseValue: (v) => z.string().email().parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', format: 'email' },\n }),\n URL: (): FieldType<string> =>\n new FieldType<string>({\n name: 'URL',\n zod: z.string().url(),\n parseValue: (v) => z.string().url().parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', format: 'uri' },\n }),\n PhoneNumber: (): FieldType<string> =>\n new FieldType<string>({\n name: 'PhoneNumber',\n zod: z.string().regex(phoneRegex),\n parseValue: (v) => z.string().regex(phoneRegex).parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', pattern: phoneRegex.source },\n }),\n NonEmptyString: (): FieldType<string> =>\n new FieldType<string>({\n name: 'NonEmptyString',\n zod: z.string().min(1),\n parseValue: (v) => z.string().min(1).parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', minLength: 1 },\n }),\n Locale: (): FieldType<string> =>\n new FieldType<string>({\n name: 'Locale',\n zod: z.string().regex(localeRegex),\n parseValue: (v) => z.string().regex(localeRegex).parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', pattern: localeRegex.source },\n }),\n TimeZone: (): FieldType<string> =>\n new FieldType<string>({\n name: 'TimeZone',\n zod: z.string().regex(timezoneRegex),\n parseValue: (v) => z.string().regex(timezoneRegex).parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', pattern: timezoneRegex.source },\n }),\n Latitude: (): FieldType<number> =>\n new FieldType<number>({\n name: 'Latitude',\n zod: z.number().min(latMin).max(latMax),\n parseValue: (v) => z.coerce.number().min(latMin).max(latMax).parse(v),\n serialize: (v) => Number(v),\n jsonSchema: { type: 'number', minimum: latMin, maximum: latMax },\n }),\n Longitude: (): FieldType<number> =>\n new FieldType<number>({\n name: 'Longitude',\n zod: z.number().min(lonMin).max(lonMax),\n parseValue: (v) => z.coerce.number().min(lonMin).max(lonMax).parse(v),\n serialize: (v) => Number(v),\n jsonSchema: { type: 'number', minimum: lonMin, maximum: lonMax },\n }),\n Currency: (): FieldType<string> =>\n new FieldType<string>({\n name: 'Currency',\n zod: z.string().regex(currencyRegex),\n parseValue: (v) => z.string().regex(currencyRegex).parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', pattern: currencyRegex.source },\n }),\n CountryCode: (): FieldType<string> =>\n new FieldType<string>({\n name: 'CountryCode',\n zod: z.string().regex(countryRegex),\n parseValue: (v) => z.string().regex(countryRegex).parse(v),\n serialize: (v) => String(v),\n jsonSchema: { type: 'string', pattern: countryRegex.source },\n }),\n // GeoJSON: (): FieldType<Record<string, unknown>, Record<string, unknown>> =>\n // new FieldType<Record<string, unknown>, Record<string, unknown>>({\n // name: 'GeoJSON',\n // zod: z.object({ type: z.string(), coordinates: z.any() }).passthrough(),\n // parseValue: (v) =>\n // z\n // .object({ type: z.string(), coordinates: z.any() })\n // .passthrough()\n // .parse(v),\n // serialize: (v) => v,\n // jsonSchema: { type: 'object' },\n // }),\n} as const;\nexport type ScalarTypeEnum = [keyof typeof ScalarTypeEnum];\n"],"mappings":"kGAKA,MAAM,EAAc,sCACd,EAAgB,mCAChB,EAAa,yBACb,EAAgB,aAChB,EAAe,aAGf,EAAS,KAMF,EAAiB,CAE5B,oBACE,IAAI,EAAkB,CACpB,KAAM,kBACN,YAAa,4BACb,IAAK,EAAE,QAAQ,CACf,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CACtC,UAAY,GAAM,OAAO,EAAE,CAC3B,aAAe,GAAmB,CAChC,GAAI,EAAI,OAAS,EAAK,OAAQ,MAAU,UAAU,kBAAkB,CACpE,OAAO,EAAI,OAEb,WAAY,CAAE,KAAM,SAAU,CAC/B,CAAC,CACJ,iBACE,IAAI,EAAkB,CACpB,KAAM,eACN,YAAa,6BACb,IAAK,EAAE,QAAQ,CAAC,KAAK,CACrB,WAAa,GAAM,CACjB,IAAM,EAAM,OAAO,GAAM,SAAW,EAAI,OAAO,EAAa,CAC5D,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAI,EAEpC,UAAY,GAAM,KAAK,MAAM,OAAO,GAAM,SAAW,EAAI,OAAO,EAAE,CAAC,CACnE,aAAe,GAAmB,CAChC,GAAI,EAAI,OAAS,EAAK,IAAK,MAAU,UAAU,kBAAkB,CACjE,OAAO,OAAO,EAAI,MAAM,EAE1B,WAAY,CAAE,KAAM,UAAW,CAChC,CAAC,CACJ,mBACE,IAAI,EAAkB,CACpB,KAAM,iBACN,YAAa,2BACb,IAAK,EAAE,QAAQ,CACf,WAAa,GAAM,CACjB,IAAM,EAAM,OAAO,GAAM,SAAW,EAAI,OAAO,EAAa,CAC5D,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAI,EAE9B,UAAY,GAAM,OAAO,EAAE,CAC3B,aAAe,GAAmB,CAChC,GAAI,EAAI,OAAS,EAAK,OAAS,EAAI,OAAS,EAAK,IAC/C,MAAU,UAAU,kBAAkB,CACxC,OAAO,OAAO,EAAI,MAAM,EAE1B,WAAY,CAAE,KAAM,SAAU,CAC/B,CAAC,CACJ,YACE,IAAI,EAAmB,CACrB,KAAM,UACN,YAAa,6BACb,IAAK,EAAE,SAAS,CAChB,WAAa,GAAM,EAAE,OAAO,SAAS,CAAC,MAAM,EAAE,CAC9C,UAAY,GAAM,EAAQ,EAC1B,aAAe,GAAmB,CAChC,GAAI,EAAI,OAAS,EAAK,QAAS,MAAU,UAAU,kBAAkB,CACrE,OAAO,EAAI,OAEb,WAAY,CAAE,KAAM,UAAW,CAChC,CAAC,CACJ,OACE,IAAI,EAAkB,CACpB,KAAM,KACN,YAAa,wBACb,IAAK,EAAE,QAAQ,CACf,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CACtC,UAAY,GAAM,OAAO,EAAE,CAC3B,aAAe,GAAmB,CAChC,GAAI,EAAI,OAAS,EAAK,OAAQ,MAAU,UAAU,kBAAkB,CACpE,OAAO,EAAI,OAEb,WAAY,CAAE,KAAM,SAAU,CAC/B,CAAC,CAGJ,SACE,IAAI,EAAmB,CACrB,KAAM,OACN,IAAK,EAAE,KAAK,CACZ,WAAa,GAAM,EACnB,UAAY,GAAM,EAClB,WAAY,EAAE,CACf,CAAC,CACJ,eACE,IAAI,EAAmC,CACrC,KAAM,aACN,IAAK,EAAE,OAAO,EAAE,QAAQ,CAAE,EAAE,KAAK,CAAC,CAClC,WAAa,GAAM,EAAE,OAAO,EAAE,QAAQ,CAAE,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CACzD,UAAY,GAAO,GAAK,EAAE,CAC1B,WAAY,CAAE,KAAM,SAAU,CAC/B,CAAC,CACJ,SACE,IAAI,EAAwB,CAC1B,KAAM,OACN,IAAK,EAAE,MAAM,CACb,WAAa,GAAO,aAAa,KAAO,EAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAC/D,UAAY,GAEV,aAAa,KAAO,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,GAAM,OAAO,EAAE,CAChE,WAAY,CAAE,KAAM,SAAU,OAAQ,OAAQ,CAC/C,CAAC,CACJ,aACE,IAAI,EAAwB,CAC1B,KAAM,WACN,IAAK,EAAE,MAAM,CACb,WAAa,GAAO,aAAa,KAAO,EAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAC/D,UAAY,GACH,aAAa,KAAO,EAAE,aAAa,CAAG,OAAO,EAAE,CAExD,WAAY,CAAE,KAAM,SAAU,OAAQ,YAAa,CACpD,CAAC,CACJ,SACE,IAAI,EAAkB,CACpB,KAAM,OACN,IAAK,EAAE,QAAQ,CAAC,MAAM,yBAAyB,CAC/C,WAAa,GACX,EACG,QAAQ,CACR,MAAM,yBAAyB,CAC/B,MAAM,EAAE,CACb,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,4BAA6B,CACrE,CAAC,CACJ,iBACE,IAAI,EAAkB,CACpB,KAAM,eACN,IAAK,EAAE,QAAQ,CAAC,OAAO,CACvB,WAAa,GAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAC9C,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,OAAQ,QAAS,CAChD,CAAC,CACJ,QACE,IAAI,EAAkB,CACpB,KAAM,MACN,IAAK,EAAE,QAAQ,CAAC,KAAK,CACrB,WAAa,GAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAC5C,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,OAAQ,MAAO,CAC9C,CAAC,CACJ,gBACE,IAAI,EAAkB,CACpB,KAAM,cACN,IAAK,EAAE,QAAQ,CAAC,MAAM,EAAW,CACjC,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAW,CAAC,MAAM,EAAE,CACxD,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,EAAW,OAAQ,CAC3D,CAAC,CACJ,mBACE,IAAI,EAAkB,CACpB,KAAM,iBACN,IAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CACtB,WAAa,GAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAC7C,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,UAAW,EAAG,CAC7C,CAAC,CACJ,WACE,IAAI,EAAkB,CACpB,KAAM,SACN,IAAK,EAAE,QAAQ,CAAC,MAAM,EAAY,CAClC,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAY,CAAC,MAAM,EAAE,CACzD,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,EAAY,OAAQ,CAC5D,CAAC,CACJ,aACE,IAAI,EAAkB,CACpB,KAAM,WACN,IAAK,EAAE,QAAQ,CAAC,MAAM,EAAc,CACpC,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAc,CAAC,MAAM,EAAE,CAC3D,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,EAAc,OAAQ,CAC9D,CAAC,CACJ,aACE,IAAI,EAAkB,CACpB,KAAM,WACN,IAAK,EAAE,QAAQ,CAAC,IAAI,IAAO,CAAC,IAAI,GAAO,CACvC,WAAa,GAAM,EAAE,OAAO,QAAQ,CAAC,IAAI,IAAO,CAAC,IAAI,GAAO,CAAC,MAAM,EAAE,CACrE,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,IAAQ,QAAS,GAAQ,CACjE,CAAC,CACJ,cACE,IAAI,EAAkB,CACpB,KAAM,YACN,IAAK,EAAE,QAAQ,CAAC,IAAI,EAAO,CAAC,IAAI,IAAO,CACvC,WAAa,GAAM,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAO,CAAC,IAAI,IAAO,CAAC,MAAM,EAAE,CACrE,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,EAAQ,QAAS,IAAQ,CACjE,CAAC,CACJ,aACE,IAAI,EAAkB,CACpB,KAAM,WACN,IAAK,EAAE,QAAQ,CAAC,MAAM,EAAc,CACpC,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAc,CAAC,MAAM,EAAE,CAC3D,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,EAAc,OAAQ,CAC9D,CAAC,CACJ,gBACE,IAAI,EAAkB,CACpB,KAAM,cACN,IAAK,EAAE,QAAQ,CAAC,MAAM,EAAa,CACnC,WAAa,GAAM,EAAE,QAAQ,CAAC,MAAM,EAAa,CAAC,MAAM,EAAE,CAC1D,UAAY,GAAM,OAAO,EAAE,CAC3B,WAAY,CAAE,KAAM,SAAU,QAAS,EAAa,OAAQ,CAC7D,CAAC,CAaL"}
@@ -0,0 +1,2 @@
1
+ import"./FieldType.js";import"./EnumType.js";import{z as e}from"zod";var t=class{constructor(e){this.config=e}getZod(){let t=Object.entries(this.config.fields).reduce((t,[n,r])=>{let i=r.type.getZod(),a=r.isArray?e.array(i):i;return t[n]=r.isOptional?a.optional():a,t},{});return e.object(t)}getPothosInput(){return this.config.name}};export{t as SchemaModel};
2
+ //# sourceMappingURL=SchemaModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaModel.js","names":["config: SchemaModelConfig<Fields>","base: z.ZodType"],"sources":["../../../../schema/src/SchemaModel.ts"],"sourcesContent":["import { type AnyFieldType } from './FieldType';\nimport { type AnyEnumType } from './EnumType';\nimport { z } from 'zod';\nimport type { Maybe } from 'graphql/jsutils/Maybe';\n\ntype FieldLike = AnyFieldType | AnyEnumType | AnySchemaModel;\n\n/** Field configuration for a SchemaModel property. */\nexport interface SchemaFieldConfig<Type extends FieldLike = FieldLike> {\n type: Type;\n isOptional: boolean;\n /** When present and true, the field is an array */\n isArray?: true;\n}\n\nexport type SchemaModelFieldsAnyConfig<Type extends FieldLike = FieldLike> =\n Record<string, SchemaFieldConfig<Type>>;\n\n/** Model definition: name and fields. */\nexport interface SchemaModelConfig<Fields extends SchemaModelFieldsAnyConfig> {\n name: string;\n description?: Maybe<string>;\n fields: Fields;\n}\n\n/**\n * Named object model built from FieldType/EnumType/SchemaModel fields.\n * Provides zod and GraphQL input helpers, and supports arrays/optional fields.\n */\nexport class SchemaModel<Fields extends SchemaModelFieldsAnyConfig> {\n constructor(public readonly config: SchemaModelConfig<Fields>) {}\n\n /**\n * Build a typed ZodObject from the model fields, preserving each field's\n * Zod schema and optionality at the type level when possible.\n */\n getZod(): TopLevelZodFromModel<Fields> {\n const shape = Object.entries(this.config.fields).reduce(\n (acc, [key, def]) => {\n const base: z.ZodType = (\n def.type as unknown as { getZod: () => z.ZodType }\n ).getZod();\n const withArray = def.isArray ? z.array(base) : base;\n (acc as Record<string, z.ZodType>)[key] = def.isOptional\n ? withArray.optional()\n : withArray;\n return acc;\n },\n {} as Record<string, z.ZodType>\n ) as unknown as ZodShapeFromFields<Fields>;\n\n return z.object(shape) as z.ZodObject<ZodShapeFromFields<Fields>>;\n }\n\n /** Input object name for GraphQL builder adapters. */\n getPothosInput() {\n return this.config.name;\n }\n}\n\nexport type AnySchemaModel = SchemaModel<SchemaModelFieldsAnyConfig>;\n\nexport type ZodSchemaModel<Field extends AnySchemaModel> = z.infer<\n ReturnType<Field['getZod']>\n>;\n\ntype InferZodFromType<T> =\n T extends SchemaModel<any>\n ? z.ZodObject<any>\n : T extends AnyFieldType\n ? ReturnType<T['getZod']>\n : T extends AnyEnumType\n ? ReturnType<T['getZod']>\n : never;\n\ntype MaybeArray<Z extends z.ZodType, A> = A extends true ? z.ZodArray<Z> : Z;\ntype MaybeOptional<Z extends z.ZodType, O> = O extends true\n ? z.ZodOptional<Z>\n : Z;\n\n/**\n * Helper type: derive the Zod shape from the field config.\n * Supports nested SchemaModel and arrays, preserving optionality and list-ness.\n */\ntype FieldIsArray<FC> = FC extends { isArray: true } ? true : false;\n\nexport type ZodShapeFromFields<F extends SchemaModelFieldsAnyConfig> = {\n [K in keyof F]: MaybeOptional<\n MaybeArray<InferZodFromType<F[K]['type']>, FieldIsArray<F[K]>>,\n F[K]['isOptional']\n >;\n};\n\n/**\n * The top-level Zod schema returned by getZod():\n * either ZodObject<...> or ZodArray<ZodObject<...>> when config.isArray.\n */\nexport type TopLevelZodFromModel<F extends SchemaModelFieldsAnyConfig> =\n z.ZodObject<ZodShapeFromFields<F>>;\n"],"mappings":"qEA6BA,IAAa,EAAb,KAAoE,CAClE,YAAY,EAAmD,CAAnC,KAAA,OAAA,EAM5B,QAAuC,CACrC,IAAM,EAAQ,OAAO,QAAQ,KAAK,OAAO,OAAO,CAAC,QAC9C,EAAK,CAAC,EAAK,KAAS,CACnB,IAAMC,EACJ,EAAI,KACJ,QAAQ,CACJ,EAAY,EAAI,QAAU,EAAE,MAAM,EAAK,CAAG,EAIhD,MAHC,GAAkC,GAAO,EAAI,WAC1C,EAAU,UAAU,CACpB,EACG,GAET,EAAE,CACH,CAED,OAAO,EAAE,OAAO,EAAM,CAIxB,gBAAiB,CACf,OAAO,KAAK,OAAO"}
@@ -0,0 +1 @@
1
+ import{FieldType as e}from"./FieldType.js";import{ScalarTypeEnum as t}from"./ScalarTypeEnum.js";import"./EnumType.js";import{SchemaModel as n}from"./SchemaModel.js";
@@ -0,0 +1,19 @@
1
+ import { ResourceRegistry } from "../resources.js";
2
+ import { SpecRegistry } from "../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
+ * Register all ContractSpecs from a SpecRegistry onto a Pothos builder
14
+ * as Query/Mutation fields, mapping inputs/outputs and applying auth gate.
15
+ */
16
+ declare function registerContractsOnBuilder<T extends SchemaTypes>(builder: PothosSchemaTypes.SchemaBuilder<T>, reg: SpecRegistry, resources?: ResourceRegistry): void;
17
+ //#endregion
18
+ export { registerContractsOnBuilder };
19
+ //# sourceMappingURL=graphql-pothos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-pothos.d.ts","names":[],"sources":["../../src/server/graphql-pothos.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA0BA;;AAC2C,iBAD3B,0BAC2B,CAAA,UADU,WACV,CAAA,CAAA,OAAA,EAAhC,iBAAA,CAAkB,aAAc,CAAA,CAAA,CAAA,EAAA,GAAA,EACpC,YADoC,EAAA,SAAA,CAAA,EAE7B,gBAF6B,CAAA,EAAA,IAAA"}
@@ -0,0 +1,2 @@
1
+ import{hydrateResourceIfNeeded as e,parseReturns as t}from"../contracts-adapter-hydration.js";import{createInputTypeBuilder as n}from"../contracts-adapter-input.js";import{defaultGqlField as r}from"../jsonschema.js";import"@pothos/plugin-prisma";import"@pothos/plugin-complexity";import"@pothos/plugin-relay";import"@pothos/plugin-dataloader";import"@pothos/plugin-tracing";function i(i,a,o){let{buildInputFieldArgs:s}=n(i),c=new Map;for(let e of a.listSpecs()){let t=e.io.output;if(t&&`getZod`in t&&typeof t.getZod==`function`){let e=t,n=e.config?.name??`UnknownOutput`;c.has(n)||c.set(n,e)}}for(let[e,t]of c.entries())i.objectType(e,{fields:e=>{let n=Object.entries(t.config.fields),r={};for(let[t,i]of n){let n=i.type,a=`JSON`;n&&typeof n.getPothos==`function`&&(a=n.getPothos().name||`JSON`,a===`String_unsecure`&&(a=`String`),a===`Int_unsecure`&&(a=`Int`),a===`Float_unsecure`&&(a=`Float`),a===`Boolean_unsecure`&&(a=`Boolean`),a===`ID_unsecure`&&(a=`ID`));let o=i.isArray?[a]:a;r[t]=e.field({type:o,nullable:i.isOptional,resolve:e=>e[t]})}return r}});function l(e){let t=e.transport?.gql?.returns;if(t)return t;let n=e.io.output??{};if(n&&`kind`in n&&n.kind===`resource_ref`&&`graphQLType`in n&&n.graphQLType)return String(n.graphQLType);if(n&&`getZod`in n&&typeof n.getZod==`function`){let e=n.config?.name;if(e&&c.has(e))return e}return`JSON`}for(let n of a.listSpecs()){let c=n.transport?.gql?.field??r(n.meta.name,n.meta.version);n.transport?.gql?.returns;let u=n.transport?.gql?.byIdField??`id`,d=n.transport?.gql?.resource,f=n.meta.kind===`query`,p=l(n),m=n.transport?.gql?.returns,h=t(m??p),g=async(t,r,i)=>{if(n.policy.auth!==`anonymous`&&!i.user)throw Error(`Unauthorized`);let s={traceId:i.logger?.getTraceId?.()??void 0,userId:i.user?.id??null,organizationId:i.session?.activeOrganizationId??null,actor:i.user?`user`:`anonymous`,channel:`web`,eventPublisher:i.eventPublisher},c=n.io.input?.getZod().parse(r.input??{}),l=await a.execute(n.meta.name,n.meta.version,c,s),f=n.io.output;if(o&&(d||f?.kind===`resource_ref`)){let t=u??f?.varName??`id`,n=await e(o,l,{template:d??f?.uriTemplate,varName:t,returns:h});if(n!==l)return n}return p?h.inner===`Boolean`&&!h.isList?!!(l?.ok??l):l:n.io.output.getZod().parse(l)},_=e=>{let t=s(n.io.input);return e.field({type:h.isList?[h.inner]:h.inner,complexity:()=>10,resolve:g,args:t?{input:e.arg({type:t,required:!0})}:void 0})};f?i.queryField(c,_):i.mutationField(c,_)}}export{i as registerContractsOnBuilder};
2
+ //# sourceMappingURL=graphql-pothos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-pothos.js","names":["acc: Record<string, any>","handlerCtx: HandlerCtx","result: unknown","fieldSettingsFn: QueryFieldThunk<T> | MutationFieldThunk<T>"],"sources":["../../src/server/graphql-pothos.ts"],"sourcesContent":["import type {\n MutationFieldThunk,\n QueryFieldThunk,\n SchemaTypes,\n} from '@pothos/core';\nimport type { HandlerCtx } from '../types';\nimport { defaultGqlField } from '../jsonschema';\nimport type { SpecRegistry } from '../registry';\nimport '@pothos/plugin-prisma';\nimport '@pothos/plugin-complexity';\nimport '@pothos/plugin-relay';\nimport '@pothos/plugin-dataloader';\nimport '@pothos/plugin-tracing';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\nimport type { ResourceRefDescriptor, ResourceRegistry } from '../resources';\nimport { createInputTypeBuilder } from '../contracts-adapter-input';\nimport type { AnyContractSpec } from '../spec';\nimport {\n hydrateResourceIfNeeded,\n parseReturns,\n} from '../contracts-adapter-hydration';\n\n/**\n * Register all ContractSpecs from a SpecRegistry onto a Pothos builder\n * as Query/Mutation fields, mapping inputs/outputs and applying auth gate.\n */\nexport function registerContractsOnBuilder<T extends SchemaTypes>(\n builder: PothosSchemaTypes.SchemaBuilder<T>,\n reg: SpecRegistry,\n resources?: ResourceRegistry\n) {\n const { buildInputFieldArgs } = createInputTypeBuilder(builder);\n\n // Build a map of output types we need to register\n const outputTypeCache = new Map<string, AnySchemaModel>();\n for (const spec of reg.listSpecs()) {\n const out = spec.io.output as\n | AnySchemaModel\n | ResourceRefDescriptor<boolean>;\n if (out && 'getZod' in out && typeof out.getZod === 'function') {\n const model = out as AnySchemaModel;\n const typeName = model.config?.name ?? 'UnknownOutput';\n if (!outputTypeCache.has(typeName)) {\n outputTypeCache.set(typeName, model);\n }\n }\n }\n\n // Register all output types as GraphQL object types\n for (const [typeName, model] of outputTypeCache.entries()) {\n builder.objectType(typeName as any, {\n fields: (t) => {\n const entries = Object.entries(model.config.fields) as [\n string,\n {\n type: any;\n isOptional: boolean;\n isArray?: boolean;\n },\n ][];\n const acc: Record<string, any> = {};\n for (const [key, field] of entries) {\n const fieldType = field.type;\n let gqlType = 'JSON';\n\n // Check if it's a known scalar type\n if (fieldType && typeof fieldType.getPothos === 'function') {\n const pothosInfo = fieldType.getPothos();\n gqlType = pothosInfo.name || 'JSON';\n // Map unsecure types to their secure equivalents\n if (gqlType === 'String_unsecure') gqlType = 'String';\n if (gqlType === 'Int_unsecure') gqlType = 'Int';\n if (gqlType === 'Float_unsecure') gqlType = 'Float';\n if (gqlType === 'Boolean_unsecure') gqlType = 'Boolean';\n if (gqlType === 'ID_unsecure') gqlType = 'ID';\n }\n\n const typeRef = field.isArray\n ? ([gqlType] as never)\n : (gqlType as never);\n acc[key] = t.field({\n type: typeRef,\n nullable: field.isOptional,\n resolve: (parent: any) => parent[key],\n });\n }\n return acc as never;\n },\n });\n }\n\n // For outputs, prefer an explicit GraphQL type name; otherwise use SchemaModel name or resource ref\n function resolveGraphQLTypeName(contractSpec: AnyContractSpec): string {\n const returnsName = contractSpec.transport?.gql?.returns;\n if (returnsName) return returnsName;\n\n const out = contractSpec.io.output ?? {};\n\n // Check if it's a resource ref\n if (\n out &&\n 'kind' in out &&\n out.kind === 'resource_ref' &&\n 'graphQLType' in out &&\n out.graphQLType\n )\n return String(out.graphQLType);\n\n // Check if it's a SchemaModel with a name\n if (out && 'getZod' in out && typeof out.getZod === 'function') {\n const model = out as AnySchemaModel;\n const typeName = model.config?.name;\n if (typeName && outputTypeCache.has(typeName)) {\n return typeName;\n }\n }\n\n return 'JSON';\n }\n\n // parseReturns moved to hydration util\n\n for (const spec of reg.listSpecs()) {\n const fieldName =\n spec.transport?.gql?.field ??\n defaultGqlField(spec.meta.name, spec.meta.version);\n const returnsName = spec.transport?.gql?.returns;\n const byIdField =\n (spec.transport as unknown as { gql?: { byIdField?: string } })?.gql\n ?.byIdField ?? 'id';\n const returnsResource = (\n spec.transport as unknown as { gql?: { resource?: string } }\n )?.gql?.resource;\n const isQuery = spec.meta.kind === 'query';\n\n const graphQLTypeName = resolveGraphQLTypeName(spec);\n const returnsDecl = (\n spec.transport as unknown as { gql?: { returns?: string } }\n )?.gql?.returns;\n const parsed = parseReturns(returnsDecl ?? graphQLTypeName);\n\n const resolveFieldFn = async (_root: any, args: any, ctx: any) => {\n if (spec.policy.auth !== 'anonymous' && !ctx.user)\n throw new Error('Unauthorized');\n const handlerCtx: HandlerCtx = {\n traceId: ctx.logger?.getTraceId?.() ?? undefined,\n userId: ctx.user?.id ?? null,\n organizationId: ctx.session?.activeOrganizationId ?? null,\n actor: ctx.user ? 'user' : 'anonymous',\n channel: 'web',\n eventPublisher: ctx.eventPublisher,\n };\n const parsedInput = spec.io.input?.getZod().parse(args.input ?? {});\n const result: unknown = await reg.execute(\n spec.meta.name,\n spec.meta.version,\n parsedInput,\n handlerCtx\n );\n const out = spec.io.output as unknown;\n if (\n resources &&\n (returnsResource || (out as { kind?: string })?.kind === 'resource_ref')\n ) {\n const varName =\n byIdField ?? (out as { varName?: string })?.varName ?? 'id';\n const template =\n returnsResource ?? (out as { uriTemplate?: string })?.uriTemplate;\n const hydrated = await hydrateResourceIfNeeded(resources, result, {\n template,\n varName,\n returns: parsed,\n });\n if (hydrated !== result) return hydrated as never;\n }\n if (graphQLTypeName) {\n if (parsed.inner === 'Boolean' && !parsed.isList)\n return Boolean((result as { ok?: boolean })?.ok ?? result) as never;\n // fallback to direct\n return result as unknown as never;\n }\n const parsedOut: unknown = (spec.io.output as AnySchemaModel)\n .getZod()\n .parse(result);\n return parsedOut as never;\n };\n\n const fieldSettingsFn: QueryFieldThunk<T> | MutationFieldThunk<T> = (\n t: PothosSchemaTypes.MutationFieldBuilder<T, T['Root']>\n ) => {\n const inputType = buildInputFieldArgs(spec.io.input);\n return t.field({\n type: (parsed.isList ? [parsed.inner] : parsed.inner) as any,\n complexity: () => 10,\n resolve: resolveFieldFn as any,\n args: inputType\n ? {\n input: t.arg({\n type: inputType,\n required: true,\n }),\n }\n : undefined,\n });\n };\n\n if (isQuery) {\n builder.queryField(\n fieldName,\n fieldSettingsFn as never as QueryFieldThunk<T>\n );\n } else {\n builder.mutationField(\n fieldName,\n fieldSettingsFn as MutationFieldThunk<T>\n );\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { GraphQLSchema } from "graphql";
2
+
3
+ //#region src/server/graphql-schema-export.d.ts
4
+ declare const exportContractsToGraphQLSchema: (schema: GraphQLSchema, outputPathDir: string) => Promise<void>;
5
+ //#endregion
6
+ export { exportContractsToGraphQLSchema };
7
+ //# sourceMappingURL=graphql-schema-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-schema-export.d.ts","names":[],"sources":["../../src/server/graphql-schema-export.ts"],"sourcesContent":[],"mappings":";;;cAKa,yCACH,yCACa"}
@@ -0,0 +1,2 @@
1
+ "use server";import{toSubgraphSDL as e}from"../graphql-federation/src/index.js";import{GraphQLSchema as t,printSchema as n}from"graphql";const r=async(t,r)=>{let i=await import(`fs`),a=await import(`path`),o=n(t),s=e(t),c=a.join(r,`../schema.graphql`),l=a.join(r,`../schema.subgraph.graphql`);i.writeFileSync(c,o),console.log(`Schema exported to ${c}`),i.writeFileSync(l,s),console.log(`Subgraph exported to ${l}`)};export{r as exportContractsToGraphQLSchema};
2
+ //# sourceMappingURL=graphql-schema-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-schema-export.js","names":[],"sources":["../../src/server/graphql-schema-export.ts"],"sourcesContent":["'use server';\n\nimport { GraphQLSchema, printSchema } from 'graphql';\nimport { toSubgraphSDL } from '@lssm/lib.graphql-federation';\n\nexport const exportContractsToGraphQLSchema = async (\n schema: GraphQLSchema,\n outputPathDir: string\n) => {\n const fs = await import('fs');\n const path = await import('path');\n\n const schemaString = printSchema(schema);\n const subgraphString = toSubgraphSDL(schema);\n const outputPath = path.join(outputPathDir, '../schema.graphql');\n const subgraphPath = path.join(outputPathDir, '../schema.subgraph.graphql');\n\n fs.writeFileSync(outputPath, schemaString);\n console.log(`Schema exported to ${outputPath}`);\n fs.writeFileSync(subgraphPath, subgraphString);\n console.log(`Subgraph exported to ${subgraphPath}`);\n};\n"],"mappings":"yIAKA,MAAa,EAAiC,MAC5C,EACA,IACG,CACH,IAAM,EAAK,MAAM,OAAO,MAClB,EAAO,MAAM,OAAO,QAEpB,EAAe,EAAY,EAAO,CAClC,EAAiB,EAAc,EAAO,CACtC,EAAa,EAAK,KAAK,EAAe,oBAAoB,CAC1D,EAAe,EAAK,KAAK,EAAe,6BAA6B,CAE3E,EAAG,cAAc,EAAY,EAAa,CAC1C,QAAQ,IAAI,sBAAsB,IAAa,CAC/C,EAAG,cAAc,EAAc,EAAe,CAC9C,QAAQ,IAAI,wBAAwB,IAAe"}
@@ -0,0 +1,9 @@
1
+ import { registerContractsOnBuilder } from "./graphql-pothos.js";
2
+ import { exportContractsToGraphQLSchema } from "./graphql-schema-export.js";
3
+ import { createMcpServer } from "./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, exportContractsToGraphQLSchema, expressRouter, makeNextAppHandler, makeNextPagesHandler, registerContractsOnBuilder };
@@ -0,0 +1 @@
1
+ import{registerContractsOnBuilder as e}from"./graphql-pothos.js";import{exportContractsToGraphQLSchema as t}from"./graphql-schema-export.js";import{createMcpServer as n}from"./provider-mcp.js";import{createFetchHandler as r}from"./rest-generic.js";import{elysiaPlugin as i}from"./rest-elysia.js";import{expressRouter as a}from"./rest-express.js";import{makeNextAppHandler as o}from"./rest-next-app.js";import{makeNextPagesHandler as s}from"./rest-next-pages.js";export{r as createFetchHandler,n as createMcpServer,i as elysiaPlugin,t as exportContractsToGraphQLSchema,a as expressRouter,o as makeNextAppHandler,s as makeNextPagesHandler,e as registerContractsOnBuilder};
@@ -0,0 +1,34 @@
1
+ import { ResourceRegistry } from "../resources.js";
2
+ import { PresentationRegistry } from "../presentations.js";
3
+ import { PresentationDescriptorV2 } from "../presentations.v2.js";
4
+ import { HandlerCtx } from "../types.js";
5
+ import { SpecRegistry } from "../registry.js";
6
+ import { PromptRegistry } from "../promptRegistry.js";
7
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+
9
+ //#region src/server/provider-mcp.d.ts
10
+
11
+ /**
12
+ * Build a unified MCP server exposing:
13
+ * - tools: all command specs from SpecRegistry
14
+ * - resources: list/read via ResourceRegistry
15
+ * - prompts: list/get via PromptRegistry
16
+ */
17
+ declare function createMcpServer(server: McpServer, ops: SpecRegistry, resources: ResourceRegistry, prompts: PromptRegistry, ctxFactories: {
18
+ toolCtx: () => HandlerCtx;
19
+ promptCtx: () => {
20
+ userId?: string | null;
21
+ orgId?: string | null;
22
+ locale?: string;
23
+ };
24
+ resourceCtx: () => {
25
+ userId?: string | null;
26
+ orgId?: string | null;
27
+ locale?: string;
28
+ };
29
+ presentations?: PresentationRegistry;
30
+ presentationsV2?: PresentationDescriptorV2[];
31
+ }): McpServer;
32
+ //#endregion
33
+ export { createMcpServer };
34
+ //# sourceMappingURL=provider-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-mcp.d.ts","names":[],"sources":["../../src/server/provider-mcp.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;AAgCA;;;;AAIW,iBAJK,eAAA,CAIL,MAAA,EAHD,SAGC,EAAA,GAAA,EAFJ,YAEI,EAAA,SAAA,EADE,gBACF,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA;EAEQ,OAAA,EAAA,GAAA,GAAA,UAAA;EAWC,SAAA,EAAA,GAAA,GAAA;IACE,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IACnB,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,MAAA,CAAA,EAAA,MAAA;;;;;;;kBAFiB;oBACE;IACnB"}
@@ -0,0 +1,2 @@
1
+ import{createDefaultTransformEngine as e,registerBasicValidation as t,registerDefaultReactRenderer as n}from"../presentations.v2.js";import{defaultMcpTool as r,jsonSchemaForSpec as i}from"../jsonschema.js";import{jsonSchemaForPresentation as a}from"../presentations.js";import o from"zod";import{McpServer as s,ResourceTemplate as c}from"@modelcontextprotocol/sdk/server/mcp.js";import{zodToJsonSchema as l}from"zod-to-json-schema";function u(s,u,d,f,p){for(let e of u.listSpecs()){if(e.meta.kind!==`command`)continue;let{input:t}=i(e),n=e.transport?.mcp?.toolName??r(e.meta.name,e.meta.version);s.registerTool(n,{description:e.meta.description,inputSchema:t},async(t,n)=>{let r=await u.execute(e.meta.name,e.meta.version,t??{},p.toolCtx());return{content:[{type:`text`,text:JSON.stringify(r,null,4)}]}})}for(let e of d.listTemplates())s.registerResource(e.meta.uriTemplate.split(`:`)[0],new c(e.meta.uriTemplate,{}),{description:e.meta.description,inputSchema:l(e.input,{})},async(t,n,r)=>{let i=p.resourceCtx(),a=await e.resolve(n,i);return typeof a.data==`string`?{contents:[{uri:a.uri,mimeType:a.mimeType??e.meta.mimeType,text:a.data}]}:{contents:[{uri:a.uri,mimeType:a.mimeType??e.meta.mimeType,blob:a.data.toString()}]}});let m=p.presentations,h=p.presentationsV2;if(m){t(n(e()));for(let e of m.list()){let t=`presentation.${e.meta.name.replace(/\./g,`_`)}.v${e.meta.version}`,n=`presentation://${e.meta.name}/v${e.meta.version}`;s.registerResource(t,new c(n,{}),{description:e.meta.description??`Presentation`,inputSchema:o.toJSONSchema(o.object({}))},async(t,r,i)=>{if(e.content.kind===`markdown`)return{contents:[{uri:n,mimeType:`text/markdown`,text:e.content.content?e.content.content:`See resource: ${e.content.resourceUri??``}`}]};if(e.content.kind===`data`){let t=a(e);return{contents:[{uri:n,mimeType:`application/json`,text:JSON.stringify(t,null,2)}]}}let o={name:e.meta.name,version:e.meta.version,kind:e.content.kind,description:e.meta.description??``};return{contents:[{uri:n,mimeType:`application/json`,text:JSON.stringify(o,null,2)}]}});for(let r of[{ext:`.md`,target:`markdown`},{ext:`.json`,target:`application/json`},{ext:`.xml`,target:`application/xml`}]){let i=`${t}${r.ext}`,l=`${n}${r.ext}`;s.registerResource(i,new c(l,{}),{description:`${e.meta.description??`Presentation`} (${r.ext})`,inputSchema:o.toJSONSchema(o.object({}))},async()=>{if(e.content.kind===`markdown`&&r.target===`markdown`)return{contents:[{uri:l,mimeType:`text/markdown`,text:e.content.content??`See resource: ${e.content.resourceUri??``}`}]};if(e.content.kind===`data`&&r.target===`application/json`)return{contents:[{uri:l,mimeType:`application/json`,text:JSON.stringify(a(e),null,2)}]};let t=JSON.stringify({meta:e.meta,content:e.content},null,2);return r.target===`application/json`?{contents:[{uri:l,mimeType:`application/json`,text:t}]}:r.target===`application/xml`?{contents:[{uri:l,mimeType:`application/xml`,text:`<presentation name="${e.meta.name}" version="${e.meta.version}"><json>${encodeURIComponent(t)}</json></presentation>`}]}:{contents:[{uri:l,mimeType:`text/markdown`,text:`Unsupported presentation for markdown`}]}})}}}if(h&&h.length){let r=t(n(e()));for(let e of h){let t=`presentation.${e.meta.name.replace(/\./g,`_`)}.v${e.meta.version}`,n=`presentation://${e.meta.name}/v${e.meta.version}`;s.registerResource(t,new c(n,{}),{description:e.meta.description??`Presentation`,inputSchema:o.toJSONSchema(o.object({}))},async()=>({contents:[{uri:n,mimeType:`application/json`,text:JSON.stringify({meta:e.meta,source:e.source,targets:e.targets},null,2)}]}));for(let i of[{ext:`.md`,target:`markdown`},{ext:`.json`,target:`application/json`},{ext:`.xml`,target:`application/xml`}]){let a=`${t}${i.ext}`,l=`${n}${i.ext}`;s.registerResource(a,new c(l,{}),{description:`${e.meta.description??`Presentation`} (${i.ext})`,inputSchema:o.toJSONSchema(o.object({}))},async()=>{let t=await r.render(i.target,e);return{contents:[{uri:l,mimeType:t.mimeType??(i.target===`markdown`?`text/markdown`:i.target),text:t.body??String(t)}]}})}}}for(let e of f.list())s.registerPrompt(e.meta.name,{title:e.meta.title,description:e.meta.title,argsSchema:l(e.input)},async(t,n)=>{let r=(e,t)=>{let n=e;for(let[e,r]of Object.entries(t))n=n.replace(RegExp(`\\{${e}\\}`,`g`),encodeURIComponent(String(r)));return n};return{messages:[{role:`assistant`,content:(await e.render(e.input.parse(t),{...p.promptCtx(),link:r})).map(e=>e.type===`text`?{type:`text`,text:e.text}:{type:`text`,text:`See resource: ${e.title??e.uri}\nURI: ${e.uri}`})[0]}],description:e.meta.description}});return s}export{u as createMcpServer};
2
+ //# sourceMappingURL=provider-mcp.js.map