@lssm/lib.bus 1.7.3 → 1.7.4

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 (198) hide show
  1. package/dist/contracts/dist/capabilities/openbanking.js +2 -0
  2. package/dist/contracts/dist/capabilities/openbanking.js.map +1 -0
  3. package/dist/contracts/dist/client/index.js +1 -0
  4. package/dist/contracts/dist/events.js +2 -0
  5. package/dist/contracts/dist/events.js.map +1 -0
  6. package/dist/contracts/dist/graphql-federation/dist/index.js +1 -0
  7. package/dist/contracts/dist/index.js +1 -0
  8. package/dist/contracts/dist/integrations/contracts.js +2 -0
  9. package/dist/contracts/dist/integrations/contracts.js.map +1 -0
  10. package/dist/contracts/dist/integrations/index.js +1 -0
  11. package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js +2 -0
  12. package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
  13. package/dist/contracts/dist/integrations/openbanking/contracts/balances.js +2 -0
  14. package/dist/contracts/dist/integrations/openbanking/contracts/balances.js.map +1 -0
  15. package/dist/contracts/dist/integrations/openbanking/contracts/index.js +1 -0
  16. package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js +2 -0
  17. package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
  18. package/dist/contracts/dist/integrations/openbanking/models.js +2 -0
  19. package/dist/contracts/dist/integrations/openbanking/models.js.map +1 -0
  20. package/dist/contracts/{src → dist}/integrations/openbanking/telemetry.js +1 -1
  21. package/dist/contracts/dist/integrations/openbanking/telemetry.js.map +1 -0
  22. package/dist/contracts/dist/integrations/providers/elevenlabs.js +2 -0
  23. package/dist/contracts/dist/integrations/providers/elevenlabs.js.map +1 -0
  24. package/dist/contracts/dist/integrations/providers/gcs-storage.js +2 -0
  25. package/dist/contracts/dist/integrations/providers/gcs-storage.js.map +1 -0
  26. package/dist/contracts/dist/integrations/providers/gmail.js +2 -0
  27. package/dist/contracts/dist/integrations/providers/gmail.js.map +1 -0
  28. package/dist/contracts/dist/integrations/providers/google-calendar.js +2 -0
  29. package/dist/contracts/dist/integrations/providers/google-calendar.js.map +1 -0
  30. package/dist/contracts/dist/integrations/providers/index.js +1 -0
  31. package/dist/contracts/dist/integrations/providers/mistral.js +2 -0
  32. package/dist/contracts/dist/integrations/providers/mistral.js.map +1 -0
  33. package/dist/contracts/dist/integrations/providers/postmark.js +2 -0
  34. package/dist/contracts/dist/integrations/providers/postmark.js.map +1 -0
  35. package/dist/contracts/dist/integrations/providers/powens.js +2 -0
  36. package/dist/contracts/dist/integrations/providers/powens.js.map +1 -0
  37. package/dist/contracts/dist/integrations/providers/qdrant.js +2 -0
  38. package/dist/contracts/dist/integrations/providers/qdrant.js.map +1 -0
  39. package/dist/contracts/dist/integrations/providers/stripe.js +2 -0
  40. package/dist/contracts/dist/integrations/providers/stripe.js.map +1 -0
  41. package/dist/contracts/dist/integrations/providers/twilio-sms.js +2 -0
  42. package/dist/contracts/dist/integrations/providers/twilio-sms.js.map +1 -0
  43. package/dist/contracts/dist/knowledge/contracts.js +2 -0
  44. package/dist/contracts/dist/knowledge/contracts.js.map +1 -0
  45. package/dist/contracts/dist/knowledge/index.js +1 -0
  46. package/dist/contracts/dist/knowledge/spaces/email-threads.js +2 -0
  47. package/dist/contracts/dist/knowledge/spaces/email-threads.js.map +1 -0
  48. package/dist/contracts/dist/knowledge/spaces/financial-docs.js +2 -0
  49. package/dist/contracts/dist/knowledge/spaces/financial-docs.js.map +1 -0
  50. package/dist/contracts/dist/knowledge/spaces/financial-overview.js +2 -0
  51. package/dist/contracts/dist/knowledge/spaces/financial-overview.js.map +1 -0
  52. package/dist/contracts/dist/knowledge/spaces/product-canon.js +2 -0
  53. package/dist/contracts/dist/knowledge/spaces/product-canon.js.map +1 -0
  54. package/dist/contracts/dist/knowledge/spaces/support-faq.js +2 -0
  55. package/dist/contracts/dist/knowledge/spaces/support-faq.js.map +1 -0
  56. package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js +2 -0
  57. package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
  58. package/dist/contracts/dist/onboarding-base.js +2 -0
  59. package/dist/contracts/dist/onboarding-base.js.map +1 -0
  60. package/dist/contracts/{src → dist}/ownership.js +1 -1
  61. package/dist/contracts/dist/ownership.js.map +1 -0
  62. package/dist/contracts/dist/regenerator/service.js +1 -0
  63. package/dist/{schema/src → contracts/dist/schema/dist}/FieldType.js +1 -1
  64. package/dist/contracts/dist/schema/dist/FieldType.js.map +1 -0
  65. package/dist/contracts/dist/schema/dist/ScalarTypeEnum.js +2 -0
  66. package/dist/contracts/dist/schema/dist/ScalarTypeEnum.js.map +1 -0
  67. package/dist/{schema/src → contracts/dist/schema/dist}/SchemaModel.js +1 -1
  68. package/dist/contracts/dist/schema/dist/SchemaModel.js.map +1 -0
  69. package/dist/contracts/dist/schema/dist/index.js +1 -0
  70. package/dist/contracts/dist/server/graphql-schema-export.js +1 -0
  71. package/dist/contracts/{src → dist}/spec.js +1 -1
  72. package/dist/contracts/dist/spec.js.map +1 -0
  73. package/dist/eventBus.d.ts +3 -1
  74. package/dist/eventBus.d.ts.map +1 -1
  75. package/dist/eventBus.js +1 -1
  76. package/dist/eventBus.js.map +1 -1
  77. package/dist/inMemoryBus.d.ts +1 -0
  78. package/dist/inMemoryBus.d.ts.map +1 -1
  79. package/dist/subscriber.d.ts +2 -1
  80. package/dist/subscriber.d.ts.map +1 -1
  81. package/package.json +7 -7
  82. package/dist/contracts/src/capabilities/openbanking.js +0 -2
  83. package/dist/contracts/src/capabilities/openbanking.js.map +0 -1
  84. package/dist/contracts/src/client/index.js +0 -1
  85. package/dist/contracts/src/events.js +0 -2
  86. package/dist/contracts/src/events.js.map +0 -1
  87. package/dist/contracts/src/index.js +0 -1
  88. package/dist/contracts/src/integrations/contracts.js +0 -2
  89. package/dist/contracts/src/integrations/contracts.js.map +0 -1
  90. package/dist/contracts/src/integrations/index.js +0 -1
  91. package/dist/contracts/src/integrations/openbanking/contracts/accounts.js +0 -2
  92. package/dist/contracts/src/integrations/openbanking/contracts/accounts.js.map +0 -1
  93. package/dist/contracts/src/integrations/openbanking/contracts/balances.js +0 -2
  94. package/dist/contracts/src/integrations/openbanking/contracts/balances.js.map +0 -1
  95. package/dist/contracts/src/integrations/openbanking/contracts/index.js +0 -1
  96. package/dist/contracts/src/integrations/openbanking/contracts/transactions.js +0 -2
  97. package/dist/contracts/src/integrations/openbanking/contracts/transactions.js.map +0 -1
  98. package/dist/contracts/src/integrations/openbanking/models.js +0 -2
  99. package/dist/contracts/src/integrations/openbanking/models.js.map +0 -1
  100. package/dist/contracts/src/integrations/openbanking/telemetry.js.map +0 -1
  101. package/dist/contracts/src/integrations/providers/elevenlabs.js +0 -2
  102. package/dist/contracts/src/integrations/providers/elevenlabs.js.map +0 -1
  103. package/dist/contracts/src/integrations/providers/gcs-storage.js +0 -2
  104. package/dist/contracts/src/integrations/providers/gcs-storage.js.map +0 -1
  105. package/dist/contracts/src/integrations/providers/gmail.js +0 -2
  106. package/dist/contracts/src/integrations/providers/gmail.js.map +0 -1
  107. package/dist/contracts/src/integrations/providers/google-calendar.js +0 -2
  108. package/dist/contracts/src/integrations/providers/google-calendar.js.map +0 -1
  109. package/dist/contracts/src/integrations/providers/index.js +0 -1
  110. package/dist/contracts/src/integrations/providers/mistral.js +0 -2
  111. package/dist/contracts/src/integrations/providers/mistral.js.map +0 -1
  112. package/dist/contracts/src/integrations/providers/postmark.js +0 -2
  113. package/dist/contracts/src/integrations/providers/postmark.js.map +0 -1
  114. package/dist/contracts/src/integrations/providers/powens.js +0 -2
  115. package/dist/contracts/src/integrations/providers/powens.js.map +0 -1
  116. package/dist/contracts/src/integrations/providers/qdrant.js +0 -2
  117. package/dist/contracts/src/integrations/providers/qdrant.js.map +0 -1
  118. package/dist/contracts/src/integrations/providers/stripe.js +0 -2
  119. package/dist/contracts/src/integrations/providers/stripe.js.map +0 -1
  120. package/dist/contracts/src/integrations/providers/twilio-sms.js +0 -2
  121. package/dist/contracts/src/integrations/providers/twilio-sms.js.map +0 -1
  122. package/dist/contracts/src/knowledge/contracts.js +0 -2
  123. package/dist/contracts/src/knowledge/contracts.js.map +0 -1
  124. package/dist/contracts/src/knowledge/index.js +0 -1
  125. package/dist/contracts/src/knowledge/spaces/email-threads.js +0 -2
  126. package/dist/contracts/src/knowledge/spaces/email-threads.js.map +0 -1
  127. package/dist/contracts/src/knowledge/spaces/financial-docs.js +0 -2
  128. package/dist/contracts/src/knowledge/spaces/financial-docs.js.map +0 -1
  129. package/dist/contracts/src/knowledge/spaces/financial-overview.js +0 -2
  130. package/dist/contracts/src/knowledge/spaces/financial-overview.js.map +0 -1
  131. package/dist/contracts/src/knowledge/spaces/product-canon.js +0 -2
  132. package/dist/contracts/src/knowledge/spaces/product-canon.js.map +0 -1
  133. package/dist/contracts/src/knowledge/spaces/support-faq.js +0 -2
  134. package/dist/contracts/src/knowledge/spaces/support-faq.js.map +0 -1
  135. package/dist/contracts/src/knowledge/spaces/uploaded-docs.js +0 -2
  136. package/dist/contracts/src/knowledge/spaces/uploaded-docs.js.map +0 -1
  137. package/dist/contracts/src/onboarding-base.js +0 -2
  138. package/dist/contracts/src/onboarding-base.js.map +0 -1
  139. package/dist/contracts/src/ownership.js.map +0 -1
  140. package/dist/contracts/src/regenerator/service.js +0 -2
  141. package/dist/contracts/src/regenerator/service.js.map +0 -1
  142. package/dist/contracts/src/server/graphql-schema-export.js +0 -1
  143. package/dist/contracts/src/spec.js.map +0 -1
  144. package/dist/graphql-federation/src/index.js +0 -1
  145. package/dist/schema/src/FieldType.js.map +0 -1
  146. package/dist/schema/src/ScalarTypeEnum.js +0 -2
  147. package/dist/schema/src/ScalarTypeEnum.js.map +0 -1
  148. package/dist/schema/src/SchemaModel.js.map +0 -1
  149. package/dist/schema/src/index.js +0 -1
  150. /package/dist/contracts/{src → dist}/client/react/feature-render.js +0 -0
  151. /package/dist/contracts/{src → dist}/client/react/form-render.js +0 -0
  152. /package/dist/contracts/{src → dist}/client/react/index.js +0 -0
  153. /package/dist/contracts/{src → dist}/experiments/evaluator.js +0 -0
  154. /package/dist/contracts/{src → dist}/install.js +0 -0
  155. /package/dist/contracts/{src → dist}/integrations/providers/impls/elevenlabs-voice.js +0 -0
  156. /package/dist/contracts/{src → dist}/integrations/providers/impls/gcs-storage.js +0 -0
  157. /package/dist/contracts/{src → dist}/integrations/providers/impls/gmail-inbound.js +0 -0
  158. /package/dist/contracts/{src → dist}/integrations/providers/impls/gmail-outbound.js +0 -0
  159. /package/dist/contracts/{src → dist}/integrations/providers/impls/google-calendar.js +0 -0
  160. /package/dist/contracts/{src → dist}/integrations/providers/impls/index.js +0 -0
  161. /package/dist/contracts/{src → dist}/integrations/providers/impls/mistral-embedding.js +0 -0
  162. /package/dist/contracts/{src → dist}/integrations/providers/impls/mistral-llm.js +0 -0
  163. /package/dist/contracts/{src → dist}/integrations/providers/impls/postmark-email.js +0 -0
  164. /package/dist/contracts/{src → dist}/integrations/providers/impls/powens-client.js +0 -0
  165. /package/dist/contracts/{src → dist}/integrations/providers/impls/powens-openbanking.js +0 -0
  166. /package/dist/contracts/{src → dist}/integrations/providers/impls/provider-factory.js +0 -0
  167. /package/dist/contracts/{src → dist}/integrations/providers/impls/qdrant-vector.js +0 -0
  168. /package/dist/contracts/{src → dist}/integrations/providers/impls/stripe-payments.js +0 -0
  169. /package/dist/contracts/{src → dist}/integrations/providers/impls/twilio-sms.js +0 -0
  170. /package/dist/contracts/{src → dist}/integrations/runtime.js +0 -0
  171. /package/dist/contracts/{src → dist}/integrations/secrets/env-secret-provider.js +0 -0
  172. /package/dist/contracts/{src → dist}/integrations/secrets/gcp-secret-manager.js +0 -0
  173. /package/dist/contracts/{src → dist}/integrations/secrets/index.js +0 -0
  174. /package/dist/contracts/{src → dist}/integrations/secrets/manager.js +0 -0
  175. /package/dist/contracts/{src → dist}/integrations/secrets/provider.js +0 -0
  176. /package/dist/contracts/{src → dist}/jsonschema.js +0 -0
  177. /package/dist/contracts/{src → dist}/knowledge/spaces/index.js +0 -0
  178. /package/dist/contracts/{src → dist}/presentations.js +0 -0
  179. /package/dist/contracts/{src → dist}/prompt.js +0 -0
  180. /package/dist/contracts/{src → dist}/promptRegistry.js +0 -0
  181. /package/dist/contracts/{src → dist}/regenerator/index.js +0 -0
  182. /package/dist/contracts/{src → dist}/registry.js +0 -0
  183. /package/dist/contracts/{src → dist}/resources.js +0 -0
  184. /package/dist/{schema/src → contracts/dist/schema/dist}/EnumType.js +0 -0
  185. /package/dist/contracts/{src → dist}/server/graphql-pothos.js +0 -0
  186. /package/dist/contracts/{src → dist}/server/index.js +0 -0
  187. /package/dist/contracts/{src → dist}/server/provider-mcp.js +0 -0
  188. /package/dist/contracts/{src → dist}/server/rest-elysia.js +0 -0
  189. /package/dist/contracts/{src → dist}/server/rest-express.js +0 -0
  190. /package/dist/contracts/{src → dist}/server/rest-generic.js +0 -0
  191. /package/dist/contracts/{src → dist}/server/rest-next-app.js +0 -0
  192. /package/dist/contracts/{src → dist}/server/rest-next-pages.js +0 -0
  193. /package/dist/contracts/{src → dist}/telemetry/index.js +0 -0
  194. /package/dist/contracts/{src → dist}/telemetry/tracker.js +0 -0
  195. /package/dist/contracts/{src → dist}/tests/index.js +0 -0
  196. /package/dist/contracts/{src → dist}/tests/runner.js +0 -0
  197. /package/dist/contracts/{src → dist}/workflow/index.js +0 -0
  198. /package/dist/contracts/{src → dist}/workflow/runner.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaModel.js","names":["t","e"],"sources":["../../../../../../contracts/dist/schema/dist/SchemaModel.js"],"sourcesContent":["import\"./EnumType.js\";import\"./FieldType.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};\n//# sourceMappingURL=SchemaModel.js.map"],"mappings":"qEAAqE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,OAAO,EAAE,QAAQ,CAAC,IAAIA,EAAE,OAAO,QAAQ,KAAK,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE,QAAQC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAO,GAAE,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,EAAED,GAAG,EAAE,CAAC,CAAC,OAAOC,EAAE,OAAOD,EAAE,CAAC,gBAAgB,CAAC,OAAO,KAAK,OAAO"}
@@ -0,0 +1 @@
1
+ import"./EnumType.js";import"./FieldType.js";import"./ScalarTypeEnum.js";import"./SchemaModel.js";
@@ -0,0 +1 @@
1
+ "use server";import"../graphql-federation/dist/index.js";import"graphql";
@@ -1,2 +1,2 @@
1
- const e=e=>({...e,meta:{...e.meta,kind:`command`},policy:{...e.policy,idempotent:e.policy?.policy?.idempotent??!1}}),t=e=>({...e,meta:{...e.meta,kind:`query`},policy:{...e.policy,idempotent:!0}});export{e as defineCommand,t as defineQuery};
1
+ const e=e=>({...e,meta:{...e.meta,kind:`command`},policy:{...e.policy,idempotent:e.policy?.policy?.idempotent??!1}}),t=e=>({...e,meta:{...e.meta,kind:`query`},policy:{...e.policy,idempotent:!0}});export{t as n,e as t};
2
2
  //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","names":["e"],"sources":["../../../../contracts/dist/spec.js"],"sourcesContent":["const e=e=>`ref`in e,t=e=>({...e,meta:{...e.meta,kind:`command`},policy:{...e.policy,idempotent:e.policy?.policy?.idempotent??!1}}),n=e=>({...e,meta:{...e.meta,kind:`query`},policy:{...e.policy,idempotent:!0}});export{t as defineCommand,n as defineQuery,e as isEmitDeclRef};\n//# sourceMappingURL=spec.js.map"],"mappings":"AAAA,MAAqB,EAAE,IAAI,CAAC,GAAGA,EAAE,KAAK,CAAC,GAAGA,EAAE,KAAK,KAAK,UAAU,CAAC,OAAO,CAAC,GAAGA,EAAE,OAAO,WAAWA,EAAE,QAAQ,QAAQ,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAGA,EAAE,KAAK,CAAC,GAAGA,EAAE,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAGA,EAAE,OAAO,WAAW,CAAC,EAAE,CAAC"}
@@ -1,5 +1,7 @@
1
- //#region src/eventBus.d.ts
1
+ import { EventEnvelope, EventKey, EventSpec } from "@lssm/lib.contracts";
2
+ import { AnySchemaModel } from "@lssm/lib.schema";
2
3
 
4
+ //#region src/eventBus.d.ts
3
5
  interface EventBus {
4
6
  publish: (topic: EventKey, bytes: Uint8Array) => Promise<void>;
5
7
  subscribe: (topic: EventKey | string,
@@ -1 +1 @@
1
- {"version":3,"file":"eventBus.d.ts","names":[],"sources":["../src/eventBus.ts"],"sourcesContent":[],"mappings":";;AASmB,UADF,QAAA,CACE;EAAiB,OAAA,EAAA,CAAA,KAAA,EAAjB,QAAiB,EAAA,KAAA,EAAA,UAAA,EAAA,GAAe,OAAf,CAAA,IAAA,CAAA;EAAe,SAAA,EAAA,CAAA,KAAA,EAExC,QAFwC,GAAA,MAAA;EAAA;EAExC,OAAA,EAAA,CAAA,KAAA,EACU,UADV,EAAA,GACyB,OADzB,CAAA,IAAA,CAAA,EAAA,GAEJ,OAFI,CAAA,GAAA,GAEU,OAFV,CAAA,IAAA,CAAA,CAAA;;;AAEU,iBAIL,WAJK,CAAA,CAAA,CAAA,CAAA,QAAA,EAIoB,aAJpB,CAIkC,CAJlC,CAAA,CAAA,EAIuC,UAJvC;;AAAP,iBASE,WATF,CAAA,CAAA,CAAA,CAAA,IAAA,EASuB,UATvB,CAAA,EASoC,aATpC,CASkD,CATlD,CAAA;AAId;;;;AAAsE,iBAatD,aAbsD,CAAA,UAa9B,cAb8B,CAAA,CAAA,GAAA,EAc/D,QAd+D,EAAA,IAAA,EAe9D,SAf8D,CAepD,CAfoD,CAAA,CAAA,EAAA,CAAA,OAAA,EAiB7C,CAjB6C,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,GAiB1B,OAjB0B,CAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"eventBus.d.ts","names":[],"sources":["../src/eventBus.ts"],"sourcesContent":[],"mappings":";;;;UAQiB,QAAA;mBACE,iBAAiB,eAAe;EADlC,SAAA,EAAQ,CAAA,KAAA,EAGd,QAHc,GAAA,MAAA;EAAA;EACN,OAAA,EAAA,CAAA,KAAA,EAGE,UAHF,EAAA,GAGiB,OAHjB,CAAA,IAAA,CAAA,EAAA,GAIZ,OAJY,CAAA,GAAA,GAIE,OAJF,CAAA,IAAA,CAAA,CAAA;;;AAER,iBAMK,WANL,CAAA,CAAA,CAAA,CAAA,QAAA,EAM8B,aAN9B,CAM4C,CAN5C,CAAA,CAAA,EAMiD,UANjD;;AACyB,iBAUpB,WAVoB,CAAA,CAAA,CAAA,CAAA,IAAA,EAUC,UAVD,CAAA,EAUc,aAVd,CAU4B,CAV5B,CAAA;;;;AAKpC;AAAuD,iBAavC,aAbuC,CAAA,UAaf,cAbe,CAAA,CAAA,GAAA,EAchD,QAdgD,EAAA,IAAA,EAe/C,SAf+C,CAerC,CAfqC,CAAA,CAAA,EAAA,CAAA,OAAA,EAiB9B,CAjB8B,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,GAiBX,OAjBW,CAAA,IAAA,CAAA"}
package/dist/eventBus.js CHANGED
@@ -1,2 +1,2 @@
1
- import{eventKey as e}from"./contracts/src/events.js";import"./contracts/src/index.js";function t(e){return new TextEncoder().encode(JSON.stringify(e))}function n(e){return JSON.parse(new TextDecoder().decode(e))}function r(n,r){return async(i,a)=>{let o={id:crypto.randomUUID(),occurredAt:new Date().toISOString(),name:r.name,version:r.version,payload:i,traceId:a};await n.publish(e(r.name,r.version),t(o))}}export{n as decodeEvent,t as encodeEvent,r as makePublisher};
1
+ import{t as e}from"./contracts/dist/events.js";import"./contracts/dist/index.js";function t(e){return new TextEncoder().encode(JSON.stringify(e))}function n(e){return JSON.parse(new TextDecoder().decode(e))}function r(n,r){return async(i,a)=>{let o={id:crypto.randomUUID(),occurredAt:new Date().toISOString(),name:r.name,version:r.version,payload:i,traceId:a};await n.publish(e(r.name,r.version),t(o))}}export{n as decodeEvent,t as encodeEvent,r as makePublisher};
2
2
  //# sourceMappingURL=eventBus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventBus.js","names":["envelope: EventEnvelope<T>"],"sources":["../src/eventBus.ts"],"sourcesContent":["import {\n type EventEnvelope,\n type EventKey,\n eventKey,\n type EventSpec,\n} from '@lssm/lib.contracts';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\n\nexport interface EventBus {\n publish: (topic: EventKey, bytes: Uint8Array) => Promise<void>;\n subscribe: (\n topic: EventKey | string, // allow wildcard if your broker supports it\n handler: (bytes: Uint8Array) => Promise<void>\n ) => Promise<() => Promise<void>>; // returns unsubscribe\n}\n\n/** Helper to encode a typed event envelope into JSON string */\nexport function encodeEvent<T>(envelope: EventEnvelope<T>): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(envelope));\n}\n\n/** Helper to decode JSON string into a typed event envelope */\nexport function decodeEvent<T>(data: Uint8Array): EventEnvelope<T> {\n return JSON.parse(new TextDecoder().decode(data)) as EventEnvelope<T>;\n}\n\n/**\n * Create a typed publisher function for a given event spec.\n * It ensures payload conformance at compile time and builds the correct topic.\n */\nexport function makePublisher<T extends AnySchemaModel>(\n bus: EventBus,\n spec: EventSpec<T>\n) {\n return async (payload: T, traceId?: string) => {\n const envelope: EventEnvelope<T> = {\n id: crypto.randomUUID(),\n occurredAt: new Date().toISOString(),\n name: spec.name,\n version: spec.version,\n payload,\n traceId,\n };\n await bus.publish(eventKey(spec.name, spec.version), encodeEvent(envelope));\n };\n}\n"],"mappings":"sFAiBA,SAAgB,EAAe,EAAwC,CACrE,OAAO,IAAI,aAAa,CAAC,OAAO,KAAK,UAAU,EAAS,CAAC,CAI3D,SAAgB,EAAe,EAAoC,CACjE,OAAO,KAAK,MAAM,IAAI,aAAa,CAAC,OAAO,EAAK,CAAC,CAOnD,SAAgB,EACd,EACA,EACA,CACA,OAAO,MAAO,EAAY,IAAqB,CAC7C,IAAMA,EAA6B,CACjC,GAAI,OAAO,YAAY,CACvB,WAAY,IAAI,MAAM,CAAC,aAAa,CACpC,KAAM,EAAK,KACX,QAAS,EAAK,QACd,UACA,UACD,CACD,MAAM,EAAI,QAAQ,EAAS,EAAK,KAAM,EAAK,QAAQ,CAAE,EAAY,EAAS,CAAC"}
1
+ {"version":3,"file":"eventBus.js","names":["envelope: EventEnvelope<T>","eventKey"],"sources":["../src/eventBus.ts"],"sourcesContent":["import {\n type EventEnvelope,\n type EventKey,\n eventKey,\n type EventSpec,\n} from '@lssm/lib.contracts';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\n\nexport interface EventBus {\n publish: (topic: EventKey, bytes: Uint8Array) => Promise<void>;\n subscribe: (\n topic: EventKey | string, // allow wildcard if your broker supports it\n handler: (bytes: Uint8Array) => Promise<void>\n ) => Promise<() => Promise<void>>; // returns unsubscribe\n}\n\n/** Helper to encode a typed event envelope into JSON string */\nexport function encodeEvent<T>(envelope: EventEnvelope<T>): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(envelope));\n}\n\n/** Helper to decode JSON string into a typed event envelope */\nexport function decodeEvent<T>(data: Uint8Array): EventEnvelope<T> {\n return JSON.parse(new TextDecoder().decode(data)) as EventEnvelope<T>;\n}\n\n/**\n * Create a typed publisher function for a given event spec.\n * It ensures payload conformance at compile time and builds the correct topic.\n */\nexport function makePublisher<T extends AnySchemaModel>(\n bus: EventBus,\n spec: EventSpec<T>\n) {\n return async (payload: T, traceId?: string) => {\n const envelope: EventEnvelope<T> = {\n id: crypto.randomUUID(),\n occurredAt: new Date().toISOString(),\n name: spec.name,\n version: spec.version,\n payload,\n traceId,\n };\n await bus.publish(eventKey(spec.name, spec.version), encodeEvent(envelope));\n };\n}\n"],"mappings":"iFAiBA,SAAgB,EAAe,EAAwC,CACrE,OAAO,IAAI,aAAa,CAAC,OAAO,KAAK,UAAU,EAAS,CAAC,CAI3D,SAAgB,EAAe,EAAoC,CACjE,OAAO,KAAK,MAAM,IAAI,aAAa,CAAC,OAAO,EAAK,CAAC,CAOnD,SAAgB,EACd,EACA,EACA,CACA,OAAO,MAAO,EAAY,IAAqB,CAC7C,IAAMA,EAA6B,CACjC,GAAI,OAAO,YAAY,CACvB,WAAY,IAAI,MAAM,CAAC,aAAa,CACpC,KAAM,EAAK,KACX,QAAS,EAAK,QACd,UACA,UACD,CACD,MAAM,EAAI,QAAQC,EAAS,EAAK,KAAM,EAAK,QAAQ,CAAE,EAAY,EAAS,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { EventBus } from "./eventBus.js";
2
+ import { EventKey } from "@lssm/lib.contracts";
2
3
 
3
4
  //#region src/inMemoryBus.d.ts
4
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryBus.d.ts","names":[],"sources":["../src/inMemoryBus.ts"],"sourcesContent":[],"mappings":";;;;;AAOA;;;AAMuD,cAN1C,WAAA,YAAuB,QAMmB,CAAA;EAOnC,QAAA,SAAA;EACG,OAAA,CAAA,KAAA,EARA,QAQA,EAAA,OAAA,EARmB,UAQnB,CAAA,EARgC,OAQhC,CAAA,IAAA,CAAA;EAAe,SAAA,CAAA,KAAA,EAAA,MAAA,GADlB,MACkB,EAAA,OAAA,EAAA,CAAA,OAAA,EAAf,UAAe,EAAA,GAAA,OAAA,CAAA,IAAA,CAAA,CAAA,EACjC,OADiC,CAAA,GAAA,GACnB,OADmB,CAAA,IAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"inMemoryBus.d.ts","names":[],"sources":["../src/inMemoryBus.ts"],"sourcesContent":[],"mappings":";;;;;;;AAOA;;AAM0C,cAN7B,WAAA,YAAuB,QAMM,CAAA;EAAa,QAAA,SAAA;EAOnC,OAAA,CAAA,KAAA,EAPG,QAOH,EAAA,OAAA,EAPsB,UAOtB,CAAA,EAPmC,OAOnC,CAAA,IAAA,CAAA;EACG,SAAA,CAAA,KAAA,EAAA,MAAA,GADH,MACG,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,GAAe,OAAf,CAAA,IAAA,CAAA,CAAA,EAClB,OADkB,CAAA,GAAA,GACJ,OADI,CAAA,IAAA,CAAA,CAAA"}
@@ -1,7 +1,8 @@
1
1
  import { EventBus } from "./eventBus.js";
2
+ import { EventSpec } from "@lssm/lib.contracts";
3
+ import { AnySchemaModel } from "@lssm/lib.schema";
2
4
 
3
5
  //#region src/subscriber.d.ts
4
-
5
6
  /** Typed subscription using your EventSpec */
6
7
  declare function subscribeEvent<T extends AnySchemaModel>(bus: EventBus, spec: EventSpec<T>, handler: (payload: T, ctx: {
7
8
  traceId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"subscriber.d.ts","names":[],"sources":["../src/subscriber.ts"],"sourcesContent":[],"mappings":";;;;AAKA;AAA+C,iBAAzB,cAAyB,CAAA,UAAA,cAAA,CAAA,CAAA,GAAA,EACxC,QADwC,EAAA,IAAA,EAEvC,SAFuC,CAE7B,CAF6B,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAIlC,CAJkC,EAAA,GAAA,EAAA;EACxC,OAAA,CAAA,EAAA,MAAA;EACW,UAAA,CAAA,EAAA,MAAA;CAAV,EAAA,GAID,OAJC,CAAA,IAAA,CAAA,CAAA,EAIY,OAJZ,CAAA,GAAA,GAIY,OAJZ,CAAA,IAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"subscriber.d.ts","names":[],"sources":["../src/subscriber.ts"],"sourcesContent":[],"mappings":";;;;;;iBAKsB,yBAAyB,qBACxC,gBACC,UAAU,uBAEL;EAJS,OAAA,CAAA,EAAA,MAAA;EAAyB,UAAA,CAAA,EAAA,MAAA;CACxC,EAAA,GAKA,OALA,CAAA,IAAA,CAAA,CAAA,EAKa,OALb,CAAA,GAAA,GAKa,OALb,CAAA,IAAA,CAAA,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/lib.bus",
3
- "version": "1.7.3",
3
+ "version": "1.7.4",
4
4
  "scripts": {
5
5
  "build": "bun build:bundle && bun build:types",
6
6
  "build:bundle": "tsdown",
@@ -19,8 +19,8 @@
19
19
  "typescript": "^5.9.3"
20
20
  },
21
21
  "dependencies": {
22
- "@lssm/lib.schema": "^1.7.3",
23
- "@lssm/lib.contracts": "^1.7.3"
22
+ "@lssm/lib.schema": "^1.7.4",
23
+ "@lssm/lib.contracts": "^1.7.4"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "elysia": "^1.4.11",
@@ -36,10 +36,10 @@
36
36
  "README.md"
37
37
  ],
38
38
  "exports": {
39
- ".": "./src/index.ts",
40
- "./eventBus": "./src/eventBus.ts",
41
- "./inMemoryBus": "./src/inMemoryBus.ts",
42
- "./subscriber": "./src/subscriber.ts",
39
+ ".": "./dist/index.js",
40
+ "./eventBus": "./dist/eventBus.js",
41
+ "./inMemoryBus": "./dist/inMemoryBus.js",
42
+ "./subscriber": "./dist/subscriber.js",
43
43
  "./*": "./*"
44
44
  },
45
45
  "publishConfig": {
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../ownership.js";const t=[`platform.finance`],n=[`open-banking`,`finance`];[...t],[...n],e.Experimental,[...t],[...n],e.Experimental,[...t],[...n],e.Experimental;
2
- //# sourceMappingURL=openbanking.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openbanking.js","names":["openBankingAccountsReadCapability: CapabilitySpec","openBankingTransactionsReadCapability: CapabilitySpec","openBankingBalancesReadCapability: CapabilitySpec"],"sources":["../../../../../contracts/src/capabilities/openbanking.ts"],"sourcesContent":["import type { CapabilityRegistry, CapabilitySpec } from '../capabilities';\nimport { StabilityEnum } from '../ownership';\n\nconst OWNERS = ['platform.finance'] as const;\nconst TAGS = ['open-banking', 'finance'] as const;\n\nexport const openBankingAccountsReadCapability: CapabilitySpec = {\n meta: {\n key: 'openbanking.accounts.read',\n version: 1,\n kind: 'integration',\n title: 'Open Banking Accounts (Read)',\n description:\n 'Provides read-only access to linked bank accounts, including account summaries and metadata.',\n domain: 'finance',\n owners: [...OWNERS],\n tags: [...TAGS],\n stability: StabilityEnum.Experimental,\n },\n provides: [\n {\n surface: 'operation',\n name: 'openbanking.accounts.list',\n version: 1,\n description: 'List bank accounts linked to a Powens open banking connection.',\n },\n {\n surface: 'operation',\n name: 'openbanking.accounts.get',\n version: 1,\n description: 'Retrieve the canonical bank account record for a specific account.',\n },\n {\n surface: 'operation',\n name: 'openbanking.accounts.sync',\n version: 1,\n description: 'Trigger a refresh of bank account metadata from the open banking provider.',\n },\n ],\n};\n\nexport const openBankingTransactionsReadCapability: CapabilitySpec = {\n meta: {\n key: 'openbanking.transactions.read',\n version: 1,\n kind: 'integration',\n title: 'Open Banking Transactions (Read)',\n description:\n 'Enables retrieval of transaction history for linked bank accounts via open banking providers.',\n domain: 'finance',\n owners: [...OWNERS],\n tags: [...TAGS, 'transactions'],\n stability: StabilityEnum.Experimental,\n },\n provides: [\n {\n surface: 'operation',\n name: 'openbanking.transactions.list',\n version: 1,\n description: 'List transactions for a given bank account with optional date filtering.',\n },\n {\n surface: 'operation',\n name: 'openbanking.transactions.sync',\n version: 1,\n description: 'Synchronise transactions from the open banking provider into the canonical ledger.',\n },\n ],\n};\n\nexport const openBankingBalancesReadCapability: CapabilitySpec = {\n meta: {\n key: 'openbanking.balances.read',\n version: 1,\n kind: 'integration',\n title: 'Open Banking Balances (Read)',\n description:\n 'Allows querying of current and available balances for linked bank accounts via open banking providers.',\n domain: 'finance',\n owners: [...OWNERS],\n tags: [...TAGS, 'balances'],\n stability: StabilityEnum.Experimental,\n },\n provides: [\n {\n surface: 'operation',\n name: 'openbanking.balances.get',\n version: 1,\n description: 'Retrieve the latest known balances for a specified bank account.',\n },\n {\n surface: 'operation',\n name: 'openbanking.balances.refresh',\n version: 1,\n description: 'Force a balance refresh from the open banking provider.',\n },\n ],\n};\n\nexport function registerOpenBankingCapabilities(\n registry: CapabilityRegistry\n): CapabilityRegistry {\n return registry\n .register(openBankingAccountsReadCapability)\n .register(openBankingTransactionsReadCapability)\n .register(openBankingBalancesReadCapability);\n}\n\n\n\n\n"],"mappings":"gDAGA,MAAM,EAAS,CAAC,mBAAmB,CAC7B,EAAO,CAAC,eAAgB,UAAU,CAW5B,CAAC,GAAG,EAAO,CACb,CAAC,GAAG,EAAK,CACJ,EAAc,aAiCjB,CAAC,GAAG,EAAO,CACb,CAAC,GAAG,EAAqB,CACpB,EAAc,aA2BjB,CAAC,GAAG,EAAO,CACb,CAAC,GAAG,EAAiB,CAChB,EAAc"}
@@ -1 +0,0 @@
1
- "use client";import"./react/index.js";
@@ -1,2 +0,0 @@
1
- import"../../schema/src/index.js";const e=(e,t)=>`${e}.v${t}`;export{e as eventKey};
2
- //# sourceMappingURL=events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","names":[],"sources":["../../../../contracts/src/events.ts"],"sourcesContent":["import { type AnySchemaModel } from '@lssm/lib.schema';\nimport type { OwnerShipMeta } from './ownership';\n\n/**\n * Typed event specification. Declare once, validate payloads at publish time,\n * and guard emissions via the contracts runtime.\n */\nexport interface EventSpec<T extends AnySchemaModel> {\n /** Fully-qualified event name, e.g. \"sigil.magic_link.created\". */\n name: string;\n /** Event payload version. Bump on any breaking payload change. */\n version: number;\n /** Short human-friendly summary. */\n description?: string;\n /** JSON-like paths to redact from logs/exports. */\n pii?: string[];\n /** Event payload schema from @lssm/lib.schema. */\n payload: T;\n /** Optional ownership metadata for governance and docs. */\n ownership?: OwnerShipMeta;\n}\n\n/** Identity function to keep type inference when declaring events. */\nexport function defineEvent<T extends AnySchemaModel>(\n e: EventSpec<T>\n): EventSpec<T> {\n return e;\n}\n\nexport interface EventEnvelope<T> {\n /** Unique identifier for the published event (UUID recommended). */\n id: string;\n /** ISO timestamp when the event occurred. */\n occurredAt: string;\n /** Optional trace identifier for correlating across services. */\n traceId?: string;\n /** Event name as published (should match spec.name). */\n name: string;\n /** Event version as published (should match spec.version). */\n version: number;\n /** Validated payload. */\n payload: T;\n}\n\nexport type EventKey = `${string}.v${number}`;\n/** Build a stable string key for an event name/version pair. */\nexport const eventKey = (name: string, version: number): EventKey =>\n `${name}.v${version}`;\n"],"mappings":"kCA8CA,MAAa,GAAY,EAAc,IACrC,GAAG,EAAK,IAAI"}
@@ -1 +0,0 @@
1
- import{eventKey as e}from"./events.js";import"./client/index.js";import"./jsonschema.js";import"./presentations.js";import"./server/index.js";import{defineCommand as t,defineQuery as n}from"./spec.js";import"./registry.js";import"./install.js";import"./prompt.js";import"./promptRegistry.js";import"./resources.js";import{OwnersEnum as r,StabilityEnum as i}from"./ownership.js";import{CompleteOnboardingBaseInput as a,CompleteOnboardingBaseOutput as o,DeleteOnboardingDraftOutput as s,GetOnboardingDraftOutput as c,SaveOnboardingDraftInput as l,SaveOnboardingDraftOutput as u}from"./onboarding-base.js";import"./capabilities/openbanking.js";import"./telemetry/index.js";import"./tests/index.js";import"./experiments/evaluator.js";import{AccountBalanceRecord as d,BankAccountRecord as f,BankTransactionRecord as p}from"./integrations/openbanking/models.js";import{OPENBANKING_TELEMETRY_EVENTS as m}from"./integrations/openbanking/telemetry.js";import"./integrations/index.js";import"./knowledge/index.js";import"./integrations/contracts.js";import"./knowledge/contracts.js";import"./regenerator/index.js";import"./workflow/index.js";
@@ -1,2 +0,0 @@
1
- import{ScalarTypeEnum as e}from"../../../schema/src/ScalarTypeEnum.js";import{SchemaModel as t}from"../../../schema/src/SchemaModel.js";import"../../../schema/src/index.js";import{defineCommand as n,defineQuery as r}from"../spec.js";const i=new t({name:`IntegrationConnectionRecord`,fields:{id:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},integrationKey:{type:e.NonEmptyString(),isOptional:!1},integrationVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},ownershipMode:{type:e.String_unsecure(),isOptional:!1},externalAccountId:{type:e.String_unsecure(),isOptional:!0},secretProvider:{type:e.String_unsecure(),isOptional:!1},secretRef:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},environment:{type:e.String_unsecure(),isOptional:!0},healthStatus:{type:e.String_unsecure(),isOptional:!0},healthCheckedAt:{type:e.DateTime(),isOptional:!0},healthLatencyMs:{type:e.Float_unsecure(),isOptional:!0},healthErrorCode:{type:e.String_unsecure(),isOptional:!0},healthErrorMessage:{type:e.String_unsecure(),isOptional:!0},usageRequestCount:{type:e.Int_unsecure(),isOptional:!0},usageSuccessCount:{type:e.Int_unsecure(),isOptional:!0},usageErrorCount:{type:e.Int_unsecure(),isOptional:!0},usageLastUsedAt:{type:e.DateTime(),isOptional:!0},usageLastErrorAt:{type:e.DateTime(),isOptional:!0},usageLastErrorCode:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!0},updatedAt:{type:e.DateTime(),isOptional:!0}}}),a=new t({name:`CreateIntegrationConnectionInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},integrationKey:{type:e.NonEmptyString(),isOptional:!1},integrationVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},ownershipMode:{type:e.String_unsecure(),isOptional:!1},externalAccountId:{type:e.String_unsecure(),isOptional:!0},secretProvider:{type:e.String_unsecure(),isOptional:!1},secretRef:{type:e.String_unsecure(),isOptional:!1},environment:{type:e.String_unsecure(),isOptional:!0},config:{type:e.JSONObject(),isOptional:!1}}}),o=new t({name:`UpdateIntegrationConnectionInput`,fields:{connectionId:{type:e.ID(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!0},status:{type:e.String_unsecure(),isOptional:!0},ownershipMode:{type:e.String_unsecure(),isOptional:!0},externalAccountId:{type:e.String_unsecure(),isOptional:!0},secretProvider:{type:e.String_unsecure(),isOptional:!0},secretRef:{type:e.String_unsecure(),isOptional:!0},config:{type:e.JSONObject(),isOptional:!0}}}),s=new t({name:`DeleteIntegrationConnectionInput`,fields:{connectionId:{type:e.ID(),isOptional:!1}}}),c=new t({name:`ListIntegrationConnectionsInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},category:{type:e.String_unsecure(),isOptional:!0},status:{type:e.String_unsecure(),isOptional:!0}}}),l=new t({name:`ListIntegrationConnectionsOutput`,fields:{connections:{type:i,isOptional:!1,isArray:!0}}}),u=new t({name:`TestIntegrationConnectionInput`,fields:{connectionId:{type:e.ID(),isOptional:!1}}}),d=new t({name:`TestIntegrationConnectionOutput`,fields:{success:{type:e.Boolean(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!0},latencyMs:{type:e.Float_unsecure(),isOptional:!0},error:{type:e.String_unsecure(),isOptional:!0},errorCode:{type:e.String_unsecure(),isOptional:!0}}}),f=new t({name:`DeleteIntegrationConnectionOutput`,fields:{success:{type:e.Boolean(),isOptional:!1}}});n({meta:{name:`integrations.connection.create`,version:1,description:`Create a new integration connection for a tenant.`,goal:`Provision a tenant-scoped connection to an external provider.`,context:`Used by Ops or the App Studio to configure external integrations such as Stripe or Qdrant.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:a,output:i},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),n({meta:{name:`integrations.connection.update`,version:1,description:`Update metadata or credentials for an integration connection.`,goal:`Allow secure rotation of credentials and metadata adjustments.`,context:`Supports rotating API keys, toggling status, or updating labels for tenant integrations.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:o,output:i},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),n({meta:{name:`integrations.connection.delete`,version:1,description:`Delete an integration connection for a tenant.`,goal:`Safely remove credentials and disable connector usage.`,context:`Ensures connections are de-provisioned when no longer needed or breached.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:s,output:f},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),r({meta:{name:`integrations.connection.list`,version:1,description:`List integration connections for a tenant.`,goal:`Provide visibility into configured integrations and their status.`,context:`Used by the App Studio and Ops flows to show bindings and health.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`,policies:[{name:`platform.integration.read`,version:1}]}}),n({meta:{name:`integrations.connection.test`,version:1,description:`Run a health check against a configured integration connection.`,goal:`Validate credentials and connectivity for external providers.`,context:`Triggered manually or by background monitors to confirm provider availability.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:u,output:d},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}});
2
- //# sourceMappingURL=contracts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contracts.js","names":[],"sources":["../../../../../contracts/src/integrations/contracts.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\nimport {\n defineCommand,\n defineQuery,\n type ContractSpec,\n} from '../spec';\nimport type { SpecRegistry } from '../registry';\n\nconst IntegrationConnectionRecord = new SchemaModel({\n name: 'IntegrationConnectionRecord',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n integrationKey: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n integrationVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n label: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n externalAccountId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n secretProvider: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n secretRef: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n healthStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n healthCheckedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n healthLatencyMs: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n healthErrorCode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n healthErrorMessage: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n usageRequestCount: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: true,\n },\n usageSuccessCount: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: true,\n },\n usageErrorCount: {\n type: ScalarTypeEnum.Int_unsecure(),\n isOptional: true,\n },\n usageLastUsedAt: {\n type: ScalarTypeEnum.DateTime(),\n isOptional: true,\n },\n usageLastErrorAt: {\n type: ScalarTypeEnum.DateTime(),\n isOptional: true,\n },\n usageLastErrorCode: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nconst CreateIntegrationConnectionInput = new SchemaModel({\n name: 'CreateIntegrationConnectionInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n integrationKey: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n integrationVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n label: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n externalAccountId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n secretProvider: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n secretRef: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n environment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n config: { type: ScalarTypeEnum.JSONObject(), isOptional: false },\n },\n});\n\nconst UpdateIntegrationConnectionInput = new SchemaModel({\n name: 'UpdateIntegrationConnectionInput',\n fields: {\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n label: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n externalAccountId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n secretProvider: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n secretRef: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n config: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n },\n});\n\nconst DeleteIntegrationConnectionInput = new SchemaModel({\n name: 'DeleteIntegrationConnectionInput',\n fields: {\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nconst ListIntegrationConnectionsInput = new SchemaModel({\n name: 'ListIntegrationConnectionsInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n category: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst ListIntegrationConnectionsOutput = new SchemaModel({\n name: 'ListIntegrationConnectionsOutput',\n fields: {\n connections: {\n type: IntegrationConnectionRecord,\n isOptional: false,\n isArray: true,\n },\n },\n});\n\nconst TestIntegrationConnectionInput = new SchemaModel({\n name: 'TestIntegrationConnectionInput',\n fields: {\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nconst TestIntegrationConnectionOutput = new SchemaModel({\n name: 'TestIntegrationConnectionOutput',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n status: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n latencyMs: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n error: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n errorCode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst DeleteIntegrationConnectionOutput = new SchemaModel({\n name: 'DeleteIntegrationConnectionOutput',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n },\n});\n\nexport const CreateIntegrationConnection = defineCommand({\n meta: {\n name: 'integrations.connection.create',\n version: 1,\n description: 'Create a new integration connection for a tenant.',\n goal: 'Provision a tenant-scoped connection to an external provider.',\n context:\n 'Used by Ops or the App Studio to configure external integrations such as Stripe or Qdrant.',\n owners: ['platform.integrations'],\n tags: ['integration', 'connections'],\n stability: 'experimental',\n },\n io: {\n input: CreateIntegrationConnectionInput,\n output: IntegrationConnectionRecord,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.integration.manage', version: 1 }],\n },\n});\n\nexport const UpdateIntegrationConnection = defineCommand({\n meta: {\n name: 'integrations.connection.update',\n version: 1,\n description: 'Update metadata or credentials for an integration connection.',\n goal: 'Allow secure rotation of credentials and metadata adjustments.',\n context:\n 'Supports rotating API keys, toggling status, or updating labels for tenant integrations.',\n owners: ['platform.integrations'],\n tags: ['integration', 'connections'],\n stability: 'experimental',\n },\n io: {\n input: UpdateIntegrationConnectionInput,\n output: IntegrationConnectionRecord,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.integration.manage', version: 1 }],\n },\n});\n\nexport const DeleteIntegrationConnection = defineCommand({\n meta: {\n name: 'integrations.connection.delete',\n version: 1,\n description: 'Delete an integration connection for a tenant.',\n goal: 'Safely remove credentials and disable connector usage.',\n context:\n 'Ensures connections are de-provisioned when no longer needed or breached.',\n owners: ['platform.integrations'],\n tags: ['integration', 'connections'],\n stability: 'experimental',\n },\n io: {\n input: DeleteIntegrationConnectionInput,\n output: DeleteIntegrationConnectionOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.integration.manage', version: 1 }],\n },\n});\n\nexport const ListIntegrationConnections = defineQuery({\n meta: {\n name: 'integrations.connection.list',\n version: 1,\n description: 'List integration connections for a tenant.',\n goal: 'Provide visibility into configured integrations and their status.',\n context:\n 'Used by the App Studio and Ops flows to show bindings and health.',\n owners: ['platform.integrations'],\n tags: ['integration', 'connections'],\n stability: 'experimental',\n },\n io: {\n input: ListIntegrationConnectionsInput,\n output: ListIntegrationConnectionsOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.integration.read', version: 1 }],\n },\n});\n\nexport const TestIntegrationConnection = defineCommand({\n meta: {\n name: 'integrations.connection.test',\n version: 1,\n description: 'Run a health check against a configured integration connection.',\n goal: 'Validate credentials and connectivity for external providers.',\n context:\n 'Triggered manually or by background monitors to confirm provider availability.',\n owners: ['platform.integrations'],\n tags: ['integration', 'connections'],\n stability: 'experimental',\n },\n io: {\n input: TestIntegrationConnectionInput,\n output: TestIntegrationConnectionOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.integration.manage', version: 1 }],\n },\n});\n\nexport const integrationContracts: Record<\n string,\n ContractSpec<any, any>\n> = {\n CreateIntegrationConnection,\n UpdateIntegrationConnection,\n DeleteIntegrationConnection,\n ListIntegrationConnections,\n TestIntegrationConnection,\n};\n\nexport function registerIntegrationContracts(registry: SpecRegistry) {\n return registry\n .register(CreateIntegrationConnection)\n .register(UpdateIntegrationConnection)\n .register(DeleteIntegrationConnection)\n .register(ListIntegrationConnections)\n .register(TestIntegrationConnection);\n}\n\n"],"mappings":"yOAWA,MAAM,EAA8B,IAAI,EAAY,CAClD,KAAM,8BACN,OAAQ,CACN,GAAI,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CACpD,SAAU,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,eAAgB,CAAE,KAAM,EAAe,gBAAgB,CAAE,WAAY,GAAO,CAC5E,mBAAoB,CAAE,KAAM,EAAe,cAAc,CAAE,WAAY,GAAO,CAC9E,MAAO,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACpE,cAAe,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CAC5E,kBAAmB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC/E,eAAgB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CAC7E,UAAW,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACxE,OAAQ,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACrE,YAAa,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACzE,aAAc,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC1E,gBAAiB,CAAE,KAAM,EAAe,UAAU,CAAE,WAAY,GAAM,CACtE,gBAAiB,CAAE,KAAM,EAAe,gBAAgB,CAAE,WAAY,GAAM,CAC5E,gBAAiB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC7E,mBAAoB,CAClB,KAAM,EAAe,iBAAiB,CACtC,WAAY,GACb,CACD,kBAAmB,CACjB,KAAM,EAAe,cAAc,CACnC,WAAY,GACb,CACD,kBAAmB,CACjB,KAAM,EAAe,cAAc,CACnC,WAAY,GACb,CACD,gBAAiB,CACf,KAAM,EAAe,cAAc,CACnC,WAAY,GACb,CACD,gBAAiB,CACf,KAAM,EAAe,UAAU,CAC/B,WAAY,GACb,CACD,iBAAkB,CAChB,KAAM,EAAe,UAAU,CAC/B,WAAY,GACb,CACD,mBAAoB,CAClB,KAAM,EAAe,iBAAiB,CACtC,WAAY,GACb,CACD,UAAW,CAAE,KAAM,EAAe,UAAU,CAAE,WAAY,GAAM,CAChE,UAAW,CAAE,KAAM,EAAe,UAAU,CAAE,WAAY,GAAM,CACjE,CACF,CAAC,CAEI,EAAmC,IAAI,EAAY,CACvD,KAAM,mCACN,OAAQ,CACN,SAAU,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,eAAgB,CAAE,KAAM,EAAe,gBAAgB,CAAE,WAAY,GAAO,CAC5E,mBAAoB,CAAE,KAAM,EAAe,cAAc,CAAE,WAAY,GAAO,CAC9E,MAAO,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACpE,cAAe,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CAC5E,kBAAmB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC/E,eAAgB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CAC7E,UAAW,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAO,CACxE,YAAa,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACzE,OAAQ,CAAE,KAAM,EAAe,YAAY,CAAE,WAAY,GAAO,CACjE,CACF,CAAC,CAEI,EAAmC,IAAI,EAAY,CACvD,KAAM,mCACN,OAAQ,CACN,aAAc,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC9D,MAAO,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACnE,OAAQ,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACpE,cAAe,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC3E,kBAAmB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC/E,eAAgB,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CAC5E,UAAW,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACvE,OAAQ,CAAE,KAAM,EAAe,YAAY,CAAE,WAAY,GAAM,CAChE,CACF,CAAC,CAEI,EAAmC,IAAI,EAAY,CACvD,KAAM,mCACN,OAAQ,CACN,aAAc,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC/D,CACF,CAAC,CAEI,EAAkC,IAAI,EAAY,CACtD,KAAM,kCACN,OAAQ,CACN,SAAU,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,SAAU,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACtE,OAAQ,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACrE,CACF,CAAC,CAEI,EAAmC,IAAI,EAAY,CACvD,KAAM,mCACN,OAAQ,CACN,YAAa,CACX,KAAM,EACN,WAAY,GACZ,QAAS,GACV,CACF,CACF,CAAC,CAEI,EAAiC,IAAI,EAAY,CACrD,KAAM,iCACN,OAAQ,CACN,aAAc,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC/D,CACF,CAAC,CAEI,EAAkC,IAAI,EAAY,CACtD,KAAM,kCACN,OAAQ,CACN,QAAS,CAAE,KAAM,EAAe,SAAS,CAAE,WAAY,GAAO,CAC9D,OAAQ,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACpE,UAAW,CAAE,KAAM,EAAe,gBAAgB,CAAE,WAAY,GAAM,CACtE,MAAO,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACnE,UAAW,CAAE,KAAM,EAAe,iBAAiB,CAAE,WAAY,GAAM,CACxE,CACF,CAAC,CAEI,EAAoC,IAAI,EAAY,CACxD,KAAM,oCACN,OAAQ,CACN,QAAS,CAAE,KAAM,EAAe,SAAS,CAAE,WAAY,GAAO,CAC/D,CACF,CAAC,CAEyC,EAAc,CACvD,KAAM,CACJ,KAAM,iCACN,QAAS,EACT,YAAa,oDACb,KAAM,gEACN,QACE,6FACF,OAAQ,CAAC,wBAAwB,CACjC,KAAM,CAAC,cAAe,cAAc,CACpC,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,QACN,SAAU,CAAC,CAAE,KAAM,8BAA+B,QAAS,EAAG,CAAC,CAChE,CACF,CAAC,CAEyC,EAAc,CACvD,KAAM,CACJ,KAAM,iCACN,QAAS,EACT,YAAa,gEACb,KAAM,iEACN,QACE,2FACF,OAAQ,CAAC,wBAAwB,CACjC,KAAM,CAAC,cAAe,cAAc,CACpC,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,QACN,SAAU,CAAC,CAAE,KAAM,8BAA+B,QAAS,EAAG,CAAC,CAChE,CACF,CAAC,CAEyC,EAAc,CACvD,KAAM,CACJ,KAAM,iCACN,QAAS,EACT,YAAa,iDACb,KAAM,yDACN,QACE,4EACF,OAAQ,CAAC,wBAAwB,CACjC,KAAM,CAAC,cAAe,cAAc,CACpC,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,QACN,SAAU,CAAC,CAAE,KAAM,8BAA+B,QAAS,EAAG,CAAC,CAChE,CACF,CAAC,CAEwC,EAAY,CACpD,KAAM,CACJ,KAAM,+BACN,QAAS,EACT,YAAa,6CACb,KAAM,oEACN,QACE,oEACF,OAAQ,CAAC,wBAAwB,CACjC,KAAM,CAAC,cAAe,cAAc,CACpC,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,QACN,SAAU,CAAC,CAAE,KAAM,4BAA6B,QAAS,EAAG,CAAC,CAC9D,CACF,CAAC,CAEuC,EAAc,CACrD,KAAM,CACJ,KAAM,+BACN,QAAS,EACT,YAAa,kEACb,KAAM,gEACN,QACE,iFACF,OAAQ,CAAC,wBAAwB,CACjC,KAAM,CAAC,cAAe,cAAc,CACpC,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,QACN,SAAU,CAAC,CAAE,KAAM,8BAA+B,QAAS,EAAG,CAAC,CAChE,CACF,CAAC"}
@@ -1 +0,0 @@
1
- import"./providers/index.js";import"./secrets/index.js";import"./runtime.js";import{AccountBalanceRecord as e,BankAccountRecord as t,BankTransactionRecord as n}from"./openbanking/models.js";import{OPENBANKING_TELEMETRY_EVENTS as r}from"./openbanking/telemetry.js";import"./openbanking/contracts/index.js";
@@ -1,2 +0,0 @@
1
- import{ScalarTypeEnum as e}from"../../../../../schema/src/ScalarTypeEnum.js";import{SchemaModel as t}from"../../../../../schema/src/SchemaModel.js";import"../../../../../schema/src/index.js";import{defineCommand as n,defineQuery as r}from"../../../spec.js";import{BankAccountRecord as i}from"../models.js";import{OPENBANKING_TELEMETRY_EVENTS as a}from"../telemetry.js";const o=new t({name:`OpenBankingListAccountsInput`,description:`Parameters for listing bank accounts through the open banking provider.`,fields:{tenantId:{type:e.ID(),isOptional:!1},userId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!0},includeBalances:{type:e.Boolean(),isOptional:!0},institutionId:{type:e.String_unsecure(),isOptional:!0},cursor:{type:e.String_unsecure(),isOptional:!0},pageSize:{type:e.Int_unsecure(),isOptional:!0}}}),s=new t({name:`OpenBankingListAccountsOutput`,description:`Paginated list of bank accounts available to the tenant and user.`,fields:{accounts:{type:i,isOptional:!1,isArray:!0},nextCursor:{type:e.String_unsecure(),isOptional:!0},hasMore:{type:e.Boolean(),isOptional:!0}}}),c=new t({name:`OpenBankingGetAccountInput`,description:`Parameters for retrieving a specific bank account.`,fields:{tenantId:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},includeBalances:{type:e.Boolean(),isOptional:!0},includeLatestTransactions:{type:e.Boolean(),isOptional:!0}}}),l=new t({name:`OpenBankingSyncAccountsInput`,description:`Command payload to trigger an account synchronisation against the open banking provider.`,fields:{tenantId:{type:e.ID(),isOptional:!1},userId:{type:e.ID(),isOptional:!0},connectionId:{type:e.ID(),isOptional:!1},accountIds:{type:e.ID(),isArray:!0,isOptional:!0},forceFullRefresh:{type:e.Boolean(),isOptional:!0},triggerWorkflows:{type:e.Boolean(),isOptional:!0}}}),u=new t({name:`OpenBankingSyncAccountsOutput`,description:`Result of a bank account synchronisation run.`,fields:{synced:{type:e.Int_unsecure(),isOptional:!1},failed:{type:e.Int_unsecure(),isOptional:!1},errors:{type:e.String_unsecure(),isArray:!0,isOptional:!0},nextSyncSuggestedAt:{type:e.DateTime(),isOptional:!0}}});r({meta:{name:`openbanking.accounts.list`,version:1,description:`List bank accounts available to a tenant/user via Powens Open Banking.`,goal:`Provide downstream workflows with the set of accounts accessible via the configured open banking connection.`,context:`Used by Pocket Family Office dashboards and sync workflows to enumerate bank accounts prior to syncing balances or transactions.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`accounts`],stability:`experimental`},io:{input:o,output:s},policy:{auth:`user`}}),r({meta:{name:`openbanking.accounts.get`,version:1,description:`Retrieve the canonical bank account record for the given account identifier.`,goal:`Allow user-facing experiences and automations to display up-to-date account metadata.`,context:`Invoked by UI surfaces and workflow automation steps that require detailed metadata for a specific bank account.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`accounts`],stability:`experimental`},io:{input:c,output:i},policy:{auth:`user`}}),n({meta:{name:`openbanking.accounts.sync`,version:1,description:`Initiate a synchronisation run to refresh bank account metadata from Powens.`,goal:`Keep canonical bank account records aligned with the external open banking provider.`,context:`Triggered by scheduled workflows or manual operator actions to reconcile account metadata prior to transaction/balance syncs.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`accounts`],stability:`experimental`},io:{input:l,output:u},policy:{auth:`admin`},telemetry:{success:{event:{name:a.accountsSynced},properties:({input:e,output:t})=>{let n=e,r=t;return{tenantId:n?.tenantId,connectionId:n?.connectionId,synced:r?.synced,failed:r?.failed}}},failure:{event:{name:a.accountsSyncFailed},properties:({input:e,error:t})=>{let n=e;return{tenantId:n?.tenantId,connectionId:n?.connectionId,error:t instanceof Error?t.message:String(t??`unknown`)}}}}});
2
- //# sourceMappingURL=accounts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accounts.js","names":[],"sources":["../../../../../../../contracts/src/integrations/openbanking/contracts/accounts.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\nimport {\n defineCommand,\n defineQuery,\n type ContractSpec,\n} from '../../../spec';\nimport type { SpecRegistry } from '../../../registry';\nimport { BankAccountRecord } from '../models';\nimport { OPENBANKING_TELEMETRY_EVENTS } from '../telemetry';\n\nconst OpenBankingListAccountsInput = new SchemaModel({\n name: 'OpenBankingListAccountsInput',\n description: 'Parameters for listing bank accounts through the open banking provider.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n userId: { type: ScalarTypeEnum.ID(), isOptional: false },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: true },\n includeBalances: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n institutionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n cursor: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n pageSize: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n },\n});\n\nconst OpenBankingListAccountsOutput = new SchemaModel({\n name: 'OpenBankingListAccountsOutput',\n description: 'Paginated list of bank accounts available to the tenant and user.',\n fields: {\n accounts: {\n type: BankAccountRecord,\n isOptional: false,\n isArray: true,\n },\n nextCursor: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n hasMore: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n },\n});\n\nconst OpenBankingGetAccountInput = new SchemaModel({\n name: 'OpenBankingGetAccountInput',\n description: 'Parameters for retrieving a specific bank account.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n includeBalances: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n includeLatestTransactions: {\n type: ScalarTypeEnum.Boolean(),\n isOptional: true,\n },\n },\n});\n\nconst OpenBankingSyncAccountsInput = new SchemaModel({\n name: 'OpenBankingSyncAccountsInput',\n description:\n 'Command payload to trigger an account synchronisation against the open banking provider.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n userId: { type: ScalarTypeEnum.ID(), isOptional: true },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountIds: {\n type: ScalarTypeEnum.ID(),\n isArray: true,\n isOptional: true,\n },\n forceFullRefresh: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n triggerWorkflows: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n },\n});\n\nconst OpenBankingSyncAccountsOutput = new SchemaModel({\n name: 'OpenBankingSyncAccountsOutput',\n description: 'Result of a bank account synchronisation run.',\n fields: {\n synced: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n failed: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n errors: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: true,\n },\n nextSyncSuggestedAt: {\n type: ScalarTypeEnum.DateTime(),\n isOptional: true,\n },\n },\n});\n\nexport const OpenBankingListAccounts = defineQuery({\n meta: {\n name: 'openbanking.accounts.list',\n version: 1,\n description: 'List bank accounts available to a tenant/user via Powens Open Banking.',\n goal: 'Provide downstream workflows with the set of accounts accessible via the configured open banking connection.',\n context:\n 'Used by Pocket Family Office dashboards and sync workflows to enumerate bank accounts prior to syncing balances or transactions.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'accounts'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingListAccountsInput,\n output: OpenBankingListAccountsOutput,\n },\n policy: {\n auth: 'user',\n },\n});\n\nexport const OpenBankingGetAccount = defineQuery({\n meta: {\n name: 'openbanking.accounts.get',\n version: 1,\n description: 'Retrieve the canonical bank account record for the given account identifier.',\n goal: 'Allow user-facing experiences and automations to display up-to-date account metadata.',\n context:\n 'Invoked by UI surfaces and workflow automation steps that require detailed metadata for a specific bank account.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'accounts'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingGetAccountInput,\n output: BankAccountRecord,\n },\n policy: {\n auth: 'user',\n },\n});\n\nexport const OpenBankingSyncAccounts = defineCommand({\n meta: {\n name: 'openbanking.accounts.sync',\n version: 1,\n description: 'Initiate a synchronisation run to refresh bank account metadata from Powens.',\n goal: 'Keep canonical bank account records aligned with the external open banking provider.',\n context:\n 'Triggered by scheduled workflows or manual operator actions to reconcile account metadata prior to transaction/balance syncs.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'accounts'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingSyncAccountsInput,\n output: OpenBankingSyncAccountsOutput,\n },\n policy: {\n auth: 'admin',\n },\n telemetry: {\n success: {\n event: { name: OPENBANKING_TELEMETRY_EVENTS.accountsSynced },\n properties: ({ input, output }) => {\n const payload = input as {\n tenantId?: string;\n connectionId?: string;\n };\n const result = output as {\n synced?: number;\n failed?: number;\n } | null;\n return {\n tenantId: payload?.tenantId,\n connectionId: payload?.connectionId,\n synced: result?.synced,\n failed: result?.failed,\n };\n },\n },\n failure: {\n event: { name: OPENBANKING_TELEMETRY_EVENTS.accountsSyncFailed },\n properties: ({ input, error }) => {\n const payload = input as {\n tenantId?: string;\n connectionId?: string;\n };\n return {\n tenantId: payload?.tenantId,\n connectionId: payload?.connectionId,\n error: error instanceof Error ? error.message : String(error ?? 'unknown'),\n };\n },\n },\n },\n});\n\nexport const openBankingAccountContracts: Record<string, ContractSpec<any, any>> =\n {\n OpenBankingListAccounts,\n OpenBankingGetAccount,\n OpenBankingSyncAccounts,\n };\n\nexport function registerOpenBankingAccountContracts(\n registry: SpecRegistry\n): SpecRegistry {\n return registry\n .register(OpenBankingListAccounts)\n .register(OpenBankingGetAccount)\n .register(OpenBankingSyncAccounts);\n}\n\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{ScalarTypeEnum as e}from"../../../../../schema/src/ScalarTypeEnum.js";import{SchemaModel as t}from"../../../../../schema/src/SchemaModel.js";import"../../../../../schema/src/index.js";import{defineCommand as n,defineQuery as r}from"../../../spec.js";import{AccountBalanceRecord as i}from"../models.js";import{OPENBANKING_TELEMETRY_EVENTS as a}from"../telemetry.js";const o=new t({name:`OpenBankingGetBalancesInput`,description:`Parameters for retrieving bank account balances from the canonical ledger.`,fields:{tenantId:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},balanceTypes:{type:e.String_unsecure(),isArray:!0,isOptional:!0}}}),s=new t({name:`OpenBankingGetBalancesOutput`,description:`Canonical balances for a bank account.`,fields:{balances:{type:i,isOptional:!1,isArray:!0},asOf:{type:e.DateTime(),isOptional:!0}}}),c=new t({name:`OpenBankingRefreshBalancesInput`,description:`Command payload to refresh balances for a bank account via the open banking provider.`,fields:{tenantId:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!0},balanceTypes:{type:e.String_unsecure(),isArray:!0,isOptional:!0},forceRefresh:{type:e.Boolean(),isOptional:!0}}}),l=new t({name:`OpenBankingRefreshBalancesOutput`,description:`Result of a balance refresh against the open banking provider.`,fields:{balances:{type:i,isOptional:!1,isArray:!0},refreshedAt:{type:e.DateTime(),isOptional:!1},errors:{type:e.String_unsecure(),isArray:!0,isOptional:!0}}});r({meta:{name:`openbanking.balances.get`,version:1,description:`Retrieve the latest cached balances for a bank account.`,goal:`Expose current and available balances required by dashboards and analytics.`,context:`Used by Pocket Family Office UI surfaces and automation steps that require balance totals prior to generating summaries.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`balances`],stability:`experimental`},io:{input:o,output:s},policy:{auth:`user`}}),n({meta:{name:`openbanking.balances.refresh`,version:1,description:`Refresh balances for a bank account via the configured open banking provider.`,goal:`Ensure canonical balance records reflect the latest values from Powens.`,context:`Triggered by scheduled workflows before generating summaries or forecasting cashflow.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`balances`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`},telemetry:{success:{event:{name:a.balancesRefreshed},properties:({input:e,output:t})=>{let n=e,r=t;return{tenantId:n?.tenantId,accountId:n?.accountId,refreshedAt:r?.refreshedAt,balanceCount:Array.isArray(r?.balances)?r?.balances.length:void 0}}},failure:{event:{name:a.balancesRefreshFailed},properties:({input:e,error:t})=>{let n=e;return{tenantId:n?.tenantId,accountId:n?.accountId,error:t instanceof Error?t.message:String(t??`unknown`)}}}}});
2
- //# sourceMappingURL=balances.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"balances.js","names":[],"sources":["../../../../../../../contracts/src/integrations/openbanking/contracts/balances.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\nimport {\n defineCommand,\n defineQuery,\n type ContractSpec,\n} from '../../../spec';\nimport type { SpecRegistry } from '../../../registry';\nimport { AccountBalanceRecord } from '../models';\nimport { OPENBANKING_TELEMETRY_EVENTS } from '../telemetry';\n\nconst OpenBankingGetBalancesInput = new SchemaModel({\n name: 'OpenBankingGetBalancesInput',\n description: 'Parameters for retrieving bank account balances from the canonical ledger.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n balanceTypes: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: true,\n },\n },\n});\n\nconst OpenBankingGetBalancesOutput = new SchemaModel({\n name: 'OpenBankingGetBalancesOutput',\n description: 'Canonical balances for a bank account.',\n fields: {\n balances: {\n type: AccountBalanceRecord,\n isOptional: false,\n isArray: true,\n },\n asOf: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nconst OpenBankingRefreshBalancesInput = new SchemaModel({\n name: 'OpenBankingRefreshBalancesInput',\n description:\n 'Command payload to refresh balances for a bank account via the open banking provider.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: true },\n balanceTypes: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: true,\n },\n forceRefresh: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n },\n});\n\nconst OpenBankingRefreshBalancesOutput = new SchemaModel({\n name: 'OpenBankingRefreshBalancesOutput',\n description: 'Result of a balance refresh against the open banking provider.',\n fields: {\n balances: {\n type: AccountBalanceRecord,\n isOptional: false,\n isArray: true,\n },\n refreshedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n errors: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: true,\n },\n },\n});\n\nexport const OpenBankingGetBalances = defineQuery({\n meta: {\n name: 'openbanking.balances.get',\n version: 1,\n description: 'Retrieve the latest cached balances for a bank account.',\n goal: 'Expose current and available balances required by dashboards and analytics.',\n context:\n 'Used by Pocket Family Office UI surfaces and automation steps that require balance totals prior to generating summaries.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'balances'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingGetBalancesInput,\n output: OpenBankingGetBalancesOutput,\n },\n policy: {\n auth: 'user',\n },\n});\n\nexport const OpenBankingRefreshBalances = defineCommand({\n meta: {\n name: 'openbanking.balances.refresh',\n version: 1,\n description: 'Refresh balances for a bank account via the configured open banking provider.',\n goal: 'Ensure canonical balance records reflect the latest values from Powens.',\n context:\n 'Triggered by scheduled workflows before generating summaries or forecasting cashflow.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'balances'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingRefreshBalancesInput,\n output: OpenBankingRefreshBalancesOutput,\n },\n policy: {\n auth: 'admin',\n },\n telemetry: {\n success: {\n event: { name: OPENBANKING_TELEMETRY_EVENTS.balancesRefreshed },\n properties: ({ input, output }) => {\n const payload = input as {\n tenantId?: string;\n accountId?: string;\n };\n const result = output as {\n balances?: unknown[];\n refreshedAt?: string;\n } | null;\n return {\n tenantId: payload?.tenantId,\n accountId: payload?.accountId,\n refreshedAt: result?.refreshedAt,\n balanceCount: Array.isArray(result?.balances)\n ? result?.balances.length\n : undefined,\n };\n },\n },\n failure: {\n event: { name: OPENBANKING_TELEMETRY_EVENTS.balancesRefreshFailed },\n properties: ({ input, error }) => {\n const payload = input as {\n tenantId?: string;\n accountId?: string;\n };\n return {\n tenantId: payload?.tenantId,\n accountId: payload?.accountId,\n error: error instanceof Error ? error.message : String(error ?? 'unknown'),\n };\n },\n },\n },\n});\n\nexport const openBankingBalanceContracts: Record<string, ContractSpec<any, any>> =\n {\n OpenBankingGetBalances,\n OpenBankingRefreshBalances,\n };\n\nexport function registerOpenBankingBalanceContracts(\n registry: SpecRegistry\n): SpecRegistry {\n return registry\n .register(OpenBankingGetBalances)\n .register(OpenBankingRefreshBalances);\n}\n\n"],"mappings":"oXAaA,MAAM,EAA8B,IAAI,EAAY,CAClD,KAAM,8BACN,YAAa,6EACb,OAAQ,CACN,SAAU,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,UAAW,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC3D,aAAc,CACZ,KAAM,EAAe,iBAAiB,CACtC,QAAS,GACT,WAAY,GACb,CACF,CACF,CAAC,CAEI,EAA+B,IAAI,EAAY,CACnD,KAAM,+BACN,YAAa,yCACb,OAAQ,CACN,SAAU,CACR,KAAM,EACN,WAAY,GACZ,QAAS,GACV,CACD,KAAM,CAAE,KAAM,EAAe,UAAU,CAAE,WAAY,GAAM,CAC5D,CACF,CAAC,CAEI,EAAkC,IAAI,EAAY,CACtD,KAAM,kCACN,YACE,wFACF,OAAQ,CACN,SAAU,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC1D,UAAW,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAO,CAC3D,aAAc,CAAE,KAAM,EAAe,IAAI,CAAE,WAAY,GAAM,CAC7D,aAAc,CACZ,KAAM,EAAe,iBAAiB,CACtC,QAAS,GACT,WAAY,GACb,CACD,aAAc,CAAE,KAAM,EAAe,SAAS,CAAE,WAAY,GAAM,CACnE,CACF,CAAC,CAEI,EAAmC,IAAI,EAAY,CACvD,KAAM,mCACN,YAAa,iEACb,OAAQ,CACN,SAAU,CACR,KAAM,EACN,WAAY,GACZ,QAAS,GACV,CACD,YAAa,CAAE,KAAM,EAAe,UAAU,CAAE,WAAY,GAAO,CACnE,OAAQ,CACN,KAAM,EAAe,iBAAiB,CACtC,QAAS,GACT,WAAY,GACb,CACF,CACF,CAAC,CAEoC,EAAY,CAChD,KAAM,CACJ,KAAM,2BACN,QAAS,EACT,YAAa,0DACb,KAAM,8EACN,QACE,2HACF,OAAQ,CAAC,mBAAmB,CAC5B,KAAM,CAAC,eAAgB,SAAU,WAAW,CAC5C,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,OACP,CACF,CAAC,CAEwC,EAAc,CACtD,KAAM,CACJ,KAAM,+BACN,QAAS,EACT,YAAa,gFACb,KAAM,0EACN,QACE,wFACF,OAAQ,CAAC,mBAAmB,CAC5B,KAAM,CAAC,eAAgB,SAAU,WAAW,CAC5C,UAAW,eACZ,CACD,GAAI,CACF,MAAO,EACP,OAAQ,EACT,CACD,OAAQ,CACN,KAAM,QACP,CACD,UAAW,CACT,QAAS,CACP,MAAO,CAAE,KAAM,EAA6B,kBAAmB,CAC/D,YAAa,CAAE,QAAO,YAAa,CACjC,IAAM,EAAU,EAIV,EAAS,EAIf,MAAO,CACL,SAAU,GAAS,SACnB,UAAW,GAAS,UACpB,YAAa,GAAQ,YACrB,aAAc,MAAM,QAAQ,GAAQ,SAAS,CACzC,GAAQ,SAAS,OACjB,IAAA,GACL,EAEJ,CACD,QAAS,CACP,MAAO,CAAE,KAAM,EAA6B,sBAAuB,CACnE,YAAa,CAAE,QAAO,WAAY,CAChC,IAAM,EAAU,EAIhB,MAAO,CACL,SAAU,GAAS,SACnB,UAAW,GAAS,UACpB,MAAO,aAAiB,MAAQ,EAAM,QAAU,OAAO,GAAS,UAAU,CAC3E,EAEJ,CACF,CACF,CAAC"}
@@ -1 +0,0 @@
1
- import"./accounts.js";import"./transactions.js";import"./balances.js";
@@ -1,2 +0,0 @@
1
- import{ScalarTypeEnum as e}from"../../../../../schema/src/ScalarTypeEnum.js";import{SchemaModel as t}from"../../../../../schema/src/SchemaModel.js";import"../../../../../schema/src/index.js";import{defineCommand as n,defineQuery as r}from"../../../spec.js";import{BankTransactionRecord as i}from"../models.js";import{OPENBANKING_TELEMETRY_EVENTS as a}from"../telemetry.js";const o=new t({name:`OpenBankingListTransactionsInput`,description:`Parameters for listing bank transactions from the canonical ledger.`,fields:{tenantId:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},from:{type:e.DateTime(),isOptional:!0},to:{type:e.DateTime(),isOptional:!0},cursor:{type:e.String_unsecure(),isOptional:!0},pageSize:{type:e.Int_unsecure(),isOptional:!0},direction:{type:e.String_unsecure(),isOptional:!0},minimumAmount:{type:e.Float_unsecure(),isOptional:!0},maximumAmount:{type:e.Float_unsecure(),isOptional:!0},category:{type:e.String_unsecure(),isOptional:!0}}}),s=new t({name:`OpenBankingListTransactionsOutput`,description:`Paginated list of transactions for a bank account.`,fields:{transactions:{type:i,isOptional:!1,isArray:!0},nextCursor:{type:e.String_unsecure(),isOptional:!0},hasMore:{type:e.Boolean(),isOptional:!0}}}),c=new t({name:`OpenBankingSyncTransactionsInput`,description:`Command payload to synchronise transactions from the open banking provider into the canonical ledger.`,fields:{tenantId:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},from:{type:e.DateTime(),isOptional:!0},to:{type:e.DateTime(),isOptional:!0},connectionId:{type:e.ID(),isOptional:!0},includePending:{type:e.Boolean(),isOptional:!0},backfillDays:{type:e.Int_unsecure(),isOptional:!0}}}),l=new t({name:`OpenBankingSyncTransactionsOutput`,description:`Result of a transaction synchronisation run.`,fields:{synced:{type:e.Int_unsecure(),isOptional:!1},failed:{type:e.Int_unsecure(),isOptional:!1},earliestSyncedAt:{type:e.DateTime(),isOptional:!0},latestSyncedAt:{type:e.DateTime(),isOptional:!0},nextSinceToken:{type:e.String_unsecure(),isOptional:!0},errors:{type:e.String_unsecure(),isArray:!0,isOptional:!0}}});r({meta:{name:`openbanking.transactions.list`,version:1,description:`List bank transactions that have been normalised into the canonical ledger.`,goal:`Allow downstream analytics and UI surfaces to page through canonical bank transactions.`,context:`Used by Pocket Family Office dashboards, reconciliation workflows, and analytics data views.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`transactions`],stability:`experimental`},io:{input:o,output:s},policy:{auth:`user`}}),n({meta:{name:`openbanking.transactions.sync`,version:1,description:`Synchronise transactions for a bank account by calling the configured open banking provider.`,goal:`Ensure the canonical transaction ledger stays aligned with the external provider.`,context:`Triggered by scheduled workflows or on-demand actions when activity is expected on an account.`,owners:[`platform.finance`],tags:[`open-banking`,`powens`,`transactions`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`},telemetry:{success:{event:{name:a.transactionsSynced},properties:({input:e,output:t})=>{let n=e,r=t;return{tenantId:n?.tenantId,accountId:n?.accountId,synced:r?.synced,failed:r?.failed,earliestSyncedAt:r?.earliestSyncedAt,latestSyncedAt:r?.latestSyncedAt}}},failure:{event:{name:a.transactionsSyncFailed},properties:({input:e,error:t})=>{let n=e;return{tenantId:n?.tenantId,accountId:n?.accountId,error:t instanceof Error?t.message:String(t??`unknown`)}}}}});
2
- //# sourceMappingURL=transactions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transactions.js","names":[],"sources":["../../../../../../../contracts/src/integrations/openbanking/contracts/transactions.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\nimport {\n defineCommand,\n defineQuery,\n type ContractSpec,\n} from '../../../spec';\nimport type { SpecRegistry } from '../../../registry';\nimport { BankTransactionRecord } from '../models';\nimport { OPENBANKING_TELEMETRY_EVENTS } from '../telemetry';\n\nconst OpenBankingListTransactionsInput = new SchemaModel({\n name: 'OpenBankingListTransactionsInput',\n description: 'Parameters for listing bank transactions from the canonical ledger.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n from: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n to: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n cursor: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n pageSize: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n direction: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n minimumAmount: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n maximumAmount: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n category: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nconst OpenBankingListTransactionsOutput = new SchemaModel({\n name: 'OpenBankingListTransactionsOutput',\n description: 'Paginated list of transactions for a bank account.',\n fields: {\n transactions: {\n type: BankTransactionRecord,\n isOptional: false,\n isArray: true,\n },\n nextCursor: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n hasMore: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n },\n});\n\nconst OpenBankingSyncTransactionsInput = new SchemaModel({\n name: 'OpenBankingSyncTransactionsInput',\n description:\n 'Command payload to synchronise transactions from the open banking provider into the canonical ledger.',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n from: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n to: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: true },\n includePending: { type: ScalarTypeEnum.Boolean(), isOptional: true },\n backfillDays: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n },\n});\n\nconst OpenBankingSyncTransactionsOutput = new SchemaModel({\n name: 'OpenBankingSyncTransactionsOutput',\n description: 'Result of a transaction synchronisation run.',\n fields: {\n synced: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n failed: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n earliestSyncedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n latestSyncedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n nextSinceToken: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n errors: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: true,\n },\n },\n});\n\nexport const OpenBankingListTransactions = defineQuery({\n meta: {\n name: 'openbanking.transactions.list',\n version: 1,\n description: 'List bank transactions that have been normalised into the canonical ledger.',\n goal: 'Allow downstream analytics and UI surfaces to page through canonical bank transactions.',\n context:\n 'Used by Pocket Family Office dashboards, reconciliation workflows, and analytics data views.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'transactions'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingListTransactionsInput,\n output: OpenBankingListTransactionsOutput,\n },\n policy: {\n auth: 'user',\n },\n});\n\nexport const OpenBankingSyncTransactions = defineCommand({\n meta: {\n name: 'openbanking.transactions.sync',\n version: 1,\n description:\n 'Synchronise transactions for a bank account by calling the configured open banking provider.',\n goal: 'Ensure the canonical transaction ledger stays aligned with the external provider.',\n context:\n 'Triggered by scheduled workflows or on-demand actions when activity is expected on an account.',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'transactions'],\n stability: 'experimental',\n },\n io: {\n input: OpenBankingSyncTransactionsInput,\n output: OpenBankingSyncTransactionsOutput,\n },\n policy: {\n auth: 'admin',\n },\n telemetry: {\n success: {\n event: { name: OPENBANKING_TELEMETRY_EVENTS.transactionsSynced },\n properties: ({ input, output }) => {\n const payload = input as {\n tenantId?: string;\n accountId?: string;\n };\n const result = output as {\n synced?: number;\n failed?: number;\n earliestSyncedAt?: string;\n latestSyncedAt?: string;\n } | null;\n return {\n tenantId: payload?.tenantId,\n accountId: payload?.accountId,\n synced: result?.synced,\n failed: result?.failed,\n earliestSyncedAt: result?.earliestSyncedAt,\n latestSyncedAt: result?.latestSyncedAt,\n };\n },\n },\n failure: {\n event: { name: OPENBANKING_TELEMETRY_EVENTS.transactionsSyncFailed },\n properties: ({ input, error }) => {\n const payload = input as {\n tenantId?: string;\n accountId?: string;\n };\n return {\n tenantId: payload?.tenantId,\n accountId: payload?.accountId,\n error: error instanceof Error ? error.message : String(error ?? 'unknown'),\n };\n },\n },\n },\n});\n\nexport const openBankingTransactionContracts: Record<\n string,\n ContractSpec<any, any>\n> = {\n OpenBankingListTransactions,\n OpenBankingSyncTransactions,\n};\n\nexport function registerOpenBankingTransactionContracts(\n registry: SpecRegistry\n): SpecRegistry {\n return registry\n .register(OpenBankingListTransactions)\n .register(OpenBankingSyncTransactions);\n}\n\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{ScalarTypeEnum as e}from"../../../../schema/src/ScalarTypeEnum.js";import{SchemaModel as t}from"../../../../schema/src/SchemaModel.js";import"../../../../schema/src/index.js";const n=new t({name:`BankAccountRecord`,description:`Canonical representation of a bank account synced from an open banking provider.`,fields:{id:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},userId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!1},externalId:{type:e.NonEmptyString(),isOptional:!1},institutionId:{type:e.NonEmptyString(),isOptional:!1},institutionName:{type:e.NonEmptyString(),isOptional:!1},institutionLogoUrl:{type:e.URL(),isOptional:!0},iban:{type:e.String_unsecure(),isOptional:!0},bic:{type:e.String_unsecure(),isOptional:!0},accountType:{type:e.NonEmptyString(),isOptional:!1},currency:{type:e.Currency(),isOptional:!1},displayName:{type:e.NonEmptyString(),isOptional:!1},accountNumberMasked:{type:e.String_unsecure(),isOptional:!0},productCode:{type:e.String_unsecure(),isOptional:!0},balance:{type:e.Float_unsecure(),isOptional:!0},availableBalance:{type:e.Float_unsecure(),isOptional:!0},lastSyncedAt:{type:e.DateTime(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1},metadata:{type:e.JSONObject(),isOptional:!0}}}),r=new t({name:`BankTransactionRecord`,description:`Canonical transaction entry mapped from Powens into the open banking ledger.`,fields:{id:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!1},externalId:{type:e.NonEmptyString(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.Currency(),isOptional:!1},date:{type:e.DateTime(),isOptional:!1},bookingDate:{type:e.DateTime(),isOptional:!0},valueDate:{type:e.DateTime(),isOptional:!0},description:{type:e.String_unsecure(),isOptional:!0},counterpartyName:{type:e.String_unsecure(),isOptional:!0},counterpartyAccount:{type:e.String_unsecure(),isOptional:!0},merchantCategoryCode:{type:e.String_unsecure(),isOptional:!0},rawCategory:{type:e.String_unsecure(),isOptional:!0},standardizedCategory:{type:e.String_unsecure(),isOptional:!0},transactionType:{type:e.NonEmptyString(),isOptional:!1},status:{type:e.NonEmptyString(),isOptional:!1},runningBalance:{type:e.Float_unsecure(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),i=new t({name:`AccountBalanceRecord`,description:`Canonical balance snapshot computed from Powens balance payloads.`,fields:{id:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!1},balanceType:{type:e.NonEmptyString(),isOptional:!1},currentBalance:{type:e.Float_unsecure(),isOptional:!1},availableBalance:{type:e.Float_unsecure(),isOptional:!0},currency:{type:e.Currency(),isOptional:!1},lastUpdatedAt:{type:e.DateTime(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},metadata:{type:e.JSONObject(),isOptional:!0}}});export{i as AccountBalanceRecord,n as BankAccountRecord,r as BankTransactionRecord};
2
- //# sourceMappingURL=models.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.js","names":[],"sources":["../../../../../../contracts/src/integrations/openbanking/models.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\n\nexport const BankAccountRecord = new SchemaModel({\n name: 'BankAccountRecord',\n description:\n 'Canonical representation of a bank account synced from an open banking provider.',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n userId: { type: ScalarTypeEnum.ID(), isOptional: false },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n externalId: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n institutionId: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n institutionName: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n institutionLogoUrl: { type: ScalarTypeEnum.URL(), isOptional: true },\n iban: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n bic: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n accountType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n currency: { type: ScalarTypeEnum.Currency(), isOptional: false },\n displayName: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n accountNumberMasked: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n productCode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n balance: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n availableBalance: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n lastSyncedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n metadata: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n },\n});\n\nexport const BankTransactionRecord = new SchemaModel({\n name: 'BankTransactionRecord',\n description:\n 'Canonical transaction entry mapped from Powens into the open banking ledger.',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n externalId: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n amount: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },\n currency: { type: ScalarTypeEnum.Currency(), isOptional: false },\n date: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n bookingDate: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n valueDate: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n counterpartyName: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n counterpartyAccount: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n merchantCategoryCode: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n rawCategory: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n standardizedCategory: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: true,\n },\n transactionType: {\n type: ScalarTypeEnum.NonEmptyString(),\n isOptional: false,\n },\n status: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n runningBalance: { type: ScalarTypeEnum.Float_unsecure(), isOptional: true },\n metadata: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\nexport const AccountBalanceRecord = new SchemaModel({\n name: 'AccountBalanceRecord',\n description:\n 'Canonical balance snapshot computed from Powens balance payloads.',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n accountId: { type: ScalarTypeEnum.ID(), isOptional: false },\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n connectionId: { type: ScalarTypeEnum.ID(), isOptional: false },\n balanceType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n currentBalance: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },\n availableBalance: {\n type: ScalarTypeEnum.Float_unsecure(),\n isOptional: true,\n },\n currency: { type: ScalarTypeEnum.Currency(), isOptional: false },\n lastUpdatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n metadata: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n },\n});\n\n\n\n\n\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","names":[],"sources":["../../../../../../contracts/src/integrations/openbanking/telemetry.ts"],"sourcesContent":["export const OPENBANKING_PII_FIELDS = [\n 'iban',\n 'bic',\n 'accountNumberMasked',\n 'accountNumber',\n 'counterpartyName',\n 'counterpartyAccount',\n 'description',\n 'merchantName',\n 'merchantCategoryCode',\n 'reference',\n] as const;\n\nexport const OPENBANKING_TELEMETRY_EVENTS = {\n accountsSynced: 'openbanking.accounts.synced',\n accountsSyncFailed: 'openbanking.accounts.sync_failed',\n transactionsSynced: 'openbanking.transactions.synced',\n transactionsSyncFailed: 'openbanking.transactions.sync_failed',\n balancesRefreshed: 'openbanking.balances.refreshed',\n balancesRefreshFailed: 'openbanking.balances.refresh_failed',\n overviewGenerated: 'openbanking.overview.generated',\n} as const;\n\nexport type OpenBankingTelemetryEvent =\n (typeof OPENBANKING_TELEMETRY_EVENTS)[keyof typeof OPENBANKING_TELEMETRY_EVENTS];\n\nexport function redactOpenBankingTelemetryPayload<\n T extends Record<string, unknown>\n>(payload: T): T {\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(payload)) {\n if (OPENBANKING_PII_FIELDS.includes(key as (typeof OPENBANKING_PII_FIELDS)[number])) {\n redacted[key] = maskValue(value);\n } else if (Array.isArray(value)) {\n redacted[key] = value.map((item) =>\n typeof item === 'object' && item !== null\n ? redactOpenBankingTelemetryPayload(item as Record<string, unknown>)\n : item\n );\n } else if (typeof value === 'object' && value !== null) {\n redacted[key] = redactOpenBankingTelemetryPayload(\n value as Record<string, unknown>\n );\n } else {\n redacted[key] = value;\n }\n }\n return redacted as T;\n}\n\nfunction maskValue(value: unknown): string {\n if (value == null) return '';\n const str = String(value);\n if (str.length <= 4) return '*'.repeat(str.length);\n return `${'*'.repeat(Math.max(str.length - 4, 0))}${str.slice(-4)}`;\n}\n\n\n\n\n"],"mappings":"AAaA,MAAa,EAA+B,CAC1C,eAAgB,8BAChB,mBAAoB,mCACpB,mBAAoB,kCACpB,uBAAwB,uCACxB,kBAAmB,iCACnB,sBAAuB,sCACvB,kBAAmB,iCACpB"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Beta;
2
- //# sourceMappingURL=elevenlabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elevenlabs.js","names":["elevenLabsIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/elevenlabs.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const elevenLabsIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'ai-voice.elevenlabs',\n version: 1,\n category: 'ai-voice',\n displayName: 'ElevenLabs Voice',\n title: 'ElevenLabs Text-to-Speech',\n description:\n 'ElevenLabs integration for neural voice synthesis and voice catalog access.',\n domain: 'ai',\n owners: ['platform.ai'],\n tags: ['voice', 'tts'],\n stability: StabilityEnum.Beta,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [{ key: 'ai.voice.synthesis', version: 1 }],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n defaultVoiceId: {\n type: 'string',\n description: 'Optional default voice identifier for synthesis requests.',\n },\n },\n },\n example: {\n defaultVoiceId: 'pNInz6obpgDQGcFmaJgB',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['apiKey'],\n properties: {\n apiKey: {\n type: 'string',\n description: 'ElevenLabs API key with text-to-speech permissions.',\n },\n },\n },\n example: {\n apiKey: 'eleven-***',\n },\n },\n healthCheck: {\n method: 'custom',\n timeoutMs: 4000,\n },\n docsUrl: 'https://elevenlabs.io/docs/api-reference/text-to-speech',\n constraints: {\n rateLimit: {\n rpm: 120,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Create an ElevenLabs API key and ensure the desired voices are accessible to the key scope.',\n },\n};\n\nexport function registerElevenLabsIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(elevenLabsIntegrationSpec);\n}\n\n\n"],"mappings":"mDAee,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Beta;
2
- //# sourceMappingURL=gcs-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gcs-storage.js","names":["gcsStorageIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/gcs-storage.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const gcsStorageIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'storage.gcs',\n version: 1,\n category: 'storage',\n displayName: 'Google Cloud Storage',\n title: 'Google Cloud Storage Buckets',\n description:\n 'Google Cloud Storage integration for object storage and retrieval.',\n domain: 'infrastructure',\n owners: ['platform.infrastructure'],\n tags: ['storage', 'gcs', 'google-cloud'],\n stability: StabilityEnum.Beta,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [{ key: 'storage.objects', version: 1 }],\n },\n configSchema: {\n schema: {\n type: 'object',\n required: ['bucket'],\n properties: {\n bucket: {\n type: 'string',\n description: 'Primary bucket name used for storing objects.',\n },\n prefix: {\n type: 'string',\n description: 'Optional prefix applied to object keys.',\n },\n },\n },\n example: {\n bucket: 'pfo-tenant-assets',\n prefix: 'documents/',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description:\n 'Service account type field from Google credentials JSON (if provided).',\n },\n client_email: { type: 'string' },\n private_key: { type: 'string' },\n project_id: { type: 'string' },\n },\n },\n example: {\n type: 'service_account',\n client_email: 'svc-account@example.iam.gserviceaccount.com',\n private_key: '-----BEGIN PRIVATE KEY-----...',\n project_id: 'example-project',\n },\n },\n healthCheck: {\n method: 'ping',\n timeoutMs: 4000,\n },\n docsUrl: 'https://cloud.google.com/storage/docs/apis',\n constraints: {\n quotas: {\n storageGb: 5120,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Create a Google Cloud service account with Storage Object Admin role and upload the JSON credentials to the secret store.',\n },\n};\n\nexport function registerGcsStorageIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(gcsStorageIntegrationSpec);\n}\n\n\n"],"mappings":"mDAee,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Beta;
2
- //# sourceMappingURL=gmail.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gmail.js","names":["gmailIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/gmail.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const gmailIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'email.gmail',\n version: 1,\n category: 'email',\n displayName: 'Gmail API',\n title: 'Google Gmail API',\n description:\n 'Gmail integration supporting inbound thread ingestion and outbound transactional email.',\n domain: 'communications',\n owners: ['platform.messaging'],\n tags: ['email', 'gmail'],\n stability: StabilityEnum.Beta,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [\n { key: 'email.inbound', version: 1 },\n { key: 'email.outbound', version: 1 },\n ],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n labelIds: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional list of label IDs to scope inbound sync.',\n },\n includeSpamTrash: {\n type: 'boolean',\n description: 'Whether to include spam or trash messages during sync.',\n },\n },\n },\n example: {\n labelIds: ['INBOX'],\n includeSpamTrash: false,\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['clientId', 'clientSecret', 'refreshToken'],\n properties: {\n clientId: {\n type: 'string',\n description: 'OAuth client ID for the Google Cloud project.',\n },\n clientSecret: {\n type: 'string',\n description: 'OAuth client secret for the Google Cloud project.',\n },\n refreshToken: {\n type: 'string',\n description: 'OAuth refresh token for delegated Gmail access.',\n },\n redirectUri: {\n type: 'string',\n description: 'Optional redirect URI used when issuing the refresh token.',\n },\n },\n },\n example: {\n clientId: 'xxx.apps.googleusercontent.com',\n clientSecret: 'secret',\n refreshToken: 'refresh-token',\n },\n },\n healthCheck: {\n method: 'custom',\n timeoutMs: 4000,\n },\n docsUrl: 'https://developers.google.com/gmail/api',\n constraints: {\n rateLimit: {\n rpm: 600,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Create an OAuth consent screen and credentials within Google Cloud Console, then authorize the Gmail scopes and store the resulting refresh token.',\n },\n};\n\nexport function registerGmailIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(gmailIntegrationSpec);\n}\n\n\n"],"mappings":"mDAee,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Beta;
2
- //# sourceMappingURL=google-calendar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-calendar.js","names":["googleCalendarIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/google-calendar.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const googleCalendarIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'calendar.google',\n version: 1,\n category: 'calendar',\n displayName: 'Google Calendar',\n title: 'Google Calendar API',\n description:\n 'Google Calendar integration for event creation, updates, and scheduling automations.',\n domain: 'productivity',\n owners: ['platform.messaging'],\n tags: ['calendar', 'google'],\n stability: StabilityEnum.Beta,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [{ key: 'calendar.events', version: 1 }],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n calendarId: {\n type: 'string',\n description: 'Default calendar identifier (defaults to primary).',\n },\n },\n },\n example: {\n calendarId: 'primary',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['clientEmail', 'privateKey'],\n properties: {\n clientEmail: {\n type: 'string',\n description: 'Service account client email.',\n },\n privateKey: {\n type: 'string',\n description: 'Service account private key.',\n },\n projectId: {\n type: 'string',\n description: 'Google Cloud project ID.',\n },\n },\n },\n example: {\n clientEmail: 'svc-calendar@example.iam.gserviceaccount.com',\n privateKey: '-----BEGIN PRIVATE KEY-----...',\n projectId: 'calendar-project',\n },\n },\n healthCheck: {\n method: 'custom',\n timeoutMs: 4000,\n },\n docsUrl: 'https://developers.google.com/calendar/api',\n constraints: {},\n byokSetup: {\n setupInstructions:\n 'Create a Google service account with Calendar access and share the target calendars with the service account email.',\n },\n};\n\nexport function registerGoogleCalendarIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(googleCalendarIntegrationSpec);\n}\n\n\n"],"mappings":"mDAee,EAAc"}
@@ -1 +0,0 @@
1
- import"./stripe.js";import"./postmark.js";import"./qdrant.js";import"./mistral.js";import"./elevenlabs.js";import"./gmail.js";import"./google-calendar.js";import"./twilio-sms.js";import"./gcs-storage.js";import"./powens.js";import"./impls/index.js";
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Experimental;
2
- //# sourceMappingURL=mistral.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mistral.js","names":["mistralIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/mistral.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const mistralIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'ai-llm.mistral',\n version: 1,\n category: 'ai-llm',\n displayName: 'Mistral AI',\n title: 'Mistral Large Language Model',\n description:\n 'Mistral integration providing chat completions and embedding generation.',\n domain: 'ai',\n owners: ['platform.ai'],\n tags: ['ai', 'llm', 'embeddings'],\n stability: StabilityEnum.Experimental,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [\n { key: 'ai.chat', version: 1 },\n { key: 'ai.embeddings', version: 1 },\n ],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description: 'Default chat completion model (e.g., mistral-large-latest).',\n },\n embeddingModel: {\n type: 'string',\n description: 'Embedding model identifier.',\n },\n },\n },\n example: {\n model: 'mistral-large-latest',\n embeddingModel: 'mistral-embed',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['apiKey'],\n properties: {\n apiKey: {\n type: 'string',\n description: 'Mistral API key with access to chat and embeddings endpoints.',\n },\n },\n },\n example: {\n apiKey: 'mistral-***',\n },\n },\n healthCheck: {\n method: 'custom',\n timeoutMs: 5000,\n },\n docsUrl: 'https://docs.mistral.ai/platform/endpoints',\n constraints: {\n rateLimit: {\n rpm: 600,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Generate an API key within the Mistral console and ensure the selected models are enabled for the account.',\n },\n};\n\nexport function registerMistralIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(mistralIntegrationSpec);\n}\n\n\n"],"mappings":"mDAee,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Stable;
2
- //# sourceMappingURL=postmark.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postmark.js","names":["postmarkIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/postmark.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const postmarkIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'email.postmark',\n version: 1,\n category: 'email',\n displayName: 'Postmark',\n title: 'Postmark Transactional Email',\n description: 'Postmark integration for transactional email delivery.',\n domain: 'communications',\n owners: ['platform.messaging'],\n tags: ['email', 'transactional'],\n stability: StabilityEnum.Stable,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [{ key: 'email.transactional', version: 1 }],\n requires: [\n {\n key: 'platform.webhooks',\n optional: true,\n reason: 'Optional for inbound bounce handling',\n },\n ],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n messageStream: {\n type: 'string',\n description: 'Optional message stream identifier (e.g., transactional).',\n },\n fromEmail: {\n type: 'string',\n description: 'Default From address used for outbound messages.',\n },\n },\n },\n example: {\n messageStream: 'outbound',\n fromEmail: 'notifications@example.com',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['serverToken'],\n properties: {\n serverToken: {\n type: 'string',\n description: 'Server token for the Postmark account.',\n },\n },\n },\n example: {\n serverToken: 'server-***',\n },\n },\n healthCheck: {\n method: 'ping',\n timeoutMs: 3000,\n },\n docsUrl: 'https://postmarkapp.com/developer',\n constraints: {\n rateLimit: {\n rpm: 500,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Create a Postmark server token with outbound send permissions and configure allowed from addresses.',\n },\n};\n\nexport function registerPostmarkIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(postmarkIntegrationSpec);\n}\n\n"],"mappings":"mDAce,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Experimental;
2
- //# sourceMappingURL=powens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"powens.js","names":["powensIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/powens.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec } from '../spec';\nimport type { IntegrationSpecRegistry } from '../spec';\n\nexport const powensIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'openbanking.powens',\n version: 1,\n category: 'open-banking',\n displayName: 'Powens Open Banking',\n title: 'Powens Open Banking (Read)',\n description:\n 'Read-only Open Banking integration powered by Powens, exposing accounts, transactions, and balances.',\n domain: 'finance',\n owners: ['platform.finance'],\n tags: ['open-banking', 'powens', 'finance'],\n stability: StabilityEnum.Experimental,\n },\n supportedModes: ['byok'],\n capabilities: {\n provides: [\n { key: 'openbanking.accounts.read', version: 1 },\n { key: 'openbanking.transactions.read', version: 1 },\n { key: 'openbanking.balances.read', version: 1 },\n ],\n },\n configSchema: {\n schema: {\n type: 'object',\n required: ['environment'],\n properties: {\n environment: {\n type: 'string',\n enum: ['sandbox', 'production'],\n description:\n 'Powens environment to target. Sandbox uses Powens test API base URL, production uses live endpoints.',\n },\n baseUrl: {\n type: 'string',\n description:\n 'Optional override for the Powens API base URL. Defaults to Powens environment defaults.',\n },\n region: {\n type: 'string',\n description:\n 'Optional Powens region identifier when targeting a specific data residency cluster.',\n },\n pollingIntervalMs: {\n type: 'number',\n description:\n 'Optional custom polling interval in milliseconds for background sync jobs (defaults to platform standard).',\n },\n },\n },\n example: {\n environment: 'sandbox',\n baseUrl: 'https://api-sandbox.powens.com/v2',\n region: 'eu-west-1',\n pollingIntervalMs: 300000,\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['clientId', 'clientSecret'],\n properties: {\n clientId: {\n type: 'string',\n description:\n 'Powens OAuth client identifier obtained from the Powens Console (BYOK project).',\n },\n clientSecret: {\n type: 'string',\n description:\n 'Powens OAuth client secret used to exchange for access tokens.',\n },\n apiKey: {\n type: 'string',\n description:\n 'Optional Powens API key (if the tenant project exposes a dedicated API token).',\n },\n webhookSecret: {\n type: 'string',\n description:\n 'Optional webhook signing secret used to verify Powens webhook payloads.',\n },\n },\n },\n example: {\n clientId: 'powens-client-id',\n clientSecret: 'powens-client-secret',\n apiKey: 'powens-api-key',\n webhookSecret: 'powens-webhook-secret',\n },\n },\n healthCheck: {\n method: 'ping',\n timeoutMs: 8000,\n },\n docsUrl: 'https://docs.powens.com/',\n constraints: {\n rateLimit: {\n rph: 10000,\n rpm: 600,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Create a Powens BYOK project, generate OAuth credentials, and optionally configure webhook delivery for account/transaction updates.',\n requiredScopes: ['accounts:read', 'transactions:read', 'balances:read'],\n },\n};\n\nexport function registerPowensIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(powensIntegrationSpec);\n}\n\n\n\n\n"],"mappings":"mDAgBe,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Experimental;
2
- //# sourceMappingURL=qdrant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qdrant.js","names":["qdrantIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/qdrant.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const qdrantIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'vectordb.qdrant',\n version: 1,\n category: 'vector-db',\n displayName: 'Qdrant',\n title: 'Qdrant Vector Database',\n description: 'Qdrant integration for vector search and embeddings storage.',\n domain: 'ai',\n owners: ['platform.ai'],\n tags: ['vector-db', 'search'],\n stability: StabilityEnum.Experimental,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [\n { key: 'vector-db.search', version: 1 },\n { key: 'vector-db.storage', version: 1 },\n ],\n requires: [\n {\n key: 'ai.embeddings',\n optional: true,\n reason: 'Required if vectors are generated via hosted embedding services',\n },\n ],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n apiUrl: {\n type: 'string',\n description: 'Base URL for the Qdrant instance (e.g., https://qdrant.example.com).',\n },\n collectionPrefix: {\n type: 'string',\n description: 'Prefix applied to all collection names for this tenant.',\n },\n },\n },\n example: {\n apiUrl: 'https://qdrant.example.com',\n collectionPrefix: 'tenant_',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n properties: {\n apiKey: {\n type: 'string',\n description: 'API key or token when authentication is enabled.',\n },\n },\n },\n example: {\n apiKey: 'qdrant-api-key',\n },\n },\n healthCheck: {\n method: 'ping',\n timeoutMs: 4000,\n },\n docsUrl: 'https://qdrant.tech/documentation/quick-start/',\n constraints: {\n quotas: {\n collections: 100,\n pointsPerCollection: 1_000_000,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Provide the HTTPS endpoint of your Qdrant cluster and generate an API key with read/write access to the collections that will be managed.',\n },\n};\n\nexport function registerQdrantIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(qdrantIntegrationSpec);\n}\n\n"],"mappings":"mDAce,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Stable;
2
- //# sourceMappingURL=stripe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stripe.js","names":["stripeIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/stripe.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec } from '../spec';\nimport type { IntegrationSpecRegistry } from '../spec';\n\nexport const stripeIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'payments.stripe',\n version: 1,\n category: 'payments',\n displayName: 'Stripe',\n title: 'Stripe Payments',\n description:\n 'Stripe integration for payment processing, charges, and payouts.',\n domain: 'payments',\n owners: ['platform.payments'],\n tags: ['payments', 'psp'],\n stability: StabilityEnum.Stable,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [{ key: 'payments.psp', version: 1 }],\n requires: [\n {\n key: 'platform.webhooks',\n optional: true,\n reason: 'Recommended for reliable event ingestion',\n },\n ],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n accountId: {\n type: 'string',\n description: 'Connected account ID when using Stripe Connect (BYOK).',\n },\n region: {\n type: 'string',\n description: 'Optional Stripe region or data residency hint.',\n },\n },\n },\n example: {\n accountId: 'acct_123',\n region: 'us-east-1',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['apiKey', 'webhookSecret'],\n properties: {\n apiKey: {\n type: 'string',\n description: 'Stripe secret API key (sk_live_... or sk_test_...).',\n },\n webhookSecret: {\n type: 'string',\n description: 'Signing secret for webhook verification.',\n },\n },\n },\n example: {\n apiKey: 'sk_live_***',\n webhookSecret: 'whsec_***',\n },\n },\n healthCheck: {\n method: 'ping',\n timeoutMs: 5000,\n },\n docsUrl: 'https://stripe.com/docs/api',\n constraints: {\n rateLimit: {\n rpm: 1000,\n rph: 20000,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Create a restricted Stripe API key with write access to Charges and provide a webhook signing secret.',\n requiredScopes: ['charges:write', 'customers:read'],\n },\n};\n\nexport function registerStripeIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(stripeIntegrationSpec);\n}\n\n"],"mappings":"mDAgBe,EAAc"}
@@ -1,2 +0,0 @@
1
- import{StabilityEnum as e}from"../../ownership.js";e.Stable;
2
- //# sourceMappingURL=twilio-sms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"twilio-sms.js","names":["twilioSmsIntegrationSpec: IntegrationSpec"],"sources":["../../../../../../contracts/src/integrations/providers/twilio-sms.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { IntegrationSpec, IntegrationSpecRegistry } from '../spec';\n\nexport const twilioSmsIntegrationSpec: IntegrationSpec = {\n meta: {\n key: 'sms.twilio',\n version: 1,\n category: 'sms',\n displayName: 'Twilio SMS',\n title: 'Twilio Messaging',\n description:\n 'Twilio SMS integration for transactional and notification messaging.',\n domain: 'communications',\n owners: ['platform.messaging'],\n tags: ['sms', 'messaging'],\n stability: StabilityEnum.Stable,\n },\n supportedModes: ['managed', 'byok'],\n capabilities: {\n provides: [{ key: 'sms.outbound', version: 1 }],\n },\n configSchema: {\n schema: {\n type: 'object',\n properties: {\n fromNumber: {\n type: 'string',\n description: 'Default Twilio phone number used as sender.',\n },\n },\n },\n example: {\n fromNumber: '+15551234567',\n },\n },\n secretSchema: {\n schema: {\n type: 'object',\n required: ['accountSid', 'authToken'],\n properties: {\n accountSid: {\n type: 'string',\n description: 'Twilio Account SID.',\n },\n authToken: {\n type: 'string',\n description: 'Twilio Auth Token.',\n },\n },\n },\n example: {\n accountSid: 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n authToken: 'auth-token',\n },\n },\n healthCheck: {\n method: 'custom',\n timeoutMs: 3000,\n },\n docsUrl: 'https://www.twilio.com/docs/sms/api',\n constraints: {\n rateLimit: {\n rpm: 200,\n },\n },\n byokSetup: {\n setupInstructions:\n 'Provide a Twilio account SID, auth token, and verify the outbound sending numbers used by the integration.',\n },\n};\n\nexport function registerTwilioSmsIntegration(\n registry: IntegrationSpecRegistry\n): IntegrationSpecRegistry {\n return registry.register(twilioSmsIntegrationSpec);\n}\n\n\n"],"mappings":"mDAee,EAAc"}
@@ -1,2 +0,0 @@
1
- import{ScalarTypeEnum as e}from"../../../schema/src/ScalarTypeEnum.js";import{SchemaModel as t}from"../../../schema/src/SchemaModel.js";import"../../../schema/src/index.js";import{defineCommand as n,defineQuery as r}from"../spec.js";const i=new t({name:`KnowledgeSyncSchedule`,fields:{enabled:{type:e.Boolean(),isOptional:!1},cron:{type:e.String_unsecure(),isOptional:!0},intervalMs:{type:e.Int_unsecure(),isOptional:!0}}}),a=new t({name:`KnowledgeSourceRecord`,fields:{id:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},spaceKey:{type:e.NonEmptyString(),isOptional:!1},spaceVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},sourceType:{type:e.String_unsecure(),isOptional:!1},syncSchedule:{type:i,isOptional:!0},lastSyncStatus:{type:e.String_unsecure(),isOptional:!0},lastSyncAt:{type:e.DateTime(),isOptional:!0},itemsProcessed:{type:e.Int_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!0},updatedAt:{type:e.DateTime(),isOptional:!0}}}),o=new t({name:`CreateKnowledgeSourceInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},spaceKey:{type:e.NonEmptyString(),isOptional:!1},spaceVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},sourceType:{type:e.NonEmptyString(),isOptional:!1},config:{type:e.JSONObject(),isOptional:!1},syncSchedule:{type:i,isOptional:!0}}}),s=new t({name:`UpdateKnowledgeSourceInput`,fields:{sourceId:{type:e.ID(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!0},config:{type:e.JSONObject(),isOptional:!0},syncSchedule:{type:i,isOptional:!0}}}),c=new t({name:`DeleteKnowledgeSourceInput`,fields:{sourceId:{type:e.ID(),isOptional:!1}}}),l=new t({name:`DeleteKnowledgeSourceOutput`,fields:{success:{type:e.Boolean(),isOptional:!1}}}),u=new t({name:`ListKnowledgeSourcesInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},spaceKey:{type:e.NonEmptyString(),isOptional:!0}}}),d=new t({name:`ListKnowledgeSourcesOutput`,fields:{sources:{type:a,isOptional:!1,isArray:!0}}}),f=new t({name:`TriggerKnowledgeSyncInput`,fields:{sourceId:{type:e.ID(),isOptional:!1}}}),p=new t({name:`TriggerKnowledgeSyncOutput`,fields:{success:{type:e.Boolean(),isOptional:!1},itemsProcessed:{type:e.Int_unsecure(),isOptional:!0},error:{type:e.String_unsecure(),isOptional:!0}}});n({meta:{name:`knowledge.source.create`,version:1,description:`Create a knowledge source binding for a tenant.`,goal:`Onboard a new knowledge ingestion source such as Notion or uploads.`,context:`Used by Ops and App Studio to configure knowledge ingestion per tenant and space.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:o,output:a},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),n({meta:{name:`knowledge.source.update`,version:1,description:`Update metadata or configuration for a knowledge source.`,goal:`Allow rotation of credentials, sync schedules, and labels.`,context:`Supports editing how a tenant ingests knowledge (e.g., toggling sync cadence).`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:s,output:a},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),n({meta:{name:`knowledge.source.delete`,version:1,description:`Delete a knowledge source binding for a tenant.`,goal:`Remove obsolete or compromised knowledge ingestion paths.`,context:`Ensures ephemeral or external sources can be removed cleanly without leaving residual bindings.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),r({meta:{name:`knowledge.source.list`,version:1,description:`List knowledge sources configured for a tenant.`,goal:`Provide visibility into knowledge ingest configuration and schedules.`,context:`Used by App Studio and Ops flows to surface knowledge sources and their health.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:u,output:d},policy:{auth:`admin`,policies:[{name:`platform.knowledge.read`,version:1}]}}),n({meta:{name:`knowledge.source.triggerSync`,version:1,description:`Trigger an immediate sync for a knowledge source.`,goal:`Support manual or automated sync retries for knowledge ingestion.`,context:`Invoked by Ops tooling or monitors when knowledge content must be refreshed or reprocessed.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:f,output:p},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}});
2
- //# sourceMappingURL=contracts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contracts.js","names":[],"sources":["../../../../../contracts/src/knowledge/contracts.ts"],"sourcesContent":["import {\n ScalarTypeEnum,\n SchemaModel,\n} from '@lssm/lib.schema';\nimport {\n defineCommand,\n defineQuery,\n type ContractSpec,\n} from '../spec';\nimport type { SpecRegistry } from '../registry';\n\nconst KnowledgeSyncSchedule = new SchemaModel({\n name: 'KnowledgeSyncSchedule',\n fields: {\n enabled: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n cron: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n intervalMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n },\n});\n\nconst KnowledgeSourceRecord = new SchemaModel({\n name: 'KnowledgeSourceRecord',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n spaceKey: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n spaceVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n label: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n sourceType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n syncSchedule: { type: KnowledgeSyncSchedule, isOptional: true },\n lastSyncStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n lastSyncAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n itemsProcessed: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nconst CreateKnowledgeSourceInput = new SchemaModel({\n name: 'CreateKnowledgeSourceInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n spaceKey: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n spaceVersion: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },\n label: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n sourceType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },\n config: { type: ScalarTypeEnum.JSONObject(), isOptional: false },\n syncSchedule: { type: KnowledgeSyncSchedule, isOptional: true },\n },\n});\n\nconst UpdateKnowledgeSourceInput = new SchemaModel({\n name: 'UpdateKnowledgeSourceInput',\n fields: {\n sourceId: { type: ScalarTypeEnum.ID(), isOptional: false },\n label: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n config: { type: ScalarTypeEnum.JSONObject(), isOptional: true },\n syncSchedule: { type: KnowledgeSyncSchedule, isOptional: true },\n },\n});\n\nconst DeleteKnowledgeSourceInput = new SchemaModel({\n name: 'DeleteKnowledgeSourceInput',\n fields: {\n sourceId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nconst DeleteKnowledgeSourceOutput = new SchemaModel({\n name: 'DeleteKnowledgeSourceOutput',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n },\n});\n\nconst ListKnowledgeSourcesInput = new SchemaModel({\n name: 'ListKnowledgeSourcesInput',\n fields: {\n tenantId: { type: ScalarTypeEnum.ID(), isOptional: false },\n spaceKey: { type: ScalarTypeEnum.NonEmptyString(), isOptional: true },\n },\n});\n\nconst ListKnowledgeSourcesOutput = new SchemaModel({\n name: 'ListKnowledgeSourcesOutput',\n fields: {\n sources: {\n type: KnowledgeSourceRecord,\n isOptional: false,\n isArray: true,\n },\n },\n});\n\nconst TriggerKnowledgeSyncInput = new SchemaModel({\n name: 'TriggerKnowledgeSyncInput',\n fields: {\n sourceId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nconst TriggerKnowledgeSyncOutput = new SchemaModel({\n name: 'TriggerKnowledgeSyncOutput',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n itemsProcessed: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },\n error: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n },\n});\n\nexport const CreateKnowledgeSource = defineCommand({\n meta: {\n name: 'knowledge.source.create',\n version: 1,\n description: 'Create a knowledge source binding for a tenant.',\n goal: 'Onboard a new knowledge ingestion source such as Notion or uploads.',\n context:\n 'Used by Ops and App Studio to configure knowledge ingestion per tenant and space.',\n owners: ['platform.knowledge'],\n tags: ['knowledge', 'sources'],\n stability: 'experimental',\n },\n io: {\n input: CreateKnowledgeSourceInput,\n output: KnowledgeSourceRecord,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.knowledge.manage', version: 1 }],\n },\n});\n\nexport const UpdateKnowledgeSource = defineCommand({\n meta: {\n name: 'knowledge.source.update',\n version: 1,\n description: 'Update metadata or configuration for a knowledge source.',\n goal: 'Allow rotation of credentials, sync schedules, and labels.',\n context:\n 'Supports editing how a tenant ingests knowledge (e.g., toggling sync cadence).',\n owners: ['platform.knowledge'],\n tags: ['knowledge', 'sources'],\n stability: 'experimental',\n },\n io: {\n input: UpdateKnowledgeSourceInput,\n output: KnowledgeSourceRecord,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.knowledge.manage', version: 1 }],\n },\n});\n\nexport const DeleteKnowledgeSource = defineCommand({\n meta: {\n name: 'knowledge.source.delete',\n version: 1,\n description: 'Delete a knowledge source binding for a tenant.',\n goal: 'Remove obsolete or compromised knowledge ingestion paths.',\n context:\n 'Ensures ephemeral or external sources can be removed cleanly without leaving residual bindings.',\n owners: ['platform.knowledge'],\n tags: ['knowledge', 'sources'],\n stability: 'experimental',\n },\n io: {\n input: DeleteKnowledgeSourceInput,\n output: DeleteKnowledgeSourceOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.knowledge.manage', version: 1 }],\n },\n});\n\nexport const ListKnowledgeSources = defineQuery({\n meta: {\n name: 'knowledge.source.list',\n version: 1,\n description: 'List knowledge sources configured for a tenant.',\n goal: 'Provide visibility into knowledge ingest configuration and schedules.',\n context:\n 'Used by App Studio and Ops flows to surface knowledge sources and their health.',\n owners: ['platform.knowledge'],\n tags: ['knowledge', 'sources'],\n stability: 'experimental',\n },\n io: {\n input: ListKnowledgeSourcesInput,\n output: ListKnowledgeSourcesOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.knowledge.read', version: 1 }],\n },\n});\n\nexport const TriggerKnowledgeSourceSync = defineCommand({\n meta: {\n name: 'knowledge.source.triggerSync',\n version: 1,\n description: 'Trigger an immediate sync for a knowledge source.',\n goal: 'Support manual or automated sync retries for knowledge ingestion.',\n context:\n 'Invoked by Ops tooling or monitors when knowledge content must be refreshed or reprocessed.',\n owners: ['platform.knowledge'],\n tags: ['knowledge', 'sources'],\n stability: 'experimental',\n },\n io: {\n input: TriggerKnowledgeSyncInput,\n output: TriggerKnowledgeSyncOutput,\n },\n policy: {\n auth: 'admin',\n policies: [{ name: 'platform.knowledge.manage', version: 1 }],\n },\n});\n\nexport const knowledgeContracts: Record<string, ContractSpec<any, any>> = {\n CreateKnowledgeSource,\n UpdateKnowledgeSource,\n DeleteKnowledgeSource,\n ListKnowledgeSources,\n TriggerKnowledgeSourceSync,\n};\n\nexport function registerKnowledgeContracts(registry: SpecRegistry) {\n return registry\n .register(CreateKnowledgeSource)\n .register(UpdateKnowledgeSource)\n .register(DeleteKnowledgeSource)\n .register(ListKnowledgeSources)\n .register(TriggerKnowledgeSourceSync);\n}\n\n\n\n\n\n\n"],"mappings":"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"}