@lssm/lib.contracts-integrations 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (850) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +536 -0
  3. package/dist/contracts-integrations.feature.d.ts +1 -0
  4. package/dist/contracts-integrations.feature.js +2 -0
  5. package/dist/index.d.ts +25 -0
  6. package/dist/index.js +22 -0
  7. package/dist/integrations/advertising/index.d.ts +4 -0
  8. package/dist/integrations/advertising/index.js +2 -0
  9. package/dist/integrations/advertising/recipe-schema.d.ts +114 -0
  10. package/dist/integrations/advertising/recipe-schema.js +2 -0
  11. package/dist/integrations/advertising/recipe.d.ts +53 -0
  12. package/dist/integrations/advertising/recipe.js +1 -0
  13. package/dist/integrations/advertising/specs.d.ts +5 -0
  14. package/dist/integrations/advertising/specs.js +2 -0
  15. package/dist/integrations/advertising/types.d.ts +97 -0
  16. package/dist/integrations/advertising/types.js +2 -0
  17. package/dist/integrations/attio/events.d.ts +4 -0
  18. package/dist/integrations/attio/events.js +2 -0
  19. package/dist/integrations/attio/events.test.d.ts +1 -0
  20. package/dist/integrations/attio/index.d.ts +2 -0
  21. package/dist/integrations/attio/index.js +2 -0
  22. package/dist/integrations/attio/operations.d.ts +4 -0
  23. package/dist/integrations/attio/operations.js +2 -0
  24. package/dist/integrations/attio/operations.test.d.ts +1 -0
  25. package/dist/integrations/auth-helpers.d.ts +58 -0
  26. package/dist/integrations/auth-helpers.js +2 -0
  27. package/dist/integrations/auth-helpers.test.d.ts +1 -0
  28. package/dist/integrations/auth.d.ts +96 -0
  29. package/dist/integrations/auth.js +2 -0
  30. package/dist/integrations/auth.test.d.ts +1 -0
  31. package/dist/integrations/binding.d.ts +1 -0
  32. package/dist/integrations/binding.js +1 -0
  33. package/dist/integrations/byok.d.ts +75 -0
  34. package/dist/integrations/byok.js +2 -0
  35. package/dist/integrations/byok.test.d.ts +1 -0
  36. package/dist/integrations/catalog.d.ts +84 -0
  37. package/dist/integrations/catalog.js +2 -0
  38. package/dist/integrations/catalog.test.d.ts +1 -0
  39. package/dist/integrations/clay/events.d.ts +93 -0
  40. package/dist/integrations/clay/events.js +2 -0
  41. package/dist/integrations/clay/events.test.d.ts +1 -0
  42. package/dist/integrations/clay/index.d.ts +2 -0
  43. package/dist/integrations/clay/index.js +2 -0
  44. package/dist/integrations/clay/operations.d.ts +4 -0
  45. package/dist/integrations/clay/operations.js +2 -0
  46. package/dist/integrations/clay/operations.test.d.ts +1 -0
  47. package/dist/integrations/connection.d.ts +68 -0
  48. package/dist/integrations/connection.js +1 -0
  49. package/dist/integrations/credentials.d.ts +56 -0
  50. package/dist/integrations/credentials.js +2 -0
  51. package/dist/integrations/credentials.test.d.ts +1 -0
  52. package/dist/integrations/deployment-topology-model.d.ts +75 -0
  53. package/dist/integrations/deployment-topology-model.js +2 -0
  54. package/dist/integrations/deployment-topology-receipt.d.ts +8 -0
  55. package/dist/integrations/deployment-topology-receipt.js +2 -0
  56. package/dist/integrations/deployment-topology-validation.d.ts +5 -0
  57. package/dist/integrations/deployment-topology-validation.js +2 -0
  58. package/dist/integrations/deployment-topology.d.ts +3 -0
  59. package/dist/integrations/deployment-topology.js +2 -0
  60. package/dist/integrations/deployment-topology.test.d.ts +1 -0
  61. package/dist/integrations/docs/integrations.docblock.d.ts +2 -0
  62. package/dist/integrations/docs/integrations.docblock.js +101 -0
  63. package/dist/integrations/email-operations.d.ts +152 -0
  64. package/dist/integrations/email-operations.js +2 -0
  65. package/dist/integrations/gtm/capability-ledger.d.ts +48 -0
  66. package/dist/integrations/gtm/capability-ledger.fixture-helpers.d.ts +9 -0
  67. package/dist/integrations/gtm/capability-ledger.fixture-helpers.js +2 -0
  68. package/dist/integrations/gtm/capability-ledger.fixtures.d.ts +5 -0
  69. package/dist/integrations/gtm/capability-ledger.fixtures.js +2 -0
  70. package/dist/integrations/gtm/capability-ledger.js +2 -0
  71. package/dist/integrations/gtm/capability-ledger.test.d.ts +1 -0
  72. package/dist/integrations/gtm/hosted-mcp.d.ts +12 -0
  73. package/dist/integrations/gtm/hosted-mcp.js +2 -0
  74. package/dist/integrations/gtm/index.d.ts +5 -0
  75. package/dist/integrations/gtm/index.js +2 -0
  76. package/dist/integrations/gtm/inventory/attio.d.ts +2 -0
  77. package/dist/integrations/gtm/inventory/attio.js +2 -0
  78. package/dist/integrations/gtm/inventory/clay.d.ts +2 -0
  79. package/dist/integrations/gtm/inventory/clay.js +2 -0
  80. package/dist/integrations/gtm/inventory/fullenrich.d.ts +2 -0
  81. package/dist/integrations/gtm/inventory/fullenrich.js +2 -0
  82. package/dist/integrations/gtm/inventory/index.d.ts +4 -0
  83. package/dist/integrations/gtm/inventory/index.js +2 -0
  84. package/dist/integrations/gtm/inventory/inventory.test.d.ts +1 -0
  85. package/dist/integrations/gtm/inventory/types.d.ts +26 -0
  86. package/dist/integrations/gtm/inventory/types.js +1 -0
  87. package/dist/integrations/gtm/preflight.d.ts +20 -0
  88. package/dist/integrations/gtm/preflight.js +2 -0
  89. package/dist/integrations/gtm/preflight.test.d.ts +1 -0
  90. package/dist/integrations/gtm/schemas.d.ts +291 -0
  91. package/dist/integrations/gtm/schemas.js +2 -0
  92. package/dist/integrations/gtm/webhook-ingress.d.ts +37 -0
  93. package/dist/integrations/gtm/webhook-ingress.js +2 -0
  94. package/dist/integrations/gtm/webhook-ingress.test.d.ts +1 -0
  95. package/dist/integrations/health/contracts/activities.d.ts +162 -0
  96. package/dist/integrations/health/contracts/activities.js +2 -0
  97. package/dist/integrations/health/contracts/biometrics.d.ts +156 -0
  98. package/dist/integrations/health/contracts/biometrics.js +2 -0
  99. package/dist/integrations/health/contracts/contracts.test.d.ts +1 -0
  100. package/dist/integrations/health/contracts/index.d.ts +10 -0
  101. package/dist/integrations/health/contracts/index.js +2 -0
  102. package/dist/integrations/health/contracts/nutrition.d.ts +162 -0
  103. package/dist/integrations/health/contracts/nutrition.js +2 -0
  104. package/dist/integrations/health/contracts/sleep.d.ts +166 -0
  105. package/dist/integrations/health/contracts/sleep.js +2 -0
  106. package/dist/integrations/health/contracts/webhooks.d.ts +73 -0
  107. package/dist/integrations/health/contracts/webhooks.js +2 -0
  108. package/dist/integrations/health/contracts/workouts.d.ts +166 -0
  109. package/dist/integrations/health/contracts/workouts.js +2 -0
  110. package/dist/integrations/health/guards.d.ts +8 -0
  111. package/dist/integrations/health/guards.js +2 -0
  112. package/dist/integrations/health/guards.test.d.ts +1 -0
  113. package/dist/integrations/health/health.capability.d.ts +1 -0
  114. package/dist/integrations/health/health.capability.js +2 -0
  115. package/dist/integrations/health/health.feature.d.ts +1 -0
  116. package/dist/integrations/health/health.feature.js +2 -0
  117. package/dist/integrations/health/models.d.ts +361 -0
  118. package/dist/integrations/health/models.js +2 -0
  119. package/dist/integrations/health/telemetry.d.ts +17 -0
  120. package/dist/integrations/health/telemetry.js +2 -0
  121. package/dist/integrations/health/telemetry.test.d.ts +1 -0
  122. package/dist/integrations/health.d.ts +17 -0
  123. package/dist/integrations/health.js +2 -0
  124. package/dist/integrations/health.test.d.ts +1 -0
  125. package/dist/integrations/index.d.ts +30 -0
  126. package/dist/integrations/index.js +22 -0
  127. package/dist/integrations/integrations.capability.d.ts +1 -0
  128. package/dist/integrations/integrations.capability.js +2 -0
  129. package/dist/integrations/integrations.feature.d.ts +5 -0
  130. package/dist/integrations/integrations.feature.js +2 -0
  131. package/dist/integrations/linkedin/advertising.d.ts +52 -0
  132. package/dist/integrations/linkedin/advertising.js +1 -0
  133. package/dist/integrations/linkedin/analytics.d.ts +25 -0
  134. package/dist/integrations/linkedin/analytics.js +1 -0
  135. package/dist/integrations/linkedin/capabilities.d.ts +54 -0
  136. package/dist/integrations/linkedin/capabilities.js +2 -0
  137. package/dist/integrations/linkedin/capability-evaluation.test.d.ts +1 -0
  138. package/dist/integrations/linkedin/community.d.ts +77 -0
  139. package/dist/integrations/linkedin/community.js +1 -0
  140. package/dist/integrations/linkedin/credentials.d.ts +17 -0
  141. package/dist/integrations/linkedin/credentials.js +2 -0
  142. package/dist/integrations/linkedin/host.d.ts +53 -0
  143. package/dist/integrations/linkedin/host.js +2 -0
  144. package/dist/integrations/linkedin/host.test.d.ts +1 -0
  145. package/dist/integrations/linkedin/identity.d.ts +29 -0
  146. package/dist/integrations/linkedin/identity.js +1 -0
  147. package/dist/integrations/linkedin/index.d.ts +16 -0
  148. package/dist/integrations/linkedin/index.js +2 -0
  149. package/dist/integrations/linkedin/installation.d.ts +54 -0
  150. package/dist/integrations/linkedin/installation.js +2 -0
  151. package/dist/integrations/linkedin/linkedin.test.d.ts +1 -0
  152. package/dist/integrations/linkedin/media-job-state.d.ts +70 -0
  153. package/dist/integrations/linkedin/media-job-state.js +2 -0
  154. package/dist/integrations/linkedin/media-job.d.ts +88 -0
  155. package/dist/integrations/linkedin/media-job.js +2 -0
  156. package/dist/integrations/linkedin/media-session.d.ts +37 -0
  157. package/dist/integrations/linkedin/media-session.js +2 -0
  158. package/dist/integrations/linkedin/media.d.ts +51 -0
  159. package/dist/integrations/linkedin/media.js +2 -0
  160. package/dist/integrations/linkedin/messaging.d.ts +70 -0
  161. package/dist/integrations/linkedin/messaging.js +1 -0
  162. package/dist/integrations/linkedin/models.d.ts +42 -0
  163. package/dist/integrations/linkedin/models.js +1 -0
  164. package/dist/integrations/linkedin/native-publication.d.ts +43 -0
  165. package/dist/integrations/linkedin/native-publication.js +2 -0
  166. package/dist/integrations/linkedin/native-withdrawal.d.ts +12 -0
  167. package/dist/integrations/linkedin/native-withdrawal.js +2 -0
  168. package/dist/integrations/linkedin/operation-catalog.d.ts +314 -0
  169. package/dist/integrations/linkedin/operation-catalog.js +2 -0
  170. package/dist/integrations/linkedin/operations.d.ts +66 -0
  171. package/dist/integrations/linkedin/operations.js +2 -0
  172. package/dist/integrations/linkedin/provider.d.ts +72 -0
  173. package/dist/integrations/linkedin/provider.js +2 -0
  174. package/dist/integrations/linkedin/sales.d.ts +57 -0
  175. package/dist/integrations/linkedin/sales.js +1 -0
  176. package/dist/integrations/linkedin/sync.d.ts +41 -0
  177. package/dist/integrations/linkedin/sync.js +1 -0
  178. package/dist/integrations/linkedin/webhooks.d.ts +38 -0
  179. package/dist/integrations/linkedin/webhooks.js +1 -0
  180. package/dist/integrations/meeting-recorder/contracts/index.d.ts +7 -0
  181. package/dist/integrations/meeting-recorder/contracts/index.js +2 -0
  182. package/dist/integrations/meeting-recorder/contracts/meetings.d.ts +451 -0
  183. package/dist/integrations/meeting-recorder/contracts/meetings.js +2 -0
  184. package/dist/integrations/meeting-recorder/contracts/transcripts.d.ts +166 -0
  185. package/dist/integrations/meeting-recorder/contracts/transcripts.js +2 -0
  186. package/dist/integrations/meeting-recorder/contracts/webhooks.d.ts +85 -0
  187. package/dist/integrations/meeting-recorder/contracts/webhooks.js +2 -0
  188. package/dist/integrations/meeting-recorder/meeting-recorder.capability.d.ts +1 -0
  189. package/dist/integrations/meeting-recorder/meeting-recorder.capability.js +2 -0
  190. package/dist/integrations/meeting-recorder/meeting-recorder.feature.d.ts +5 -0
  191. package/dist/integrations/meeting-recorder/meeting-recorder.feature.js +2 -0
  192. package/dist/integrations/meeting-recorder/models.d.ts +402 -0
  193. package/dist/integrations/meeting-recorder/models.js +2 -0
  194. package/dist/integrations/meeting-recorder/telemetry.d.ts +13 -0
  195. package/dist/integrations/meeting-recorder/telemetry.js +2 -0
  196. package/dist/integrations/openbanking/contracts/accounts.d.ts +282 -0
  197. package/dist/integrations/openbanking/contracts/accounts.js +2 -0
  198. package/dist/integrations/openbanking/contracts/balances.d.ts +158 -0
  199. package/dist/integrations/openbanking/contracts/balances.js +2 -0
  200. package/dist/integrations/openbanking/contracts/index.d.ts +7 -0
  201. package/dist/integrations/openbanking/contracts/index.js +2 -0
  202. package/dist/integrations/openbanking/contracts/transactions.d.ts +206 -0
  203. package/dist/integrations/openbanking/contracts/transactions.js +2 -0
  204. package/dist/integrations/openbanking/guards.d.ts +8 -0
  205. package/dist/integrations/openbanking/guards.js +2 -0
  206. package/dist/integrations/openbanking/guards.test.d.ts +1 -0
  207. package/dist/integrations/openbanking/models.d.ts +223 -0
  208. package/dist/integrations/openbanking/models.js +2 -0
  209. package/dist/integrations/openbanking/openbanking.capability.d.ts +1 -0
  210. package/dist/integrations/openbanking/openbanking.capability.js +2 -0
  211. package/dist/integrations/openbanking/openbanking.feature.d.ts +5 -0
  212. package/dist/integrations/openbanking/openbanking.feature.js +2 -0
  213. package/dist/integrations/openbanking/telemetry.d.ts +12 -0
  214. package/dist/integrations/openbanking/telemetry.js +2 -0
  215. package/dist/integrations/operations.d.ts +430 -0
  216. package/dist/integrations/operations.js +22 -0
  217. package/dist/integrations/operations.test.d.ts +1 -0
  218. package/dist/integrations/providers/analytics-reader.d.ts +103 -0
  219. package/dist/integrations/providers/analytics-reader.js +1 -0
  220. package/dist/integrations/providers/analytics-writer.d.ts +6 -0
  221. package/dist/integrations/providers/analytics-writer.js +1 -0
  222. package/dist/integrations/providers/analytics.d.ts +47 -0
  223. package/dist/integrations/providers/analytics.js +1 -0
  224. package/dist/integrations/providers/apify.d.ts +3 -0
  225. package/dist/integrations/providers/apify.js +2 -0
  226. package/dist/integrations/providers/apple-health.d.ts +3 -0
  227. package/dist/integrations/providers/apple-health.js +2 -0
  228. package/dist/integrations/providers/async-media-record.d.ts +26 -0
  229. package/dist/integrations/providers/async-media-record.js +2 -0
  230. package/dist/integrations/providers/async-media.d.ts +112 -0
  231. package/dist/integrations/providers/async-media.js +1 -0
  232. package/dist/integrations/providers/attio.d.ts +4 -0
  233. package/dist/integrations/providers/attio.js +2 -0
  234. package/dist/integrations/providers/bright-data.d.ts +3 -0
  235. package/dist/integrations/providers/bright-data.js +2 -0
  236. package/dist/integrations/providers/browserbase.d.ts +3 -0
  237. package/dist/integrations/providers/browserbase.js +2 -0
  238. package/dist/integrations/providers/calendar.d.js +1 -0
  239. package/dist/integrations/providers/calendar.d.ts +81 -0
  240. package/dist/integrations/providers/calendar.js +1 -0
  241. package/dist/integrations/providers/catalog.d.ts +2 -0
  242. package/dist/integrations/providers/catalog.js +2 -0
  243. package/dist/integrations/providers/clay.d.ts +4 -0
  244. package/dist/integrations/providers/clay.js +2 -0
  245. package/dist/integrations/providers/communication-channel.d.ts +45 -0
  246. package/dist/integrations/providers/communication-channel.js +2 -0
  247. package/dist/integrations/providers/communication-channel.test.d.ts +1 -0
  248. package/dist/integrations/providers/composio.d.ts +3 -0
  249. package/dist/integrations/providers/composio.js +2 -0
  250. package/dist/integrations/providers/crm-external-profiles.test.d.ts +1 -0
  251. package/dist/integrations/providers/crm-fixture-core.d.ts +20 -0
  252. package/dist/integrations/providers/crm-fixture-core.js +2 -0
  253. package/dist/integrations/providers/crm-hubspot-fixture.d.ts +14 -0
  254. package/dist/integrations/providers/crm-hubspot-fixture.js +2 -0
  255. package/dist/integrations/providers/crm-salesforce-fixture.d.ts +17 -0
  256. package/dist/integrations/providers/crm-salesforce-fixture.js +2 -0
  257. package/dist/integrations/providers/crm-write-proposal-types.d.ts +83 -0
  258. package/dist/integrations/providers/crm-write-proposal-types.js +2 -0
  259. package/dist/integrations/providers/crm-write-proposal.d.ts +7 -0
  260. package/dist/integrations/providers/crm-write-proposal.js +2 -0
  261. package/dist/integrations/providers/crm-write-proposal.test.d.ts +1 -0
  262. package/dist/integrations/providers/crm.d.ts +94 -0
  263. package/dist/integrations/providers/crm.js +2 -0
  264. package/dist/integrations/providers/crm.test.d.ts +1 -0
  265. package/dist/integrations/providers/database.d.ts +12 -0
  266. package/dist/integrations/providers/database.js +1 -0
  267. package/dist/integrations/providers/deepgram.d.ts +3 -0
  268. package/dist/integrations/providers/deepgram.js +2 -0
  269. package/dist/integrations/providers/direct-fetch.d.ts +3 -0
  270. package/dist/integrations/providers/direct-fetch.js +2 -0
  271. package/dist/integrations/providers/eightsleep.d.ts +3 -0
  272. package/dist/integrations/providers/eightsleep.js +2 -0
  273. package/dist/integrations/providers/elevenlabs.d.ts +3 -0
  274. package/dist/integrations/providers/elevenlabs.js +2 -0
  275. package/dist/integrations/providers/email-delivery-events.d.ts +22 -0
  276. package/dist/integrations/providers/email-delivery-events.js +1 -0
  277. package/dist/integrations/providers/email.d.ts +187 -0
  278. package/dist/integrations/providers/email.js +1 -0
  279. package/dist/integrations/providers/embedding.d.ts +52 -0
  280. package/dist/integrations/providers/embedding.js +1 -0
  281. package/dist/integrations/providers/embedding.test.d.ts +1 -0
  282. package/dist/integrations/providers/fal-image.d.ts +3 -0
  283. package/dist/integrations/providers/fal-image.js +2 -0
  284. package/dist/integrations/providers/fal.d.ts +3 -0
  285. package/dist/integrations/providers/fal.js +2 -0
  286. package/dist/integrations/providers/fathom.d.ts +3 -0
  287. package/dist/integrations/providers/fathom.js +2 -0
  288. package/dist/integrations/providers/firecrawl.d.ts +3 -0
  289. package/dist/integrations/providers/firecrawl.js +2 -0
  290. package/dist/integrations/providers/fireflies.d.ts +3 -0
  291. package/dist/integrations/providers/fireflies.js +2 -0
  292. package/dist/integrations/providers/fitbit.d.ts +3 -0
  293. package/dist/integrations/providers/fitbit.js +2 -0
  294. package/dist/integrations/providers/fullenrich.d.ts +3 -0
  295. package/dist/integrations/providers/fullenrich.js +2 -0
  296. package/dist/integrations/providers/garmin.d.ts +3 -0
  297. package/dist/integrations/providers/garmin.js +2 -0
  298. package/dist/integrations/providers/gcs-storage.d.ts +3 -0
  299. package/dist/integrations/providers/gcs-storage.js +2 -0
  300. package/dist/integrations/providers/gmail.d.ts +3 -0
  301. package/dist/integrations/providers/gmail.js +2 -0
  302. package/dist/integrations/providers/google-calendar.d.ts +3 -0
  303. package/dist/integrations/providers/google-calendar.js +2 -0
  304. package/dist/integrations/providers/google-drive.d.ts +54 -0
  305. package/dist/integrations/providers/google-drive.js +2 -0
  306. package/dist/integrations/providers/gradium.d.ts +3 -0
  307. package/dist/integrations/providers/gradium.js +2 -0
  308. package/dist/integrations/providers/granola.d.ts +3 -0
  309. package/dist/integrations/providers/granola.js +2 -0
  310. package/dist/integrations/providers/gtm-providers.test.d.ts +1 -0
  311. package/dist/integrations/providers/health-provider-shared.d.ts +28 -0
  312. package/dist/integrations/providers/health-provider-shared.js +2 -0
  313. package/dist/integrations/providers/health-providers.test.d.ts +1 -0
  314. package/dist/integrations/providers/health.d.ts +186 -0
  315. package/dist/integrations/providers/health.js +1 -0
  316. package/dist/integrations/providers/higgsfield.d.ts +3 -0
  317. package/dist/integrations/providers/higgsfield.js +2 -0
  318. package/dist/integrations/providers/image.d.ts +85 -0
  319. package/dist/integrations/providers/image.js +2 -0
  320. package/dist/integrations/providers/index.d.ts +101 -0
  321. package/dist/integrations/providers/index.js +2 -0
  322. package/dist/integrations/providers/jira.d.ts +3 -0
  323. package/dist/integrations/providers/jira.js +2 -0
  324. package/dist/integrations/providers/linear.d.ts +3 -0
  325. package/dist/integrations/providers/linear.js +2 -0
  326. package/dist/integrations/providers/linkedin-community.d.ts +3 -0
  327. package/dist/integrations/providers/linkedin-community.js +2 -0
  328. package/dist/integrations/providers/linkedin-marketing.d.ts +3 -0
  329. package/dist/integrations/providers/linkedin-marketing.js +2 -0
  330. package/dist/integrations/providers/linkedin-member.d.ts +3 -0
  331. package/dist/integrations/providers/linkedin-member.js +2 -0
  332. package/dist/integrations/providers/linkedin-messaging.d.ts +3 -0
  333. package/dist/integrations/providers/linkedin-messaging.js +2 -0
  334. package/dist/integrations/providers/linkedin-providers.test.d.ts +1 -0
  335. package/dist/integrations/providers/linkedin-sales-navigator.d.ts +3 -0
  336. package/dist/integrations/providers/linkedin-sales-navigator.js +2 -0
  337. package/dist/integrations/providers/linkedin-spec-shared.d.ts +16 -0
  338. package/dist/integrations/providers/linkedin-spec-shared.js +2 -0
  339. package/dist/integrations/providers/linkup.d.ts +3 -0
  340. package/dist/integrations/providers/linkup.js +2 -0
  341. package/dist/integrations/providers/llm.d.ts +79 -0
  342. package/dist/integrations/providers/llm.js +1 -0
  343. package/dist/integrations/providers/massive.d.ts +5 -0
  344. package/dist/integrations/providers/massive.js +2 -0
  345. package/dist/integrations/providers/meeting-capture.d.ts +56 -0
  346. package/dist/integrations/providers/meeting-capture.js +1 -0
  347. package/dist/integrations/providers/meeting-recorder.d.ts +129 -0
  348. package/dist/integrations/providers/meeting-recorder.js +1 -0
  349. package/dist/integrations/providers/messaging-github.d.ts +9 -0
  350. package/dist/integrations/providers/messaging-github.js +2 -0
  351. package/dist/integrations/providers/messaging-matrix.d.ts +3 -0
  352. package/dist/integrations/providers/messaging-matrix.js +2 -0
  353. package/dist/integrations/providers/messaging-slack.d.ts +9 -0
  354. package/dist/integrations/providers/messaging-slack.js +2 -0
  355. package/dist/integrations/providers/messaging-teams.d.ts +10 -0
  356. package/dist/integrations/providers/messaging-teams.js +2 -0
  357. package/dist/integrations/providers/messaging-telegram.d.ts +3 -0
  358. package/dist/integrations/providers/messaging-telegram.js +2 -0
  359. package/dist/integrations/providers/messaging-whatsapp-meta.d.ts +3 -0
  360. package/dist/integrations/providers/messaging-whatsapp-meta.js +2 -0
  361. package/dist/integrations/providers/messaging-whatsapp-twilio.d.ts +3 -0
  362. package/dist/integrations/providers/messaging-whatsapp-twilio.js +2 -0
  363. package/dist/integrations/providers/messaging.d.ts +30 -0
  364. package/dist/integrations/providers/messaging.js +1 -0
  365. package/dist/integrations/providers/mistral-conversational.d.ts +3 -0
  366. package/dist/integrations/providers/mistral-conversational.js +2 -0
  367. package/dist/integrations/providers/mistral-stt.d.ts +3 -0
  368. package/dist/integrations/providers/mistral-stt.js +2 -0
  369. package/dist/integrations/providers/mistral.d.ts +3 -0
  370. package/dist/integrations/providers/mistral.js +2 -0
  371. package/dist/integrations/providers/mode-exemptions.d.ts +10 -0
  372. package/dist/integrations/providers/mode-exemptions.js +2 -0
  373. package/dist/integrations/providers/myfitnesspal.d.ts +3 -0
  374. package/dist/integrations/providers/myfitnesspal.js +2 -0
  375. package/dist/integrations/providers/notion.d.ts +9 -0
  376. package/dist/integrations/providers/notion.js +2 -0
  377. package/dist/integrations/providers/openai-image.d.ts +3 -0
  378. package/dist/integrations/providers/openai-image.js +2 -0
  379. package/dist/integrations/providers/openai-realtime.d.ts +3 -0
  380. package/dist/integrations/providers/openai-realtime.js +2 -0
  381. package/dist/integrations/providers/openbanking.d.ts +125 -0
  382. package/dist/integrations/providers/openbanking.js +1 -0
  383. package/dist/integrations/providers/openwearables.d.ts +3 -0
  384. package/dist/integrations/providers/openwearables.js +2 -0
  385. package/dist/integrations/providers/oura.d.ts +3 -0
  386. package/dist/integrations/providers/oura.js +2 -0
  387. package/dist/integrations/providers/oxylabs.d.ts +3 -0
  388. package/dist/integrations/providers/oxylabs.js +2 -0
  389. package/dist/integrations/providers/payments/capabilities-billing.d.ts +67 -0
  390. package/dist/integrations/providers/payments/capabilities-billing.js +1 -0
  391. package/dist/integrations/providers/payments/capabilities-payments.d.ts +57 -0
  392. package/dist/integrations/providers/payments/capabilities-payments.js +1 -0
  393. package/dist/integrations/providers/payments/capabilities.d.ts +2 -0
  394. package/dist/integrations/providers/payments/capabilities.js +1 -0
  395. package/dist/integrations/providers/payments/context.d.ts +75 -0
  396. package/dist/integrations/providers/payments/context.js +2 -0
  397. package/dist/integrations/providers/payments/provider.d.ts +22 -0
  398. package/dist/integrations/providers/payments/provider.js +1 -0
  399. package/dist/integrations/providers/payments/resources.d.ts +97 -0
  400. package/dist/integrations/providers/payments/resources.js +1 -0
  401. package/dist/integrations/providers/payments/shared.d.ts +61 -0
  402. package/dist/integrations/providers/payments/shared.js +2 -0
  403. package/dist/integrations/providers/payments.d.ts +5 -0
  404. package/dist/integrations/providers/payments.js +2 -0
  405. package/dist/integrations/providers/payments.test.d.ts +1 -0
  406. package/dist/integrations/providers/paypal.d.ts +3 -0
  407. package/dist/integrations/providers/paypal.js +2 -0
  408. package/dist/integrations/providers/peloton.d.ts +3 -0
  409. package/dist/integrations/providers/peloton.js +2 -0
  410. package/dist/integrations/providers/posthog-llm-telemetry.d.ts +51 -0
  411. package/dist/integrations/providers/posthog-llm-telemetry.js +2 -0
  412. package/dist/integrations/providers/posthog.d.ts +3 -0
  413. package/dist/integrations/providers/posthog.js +2 -0
  414. package/dist/integrations/providers/postmark.d.ts +3 -0
  415. package/dist/integrations/providers/postmark.js +2 -0
  416. package/dist/integrations/providers/powens.d.ts +3 -0
  417. package/dist/integrations/providers/powens.js +2 -0
  418. package/dist/integrations/providers/project-management.d.ts +196 -0
  419. package/dist/integrations/providers/project-management.js +2 -0
  420. package/dist/integrations/providers/provider-delta.d.ts +45 -0
  421. package/dist/integrations/providers/provider-delta.js +2 -0
  422. package/dist/integrations/providers/provider-delta.test.d.ts +1 -0
  423. package/dist/integrations/providers/provider-modes-coverage.test.d.ts +1 -0
  424. package/dist/integrations/providers/providers.test.d.ts +1 -0
  425. package/dist/integrations/providers/qdrant.d.ts +3 -0
  426. package/dist/integrations/providers/qdrant.js +2 -0
  427. package/dist/integrations/providers/registry.d.ts +24 -0
  428. package/dist/integrations/providers/registry.js +2 -0
  429. package/dist/integrations/providers/reworkd.d.ts +3 -0
  430. package/dist/integrations/providers/reworkd.js +2 -0
  431. package/dist/integrations/providers/serper.d.ts +3 -0
  432. package/dist/integrations/providers/serper.js +2 -0
  433. package/dist/integrations/providers/sillage.d.ts +4 -0
  434. package/dist/integrations/providers/sillage.js +2 -0
  435. package/dist/integrations/providers/slng.d.ts +3 -0
  436. package/dist/integrations/providers/slng.js +2 -0
  437. package/dist/integrations/providers/sms.d.ts +31 -0
  438. package/dist/integrations/providers/sms.js +1 -0
  439. package/dist/integrations/providers/social.d.ts +8 -0
  440. package/dist/integrations/providers/social.js +2 -0
  441. package/dist/integrations/providers/storage.d.ts +65 -0
  442. package/dist/integrations/providers/storage.js +1 -0
  443. package/dist/integrations/providers/strava.d.ts +3 -0
  444. package/dist/integrations/providers/strava.js +2 -0
  445. package/dist/integrations/providers/stripe.d.ts +3 -0
  446. package/dist/integrations/providers/stripe.js +2 -0
  447. package/dist/integrations/providers/supabase-postgres.d.ts +3 -0
  448. package/dist/integrations/providers/supabase-postgres.js +2 -0
  449. package/dist/integrations/providers/supabase-vector.d.ts +3 -0
  450. package/dist/integrations/providers/supabase-vector.js +2 -0
  451. package/dist/integrations/providers/tavily.d.ts +8 -0
  452. package/dist/integrations/providers/tavily.js +2 -0
  453. package/dist/integrations/providers/tldv.d.ts +3 -0
  454. package/dist/integrations/providers/tldv.js +2 -0
  455. package/dist/integrations/providers/twilio-sms.d.ts +3 -0
  456. package/dist/integrations/providers/twilio-sms.js +2 -0
  457. package/dist/integrations/providers/vector-store.d.ts +39 -0
  458. package/dist/integrations/providers/vector-store.js +1 -0
  459. package/dist/integrations/providers/video.d.ts +181 -0
  460. package/dist/integrations/providers/video.js +2 -0
  461. package/dist/integrations/providers/voice-video-sync.d.ts +29 -0
  462. package/dist/integrations/providers/voice-video-sync.js +1 -0
  463. package/dist/integrations/providers/voice.d.ts +180 -0
  464. package/dist/integrations/providers/voice.js +1 -0
  465. package/dist/integrations/providers/web-access-shared.d.ts +18 -0
  466. package/dist/integrations/providers/web-access-shared.js +2 -0
  467. package/dist/integrations/providers/whoop.d.ts +3 -0
  468. package/dist/integrations/providers/whoop.js +2 -0
  469. package/dist/integrations/runtime-transport.test.d.ts +1 -0
  470. package/dist/integrations/runtime.d.ts +140 -0
  471. package/dist/integrations/runtime.js +2 -0
  472. package/dist/integrations/runtime.test.d.ts +1 -0
  473. package/dist/integrations/sales-intelligence/events.d.ts +182 -0
  474. package/dist/integrations/sales-intelligence/events.js +2 -0
  475. package/dist/integrations/sales-intelligence/events.test.d.ts +1 -0
  476. package/dist/integrations/sales-intelligence/fullenrich-cancel-operation.d.ts +39 -0
  477. package/dist/integrations/sales-intelligence/fullenrich-cancel-operation.js +2 -0
  478. package/dist/integrations/sales-intelligence/index.d.ts +7 -0
  479. package/dist/integrations/sales-intelligence/index.js +2 -0
  480. package/dist/integrations/sales-intelligence/operation-helpers.d.ts +4 -0
  481. package/dist/integrations/sales-intelligence/operation-helpers.js +2 -0
  482. package/dist/integrations/sales-intelligence/operations.d.ts +873 -0
  483. package/dist/integrations/sales-intelligence/operations.js +2 -0
  484. package/dist/integrations/sales-intelligence/operations.test.d.ts +1 -0
  485. package/dist/integrations/sales-intelligence/schemas-events.d.ts +78 -0
  486. package/dist/integrations/sales-intelligence/schemas-events.js +2 -0
  487. package/dist/integrations/sales-intelligence/schemas-results.d.ts +69 -0
  488. package/dist/integrations/sales-intelligence/schemas-results.js +2 -0
  489. package/dist/integrations/sales-intelligence/schemas.d.ts +73 -0
  490. package/dist/integrations/sales-intelligence/schemas.js +2 -0
  491. package/dist/integrations/secrets/aws-secret-manager.d.ts +28 -0
  492. package/dist/integrations/secrets/aws-secret-manager.js +2 -0
  493. package/dist/integrations/secrets/env-secret-provider.d.ts +28 -0
  494. package/dist/integrations/secrets/env-secret-provider.js +2 -0
  495. package/dist/integrations/secrets/gcp-secret-manager.d.ts +29 -0
  496. package/dist/integrations/secrets/gcp-secret-manager.js +2 -0
  497. package/dist/integrations/secrets/index.d.ts +6 -0
  498. package/dist/integrations/secrets/index.js +2 -0
  499. package/dist/integrations/secrets/manager.d.ts +44 -0
  500. package/dist/integrations/secrets/manager.js +2 -0
  501. package/dist/integrations/secrets/provider.d.ts +49 -0
  502. package/dist/integrations/secrets/provider.js +2 -0
  503. package/dist/integrations/secrets/provider.test.d.ts +1 -0
  504. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +35 -0
  505. package/dist/integrations/secrets/scaleway-secret-manager.js +2 -0
  506. package/dist/integrations/secrets-types.d.ts +14 -0
  507. package/dist/integrations/secrets-types.js +1 -0
  508. package/dist/integrations/social/index.d.ts +7 -0
  509. package/dist/integrations/social/index.js +2 -0
  510. package/dist/integrations/social/instagram.d.ts +86 -0
  511. package/dist/integrations/social/instagram.js +1 -0
  512. package/dist/integrations/social/models.d.ts +107 -0
  513. package/dist/integrations/social/models.js +1 -0
  514. package/dist/integrations/social/provider.d.ts +46 -0
  515. package/dist/integrations/social/provider.js +2 -0
  516. package/dist/integrations/social/social.test.d.ts +1 -0
  517. package/dist/integrations/social/tracking-models.d.ts +153 -0
  518. package/dist/integrations/social/tracking-models.js +2 -0
  519. package/dist/integrations/social/tracking-provider.d.ts +53 -0
  520. package/dist/integrations/social/tracking-provider.js +1 -0
  521. package/dist/integrations/social/tracking-store.d.ts +78 -0
  522. package/dist/integrations/social/tracking-store.js +1 -0
  523. package/dist/integrations/social/x-publication.d.ts +143 -0
  524. package/dist/integrations/social/x-publication.js +2 -0
  525. package/dist/integrations/social/x-upload-state.d.ts +53 -0
  526. package/dist/integrations/social/x-upload-state.js +2 -0
  527. package/dist/integrations/social/x-upload.d.ts +111 -0
  528. package/dist/integrations/social/x-upload.js +2 -0
  529. package/dist/integrations/social/x-withdrawal.d.ts +13 -0
  530. package/dist/integrations/social/x-withdrawal.js +2 -0
  531. package/dist/integrations/social/x.d.ts +84 -0
  532. package/dist/integrations/social/x.js +1 -0
  533. package/dist/integrations/spec.d.ts +119 -0
  534. package/dist/integrations/spec.js +2 -0
  535. package/dist/integrations/spec.test.d.ts +1 -0
  536. package/dist/integrations/transport.d.ts +115 -0
  537. package/dist/integrations/transport.js +2 -0
  538. package/dist/integrations/transport.test.d.ts +1 -0
  539. package/dist/integrations/versioning.d.ts +51 -0
  540. package/dist/integrations/versioning.js +2 -0
  541. package/dist/integrations/versioning.test.d.ts +1 -0
  542. package/dist/integrations/web-access/browser-automation.d.ts +134 -0
  543. package/dist/integrations/web-access/browser-automation.js +2 -0
  544. package/dist/integrations/web-access/capability-ledger.d.ts +50 -0
  545. package/dist/integrations/web-access/capability-ledger.js +2 -0
  546. package/dist/integrations/web-access/capability-ledger.test.d.ts +1 -0
  547. package/dist/integrations/web-access/events.d.ts +105 -0
  548. package/dist/integrations/web-access/events.js +2 -0
  549. package/dist/integrations/web-access/index.d.ts +16 -0
  550. package/dist/integrations/web-access/index.js +22 -0
  551. package/dist/integrations/web-access/inventory-definitions-expanded.d.ts +2 -0
  552. package/dist/integrations/web-access/inventory-definitions-expanded.js +2 -0
  553. package/dist/integrations/web-access/inventory-definitions.d.ts +17 -0
  554. package/dist/integrations/web-access/inventory-definitions.js +2 -0
  555. package/dist/integrations/web-access/inventory-evidence.d.ts +24 -0
  556. package/dist/integrations/web-access/inventory-evidence.js +2 -0
  557. package/dist/integrations/web-access/inventory-mappings-browserbase.d.ts +2 -0
  558. package/dist/integrations/web-access/inventory-mappings-browserbase.js +2 -0
  559. package/dist/integrations/web-access/inventory-mappings.d.ts +54 -0
  560. package/dist/integrations/web-access/inventory-mappings.js +2 -0
  561. package/dist/integrations/web-access/inventory.d.ts +4 -0
  562. package/dist/integrations/web-access/inventory.js +2 -0
  563. package/dist/integrations/web-access/models.d.ts +145 -0
  564. package/dist/integrations/web-access/models.js +2 -0
  565. package/dist/integrations/web-access/operation-definitions.d.ts +19 -0
  566. package/dist/integrations/web-access/operation-definitions.js +2 -0
  567. package/dist/integrations/web-access/operation-errors.d.ts +56 -0
  568. package/dist/integrations/web-access/operation-errors.js +2 -0
  569. package/dist/integrations/web-access/operation-output-models.d.ts +177 -0
  570. package/dist/integrations/web-access/operation-output-models.js +2 -0
  571. package/dist/integrations/web-access/operation-schema-models.d.ts +453 -0
  572. package/dist/integrations/web-access/operation-schema-models.js +2 -0
  573. package/dist/integrations/web-access/operation-schemas.d.ts +165 -0
  574. package/dist/integrations/web-access/operation-schemas.js +2 -0
  575. package/dist/integrations/web-access/operations.d.ts +22 -0
  576. package/dist/integrations/web-access/operations.js +22 -0
  577. package/dist/integrations/web-access/operations.test.d.ts +1 -0
  578. package/dist/integrations/web-access/providers.d.ts +56 -0
  579. package/dist/integrations/web-access/providers.js +1 -0
  580. package/dist/integrations/web-access/providers.test.d.ts +1 -0
  581. package/dist/integrations/web-access/schemas.d.ts +118 -0
  582. package/dist/integrations/web-access/schemas.js +2 -0
  583. package/dist/node/contracts-integrations.feature.js +1 -0
  584. package/dist/node/index.js +21 -0
  585. package/dist/node/integrations/advertising/index.js +1 -0
  586. package/dist/node/integrations/advertising/recipe-schema.js +1 -0
  587. package/dist/node/integrations/advertising/recipe.js +0 -0
  588. package/dist/node/integrations/advertising/specs.js +1 -0
  589. package/dist/node/integrations/advertising/types.js +1 -0
  590. package/dist/node/integrations/attio/events.js +1 -0
  591. package/dist/node/integrations/attio/index.js +1 -0
  592. package/dist/node/integrations/attio/operations.js +1 -0
  593. package/dist/node/integrations/auth-helpers.js +1 -0
  594. package/dist/node/integrations/auth.js +1 -0
  595. package/dist/node/integrations/binding.js +0 -0
  596. package/dist/node/integrations/byok.js +1 -0
  597. package/dist/node/integrations/catalog.js +1 -0
  598. package/dist/node/integrations/clay/events.js +1 -0
  599. package/dist/node/integrations/clay/index.js +1 -0
  600. package/dist/node/integrations/clay/operations.js +1 -0
  601. package/dist/node/integrations/connection.js +0 -0
  602. package/dist/node/integrations/credentials.js +1 -0
  603. package/dist/node/integrations/deployment-topology-model.js +1 -0
  604. package/dist/node/integrations/deployment-topology-receipt.js +1 -0
  605. package/dist/node/integrations/deployment-topology-validation.js +1 -0
  606. package/dist/node/integrations/deployment-topology.js +1 -0
  607. package/dist/node/integrations/docs/integrations.docblock.js +100 -0
  608. package/dist/node/integrations/email-operations.js +1 -0
  609. package/dist/node/integrations/gtm/capability-ledger.fixture-helpers.js +1 -0
  610. package/dist/node/integrations/gtm/capability-ledger.fixtures.js +1 -0
  611. package/dist/node/integrations/gtm/capability-ledger.js +1 -0
  612. package/dist/node/integrations/gtm/hosted-mcp.js +1 -0
  613. package/dist/node/integrations/gtm/index.js +1 -0
  614. package/dist/node/integrations/gtm/inventory/attio.js +1 -0
  615. package/dist/node/integrations/gtm/inventory/clay.js +1 -0
  616. package/dist/node/integrations/gtm/inventory/fullenrich.js +1 -0
  617. package/dist/node/integrations/gtm/inventory/index.js +1 -0
  618. package/dist/node/integrations/gtm/inventory/types.js +0 -0
  619. package/dist/node/integrations/gtm/preflight.js +1 -0
  620. package/dist/node/integrations/gtm/schemas.js +1 -0
  621. package/dist/node/integrations/gtm/webhook-ingress.js +1 -0
  622. package/dist/node/integrations/health/contracts/activities.js +1 -0
  623. package/dist/node/integrations/health/contracts/biometrics.js +1 -0
  624. package/dist/node/integrations/health/contracts/index.js +1 -0
  625. package/dist/node/integrations/health/contracts/nutrition.js +1 -0
  626. package/dist/node/integrations/health/contracts/sleep.js +1 -0
  627. package/dist/node/integrations/health/contracts/webhooks.js +1 -0
  628. package/dist/node/integrations/health/contracts/workouts.js +1 -0
  629. package/dist/node/integrations/health/guards.js +1 -0
  630. package/dist/node/integrations/health/health.capability.js +1 -0
  631. package/dist/node/integrations/health/health.feature.js +1 -0
  632. package/dist/node/integrations/health/models.js +1 -0
  633. package/dist/node/integrations/health/telemetry.js +1 -0
  634. package/dist/node/integrations/health.js +1 -0
  635. package/dist/node/integrations/index.js +21 -0
  636. package/dist/node/integrations/integrations.capability.js +1 -0
  637. package/dist/node/integrations/integrations.feature.js +1 -0
  638. package/dist/node/integrations/linkedin/advertising.js +0 -0
  639. package/dist/node/integrations/linkedin/analytics.js +0 -0
  640. package/dist/node/integrations/linkedin/capabilities.js +1 -0
  641. package/dist/node/integrations/linkedin/community.js +0 -0
  642. package/dist/node/integrations/linkedin/credentials.js +1 -0
  643. package/dist/node/integrations/linkedin/host.js +1 -0
  644. package/dist/node/integrations/linkedin/identity.js +0 -0
  645. package/dist/node/integrations/linkedin/index.js +1 -0
  646. package/dist/node/integrations/linkedin/installation.js +1 -0
  647. package/dist/node/integrations/linkedin/media-job-state.js +1 -0
  648. package/dist/node/integrations/linkedin/media-job.js +1 -0
  649. package/dist/node/integrations/linkedin/media-session.js +1 -0
  650. package/dist/node/integrations/linkedin/media.js +1 -0
  651. package/dist/node/integrations/linkedin/messaging.js +0 -0
  652. package/dist/node/integrations/linkedin/models.js +0 -0
  653. package/dist/node/integrations/linkedin/native-publication.js +1 -0
  654. package/dist/node/integrations/linkedin/native-withdrawal.js +1 -0
  655. package/dist/node/integrations/linkedin/operation-catalog.js +1 -0
  656. package/dist/node/integrations/linkedin/operations.js +1 -0
  657. package/dist/node/integrations/linkedin/provider.js +1 -0
  658. package/dist/node/integrations/linkedin/sales.js +0 -0
  659. package/dist/node/integrations/linkedin/sync.js +0 -0
  660. package/dist/node/integrations/linkedin/webhooks.js +0 -0
  661. package/dist/node/integrations/meeting-recorder/contracts/index.js +1 -0
  662. package/dist/node/integrations/meeting-recorder/contracts/meetings.js +1 -0
  663. package/dist/node/integrations/meeting-recorder/contracts/transcripts.js +1 -0
  664. package/dist/node/integrations/meeting-recorder/contracts/webhooks.js +1 -0
  665. package/dist/node/integrations/meeting-recorder/meeting-recorder.capability.js +1 -0
  666. package/dist/node/integrations/meeting-recorder/meeting-recorder.feature.js +1 -0
  667. package/dist/node/integrations/meeting-recorder/models.js +1 -0
  668. package/dist/node/integrations/meeting-recorder/telemetry.js +1 -0
  669. package/dist/node/integrations/openbanking/contracts/accounts.js +1 -0
  670. package/dist/node/integrations/openbanking/contracts/balances.js +1 -0
  671. package/dist/node/integrations/openbanking/contracts/index.js +1 -0
  672. package/dist/node/integrations/openbanking/contracts/transactions.js +1 -0
  673. package/dist/node/integrations/openbanking/guards.js +1 -0
  674. package/dist/node/integrations/openbanking/models.js +1 -0
  675. package/dist/node/integrations/openbanking/openbanking.capability.js +1 -0
  676. package/dist/node/integrations/openbanking/openbanking.feature.js +1 -0
  677. package/dist/node/integrations/openbanking/telemetry.js +1 -0
  678. package/dist/node/integrations/operations.js +21 -0
  679. package/dist/node/integrations/providers/analytics-reader.js +0 -0
  680. package/dist/node/integrations/providers/analytics-writer.js +0 -0
  681. package/dist/node/integrations/providers/analytics.js +0 -0
  682. package/dist/node/integrations/providers/apify.js +1 -0
  683. package/dist/node/integrations/providers/apple-health.js +1 -0
  684. package/dist/node/integrations/providers/async-media-record.js +1 -0
  685. package/dist/node/integrations/providers/async-media.js +0 -0
  686. package/dist/node/integrations/providers/attio.js +1 -0
  687. package/dist/node/integrations/providers/bright-data.js +1 -0
  688. package/dist/node/integrations/providers/browserbase.js +1 -0
  689. package/dist/node/integrations/providers/calendar.d.js +0 -0
  690. package/dist/node/integrations/providers/calendar.js +0 -0
  691. package/dist/node/integrations/providers/catalog.js +1 -0
  692. package/dist/node/integrations/providers/clay.js +1 -0
  693. package/dist/node/integrations/providers/communication-channel.js +1 -0
  694. package/dist/node/integrations/providers/composio.js +1 -0
  695. package/dist/node/integrations/providers/crm-fixture-core.js +1 -0
  696. package/dist/node/integrations/providers/crm-hubspot-fixture.js +1 -0
  697. package/dist/node/integrations/providers/crm-salesforce-fixture.js +1 -0
  698. package/dist/node/integrations/providers/crm-write-proposal-types.js +1 -0
  699. package/dist/node/integrations/providers/crm-write-proposal.js +1 -0
  700. package/dist/node/integrations/providers/crm.js +1 -0
  701. package/dist/node/integrations/providers/database.js +0 -0
  702. package/dist/node/integrations/providers/deepgram.js +1 -0
  703. package/dist/node/integrations/providers/direct-fetch.js +1 -0
  704. package/dist/node/integrations/providers/eightsleep.js +1 -0
  705. package/dist/node/integrations/providers/elevenlabs.js +1 -0
  706. package/dist/node/integrations/providers/email-delivery-events.js +0 -0
  707. package/dist/node/integrations/providers/email.js +0 -0
  708. package/dist/node/integrations/providers/embedding.js +0 -0
  709. package/dist/node/integrations/providers/fal-image.js +1 -0
  710. package/dist/node/integrations/providers/fal.js +1 -0
  711. package/dist/node/integrations/providers/fathom.js +1 -0
  712. package/dist/node/integrations/providers/firecrawl.js +1 -0
  713. package/dist/node/integrations/providers/fireflies.js +1 -0
  714. package/dist/node/integrations/providers/fitbit.js +1 -0
  715. package/dist/node/integrations/providers/fullenrich.js +1 -0
  716. package/dist/node/integrations/providers/garmin.js +1 -0
  717. package/dist/node/integrations/providers/gcs-storage.js +1 -0
  718. package/dist/node/integrations/providers/gmail.js +1 -0
  719. package/dist/node/integrations/providers/google-calendar.js +1 -0
  720. package/dist/node/integrations/providers/google-drive.js +1 -0
  721. package/dist/node/integrations/providers/gradium.js +1 -0
  722. package/dist/node/integrations/providers/granola.js +1 -0
  723. package/dist/node/integrations/providers/health-provider-shared.js +1 -0
  724. package/dist/node/integrations/providers/health.js +0 -0
  725. package/dist/node/integrations/providers/higgsfield.js +1 -0
  726. package/dist/node/integrations/providers/image.js +1 -0
  727. package/dist/node/integrations/providers/index.js +1 -0
  728. package/dist/node/integrations/providers/jira.js +1 -0
  729. package/dist/node/integrations/providers/linear.js +1 -0
  730. package/dist/node/integrations/providers/linkedin-community.js +1 -0
  731. package/dist/node/integrations/providers/linkedin-marketing.js +1 -0
  732. package/dist/node/integrations/providers/linkedin-member.js +1 -0
  733. package/dist/node/integrations/providers/linkedin-messaging.js +1 -0
  734. package/dist/node/integrations/providers/linkedin-sales-navigator.js +1 -0
  735. package/dist/node/integrations/providers/linkedin-spec-shared.js +1 -0
  736. package/dist/node/integrations/providers/linkup.js +1 -0
  737. package/dist/node/integrations/providers/llm.js +0 -0
  738. package/dist/node/integrations/providers/massive.js +1 -0
  739. package/dist/node/integrations/providers/meeting-capture.js +0 -0
  740. package/dist/node/integrations/providers/meeting-recorder.js +0 -0
  741. package/dist/node/integrations/providers/messaging-github.js +1 -0
  742. package/dist/node/integrations/providers/messaging-matrix.js +1 -0
  743. package/dist/node/integrations/providers/messaging-slack.js +1 -0
  744. package/dist/node/integrations/providers/messaging-teams.js +1 -0
  745. package/dist/node/integrations/providers/messaging-telegram.js +1 -0
  746. package/dist/node/integrations/providers/messaging-whatsapp-meta.js +1 -0
  747. package/dist/node/integrations/providers/messaging-whatsapp-twilio.js +1 -0
  748. package/dist/node/integrations/providers/messaging.js +0 -0
  749. package/dist/node/integrations/providers/mistral-conversational.js +1 -0
  750. package/dist/node/integrations/providers/mistral-stt.js +1 -0
  751. package/dist/node/integrations/providers/mistral.js +1 -0
  752. package/dist/node/integrations/providers/mode-exemptions.js +1 -0
  753. package/dist/node/integrations/providers/myfitnesspal.js +1 -0
  754. package/dist/node/integrations/providers/notion.js +1 -0
  755. package/dist/node/integrations/providers/openai-image.js +1 -0
  756. package/dist/node/integrations/providers/openai-realtime.js +1 -0
  757. package/dist/node/integrations/providers/openbanking.js +0 -0
  758. package/dist/node/integrations/providers/openwearables.js +1 -0
  759. package/dist/node/integrations/providers/oura.js +1 -0
  760. package/dist/node/integrations/providers/oxylabs.js +1 -0
  761. package/dist/node/integrations/providers/payments/capabilities-billing.js +0 -0
  762. package/dist/node/integrations/providers/payments/capabilities-payments.js +0 -0
  763. package/dist/node/integrations/providers/payments/capabilities.js +0 -0
  764. package/dist/node/integrations/providers/payments/context.js +1 -0
  765. package/dist/node/integrations/providers/payments/provider.js +0 -0
  766. package/dist/node/integrations/providers/payments/resources.js +0 -0
  767. package/dist/node/integrations/providers/payments/shared.js +1 -0
  768. package/dist/node/integrations/providers/payments.js +1 -0
  769. package/dist/node/integrations/providers/paypal.js +1 -0
  770. package/dist/node/integrations/providers/peloton.js +1 -0
  771. package/dist/node/integrations/providers/posthog-llm-telemetry.js +1 -0
  772. package/dist/node/integrations/providers/posthog.js +1 -0
  773. package/dist/node/integrations/providers/postmark.js +1 -0
  774. package/dist/node/integrations/providers/powens.js +1 -0
  775. package/dist/node/integrations/providers/project-management.js +1 -0
  776. package/dist/node/integrations/providers/provider-delta.js +1 -0
  777. package/dist/node/integrations/providers/qdrant.js +1 -0
  778. package/dist/node/integrations/providers/registry.js +1 -0
  779. package/dist/node/integrations/providers/reworkd.js +1 -0
  780. package/dist/node/integrations/providers/serper.js +1 -0
  781. package/dist/node/integrations/providers/sillage.js +1 -0
  782. package/dist/node/integrations/providers/slng.js +1 -0
  783. package/dist/node/integrations/providers/sms.js +0 -0
  784. package/dist/node/integrations/providers/social.js +1 -0
  785. package/dist/node/integrations/providers/storage.js +0 -0
  786. package/dist/node/integrations/providers/strava.js +1 -0
  787. package/dist/node/integrations/providers/stripe.js +1 -0
  788. package/dist/node/integrations/providers/supabase-postgres.js +1 -0
  789. package/dist/node/integrations/providers/supabase-vector.js +1 -0
  790. package/dist/node/integrations/providers/tavily.js +1 -0
  791. package/dist/node/integrations/providers/tldv.js +1 -0
  792. package/dist/node/integrations/providers/twilio-sms.js +1 -0
  793. package/dist/node/integrations/providers/vector-store.js +0 -0
  794. package/dist/node/integrations/providers/video.js +1 -0
  795. package/dist/node/integrations/providers/voice-video-sync.js +0 -0
  796. package/dist/node/integrations/providers/voice.js +0 -0
  797. package/dist/node/integrations/providers/web-access-shared.js +1 -0
  798. package/dist/node/integrations/providers/whoop.js +1 -0
  799. package/dist/node/integrations/runtime.js +1 -0
  800. package/dist/node/integrations/sales-intelligence/events.js +1 -0
  801. package/dist/node/integrations/sales-intelligence/fullenrich-cancel-operation.js +1 -0
  802. package/dist/node/integrations/sales-intelligence/index.js +1 -0
  803. package/dist/node/integrations/sales-intelligence/operation-helpers.js +1 -0
  804. package/dist/node/integrations/sales-intelligence/operations.js +1 -0
  805. package/dist/node/integrations/sales-intelligence/schemas-events.js +1 -0
  806. package/dist/node/integrations/sales-intelligence/schemas-results.js +1 -0
  807. package/dist/node/integrations/sales-intelligence/schemas.js +1 -0
  808. package/dist/node/integrations/secrets/aws-secret-manager.js +1 -0
  809. package/dist/node/integrations/secrets/env-secret-provider.js +1 -0
  810. package/dist/node/integrations/secrets/gcp-secret-manager.js +1 -0
  811. package/dist/node/integrations/secrets/index.js +1 -0
  812. package/dist/node/integrations/secrets/manager.js +1 -0
  813. package/dist/node/integrations/secrets/provider.js +1 -0
  814. package/dist/node/integrations/secrets/scaleway-secret-manager.js +1 -0
  815. package/dist/node/integrations/secrets-types.js +0 -0
  816. package/dist/node/integrations/social/index.js +1 -0
  817. package/dist/node/integrations/social/instagram.js +0 -0
  818. package/dist/node/integrations/social/models.js +0 -0
  819. package/dist/node/integrations/social/provider.js +1 -0
  820. package/dist/node/integrations/social/tracking-models.js +1 -0
  821. package/dist/node/integrations/social/tracking-provider.js +0 -0
  822. package/dist/node/integrations/social/tracking-store.js +0 -0
  823. package/dist/node/integrations/social/x-publication.js +1 -0
  824. package/dist/node/integrations/social/x-upload-state.js +1 -0
  825. package/dist/node/integrations/social/x-upload.js +1 -0
  826. package/dist/node/integrations/social/x-withdrawal.js +1 -0
  827. package/dist/node/integrations/social/x.js +0 -0
  828. package/dist/node/integrations/spec.js +1 -0
  829. package/dist/node/integrations/transport.js +1 -0
  830. package/dist/node/integrations/versioning.js +1 -0
  831. package/dist/node/integrations/web-access/browser-automation.js +1 -0
  832. package/dist/node/integrations/web-access/capability-ledger.js +1 -0
  833. package/dist/node/integrations/web-access/events.js +1 -0
  834. package/dist/node/integrations/web-access/index.js +21 -0
  835. package/dist/node/integrations/web-access/inventory-definitions-expanded.js +1 -0
  836. package/dist/node/integrations/web-access/inventory-definitions.js +1 -0
  837. package/dist/node/integrations/web-access/inventory-evidence.js +1 -0
  838. package/dist/node/integrations/web-access/inventory-mappings-browserbase.js +1 -0
  839. package/dist/node/integrations/web-access/inventory-mappings.js +1 -0
  840. package/dist/node/integrations/web-access/inventory.js +1 -0
  841. package/dist/node/integrations/web-access/models.js +1 -0
  842. package/dist/node/integrations/web-access/operation-definitions.js +1 -0
  843. package/dist/node/integrations/web-access/operation-errors.js +1 -0
  844. package/dist/node/integrations/web-access/operation-output-models.js +1 -0
  845. package/dist/node/integrations/web-access/operation-schema-models.js +1 -0
  846. package/dist/node/integrations/web-access/operation-schemas.js +1 -0
  847. package/dist/node/integrations/web-access/operations.js +21 -0
  848. package/dist/node/integrations/web-access/providers.js +0 -0
  849. package/dist/node/integrations/web-access/schemas.js +1 -0
  850. package/package.json +3606 -0
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ // @bun
2
+ import{defineFeature as Va}from"@lssm/lib.contracts-spec/features";var ag=Va({meta:{key:"libs.contracts-integrations",version:"1.0.0",title:"Contracts Integrations",description:"Integration contract definitions for external services",domain:"contracts-integrations",owners:["@contractspec-core"],tags:["package","libs","contracts-integrations"],stability:"experimental"},operations:[{key:"health.activities.list",version:"1.0.0"},{key:"health.activities.sync",version:"1.0.0"},{key:"health.biometrics.list",version:"1.0.0"},{key:"health.biometrics.sync",version:"1.0.0"},{key:"health.nutrition.list",version:"1.0.0"},{key:"health.nutrition.sync",version:"1.0.0"},{key:"health.sleep.list",version:"1.0.0"},{key:"health.sleep.sync",version:"1.0.0"},{key:"health.webhooks.ingest",version:"1.0.0"},{key:"health.workouts.list",version:"1.0.0"},{key:"health.workouts.sync",version:"1.0.0"},{key:"meeting-recorder.meetings.list",version:"1.0.0"},{key:"meeting-recorder.meetings.get",version:"1.0.0"},{key:"meeting-recorder.transcripts.get",version:"1.0.0"},{key:"meeting-recorder.transcripts.sync",version:"1.0.0"},{key:"meeting-recorder.webhooks.ingest",version:"1.0.0"},{key:"openbanking.accounts.list",version:"1.0.0"},{key:"openbanking.accounts.get",version:"1.0.0"},{key:"openbanking.accounts.sync",version:"1.0.0"},{key:"openbanking.balances.get",version:"1.0.0"},{key:"openbanking.balances.refresh",version:"1.0.0"},{key:"openbanking.transactions.list",version:"1.0.0"},{key:"openbanking.transactions.sync",version:"1.0.0"},{key:"integrations.connection.create",version:"1.0.0"},{key:"integrations.connection.update",version:"1.0.0"},{key:"integrations.connection.delete",version:"1.0.0"},{key:"integrations.connection.list",version:"1.0.0"},{key:"integrations.connection.test",version:"1.0.0"}]});import{defineEvent as $a}from"@lssm/lib.contracts-spec/events";import{ScalarTypeEnum as _t,SchemaModel as Ja}from"@lssm/lib.schema";var $e=_t.NonEmptyString(),Qa=_t.JSONObject();function Q(e,t){return new Ja({name:e,fields:{connectionId:{type:$e,isOptional:!1},deliveryId:{type:$e,isOptional:!1},eventId:{type:$e,isOptional:!1},occurredAt:{type:_t.DateTime(),isOptional:!1},...Object.fromEntries(t.map((r)=>[r,{type:$e,isOptional:!1}])),payload:{type:Qa,isOptional:!1}}})}var Ya={"call-recording":Q("AttioCallRecordingWebhookPayload",["callRecordingId"]),comment:Q("AttioCommentWebhookPayload",["threadId","commentId"]),"list-attribute":Q("AttioListAttributeWebhookPayload",["listId","attributeId"]),"list-entry":Q("AttioListEntryWebhookPayload",["listId","entryId"]),list:Q("AttioListWebhookPayload",["listId"]),"note-content":Q("AttioNoteContentWebhookPayload",["noteId"]),note:Q("AttioNoteWebhookPayload",["noteId"]),"object-attribute":Q("AttioObjectAttributeWebhookPayload",["objectId","attributeId"]),record:Q("AttioRecordWebhookPayload",["objectId","recordId"]),task:Q("AttioTaskWebhookPayload",["taskId"]),"workspace-member":Q("AttioWorkspaceMemberWebhookPayload",["workspaceMemberId"])},Xa=["call-recording.created","comment.created","comment.deleted","comment.resolved","comment.unresolved","list-attribute.created","list-attribute.updated","list-entry.created","list-entry.deleted","list-entry.updated","list.created","list.deleted","list.updated","note-content.updated","note.created","note.deleted","note.updated","object-attribute.created","object-attribute.updated","record.created","record.deleted","record.merged","record.updated","task.created","task.deleted","task.updated","workspace-member.created"];function Za(e){let t=e.slice(0,e.lastIndexOf("."));return Ya[t]}var es=Xa.map((e)=>$a({meta:{key:`gtm.attio.webhook.${e}`,version:"1.0.0",description:`Normalized Attio ${e} webhook delivery.`,stability:"stable",owners:["@platform.integrations"],tags:["crm","attio","webhook"]},pii:["payload"],payload:Za(e)}));function lg(e){return es.reduce((t,r)=>t.register(r),e)}import{defineCommand as ts,defineQuery as rs}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as Je,SchemaModel as W}from"@lssm/lib.schema";var H=Je.JSONObject(),g=Je.NonEmptyString(),Ee=new W({name:"GtmConnectionInput",fields:{connectionId:{type:g,isOptional:!1},correlationId:{type:g,isOptional:!0}}}),mg=new W({name:"GtmResourceInput",fields:{connectionId:{type:g,isOptional:!1},resourceId:{type:g,isOptional:!0},parentId:{type:g,isOptional:!0},cursor:{type:g,isOptional:!0},payload:{type:H,isOptional:!0},filters:{type:H,isOptional:!0},correlationId:{type:g,isOptional:!0},idempotencyKey:{type:g,isOptional:!0}}}),Qe=new W({name:"GtmCollectionInput",fields:{connectionId:{type:g,isOptional:!1},cursor:{type:g,isOptional:!0},filters:{type:H,isOptional:!0},correlationId:{type:g,isOptional:!0}}}),Ye=new W({name:"GtmResourceIdInput",fields:{connectionId:{type:g,isOptional:!1},resourceId:{type:g,isOptional:!1},correlationId:{type:g,isOptional:!0}}}),Nr=new W({name:"GtmNestedResourceIdInput",fields:{connectionId:{type:g,isOptional:!1},parentId:{type:g,isOptional:!1},resourceId:{type:g,isOptional:!1},correlationId:{type:g,isOptional:!0}}}),Xe=new W({name:"GtmCreateInput",fields:{connectionId:{type:g,isOptional:!1},payload:{type:H,isOptional:!1},correlationId:{type:g,isOptional:!0},idempotencyKey:{type:g,isOptional:!0}}}),Hr=new W({name:"GtmNestedCreateInput",fields:{connectionId:{type:g,isOptional:!1},parentId:{type:g,isOptional:!1},payload:{type:H,isOptional:!1},correlationId:{type:g,isOptional:!0},idempotencyKey:{type:g,isOptional:!0}}}),Ze=new W({name:"GtmUpdateInput",fields:{connectionId:{type:g,isOptional:!1},resourceId:{type:g,isOptional:!1},payload:{type:H,isOptional:!1},correlationId:{type:g,isOptional:!0},idempotencyKey:{type:g,isOptional:!0}}}),Gr=new W({name:"GtmNestedUpdateInput",fields:{connectionId:{type:g,isOptional:!1},parentId:{type:g,isOptional:!1},resourceId:{type:g,isOptional:!1},payload:{type:H,isOptional:!1},correlationId:{type:g,isOptional:!0},idempotencyKey:{type:g,isOptional:!0}}}),zr=new W({name:"GtmAttributeChildInput",fields:{connectionId:{type:g,isOptional:!1},parentId:{type:g,isOptional:!1},resourceId:{type:g,isOptional:!1},childId:{type:g,isOptional:!0},payload:{type:H,isOptional:!0},correlationId:{type:g,isOptional:!0}}}),Vr=new W({name:"GtmNestedQueryInput",fields:{connectionId:{type:g,isOptional:!1},parentId:{type:g,isOptional:!1},cursor:{type:g,isOptional:!0},filters:{type:H,isOptional:!0},correlationId:{type:g,isOptional:!0}}}),et=new W({name:"GtmResourceOutput",fields:{data:{type:H,isOptional:!1},nextCursor:{type:g,isOptional:!0},requestId:{type:g,isOptional:!0}}}),yg=new W({name:"GtmWebhookInput",fields:{connectionId:{type:g,isOptional:!1},deliveryId:{type:g,isOptional:!0},headers:{type:H,isOptional:!1},payload:{type:H,isOptional:!1},correlationId:{type:g,isOptional:!0}}}),fg=new W({name:"GtmWebhookReceiptOutput",fields:{accepted:{type:Je.Boolean(),isOptional:!1},duplicate:{type:Je.Boolean(),isOptional:!1},receiptId:{type:g,isOptional:!1},verificationStatus:{type:g,isOptional:!1}}}),tt=new W({name:"HostedMcpDescriptorOutput",fields:{descriptor:{type:H,isOptional:!1}}});var ns="1.0.0",is=["@platform.integrations"],os=[{suffix:"objects.list",title:"List Attio objects",method:"GET",kind:"query"},{suffix:"objects.get",title:"Get an Attio object",method:"GET",kind:"query"},{suffix:"attributes.list",title:"List Attio attributes",method:"GET",kind:"query"},{suffix:"attributes.get",title:"Get an Attio attribute",method:"GET",kind:"query"},{suffix:"attributes.create",title:"Create an Attio attribute",method:"POST",kind:"command"},{suffix:"attributes.update",title:"Update an Attio attribute",method:"POST",kind:"command"},{suffix:"options.list",title:"List Attio select options",method:"GET",kind:"query"},{suffix:"options.create",title:"Create an Attio select option",method:"POST",kind:"command"},{suffix:"options.update",title:"Update an Attio select option",method:"POST",kind:"command"},{suffix:"options.delete",title:"Delete an Attio select option",method:"POST",kind:"command"},{suffix:"statuses.list",title:"List Attio statuses",method:"GET",kind:"query"},{suffix:"statuses.create",title:"Create an Attio status",method:"POST",kind:"command"},{suffix:"statuses.update",title:"Update an Attio status",method:"POST",kind:"command"},{suffix:"records.query",title:"Query Attio records",method:"POST",kind:"query"},{suffix:"records.get",title:"Get an Attio record",method:"GET",kind:"query"},{suffix:"records.create",title:"Create an Attio record",method:"POST",kind:"command"},{suffix:"records.update",title:"Update an Attio record",method:"POST",kind:"command"},{suffix:"records.delete",title:"Delete an Attio record",method:"POST",kind:"command"},{suffix:"records.assert",title:"Assert an Attio record",method:"POST",kind:"command"},{suffix:"lists.list",title:"List Attio lists",method:"GET",kind:"query"},{suffix:"lists.get",title:"Get an Attio list",method:"GET",kind:"query"},{suffix:"lists.create",title:"Create an Attio list",method:"POST",kind:"command"},{suffix:"lists.update",title:"Update an Attio list",method:"POST",kind:"command"},{suffix:"entries.query",title:"Query Attio list entries",method:"POST",kind:"query"},{suffix:"entries.get",title:"Get an Attio list entry",method:"GET",kind:"query"},{suffix:"entries.create",title:"Create an Attio list entry",method:"POST",kind:"command"},{suffix:"entries.update",title:"Update an Attio list entry",method:"POST",kind:"command"},{suffix:"entries.delete",title:"Delete an Attio list entry",method:"POST",kind:"command"},{suffix:"entries.assert",title:"Assert an Attio list entry",method:"POST",kind:"command"},{suffix:"workspace-members.list",title:"List Attio workspace members",method:"GET",kind:"query"},{suffix:"workspace-members.get",title:"Get an Attio workspace member",method:"GET",kind:"query"},{suffix:"notes.list",title:"List Attio notes",method:"GET",kind:"query"},{suffix:"notes.get",title:"Get an Attio note",method:"GET",kind:"query"},{suffix:"notes.create",title:"Create an Attio note",method:"POST",kind:"command"},{suffix:"notes.delete",title:"Delete an Attio note",method:"POST",kind:"command"},{suffix:"tasks.list",title:"List Attio tasks",method:"GET",kind:"query"},{suffix:"tasks.get",title:"Get an Attio task",method:"GET",kind:"query"},{suffix:"tasks.create",title:"Create an Attio task",method:"POST",kind:"command"},{suffix:"tasks.update",title:"Update an Attio task",method:"POST",kind:"command"},{suffix:"tasks.delete",title:"Delete an Attio task",method:"POST",kind:"command"},{suffix:"threads.list",title:"List Attio threads",method:"GET",kind:"query"},{suffix:"threads.get",title:"Get an Attio thread",method:"GET",kind:"query"},{suffix:"comments.create",title:"Create an Attio comment",method:"POST",kind:"command"},{suffix:"comments.delete",title:"Delete an Attio comment",method:"POST",kind:"command"},{suffix:"meetings.list",title:"List Attio meetings",method:"GET",kind:"query"},{suffix:"meetings.get",title:"Get an Attio meeting",method:"GET",kind:"query"},{suffix:"call-recordings.get",title:"Get an Attio call recording",method:"GET",kind:"query"},{suffix:"transcripts.get",title:"Get an Attio transcript",method:"GET",kind:"query"},{suffix:"files.get",title:"Get an Attio file",method:"GET",kind:"query"},{suffix:"webhooks.list",title:"List Attio webhooks",method:"GET",kind:"query"},{suffix:"webhooks.get",title:"Get an Attio webhook",method:"GET",kind:"query"},{suffix:"webhooks.create",title:"Create an Attio webhook",method:"POST",kind:"command"},{suffix:"webhooks.update",title:"Update an Attio webhook",method:"POST",kind:"command"},{suffix:"webhooks.delete",title:"Delete an Attio webhook",method:"POST",kind:"command"},{suffix:"meta.identify",title:"Identify the Attio token",method:"GET",kind:"query"},{suffix:"mcp.remote.describe",title:"Describe Attio hosted MCP",method:"GET",kind:"query",input:Ee,output:tt}];function as(e){let t=`crm.attio.${e.suffix}`,r=e.kind==="query"?["read"]:e.suffix.endsWith(".delete")?["write","destructive","external-side-effect"]:["write","external-side-effect"],n={meta:{key:t,version:ns,title:e.title,description:e.description??`${e.title} through the documented Attio public API.`,goal:e.title,context:"Uses a tenant-scoped Attio connection. Availability and scopes are checked through capability preflight.",owners:is,tags:["crm","attio","gtm"],stability:"experimental"},io:{input:e.input??ss(e.suffix),output:e.output??et},policy:{auth:"user",policies:[],idempotent:e.kind==="query",escalate:e.kind==="command"?"human_review":null},execution:e.kind==="command"?{effects:r,approval:{required:!0,effects:r}}:{effects:r},transport:{rest:{method:e.method,path:`/api/contracts/${t}/v1.0.0`},mcp:{toolName:`${t.replaceAll(".","_")}-v1_0_0`}}};return e.kind==="command"?ts(n):rs(n)}function ss(e){let t=e.split(".").at(-1)??"";if(e.startsWith("options.")||e.startsWith("statuses."))return zr;let r=["attributes.","options.","statuses.","records.","entries.","comments.","call-recordings.","transcripts.","files."].some((n)=>e.startsWith(n));if(t==="list"||t==="query")return r?Vr:Qe;if(t==="get"||t==="delete")return r?Nr:Ye;if(t==="create"||t==="assert")return r?Hr:Xe;if(t==="update")return r?Gr:Ze;return Ee}var cs=os.map(as);function Ig(e){return cs.reduce((t,r)=>t.register(r),e)}function Rg(e,t){return e.find((r)=>r.type===t)}function $r(e,t){return e.some((r)=>r.type===t)}function Ag(e,t=86400000){if(!e.lastValidatedAt)return!0;return Date.now()-new Date(e.lastValidatedAt).getTime()>t}function Le(e){return e.credentialManifest??ps(e)}function Cg(e,t){if(!e.supportedModes.includes(t))return;return Le(e).modes?.[t]}function Tg(e){let t=Le(e);if(t.exempt)return!0;return e.supportedModes.every((r)=>Boolean(t.modes?.[r]))}function Qr(e){if(!e.supportedModes.includes("managed"))return!0;let t=Le(e);if(t.exempt)return!0;return Boolean(t.modes?.managed?.evidence?.length)}function ps(e){let t=Jr(e.configSchema.schema),r=Jr(e.secretSchema.schema),n={};for(let i of e.supportedModes)n[i]={mode:i,configFields:t,secretFields:r,validationStrategy:i==="byok"&&e.byokSetup?"byok-lifecycle":"static-schema",rotation:{supported:i==="byok"?e.byokSetup?.keyRotationSupported===!0:!1},setupSteps:i==="byok"?e.byokSetup?.provisioningSteps??(e.byokSetup?.setupInstructions?[e.byokSetup.setupInstructions]:void 0):void 0,docsUrl:e.docsUrl,evidence:i==="managed"?ds(e,r):void 0};return{modes:n}}function ds(e,t){let r=[];if(e.docsUrl)r.push({kind:"provider-docs",ref:e.docsUrl,description:"Provider documentation anchors managed integration setup."});for(let n of e.supportedAuthMethods??[])r.push({kind:"auth-method",ref:n.type,description:"Supported auth method can be brokered without exposing raw secrets."});for(let n of t)r.push({kind:"secret-schema",ref:n.key,description:n.description??"Required secret is represented by schema and must be stored by reference."});return r.length?r:void 0}function Jr(e){if(!qt(e))return[];let t=Array.isArray(e.required)?new Set(e.required.filter((n)=>typeof n==="string")):new Set,r=qt(e.properties)?e.properties:{};return Object.entries(r).map(([n,i])=>({key:n,required:t.has(n),description:qt(i)&&typeof i.description==="string"?i.description:void 0}))}function qt(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Lg(e){let t=Yr(e.managedSupport),r=Yr(e.byokSupport);return{...e,managedSupport:t,byokSupport:r,supportedModes:[...e.supportedModes].sort(),tags:[...e.tags].sort(),transports:[...e.transports].sort(),authMethods:[...e.authMethods].sort(),implementationKeys:[...e.implementationKeys].sort(),searchText:e.searchText??en([e.key,e.label,e.description,e.category,...e.tags,...e.transports,...e.authMethods,...e.implementationKeys])}}function Yr(e){return typeof e==="boolean"?e:e.supported}function Dg(e){return{definitions:[...e].sort(Wt)}}function Xr(e,t){let r=Le(e),n=[...e.supportedModes].sort(),i=n.includes("managed"),s=n.includes("byok"),u=[...e.meta.tags??[]].sort(),c=ys(e.transports),z=fs(e.supportedAuthMethods),I=us({recordKind:"integration-spec",key:e.meta.key,version:e.meta.version,sourcePackage:t?.sourcePackage??"@lssm/lib.contracts-integrations"}),re=r.exempt&&r.exemptionReason?r.exemptionReason:i&&!Qr(e)?"Managed mode is declared without evidence; add credentialManifest evidence before production exposure.":void 0;return{id:I,key:e.meta.key,version:e.meta.version,label:e.meta.title??e.meta.key,description:e.meta.description,recordKind:"integration-spec",category:e.meta.category,sourcePackage:t?.sourcePackage??"@lssm/lib.contracts-integrations",sourcePath:t?.sourcePath??`packages/libs/contracts-integrations/src/integrations/providers/${e.meta.key}.ts`,supportedModes:n,managedSupport:i,byokSupport:s,tags:u,searchText:en([e.meta.key,e.meta.title,e.meta.description,e.meta.category,...u,...c,...z]),transports:c,authMethods:z,providerKey:e.meta.key,implementationKeys:[],exceptionRationale:re}}function _g(e,t=[],r=[]){let n=new Map(t.map((s)=>[s.definitionId,s])),i=new Map(r.map((s)=>[s.definitionId,s]));return e.map((s)=>{let u=n.get(s.id),c=i.get(s.id);return{...s,catalogAvailability:u?.availability??(s.recordKind==="exception"?"exception":"available"),availabilityReason:u?.reason,connectionActivation:c?.activation??"not-connected",connectionCount:c?.connectionCount??0,activeConnectionModes:c?.activeConnectionModes??[]}})}function qg(e,t={}){let r=ls(e)?e.definitions:e;return[...gs(r,t)].sort(Wt)}function ls(e){return!Array.isArray(e)}function Ug(e,t={}){return e.filter((r)=>Zr(r,t)).filter((r)=>rt(r.catalogAvailability,t.catalogAvailability)).filter((r)=>rt(r.connectionActivation,t.connectionActivation)).sort(Wt)}function us(e){return[e.recordKind,e.sourcePackage,e.key,e.version].map((t)=>t.replace(/[^a-z0-9]+/gi,"-").toLowerCase()).join(":")}function gs(e,t){return e.filter((r)=>t.includeExceptions||r.recordKind!=="exception").filter((r)=>Zr(r,t))}function Zr(e,t){return rt(e.category,t.category)&&rt(e.recordKind,t.recordKind)&&Ut(e.supportedModes,t.ownershipMode)&&Ut(e.transports,t.transport)&&Ut(e.authMethods,t.authMethod)&&ms(e.searchText,t.search)}function rt(e,t){if(!t)return!0;return(Array.isArray(t)?t:[t]).includes(e)}function Ut(e,t){if(!t)return!0;return(Array.isArray(t)?t:[t]).some((n)=>e.includes(n))}function ms(e,t){if(!t?.trim())return!0;return e.includes(t.trim().toLowerCase())}function en(e){return e.filter((t)=>typeof t==="string"&&t.length>0).join(" ").toLowerCase()}function ys(e){return[...new Set((e??[]).map((t)=>t.type))].sort()}function fs(e){return[...new Set((e??[]).map((t)=>t.type))].sort()}function Wt(e,t){return e.recordKind.localeCompare(t.recordKind)||e.key.localeCompare(t.key)||e.version.localeCompare(t.version)||e.id.localeCompare(t.id)}import{defineEvent as hs}from"@lssm/lib.contracts-spec/events";import{ScalarTypeEnum as Ft,SchemaModel as bs}from"@lssm/lib.schema";var De=Ft.NonEmptyString(),ks=new bs({name:"ClayHttpActionCallbackPayload",fields:{connectionId:{type:De,isOptional:!1},deliveryId:{type:De,isOptional:!1},callbackId:{type:De,isOptional:!1},runId:{type:De,isOptional:!1},routineId:{type:De,isOptional:!0},receivedAt:{type:Ft.DateTime(),isOptional:!1},payload:{type:Ft.JSONObject(),isOptional:!1}}}),tn=hs({meta:{key:"sales-intelligence.clay.callback.received",version:"1.0.0",description:"Normalized Clay HTTP action callback received.",stability:"beta",owners:["@platform.integrations"],tags:["sales-intelligence","clay","webhook"]},pii:["payload"],payload:ks}),Kg=[tn];function Ng(e){return e.register(tn)}import{defineCommand as Is,defineQuery as vs}from"@lssm/lib.contracts-spec/operations";var xs="1.0.0",Ss=[{suffix:"identity.get",title:"Get Clay identity",kind:"query",stability:"beta"},{suffix:"searches.create",title:"Create Clay search",kind:"command",stability:"beta"},{suffix:"searches.get",title:"Get Clay search",kind:"query",stability:"beta"},{suffix:"searches.results.list",title:"List Clay search results",kind:"query",stability:"beta"},{suffix:"routines.list",title:"List Clay routines",kind:"query",stability:"beta"},{suffix:"routines.get",title:"Get Clay routine",kind:"query",stability:"beta"},{suffix:"routines.execute",title:"Execute Clay routine",kind:"command",stability:"beta"},{suffix:"runs.get",title:"Get Clay run",kind:"query",stability:"beta"},{suffix:"tables.list",title:"List Clay tables",kind:"query",stability:"beta"},{suffix:"tables.get",title:"Get Clay table",kind:"query",stability:"beta"},{suffix:"tables.records.list",title:"List Clay table records",kind:"query",stability:"beta"},{suffix:"workflows.list",title:"List Clay workflows",kind:"query"},{suffix:"workflows.get",title:"Get Clay workflow",kind:"query"},{suffix:"workflows.execute",title:"Execute Clay workflow",kind:"command"},{suffix:"webhook-table.trigger",title:"Trigger Clay webhook table",kind:"command"},{suffix:"mcp.remote.describe",title:"Describe Clay hosted MCP",kind:"query",input:Ee,output:tt}];function ws(e){let t=`sales-intelligence.clay.${e.suffix}`,r=["searches.create","routines.execute","workflows.execute"].includes(e.suffix),n=e.kind==="query"?["read"]:r?["write","cost-bearing","external-side-effect"]:["write","external-side-effect"],i={meta:{key:t,version:xs,title:e.title,description:`${e.title} through Clay's documented developer platform.`,goal:e.title,context:"Public API capabilities are beta; Workflows are alpha and require an explicit capability opt-in. Tables are Enterprise and read-only.",owners:["@platform.integrations"],tags:["sales-intelligence","clay","gtm"],stability:e.stability??"experimental"},io:{input:e.input??Rs(e.suffix),output:e.output??et},policy:{auth:"user",policies:[],idempotent:e.kind==="query",escalate:e.kind==="command"?"human_review":null},execution:e.kind==="command"?{effects:n,approval:{required:!0,effects:n}}:{effects:n},economicEvidence:r?{required:!0,modelVersion:"provider-reported-v1",refs:[{id:`usage:clay:${e.suffix}`,kind:"usage",source:"@lssm/integration.provider-clay"},{id:`cost:clay:${e.suffix}`,kind:"cost",source:"@lssm/integration.provider-clay"}]}:void 0,transport:{rest:{method:e.kind==="command"?"POST":"GET",path:`/api/contracts/${t}/v1.0.0`},mcp:{toolName:`${t.replaceAll(".","_")}-v1_0_0`}}};return e.kind==="command"?Is(i):vs(i)}function Rs(e){if(e.endsWith(".list")||e==="identity.get"||e==="mcp.remote.describe")return Qe;if(e==="searches.create"||e==="webhook-table.trigger")return Xe;if(e.endsWith(".execute"))return Ze;return Ye}var Ps=Ss.map(ws);function Vg(e){return Ps.reduce((t,r)=>t.register(r),e)}var rn="1.0.0";function em(e){let{receipt:t}=e,r=[];if(t.schemaVersion!==rn)r.push(B("receipt_schema_mismatch","schemaVersion"));for(let[u,c]of As(t))if(!Cs(c))r.push(B("unsafe_or_missing_reference",u));for(let[u,c]of Os(t))if(!/^sha256:[a-f0-9]{64}$/.test(c))r.push(B("invalid_digest",u));if(t.evidenceRefs.length===0)r.push(B("evidence_required","evidenceRefs"));if(!Ts(t.scope,e.expectedScope))r.push(B("scope_mismatch","scope"));if(t.topologyDigest!==e.expectedTopologyDigest)r.push(B("topology_digest_mismatch","topologyDigest"));if(t.verificationState!=="verified")r.push(B("provider_verification_rejected","verificationState"));if(t.outcome!=="succeeded")r.push(B("provider_operation_failed","outcome"));let n=jt(e.now),i=jt(t.observedAt),s=jt(t.expiresAt);if(n===void 0)r.push(B("invalid_time","now"));if(i===void 0)r.push(B("invalid_time","observedAt"));if(s===void 0)r.push(B("invalid_time","expiresAt"));if(n!==void 0&&i!==void 0&&i>n)r.push(B("observation_in_future","observedAt"));if(i!==void 0&&s!==void 0&&s<=i)r.push(B("invalid_freshness_window","expiresAt"));if(r.length>0)return{state:"failed",violations:r};if(n!==void 0&&s!==void 0&&n>=s)return{state:"stale",violations:[B("receipt_expired","expiresAt")]};return{state:"verified",violations:[]}}function As(e){let t=Object.entries(e.scope).filter(([r])=>r!=="kind");return[["receiptRef",e.receiptRef],["providerKey",e.providerKey],["providerAccountRef",e.providerAccountRef],["providerObservationRef",e.providerObservationRef],...e.evidenceRefs.map((r)=>["evidenceRefs",r]),...t.map(([r,n])=>[`scope.${r}`,n])]}function Os(e){return[["topologyDigest",e.topologyDigest],["planDigest",e.planDigest],["effectDigest",e.effectDigest],["attestationDigest",e.attestationDigest]]}function Cs(e){return e.length>0&&e.length<=240&&!/[\s<>"']/u.test(e)&&!/(?:password|secret|token|credential)=/iu.test(e)}function Ts(e,t){if(e.kind!==t.kind||e.tenantId!==t.tenantId||e.workspaceId!==t.workspaceId||e.environmentId!==t.environmentId)return!1;if(e.kind==="workspace"||t.kind==="workspace")return!0;return e.integrationId===t.integrationId&&e.connectionId===t.connectionId}function jt(e){let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString()===e?t:void 0}function B(e,t){return{code:e,path:t,message:e}}import{sha256Hex as Ms}from"@lssm/lib.crypto-utils";function nm(e){let t=[e.serviceOperator,e.runtimePlacement,e.dataPlacement,e.credentialCustody,e.identityTrust,e.apiCommercialMode,e.networkMode,[...e.residencyRegions].sort(),e.evidencePlacement];return`sha256:${Ms(JSON.stringify(t))}`}function im(e){let t=[];if(e.residencyRegions.length===0)t.push({code:"residency_required",message:"At least one allowed residency region must be explicit.",path:"residencyRegions"});if(e.apiCommercialMode==="customer_keys"&&!["customer_vault","local_only","mixed"].includes(e.credentialCustody))t.push({code:"customer_keys_custody_mismatch",message:"Customer API keys must remain in customer or mixed custody.",path:"credentialCustody"});if(e.networkMode==="air_gapped"&&!["local_identity","customer_oidc"].includes(e.identityTrust))t.push({code:"air_gap_identity_mismatch",message:"Air-gapped runtimes require a local or customer-controlled identity authority.",path:"identityTrust"});if(e.runtimePlacement==="customer_local"&&e.dataPlacement==="lssm_managed"&&e.networkMode==="air_gapped")t.push({code:"air_gap_remote_data_mismatch",message:"An air-gapped local runtime cannot depend on LSSM-managed data.",path:"dataPlacement"});if(e.serviceOperator==="customer"&&e.runtimePlacement==="managed_cloud")t.push({code:"operator_runtime_mismatch",message:"Customer-operated services must identify customer cloud, local, or hybrid placement.",path:"runtimePlacement"});return{success:t.length===0,violations:t}}var Es=["endpoint","webhook-event","oauth-scope","hosted-mcp-tool","hosted-mcp-category"],Ls=["implemented","deferred","not-applicable"],Ds=["public","plan-gated","account-gated","vendor-unsupported"],_s=["stable","beta","alpha","deprecated"],qs=["supported","unsupported","discovered-at-connect","not-applicable"],nn=["api","localMcp","hostedMcp","inboundWebhook","outboundWebhook"];function _e(e,t,r){if(!t.includes(String(e)))throw Error(`${r} must be one of ${t.join(", ")}`)}function on(e,t){if(typeof e!=="string"||e.trim().length===0)throw Error(`${t} must be a non-empty string`)}function Us(e,t){let r=`rows[${t}].evidence`;if(on(e.evidence?.sourceUrl,`${r}.sourceUrl`),new URL(e.evidence.sourceUrl).protocol!=="https:")throw Error(`${r}.sourceUrl must use HTTPS`);if(!/^[a-f0-9]{64}$/.test(e.evidence.sha256))throw Error(`${r}.sha256 must be a lowercase SHA-256 digest`);if(!/^\d{4}-\d{2}-\d{2}$/.test(e.evidence.retrievedAt))throw Error(`${r}.retrievedAt must be YYYY-MM-DD`)}function dm(e,t={}){let r=new Set,n=new Set,i=new Set;for(let[s,u]of e.entries()){if(!u||typeof u!=="object")throw Error(`rows[${s}] must be an object`);let c=u;if(on(c.upstreamCapabilityId,`rows[${s}].upstreamCapabilityId`),r.has(c.upstreamCapabilityId))throw Error(`duplicate upstream capability ${c.upstreamCapabilityId}`);r.add(c.upstreamCapabilityId),_e(c.granularity,Es,`rows[${s}].granularity`),_e(c.implementationState,Ls,`rows[${s}].implementationState`),_e(c.availability,Ds,`rows[${s}].availability`),_e(c.stability,_s,`rows[${s}].stability`);for(let I of nn){let re=c.surfaces?.[I];if(!re)throw Error(`rows[${s}].surfaces.${I} is required`);if(_e(re.state,qs,`rows[${s}].surfaces.${I}.state`),["unsupported","not-applicable"].includes(re.state)&&!re.reason)throw Error(`rows[${s}].surfaces.${I}.reason is required`)}if(Us(c,s),!Array.isArray(c.testIds)||c.testIds.length===0)throw Error(`rows[${s}].testIds must not be empty`);if(c.availability==="vendor-unsupported"&&c.implementationState==="implemented")throw Error(`${c.upstreamCapabilityId} is vendor-unsupported`);let z=nn.map((I)=>c.surfaces[I].state);if(c.implementationState==="implemented"&&!z.some((I)=>I==="supported"))throw Error(`${c.upstreamCapabilityId} has no supported surface`);if(c.surfaces.localMcp.state==="supported"&&c.contract.operationKeys.length===0)throw Error(`${c.upstreamCapabilityId} local MCP requires an operation`);if(c.surfaces.inboundWebhook.state==="supported"&&c.contract.eventKeys.length===0)throw Error(`${c.upstreamCapabilityId} inbound webhook requires an event`);if(t.release&&c.implementationState==="deferred"&&!c.waiverArtifact)throw Error(`${c.upstreamCapabilityId} is deferred without a waiver`);for(let I of c.contract.operationKeys){if(n.has(I))throw Error(`operation ${I} maps to multiple capability units`);n.add(I)}for(let I of c.contract.eventKeys){if(i.has(I))throw Error(`event ${I} maps to multiple capability units`);i.add(I)}}}function lm(e,t){if(e.sha256!==t)throw Error(`${e.provider} capability evidence drift requires evidence review`)}function nt(e){return Object.freeze({...e})}function mm(e){let t=[],{row:r}=e,n=r.effects.some((s)=>["write","destructive","cost-bearing","external-side-effect"].includes(s));if(r.implementationState!=="implemented")t.push(`implementation:${r.implementationState}`);if(!e.connectionReady)t.push("connection:not-ready");if(r.availability==="plan-gated"&&!e.entitlements.includes(r.upstreamCapabilityId))t.push("entitlement:missing");if(r.availability==="account-gated")t.push("availability:discover-at-connect");if(r.availability==="vendor-unsupported")t.push("availability:vendor-unsupported");if(r.stability==="beta"&&!e.allowBeta)t.push("stability:beta-opt-in-required");if(r.stability==="alpha"&&!e.allowAlpha)t.push("stability:alpha-opt-in-required");let i=r.auth.scopes.filter((s)=>!e.grantedScopes.includes(s));if(i.length>0)t.push(`scopes:missing:${i.join(",")}`);if(r.surfaces[e.surface].state!=="supported")t.push(`surface:${r.surfaces[e.surface].state}`);if((e.surface==="inboundWebhook"||e.surface==="outboundWebhook")&&!e.webhookConfigured)t.push("webhook:not-configured");if(n&&!e.approvalAvailable)t.push("approval:required");return{ready:t.length===0,operationKeys:r.contract.operationKeys,eventKeys:r.contract.eventKeys,blockers:t,requiresApproval:n}}async function fm(e){if(e.rawBody.byteLength>e.maxBytes)return await e.store.quarantine(e.deliveryId,"payload-too-large"),{accepted:!1,duplicate:!1};if(!e.verify(e.rawBody))return await e.store.quarantine(e.deliveryId,"verification-failed"),{accepted:!1,duplicate:!1};let t=await e.store.claim(e.deliveryId,e.leaseMs??30000);if(!t.claimed||!t.leaseId)return{accepted:!0,duplicate:t.duplicate??!0};try{let r=e.normalize(e.rawBody,e.deliveryId),n=await e.handoff.persist({provider:e.provider,deliveryId:e.deliveryId,events:r,receivedAt:(e.now??(()=>new Date))().toISOString()});return await e.store.complete(e.deliveryId,t.leaseId),{accepted:!0,duplicate:!1,handoffReceiptId:n}}catch(r){let n=r instanceof Error?r.name:"unknown";throw await e.store.release(e.deliveryId,t.leaseId,n),r}}import{defineCommand as js,defineQuery as Bs}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as A,SchemaModel as it}from"@lssm/lib.schema";import{ScalarTypeEnum as a,SchemaModel as xe}from"@lssm/lib.schema";var an=new xe({name:"HealthActivityRecord",description:"Canonical activity entry normalized across wearable and health providers.",fields:{id:{type:a.ID(),isOptional:!1},tenantId:{type:a.ID(),isOptional:!1},connectionId:{type:a.ID(),isOptional:!1},providerKey:{type:a.NonEmptyString(),isOptional:!1},externalId:{type:a.NonEmptyString(),isOptional:!1},userId:{type:a.ID(),isOptional:!0},activityType:{type:a.NonEmptyString(),isOptional:!1},startedAt:{type:a.DateTime(),isOptional:!0},endedAt:{type:a.DateTime(),isOptional:!0},durationSeconds:{type:a.Float_unsecure(),isOptional:!0},distanceMeters:{type:a.Float_unsecure(),isOptional:!0},caloriesKcal:{type:a.Float_unsecure(),isOptional:!0},steps:{type:a.Int_unsecure(),isOptional:!0},metadata:{type:a.JSONObject(),isOptional:!0},createdAt:{type:a.DateTime(),isOptional:!1},updatedAt:{type:a.DateTime(),isOptional:!1}}}),sn=new xe({name:"HealthWorkoutRecord",description:"Canonical workout entry normalized across wearable and health providers.",fields:{id:{type:a.ID(),isOptional:!1},tenantId:{type:a.ID(),isOptional:!1},connectionId:{type:a.ID(),isOptional:!1},providerKey:{type:a.NonEmptyString(),isOptional:!1},externalId:{type:a.NonEmptyString(),isOptional:!1},userId:{type:a.ID(),isOptional:!0},workoutType:{type:a.NonEmptyString(),isOptional:!1},startedAt:{type:a.DateTime(),isOptional:!0},endedAt:{type:a.DateTime(),isOptional:!0},durationSeconds:{type:a.Float_unsecure(),isOptional:!0},distanceMeters:{type:a.Float_unsecure(),isOptional:!0},caloriesKcal:{type:a.Float_unsecure(),isOptional:!0},averageHeartRateBpm:{type:a.Float_unsecure(),isOptional:!0},maxHeartRateBpm:{type:a.Float_unsecure(),isOptional:!0},metadata:{type:a.JSONObject(),isOptional:!0},createdAt:{type:a.DateTime(),isOptional:!1},updatedAt:{type:a.DateTime(),isOptional:!1}}}),cn=new xe({name:"HealthSleepRecord",description:"Canonical sleep interval normalized across wearable and health providers.",fields:{id:{type:a.ID(),isOptional:!1},tenantId:{type:a.ID(),isOptional:!1},connectionId:{type:a.ID(),isOptional:!1},providerKey:{type:a.NonEmptyString(),isOptional:!1},externalId:{type:a.NonEmptyString(),isOptional:!1},userId:{type:a.ID(),isOptional:!0},startedAt:{type:a.DateTime(),isOptional:!1},endedAt:{type:a.DateTime(),isOptional:!1},durationSeconds:{type:a.Float_unsecure(),isOptional:!0},deepSleepSeconds:{type:a.Float_unsecure(),isOptional:!0},lightSleepSeconds:{type:a.Float_unsecure(),isOptional:!0},remSleepSeconds:{type:a.Float_unsecure(),isOptional:!0},awakeSeconds:{type:a.Float_unsecure(),isOptional:!0},sleepScore:{type:a.Float_unsecure(),isOptional:!0},metadata:{type:a.JSONObject(),isOptional:!0},createdAt:{type:a.DateTime(),isOptional:!1},updatedAt:{type:a.DateTime(),isOptional:!1}}}),pn=new xe({name:"HealthBiometricRecord",description:"Canonical biometric datapoint (e.g. resting HR, HRV, VO2 max, weight).",fields:{id:{type:a.ID(),isOptional:!1},tenantId:{type:a.ID(),isOptional:!1},connectionId:{type:a.ID(),isOptional:!1},providerKey:{type:a.NonEmptyString(),isOptional:!1},externalId:{type:a.NonEmptyString(),isOptional:!1},userId:{type:a.ID(),isOptional:!0},metricType:{type:a.NonEmptyString(),isOptional:!1},value:{type:a.Float_unsecure(),isOptional:!1},unit:{type:a.String_unsecure(),isOptional:!0},measuredAt:{type:a.DateTime(),isOptional:!1},metadata:{type:a.JSONObject(),isOptional:!0},createdAt:{type:a.DateTime(),isOptional:!1}}}),dn=new xe({name:"HealthNutritionRecord",description:"Canonical nutrition or hydration log normalized across providers.",fields:{id:{type:a.ID(),isOptional:!1},tenantId:{type:a.ID(),isOptional:!1},connectionId:{type:a.ID(),isOptional:!1},providerKey:{type:a.NonEmptyString(),isOptional:!1},externalId:{type:a.NonEmptyString(),isOptional:!1},userId:{type:a.ID(),isOptional:!0},loggedAt:{type:a.DateTime(),isOptional:!1},caloriesKcal:{type:a.Float_unsecure(),isOptional:!0},proteinGrams:{type:a.Float_unsecure(),isOptional:!0},carbsGrams:{type:a.Float_unsecure(),isOptional:!0},fatGrams:{type:a.Float_unsecure(),isOptional:!0},fiberGrams:{type:a.Float_unsecure(),isOptional:!0},hydrationMl:{type:a.Float_unsecure(),isOptional:!0},metadata:{type:a.JSONObject(),isOptional:!0},createdAt:{type:a.DateTime(),isOptional:!1},updatedAt:{type:a.DateTime(),isOptional:!1}}}),ln=new xe({name:"HealthWebhookEventRecord",description:"Normalized webhook event payload from a health provider.",fields:{id:{type:a.String_unsecure(),isOptional:!0},providerKey:{type:a.NonEmptyString(),isOptional:!1},eventType:{type:a.String_unsecure(),isOptional:!0},externalEntityId:{type:a.String_unsecure(),isOptional:!0},entityType:{type:a.String_unsecure(),isOptional:!0},receivedAt:{type:a.DateTime(),isOptional:!0},verified:{type:a.Boolean(),isOptional:!0},payload:{type:a.JSON(),isOptional:!0},metadata:{type:a.JSONObject(),isOptional:!0}}});var Ws=["name","email","phone","dateOfBirth","birthDate","height","weight","bodyFat","restingHeartRate","heartRateVariability","sleepDetails","notes","description","location"],E={activitiesSynced:"health.activities.synced",activitiesSyncFailed:"health.activities.sync_failed",workoutsSynced:"health.workouts.synced",workoutsSyncFailed:"health.workouts.sync_failed",sleepSynced:"health.sleep.synced",sleepSyncFailed:"health.sleep.sync_failed",biometricsSynced:"health.biometrics.synced",biometricsSyncFailed:"health.biometrics.sync_failed",nutritionSynced:"health.nutrition.synced",nutritionSyncFailed:"health.nutrition.sync_failed",webhookReceived:"health.webhooks.received",webhookRejected:"health.webhooks.rejected"};function un(e){let t={};for(let[r,n]of Object.entries(e)){if(Ws.includes(r)){t[r]=Fs(n);continue}if(Array.isArray(n)){t[r]=n.map((i)=>typeof i==="object"&&i!==null?un(i):i);continue}if(typeof n==="object"&&n!==null){t[r]=un(n);continue}t[r]=n}return t}function Fs(e){if(e==null)return"";let t=String(e);if(t.length<=4)return"*".repeat(t.length);return`${"*".repeat(Math.max(t.length-4,0))}${t.slice(-4)}`}var Ks=new it({name:"HealthListActivitiesInput",description:"Parameters for listing normalized activity entries.",fields:{tenantId:{type:A.ID(),isOptional:!1},connectionId:{type:A.ID(),isOptional:!0},userId:{type:A.ID(),isOptional:!0},from:{type:A.DateTime(),isOptional:!0},to:{type:A.DateTime(),isOptional:!0},cursor:{type:A.String_unsecure(),isOptional:!0},pageSize:{type:A.Int_unsecure(),isOptional:!0}}}),Ns=new it({name:"HealthListActivitiesOutput",description:"Paginated list of normalized activities.",fields:{activities:{type:an,isArray:!0,isOptional:!1},nextCursor:{type:A.String_unsecure(),isOptional:!0},hasMore:{type:A.Boolean(),isOptional:!0}}}),Hs=new it({name:"HealthSyncActivitiesInput",description:"Command payload to trigger provider activity synchronization.",fields:{tenantId:{type:A.ID(),isOptional:!1},connectionId:{type:A.ID(),isOptional:!0},userId:{type:A.ID(),isOptional:!0},from:{type:A.DateTime(),isOptional:!0},to:{type:A.DateTime(),isOptional:!0},cursor:{type:A.String_unsecure(),isOptional:!0},forceFullRefresh:{type:A.Boolean(),isOptional:!0}}}),Gs=new it({name:"HealthSyncActivitiesOutput",description:"Result of an activity synchronization run.",fields:{synced:{type:A.Int_unsecure(),isOptional:!1},failed:{type:A.Int_unsecure(),isOptional:!1},nextCursor:{type:A.String_unsecure(),isOptional:!0},errors:{type:A.String_unsecure(),isArray:!0,isOptional:!0}}}),Bt=Bs({meta:{key:"health.activities.list",version:"1.0.0",description:"List normalized activity entries synced from health integrations.",goal:"Provide app workflows with canonical activity data across providers and transports.",context:"Used by analytics dashboards, coaching workflows, and health summaries.",owners:["@platform.integrations"],tags:["health","activities","wearables"],stability:"experimental"},io:{input:Ks,output:Ns},policy:{auth:"user"}}),Kt=js({meta:{key:"health.activities.sync",version:"1.0.0",description:"Synchronize activity entries from the configured health provider.",goal:"Keep canonical activity records aligned with upstream provider sources.",context:"Triggered by scheduled jobs or manual refresh actions to maintain incremental sync state.",owners:["@platform.integrations"],tags:["health","activities","wearables"],stability:"experimental"},io:{input:Hs,output:Gs},policy:{auth:"admin"},telemetry:{success:{event:{key:E.activitiesSynced}},failure:{event:{key:E.activitiesSyncFailed}}}}),Mm={HealthListActivities:Bt,HealthSyncActivities:Kt};function gn(e){return e.register(Bt).register(Kt)}import{defineCommand as zs,defineQuery as Vs}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as R,SchemaModel as ot}from"@lssm/lib.schema";var $s=new ot({name:"HealthListBiometricsInput",description:"Parameters for listing normalized biometric datapoints.",fields:{tenantId:{type:R.ID(),isOptional:!1},connectionId:{type:R.ID(),isOptional:!0},userId:{type:R.ID(),isOptional:!0},metricTypes:{type:R.String_unsecure(),isArray:!0,isOptional:!0},from:{type:R.DateTime(),isOptional:!0},to:{type:R.DateTime(),isOptional:!0},cursor:{type:R.String_unsecure(),isOptional:!0},pageSize:{type:R.Int_unsecure(),isOptional:!0}}}),Js=new ot({name:"HealthListBiometricsOutput",description:"Paginated list of normalized biometric datapoints.",fields:{biometrics:{type:pn,isArray:!0,isOptional:!1},nextCursor:{type:R.String_unsecure(),isOptional:!0},hasMore:{type:R.Boolean(),isOptional:!0}}}),Qs=new ot({name:"HealthSyncBiometricsInput",description:"Command payload to synchronize biometric datapoints.",fields:{tenantId:{type:R.ID(),isOptional:!1},connectionId:{type:R.ID(),isOptional:!0},userId:{type:R.ID(),isOptional:!0},metricTypes:{type:R.String_unsecure(),isArray:!0,isOptional:!0},from:{type:R.DateTime(),isOptional:!0},to:{type:R.DateTime(),isOptional:!0},cursor:{type:R.String_unsecure(),isOptional:!0},forceFullRefresh:{type:R.Boolean(),isOptional:!0}}}),Ys=new ot({name:"HealthSyncBiometricsOutput",description:"Result of a biometric synchronization run.",fields:{synced:{type:R.Int_unsecure(),isOptional:!1},failed:{type:R.Int_unsecure(),isOptional:!1},nextCursor:{type:R.String_unsecure(),isOptional:!0},errors:{type:R.String_unsecure(),isArray:!0,isOptional:!0}}}),Nt=Vs({meta:{key:"health.biometrics.list",version:"1.0.0",description:"List normalized biometrics synced from connected health providers.",goal:"Expose canonical biometrics for health insights and automation.",context:"Used by readiness features, alerts, and trend-based decision workflows.",owners:["@platform.integrations"],tags:["health","biometrics","wearables"],stability:"experimental"},io:{input:$s,output:Js},policy:{auth:"user"}}),Ht=zs({meta:{key:"health.biometrics.sync",version:"1.0.0",description:"Synchronize biometric datapoints from provider sources.",goal:"Keep canonical biometrics synchronized for downstream analytics.",context:"Triggered by incremental sync jobs and manual refresh actions.",owners:["@platform.integrations"],tags:["health","biometrics","wearables"],stability:"experimental"},io:{input:Qs,output:Ys},policy:{auth:"admin"},telemetry:{success:{event:{key:E.biometricsSynced}},failure:{event:{key:E.biometricsSyncFailed}}}}),Um={HealthListBiometrics:Nt,HealthSyncBiometrics:Ht};function mn(e){return e.register(Nt).register(Ht)}import{defineCommand as Xs,defineQuery as Zs}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as O,SchemaModel as at}from"@lssm/lib.schema";var ec=new at({name:"HealthListNutritionInput",description:"Parameters for listing nutrition and hydration logs.",fields:{tenantId:{type:O.ID(),isOptional:!1},connectionId:{type:O.ID(),isOptional:!0},userId:{type:O.ID(),isOptional:!0},from:{type:O.DateTime(),isOptional:!0},to:{type:O.DateTime(),isOptional:!0},cursor:{type:O.String_unsecure(),isOptional:!0},pageSize:{type:O.Int_unsecure(),isOptional:!0}}}),tc=new at({name:"HealthListNutritionOutput",description:"Paginated list of normalized nutrition records.",fields:{nutrition:{type:dn,isArray:!0,isOptional:!1},nextCursor:{type:O.String_unsecure(),isOptional:!0},hasMore:{type:O.Boolean(),isOptional:!0}}}),rc=new at({name:"HealthSyncNutritionInput",description:"Command payload to synchronize nutrition records.",fields:{tenantId:{type:O.ID(),isOptional:!1},connectionId:{type:O.ID(),isOptional:!0},userId:{type:O.ID(),isOptional:!0},from:{type:O.DateTime(),isOptional:!0},to:{type:O.DateTime(),isOptional:!0},cursor:{type:O.String_unsecure(),isOptional:!0},forceFullRefresh:{type:O.Boolean(),isOptional:!0}}}),nc=new at({name:"HealthSyncNutritionOutput",description:"Result of a nutrition synchronization run.",fields:{synced:{type:O.Int_unsecure(),isOptional:!1},failed:{type:O.Int_unsecure(),isOptional:!1},nextCursor:{type:O.String_unsecure(),isOptional:!0},errors:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}}),Gt=Zs({meta:{key:"health.nutrition.list",version:"1.0.0",description:"List normalized nutrition and hydration records from connected providers.",goal:"Provide canonical nutrition data for health goals, coaching, and analytics.",context:"Used by nutrition reporting, diet workflows, and aggregate health views.",owners:["@platform.integrations"],tags:["health","nutrition","wearables"],stability:"experimental"},io:{input:ec,output:tc},policy:{auth:"user"}}),zt=Xs({meta:{key:"health.nutrition.sync",version:"1.0.0",description:"Synchronize nutrition records from provider sources.",goal:"Keep canonical nutrition records synchronized across connectors.",context:"Triggered by incremental sync jobs and manual refresh actions.",owners:["@platform.integrations"],tags:["health","nutrition","wearables"],stability:"experimental"},io:{input:rc,output:nc},policy:{auth:"admin"},telemetry:{success:{event:{key:E.nutritionSynced}},failure:{event:{key:E.nutritionSyncFailed}}}}),Nm={HealthListNutrition:Gt,HealthSyncNutrition:zt};function yn(e){return e.register(Gt).register(zt)}import{defineCommand as ic,defineQuery as oc}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as C,SchemaModel as st}from"@lssm/lib.schema";var ac=new st({name:"HealthListSleepInput",description:"Parameters for listing normalized sleep intervals.",fields:{tenantId:{type:C.ID(),isOptional:!1},connectionId:{type:C.ID(),isOptional:!0},userId:{type:C.ID(),isOptional:!0},from:{type:C.DateTime(),isOptional:!0},to:{type:C.DateTime(),isOptional:!0},cursor:{type:C.String_unsecure(),isOptional:!0},pageSize:{type:C.Int_unsecure(),isOptional:!0}}}),sc=new st({name:"HealthListSleepOutput",description:"Paginated list of normalized sleep intervals.",fields:{sleep:{type:cn,isArray:!0,isOptional:!1},nextCursor:{type:C.String_unsecure(),isOptional:!0},hasMore:{type:C.Boolean(),isOptional:!0}}}),cc=new st({name:"HealthSyncSleepInput",description:"Command payload to synchronize sleep intervals.",fields:{tenantId:{type:C.ID(),isOptional:!1},connectionId:{type:C.ID(),isOptional:!0},userId:{type:C.ID(),isOptional:!0},from:{type:C.DateTime(),isOptional:!0},to:{type:C.DateTime(),isOptional:!0},cursor:{type:C.String_unsecure(),isOptional:!0},forceFullRefresh:{type:C.Boolean(),isOptional:!0}}}),pc=new st({name:"HealthSyncSleepOutput",description:"Result of a sleep synchronization run.",fields:{synced:{type:C.Int_unsecure(),isOptional:!1},failed:{type:C.Int_unsecure(),isOptional:!1},nextCursor:{type:C.String_unsecure(),isOptional:!0},errors:{type:C.String_unsecure(),isArray:!0,isOptional:!0}}}),Vt=oc({meta:{key:"health.sleep.list",version:"1.0.0",description:"List normalized sleep intervals synced from health providers.",goal:"Provide canonical sleep data for recovery and coaching workflows.",context:"Used by sleep insights, readiness scoring, and trend reporting.",owners:["@platform.integrations"],tags:["health","sleep","wearables"],stability:"experimental"},io:{input:ac,output:sc},policy:{auth:"user"}}),$t=ic({meta:{key:"health.sleep.sync",version:"1.0.0",description:"Synchronize sleep intervals from connected providers.",goal:"Keep canonical sleep records aligned with upstream provider data.",context:"Triggered by scheduled jobs or manual refresh in health surfaces.",owners:["@platform.integrations"],tags:["health","sleep","wearables"],stability:"experimental"},io:{input:cc,output:pc},policy:{auth:"admin"},telemetry:{success:{event:{key:E.sleepSynced}},failure:{event:{key:E.sleepSyncFailed}}}}),Jm={HealthListSleep:Vt,HealthSyncSleep:$t};function fn(e){return e.register(Vt).register($t)}import{defineCommand as dc}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as Se,SchemaModel as hn}from"@lssm/lib.schema";var lc=new hn({name:"HealthWebhookIngestInput",description:"Payload for ingesting provider webhook notifications.",fields:{tenantId:{type:Se.ID(),isOptional:!1},providerKey:{type:Se.NonEmptyString(),isOptional:!1},headers:{type:Se.JSONObject(),isOptional:!1},rawBody:{type:Se.String_unsecure(),isOptional:!1}}}),uc=new hn({name:"HealthWebhookIngestOutput",description:"Result of health webhook processing.",fields:{accepted:{type:Se.Boolean(),isOptional:!1},event:{type:ln,isOptional:!0},reason:{type:Se.String_unsecure(),isOptional:!0}}}),Jt=dc({meta:{key:"health.webhooks.ingest",version:"1.0.0",description:"Ingest and normalize health provider webhook payloads.",goal:"Allow near-real-time updates for health entities while preserving deterministic ingestion.",context:"Triggered by configured webhook endpoints for official, aggregator, and unofficial connectors.",owners:["@platform.integrations"],tags:["health","webhooks","integrations"],stability:"experimental"},io:{input:lc,output:uc},policy:{auth:"admin"},telemetry:{success:{event:{key:E.webhookReceived}},failure:{event:{key:E.webhookRejected}}}}),ty={HealthWebhookIngest:Jt};function bn(e){return e.register(Jt)}import{defineCommand as gc,defineQuery as mc}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as T,SchemaModel as ct}from"@lssm/lib.schema";var yc=new ct({name:"HealthListWorkoutsInput",description:"Parameters for listing normalized workout entries.",fields:{tenantId:{type:T.ID(),isOptional:!1},connectionId:{type:T.ID(),isOptional:!0},userId:{type:T.ID(),isOptional:!0},from:{type:T.DateTime(),isOptional:!0},to:{type:T.DateTime(),isOptional:!0},cursor:{type:T.String_unsecure(),isOptional:!0},pageSize:{type:T.Int_unsecure(),isOptional:!0}}}),fc=new ct({name:"HealthListWorkoutsOutput",description:"Paginated list of normalized workouts.",fields:{workouts:{type:sn,isArray:!0,isOptional:!1},nextCursor:{type:T.String_unsecure(),isOptional:!0},hasMore:{type:T.Boolean(),isOptional:!0}}}),hc=new ct({name:"HealthSyncWorkoutsInput",description:"Command payload to synchronize workouts.",fields:{tenantId:{type:T.ID(),isOptional:!1},connectionId:{type:T.ID(),isOptional:!0},userId:{type:T.ID(),isOptional:!0},from:{type:T.DateTime(),isOptional:!0},to:{type:T.DateTime(),isOptional:!0},cursor:{type:T.String_unsecure(),isOptional:!0},forceFullRefresh:{type:T.Boolean(),isOptional:!0}}}),bc=new ct({name:"HealthSyncWorkoutsOutput",description:"Result of a workout synchronization run.",fields:{synced:{type:T.Int_unsecure(),isOptional:!1},failed:{type:T.Int_unsecure(),isOptional:!1},nextCursor:{type:T.String_unsecure(),isOptional:!0},errors:{type:T.String_unsecure(),isArray:!0,isOptional:!0}}}),Qt=mc({meta:{key:"health.workouts.list",version:"1.0.0",description:"List normalized workout entries synced from health integrations.",goal:"Provide canonical workout history across connected providers.",context:"Used by training plans, progress analytics, and recovery workflows.",owners:["@platform.integrations"],tags:["health","workouts","wearables"],stability:"experimental"},io:{input:yc,output:fc},policy:{auth:"user"}}),Yt=gc({meta:{key:"health.workouts.sync",version:"1.0.0",description:"Synchronize workouts from configured health providers.",goal:"Keep canonical workout records fresh for downstream experiences.",context:"Triggered by background sync jobs and manual refresh actions.",owners:["@platform.integrations"],tags:["health","workouts","wearables"],stability:"experimental"},io:{input:hc,output:bc},policy:{auth:"admin"},telemetry:{success:{event:{key:E.workoutsSynced}},failure:{event:{key:E.workoutsSyncFailed}}}}),sy={HealthListWorkouts:Qt,HealthSyncWorkouts:Yt};function kn(e){return e.register(Qt).register(Yt)}import{defineFeature as kc}from"@lssm/lib.contracts-spec/features";var dy=kc({meta:{key:"health",version:"1.0.0",title:"Health Integrations",description:"Unified health and wearable data sync for activities, workouts, sleep, biometrics, nutrition, and webhooks.",domain:"integrations",owners:["@platform.integrations"],tags:["health","wearables","integrations"],stability:"experimental"},operations:[{key:"health.activities.list",version:"1.0.0"},{key:"health.activities.sync",version:"1.0.0"},{key:"health.workouts.list",version:"1.0.0"},{key:"health.workouts.sync",version:"1.0.0"},{key:"health.sleep.list",version:"1.0.0"},{key:"health.sleep.sync",version:"1.0.0"},{key:"health.biometrics.list",version:"1.0.0"},{key:"health.biometrics.sync",version:"1.0.0"},{key:"health.nutrition.list",version:"1.0.0"},{key:"health.nutrition.sync",version:"1.0.0"},{key:"health.webhooks.ingest",version:"1.0.0"}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:"health",version:"1.0.0"}],requires:[{key:"identity",version:"1.0.0"}]}});function by(e){return bn(yn(mn(fn(kn(gn(e))))))}function Ic(e){let t=e.integrations.find((n)=>n.slot.slotId==="primaryHealth");if(!t)return{ok:!1,error:"primaryHealth slot is not bound in the resolved app config."};if(t.spec.meta.category!=="health")return{ok:!1,integration:t,error:`primaryHealth slot must bind a health integration, received "${t.spec.meta.category}".`};let r=t.connection.status;if(r==="disconnected"||r==="error")return{ok:!1,integration:t,error:`primaryHealth connection is in status "${r}".`};if(r==="unknown")return{ok:!1,integration:t,error:"primaryHealth connection health is unknown."};return{ok:!0,integration:t}}function vy(e){let t=Ic(e);if(!t.ok||!t.integration)throw Error(t.error??"Health integration not available.");return t.integration}import{defineCapability as vc}from"@lssm/lib.contracts-spec/capabilities";import{StabilityEnum as xc}from"@lssm/lib.contracts-spec/ownership";var Ry=vc({meta:{key:"health",version:"1.0.0",kind:"integration",stability:xc.Experimental,description:"Wearables and health data integrations capability.",owners:["@platform.integrations"],tags:["health","wearables","integrations"]}});var Ay=["linkedin.content.media.upload","linkedin.content.media.read","linkedin.identity.member.read","linkedin.identity.organization.read","linkedin.network.connections.read","linkedin.network.invitations.read","linkedin.network.invitations.write","linkedin.content.posts.draft","linkedin.content.posts.read","linkedin.content.posts.publish","linkedin.content.posts.manage","linkedin.community.comments.read","linkedin.community.comments.write","linkedin.community.reactions.read","linkedin.community.reactions.write","linkedin.messaging.threads.read","linkedin.messaging.messages.read","linkedin.messaging.messages.write","linkedin.sales.leads.search","linkedin.sales.accounts.search","linkedin.sales.crm-sync","linkedin.sales.profile-association","linkedin.sales.employment-validation","linkedin.analytics.community.read","linkedin.analytics.sales.read","linkedin.analytics.ads.read","linkedin.webhooks.subscriptions.manage","linkedin.webhooks.events.read","linkedin.leads.sync","linkedin.ads.accounts.read","linkedin.ads.campaigns.read","linkedin.ads.campaigns.write","linkedin.ads.creatives.write","linkedin.ads.audiences.read","linkedin.ads.reporting.read"];function Oy(e){return e?.state==="available"}function Cy(e,t){return e.capability===t.capability&&e.operationKey===t.operationKey&&e.effect===t.effect}function Ty(e){if(!e.requirement.actorTypes.includes(e.actorType))return be(e,"unavailable",[]);let t=e.installation.approvals.find((u)=>u.product===e.requirement.product);if(t?.state!=="approved")return be(e,"approval_required",[...t?.evidenceRefIds??[]]);let r=e.installation.children.find((u)=>u.connectionId===e.connectionId&&u.product===e.requirement.product);if(!r?.enabled)return be(e,"disabled",t.evidenceRefIds);if(!e.installation.grants.filter((u)=>u.id===r.grantId&&u.subject.type===e.actorType&&u.revokedAt===void 0).find((u)=>e.requirement.scopes.every((c)=>u.scopes.includes(c))))return be(e,"scope_missing",t.evidenceRefIds);let s=e.resource?e.installation.roles[e.resource.id]??[]:[];if(e.requirement.requiredRoles?.length&&!e.resource)return be(e,"role_missing",t.evidenceRefIds);if(e.resource&&e.requirement.requiredRoles?.length&&!e.requirement.requiredRoles.some((u)=>s.includes(u)))return be(e,"role_missing",t.evidenceRefIds);return be(e,"available",t.evidenceRefIds)}function be(e,t,r){let n={available:"Required product, grant, scopes, actor, role, and connection are available.",approval_required:"LinkedIn product approval is absent or not active.",scope_missing:"No active actor grant contains every required scope.",role_missing:"The actor lacks a required role on the target resource.",disabled:"The matching LinkedIn product connection is disabled or absent.",unavailable:"The provider does not expose this capability."};return{capability:e.capability,state:t,reason:n[t],requirement:e.requirement,providerApiVersion:e.providerApiVersion,evaluatedAt:e.evaluatedAt,actorType:e.actorType,resource:e.resource,remediation:t==="available"?void 0:"Review LinkedIn product approval, scopes, actor roles, and connection state.",evidenceRefIds:r}}function Ey(e){return Object.freeze({kind:e.kind,providerKey:e.providerKey,secretProvider:e.secretProvider,secretRef:e.secretRef,version:e.version,installationId:e.installationId,grantId:e.grantId,tokenVersion:e.tokenVersion,updatedAt:e.updatedAt})}function Dy(e){if(e.rawBody.byteLength>e.constraints.maxBodyBytes||e.constraints.maxBodyBytes<1||e.constraints.replayWindowMs<1)throw Error("LinkedIn webhook request violates body or replay limits");if(e.constraints.providerTimestamp){let r=Date.parse(e.constraints.receivedAt),n=Date.parse(e.constraints.providerTimestamp);if(!Number.isFinite(r)||!Number.isFinite(n)||Math.abs(r-n)>e.constraints.replayWindowMs)throw Error("LinkedIn webhook request is outside the replay window")}let t=e.binding;if([t.subscriptionId,t.tenantId,t.workspaceId,t.installationId,t.grantId,t.connectionId].some((r)=>r.trim().length===0))throw Error("LinkedIn webhook requires complete tenant binding")}function qy(e){for(let t of e.grants)if(t.installationId!==e.id||t.tenantId!==e.tenantId||t.workspaceId!==e.workspaceId)throw Error("LinkedIn grant crosses its installation boundary")}function Sc(e,t,r,n,i){return{key:e,kind:t,transport:r,capability:n,effect:i}}var v=(e,t,r="rest")=>({key:e,kind:"query",transport:r,capability:t,effect:"read"}),x=(e,t,r="write",n="rest")=>({key:e,kind:"command",transport:n,capability:t,effect:r}),In=[x("linkedin.content.media.initialize","linkedin.content.media.upload"),x("linkedin.content.media.transfer","linkedin.content.media.upload"),x("linkedin.content.media.finalize","linkedin.content.media.upload"),v("linkedin.content.media.get","linkedin.content.media.read"),v("linkedin.identity.member.get","linkedin.identity.member.read"),v("linkedin.identity.profiles.sync","linkedin.identity.member.read"),v("linkedin.identity.organizations.list","linkedin.identity.organization.read"),v("linkedin.identity.organizations.sync","linkedin.identity.organization.read"),v("linkedin.network.connections.list","linkedin.network.connections.read"),v("linkedin.network.connections.sync","linkedin.network.connections.read"),v("linkedin.network.invitations.list","linkedin.network.invitations.read"),x("linkedin.network.invitations.send","linkedin.network.invitations.write"),x("linkedin.network.invitations.respond","linkedin.network.invitations.write"),x("linkedin.content.posts.draft","linkedin.content.posts.draft","draft","local"),x("linkedin.content.posts.validate","linkedin.content.posts.draft","draft","local"),v("linkedin.content.posts.get","linkedin.content.posts.read"),x("linkedin.content.posts.publish","linkedin.content.posts.publish"),x("linkedin.content.posts.update","linkedin.content.posts.manage"),x("linkedin.content.posts.delete","linkedin.content.posts.manage"),x("linkedin.content.posts.reshare","linkedin.content.posts.publish"),v("linkedin.community.comments.list","linkedin.community.comments.read"),x("linkedin.community.comments.create","linkedin.community.comments.write"),x("linkedin.community.comments.reply","linkedin.community.comments.write"),x("linkedin.community.comments.update","linkedin.community.comments.write"),x("linkedin.community.comments.delete","linkedin.community.comments.write"),x("linkedin.community.comments.moderate","linkedin.community.comments.write"),v("linkedin.community.reactions.list","linkedin.community.reactions.read"),x("linkedin.community.reactions.create","linkedin.community.reactions.write"),x("linkedin.community.reactions.delete","linkedin.community.reactions.write"),v("linkedin.messaging.conversations.list","linkedin.messaging.threads.read"),v("linkedin.messaging.messages.list","linkedin.messaging.messages.read"),x("linkedin.messaging.messages.send","linkedin.messaging.messages.write"),x("linkedin.messaging.messages.reply","linkedin.messaging.messages.write"),v("linkedin.sales.leads.search","linkedin.sales.leads.search"),v("linkedin.sales.accounts.search","linkedin.sales.accounts.search"),x("linkedin.sales.crm.sync","linkedin.sales.crm-sync"),x("linkedin.sales.profiles.associate","linkedin.sales.profile-association"),v("linkedin.sales.employment.validate","linkedin.sales.employment-validation"),v("linkedin.analytics.community.read","linkedin.analytics.community.read"),v("linkedin.analytics.sales.read","linkedin.analytics.sales.read"),v("linkedin.analytics.ads.read","linkedin.analytics.ads.read"),x("linkedin.webhooks.subscriptions.manage","linkedin.webhooks.subscriptions.manage"),v("linkedin.webhooks.challenge.validate","linkedin.webhooks.events.read","webhook"),Sc("linkedin.webhooks.events.normalize","event","webhook","linkedin.webhooks.events.read","read"),v("linkedin.leads.responses.sync","linkedin.leads.sync"),v("linkedin.sync.backfill","linkedin.leads.sync"),v("linkedin.ads.accounts.list","linkedin.ads.accounts.read"),v("linkedin.ads.campaigns.list","linkedin.ads.campaigns.read"),x("linkedin.ads.campaigns.mutate","linkedin.ads.campaigns.write","spend"),x("linkedin.ads.creatives.mutate","linkedin.ads.creatives.write"),v("linkedin.ads.audiences.count","linkedin.ads.audiences.read"),v("linkedin.ads.reporting.read","linkedin.ads.reporting.read")];var jy=["linkedin.content.media.initialize","linkedin.content.media.transfer","linkedin.content.media.finalize","linkedin.content.media.get","linkedin.identity.member.get","linkedin.identity.profiles.sync","linkedin.identity.organizations.list","linkedin.identity.organizations.sync","linkedin.network.connections.list","linkedin.network.connections.sync","linkedin.network.invitations.list","linkedin.network.invitations.send","linkedin.network.invitations.respond","linkedin.content.posts.draft","linkedin.content.posts.validate","linkedin.content.posts.get","linkedin.content.posts.publish","linkedin.content.posts.update","linkedin.content.posts.delete","linkedin.content.posts.reshare","linkedin.community.comments.list","linkedin.community.comments.create","linkedin.community.comments.reply","linkedin.community.comments.update","linkedin.community.comments.delete","linkedin.community.comments.moderate","linkedin.community.reactions.list","linkedin.community.reactions.create","linkedin.community.reactions.delete","linkedin.messaging.conversations.list","linkedin.messaging.messages.list","linkedin.messaging.messages.send","linkedin.messaging.messages.reply","linkedin.sales.leads.search","linkedin.sales.accounts.search","linkedin.sales.crm.sync","linkedin.sales.profiles.associate","linkedin.sales.employment.validate","linkedin.analytics.community.read","linkedin.analytics.sales.read","linkedin.analytics.ads.read","linkedin.webhooks.subscriptions.manage","linkedin.webhooks.challenge.validate","linkedin.webhooks.events.normalize","linkedin.leads.responses.sync","linkedin.sync.backfill","linkedin.ads.accounts.list","linkedin.ads.campaigns.list","linkedin.ads.campaigns.mutate","linkedin.ads.creatives.mutate","linkedin.ads.audiences.count","linkedin.ads.reporting.read"];class pt extends Error{code;retryable;providerStatus;capability;constructor(e){super(e.message);this.name="LinkedInProviderError",this.code=e.code,this.retryable=e.retryable??!1,this.providerStatus=e.providerStatus,this.capability=e.capability}}function By(e){let t=In.find((r)=>r.key===e.operationKey);if(!t||t.effect!==e.effect||t.capability!==e.context.capability)throw new pt({code:"invalid_input",message:"LinkedIn operation key, effect, and capability must match stable operation metadata"});if((e.effect==="write"||e.effect==="spend")&&(!e.context.idempotencyKey||!e.context.authorityEvaluationRefId||!e.context.approvalRefId))throw new pt({code:"invalid_input",message:"LinkedIn writes require idempotency, authority, and approval references"});if(e.effect==="spend"&&(!wc(e.input)||typeof e.input.budgetGuardRefId!=="string"||typeof e.input.currency!=="string"||typeof e.input.maximumAmount!=="number"||e.input.maximumAmount<=0))throw new pt({code:"invalid_input",message:"LinkedIn spend requires a budget guard, currency, and positive maximum amount"})}function wc(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}var Ny={"linkedin.content.media.initialize":"initializeMedia","linkedin.content.media.transfer":"transferMedia","linkedin.content.media.finalize":"finalizeMedia","linkedin.content.media.get":"readMedia","linkedin.identity.member.get":"getMember","linkedin.identity.profiles.sync":"syncProfiles","linkedin.identity.organizations.list":"listOrganizations","linkedin.identity.organizations.sync":"syncOrganizations","linkedin.network.connections.list":"listConnections","linkedin.network.connections.sync":"syncConnections","linkedin.network.invitations.list":"listInvitations","linkedin.network.invitations.send":"sendInvitation","linkedin.network.invitations.respond":"respondToInvitation","linkedin.content.posts.draft":"draftPost","linkedin.content.posts.validate":"validatePost","linkedin.content.posts.get":"readPost","linkedin.content.posts.publish":"publishPost","linkedin.content.posts.update":"updatePost","linkedin.content.posts.delete":"deletePost","linkedin.content.posts.reshare":"resharePost","linkedin.community.comments.list":"listComments","linkedin.community.comments.create":"createComment","linkedin.community.comments.reply":"replyToComment","linkedin.community.comments.update":"updateComment","linkedin.community.comments.delete":"deleteComment","linkedin.community.comments.moderate":"moderateComment","linkedin.community.reactions.list":"listReactions","linkedin.community.reactions.create":"createReaction","linkedin.community.reactions.delete":"deleteReaction","linkedin.messaging.conversations.list":"listConversations","linkedin.messaging.messages.list":"listMessages","linkedin.messaging.messages.send":"sendMessage","linkedin.messaging.messages.reply":"replyToMessage","linkedin.sales.leads.search":"searchLeads","linkedin.sales.accounts.search":"searchAccounts","linkedin.sales.crm.sync":"syncCrm","linkedin.sales.profiles.associate":"associateProfile","linkedin.sales.employment.validate":"validateEmployment","linkedin.analytics.community.read":"readCommunityAnalytics","linkedin.analytics.sales.read":"readSalesAnalytics","linkedin.analytics.ads.read":"readAdvertisingAnalytics","linkedin.webhooks.subscriptions.manage":"manageSubscription","linkedin.webhooks.challenge.validate":"validateChallenge","linkedin.webhooks.events.normalize":"normalizeEvent","linkedin.leads.responses.sync":"syncLeadResponses","linkedin.sync.backfill":"backfill","linkedin.ads.accounts.list":"listAdAccounts","linkedin.ads.campaigns.list":"listCampaigns","linkedin.ads.campaigns.mutate":"mutateCampaign","linkedin.ads.creatives.mutate":"mutateCreative","linkedin.ads.audiences.count":"readAudienceCount","linkedin.ads.reporting.read":"readReporting"};import{defineQuery as xn}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as L,SchemaModel as er}from"@lssm/lib.schema";import{ScalarTypeEnum as p,SchemaModel as qe}from"@lssm/lib.schema";var dt=new qe({name:"MeetingParticipantRecord",description:"Canonical participant entry for meetings and transcripts from recorder providers.",fields:{id:{type:p.String_unsecure(),isOptional:!0},externalId:{type:p.String_unsecure(),isOptional:!0},name:{type:p.String_unsecure(),isOptional:!0},email:{type:p.String_unsecure(),isOptional:!0},role:{type:p.String_unsecure(),isOptional:!0},isExternal:{type:p.Boolean(),isOptional:!0},metadata:{type:p.JSONObject(),isOptional:!0}}}),vn=new qe({name:"MeetingTranscriptSegmentRecord",description:"A single transcript segment with speaker attribution.",fields:{index:{type:p.Int_unsecure(),isOptional:!0},speakerId:{type:p.String_unsecure(),isOptional:!0},speakerName:{type:p.String_unsecure(),isOptional:!0},speakerEmail:{type:p.String_unsecure(),isOptional:!0},text:{type:p.String_unsecure(),isOptional:!1},startTimeMs:{type:p.Float_unsecure(),isOptional:!0},endTimeMs:{type:p.Float_unsecure(),isOptional:!0},startTime:{type:p.DateTime(),isOptional:!0},endTime:{type:p.DateTime(),isOptional:!0},confidence:{type:p.Float_unsecure(),isOptional:!0},metadata:{type:p.JSONObject(),isOptional:!0}}}),lt=new qe({name:"MeetingRecord",description:"Canonical meeting metadata synced from meeting recorder providers.",fields:{id:{type:p.ID(),isOptional:!1},tenantId:{type:p.ID(),isOptional:!1},connectionId:{type:p.ID(),isOptional:!1},externalId:{type:p.NonEmptyString(),isOptional:!1},title:{type:p.String_unsecure(),isOptional:!0},summary:{type:p.String_unsecure(),isOptional:!0},organizer:{type:dt,isOptional:!0},invitees:{type:dt,isArray:!0,isOptional:!0},participants:{type:dt,isArray:!0,isOptional:!0},scheduledStartAt:{type:p.DateTime(),isOptional:!0},scheduledEndAt:{type:p.DateTime(),isOptional:!0},recordingStartAt:{type:p.DateTime(),isOptional:!0},recordingEndAt:{type:p.DateTime(),isOptional:!0},durationSeconds:{type:p.Float_unsecure(),isOptional:!0},meetingUrl:{type:p.URL(),isOptional:!0},recordingUrl:{type:p.URL(),isOptional:!0},shareUrl:{type:p.URL(),isOptional:!0},sourcePlatform:{type:p.String_unsecure(),isOptional:!0},language:{type:p.String_unsecure(),isOptional:!0},transcriptAvailable:{type:p.Boolean(),isOptional:!0},createdAt:{type:p.DateTime(),isOptional:!0},updatedAt:{type:p.DateTime(),isOptional:!0},metadata:{type:p.JSONObject(),isOptional:!0}}}),Xt=new qe({name:"MeetingTranscriptRecord",description:"Canonical transcript payload for a recorded meeting.",fields:{id:{type:p.ID(),isOptional:!1},meetingId:{type:p.ID(),isOptional:!1},tenantId:{type:p.ID(),isOptional:!1},connectionId:{type:p.ID(),isOptional:!1},externalId:{type:p.String_unsecure(),isOptional:!0},format:{type:p.String_unsecure(),isOptional:!0},text:{type:p.String_unsecure(),isOptional:!0},segments:{type:vn,isArray:!0,isOptional:!0},language:{type:p.String_unsecure(),isOptional:!0},sourceUrl:{type:p.URL(),isOptional:!0},generatedAt:{type:p.DateTime(),isOptional:!0},metadata:{type:p.JSONObject(),isOptional:!0},raw:{type:p.JSON(),isOptional:!0}}}),Zt=new qe({name:"MeetingRecorderWebhookEventRecord",description:"Normalized webhook event from a meeting recorder provider.",fields:{id:{type:p.String_unsecure(),isOptional:!0},providerKey:{type:p.String_unsecure(),isOptional:!0},eventType:{type:p.String_unsecure(),isOptional:!0},meetingId:{type:p.String_unsecure(),isOptional:!0},transcriptId:{type:p.String_unsecure(),isOptional:!0},recordingId:{type:p.String_unsecure(),isOptional:!0},receivedAt:{type:p.DateTime(),isOptional:!0},verified:{type:p.Boolean(),isOptional:!0},payload:{type:p.JSON(),isOptional:!0},metadata:{type:p.JSONObject(),isOptional:!0}}});var Rc=new er({name:"MeetingRecorderListMeetingsInput",description:"Parameters for listing meetings from a meeting recorder provider.",fields:{tenantId:{type:L.ID(),isOptional:!1},connectionId:{type:L.ID(),isOptional:!0},from:{type:L.DateTime(),isOptional:!0},to:{type:L.DateTime(),isOptional:!0},cursor:{type:L.String_unsecure(),isOptional:!0},pageSize:{type:L.Int_unsecure(),isOptional:!0},query:{type:L.String_unsecure(),isOptional:!0},organizerEmail:{type:L.String_unsecure(),isOptional:!0},participantEmail:{type:L.String_unsecure(),isOptional:!0},includeTranscript:{type:L.Boolean(),isOptional:!0},includeSummary:{type:L.Boolean(),isOptional:!0}}}),Pc=new er({name:"MeetingRecorderListMeetingsOutput",description:"Paginated list of meetings for a recorder provider.",fields:{meetings:{type:lt,isOptional:!1,isArray:!0},nextCursor:{type:L.String_unsecure(),isOptional:!0},hasMore:{type:L.Boolean(),isOptional:!0}}}),Ac=new er({name:"MeetingRecorderGetMeetingInput",description:"Parameters for retrieving a single meeting record.",fields:{tenantId:{type:L.ID(),isOptional:!1},meetingId:{type:L.ID(),isOptional:!1},connectionId:{type:L.ID(),isOptional:!0},includeTranscript:{type:L.Boolean(),isOptional:!0},includeSummary:{type:L.Boolean(),isOptional:!0}}}),tr=xn({meta:{key:"meeting-recorder.meetings.list",version:"1.0.0",description:"List meetings recorded by the configured meeting provider.",goal:"Provide downstream workflows with recent meetings and metadata.",context:"Used by integration hubs and sync workflows to enumerate meetings before pulling transcripts.",owners:["@platform.integrations"],tags:["meeting-recorder","meetings","transcripts"],stability:"experimental"},io:{input:Rc,output:Pc},policy:{auth:"user"}}),rr=xn({meta:{key:"meeting-recorder.meetings.get",version:"1.0.0",description:"Retrieve metadata for a single meeting recording.",goal:"Allow downstream experiences to display detailed meeting metadata.",context:"Used when drilling into a specific meeting from a transcript or integration dashboard.",owners:["@platform.integrations"],tags:["meeting-recorder","meetings"],stability:"experimental"},io:{input:Ac,output:lt},policy:{auth:"user"}}),mf={MeetingRecorderListMeetings:tr,MeetingRecorderGetMeeting:rr};function Sn(e){return e.register(tr).register(rr)}import{defineCommand as Tc,defineQuery as Mc}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as K,SchemaModel as ir}from"@lssm/lib.schema";var Oc=["email","organizerEmail","participantEmail","participants","invitees","attendees","speakerName","speakerEmail","name","phone","phoneNumber","displayName"],nr={meetingsSynced:"meeting-recorder.meetings.synced",meetingsSyncFailed:"meeting-recorder.meetings.sync_failed",transcriptsFetched:"meeting-recorder.transcripts.fetched",transcriptsFetchFailed:"meeting-recorder.transcripts.fetch_failed",transcriptsSynced:"meeting-recorder.transcripts.synced",transcriptsSyncFailed:"meeting-recorder.transcripts.sync_failed",webhookReceived:"meeting-recorder.webhooks.received",webhookRejected:"meeting-recorder.webhooks.rejected"};function wn(e){let t={};for(let[r,n]of Object.entries(e))if(Oc.includes(r))t[r]=Cc(n);else if(Array.isArray(n))t[r]=n.map((i)=>typeof i==="object"&&i!==null?wn(i):i);else if(typeof n==="object"&&n!==null)t[r]=wn(n);else t[r]=n;return t}function Cc(e){if(e==null)return"";let t=String(e);if(t.length<=4)return"*".repeat(t.length);return`${"*".repeat(Math.max(t.length-4,0))}${t.slice(-4)}`}var Ec=new ir({name:"MeetingRecorderGetTranscriptInput",description:"Parameters for fetching a meeting transcript.",fields:{tenantId:{type:K.ID(),isOptional:!1},meetingId:{type:K.ID(),isOptional:!1},connectionId:{type:K.ID(),isOptional:!0},includeSegments:{type:K.Boolean(),isOptional:!0},format:{type:K.String_unsecure(),isOptional:!0}}}),Lc=new ir({name:"MeetingRecorderSyncTranscriptInput",description:"Command payload to synchronise meeting transcripts.",fields:{tenantId:{type:K.ID(),isOptional:!1},meetingId:{type:K.ID(),isOptional:!1},connectionId:{type:K.ID(),isOptional:!0},forceRefresh:{type:K.Boolean(),isOptional:!0},triggerWebhooks:{type:K.Boolean(),isOptional:!0}}}),Dc=new ir({name:"MeetingRecorderSyncTranscriptOutput",description:"Result of a transcript synchronisation run.",fields:{synced:{type:K.Int_unsecure(),isOptional:!1},failed:{type:K.Int_unsecure(),isOptional:!1},errors:{type:K.String_unsecure(),isArray:!0,isOptional:!0},nextSyncSuggestedAt:{type:K.DateTime(),isOptional:!0}}}),or=Mc({meta:{key:"meeting-recorder.transcripts.get",version:"1.0.0",description:"Fetch the transcript for a specific meeting recording.",goal:"Expose meeting transcripts for downstream knowledge and analytics flows.",context:"Used by agents and dashboards to access the transcript for a selected meeting.",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts"],stability:"experimental"},io:{input:Ec,output:Xt},policy:{auth:"user"}}),ar=Tc({meta:{key:"meeting-recorder.transcripts.sync",version:"1.0.0",description:"Trigger a transcript sync from the meeting recorder provider.",goal:"Keep canonical transcripts aligned with external meeting providers.",context:"Invoked by scheduled jobs or webhooks when new transcripts are ready.",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts","sync"],stability:"experimental"},io:{input:Lc,output:Dc},policy:{auth:"admin"},telemetry:{success:{event:{key:nr.transcriptsSynced},properties:({input:e,output:t})=>{let r=e,n=t;return{tenantId:r?.tenantId,meetingId:r?.meetingId,synced:n?.synced,failed:n?.failed}}},failure:{event:{key:nr.transcriptsSyncFailed},properties:({input:e,error:t})=>{let r=e;return{tenantId:r?.tenantId,meetingId:r?.meetingId,error:t instanceof Error?t.message:String(t??"unknown")}}}}}),vf={MeetingRecorderGetTranscript:or,MeetingRecorderSyncTranscript:ar};function Rn(e){return e.register(or).register(ar)}import{defineCommand as _c}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as fe,SchemaModel as Pn}from"@lssm/lib.schema";var qc=new Pn({name:"MeetingRecorderWebhookIngestInput",description:"Payload for ingesting a meeting recorder webhook event.",fields:{tenantId:{type:fe.ID(),isOptional:!1},providerKey:{type:fe.String_unsecure(),isOptional:!1},connectionId:{type:fe.ID(),isOptional:!0},webhookId:{type:fe.String_unsecure(),isOptional:!0},headers:{type:fe.JSON(),isOptional:!0},payload:{type:fe.JSON(),isOptional:!1},receivedAt:{type:fe.DateTime(),isOptional:!0}}}),Uc=new Pn({name:"MeetingRecorderWebhookIngestOutput",description:"Result of processing a meeting recorder webhook.",fields:{accepted:{type:fe.Boolean(),isOptional:!1},event:{type:Zt,isOptional:!0}}}),sr=_c({meta:{key:"meeting-recorder.webhooks.ingest",version:"1.0.0",description:"Ingest a webhook from a meeting recorder provider.",goal:"Trigger transcript syncs or downstream workflows without polling.",context:"Used by webhook handlers to validate and normalize provider webhook events.",owners:["@platform.integrations"],tags:["meeting-recorder","webhooks","transcripts"],stability:"experimental"},io:{input:qc,output:Uc},policy:{auth:"admin"}}),Pf={MeetingRecorderWebhookIngest:sr};function An(e){return e.register(sr)}import{defineFeature as Wc}from"@lssm/lib.contracts-spec/features";var Cf=Wc({meta:{key:"meeting-recorder",version:"1.0.0",title:"Meeting Recorder Integration",description:"Meeting metadata, transcript retrieval, and webhook ingestion for meeting recorder providers.",domain:"integrations",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts","integrations"],stability:"experimental"},operations:[{key:"meeting-recorder.meetings.list",version:"1.0.0"},{key:"meeting-recorder.meetings.get",version:"1.0.0"},{key:"meeting-recorder.transcripts.get",version:"1.0.0"},{key:"meeting-recorder.transcripts.sync",version:"1.0.0"},{key:"meeting-recorder.webhooks.ingest",version:"1.0.0"}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:"meeting-recorder",version:"1.0.0"}],requires:[{key:"identity",version:"1.0.0"}]}});function Df(e){return An(Rn(Sn(e)))}import{defineCommand as Bc,defineQuery as Tn}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as w,SchemaModel as Ue}from"@lssm/lib.schema";import{ScalarTypeEnum as d,SchemaModel as cr}from"@lssm/lib.schema";var pr=new cr({name:"BankAccountRecord",description:"Canonical representation of a bank account synced from an open banking provider.",fields:{id:{type:d.ID(),isOptional:!1},tenantId:{type:d.ID(),isOptional:!1},userId:{type:d.ID(),isOptional:!1},connectionId:{type:d.ID(),isOptional:!1},externalId:{type:d.NonEmptyString(),isOptional:!1},institutionId:{type:d.NonEmptyString(),isOptional:!1},institutionName:{type:d.NonEmptyString(),isOptional:!1},institutionLogoUrl:{type:d.URL(),isOptional:!0},iban:{type:d.String_unsecure(),isOptional:!0},bic:{type:d.String_unsecure(),isOptional:!0},accountType:{type:d.NonEmptyString(),isOptional:!1},currency:{type:d.Currency(),isOptional:!1},displayName:{type:d.NonEmptyString(),isOptional:!1},accountNumberMasked:{type:d.String_unsecure(),isOptional:!0},productCode:{type:d.String_unsecure(),isOptional:!0},balance:{type:d.Float_unsecure(),isOptional:!0},availableBalance:{type:d.Float_unsecure(),isOptional:!0},lastSyncedAt:{type:d.DateTime(),isOptional:!1},createdAt:{type:d.DateTime(),isOptional:!1},updatedAt:{type:d.DateTime(),isOptional:!1},metadata:{type:d.JSONObject(),isOptional:!0}}}),On=new cr({name:"BankTransactionRecord",description:"Canonical transaction entry mapped from Powens into the open banking ledger.",fields:{id:{type:d.ID(),isOptional:!1},accountId:{type:d.ID(),isOptional:!1},tenantId:{type:d.ID(),isOptional:!1},connectionId:{type:d.ID(),isOptional:!1},externalId:{type:d.NonEmptyString(),isOptional:!1},amount:{type:d.Float_unsecure(),isOptional:!1},currency:{type:d.Currency(),isOptional:!1},date:{type:d.DateTime(),isOptional:!1},bookingDate:{type:d.DateTime(),isOptional:!0},valueDate:{type:d.DateTime(),isOptional:!0},description:{type:d.String_unsecure(),isOptional:!0},counterpartyName:{type:d.String_unsecure(),isOptional:!0},counterpartyAccount:{type:d.String_unsecure(),isOptional:!0},merchantCategoryCode:{type:d.String_unsecure(),isOptional:!0},rawCategory:{type:d.String_unsecure(),isOptional:!0},standardizedCategory:{type:d.String_unsecure(),isOptional:!0},transactionType:{type:d.NonEmptyString(),isOptional:!1},status:{type:d.NonEmptyString(),isOptional:!1},runningBalance:{type:d.Float_unsecure(),isOptional:!0},metadata:{type:d.JSONObject(),isOptional:!0},createdAt:{type:d.DateTime(),isOptional:!1},updatedAt:{type:d.DateTime(),isOptional:!1}}}),dr=new cr({name:"AccountBalanceRecord",description:"Canonical balance snapshot computed from Powens balance payloads.",fields:{id:{type:d.ID(),isOptional:!1},accountId:{type:d.ID(),isOptional:!1},tenantId:{type:d.ID(),isOptional:!1},connectionId:{type:d.ID(),isOptional:!1},balanceType:{type:d.NonEmptyString(),isOptional:!1},currentBalance:{type:d.Float_unsecure(),isOptional:!1},availableBalance:{type:d.Float_unsecure(),isOptional:!0},currency:{type:d.Currency(),isOptional:!1},lastUpdatedAt:{type:d.DateTime(),isOptional:!1},createdAt:{type:d.DateTime(),isOptional:!1},metadata:{type:d.JSONObject(),isOptional:!0}}});var Fc=["iban","bic","accountNumberMasked","accountNumber","counterpartyName","counterpartyAccount","description","merchantName","merchantCategoryCode","reference"],ce={accountsSynced:"openbanking.accounts.synced",accountsSyncFailed:"openbanking.accounts.sync_failed",transactionsSynced:"openbanking.transactions.synced",transactionsSyncFailed:"openbanking.transactions.sync_failed",balancesRefreshed:"openbanking.balances.refreshed",balancesRefreshFailed:"openbanking.balances.refresh_failed",overviewGenerated:"openbanking.overview.generated"};function Cn(e){let t={};for(let[r,n]of Object.entries(e))if(Fc.includes(r))t[r]=jc(n);else if(Array.isArray(n))t[r]=n.map((i)=>typeof i==="object"&&i!==null?Cn(i):i);else if(typeof n==="object"&&n!==null)t[r]=Cn(n);else t[r]=n;return t}function jc(e){if(e==null)return"";let t=String(e);if(t.length<=4)return"*".repeat(t.length);return`${"*".repeat(Math.max(t.length-4,0))}${t.slice(-4)}`}var Kc=new Ue({name:"OpenBankingListAccountsInput",description:"Parameters for listing bank accounts through the open banking provider.",fields:{tenantId:{type:w.ID(),isOptional:!1},userId:{type:w.ID(),isOptional:!1},connectionId:{type:w.ID(),isOptional:!0},includeBalances:{type:w.Boolean(),isOptional:!0},institutionId:{type:w.String_unsecure(),isOptional:!0},cursor:{type:w.String_unsecure(),isOptional:!0},pageSize:{type:w.Int_unsecure(),isOptional:!0}}}),Nc=new Ue({name:"OpenBankingListAccountsOutput",description:"Paginated list of bank accounts available to the tenant and user.",fields:{accounts:{type:pr,isOptional:!1,isArray:!0},nextCursor:{type:w.String_unsecure(),isOptional:!0},hasMore:{type:w.Boolean(),isOptional:!0}}}),Hc=new Ue({name:"OpenBankingGetAccountInput",description:"Parameters for retrieving a specific bank account.",fields:{tenantId:{type:w.ID(),isOptional:!1},accountId:{type:w.ID(),isOptional:!1},includeBalances:{type:w.Boolean(),isOptional:!0},includeLatestTransactions:{type:w.Boolean(),isOptional:!0}}}),Gc=new Ue({name:"OpenBankingSyncAccountsInput",description:"Command payload to trigger an account synchronisation against the open banking provider.",fields:{tenantId:{type:w.ID(),isOptional:!1},userId:{type:w.ID(),isOptional:!0},connectionId:{type:w.ID(),isOptional:!1},accountIds:{type:w.ID(),isArray:!0,isOptional:!0},forceFullRefresh:{type:w.Boolean(),isOptional:!0},triggerWorkflows:{type:w.Boolean(),isOptional:!0}}}),zc=new Ue({name:"OpenBankingSyncAccountsOutput",description:"Result of a bank account synchronisation run.",fields:{synced:{type:w.Int_unsecure(),isOptional:!1},failed:{type:w.Int_unsecure(),isOptional:!1},errors:{type:w.String_unsecure(),isArray:!0,isOptional:!0},nextSyncSuggestedAt:{type:w.DateTime(),isOptional:!0}}}),lr=Tn({meta:{key:"openbanking.accounts.list",version:"1.0.0",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:Kc,output:Nc},policy:{auth:"user"}}),ur=Tn({meta:{key:"openbanking.accounts.get",version:"1.0.0",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:Hc,output:pr},policy:{auth:"user"}}),gr=Bc({meta:{key:"openbanking.accounts.sync",version:"1.0.0",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:Gc,output:zc},policy:{auth:"admin"},telemetry:{success:{event:{key:ce.accountsSynced},properties:({input:e,output:t})=>{let r=e,n=t;return{tenantId:r?.tenantId,connectionId:r?.connectionId,synced:n?.synced,failed:n?.failed}}},failure:{event:{key:ce.accountsSyncFailed},properties:({input:e,error:t})=>{let r=e;return{tenantId:r?.tenantId,connectionId:r?.connectionId,error:t instanceof Error?t.message:String(t??"unknown")}}}}}),Hf={OpenBankingListAccounts:lr,OpenBankingGetAccount:ur,OpenBankingSyncAccounts:gr};function Mn(e){return e.register(lr).register(ur).register(gr)}import{defineCommand as Vc,defineQuery as $c}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as Y,SchemaModel as ut}from"@lssm/lib.schema";var Jc=new ut({name:"OpenBankingGetBalancesInput",description:"Parameters for retrieving bank account balances from the canonical ledger.",fields:{tenantId:{type:Y.ID(),isOptional:!1},accountId:{type:Y.ID(),isOptional:!1},balanceTypes:{type:Y.String_unsecure(),isArray:!0,isOptional:!0}}}),Qc=new ut({name:"OpenBankingGetBalancesOutput",description:"Canonical balances for a bank account.",fields:{balances:{type:dr,isOptional:!1,isArray:!0},asOf:{type:Y.DateTime(),isOptional:!0}}}),Yc=new ut({name:"OpenBankingRefreshBalancesInput",description:"Command payload to refresh balances for a bank account via the open banking provider.",fields:{tenantId:{type:Y.ID(),isOptional:!1},accountId:{type:Y.ID(),isOptional:!1},connectionId:{type:Y.ID(),isOptional:!0},balanceTypes:{type:Y.String_unsecure(),isArray:!0,isOptional:!0},forceRefresh:{type:Y.Boolean(),isOptional:!0}}}),Xc=new ut({name:"OpenBankingRefreshBalancesOutput",description:"Result of a balance refresh against the open banking provider.",fields:{balances:{type:dr,isOptional:!1,isArray:!0},refreshedAt:{type:Y.DateTime(),isOptional:!1},errors:{type:Y.String_unsecure(),isArray:!0,isOptional:!0}}}),mr=$c({meta:{key:"openbanking.balances.get",version:"1.0.0",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:Jc,output:Qc},policy:{auth:"user"}}),yr=Vc({meta:{key:"openbanking.balances.refresh",version:"1.0.0",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:Yc,output:Xc},policy:{auth:"admin"},telemetry:{success:{event:{key:ce.balancesRefreshed},properties:({input:e,output:t})=>{let r=e,n=t;return{tenantId:r?.tenantId,accountId:r?.accountId,refreshedAt:n?.refreshedAt,balanceCount:Array.isArray(n?.balances)?n?.balances.length:void 0}}},failure:{event:{key:ce.balancesRefreshFailed},properties:({input:e,error:t})=>{let r=e;return{tenantId:r?.tenantId,accountId:r?.accountId,error:t instanceof Error?t.message:String(t??"unknown")}}}}}),Qf={OpenBankingGetBalances:mr,OpenBankingRefreshBalances:yr};function En(e){return e.register(mr).register(yr)}import{defineCommand as Zc,defineQuery as ep}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as S,SchemaModel as gt}from"@lssm/lib.schema";var tp=new gt({name:"OpenBankingListTransactionsInput",description:"Parameters for listing bank transactions from the canonical ledger.",fields:{tenantId:{type:S.ID(),isOptional:!1},accountId:{type:S.ID(),isOptional:!1},from:{type:S.DateTime(),isOptional:!0},to:{type:S.DateTime(),isOptional:!0},cursor:{type:S.String_unsecure(),isOptional:!0},pageSize:{type:S.Int_unsecure(),isOptional:!0},direction:{type:S.String_unsecure(),isOptional:!0},minimumAmount:{type:S.Float_unsecure(),isOptional:!0},maximumAmount:{type:S.Float_unsecure(),isOptional:!0},category:{type:S.String_unsecure(),isOptional:!0}}}),rp=new gt({name:"OpenBankingListTransactionsOutput",description:"Paginated list of transactions for a bank account.",fields:{transactions:{type:On,isOptional:!1,isArray:!0},nextCursor:{type:S.String_unsecure(),isOptional:!0},hasMore:{type:S.Boolean(),isOptional:!0}}}),np=new gt({name:"OpenBankingSyncTransactionsInput",description:"Command payload to synchronise transactions from the open banking provider into the canonical ledger.",fields:{tenantId:{type:S.ID(),isOptional:!1},accountId:{type:S.ID(),isOptional:!1},from:{type:S.DateTime(),isOptional:!0},to:{type:S.DateTime(),isOptional:!0},connectionId:{type:S.ID(),isOptional:!0},includePending:{type:S.Boolean(),isOptional:!0},backfillDays:{type:S.Int_unsecure(),isOptional:!0}}}),ip=new gt({name:"OpenBankingSyncTransactionsOutput",description:"Result of a transaction synchronisation run.",fields:{synced:{type:S.Int_unsecure(),isOptional:!1},failed:{type:S.Int_unsecure(),isOptional:!1},earliestSyncedAt:{type:S.DateTime(),isOptional:!0},latestSyncedAt:{type:S.DateTime(),isOptional:!0},nextSinceToken:{type:S.String_unsecure(),isOptional:!0},errors:{type:S.String_unsecure(),isArray:!0,isOptional:!0}}}),fr=ep({meta:{key:"openbanking.transactions.list",version:"1.0.0",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:tp,output:rp},policy:{auth:"user"}}),hr=Zc({meta:{key:"openbanking.transactions.sync",version:"1.0.0",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:np,output:ip},policy:{auth:"admin"},telemetry:{success:{event:{key:ce.transactionsSynced},properties:({input:e,output:t})=>{let r=e,n=t;return{tenantId:r?.tenantId,accountId:r?.accountId,synced:n?.synced,failed:n?.failed,earliestSyncedAt:n?.earliestSyncedAt,latestSyncedAt:n?.latestSyncedAt}}},failure:{event:{key:ce.transactionsSyncFailed},properties:({input:e,error:t})=>{let r=e;return{tenantId:r?.tenantId,accountId:r?.accountId,error:t instanceof Error?t.message:String(t??"unknown")}}}}}),rh={OpenBankingListTransactions:fr,OpenBankingSyncTransactions:hr};function Ln(e){return e.register(fr).register(hr)}import{defineFeature as op}from"@lssm/lib.contracts-spec/features";var oh=op({meta:{key:"openbanking",version:"1.0.0",title:"Open Banking Integration",description:"Open banking account sync, balance refresh, and transaction synchronization",domain:"integrations",owners:["@platform.finance"],tags:["open-banking","powens","finance","banking"],stability:"experimental"},operations:[{key:"openbanking.accounts.sync",version:"1.0.0"},{key:"openbanking.accounts.list",version:"1.0.0"},{key:"openbanking.accounts.get",version:"1.0.0"},{key:"openbanking.balances.refresh",version:"1.0.0"},{key:"openbanking.balances.get",version:"1.0.0"},{key:"openbanking.transactions.sync",version:"1.0.0"},{key:"openbanking.transactions.list",version:"1.0.0"}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:"openbanking",version:"1.0.0"}],requires:[{key:"identity",version:"1.0.0"}]}});function dh(e){return En(Ln(Mn(e)))}function ap(e){let t=e.integrations.find((n)=>n.slot.slotId==="primaryOpenBanking");if(!t)return{ok:!1,error:"primaryOpenBanking slot is not bound in the resolved app config."};let r=t.connection.status;if(r==="error"||r==="disconnected")return{ok:!1,integration:t,error:`primaryOpenBanking connection is in status "${r}".`};if(r==="unknown")return{ok:!1,integration:t,error:"primaryOpenBanking connection health is unknown."};return{ok:!0,integration:t}}function gh(e){let t=ap(e);if(!t.ok)throw Error(t.error??"Open banking integration not available.");if(!t.integration)throw Error(t.error??"Open banking integration not available.");return t.integration}function y({unsupportedModeReason:e,configFields:t,secretFields:r,rotationSupported:n=!1,setupSteps:i}){let s={mode:"byok",validationStrategy:"byok-lifecycle",rotation:{supported:n}};if(t)s.configFields=t;if(r)s.secretFields=r;if(i)s.setupSteps=i;return{modes:{byok:s},exempt:!0,exemptionReason:e}}import{SpecContractRegistry as sp}from"@lssm/lib.contracts-spec/registry";var cp=(e)=>`${e.key}.v${e.version}`;class br extends sp{constructor(e){super("integration",e)}getByCategory(e){return this.list().filter((t)=>t.meta.category===e)}}function hh(e){return cp(e)}var o=(e)=>e;var mt=[{key:"advertising.meta",title:"Meta Marketing API",url:"https://graph.facebook.com",docs:"https://developers.facebook.com/docs/marketing-api"},{key:"advertising.google",title:"Google Ads API",url:"https://googleads.googleapis.com",docs:"https://developers.google.com/google-ads/api/rest/examples"},{key:"advertising.tiktok",title:"TikTok Business API",url:"https://business-api.tiktok.com",docs:"https://business-api.tiktok.com/portal/docs"}].map((e)=>o({meta:{key:e.key,version:"1.0.0",title:e.title,description:"Scoped provider-native advertising mutations, reports and conversion delivery with exact authorization.",category:"analytics",domain:"marketing",owners:["@platform/marketing"],tags:["ads","marketing","conversions"],stability:"experimental"},supportedModes:["byok"],transports:[{type:"rest",baseUrl:e.url}],preferredTransport:"rest",supportedAuthMethods:e.key==="advertising.tiktok"?[{type:"header",headerName:"Access-Token"}]:[{type:"bearer",tokenField:"accessToken"}],credentialManifest:y({unsupportedModeReason:"Managed ad-account provisioning has not been qualified; ad accounts, API access, review and spend mandates are tenant-owned.",secretFields:[{key:"accessToken",required:!0},...e.key==="advertising.google"?[{key:"developerToken",required:!0}]:[]],rotationSupported:!1}),capabilities:{provides:[{key:"advertising.campaign.manage",version:"1.0.0"},{key:"advertising.reporting.read",version:"1.0.0"},{key:"advertising.conversion.upload",version:"1.0.0"},...e.key==="advertising.google"?[{key:"advertising.conversion.adjust",version:"1.0.0"}]:[]]},configSchema:{schema:{type:"object",properties:{accountId:{type:"string"},apiVersion:{type:"string"}},required:["accountId","apiVersion"]},example:{accountId:"123456789",apiVersion:e.key==="advertising.tiktok"?"v1.3":e.key==="advertising.google"?"v25":"v25.0"}},secretSchema:{schema:{type:"object",properties:{accessToken:{type:"string"},...e.key==="advertising.google"?{developerToken:{type:"string"}}:{}},required:["accessToken",...e.key==="advertising.google"?["developerToken"]:[]]},example:{accessToken:"example-token",...e.key==="advertising.google"?{developerToken:"example-developer-token"}:{}}},healthCheck:{method:"custom",timeoutMs:1e4},docsUrl:e.docs})),vh=mt[0],xh=mt[1],Sh=mt[2];function Dn(e){for(let t of mt)e.register(t);return e}import{StabilityEnum as pp}from"@lssm/lib.contracts-spec/ownership";function P(e){return o({meta:{key:e.key,version:e.version??"1.0.0",category:"custom",title:e.title,description:e.description,domain:"knowledge",owners:["platform.ai"],tags:["web-access",...e.tags],stability:pp.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed credentials are not shipped; tenants must supply provider-owned credentials through a SecretProvider.",secretFields:e.secretFields.map((t)=>({key:t})),rotationSupported:!1}),transports:e.transports,preferredTransport:e.preferredTransport,supportedAuthMethods:e.auth,capabilities:{provides:e.capabilities.map((t)=>({key:t,version:"1.0.0"}))},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string"},policyMode:{type:"string",enum:["governed","provider-pass-through","public-only"]},...e.configProperties}}},secretSchema:{schema:{type:"object",properties:Object.fromEntries(e.secretFields.map((t)=>[t,{type:"string"}]))},example:Object.fromEntries(e.secretFields.map((t)=>[t,"***"]))},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:e.docsUrl,byokSetup:{setupInstructions:"Resolve provider credentials at execution time through SecretProvider; never persist credentials in integration config.",keyRotationSupported:!1,quotaTrackingSupported:!0}})}var dp=P({key:"web-access.apify",title:"Apify Web Access",description:"Apify REST Actor runs, run status, cancellation, and datasets.",tags:["actors","scraping","datasets"],transports:[{type:"rest",baseUrl:"https://api.apify.com/v2"}],preferredTransport:"rest",auth:[{type:"bearer",tokenField:"apiToken"}],secretFields:["apiToken"],capabilities:["web.scrape","web.job","web.dataset.read"],docsUrl:"https://docs.apify.com/api/v2"});function _n(e){return e.register(dp)}import{StabilityEnum as lp}from"@lssm/lib.contracts-spec/ownership";var kr=["official-api","official-mcp","aggregator-api","aggregator-mcp","unofficial"],up=[{key:"health.activities.read",version:"1.0.0"},{key:"health.workouts.read",version:"1.0.0"},{key:"health.sleep.read",version:"1.0.0"},{key:"health.biometrics.read",version:"1.0.0"}],gp=[{type:"rest"},{type:"mcp",transport:"http"},{type:"webhook",inbound:{signatureHeader:"x-webhook-signature",signingAlgorithm:"hmac-sha256"}}],qn=[{type:"oauth2",grantType:"authorization_code",tokenUrl:"",scopes:[]},{type:"api-key"},{type:"bearer"},{type:"basic"}];function M(e){let t=e.supportedAuthMethods??mp(e);return o({meta:{key:e.key,version:"1.0.0",category:"health",title:e.title,description:e.description,domain:"health",owners:["platform.integrations"],tags:["health","wearables",...e.tags],stability:e.stability??lp.Experimental},supportedModes:e.supportedModes??["managed","byok"],transports:e.transports??gp,preferredTransport:"rest",supportedAuthMethods:t,capabilities:{provides:e.capabilities??[...up]},configSchema:{schema:{type:"object",properties:{apiBaseUrl:{type:"string",description:"Optional API base URL override for provider-specific regional or partner endpoints."},mcpUrl:{type:"string",description:"Optional MCP endpoint URL for provider tool transport."},oauthTokenUrl:{type:"string",description:"Optional OAuth token endpoint override used for access-token refresh flows."},defaultTransport:{type:"string",enum:[...kr],description:"Preferred transport strategy used before fallbacks are attempted."},strategyOrder:{type:"array",items:{type:"string",enum:[...kr]},description:"Ordered transport fallback strategy. Defaults to official API -> official MCP -> aggregator API -> aggregator MCP -> unofficial."},allowUnofficial:{type:"boolean",description:"Must be true to allow unofficial/automation connectors as fallback."},unofficialAllowList:{type:"array",items:{type:"string"},description:"Optional allowlist of provider keys allowed to use unofficial connectors."}}},example:{defaultTransport:e.defaultTransport??"official-api",strategyOrder:[...kr],allowUnofficial:!1,unofficialAllowList:[]}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string"},accessToken:{type:"string"},refreshToken:{type:"string"},tokenExpiresAt:{type:"string"},clientId:{type:"string"},clientSecret:{type:"string"},mcpAccessToken:{type:"string"},username:{type:"string"},password:{type:"string"}}},example:{apiKey:"provider-api-key",accessToken:"oauth-access-token",refreshToken:"oauth-refresh-token"}},healthCheck:{method:"list",timeoutMs:1e4},docsUrl:e.docsUrl,byokSetup:{setupInstructions:e.byokSetupInstructions??"Create provider credentials, set allowed scopes, and store credentials in secret provider.",requiredScopes:e.byokScopes,keyRotationSupported:!1,quotaTrackingSupported:!1}})}function mp(e){if(e.oauthTokenUrl){let t=e.oauthTokenUrl;return qn.map((r)=>{if(r.type==="oauth2")return{...r,tokenUrl:t,scopes:e.byokScopes??[]};return r})}return[...qn]}var yp=M({key:"health.apple-health",title:"Apple Health Bridge",description:"Apple Health ingestion bridge for HealthKit-exported or aggregator-routed data.",docsUrl:"https://developer.apple.com/health-fitness/",tags:["apple","healthkit","bridge"],defaultTransport:"aggregator-api",byokSetupInstructions:"Use on-device HealthKit authorization and route data through approved bridge endpoints or aggregator connectors."});function Un(e){return e.register(yp)}import{StabilityEnum as fp}from"@lssm/lib.contracts-spec/ownership";var hp=nt({ownership:"vendor-hosted",execution:"external-session",proxyability:"never",endpoint:"https://mcp.attio.com/mcp",discovery:"oauth-protected",accountDependentCatalog:!0,knownCategories:["crm-read","crm-write","tasks","notes","lists"],confirmationAuthority:"vendor-client",tokenHandling:"client-held"}),bp=o({meta:{key:"crm.attio",version:"1.0.0",category:"crm",title:"Attio CRM",description:"Attio objects, records, lists, tasks, notes, meetings, webhooks, OAuth, and hosted MCP.",domain:"crm",owners:["platform.integrations"],tags:["crm","attio","webhook","mcp","oauth"],stability:fp.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Attio access is unsupported; credentials are tenant-owned through an access token or OAuth application.",secretFields:[{key:"accessToken"},{key:"oauthClientSecret"}],rotationSupported:!0,setupSteps:["Create an Attio integration or OAuth application.","Store access tokens and client secrets through an integration.runtime secret provider.","Run capability preflight before registering operations."]}),transports:[{type:"rest",baseUrl:"https://api.attio.com/v2"},{type:"webhook"},{type:"mcp",transport:"http",url:hp.endpoint}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer",tokenField:"accessToken"},{type:"oauth2",grantType:"authorization_code",tokenUrl:"https://app.attio.com/authorize/token",authorizationUrl:"https://app.attio.com/authorize",scopes:["record_permission:read","record_permission:read-write","object_configuration:read","object_configuration:read-write","list_configuration:read","list_configuration:read-write","user_management:read","webhook:read-write"],pkce:!0}],capabilities:{provides:[{key:"crm.objects",version:"1.0.0"},{key:"crm.records",version:"1.0.0"},{key:"crm.lists",version:"1.0.0"},{key:"crm.activities",version:"1.0.0"},{key:"provider.webhook.attio",version:"1.0.0"},{key:"provider.mcp.attio",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string"},webhookPath:{type:"string"}}},example:{baseUrl:"https://api.attio.com/v2",webhookPath:"/webhooks/attio"}},secretSchema:{schema:{type:"object",properties:{accessToken:{type:"string"},oauthClientSecret:{type:"string"},webhookSigningSecret:{type:"string"}}},example:{accessToken:"attio_***",oauthClientSecret:"***",webhookSigningSecret:"***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.attio.com/",byokSetup:{setupInstructions:"Use an access token for a single workspace or OAuth authorization code with least-privilege scopes for multi-workspace applications.",validationEndpoint:"https://api.attio.com/v2/self",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Wn(e){return e.register(bp)}var kp=P({key:"web-access.bright-data",title:"Bright Data Web Access",description:"Bright Data search, scraping, datasets, browser automation, asynchronous delivery, MCP, and residential proxy access.",tags:["scraping","browser","residential-proxy","mcp"],transports:[{type:"sdk",packageName:"@brightdata/sdk",minVersion:"1.2.0",runtime:"node"},{type:"rest",baseUrl:"https://api.brightdata.com"},{type:"webhook",inbound:{verification:"network-allowlist",allowlistDocsUrl:"https://docs.brightdata.com/datasets/scrapers/chatgpt/data-delivery/webhooks",registrationSupported:!0}},{type:"websocket",url:"wss://brd.superproxy.io:9222",protocol:"cdp",discoveryOperationKey:"web-access.bright-data.browser.connection.describe"},{type:"mcp",transport:"http",url:"https://mcp.brightdata.com/mcp",toolPrefix:"bright_data"},{type:"mcp",transport:"stdio",command:"npx",args:["-y","@brightdata/mcp"],toolPrefix:"bright_data"},{type:"proxy",protocols:["http","https","socks5","socks5h"],host:"brd.superproxy.io",ports:{http:33335,https:33335,socks5:22228,socks5h:22228},remoteDns:!0,geoTargeting:!0,stickySessions:!0}],preferredTransport:"sdk",auth:[{type:"bearer",tokenField:"apiToken"},{type:"basic",usernameField:"proxyUsername",passwordField:"proxyPassword"}],secretFields:["apiToken","proxyUsername","proxyPassword","mcpToken"],capabilities:["web.search","web.fetch","web.extract","web.scrape","web.browser","web.proxy","provider.mcp.bright-data"],docsUrl:"https://docs.brightdata.com/introduction",configProperties:{zone:{type:"string"},country:{type:"string"}}});function Fn(e){return e.register(kp)}var Ip=P({key:"web-access.browserbase",title:"Browserbase Web Access",description:"Browserbase Search, Fetch, browser sessions, contexts, CDP, managed residential proxy configuration, and MCP.",tags:["browser","cdp","search","mcp"],transports:[{type:"sdk",packageName:"@browserbasehq/sdk",minVersion:"2.16.0",runtime:"node"},{type:"rest",baseUrl:"https://api.browserbase.com/v1"},{type:"websocket",url:"wss://connect.browserbase.com",protocol:"cdp",discoveryOperationKey:"web-access.browserbase.connection.describe"},{type:"mcp",transport:"http",url:"https://mcp.browserbase.com/mcp",toolPrefix:"browserbase"},{type:"mcp",transport:"stdio",command:"npx",args:["-y","@browserbasehq/mcp"],toolPrefix:"browserbase"},{type:"proxy",protocols:["http","https"],geoTargeting:!0,stickySessions:!0}],preferredTransport:"sdk",auth:[{type:"header",headerName:"X-BB-API-Key"},{type:"x402",authority:"injected-payment-port"}],secretFields:["apiKey","mcpToken","customProxyUrl"],capabilities:["web.search","web.fetch","web.browser","web.proxy.session","provider.mcp.browserbase"],docsUrl:"https://docs.browserbase.com/reference/introduction",configProperties:{projectId:{type:"string"}}});function jn(e){return e.register(Ip)}function $h(e,t){return e.find((r)=>r.type===t)}function Bn(e,t){return e.some((r)=>r.type===t)}import{StabilityEnum as vp}from"@lssm/lib.contracts-spec/ownership";var xp=nt({ownership:"vendor-hosted",execution:"external-session",proxyability:"never",endpoint:"https://api.clay.com/v3/mcp",discovery:"oauth-protected",accountDependentCatalog:!0,knownCategories:["searches","routines","tables","workflows"],confirmationAuthority:"vendor-client",tokenHandling:"client-held"}),Sp=o({meta:{key:"sales-intelligence.clay",version:"1.0.0",category:"custom",title:"Clay Developer Platform",description:"Clay Searches, Routines, runs, Enterprise read-only Tables, Workflows Alpha, webhooks, and hosted MCP.",domain:"sales-intelligence",owners:["platform.integrations"],tags:["sales-intelligence","clay","webhook","mcp","beta"],stability:vp.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Clay access is unsupported; Public API credentials and hosted MCP sessions are tenant-owned.",secretFields:[{key:"apiKey"},{key:"callbackSharedToken"}],rotationSupported:!0,setupSteps:["Create a Clay API key for headless Public API access.","Store the key through an integration.runtime secret provider.","Opt into Alpha Workflows explicitly when the account supports them."]}),transports:[{type:"rest",baseUrl:"https://api.clay.com/v3"},{type:"webhook"},{type:"mcp",transport:"http",url:xp.endpoint}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer",tokenField:"apiKey"},{type:"oauth2",grantType:"authorization_code",tokenUrl:"https://api.clay.com/oauth/token",authorizationUrl:"https://app.clay.com/oauth/authorize",scopes:["openid","offline_access"],pkce:!0}],capabilities:{provides:[{key:"sales-intelligence.search",version:"1.0.0"},{key:"sales-intelligence.routines",version:"1.0.0"},{key:"sales-intelligence.tables.read",version:"1.0.0"},{key:"sales-intelligence.workflows.alpha",version:"1.0.0"},{key:"provider.webhook.clay",version:"1.0.0"},{key:"provider.mcp.clay",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string"},allowAlpha:{type:"boolean"},callbackTokenHeader:{type:"string"}}},example:{baseUrl:"https://api.clay.com/v3",allowAlpha:!1,callbackTokenHeader:"x-contractspec-clay-token"}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string"},callbackSharedToken:{type:"string"}}},example:{apiKey:"clay_***",callbackSharedToken:"***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://developers.clay.com/",constraints:{quotas:{tableWrites:0}},byokSetup:{setupInstructions:"Use API keys for the Public API. Hosted MCP OAuth remains client-held and is never proxied by ContractSpec.",validationEndpoint:"https://api.clay.com/v3/me",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Kn(e){return e.register(Sp)}import{StabilityEnum as wp}from"@lssm/lib.contracts-spec/ownership";var Rp=o({meta:{key:"fallback.composio",version:"1.0.0",category:"custom",title:"Composio Universal Fallback",description:"Composio integration platform providing 850+ toolkits as a universal fallback for unsupported provider keys.",domain:"platform",owners:["platform.integrations"],tags:["composio","fallback","mcp","universal"],stability:wp.Beta},supportedModes:["managed","byok"],transports:[{type:"mcp",transport:"http",toolPrefix:"composio"},{type:"sdk",packageName:"@composio/core",runtime:"universal"}],preferredTransport:"mcp",supportedAuthMethods:[{type:"api-key",headerName:"X-API-Key"}],capabilities:{provides:[{key:"integration.fallback",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string",description:"Custom Composio API base URL (for self-hosted or enterprise)."},preferredTransport:{type:"string",enum:["mcp","sdk"],description:"Preferred transport mode: mcp (default) or sdk (advanced)."},toolkits:{type:"array",items:{type:"string"},description:"Restrict available toolkits (empty = all)."}}},example:{preferredTransport:"mcp",toolkits:["github","slack","gmail"]}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Composio API key (COMPOSIO_API_KEY)."}}},example:{apiKey:"comp_***"}},healthCheck:{method:"ping",timeoutMs:5000},docsUrl:"https://docs.composio.dev",byokSetup:{setupInstructions:"Sign up at composio.dev, create an API key from the dashboard, and provide it as the apiKey secret.",requiredScopes:[],keyRotationSupported:!1,quotaTrackingSupported:!0,provisioningSteps:["Create a Composio account at https://composio.dev","Navigate to Settings > API Keys","Generate a new API key","Store the key as COMPOSIO_API_KEY"]}});function Nn(e){return e.register(Rp)}import{StabilityEnum as Pp}from"@lssm/lib.contracts-spec/ownership";var Ap=o({meta:{key:"ai-voice-stt.deepgram",version:"1.0.0",category:"ai-voice-stt",title:"Deepgram Speech-to-Text",description:"Deepgram integration for real-time and batch speech-to-text transcription with speaker diarization.",domain:"ai",owners:["platform.ai"],tags:["voice","stt","transcription","diarization"],stability:Pp.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Deepgram credentials are not declared because speech-to-text access depends on tenant-owned Deepgram API keys; ContractSpec does not provide a first-party Deepgram managed account.",secretFields:[{key:"apiKey",required:!0}],rotationSupported:!0}),transports:[{type:"rest",baseUrl:"https://api.deepgram.com"},{type:"sdk",packageName:"@deepgram/sdk"}],preferredTransport:"sdk",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Token "}],capabilities:{provides:[{key:"ai.voice.stt",version:"1.0.0"},{key:"ai.voice.conversational",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{model:{type:"string",description:"Deepgram model to use (e.g. nova-3, nova-2, enhanced)."},language:{type:"string",description:"Default language code for transcription (e.g. en-US)."},enableDiarization:{type:"boolean",description:"Enable speaker diarization by default."},enableSmartFormat:{type:"boolean",description:"Enable smart formatting (punctuation, capitalization)."}}},example:{model:"nova-3",language:"en-US",enableDiarization:!0,enableSmartFormat:!0}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Deepgram API key with transcription permissions."}}},example:{apiKey:"dg_***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://developers.deepgram.com/docs",byokSetup:{setupInstructions:"Create a Deepgram API key with speech-to-text permissions and store it in your secret provider.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Hn(e){return e.register(Ap)}import{StabilityEnum as Op}from"@lssm/lib.contracts-spec/ownership";var Cp=o({meta:{key:"web-access.direct-fetch",version:"1.0.0",category:"custom",title:"Direct Public Web Fetch",description:"Credential-free HTTP fetching with mandatory public-network and redirect validation.",domain:"knowledge",owners:["platform.ai"],tags:["web-access","fetch","public-network"],stability:Op.Experimental},supportedModes:["managed","byok"],transports:[{type:"rest"}],preferredTransport:"rest",supportedAuthMethods:[],capabilities:{provides:[{key:"web.fetch",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{policyMode:{type:"string",enum:["governed","provider-pass-through","public-only"]}}}},secretSchema:{schema:{type:"object",properties:{}},example:{}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://github.com/lssm-tech/contractspec/tree/main/packages/integrations/provider-web-access"});function Gn(e){return e.register(Cp)}var Tp=M({key:"health.eightsleep",title:"Eight Sleep",description:"Eight Sleep integration for sleep sessions and biometrics via official, aggregator, or opt-in unofficial connectors.",docsUrl:"https://www.eightsleep.com/",tags:["eightsleep","sleep","unofficial"],capabilities:[{key:"health.sleep.read",version:"1.0.0"},{key:"health.biometrics.read",version:"1.0.0"}],defaultTransport:"aggregator-api"});function zn(e){return e.register(Tp)}import{StabilityEnum as Mp}from"@lssm/lib.contracts-spec/ownership";var Ep=o({meta:{key:"ai-voice.elevenlabs",version:"1.0.0",category:"ai-voice-tts",title:"ElevenLabs Text-to-Speech",description:"ElevenLabs integration for neural voice synthesis and voice catalog access.",domain:"ai",owners:["platform.ai"],tags:["voice","tts","stt"],stability:Mp.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.elevenlabs.io"},{type:"sdk",packageName:"elevenlabs"}],preferredTransport:"rest",supportedAuthMethods:[{type:"header",headerName:"xi-api-key"}],capabilities:{provides:[{key:"ai.voice.tts",version:"1.0.0"},{key:"ai.voice.stt",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{defaultVoiceId:{type:"string",description:"Optional default voice identifier for synthesis requests."}}},example:{defaultVoiceId:"pNInz6obpgDQGcFmaJgB"}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"ElevenLabs API key with text-to-speech permissions."}}},example:{apiKey:"eleven-***"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://elevenlabs.io/docs/api-reference/text-to-speech",constraints:{rateLimit:{rpm:120}},byokSetup:{setupInstructions:"Create an ElevenLabs API key and ensure the desired voices are accessible to the key scope.",keyRotationSupported:!1,quotaTrackingSupported:!0}});function Vn(e){return e.register(Ep)}import{StabilityEnum as Lp}from"@lssm/lib.contracts-spec/ownership";var Dp=o({meta:{key:"ai-voice.fal",version:"1.0.0",category:"ai-voice-tts",title:"Fal Generative Media Platform",description:"Fal integration for generative media models including voice, image, video, realtime, queue, storage, SDK, and MCP surfaces.",domain:"ai",owners:["platform.ai"],tags:["media","voice","tts","image","video","realtime","mcp"],stability:Lp.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Fal credentials are not declared because public Fal access depends on tenant-owned FAL_KEY/API-key or MCP auth; ContractSpec does not provision a first-party Fal account for tenants.",secretFields:[{key:"apiKey",required:!0}],rotationSupported:!1}),transports:[{type:"sdk",packageName:"@fal-ai/client",runtime:"universal"},{type:"rest",baseUrl:"https://fal.run"},{type:"mcp",transport:"http",url:"https://mcp.fal.ai/mcp"}],preferredTransport:"sdk",supportedAuthMethods:[{type:"header",headerName:"Authorization",valuePrefix:"Key "},{type:"bearer",tokenField:"apiKey"}],capabilities:{provides:[{key:"ai.voice.tts",version:"1.0.0"},{key:"ai.image.generation",version:"1.0.0"},{key:"ai.video.generation",version:"1.0.0"},{key:"ai.media.realtime",version:"1.0.0"},{key:"provider.mcp.fal",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{modelId:{type:"string",description:"Fal model endpoint identifier (e.g. fal-ai/chatterbox/text-to-speech)."},defaultVoiceUrl:{type:"string",description:"Optional reference audio URL used as default voice conditioning input."},defaultExaggeration:{type:"number",minimum:0,maximum:1,description:"Optional default exaggeration value for speech output."},defaultTemperature:{type:"number",minimum:0.05,maximum:2,description:"Optional default temperature for synthesis requests."},defaultCfg:{type:"number",minimum:0.1,maximum:1,description:"Optional default cfg value for synthesis requests."},pollIntervalMs:{type:"number",description:"Optional queue polling interval in milliseconds."},mcpUrl:{type:"string",description:"Optional Fal hosted MCP server URL."}}},example:{modelId:"fal-ai/chatterbox/text-to-speech",mcpUrl:"https://mcp.fal.ai/mcp",defaultVoiceUrl:"https://storage.googleapis.com/chatterbox-demo-samples/prompts/male_rickmorty.mp3",defaultExaggeration:0.25,defaultTemperature:0.7,defaultCfg:0.5,pollIntervalMs:1000}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Fal API key (FAL_KEY)."}}},example:{apiKey:"key-id:key-secret"}},healthCheck:{method:"custom",timeoutMs:7000},docsUrl:"https://fal.ai/models/fal-ai/chatterbox/text-to-speech/api",byokSetup:{setupInstructions:"Create a Fal API key, configure FAL_KEY for SDK/API calls, and use the hosted MCP URL with Bearer API-key auth. Fal account sign-in supports OAuth/SSO, but public MCP OAuth app auth is not documented as supported.",keyRotationSupported:!1,quotaTrackingSupported:!0}});function $n(e){return e.register(Dp)}import{StabilityEnum as _p}from"@lssm/lib.contracts-spec/ownership";var qp=o({meta:{key:"ai-image.fal",version:"1.0.0",category:"ai-image",title:"Fal Image Generation",description:"Fal integration for AI image generation using Flux and Stable Diffusion models.",domain:"ai",owners:["platform.ai"],tags:["image","generation","flux","stable-diffusion"],stability:_p.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Fal image credentials are not declared because image generation access depends on tenant-owned FAL_KEY/API-key credentials; ContractSpec does not provision a first-party Fal account for tenants.",secretFields:[{key:"apiKey",required:!0}],rotationSupported:!1}),transports:[{type:"rest",baseUrl:"https://fal.run"},{type:"sdk",packageName:"@fal-ai/client"}],preferredTransport:"rest",supportedAuthMethods:[{type:"header",headerName:"Authorization",valuePrefix:"Key "}],capabilities:{provides:[{key:"ai.image.generation",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{modelId:{type:"string",description:"Fal model endpoint (e.g. fal-ai/flux/dev)."},defaultFormat:{type:"string",enum:["png","jpg","webp"]},defaultGuidanceScale:{type:"number",minimum:1,maximum:20}}},example:{modelId:"fal-ai/flux/dev",defaultFormat:"png",defaultGuidanceScale:7.5}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Fal API key (FAL_KEY)."}}},example:{apiKey:"key-id:key-secret"}},healthCheck:{method:"custom",timeoutMs:7000},docsUrl:"https://fal.ai/models",byokSetup:{setupInstructions:"Create a Fal API key and ensure image generation model access is enabled.",keyRotationSupported:!1,quotaTrackingSupported:!0}});function Jn(e){return e.register(qp)}import{StabilityEnum as Up}from"@lssm/lib.contracts-spec/ownership";var Wp=o({meta:{key:"meeting-recorder.fathom",version:"1.0.0",category:"meeting-recorder",title:"Fathom Meeting Recorder",description:"Fathom External API for meetings, transcripts, and webhook events.",domain:"productivity",owners:["platform.integrations"],tags:["meeting-recorder","fathom","transcripts"],stability:Up.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Fathom credentials are not declared because meeting API and webhook access require tenant-owned Fathom API keys and workspace configuration.",secretFields:[{key:"apiKey",required:!0},{key:"webhookSecret"}],rotationSupported:!1}),transports:[{type:"rest"},{type:"webhook",inbound:{signatureHeader:"x-fathom-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"x-fathom-signature"}],capabilities:{provides:[{key:"meeting-recorder.meetings.read",version:"1.0.0"},{key:"meeting-recorder.transcripts.read",version:"1.0.0"},{key:"meeting-recorder.webhooks",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string",description:"Optional override for the Fathom API base URL. Defaults to https://api.fathom.ai/external/v1."},webhookUrl:{type:"string",description:"Webhook destination URL used when registering Fathom webhooks."},includeTranscript:{type:"boolean",description:"Include transcript data in Fathom webhook payloads."},includeSummary:{type:"boolean",description:"Include summary data in Fathom webhook payloads."},includeActionItems:{type:"boolean",description:"Include action items in Fathom webhook payloads."},includeCrmMatches:{type:"boolean",description:"Include CRM matches in Fathom webhook payloads."},triggeredFor:{type:"array",items:{type:"string"},description:"Recording scopes to trigger webhooks for (e.g., my_recordings)."}}},example:{baseUrl:"https://api.fathom.ai/external/v1",webhookUrl:"https://example.com/webhooks/fathom",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"]}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Fathom API key used in the X-Api-Key header."},webhookSecret:{type:"string",description:"Optional webhook secret used to verify Fathom webhook signatures."}}},example:{apiKey:"fathom-***",webhookSecret:"whsec_***"}},healthCheck:{method:"list",timeoutMs:8000},docsUrl:"https://developers.fathom.ai/",constraints:{rateLimit:{rpm:60}},byokSetup:{setupInstructions:"Generate an API key in Fathom settings and optionally configure webhooks for meeting content readiness.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function Qn(e){return e.register(Wp)}var Fp=P({key:"web-access.firecrawl",title:"Firecrawl Web Access",description:"Firecrawl REST search, scrape, extract, map, and crawl operations.",tags:["search","scraping","extract","crawl"],transports:[{type:"rest",baseUrl:"https://api.firecrawl.dev/v2"}],preferredTransport:"rest",auth:[{type:"bearer",tokenField:"apiKey"}],secretFields:["apiKey"],capabilities:["web.search","web.fetch","web.extract","web.map","web.crawl"],docsUrl:"https://docs.firecrawl.dev/api-reference/v2-introduction"});function Yn(e){return e.register(Fp)}import{StabilityEnum as jp}from"@lssm/lib.contracts-spec/ownership";var Bp=o({meta:{key:"meeting-recorder.fireflies",version:"1.0.0",category:"meeting-recorder",title:"Fireflies.ai Meeting Recorder",description:"Fireflies GraphQL API for meeting transcripts, metadata, and webhook events.",domain:"productivity",owners:["platform.integrations"],tags:["meeting-recorder","fireflies","transcripts"],stability:jp.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Fireflies credentials are not declared because GraphQL and webhook access depend on tenant-owned Fireflies API keys and developer settings.",secretFields:[{key:"apiKey",required:!0},{key:"webhookSecret"}],rotationSupported:!1}),transports:[{type:"rest",baseUrl:"https://api.fireflies.ai/graphql"},{type:"webhook",inbound:{signatureHeader:"x-fireflies-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"x-fireflies-signature"}],capabilities:{provides:[{key:"meeting-recorder.meetings.read",version:"1.0.0"},{key:"meeting-recorder.transcripts.read",version:"1.0.0"},{key:"meeting-recorder.webhooks",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string",description:"Optional override for the Fireflies GraphQL endpoint. Defaults to https://api.fireflies.ai/graphql."},webhookUrl:{type:"string",description:"Webhook destination URL configured in Fireflies developer settings."},webhookEvents:{type:"array",items:{type:"string"},description:"Webhook events to subscribe to (e.g., Transcription completed)."},transcriptsPageSize:{type:"number",description:"Number of transcripts to request per GraphQL query."}}},example:{baseUrl:"https://api.fireflies.ai/graphql",webhookUrl:"https://example.com/webhooks/fireflies",webhookEvents:["Transcription completed"],transcriptsPageSize:25}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Fireflies API key for GraphQL requests."},webhookSecret:{type:"string",description:"Optional webhook secret used to verify x-hub-signature HMAC payloads."}}},example:{apiKey:"fireflies-***",webhookSecret:"fireflies-webhook-secret"}},healthCheck:{method:"custom",timeoutMs:6000},docsUrl:"https://docs.fireflies.ai/getting-started/introduction",byokSetup:{setupInstructions:"Create a Fireflies API key and optionally configure webhook settings in Developer Settings.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function Xn(e){return e.register(Bp)}var Kp=M({key:"health.fitbit",title:"Fitbit",description:"Fitbit integration for activity, sleep, heart rate, and biometrics.",docsUrl:"https://dev.fitbit.com/build/reference/web-api/",tags:["fitbit","official-api"],byokScopes:["activity","heartrate","sleep","nutrition","weight","profile"]});function Zn(e){return e.register(Kp)}import{StabilityEnum as Np}from"@lssm/lib.contracts-spec/ownership";var Hp=o({meta:{key:"crm.fullenrich",version:"1.0.0",category:"crm",title:"FullEnrich Sales Intelligence",description:"FullEnrich contact enrichment, reverse email lookup, search, credits, webhook, and remote MCP metadata integration.",domain:"sales-intelligence",owners:["platform.integrations"],tags:["sales-intelligence","contact-enrichment","fullenrich","mcp"],stability:Np.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"FullEnrich credentials are tenant-owned; ContractSpec does not provide a shared Managed FullEnrich tenant.",secretFields:[{key:"apiKey"}],rotationSupported:!1,setupSteps:["Create a FullEnrich API key in the vendor dashboard.","Store the key in an integration.runtime secret provider.","Use OAuth only for the remote FullEnrich MCP endpoint."]}),transports:[{type:"rest",baseUrl:"https://app.fullenrich.com/api/v2"},{type:"webhook"},{type:"mcp",transport:"http",url:"https://mcp.fullenrich.com/mcp"}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer",tokenField:"apiKey"},{type:"oauth2",grantType:"authorization_code",tokenUrl:"https://mcp.fullenrich.com/oauth/token",authorizationUrl:"https://mcp.fullenrich.com/oauth/authorize",scopes:["openid","offline_access"],pkce:!0}],capabilities:{provides:[{key:"sales-intelligence.contact-enrichment",version:"1.0.0"},{key:"sales-intelligence.reverse-email",version:"1.0.0"},{key:"sales-intelligence.people-search",version:"1.0.0"},{key:"sales-intelligence.company-search",version:"1.0.0"},{key:"provider.mcp.fullenrich",version:"1.0.0"},{key:"provider.webhook.fullenrich",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string"},webhookPath:{type:"string"},pollingMinIntervalSeconds:{type:"number",minimum:60}}},example:{baseUrl:"https://app.fullenrich.com/api/v2",webhookPath:"/webhooks/fullenrich/enrichment",pollingMinIntervalSeconds:300}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"FullEnrich API key."}}},example:{apiKey:"fe_***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://fullenrich.com/",byokSetup:{setupInstructions:"Use API keys for FullEnrich REST APIs. Prefer webhooks for async enrichment and reverse-email results; use slow polling only as fallback.",requiredScopes:["FullEnrich API key"],validationEndpoint:"https://app.fullenrich.com/api/v2",keyRotationSupported:!1,quotaTrackingSupported:!0}});function ei(e){return e.register(Hp)}var Gp=M({key:"health.garmin",title:"Garmin",description:"Garmin integration for fitness activity, wellness, and sleep metrics.",docsUrl:"https://developer.garmin.com/gc-developer-program/overview/",tags:["garmin","official-api","partner"],byokSetupInstructions:"Use Garmin partner credentials or aggregator routes; enable unofficial connector only with explicit opt-in.",defaultTransport:"aggregator-api"});function ti(e){return e.register(Gp)}import{StabilityEnum as zp}from"@lssm/lib.contracts-spec/ownership";var Vp=o({meta:{key:"storage.gcs",version:"1.0.0",category:"storage",title:"Google Cloud Storage Buckets",description:"Google Cloud Storage integration for object storage and retrieval.",domain:"infrastructure",owners:["platform.infrastructure"],tags:["storage","gcs","google-cloud"],stability:zp.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://storage.googleapis.com"},{type:"sdk",packageName:"@google-cloud/storage",minVersion:"7.0.0"}],preferredTransport:"sdk",supportedAuthMethods:[{type:"service-account",credentialFormat:"json-key"},{type:"api-key"}],capabilities:{provides:[{key:"storage.objects",version:"1.0.0"}]},configSchema:{schema:{type:"object",required:["bucket"],properties:{bucket:{type:"string",description:"Primary bucket name used for storing objects."},prefix:{type:"string",description:"Optional prefix applied to object keys."}}},example:{bucket:"pfo-tenant-assets",prefix:"documents/"}},secretSchema:{schema:{type:"object",properties:{type:{type:"string",description:"Service account type field from Google credentials JSON (if provided)."},client_email:{type:"string"},private_key:{type:"string"},project_id:{type:"string"}}},example:{type:"service_account",client_email:"svc-account@example.iam.gserviceaccount.com",private_key:"-----BEGIN PRIVATE KEY-----...",project_id:"example-project"}},healthCheck:{method:"ping",timeoutMs:4000},docsUrl:"https://cloud.google.com/storage/docs/apis",constraints:{quotas:{storageGb:5120}},byokSetup:{setupInstructions:"Create a Google Cloud service account with Storage Object Admin role and upload the JSON credentials to the secret store.",keyRotationSupported:!1,quotaTrackingSupported:!0}});function ri(e){return e.register(Vp)}import{StabilityEnum as $p}from"@lssm/lib.contracts-spec/ownership";var Jp=o({meta:{key:"email.gmail",version:"1.0.0",category:"email",title:"Google Gmail API",description:"Gmail integration supporting inbound thread ingestion and outbound transactional email.",domain:"communications",owners:["platform.messaging"],tags:["email","gmail"],stability:$p.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://gmail.googleapis.com"},{type:"sdk",packageName:"googleapis",minVersion:"130.0.0"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/gmail.modify"],pkce:!0},{type:"service-account",credentialFormat:"json-key"}],capabilities:{provides:[{key:"email.inbound",version:"1.0.0"},{key:"email.outbound",version:"1.0.0"},{key:"provider.delta.watch",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{labelIds:{type:"array",items:{type:"string"},description:"Optional list of label IDs to scope inbound sync."},includeSpamTrash:{type:"boolean",description:"Whether to include spam or trash messages during sync."},webhookTopic:{type:"string",description:"Optional Pub/Sub topic used for Gmail watch notifications."},historyCursor:{type:"string",description:"Optional Gmail history cursor to resume incremental sync."}}},example:{labelIds:["INBOX"],includeSpamTrash:!1}},secretSchema:{schema:{type:"object",required:["clientId","clientSecret","refreshToken"],properties:{clientId:{type:"string",description:"OAuth client ID for the Google Cloud project."},clientSecret:{type:"string",description:"OAuth client secret for the Google Cloud project."},refreshToken:{type:"string",description:"OAuth refresh token for delegated Gmail access."},redirectUri:{type:"string",description:"Optional redirect URI used when issuing the refresh token."}}},example:{clientId:"xxx.apps.googleusercontent.com",clientSecret:"secret",refreshToken:"refresh-token"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://developers.google.com/gmail/api",constraints:{rateLimit:{rpm:600}},byokSetup:{setupInstructions:"Create an OAuth consent screen and credentials within Google Cloud Console, then authorize the Gmail scopes and store the resulting refresh token.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function ni(e){return e.register(Jp)}import{StabilityEnum as Qp}from"@lssm/lib.contracts-spec/ownership";var Yp=o({meta:{key:"calendar.google",version:"1.0.0",category:"calendar",title:"Google Calendar API",description:"Google Calendar integration for event creation, updates, and scheduling automations.",domain:"productivity",owners:["platform.messaging"],tags:["calendar","google"],stability:Qp.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://www.googleapis.com/calendar"},{type:"sdk",packageName:"googleapis"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/calendar"],pkce:!0},{type:"service-account",credentialFormat:"json-key"}],capabilities:{provides:[{key:"calendar.events",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{calendarId:{type:"string",description:"Default calendar identifier (defaults to primary)."}}},example:{calendarId:"primary"}},secretSchema:{schema:{type:"object",required:["clientEmail","privateKey"],properties:{clientEmail:{type:"string",description:"Service account client email."},privateKey:{type:"string",description:"Service account private key."},projectId:{type:"string",description:"Google Cloud project ID."}}},example:{clientEmail:"svc-calendar@example.iam.gserviceaccount.com",privateKey:"-----BEGIN PRIVATE KEY-----...",projectId:"calendar-project"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://developers.google.com/calendar/api",constraints:{},byokSetup:{setupInstructions:"Create a Google service account with Calendar access and share the target calendars with the service account email.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function ii(e){return e.register(Yp)}import{StabilityEnum as Xp}from"@lssm/lib.contracts-spec/ownership";var Zp=o({meta:{key:"storage.google-drive",version:"1.0.0",category:"storage",title:"Google Drive API",description:"Google Drive integration for file search, file retrieval, change watches, and knowledge ingestion.",domain:"productivity",owners:["platform.integrations"],tags:["storage","google-drive","knowledge"],stability:Xp.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://www.googleapis.com/drive/v3"},{type:"sdk",packageName:"googleapis"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/drive.readonly","https://www.googleapis.com/auth/drive.metadata.readonly"],pkce:!0},{type:"service-account",credentialFormat:"json-key"}],capabilities:{provides:[{key:"storage.objects",version:"1.0.0"},{key:"knowledge.ingestion.drive",version:"1.0.0"},{key:"provider.delta.watch",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{driveId:{type:"string",description:"Optional shared drive identifier."},query:{type:"string",description:"Optional Drive search query for scoped sync."},includeItemsFromAllDrives:{type:"boolean",description:"Whether shared-drive files are included."},webhookUrl:{type:"string",description:"Optional webhook endpoint for Drive change watches."}}},example:{query:"mimeType = 'text/plain' and trashed = false",includeItemsFromAllDrives:!0}},secretSchema:{schema:{type:"object",properties:{clientId:{type:"string"},clientSecret:{type:"string"},refreshToken:{type:"string"},clientEmail:{type:"string"},privateKey:{type:"string"},projectId:{type:"string"}}},example:{clientId:"xxx.apps.googleusercontent.com",refreshToken:"refresh-token"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://developers.google.com/drive/api",constraints:{rateLimit:{rpm:600}},byokSetup:{setupInstructions:"Authorize Google Drive readonly scopes or share the target Drive folders with a service account before enabling sync.",requiredScopes:["https://www.googleapis.com/auth/drive.readonly","https://www.googleapis.com/auth/drive.metadata.readonly"],keyRotationSupported:!1,quotaTrackingSupported:!1}});function oi(e){return e.register(Zp)}import{StabilityEnum as ed}from"@lssm/lib.contracts-spec/ownership";var td=o({meta:{key:"ai-voice.gradium",version:"1.0.0",category:"ai-voice-conversational",title:"Gradium Realtime Voice AI",description:"Gradium integration for realtime TTS, STT, voice library, REST, and WebSocket protocol access.",domain:"ai",owners:["platform.ai"],tags:["voice","tts","stt","realtime","websocket"],stability:ed.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Gradium credentials are not declared because ContractSpec does not provide a first-party Gradium managed account or OAuth app surface; tenants must supply their own Gradium API key.",secretFields:[{key:"apiKey",required:!0}],rotationSupported:!1}),transports:[{type:"rest",baseUrl:"https://api.gradium.ai/api"},{type:"websocket",url:"wss://api.gradium.ai/api",protocol:"mixed"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key",headerName:"x-api-key"}],capabilities:{provides:[{key:"ai.voice.tts",version:"1.0.0"},{key:"ai.voice.stt",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{defaultVoiceId:{type:"string",description:"Optional default voice identifier used for synthesis."},region:{type:"string",enum:["eu","us"],description:"Gradium region used by the SDK (eu or us)."},baseUrl:{type:"string",description:"Optional API base URL override for private routing or proxies."},websocketBaseUrl:{type:"string",description:"Optional WebSocket base URL for realtime TTS/STT."},timeoutMs:{type:"number",description:"Optional request timeout in milliseconds."},outputFormat:{type:"string",enum:["wav","pcm","opus","ulaw_8000","alaw_8000","pcm_16000","pcm_24000"],description:"Optional default output format used when no format is specified."}}},example:{defaultVoiceId:"YTpq7expH9539ERJ",region:"eu",baseUrl:"https://api.gradium.ai/api",websocketBaseUrl:"wss://api.gradium.ai/api",timeoutMs:15000,outputFormat:"wav"}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Gradium API key with TTS/STT access."}}},example:{apiKey:"gd_***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.gradium.ai/api-reference/introduction",byokSetup:{setupInstructions:"Create a Gradium API key, select the target region, and store credentials in your tenant secret provider. Public docs expose REST/WebSocket API-key access and Python SDK; no official JS SDK, MCP, or OAuth app surface is documented.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function ai(e){return e.register(td)}import{StabilityEnum as rd}from"@lssm/lib.contracts-spec/ownership";var nd=o({meta:{key:"meeting-recorder.granola",version:"1.0.0",category:"meeting-recorder",title:"Granola Meeting Notes",description:"Granola meeting notes and transcripts via Enterprise API or MCP transport.",domain:"productivity",owners:["platform.integrations"],tags:["meeting-recorder","granola","transcripts"],stability:rd.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Granola credentials are not declared because Granola access is tied to tenant/user browser OAuth, MCP proxy auth, or tenant enterprise API keys rather than a ContractSpec-managed provider account.",secretFields:[{key:"apiKey"},{key:"mcpAccessToken"}],rotationSupported:!1}),transports:[{type:"rest"},{type:"mcp",transport:"http"}],preferredTransport:"mcp",supportedAuthMethods:[{type:"api-key"},{type:"bearer"}],capabilities:{provides:[{key:"meeting-recorder.meetings.read",version:"1.0.0"},{key:"meeting-recorder.transcripts.read",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string",description:"Optional override for the Granola API base URL. Defaults to https://public-api.granola.ai for API transport."},transport:{type:"string",enum:["api","mcp"],description:"Transport mode for Granola integration. Use api for Enterprise API or mcp for broader MCP access."},mcpUrl:{type:"string",description:"Optional override for Granola MCP URL. Defaults to https://mcp.granola.ai/mcp."},mcpHeaders:{type:"object",additionalProperties:{type:"string"},description:"Optional static headers for MCP gateway/proxy setups."},pageSize:{type:"number",description:"Page size for listing notes (maximum 30 per Granola API)."}}},example:{transport:"mcp",mcpUrl:"https://mcp.granola.ai/mcp",pageSize:10}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string",description:"Granola API key used as a Bearer token for Enterprise API requests (transport=api)."},mcpAccessToken:{type:"string",description:"Optional bearer token for MCP proxy/gateway auth (transport=mcp)."}}},example:{mcpAccessToken:"granola-mcp-***"}},healthCheck:{method:"list",timeoutMs:8000},docsUrl:"https://docs.granola.ai/help-center/sharing/integrations/mcp",byokSetup:{setupInstructions:"Use Granola MCP for browser OAuth access, or configure an Enterprise API key for REST transport.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function si(e){return e.register(nd)}var id=o({meta:{key:"ai-media.higgsfield",version:"1.0.0",category:"ai-image",title:"Higgsfield Generative Media",description:"Asynchronous image, image-to-video and talking-presenter generation through a tenant-isolated HTTP adapter.",domain:"ai",owners:["platform.ai"],tags:["image","video","ugc","marketing"],stability:"experimental"},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed credential provisioning and billing have not been qualified. Each installation supplies its own scoped Higgsfield credentials.",secretFields:[{key:"apiKey",required:!0},{key:"apiSecret",required:!0}],rotationSupported:!1}),transports:[{type:"rest",baseUrl:"https://platform.higgsfield.ai"}],preferredTransport:"rest",supportedAuthMethods:[{type:"header",headerName:"Authorization",valuePrefix:"Key "}],capabilities:{provides:[{key:"ai.image.generation",version:"1.0.0"},{key:"ai.video.generation",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{outputHosts:{type:"array",items:{type:"string"}}},required:["outputHosts"]},example:{outputHosts:["cdn.example.com"]}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string"},apiSecret:{type:"string"}},required:["apiKey","apiSecret"]},example:{apiKey:"example-key-id",apiSecret:"example-key-secret"}},healthCheck:{method:"custom",timeoutMs:1e4},docsUrl:"https://github.com/higgsfield-ai/higgsfield-js",byokSetup:{setupInstructions:"Provide a Higgsfield key ID and secret through the host secret resolver. Qualify permitted input/output asset hosts and generation modes. Poll existing request IDs; do not retry uncertain submissions.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function ci(e){return e.register(id)}import{StabilityEnum as od}from"@lssm/lib.contracts-spec/ownership";var ad=o({meta:{key:"project-management.jira",version:"1.0.0",category:"project-management",title:"Jira Cloud",description:"Jira Cloud integration for creating and tracking work items.",domain:"productivity",owners:["@platform.integrations"],tags:["project-management","jira"],stability:od.Beta},supportedModes:["managed","byok"],transports:[{type:"rest"},{type:"webhook",inbound:{signatureHeader:"x-atlassian-webhook-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"basic"},{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://auth.atlassian.com/authorize",tokenUrl:"https://auth.atlassian.com/oauth/token",scopes:["read:jira-work","write:jira-work"]}],capabilities:{provides:[{key:"project-management.work-items",version:"1.0.0"}]},configSchema:{schema:{type:"object",required:["siteUrl"],properties:{siteUrl:{type:"string",description:"Jira Cloud site URL (e.g., https://acme.atlassian.net)."},projectKey:{type:"string",description:"Default Jira project key for new issues."},issueType:{type:"string",description:"Default Jira issue type (e.g., Task, Story)."},defaultLabels:{type:"array",items:{type:"string"},description:"Labels applied to each issue by default."},issueTypeMap:{type:"object",additionalProperties:{type:"string"},description:"Optional mapping from work item types to Jira issue types."}}},example:{siteUrl:"https://acme.atlassian.net",projectKey:"PM",issueType:"Task"}},secretSchema:{schema:{type:"object",required:["email","apiToken"],properties:{email:{type:"string",description:"Jira account email used for API token auth."},apiToken:{type:"string",description:"Jira Cloud API token for the account."}}},example:{email:"user@acme.com",apiToken:"jira_api_token"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/",constraints:{},byokSetup:{setupInstructions:"Create a Jira API token and store it with the associated account email.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function pi(e){return e.register(ad)}import{StabilityEnum as sd}from"@lssm/lib.contracts-spec/ownership";var cd=o({meta:{key:"project-management.linear",version:"1.0.0",category:"project-management",title:"Linear",description:"Linear integration for issue tracking and project management workflows.",domain:"productivity",owners:["@platform.integrations"],tags:["project-management","linear"],stability:sd.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.linear.app"},{type:"webhook",inbound:{signatureHeader:"linear-signature",signingAlgorithm:"hmac-sha256"}},{type:"sdk",packageName:"@linear/sdk"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://linear.app/oauth/authorize",tokenUrl:"https://api.linear.app/oauth/token",scopes:["read","write","issues:create"]}],capabilities:{provides:[{key:"project-management.work-items",version:"1.0.0"}]},configSchema:{schema:{type:"object",required:["teamId"],properties:{teamId:{type:"string",description:"Linear team ID that owns created issues."},projectId:{type:"string",description:"Optional default project ID for new issues."},stateId:{type:"string",description:"Optional default workflow state ID."},assigneeId:{type:"string",description:"Optional default assignee ID."},labelIds:{type:"array",items:{type:"string"},description:"Optional label IDs applied to each issue."},tagLabelMap:{type:"object",additionalProperties:{type:"string"},description:"Optional mapping of tags to Linear label IDs (tag -> labelId)."}}},example:{teamId:"team_123",projectId:"proj_456",labelIds:["label_1","label_2"]}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Linear API key (personal or service token)."}}},example:{apiKey:"lin_api_key"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://developers.linear.app",constraints:{},byokSetup:{setupInstructions:"Create a Linear API key with issue:write permission and store it as a secret.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function di(e){return e.register(cd)}import{StabilityEnum as pd}from"@lssm/lib.contracts-spec/ownership";function ne(e){let t=[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://www.linkedin.com/oauth/v2/authorization",tokenUrl:"https://www.linkedin.com/oauth/v2/accessToken",scopes:e.scopes,pkce:!0}];if(e.clientCredentials)t.push({type:"oauth2",grantType:"client_credentials",tokenUrl:"https://www.linkedin.com/oauth/v2/accessToken",scopes:e.scopes});return o({meta:{key:e.key,version:"1.0.0",category:e.category,title:e.title,description:e.description,domain:"linkedin",owners:["platform.integrations"],tags:["linkedin",...e.tags],stability:pd.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed LinkedIn credentials require separately evidenced product and agreement approval.",secretFields:[{key:"clientId",required:!0},{key:"clientSecret",required:!0}],rotationSupported:!0,setupSteps:["Create or select a LinkedIn developer application.","Obtain approval for every required LinkedIn product.","Store client credentials and OAuth grants in a secret provider."]}),transports:[{type:"rest",baseUrl:"https://api.linkedin.com",defaultHeaders:{"X-Restli-Protocol-Version":"2.0.0"},apiVersionHeader:"LinkedIn-Version"},...e.webhooks?[{type:"webhook"}]:[]],preferredTransport:"rest",supportedAuthMethods:t,versionPolicy:{currentVersion:"202605",supportedVersions:[{version:"202605",status:"stable"}],versionHeader:"LinkedIn-Version"},capabilities:{provides:e.capabilities.map((r)=>({key:r,version:"1.0.0"}))},configSchema:{schema:{type:"object",required:["installationId"],properties:{installationId:{type:"string"},apiVersion:{type:"string"}}}},secretSchema:{schema:{type:"object",required:["clientId","clientSecret"],properties:{clientId:{type:"string"},clientSecret:{type:"string"}}},example:{clientId:"***",clientSecret:"***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:e.docsUrl,byokSetup:{setupInstructions:"Use only official LinkedIn APIs and an approved developer application. Product approval is evaluated per installation.",requiredScopes:e.scopes,keyRotationSupported:!0,quotaTrackingSupported:!0}})}var dd=ne({key:"social-network.linkedin-community",title:"LinkedIn Community Management",description:"Official LinkedIn organization, post, comment, reaction, moderation, analytics, and webhook contracts.",category:"custom",tags:["organization","community-management","posts","webhooks"],capabilities:["linkedin.identity.organization.read","linkedin.content.posts.read","linkedin.content.posts.publish","linkedin.content.posts.manage","linkedin.community.comments.read","linkedin.community.comments.write","linkedin.community.reactions.read","linkedin.community.reactions.write","linkedin.analytics.community.read","linkedin.webhooks.subscriptions.manage","linkedin.webhooks.events.read"],scopes:["r_organization_social","w_organization_social","rw_organization_admin"],docsUrl:"https://learn.microsoft.com/en-us/linkedin/marketing/community-management/community-management-overview",webhooks:!0});function li(e){return e.register(dd)}var ld=ne({key:"advertising.linkedin-marketing",title:"LinkedIn Marketing",description:"Official LinkedIn ad accounts, campaigns, creatives, audiences, lead sync, reporting, and webhook contracts.",category:"analytics",tags:["marketing","ads","lead-sync","webhooks"],capabilities:["linkedin.analytics.ads.read","linkedin.leads.sync","linkedin.ads.accounts.read","linkedin.ads.campaigns.read","linkedin.ads.campaigns.write","linkedin.ads.creatives.write","linkedin.ads.audiences.read","linkedin.ads.reporting.read","linkedin.webhooks.subscriptions.manage","linkedin.webhooks.events.read"],scopes:["r_ads","rw_ads","r_ads_reporting","r_marketing_leadgen_automation"],docsUrl:"https://learn.microsoft.com/en-us/linkedin/marketing/",webhooks:!0,clientCredentials:!0});function ui(e){return e.register(ld)}var ud=ne({key:"social-network.linkedin-member",title:"LinkedIn Member",description:"Official LinkedIn sign-in, authenticated member profile, connection, and member-share contracts.",category:"custom",tags:["member","identity","connections","posts"],capabilities:["linkedin.identity.member.read","linkedin.network.connections.read","linkedin.content.posts.draft","linkedin.content.posts.read","linkedin.content.posts.publish"],scopes:["openid","profile","w_member_social"],docsUrl:"https://learn.microsoft.com/en-us/linkedin/shared/authentication/getting-access"});function gi(e){return e.register(ud)}var gd=ne({key:"messaging.linkedin",title:"LinkedIn Communications",description:"Partner-restricted official LinkedIn invitation, conversation, message, and inbox contracts.",category:"messaging",tags:["communications","invitations","inbox","approval-required"],capabilities:["linkedin.network.invitations.read","linkedin.network.invitations.write","linkedin.messaging.threads.read","linkedin.messaging.messages.read","linkedin.messaging.messages.write"],scopes:[],docsUrl:"https://learn.microsoft.com/en-us/linkedin/shared/integrations/communications/overview"});function mi(e){return e.register(gd)}var md=ne({key:"sales-intelligence.linkedin-sales-navigator",title:"LinkedIn Sales Navigator",description:"Partner-restricted official Sales Navigator lead, account, CRM Sync, association, and employment-validation contracts.",category:"crm",tags:["sales-navigator","crm-sync","approval-required"],capabilities:["linkedin.sales.leads.search","linkedin.sales.accounts.search","linkedin.sales.crm-sync","linkedin.sales.profile-association","linkedin.sales.employment-validation","linkedin.analytics.sales.read"],scopes:[],docsUrl:"https://learn.microsoft.com/en-us/linkedin/sales/"});function yi(e){return e.register(md)}var yd=P({key:"web-access.linkup",title:"Linkup Web Access",description:"Linkup Search, Fetch, Research, asynchronous Tasks, SDK, x402, and MCP access.",tags:["search","fetch","research","mcp"],transports:[{type:"sdk",packageName:"linkup-sdk",minVersion:"3.4.0",runtime:"node"},{type:"rest",baseUrl:"https://api.linkup.so/v1"},{type:"mcp",transport:"http",url:"https://mcp.linkup.so/mcp",toolPrefix:"linkup"},{type:"mcp",transport:"stdio",command:"npx",args:["-y","linkup-mcp-server"],toolPrefix:"linkup"}],preferredTransport:"sdk",auth:[{type:"bearer",tokenField:"apiKey"},{type:"x402",authority:"injected-payment-port"}],secretFields:["apiKey","mcpToken"],capabilities:["web.search","web.fetch","web.research","provider.mcp.linkup"],docsUrl:"https://docs.linkup.so/pages/documentation/get-started/introduction"});function fi(e){return e.register(yd)}var hi={key:"web-access.massive",title:"Massive Web Access",description:"Massive Web Render search/browser execution, CDP sessions, reporting, and residential proxy access.",tags:["render","browser","residential-proxy"],preferredTransport:"rest",secretFields:["apiKey","proxyUsername","proxyPassword"],capabilities:["web.search","web.fetch","web.browser","web.proxy","web.usage"],docsUrl:"https://docs.joinmassive.com/llms.txt"},fd=P({...hi,transports:[{type:"rest",baseUrl:"https://render.joinmassive.com"},{type:"websocket",url:"wss://render.joinmassive.com/browser",protocol:"cdp",discoveryOperationKey:"web-access.massive.browser.connection.describe"},{type:"proxy",protocols:["http","https","socks5","socks5h"],remoteDns:!0,geoTargeting:!0,stickySessions:!0}],auth:[{type:"header",headerName:"X-API-Key"},{type:"basic",usernameField:"proxyUsername",passwordField:"proxyPassword"}]}),hd=P({...hi,version:"1.1.0",transports:[{type:"rest",baseUrl:"https://render.joinmassive.com"},{type:"webhook",inbound:{verification:"host-policy",reason:"Massive callbacks have no advertised signature; bind an opaque route secret and host network policy.",registrationSupported:!1}},{type:"websocket",url:"wss://render.joinmassive.com/browser",protocol:"cdp",discoveryOperationKey:"web-access.massive.browser.connection.describe"},{type:"proxy",protocols:["http","https","socks5","socks5h"],host:"network.joinmassive.com",ports:{http:65534,https:65535,socks5:65533,socks5h:65533},remoteDns:!0,geoTargeting:!0,stickySessions:!0}],auth:[{type:"bearer",tokenField:"apiKey"},{type:"basic",usernameField:"proxyUsername",passwordField:"proxyPassword"}]});function bi(e){return e.register(fd).register(hd)}import{StabilityEnum as bd}from"@lssm/lib.contracts-spec/ownership";var kd=o({meta:{key:"messaging.github",version:"2.0.0",category:"messaging",title:"GitHub",description:"Full-featured GitHub integration with repository, issue, and pull request management, OAuth2 and GitHub App authentication, MCP server support, and comprehensive webhook handling.",domain:"developer-experience",owners:["platform.integrations"],tags:["messaging","github","repository","issues","pull-requests","oauth2","github-app","mcp","webhooks"],stability:bd.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.github.com",apiVersionHeader:"X-GitHub-Api-Version"},{type:"webhook",inbound:{signatureHeader:"x-hub-signature-256",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer"},{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://github.com/login/oauth/authorize",tokenUrl:"https://github.com/login/oauth/access_token",scopes:["repo","read:org"]},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"x-hub-signature-256"}],versionPolicy:{currentVersion:"2022-11-28",supportedVersions:[{version:"2022-11-28",status:"stable"}],versionHeader:"X-GitHub-Api-Version"},capabilities:{provides:[{key:"messaging.inbound",version:"1.0.0"},{key:"messaging.outbound",version:"1.0.0"},{key:"repository.github",version:"1.0.0"},{key:"issues.github",version:"1.0.0"},{key:"pull-requests.github",version:"1.0.0"},{key:"provider.mcp.github",version:"1.0.0"},{key:"provider.webhook.github",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{defaultOwner:{type:"string",description:"Optional default GitHub repository owner."},defaultRepo:{type:"string",description:"Optional default GitHub repository name."},apiBaseUrl:{type:"string",description:"Optional GitHub REST API base URL (useful for enterprise instances)."}}},example:{defaultOwner:"lssm-tech",defaultRepo:"contractspec"}},secretSchema:{schema:{type:"object",required:["token","webhookSecret"],properties:{token:{type:"string",description:"GitHub API token used to post comments and automation messages."},webhookSecret:{type:"string",description:"Secret used to verify inbound GitHub webhook signatures."}}},example:{token:"ghp_***",webhookSecret:"***"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://docs.github.com/en/rest",constraints:{rateLimit:{rpm:300}},byokSetup:{setupInstructions:"Create a GitHub token or app installation token with repository access and configure the webhook secret.",requiredScopes:["repo","read:org"],keyRotationSupported:!0,quotaTrackingSupported:!1}});function ki(e){return e.register(kd)}import{StabilityEnum as Id}from"@lssm/lib.contracts-spec/ownership";var vd=o({meta:{key:"messaging.matrix",version:"1.0.0",category:"messaging",title:"Matrix",description:"Matrix managed/BYOK messaging integration for room events, outbound replies, and bridge-aware interoperability metadata.",domain:"communications",owners:["platform.messaging"],tags:["messaging","matrix","rooms","bridges","interoperability","byok"],stability:Id.Beta},supportedModes:["managed","byok"],transports:[{type:"sdk",packageName:"matrix-js-sdk",minVersion:"38.0.0",runtime:"universal"},{type:"rest",acceptContentTypes:["application/json"]}],preferredTransport:"sdk",supportedAuthMethods:[{type:"bearer",tokenField:"accessToken"}],capabilities:{provides:[{key:"messaging.inbound",version:"1.0.0"},{key:"messaging.outbound",version:"1.0.0"},{key:"messaging.matrix.rooms",version:"1.0.0"},{key:"messaging.bridge.metadata",version:"1.0.0"}]},configSchema:{schema:{type:"object",required:["homeserverUrl"],properties:{homeserverUrl:{type:"string",description:"Matrix homeserver base URL for Client-Server API access."},defaultRoomId:{type:"string",description:"Optional default Matrix room ID for outbound messages."},defaultUserId:{type:"string",description:"Optional Matrix user ID associated with the connection."},bridgeMode:{type:"string",enum:["none","external","managed-metadata"],description:"Whether this connection describes externally managed Matrix bridges."}}},example:{homeserverUrl:"https://matrix.example.com",defaultRoomId:"!room:example.com",defaultUserId:"@contractspec:example.com",bridgeMode:"managed-metadata"}},secretSchema:{schema:{type:"object",required:["accessToken"],properties:{accessToken:{type:"string",description:"Matrix access token used by the SDK-backed adapter."},deviceId:{type:"string",description:"Optional Matrix device ID for deployments that bind a bot device."},appserviceToken:{type:"string",description:"Optional externally managed appservice token when a bridge operator provides one."}}},example:{accessToken:"***",deviceId:"DEVICEID"}},bridgeMetadata:{provisioning:"external",preserveDirectProviders:!0,docsUrl:"https://matrix.org/ecosystem/bridges/",targets:[{key:"slack",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0,caveats:["Use the direct Slack provider when first-party API access is configured."]},{key:"telegram",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0},{key:"whatsapp",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0},{key:"discord",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!1},{key:"email",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0},{key:"signal",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!1},{key:"sms",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0},{key:"teams",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0},{key:"github",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!0},{key:"irc",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!1},{key:"xmpp",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!1},{key:"zulip",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!1},{key:"mattermost",capabilities:[{key:"messaging.inbound",version:"1.0.0"}],directProviderPreferred:!1}]},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://matrix.org/docs/",byokSetup:{setupInstructions:"Provide an existing Matrix homeserver URL, bot/user access token, and optional default room. Homeserver hosting and bridge provisioning are operated outside this package.",keyRotationSupported:!0,quotaTrackingSupported:!1,provisioningSteps:["Choose or operate a Matrix homeserver outside ContractSpec.","Create a Matrix bot/user and obtain an access token.","Invite the bot/user to rooms that ContractSpec may read or write.","Configure any bridges externally and record bridge metadata on the connection."]}});function Ii(e){return e.register(vd)}import{StabilityEnum as xd}from"@lssm/lib.contracts-spec/ownership";var Sd=o({meta:{key:"messaging.slack",version:"2.0.0",category:"messaging",title:"Slack",description:"Full-featured Slack integration with messaging, conversations, users, reactions, files, and search \u2014 plus OAuth2, MCP server, and Event API support.",domain:"communications",owners:["platform.messaging"],tags:["messaging","slack","conversations","users","reactions","files","search","oauth2","mcp","webhooks"],stability:xd.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://slack.com/api"},{type:"webhook",inbound:{signatureHeader:"x-slack-signature",signingAlgorithm:"hmac-sha256"}},{type:"sdk",packageName:"@slack/web-api"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://slack.com/oauth/v2/authorize",tokenUrl:"https://slack.com/api/oauth.v2.access",scopes:["chat:write","channels:history","channels:read","channels:manage","users:read","users:read.email","reactions:write","reactions:read","files:write","files:read","search:read","commands"]},{type:"bearer"},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"x-slack-signature"}],capabilities:{provides:[{key:"messaging.inbound",version:"1.0.0"},{key:"messaging.outbound",version:"1.0.0"},{key:"messaging.interactions",version:"1.0.0"},{key:"conversations.slack",version:"1.0.0"},{key:"users.slack",version:"1.0.0"},{key:"reactions.slack",version:"1.0.0"},{key:"files.slack",version:"1.0.0"},{key:"search.slack",version:"1.0.0"},{key:"provider.mcp.slack",version:"1.0.0"},{key:"provider.webhook.slack",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{defaultChannelId:{type:"string",description:"Optional default Slack channel ID for outbound messages."},apiBaseUrl:{type:"string",description:"Optional Slack API base URL (for enterprise grid instances)."},allowUserMentions:{type:"boolean",description:"Whether user mention expansion is enabled in responses."}}},example:{defaultChannelId:"C0123456789",allowUserMentions:!0}},secretSchema:{schema:{type:"object",required:["botToken","signingSecret"],properties:{botToken:{type:"string",description:"Slack bot token (xoxb-*) used for Web API calls."},userToken:{type:"string",description:"Optional Slack user token (xoxp-*) for user-scoped operations."},signingSecret:{type:"string",description:"Slack signing secret used to verify inbound webhook signatures."},appToken:{type:"string",description:"Optional app-level token for socket mode or advanced API usage."}}},example:{botToken:"xoxb-***",signingSecret:"***"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://api.slack.com",constraints:{rateLimit:{rpm:200}},byokSetup:{setupInstructions:"Create a Slack app, install it to your workspace, then provide bot token and signing secret.",requiredScopes:["chat:write","channels:history","channels:read","users:read","reactions:write","files:write"],keyRotationSupported:!0,quotaTrackingSupported:!1}});function vi(e){return e.register(Sd)}import{StabilityEnum as wd}from"@lssm/lib.contracts-spec/ownership";var Rd=o({meta:{key:"messaging.teams",version:"1.0.0",category:"messaging",title:"Microsoft Teams",description:"Full-featured Microsoft Teams integration with messaging, channels, teams, and users via Microsoft Graph API \u2014 plus Azure AD OAuth2, MCP server, and webhook/subscription support.",domain:"communications",owners:["platform.messaging"],tags:["messaging","teams","microsoft-teams","channels","users","graph-api","oauth2","mcp","webhooks"],stability:wd.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://graph.microsoft.com/v1.0",apiVersionHeader:"ConsistencyLevel"},{type:"webhook",inbound:{signatureHeader:"x-ms-notification-auth",signingAlgorithm:"hmac-sha256"}},{type:"sdk",packageName:"@microsoft/microsoft-graph-client"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://login.microsoftonline.com/common/oauth2/v2.0/authorize",tokenUrl:"https://login.microsoftonline.com/common/oauth2/v2.0/token",scopes:["ChannelMessage.Send","Channel.ReadBasic.All","Team.ReadBasic.All","User.Read.All","Chat.ReadWrite"]},{type:"oauth2",grantType:"client_credentials",authorizationUrl:"https://login.microsoftonline.com/common/oauth2/v2.0/authorize",tokenUrl:"https://login.microsoftonline.com/common/oauth2/v2.0/token",scopes:["https://graph.microsoft.com/.default"]},{type:"bearer"}],versionPolicy:{currentVersion:"v1.0",supportedVersions:[{version:"v1.0",status:"stable"}],versionHeader:"ConsistencyLevel"},capabilities:{provides:[{key:"messaging.outbound",version:"1.0.0"},{key:"messaging.inbound",version:"1.0.0"},{key:"channels.teams",version:"1.0.0"},{key:"teams.management",version:"1.0.0"},{key:"users.teams",version:"1.0.0"},{key:"provider.mcp.teams",version:"1.0.0"},{key:"provider.webhook.teams",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{defaultTeamId:{type:"string",description:"Optional default Microsoft Teams team ID for operations."},defaultChannelId:{type:"string",description:"Optional default channel ID for sending messages."},tenantId:{type:"string",description:"Optional Azure AD tenant ID (for single-tenant apps)."},apiBaseUrl:{type:"string",description:"Optional Graph API base URL (for GCC/GCC High instances)."}}},example:{defaultTeamId:"team-id-123",defaultChannelId:"channel-id-456"}},secretSchema:{schema:{type:"object",required:["accessToken"],properties:{accessToken:{type:"string",description:"Microsoft Graph API access token for Teams operations."},refreshToken:{type:"string",description:"Optional refresh token for delegated auth flows."},clientId:{type:"string",description:"Azure AD application (client) ID for app-only auth."},clientSecret:{type:"string",description:"Azure AD application secret for app-only auth."},tenantId:{type:"string",description:"Azure AD tenant ID for app-only auth flows."},webhookSecret:{type:"string",description:"Secret used to verify inbound Microsoft Graph webhook notifications."}}},example:{accessToken:"eyJhbGciOi..."}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview",constraints:{rateLimit:{rpm:300}},byokSetup:{setupInstructions:"Register an application in Azure AD, grant Microsoft Graph API permissions for Teams, then configure the access token and webhook secret.",requiredScopes:["ChannelMessage.Send","Channel.ReadBasic.All","Team.ReadBasic.All"],keyRotationSupported:!0,quotaTrackingSupported:!1}});function xi(e){return e.register(Rd)}import{StabilityEnum as Pd}from"@lssm/lib.contracts-spec/ownership";var Ad=o({meta:{key:"messaging.telegram",version:"1.0.0",category:"messaging",title:"Telegram Bot API",description:"Telegram messaging integration for inbound webhook updates, threaded topic messages, and outbound bot replies.",domain:"communications",owners:["platform.messaging"],tags:["messaging","telegram"],stability:Pd.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.telegram.org"},{type:"webhook",inbound:{signatureHeader:"x-telegram-bot-api-secret-token",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",capabilities:{provides:[{key:"messaging.inbound",version:"1.0.0"},{key:"messaging.outbound",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{defaultChatId:{type:"string",description:"Optional default Telegram chat ID used for outbound sends when no chat target is provided."},apiBaseUrl:{type:"string",description:"Optional Telegram Bot API base URL override for proxies or self-hosted gateways."}}},example:{defaultChatId:"-1001234567890",apiBaseUrl:"https://api.telegram.org"}},secretSchema:{schema:{type:"object",required:["botToken","secretToken"],properties:{botToken:{type:"string",description:"Telegram bot token used for sendMessage and webhook registration."},secretToken:{type:"string",description:"Webhook secret token expected in the X-Telegram-Bot-Api-Secret-Token header."}}},example:{botToken:"123456789:AA***",secretToken:"contractspec-telegram-webhook"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://core.telegram.org/bots/api",constraints:{rateLimit:{rpm:180}},byokSetup:{setupInstructions:"Create a Telegram bot with BotFather, set a webhook with a secret token, then provide the bot token and secret token.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Si(e){return e.register(Ad)}import{StabilityEnum as Od}from"@lssm/lib.contracts-spec/ownership";var Cd=o({meta:{key:"messaging.whatsapp.meta",version:"1.0.0",category:"messaging",title:"WhatsApp Cloud API (Meta)",description:"Meta WhatsApp Cloud API integration for inbound message processing and outbound replies.",domain:"communications",owners:["platform.messaging"],tags:["messaging","whatsapp","meta"],stability:Od.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://graph.facebook.com"},{type:"webhook",inbound:{signatureHeader:"x-hub-signature-256",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer"},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"x-hub-signature-256"}],capabilities:{provides:[{key:"messaging.inbound",version:"1.0.0"},{key:"messaging.outbound",version:"1.0.0"}]},configSchema:{schema:{type:"object",required:["phoneNumberId"],properties:{phoneNumberId:{type:"string",description:"WhatsApp business phone number ID used for sends."},apiVersion:{type:"string",description:"Optional Graph API version (e.g. v22.0)."}}},example:{phoneNumberId:"1234567890",apiVersion:"v22.0"}},secretSchema:{schema:{type:"object",required:["accessToken","appSecret","verifyToken"],properties:{accessToken:{type:"string",description:"Meta access token for WhatsApp Cloud API calls."},appSecret:{type:"string",description:"Meta app secret used for signature verification."},verifyToken:{type:"string",description:"Webhook verify token used during challenge handshake."}}},example:{accessToken:"EAAG***",appSecret:"***",verifyToken:"contractspec-verify"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://developers.facebook.com/docs/whatsapp",constraints:{rateLimit:{rpm:120}},byokSetup:{setupInstructions:"Create a Meta app with WhatsApp product enabled, add a business phone number, and provide API and webhook credentials.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function wi(e){return e.register(Cd)}import{StabilityEnum as Td}from"@lssm/lib.contracts-spec/ownership";var Md=o({meta:{key:"messaging.whatsapp.twilio",version:"1.0.0",category:"messaging",title:"WhatsApp via Twilio",description:"Twilio-powered WhatsApp integration for inbound webhooks and outbound conversational messaging.",domain:"communications",owners:["platform.messaging"],tags:["messaging","whatsapp","twilio"],stability:Td.Beta},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.twilio.com"},{type:"webhook",inbound:{signatureHeader:"x-twilio-signature",signingAlgorithm:"hmac-sha1"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"basic"}],capabilities:{provides:[{key:"messaging.inbound",version:"1.0.0"},{key:"messaging.outbound",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{fromNumber:{type:"string",description:"Default WhatsApp-enabled Twilio sender number (e.g. whatsapp:+15551234567)."}}},example:{fromNumber:"whatsapp:+15551234567"}},secretSchema:{schema:{type:"object",required:["accountSid","authToken"],properties:{accountSid:{type:"string",description:"Twilio account SID."},authToken:{type:"string",description:"Twilio auth token."}}},example:{accountSid:"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",authToken:"***"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://www.twilio.com/docs/whatsapp",constraints:{rateLimit:{rpm:200}},byokSetup:{setupInstructions:"Create a Twilio project with WhatsApp sender provisioning, then provide account SID/auth token and sender number.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Ri(e){return e.register(Md)}import{StabilityEnum as Ed}from"@lssm/lib.contracts-spec/ownership";var Ld=o({meta:{key:"ai-llm.mistral",version:"1.0.0",category:"ai-llm",title:"Mistral Large Language Model",description:"Mistral integration providing chat completions and embedding generation.",domain:"ai",owners:["platform.ai"],tags:["ai","llm","embeddings"],stability:Ed.Experimental},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.mistral.ai"},{type:"sdk",packageName:"@mistralai/mistralai"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Bearer "}],capabilities:{provides:[{key:"ai.chat",version:"1.0.0"},{key:"ai.embeddings",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{model:{type:"string",description:"Default chat completion model (e.g., mistral-large-latest)."},embeddingModel:{type:"string",description:"Embedding model identifier."}}},example:{model:"mistral-large-latest",embeddingModel:"mistral-embed"}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Mistral API key with access to chat and embeddings endpoints."}}},example:{apiKey:"mistral-***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.mistral.ai/platform/endpoints",constraints:{rateLimit:{rpm:600}},byokSetup:{setupInstructions:"Generate an API key within the Mistral console and ensure the selected models are enabled for the account.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Pi(e){return e.register(Ld)}import{StabilityEnum as Dd}from"@lssm/lib.contracts-spec/ownership";var _d=o({meta:{key:"ai-voice-conv.mistral",version:"1.0.0",category:"ai-voice-conversational",title:"Mistral Conversational Voice",description:"Mistral conversational voice integration using conversation sessions and speech models for bidirectional interactions.",domain:"ai",owners:["platform.ai"],tags:["voice","conversational","mistral","agents","sessions"],stability:Dd.Experimental},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.mistral.ai"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Bearer "}],capabilities:{provides:[{key:"ai.voice.conversational",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{model:{type:"string",description:"Mistral model used for response generation in conversational sessions."},defaultVoice:{type:"string",description:"Default voice profile for agent responses."},turnDetection:{type:"string",enum:["server_vad","push_to_talk"],description:"Turn detection strategy used during live conversations."},maxSessionDurationSeconds:{type:"number",description:"Maximum allowed conversational session duration."}}},example:{model:"mistral-medium-latest",defaultVoice:"default",turnDetection:"server_vad",maxSessionDurationSeconds:600}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Mistral API key with access to conversational and agent APIs."}}},example:{apiKey:"mistral-***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.mistral.ai/agents/agents",byokSetup:{setupInstructions:"Create a Mistral API key, enable conversation-capable models for your account, and configure default turn detection settings.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Ai(e){return e.register(_d)}import{StabilityEnum as qd}from"@lssm/lib.contracts-spec/ownership";var Ud=o({meta:{key:"ai-voice-stt.mistral",version:"1.0.0",category:"ai-voice-stt",title:"Mistral Speech-to-Text",description:"Mistral audio transcription integration for batch and streaming speech-to-text use cases.",domain:"ai",owners:["platform.ai"],tags:["voice","stt","transcription","mistral","voxtral"],stability:qd.Experimental},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.mistral.ai"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Bearer "}],capabilities:{provides:[{key:"ai.voice.stt",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{model:{type:"string",description:"Mistral transcription model identifier (e.g. voxtral-mini-latest)."},language:{type:"string",description:"Default language code for transcription (e.g. en)."},diarize:{type:"boolean",description:"Enable speaker diarization when supported by the model."},wordTimestamps:{type:"boolean",description:"Include word-level timestamp metadata when available."}}},example:{model:"voxtral-mini-latest",language:"en",diarize:!0,wordTimestamps:!0}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Mistral API key with access to audio transcription endpoints."}}},example:{apiKey:"mistral-***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.mistral.ai/api/#tag/audio",byokSetup:{setupInstructions:"Generate a Mistral API key and ensure the project has access to Voxtral or another transcription-capable model.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Oi(e){return e.register(Ud)}var Wd=M({key:"health.myfitnesspal",title:"MyFitnessPal",description:"MyFitnessPal nutrition and activity integration through official, aggregator, or opt-in unofficial connectors.",docsUrl:"https://www.myfitnesspal.com/",tags:["myfitnesspal","nutrition","unofficial"],capabilities:[{key:"health.activities.read",version:"1.0.0"},{key:"health.nutrition.read",version:"1.0.0"}],defaultTransport:"aggregator-api"});function Ci(e){return e.register(Wd)}import{StabilityEnum as Fd}from"@lssm/lib.contracts-spec/ownership";var jd=o({meta:{key:"project-management.notion",version:"2.0.0",category:"project-management",title:"Notion",description:"Full-featured Notion integration with CRUD operations for pages, databases, and blocks, OAuth2 authentication, MCP server support, and real-time synchronization.",domain:"productivity",owners:["@platform.integrations"],tags:["project-management","notion","oauth2","mcp","webhooks"],stability:Fd.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.notion.com",apiVersionHeader:"Notion-Version"},{type:"webhook",inbound:{signatureHeader:"x-notion-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer"},{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://api.notion.com/v1/oauth/authorize",tokenUrl:"https://api.notion.com/v1/oauth/token",revocationUrl:"https://api.notion.com/v1/oauth/revoke",scopes:["read:user","read:pages","read:databases","write:pages","write:databases"],pkce:!0}],versionPolicy:{currentVersion:"2022-06-28",supportedVersions:[{version:"2022-06-28",status:"stable"}],versionHeader:"Notion-Version"},capabilities:{provides:[{key:"project-management.work-items",version:"1.0.0"},{key:"knowledge.ingestion.notion",version:"1.0.0"},{key:"provider.delta.notion",version:"1.0.0"},{key:"provider.mcp.notion",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{databaseId:{type:"string",description:"Optional Notion database ID to store tasks."},summaryParentPageId:{type:"string",description:"Optional parent page ID for summary pages."},titleProperty:{type:"string",description:'Database title property name (defaults to "Name").'},statusProperty:{type:"string",description:"Database status/select property name."},priorityProperty:{type:"string",description:"Database priority/select property name."},tagsProperty:{type:"string",description:"Database multi-select tags property name."},dueDateProperty:{type:"string",description:"Database date property name for due dates."},descriptionProperty:{type:"string",description:"Database rich-text property for descriptions."}}},example:{databaseId:"xxxxxxxxxxxxxxxx",summaryParentPageId:"yyyyyyyyyyyyyyyy",titleProperty:"Name",statusProperty:"Status"}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string",description:"Notion integration secret token (for BYOK mode)."},oauth2AccessToken:{type:"string",description:"OAuth2 access token (for managed mode)."},oauth2RefreshToken:{type:"string",description:"OAuth2 refresh token."}}},example:{apiKey:"secret_notion_token",oauth2AccessToken:"ntn_abc123",oauth2RefreshToken:"ntn_refresh_xyz789"}},healthCheck:{method:"custom",timeoutMs:4000},docsUrl:"https://developers.notion.com",constraints:{},byokSetup:{setupInstructions:"For API key: Create a Notion internal integration, share the target database/page with it, and store the secret token. For OAuth2: Configure OAuth application in Notion and complete authorization flow.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Ti(e){return e.register(jd)}import{StabilityEnum as Bd}from"@lssm/lib.contracts-spec/ownership";var Kd=o({meta:{key:"ai-image.openai",version:"1.0.0",category:"ai-image",title:"OpenAI Image Generation",description:"OpenAI integration for AI image generation using DALL-E and gpt-image models.",domain:"ai",owners:["platform.ai"],tags:["image","generation","dall-e","gpt-image"],stability:Bd.Experimental},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.openai.com"},{type:"sdk",packageName:"openai"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Bearer "}],capabilities:{provides:[{key:"ai.image.generation",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{model:{type:"string",description:"OpenAI image model identifier (e.g. dall-e-3, gpt-image-1)."},defaultSize:{type:"string",enum:["1024x1024","1024x1792","1792x1024"]},defaultQuality:{type:"string",enum:["standard","hd"]}}},example:{model:"dall-e-3",defaultSize:"1024x1024",defaultQuality:"standard"}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"OpenAI API key with image generation permissions."}}},example:{apiKey:"sk-***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://platform.openai.com/docs/guides/images",constraints:{rateLimit:{rpm:50}},byokSetup:{setupInstructions:"Create an OpenAI API key with image generation access enabled.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Mi(e){return e.register(Kd)}import{StabilityEnum as Nd}from"@lssm/lib.contracts-spec/ownership";var Hd=o({meta:{key:"ai-voice-conv.openai",version:"1.0.0",category:"ai-voice-conversational",title:"OpenAI Realtime Voice",description:"OpenAI Realtime API integration for bidirectional conversational voice with GPT models.",domain:"ai",owners:["platform.ai"],tags:["voice","conversational","realtime","openai"],stability:Nd.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed OpenAI Realtime credentials are not declared because realtime voice access depends on tenant-owned OpenAI API keys and project quotas.",secretFields:[{key:"apiKey",required:!0}],rotationSupported:!0}),transports:[{type:"rest",baseUrl:"https://api.openai.com"},{type:"sdk",packageName:"openai"}],preferredTransport:"sdk",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Bearer "}],capabilities:{provides:[{key:"ai.voice.conversational",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{model:{type:"string",description:"OpenAI model for realtime conversations (e.g. gpt-4o-realtime-preview)."},defaultVoice:{type:"string",description:"Default voice for agent responses (e.g. alloy, echo, shimmer)."},turnDetection:{type:"string",enum:["server_vad","push_to_talk"],description:"Turn detection strategy."},maxSessionDurationSeconds:{type:"number",description:"Maximum session duration in seconds."}}},example:{model:"gpt-4o-realtime-preview",defaultVoice:"alloy",turnDetection:"server_vad",maxSessionDurationSeconds:600}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"OpenAI API key with realtime API access."}}},example:{apiKey:"sk-***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://platform.openai.com/docs/guides/realtime",byokSetup:{setupInstructions:"Create an OpenAI API key with Realtime API access enabled and store it in your secret provider.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Ei(e){return e.register(Hd)}import{StabilityEnum as Gd}from"@lssm/lib.contracts-spec/ownership";var zd=M({key:"health.openwearables",title:"Open Wearables",description:"Unified wearable and health data aggregation with API and MCP transports.",docsUrl:"https://www.openwearables.io/",tags:["openwearables","aggregator","mcp"],stability:Gd.Beta,capabilities:[{key:"health.activities.read",version:"1.0.0"},{key:"health.workouts.read",version:"1.0.0"},{key:"health.sleep.read",version:"1.0.0"},{key:"health.biometrics.read",version:"1.0.0"},{key:"health.nutrition.read",version:"1.0.0"},{key:"health.webhooks",version:"1.0.0"}],defaultTransport:"aggregator-api",byokSetupInstructions:"Create an Open Wearables account, generate API/MCP credentials, and connect desired upstream providers."});function Li(e){return e.register(zd)}var Vd=M({key:"health.oura",title:"Oura",description:"Oura integration for sleep, activity, readiness, and biometrics data.",docsUrl:"https://cloud.ouraring.com/docs/",tags:["oura","official-api"],byokScopes:["daily","personal","workout","sleep"]});function Di(e){return e.register(Vd)}var $d=P({key:"web-access.oxylabs",title:"Oxylabs Web Access",description:"Oxylabs Web Scraper API and governed residential proxy execution.",tags:["scraping","search","residential-proxy"],transports:[{type:"rest",baseUrl:"https://realtime.oxylabs.io/v1"},{type:"proxy",protocols:["http","https","socks5","socks5h"],host:"pr.oxylabs.io",ports:{http:7777,https:7777,socks5:7777,socks5h:7777},remoteDns:!0,geoTargeting:!0,stickySessions:!0}],preferredTransport:"rest",auth:[{type:"basic",usernameField:"username",passwordField:"password"}],secretFields:["username","password"],capabilities:["web.search","web.fetch","web.proxy"],docsUrl:"https://developers.oxylabs.io/scraper-apis/web-scraper-api"});function _i(e){return e.register($d)}import{StabilityEnum as Jd}from"@lssm/lib.contracts-spec/ownership";var Qd=o({meta:{key:"payments.paypal",version:"1.0.0",category:"payments",title:"PayPal Payments",description:"PayPal integration for checkout, payments, subscriptions, payouts, marketplace, disputes, and webhooks.",domain:"payments",owners:["platform.payments"],tags:["payments","checkout","subscriptions","payouts","marketplace"],stability:Jd.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed PayPal credentials are not declared because API access depends on a tenant-owned PayPal app and webhook configuration.",secretFields:[{key:"clientId",required:!0},{key:"clientSecret",required:!0},{key:"webhookId",required:!1},{key:"partnerId",required:!1},{key:"partnerAttributionId",required:!1}],rotationSupported:!0}),transports:[{type:"rest",baseUrl:"https://api-m.paypal.com"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"client_credentials",tokenUrl:"https://api-m.paypal.com/v1/oauth2/token",scopes:[]}],versionPolicy:{currentVersion:"v2",supportedVersions:[{version:"v2",status:"stable"}]},capabilities:{provides:[{key:"payments.psp",version:"1.0.0"},{key:"payments.customers",version:"1.0.0"},{key:"payments.payment-methods",version:"1.0.0"},{key:"payments.checkout",version:"1.0.0"},{key:"payments.subscriptions",version:"1.0.0"},{key:"payments.invoices",version:"1.0.0"},{key:"payments.disputes",version:"1.0.0"},{key:"payments.payouts",version:"1.0.0"},{key:"payments.marketplace",version:"1.0.0"},{key:"payments.webhooks",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{environment:{type:"string",enum:["sandbox","live"],description:"PayPal API environment."},merchantId:{type:"string",description:"Optional PayPal merchant account identifier."},partnerId:{type:"string",description:"Optional PayPal partner merchant identifier."},partnerAttributionId:{type:"string",description:"Optional PayPal BN attribution identifier."}},required:["environment"]},example:{environment:"sandbox",merchantId:"merchant_123",partnerId:"partner_123",partnerAttributionId:"PARTNER_BN_CODE"}},secretSchema:{schema:{type:"object",required:["clientId","clientSecret"],properties:{clientId:{type:"string",description:"PayPal app client ID."},clientSecret:{type:"string",description:"PayPal app client secret."},webhookId:{type:"string",description:"Webhook ID used for signature verification."},partnerId:{type:"string",description:"Optional PayPal partner merchant identifier."},partnerAttributionId:{type:"string",description:"Optional PayPal BN attribution identifier."}}},example:{clientId:"paypal-client-id",clientSecret:"***",webhookId:"WH-***"}},healthCheck:{method:"ping",timeoutMs:5000},docsUrl:"https://developer.paypal.com/api/rest/",byokSetup:{setupInstructions:"Create a PayPal REST app, store its client credentials, and configure a webhook when inbound events are required.",requiredScopes:[],keyRotationSupported:!0,quotaTrackingSupported:!1}});function qi(e){return e.register(Qd)}var Yd=M({key:"health.peloton",title:"Peloton",description:"Peloton integration for workout history and activity metrics using official, aggregator, or opt-in unofficial connectors.",docsUrl:"https://developers.onepeloton.com/",tags:["peloton","workouts","unofficial"],capabilities:[{key:"health.activities.read",version:"1.0.0"},{key:"health.workouts.read",version:"1.0.0"}],defaultTransport:"aggregator-api"});function Ui(e){return e.register(Yd)}import{StabilityEnum as Xd}from"@lssm/lib.contracts-spec/ownership";var Zd=o({meta:{key:"analytics.posthog",version:"1.1.0",category:"analytics",title:"PostHog",description:"PostHog integration for product analytics, feature flags, HogQL queries, and LLM analytics with evaluations.",domain:"analytics",owners:["@platform.integrations"],tags:["analytics","posthog","llm","ai"],stability:Xd.Beta},supportedModes:["managed","byok"],transports:[{type:"rest"},{type:"mcp",transport:"http"},{type:"sdk",packageName:"posthog-node"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"}],capabilities:{provides:[{key:"analytics.events",version:"1.0.0"},{key:"analytics.feature-flags",version:"1.0.0"},{key:"analytics.query",version:"1.0.0"},{key:"analytics.events.read",version:"1.0.0"},{key:"analytics.persons",version:"1.0.0"},{key:"analytics.insights",version:"1.0.0"},{key:"analytics.cohorts",version:"1.0.0"},{key:"analytics.annotations",version:"1.0.0"},{key:"analytics.llm-tracing",version:"1.0.0"},{key:"analytics.llm-evaluations",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{host:{type:"string",description:"PostHog host (e.g., https://app.posthog.com or self-hosted URL)."},projectId:{type:"string",description:"PostHog project ID for API queries."},mcpUrl:{type:"string",description:"Optional MCP endpoint URL for PostHog tools."}}},example:{host:"https://app.posthog.com",projectId:"12345"}},secretSchema:{schema:{type:"object",required:["personalApiKey"],properties:{personalApiKey:{type:"string",description:"PostHog personal API key (required for API reads/writes)."},projectApiKey:{type:"string",description:"PostHog project API key (required for capture/ingest events)."}}},example:{personalApiKey:"phx_personal_api_key",projectApiKey:"phc_project_api_key"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://posthog.com/docs",byokSetup:{setupInstructions:"Generate a PostHog personal API key for read/write operations and a project API key for event capture.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Wi(e){return e.register(Zd)}import{StabilityEnum as el}from"@lssm/lib.contracts-spec/ownership";var tl=o({meta:{key:"email.postmark",version:"1.0.0",category:"email",title:"Postmark Transactional Email",description:"Postmark integration for transactional email delivery.",domain:"communications",owners:["platform.messaging"],tags:["email","transactional"],stability:el.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.postmarkapp.com"},{type:"webhook",inbound:{signatureHeader:"x-postmark-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"header",headerName:"X-Postmark-Server-Token"}],capabilities:{provides:[{key:"email.transactional",version:"1.0.0"}],requires:[{key:"platform.webhooks",optional:!0,reason:"Optional for inbound bounce handling"}]},configSchema:{schema:{type:"object",properties:{messageStream:{type:"string",description:"Optional message stream identifier (e.g., transactional)."},fromEmail:{type:"string",description:"Default From address used for outbound messages."}}},example:{messageStream:"outbound",fromEmail:"notifications@example.com"}},secretSchema:{schema:{type:"object",required:["serverToken"],properties:{serverToken:{type:"string",description:"Server token for the Postmark account."}}},example:{serverToken:"server-***"}},healthCheck:{method:"ping",timeoutMs:3000},docsUrl:"https://postmarkapp.com/developer",constraints:{rateLimit:{rpm:500}},byokSetup:{setupInstructions:"Create a Postmark server token with outbound send permissions and configure allowed from addresses.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Fi(e){return e.register(tl)}import{StabilityEnum as rl}from"@lssm/lib.contracts-spec/ownership";var nl=o({meta:{key:"openbanking.powens",version:"1.0.0",category:"open-banking",title:"Powens Open Banking (Read)",description:"Read-only Open Banking integration powered by Powens, exposing accounts, transactions, and balances.",domain:"finance",owners:["platform.finance"],tags:["open-banking","powens","finance"],stability:rl.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Powens credentials are not declared because open-banking access requires tenant-owned regulated OAuth project credentials and consent boundaries.",configFields:[{key:"environment",required:!0}],secretFields:[{key:"clientId",required:!0},{key:"clientSecret",required:!0},{key:"apiKey"},{key:"webhookSecret"}],rotationSupported:!1}),transports:[{type:"rest",baseUrl:"https://api.powens.com"},{type:"webhook",inbound:{signatureHeader:"x-powens-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://auth.powens.com/authorize",tokenUrl:"https://auth.powens.com/token",scopes:["accounts:read","transactions:read","balances:read"]}],capabilities:{provides:[{key:"openbanking.accounts.read",version:"1.0.0"},{key:"openbanking.transactions.read",version:"1.0.0"},{key:"openbanking.balances.read",version:"1.0.0"}]},configSchema:{schema:{type:"object",required:["environment"],properties:{environment:{type:"string",enum:["sandbox","production"],description:"Powens environment to target. Sandbox uses Powens test API base URL, production uses live endpoints."},baseUrl:{type:"string",description:"Optional override for the Powens API base URL. Defaults to Powens environment defaults."},region:{type:"string",description:"Optional Powens region identifier when targeting a specific data residency cluster."},pollingIntervalMs:{type:"number",description:"Optional custom polling interval in milliseconds for background sync jobs (defaults to platform standard)."}}},example:{environment:"sandbox",baseUrl:"https://api-sandbox.powens.com/v2",region:"eu-west-1",pollingIntervalMs:300000}},secretSchema:{schema:{type:"object",required:["clientId","clientSecret"],properties:{clientId:{type:"string",description:"Powens OAuth client identifier obtained from the Powens Console (BYOK project)."},clientSecret:{type:"string",description:"Powens OAuth client secret used to exchange for access tokens."},apiKey:{type:"string",description:"Optional Powens API key (if the tenant project exposes a dedicated API token)."},webhookSecret:{type:"string",description:"Optional webhook signing secret used to verify Powens webhook payloads."}}},example:{clientId:"powens-client-id",clientSecret:"powens-client-secret",apiKey:"powens-api-key",webhookSecret:"powens-webhook-secret"}},healthCheck:{method:"ping",timeoutMs:8000},docsUrl:"https://docs.powens.com/",constraints:{rateLimit:{rph:1e4,rpm:600}},byokSetup:{setupInstructions:"Create a Powens BYOK project, generate OAuth credentials, and optionally configure webhook delivery for account/transaction updates.",requiredScopes:["accounts:read","transactions:read","balances:read"],keyRotationSupported:!1,quotaTrackingSupported:!1}});function ji(e){return e.register(nl)}import{StabilityEnum as il}from"@lssm/lib.contracts-spec/ownership";var ol=o({meta:{key:"vectordb.qdrant",version:"1.0.0",category:"vector-db",title:"Qdrant Vector Database",description:"Qdrant integration for vector search and embeddings storage.",domain:"ai",owners:["platform.ai"],tags:["vector-db","search"],stability:il.Experimental},supportedModes:["managed","byok"],transports:[{type:"rest"},{type:"sdk",packageName:"@qdrant/js-client-rest"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"bearer"}],capabilities:{provides:[{key:"vector-db.search",version:"1.0.0"},{key:"vector-db.storage",version:"1.0.0"}],requires:[{key:"ai.embeddings",optional:!0,reason:"Required if vectors are generated via hosted embedding services"}]},configSchema:{schema:{type:"object",properties:{apiUrl:{type:"string",description:"Base URL for the Qdrant instance (e.g., https://qdrant.example.com)."},collectionPrefix:{type:"string",description:"Prefix applied to all collection names for this tenant."}}},example:{apiUrl:"https://qdrant.example.com",collectionPrefix:"tenant_"}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string",description:"API key or token when authentication is enabled."}}},example:{apiKey:"qdrant-api-key"}},healthCheck:{method:"ping",timeoutMs:4000},docsUrl:"https://qdrant.tech/documentation/quick-start/",constraints:{quotas:{collections:100,pointsPerCollection:1e6}},byokSetup:{setupInstructions:"Provide the HTTPS endpoint of your Qdrant cluster and generate an API key with read/write access to the collections that will be managed.",keyRotationSupported:!0,quotaTrackingSupported:!0}});function Bi(e){return e.register(ol)}var al=P({key:"web-access.reworkd",title:"Reworkd Web Access",description:"Reworkd REST access to materialized scraping-group outputs.",tags:["scraping","datasets"],transports:[{type:"rest",baseUrl:"https://api.reworkd.dev/v1"}],preferredTransport:"rest",auth:[{type:"bearer",tokenField:"apiKey"}],secretFields:["apiKey"],capabilities:["web.dataset.read"],docsUrl:"https://docs.reworkd.ai/api-reference/public/get-outputs-for-a-scraping-group"});function Ki(e){return e.register(al)}var sl=P({key:"web-access.serper",title:"Serper Google Search API",description:"Serper REST access for Google Search, Images, News, Maps, Places, Videos, Shopping, Scholar, Patents, and Autocomplete.",tags:["search","serp","google"],transports:[{type:"rest",baseUrl:"https://google.serper.dev"}],preferredTransport:"rest",auth:[{type:"header",headerName:"X-API-KEY"}],secretFields:["apiKey"],capabilities:["web.search"],docsUrl:"https://serper.dev/"});function Ni(e){return e.register(sl)}import{StabilityEnum as cl}from"@lssm/lib.contracts-spec/ownership";var Hi="SILLAGE_VENDOR_DOCS_REQUIRED",pl=o({meta:{key:"crm.sillage",version:"1.0.0",category:"crm",title:"Sillage GTM Intelligence",description:"Sillage catalog metadata for GTM signals, Slack/CRM workflow, account intelligence, and power-map enrichment. Executable operations are disabled until official vendor API docs exist.",domain:"sales-intelligence",owners:["platform.integrations"],tags:["sales-intelligence","gtm-signals","buying-signals","sillage","vendor-docs-required"],stability:cl.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Sillage public API, MCP, SDK, webhook, and auth contracts are not documented; Managed or live calls require vendor-confirmed docs.",rotationSupported:!1}),transports:[],capabilities:{provides:[{key:"sales-intelligence.gtm-signal-feed",version:"1.0.0"},{key:"sales-intelligence.account-power-map",version:"1.0.0"},{key:"sales-intelligence.crm-slack-bridge-metadata",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{requiresVendorDocs:{type:"boolean",const:!0},diagnosticCode:{type:"string",const:Hi}}},example:{requiresVendorDocs:!0,diagnosticCode:Hi}},secretSchema:{schema:{type:"object",properties:{}},example:{}},docsUrl:"https://getsillage.com/",byokSetup:{setupInstructions:"Do not configure executable Sillage calls until official API, MCP, SDK, webhook, and auth documentation is provided.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function Gi(e){return e.register(pl)}import{StabilityEnum as dl}from"@lssm/lib.contracts-spec/ownership";var ll=o({meta:{key:"ai-voice.slng",version:"1.0.0",category:"ai-voice-conversational",title:"SLNG Global Voice AI Infrastructure",description:"SLNG integration for unified TTS, STT, voice-agent, HTTP, and WebSocket voice infrastructure APIs.",domain:"ai",owners:["platform.ai"],tags:["voice","tts","stt","voice-agents","websocket"],stability:dl.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed SLNG credentials are not declared because public SLNG access is API-key based and no ContractSpec-managed SLNG tenant account or OAuth app surface is provided.",secretFields:[{key:"apiKey",required:!0}],rotationSupported:!1}),transports:[{type:"rest",baseUrl:"https://api.slng.ai"},{type:"websocket",url:"wss://api.slng.ai",protocol:"mixed"}],preferredTransport:"rest",supportedAuthMethods:[{type:"bearer",tokenField:"apiKey"}],capabilities:{provides:[{key:"ai.voice.tts",version:"1.0.0"},{key:"ai.voice.stt",version:"1.0.0"},{key:"ai.voice.conversational",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string"},agentsBaseUrl:{type:"string"},defaultTtsRoute:{type:"string"},defaultSttRoute:{type:"string"},timeoutMs:{type:"number"}}},example:{baseUrl:"https://api.slng.ai",agentsBaseUrl:"https://api.agents.slng.ai",defaultTtsRoute:"/v1/tts/slng/deepgram/aura:2",defaultSttRoute:"/v1/stt/slng/openai/whisper:large-v3",timeoutMs:15000}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"SLNG API key."}}},example:{apiKey:"slng_***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.slng.ai/",byokSetup:{setupInstructions:"Create an SLNG API key in the SLNG app and store it in the tenant secret provider. Public docs expose API-key HTTP/WebSocket access; no official MCP or OAuth app surface is documented.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function zi(e){return e.register(ll)}import{StabilityEnum as ul}from"@lssm/lib.contracts-spec/ownership";function yt(e){return o({meta:{key:`social-network.${e.key}`,version:"1.0.0",title:e.title,description:`Official ${e.title} connected-account read integration.`,category:"custom",domain:"social-network",owners:["platform.integrations"],tags:["social-network",e.key,"connected-account"],stability:ul.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed mode is unavailable because the integrator must own the vendor application approval and OAuth credentials.",secretFields:[{key:"clientId",required:!0},{key:"clientSecret",required:!0}],rotationSupported:!0}),transports:[{type:"rest",baseUrl:e.baseUrl},{type:"webhook"}],preferredTransport:"rest",supportedAuthMethods:[{type:"oauth2",grantType:"authorization_code",authorizationUrl:e.authorizationUrl,tokenUrl:e.tokenUrl,scopes:[...e.scopes],pkce:e.key==="youtube"||e.key==="x"}],versionPolicy:{currentVersion:e.version,supportedVersions:[{version:e.version,status:"stable"}]},capabilities:{provides:["profile.get","content.get","content.list","content.sync","creator.track","content.track","analytics.query","webhook.event.normalize"].map((t)=>({key:`${e.key}.${t}`,version:"1.0.0"}))},configSchema:{schema:{type:"object",properties:{apiVersion:{type:"string"}}}},secretSchema:{schema:{type:"object",required:["clientId","clientSecret"],properties:{clientId:{type:"string"},clientSecret:{type:"string"}}},example:{clientId:"***",clientSecret:"***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:e.baseUrl,byokSetup:{setupInstructions:"Register an official provider application and store credentials through the integration secret runtime.",requiredScopes:[...e.scopes],keyRotationSupported:!0,quotaTrackingSupported:!0}})}var gl=yt({key:"youtube",title:"YouTube",authorizationUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/youtube.readonly"],baseUrl:"https://www.googleapis.com/youtube/v3",version:"v3"}),ml=yt({key:"tiktok",title:"TikTok",authorizationUrl:"https://www.tiktok.com/v2/auth/authorize/",tokenUrl:"https://open.tiktokapis.com/v2/oauth/token/",scopes:["user.info.basic","video.list"],baseUrl:"https://open.tiktokapis.com",version:"v2"}),yl=yt({key:"instagram",title:"Instagram",authorizationUrl:"https://www.instagram.com/oauth/authorize",tokenUrl:"https://api.instagram.com/oauth/access_token",scopes:["instagram_business_basic"],baseUrl:"https://graph.instagram.com",version:"graph"}),fl=yt({key:"x",title:"X",authorizationUrl:"https://x.com/i/oauth2/authorize",tokenUrl:"https://api.x.com/2/oauth2/token",scopes:["tweet.read","users.read","offline.access"],baseUrl:"https://api.x.com/2",version:"v2"});function Ir(e){return e.register(gl).register(ml).register(yl).register(fl)}function $v(e){return Ir(e)}var hl=M({key:"health.strava",title:"Strava",description:"Strava integration for activities, workouts, and athlete biometrics.",docsUrl:"https://developers.strava.com/",tags:["strava","official-api"],byokScopes:["read","activity:read_all"]});function Vi(e){return e.register(hl)}import{StabilityEnum as bl}from"@lssm/lib.contracts-spec/ownership";var kl=o({meta:{key:"payments.stripe",version:"1.0.0",category:"payments",title:"Stripe Payments",description:"Stripe integration for payment processing, charges, and payouts.",domain:"payments",owners:["platform.payments"],tags:["payments","psp"],stability:bl.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.stripe.com",apiVersionHeader:"Stripe-Version"},{type:"webhook",inbound:{signatureHeader:"stripe-signature",signingAlgorithm:"hmac-sha256"}},{type:"sdk",packageName:"stripe",minVersion:"14.0.0"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key",headerName:"Authorization",prefix:"Bearer "},{type:"oauth2",grantType:"authorization_code",authorizationUrl:"https://connect.stripe.com/oauth/authorize",tokenUrl:"https://connect.stripe.com/oauth/token",scopes:["read_write"]},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"stripe-signature"}],versionPolicy:{currentVersion:"2026-07-29.dahlia",supportedVersions:[{version:"2026-07-29.dahlia",status:"stable"}],versionHeader:"Stripe-Version"},capabilities:{provides:[{key:"payments.psp",version:"1.0.0"},{key:"payments.customers",version:"1.0.0"},{key:"payments.payment-methods",version:"1.0.0"},{key:"payments.checkout",version:"1.0.0"},{key:"payments.subscriptions",version:"1.0.0"},{key:"payments.invoices",version:"1.0.0"},{key:"payments.disputes",version:"1.0.0"},{key:"payments.payouts",version:"1.0.0"},{key:"payments.marketplace",version:"1.0.0"},{key:"payments.webhooks",version:"1.0.0"}],requires:[{key:"platform.webhooks",optional:!0,reason:"Recommended for reliable event ingestion"}]},configSchema:{schema:{type:"object",properties:{accountId:{type:"string",description:"Connected account ID when using Stripe Connect (BYOK)."},region:{type:"string",description:"Optional Stripe region or data residency hint."}}},example:{accountId:"acct_123",region:"us-east-1"}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"Stripe secret API key (sk_live_... or sk_test_...)."},webhookSecret:{type:"string",description:"Signing secret for webhook verification."}}},example:{apiKey:"sk_live_***",webhookSecret:"whsec_***"}},healthCheck:{method:"ping",timeoutMs:5000},docsUrl:"https://stripe.com/docs/api",constraints:{rateLimit:{rpm:1000,rph:20000}},byokSetup:{setupInstructions:"Create a restricted Stripe API key with write access to Charges. Provide a webhook signing secret when inbound events are enabled.",requiredScopes:["charges:write","customers:read"],keyRotationSupported:!0,quotaTrackingSupported:!1}});function $i(e){return e.register(kl)}import{StabilityEnum as Il}from"@lssm/lib.contracts-spec/ownership";var vl=o({meta:{key:"database.supabase",version:"1.0.0",category:"database",title:"Supabase Postgres",description:"Supabase Postgres integration for SQL query execution and transactional workloads.",domain:"infrastructure",owners:["platform.infrastructure"],tags:["database","postgres","supabase"],stability:Il.Beta},supportedModes:["managed","byok"],transports:[{type:"rest"},{type:"sdk",packageName:"@supabase/supabase-js"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"basic"}],capabilities:{provides:[{key:"database.sql",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{maxConnections:{type:"number",description:"Optional connection pool size when opening a Postgres client to Supabase."},sslMode:{type:"string",enum:["require","allow","prefer"],description:"TLS mode used by the Postgres client."}}},example:{maxConnections:10,sslMode:"require"}},secretSchema:{schema:{type:"object",required:["databaseUrl"],properties:{databaseUrl:{type:"string",description:"Supabase Postgres connection string (transaction or session pooler endpoint)."}}},example:{databaseUrl:"postgresql://postgres.[project-ref]:password@aws-0-region.pooler.supabase.com:6543/postgres"}},healthCheck:{method:"ping",timeoutMs:5000},docsUrl:"https://supabase.com/docs/guides/database/connecting-to-postgres",byokSetup:{setupInstructions:"Create or reuse a Supabase project and provide a Postgres connection string with permissions aligned to your workload.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Ji(e){return e.register(vl)}import{StabilityEnum as xl}from"@lssm/lib.contracts-spec/ownership";var Sl=o({meta:{key:"vectordb.supabase",version:"1.0.0",category:"vector-db",title:"Supabase Vector Database (pgvector)",description:"Supabase integration for embedding storage and vector similarity search using pgvector.",domain:"ai",owners:["platform.ai"],tags:["vector-db","supabase","pgvector"],stability:xl.Beta},supportedModes:["managed","byok"],transports:[{type:"rest"},{type:"sdk",packageName:"@supabase/supabase-js"}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"bearer"}],capabilities:{provides:[{key:"vector-db.search",version:"1.0.0"},{key:"vector-db.storage",version:"1.0.0"}],requires:[{key:"ai.embeddings",optional:!0,reason:"Required when vectors are generated by a hosted embedding provider."}]},configSchema:{schema:{type:"object",properties:{schema:{type:"string",description:"Schema name containing the pgvector table (default: public)."},table:{type:"string",description:"Table used to store vectors and metadata (default: contractspec_vectors)."},createTableIfMissing:{type:"boolean",description:"Automatically create pgvector extension and table when first writing vectors."},distanceMetric:{type:"string",enum:["cosine","l2","inner_product"],description:"Distance metric used for nearest-neighbor search."}}},example:{schema:"public",table:"contractspec_vectors",createTableIfMissing:!0,distanceMetric:"cosine"}},secretSchema:{schema:{type:"object",required:["databaseUrl"],properties:{databaseUrl:{type:"string",description:"Supabase Postgres connection string with privileges to read/write vector rows."}}},example:{databaseUrl:"postgresql://postgres.[project-ref]:password@aws-0-region.pooler.supabase.com:6543/postgres"}},healthCheck:{method:"ping",timeoutMs:5000},docsUrl:"https://supabase.com/docs/guides/ai/vector-columns",byokSetup:{setupInstructions:"Create or reuse a Supabase project, enable pgvector, and provide a Postgres connection string with read/write access to the target vector table.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Qi(e){return e.register(Sl)}import{StabilityEnum as wl}from"@lssm/lib.contracts-spec/ownership";var Rl=o({meta:{key:"web-research.tavily",version:"1.0.0",category:"custom",title:"Tavily Search, Extract, Crawl, and Research",description:"Tavily integration for real-time search, extraction, crawling, mapping, and research through API, SDK, MCP, and OAuth-enabled remote MCP.",domain:"knowledge",owners:["platform.ai"],tags:["search","extract","crawl","research","mcp","oauth"],stability:wl.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed Tavily credentials are not declared because Tavily API/MCP access is currently tenant-owned API-key or OAuth-token setup; ContractSpec does not provide a shared managed Tavily tenant.",secretFields:[{key:"apiKey"},{key:"mcpAccessToken"}],rotationSupported:!1}),transports:[{type:"sdk",packageName:"@tavily/core",runtime:"universal"},{type:"rest",baseUrl:"https://api.tavily.com"},{type:"mcp",transport:"http",url:"https://mcp.tavily.com/mcp/"},{type:"mcp",transport:"stdio",command:"npx",args:["-y","@tavily/mcp"]}],preferredTransport:"sdk",supportedAuthMethods:[{type:"bearer",tokenField:"apiKey"},{type:"oauth2",grantType:"authorization_code",tokenUrl:"https://mcp.tavily.com/token",authorizationUrl:"https://mcp.tavily.com/authorize",scopes:["openid","offline_access"],pkce:!0}],capabilities:{provides:[{key:"web.search",version:"1.0.0"},{key:"web.extract",version:"1.0.0"},{key:"web.crawl",version:"1.0.0"},{key:"web.research",version:"1.0.0"},{key:"provider.mcp.tavily",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{projectId:{type:"string"},baseUrl:{type:"string"},mcpUrl:{type:"string"},defaultSearchDepth:{type:"string",enum:["basic","advanced"]}}},example:{baseUrl:"https://api.tavily.com",mcpUrl:"https://mcp.tavily.com/mcp/",defaultSearchDepth:"basic"}},secretSchema:{schema:{type:"object",properties:{apiKey:{type:"string",description:"Tavily API key."},mcpAccessToken:{type:"string",description:"OAuth access token for Tavily remote MCP."}}},example:{apiKey:"tvly-***",mcpAccessToken:"oauth_***"}},healthCheck:{method:"custom",timeoutMs:5000},docsUrl:"https://docs.tavily.com/",byokSetup:{setupInstructions:"Use @tavily/core for API calls when available. For MCP, connect to the remote MCP URL with OAuth discovery or API-key auth, or run @tavily/mcp locally.",requiredScopes:["openid","offline_access"],keyRotationSupported:!1,quotaTrackingSupported:!0}}),Pl=P({key:"web-research.tavily",version:"1.1.0",title:"Tavily Web Access",description:"Tavily Search, Extract, Map, Crawl, Research, polling, SSE streaming, SDK, and native MCP access.",tags:["search","extract","map","crawl","research","sse","mcp"],transports:[{type:"sdk",packageName:"@tavily/core",minVersion:"0.7.7",runtime:"universal"},{type:"rest",baseUrl:"https://api.tavily.com"},{type:"sse",url:"https://api.tavily.com/research",discoveryOperationKey:"web-access.tavily.research.stream",resumeHeader:"Last-Event-ID"},{type:"mcp",transport:"http",url:"https://mcp.tavily.com/mcp/",toolPrefix:"tavily"},{type:"mcp",transport:"stdio",command:"npx",args:["-y","@tavily/mcp"],toolPrefix:"tavily"},{type:"mcp",transport:"stdio",command:"npx",args:["-y","tavily-mcp"],toolPrefix:"tavily"}],preferredTransport:"sdk",auth:[{type:"bearer",tokenField:"apiKey"},{type:"oauth2",grantType:"authorization_code",tokenUrl:"https://mcp.tavily.com/token",authorizationUrl:"https://mcp.tavily.com/authorize",scopes:["openid","offline_access"],pkce:!0}],secretFields:["apiKey","mcpAccessToken"],capabilities:["web.search","web.extract","web.map","web.crawl","web.research","provider.mcp.tavily"],docsUrl:"https://docs.tavily.com/documentation/api-reference/introduction"});function Yi(e){return e.register(Rl).register(Pl)}import{StabilityEnum as Al}from"@lssm/lib.contracts-spec/ownership";var Ol=o({meta:{key:"meeting-recorder.tldv",version:"1.0.0",category:"meeting-recorder",title:"tl;dv Meeting Recorder",description:"tl;dv Public API for meeting recordings, transcripts, and webhook events.",domain:"productivity",owners:["platform.integrations"],tags:["meeting-recorder","tldv","transcripts"],stability:Al.Experimental},supportedModes:["byok"],credentialManifest:y({unsupportedModeReason:"Managed tl;dv credentials are not declared because API and webhook access depend on tenant-owned tl;dv API keys and workspace configuration.",secretFields:[{key:"apiKey",required:!0},{key:"webhookSecret"}],rotationSupported:!1}),transports:[{type:"rest"},{type:"webhook",inbound:{signatureHeader:"x-tldv-signature",signingAlgorithm:"hmac-sha256"}}],preferredTransport:"rest",supportedAuthMethods:[{type:"api-key"},{type:"webhook-signing",algorithm:"hmac-sha256",signatureHeader:"x-tldv-signature"}],capabilities:{provides:[{key:"meeting-recorder.meetings.read",version:"1.0.0"},{key:"meeting-recorder.transcripts.read",version:"1.0.0"},{key:"meeting-recorder.webhooks",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{baseUrl:{type:"string",description:"Optional override for the tl;dv API base URL. Defaults to https://pasta.tldv.io/v1alpha1."},webhookUrl:{type:"string",description:"Webhook destination URL configured in tl;dv settings (MeetingReady/TranscriptReady)."},webhookEvents:{type:"array",items:{type:"string"},description:"Webhook triggers to enable (MeetingReady, TranscriptReady)."},webhookScope:{type:"string",description:"Webhook scope to configure (user, team, or organization)."}}},example:{baseUrl:"https://pasta.tldv.io/v1alpha1",webhookUrl:"https://example.com/webhooks/tldv",webhookEvents:["MeetingReady","TranscriptReady"],webhookScope:"team"}},secretSchema:{schema:{type:"object",required:["apiKey"],properties:{apiKey:{type:"string",description:"tl;dv API key used in the x-api-key header for API requests."},webhookSecret:{type:"string",description:"Optional shared secret for webhook verification if configured in your environment."}}},example:{apiKey:"tldv-***",webhookSecret:"tldv-webhook-secret"}},healthCheck:{method:"ping",timeoutMs:6000},docsUrl:"https://doc.tldv.io/index.html",byokSetup:{setupInstructions:"Generate a tl;dv API key and optionally configure MeetingReady/TranscriptReady webhooks.",keyRotationSupported:!1,quotaTrackingSupported:!1}});function Xi(e){return e.register(Ol)}import{StabilityEnum as Cl}from"@lssm/lib.contracts-spec/ownership";var Tl=o({meta:{key:"sms.twilio",version:"1.0.0",category:"sms",title:"Twilio Messaging",description:"Twilio SMS integration for transactional and notification messaging.",domain:"communications",owners:["platform.messaging"],tags:["sms","messaging"],stability:Cl.Stable},supportedModes:["managed","byok"],transports:[{type:"rest",baseUrl:"https://api.twilio.com"},{type:"webhook",inbound:{signatureHeader:"x-twilio-signature",signingAlgorithm:"hmac-sha1"}},{type:"sdk",packageName:"twilio",minVersion:"5.0.0"}],preferredTransport:"rest",supportedAuthMethods:[{type:"basic"}],capabilities:{provides:[{key:"sms.outbound",version:"1.0.0"}]},configSchema:{schema:{type:"object",properties:{fromNumber:{type:"string",description:"Default Twilio phone number used as sender."}}},example:{fromNumber:"+15551234567"}},secretSchema:{schema:{type:"object",required:["accountSid","authToken"],properties:{accountSid:{type:"string",description:"Twilio Account SID."},authToken:{type:"string",description:"Twilio Auth Token."}}},example:{accountSid:"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",authToken:"auth-token"}},healthCheck:{method:"custom",timeoutMs:3000},docsUrl:"https://www.twilio.com/docs/sms/api",constraints:{rateLimit:{rpm:200}},byokSetup:{setupInstructions:"Provide a Twilio account SID, auth token, and verify the outbound sending numbers used by the integration.",keyRotationSupported:!0,quotaTrackingSupported:!1}});function Zi(e){return e.register(Tl)}var Ml=M({key:"health.whoop",title:"Whoop",description:"Whoop integration for sleep, recovery, workouts, and physiological metrics.",docsUrl:"https://developer.whoop.com/",tags:["whoop","official-api"],byokScopes:["read:recovery","read:workout","read:sleep","read:profile"]});function eo(e){return e.register(Ml)}function to(){let e=new br;return Dn(e),ci(e),$i(e),qi(e),Fi(e),Bi(e),Qi(e),Ji(e),Pi(e),Oi(e),Ai(e),Vn(e),ai(e),$n(e),Jn(e),zi(e),Yi(e),Fn(e),bi(e),jn(e),Ni(e),fi(e),Gn(e),Ki(e),Yn(e),_n(e),_i(e),Wn(e),Kn(e),ei(e),Gi(e),ni(e),ii(e),oi(e),Wi(e),Zi(e),vi(e),ki(e),Ii(e),xi(e),Si(e),wi(e),Ri(e),ri(e),ji(e),di(e),gi(e),li(e),mi(e),yi(e),ui(e),pi(e),Ti(e),si(e),Xi(e),Xn(e),Qn(e),Hn(e),Mi(e),Ei(e),Li(e),eo(e),Un(e),Di(e),Vi(e),ti(e),Zn(e),Ci(e),zn(e),Ui(e),Ir(e),Nn(e),e}function $S(e,t){return e.filter((r)=>r.transports&&Bn(r.transports,t))}function JS(e,t){return e.filter((r)=>r.supportedAuthMethods&&$r(r.supportedAuthMethods,t))}function QS(e){return e.filter((t)=>t.versionPolicy!==void 0)}function YS(e){return e.filter((t)=>t.supportedModes.includes("byok")&&t.byokSetup?.keyRotationSupported===!0)}var El={"advertising.meta":"packages/libs/contracts-integrations/src/integrations/advertising/specs.ts","advertising.google":"packages/libs/contracts-integrations/src/integrations/advertising/specs.ts","advertising.tiktok":"packages/libs/contracts-integrations/src/integrations/advertising/specs.ts","ai-media.higgsfield":"packages/libs/contracts-integrations/src/integrations/providers/higgsfield.ts","google.calendar":"packages/libs/contracts-integrations/src/integrations/providers/google-calendar.ts","google.drive":"packages/libs/contracts-integrations/src/integrations/providers/google-drive.ts","openai.image":"packages/libs/contracts-integrations/src/integrations/providers/openai-image.ts","openai.realtime":"packages/libs/contracts-integrations/src/integrations/providers/openai-realtime.ts"};function Ll(e){return El[e]??`packages/libs/contracts-integrations/src/integrations/providers/${e.replaceAll(".","-")}.ts`}function tw(){return to().list().map((e)=>Xr(e,{sourcePath:Ll(e.meta.key)}))}function nw(e){if(!e.authorityEvaluationRefId||!e.approvalRefId||!e.idempotencyKey)throw Error("Communication channel writes require authority, approval, and idempotency")}var ft="crm.read.v1";function ow(e){if([e.providerKey,e.externalId,e.capturedAt,e.provenanceRefId,e.retentionPolicyRefId,e.dedupeKey,e.idempotencyKey].some((n)=>n.trim().length===0))throw new D("External profiles require complete identity and governance metadata");if(e.evidenceRefIds.length===0)throw new D("External profiles require at least one evidence reference");if(e.legalBasis==="consent"&&!e.consentRefId)throw new D("Consent legal basis requires a consent reference");let r;try{r=new URL(e.canonicalUrl)}catch{throw new D("External profile URL is invalid")}if(r.protocol!=="https:"||r.username!==""||r.password!==""||r.search!==""||r.hash!=="")throw new D("External profile URL must be a canonical HTTPS URL");if(e.providerKey==="linkedin"){let n=r.hostname==="linkedin.com"||r.hostname==="www.linkedin.com",i=e.kind==="professional-profile"?"/in/":"/company/";if(!n||!r.pathname.startsWith(i))throw new D("LinkedIn profile URL does not match its governed profile kind")}}class D extends Error{constructor(e){super(e);this.name="CrmReadContractError"}}function ro(e){if(e.contractVersion!=="crm.read.v1")throw new D("Unsupported CRM read contract version");if([e.requestId,e.tenant.tenantId,e.tenant.workspaceId,e.tenant.actorPrincipalId,e.tenant.authorityEvaluationRefId,e.legal.retentionPolicyRefId].some((n)=>n.trim().length===0))throw new D("CRM reads require complete tenant governance");if(e.legal.legalBasis==="consent"&&!e.legal.consentRefId)throw new D("Consent legal basis requires a consent reference");if(e.entityKinds.length===0)throw new D("At least one CRM entity kind is required");let r=new Set(["contact","company","deal"]);if(e.entityKinds.length>r.size||new Set(e.entityKinds).size!==e.entityKinds.length||e.entityKinds.some((n)=>!r.has(n)))throw new D("CRM entity kinds must be unique and supported");if(!Number.isInteger(e.pageSize)||e.pageSize<1||e.pageSize>100)throw new D("CRM page size must be an integer from 1 to 100")}function ht(e){let t=e.records.map((r)=>({...r}));return Ul(t),{providerKey:e.providerKey,readPage:(r)=>Dl(e,t,r)}}function Dl(e,t,r){ro(r),ql(t,r.tenant.tenantId);let n=[...new Set(r.entityKinds)].sort().join(","),i=Fl(e.providerKey,r,n),s=t.filter((I)=>!I.tombstoned&&r.entityKinds.includes(I.kind)),u=s.slice(i,i+r.pageSize),c=i+u.length,z=c<s.length;return{contractVersion:ft,requestId:r.requestId,providerKey:e.providerKey,tenantId:r.tenant.tenantId,workspaceId:r.tenant.workspaceId,items:u.map((I)=>_l(e,r,I)),nextCursor:z?Wl(e.providerKey,r,n,c):void 0,hasMore:z,readOnly:!0}}function _l(e,t,r){let n=`${e.providerKey}:${r.kind}:${r.sourceObjectId}`;return{id:n,kind:r.kind,tenantId:t.tenant.tenantId,workspaceId:t.tenant.workspaceId,displayName:r.displayName,attributes:{...r.attributes},provenance:{providerKey:e.providerKey,sourceObjectType:r.sourceObjectType,sourceObjectId:r.sourceObjectId,sourceRevision:r.sourceRevision,sourceUpdatedAt:r.sourceUpdatedAt,capturedAt:e.capturedAt,evidenceRefIds:[...r.evidenceRefIds]},legal:{...t.legal},dedupeKey:`${t.tenant.tenantId}:${n}`,idempotencyKey:`${t.tenant.tenantId}:${n}:${r.sourceRevision}`}}function ql(e,t){if(e.some((r)=>r.tenantId!==t))throw new D("CRM fixture crossed the requested tenant boundary")}function Ul(e){if(e.some((t)=>t.sourceObjectId.trim().length===0||t.sourceRevision.trim().length===0||t.displayName.trim().length===0||t.evidenceRefIds.length===0||Number.isNaN(Date.parse(t.sourceUpdatedAt))))throw new D("CRM fixtures require complete provenance and evidence")}function Wl(e,t,r,n){return[ft,e,t.tenant.tenantId,t.tenant.workspaceId,r,n].map(encodeURIComponent).join("|")}function Fl(e,t,r){if(!t.cursor)return 0;let n=t.cursor.split("|").map(decodeURIComponent),[i,s,u,c,z,I]=n;if(n.length!==6||i!==ft||s!==e||u!==t.tenant.tenantId||c!==t.tenant.workspaceId||z!==r)throw new D("CRM cursor is outside the requested read scope");let re=Number(I);if(!Number.isInteger(re)||re<0)throw new D("CRM cursor offset is invalid");return re}function dw(e){return ht({providerKey:"hubspot-fixture",capturedAt:e.capturedAt,records:e.records.map(jl)})}function jl(e){let t={contacts:"contact",companies:"company",deals:"deal"};return{tenantId:e.tenantId,kind:t[e.objectType],sourceObjectType:e.objectType,sourceObjectId:e.id,sourceRevision:e.revision,sourceUpdatedAt:e.updatedAt,evidenceRefIds:[...e.evidenceRefIds],displayName:Bl(e.properties),attributes:{...e.properties},tombstoned:e.archived}}function Bl(e){let t=[e.firstname,e.lastname].filter(Boolean).join(" "),r=e.name??e.dealname??t;if(typeof r!=="string"||r.length===0)throw Error("HubSpot-shaped CRM fixture requires a display name");return r}function gw(e){return ht({providerKey:"salesforce-fixture",capturedAt:e.capturedAt,records:e.records.map(Kl)})}function Kl(e){let t={Contact:"contact",Account:"company",Opportunity:"deal"};return{tenantId:e.tenantId,kind:t[e.attributes.type],sourceObjectType:e.attributes.type,sourceObjectId:e.Id,sourceRevision:e.revision,sourceUpdatedAt:e.LastModifiedDate,evidenceRefIds:[...e.evidenceRefIds],displayName:e.Name,attributes:{...e.fields},tombstoned:e.IsDeleted}}var yw={ogImage:{width:1200,height:630},twitterCard:{width:1200,height:675},instagramSquare:{width:1080,height:1080},instagramStory:{width:1080,height:1920},blogHero:{width:1920,height:1080},thumbnail:{width:640,height:360},favicon:{width:512,height:512},emailHeader:{width:600,height:200},illustration:{width:1024,height:1024}};class bt extends Error{code;providerRef;retryable;retryAfterMs;evidence;cause;constructor(e){super(e.message);this.name="PaymentProviderError",this.code=e.code,this.providerRef=e.providerRef,this.retryable=e.retryable,this.retryAfterMs=e.retryAfterMs,this.evidence=e.evidence,this.cause=e.cause}toJSON(){return{code:this.code,message:this.message,providerRef:this.providerRef,retryable:this.retryable,retryAfterMs:this.retryAfterMs,evidence:this.evidence,cause:this.cause}}}function vw(e,t,r){return{tenantId:e.tenantId,environment:e.environment,accountId:e.accountId,actorId:e.actor.id,idempotencyKey:e.idempotencyKey,operation:t.operation,amount:t.amount,resourceId:t.resourceId,expiresAt:r}}function xw(e,t){let{authorization:r}=e,n=r.mode==="approval_required"&&r.evidence.length===0;if(r.decision!=="allow"||n)throw new bt({code:"authorization_denied",message:r.reason??"Payment mutation requires an allowed authorization decision with evidence.",retryable:r.decision==="review",evidence:r.evidence});let{scope:i}=r,s=Date.parse(i.expiresAt),u=!Number.isFinite(s)||s<=Date.now(),c=i.tenantId!==e.tenantId||i.environment!==e.environment||i.accountId!==e.accountId||i.actorId!==e.actor.id||i.operation!==t.operation||i.idempotencyKey!==e.idempotencyKey||i.resourceId!==t.resourceId||!Nl(i.amount,t.amount);if(u||c)throw new bt({code:"authorization_denied",message:u?"Payment authorization decision has expired.":"Payment authorization decision does not cover this mutation.",retryable:!1,evidence:r.evidence})}function Nl(e,t){if(!e||!t)return e===t;return e.currency===t.currency&&e.amountMinor===t.amountMinor}import{StabilityEnum as Hl}from"@lssm/lib.contracts-spec/ownership";var Mw={meta:{key:"analytics.posthog.llm",version:"1.0.0",title:"PostHog LLM Analytics Telemetry",description:"Telemetry events for PostHog LLM Analytics: generation tracing, token usage, and evaluation-ready metadata.",domain:"analytics",owners:["@platform.integrations"],tags:["analytics","posthog","llm","ai","telemetry"],stability:Hl.Beta},events:[{key:"posthog.llm.generation",version:"1.0.0",semantics:{who:"AI agent or LLM consumer",what:"Captures an LLM generation call with full observability metadata",why:"Enable LLM performance monitoring, cost tracking, and automated quality evaluations via PostHog"},properties:{$ai_model:{type:"string",required:!0,description:"The LLM model identifier (e.g., gpt-4o, claude-sonnet-4-20250514)"},$ai_provider:{type:"string",required:!0,description:"The LLM provider (e.g., openai, anthropic, contractspec)"},$ai_latency:{type:"number",required:!1,description:"LLM call latency in seconds"},$ai_input_tokens:{type:"number",required:!1,description:"Number of input/prompt tokens consumed"},$ai_output_tokens:{type:"number",required:!1,description:"Number of output/completion tokens generated"},$ai_total_cost_usd:{type:"number",required:!1,description:"Total cost in USD (input + output)"},$ai_is_error:{type:"boolean",required:!1,description:"Whether the generation resulted in an error"},$ai_trace_id:{type:"string",required:!1,description:"Trace ID for grouping related generations"},$ai_stream:{type:"boolean",required:!1,description:"Whether the response was streamed"},$ai_time_to_first_token:{type:"number",required:!1,description:"Time to first token in seconds (streaming only)"},$ai_tools:{type:"json",required:!1,description:"Tools/functions available to the LLM"},$ai_input:{type:"json",required:!1,pii:!0,redact:!0,description:"Messages sent to the LLM (may contain PII)"},$ai_output_choices:{type:"json",required:!1,pii:!0,redact:!0,description:"Response choices from the LLM (may contain PII)"},contractspec_operation:{type:"string",required:!1,description:"ContractSpec operation name"},contractspec_version:{type:"string",required:!1,description:"ContractSpec operation version"},contractspec_agent_id:{type:"string",required:!1,description:"ContractSpec agent identifier"},contractspec_finish_reason:{type:"string",required:!1,description:"AI SDK finish reason (stop, tool-calls, error, etc.)"},contractspec_tool_count:{type:"number",required:!1,description:"Number of tool calls made in this step"}},privacy:"internal",tags:["llm","generation","posthog"]}],config:{defaultRetentionDays:90,defaultSamplingRate:1,providers:[{type:"posthog",config:{eventName:"$ai_generation",enableEvaluations:!0,evaluationTemplates:["relevance","helpfulness","jailbreak","hallucination","toxicity"]}}]}},Gl=["$ai_input","$ai_output_choices"],Ew={generation:"$ai_generation",span:"$ai_span",evaluation:"$ai_evaluation"},Lw={relevance:"relevance",helpfulness:"helpfulness",jailbreak:"jailbreak",hallucination:"hallucination",toxicity:"toxicity"};function Dw(e){let t={...e};for(let r of Gl)if(r in t)t[r]="[REDACTED]";return t}function qw(e,t){return Error(`${e} does not support project-management capability "${t}" on the Work Sync v2 contract.`)}function Uw(e,t){if(e.record)return e.record;throw Error(`${t} expected a ProjectManagementRemoteRecord but received mutation status "${e.status}".`)}function Fw(e){return Boolean(e?.tombstone)}var Bw={landscape:{type:"landscape",width:1920,height:1080},portrait:{type:"portrait",width:1080,height:1920},square:{type:"square",width:1080,height:1080}};var UP=["profile.get","content.get","content.list","content.sync","webhook.event.normalize"],WP=["analytics.query","content.track","creator.track"];class zl extends Error{code;retryable;providerStatus;constructor(e,t,r=!1,n){super(t);this.code=e;this.retryable=r;this.providerStatus=n;this.name="SocialProviderError"}}var jP={thirtyMinuteDays:90,hourlyDays:548,dailyDays:1826};function QP(e,t){if(!e)return;return t??e.currentVersion}function Vl(e,t){return e.supportedVersions.find((r)=>r.version===t)}function YP(e,t){let r=Vl(e,t);return r?.status==="deprecated"||r?.status==="sunset"}function XP(e){return e.supportedVersions.filter((t)=>t.status==="stable"||t.status==="beta")}import{ScalarTypeEnum as Re,SchemaModel as ke}from"@lssm/lib.schema";var no=["browser.act","browser.observe","browser.extract"],vr=Re.String_unsecure(),we=Re.NonEmptyString(),xr={sessionId:{type:we,isOptional:!1},pageId:{type:vr,isOptional:!0}},io=new ke({name:"WebAccessBrowserActPayload",fields:{...xr,instruction:{type:we,isOptional:!1},elementRef:{type:vr,isOptional:!0},variables:{type:Re.JSONObject(),isOptional:!0}}}),oo=new ke({name:"WebAccessBrowserObservePayload",fields:{...xr,instruction:{type:vr,isOptional:!0}}}),ao=new ke({name:"WebAccessBrowserExtractPayload",fields:{...xr,instruction:{type:we,isOptional:!1},resultSchema:{type:Re.JSONObject(),isOptional:!0}}}),so=new ke({name:"WebAccessBrowserActDataRecord",fields:{action:{type:we,isOptional:!1},performed:{type:Re.Boolean(),isOptional:!1}}}),$l=new ke({name:"WebAccessBrowserActionCandidateRecord",fields:{description:{type:we,isOptional:!1},elementRef:{type:we,isOptional:!1}}}),co=new ke({name:"WebAccessBrowserObserveDataRecord",fields:{candidates:{type:$l,isOptional:!1,isArray:!0}}}),po=new ke({name:"WebAccessBrowserExtractDataRecord",fields:{value:{type:Re.JSONObject(),isOptional:!1}}});var Jl=["rest","sdk","x402","webhook","websocket","sse","hostedMcp","localMcp","contractspecMcp","httpProxy","httpsProxy","socksProxy"];function rA(e){let t=new Set,r=new Set;for(let[n,i]of e.entries()){if(t.add(i.provider),!i.capabilityId||!i.adapterKey)throw Error(`web-access ledger row ${n} is missing identity`);for(let u of Jl){let c=i.surfaces[u];if(!c)throw Error(`${i.provider}.${u} is missing`);if(c.state==="unsupported"&&!c.reason)throw Error(`${i.provider}.${u} requires a reason`);if(c.state!=="unsupported")Ql(i.provider,u,c.evidence)}if(i.operationKeys.length===0)throw Error(`${i.provider} must map ContractSpec operations`);if(i.testIds.length===0)throw Error(`${i.provider} must map fixture tests`);let s=i.browserAutomation;if(s){if(s.operationKeys.length===0)throw Error(`${i.provider} browser automation requires operations`);for(let u of s.operationKeys)if(!i.operationKeys.includes(u))throw Error(`${i.provider} browser automation operation is missing`);if(s.state==="contract-ready"&&!s.reason)throw Error(`${i.provider} contract-ready automation requires a reason`);if(s.state==="supported"&&(!s.adapterRef||!s.testIds||s.testIds.length===0))throw Error(`${i.provider} supported automation requires adapter tests`)}for(let u of i.operationKeys){if(r.has(u))throw Error(`duplicate web-access operation ${u}`);r.add(u)}if(lo(i.provider,"provider",i.evidence),!/^[a-f0-9]{64}$/.test(i.evidence.snapshotSha256))throw Error(`${i.provider} evidence digest is invalid`);if(!/^[a-f0-9]{64}$/.test(i.evidence.retrievedContentSha256))throw Error(`${i.provider} retrieved-content digest is invalid`);if(i.evidence.sourceUrlSha256!==i.evidence.snapshotSha256)throw Error(`${i.provider} legacy digest must pin the snapshot`);if(!/^\d{4}-\d{2}-\d{2}$/.test(i.evidence.retrievedAt))throw Error(`${i.provider} evidence date is invalid`)}if(t.size!==11)throw Error("web-access ledger must cover all eleven shipped providers")}function Ql(e,t,r){if(!r||r.contractRefs.length===0||!r.adapterRef||r.testIds.length===0)throw Error(`${e}.${t} requires claim-level evidence`);if(lo(e,t,r),!r.snapshotPath||!/^[a-f0-9]{64}$/.test(r.snapshotSha256))throw Error(`${e}.${t} evidence digest is invalid`);if(!/^[a-f0-9]{64}$/.test(r.retrievedContentSha256))throw Error(`${e}.${t} retrieved-content digest is invalid`);if(r.sourceUrlSha256!==r.snapshotSha256)throw Error(`${e}.${t} legacy digest must pin the snapshot`);if(!/^\d{4}-\d{2}-\d{2}$/.test(r.retrievedAt))throw Error(`${e}.${t} evidence date is invalid`)}function lo(e,t,r){if(r.sourceUrl?.startsWith("https://")||r.sourcePath)return;throw Error(`${e}.${t} evidence source is invalid`)}import{defineEvent as fo}from"@lssm/lib.contracts-spec/events";import{ScalarTypeEnum as _,SchemaModel as kt}from"@lssm/lib.schema";var ie=_.NonEmptyString(),uo=new kt({name:"WebAccessOperationInput",fields:{provider:{type:ie,isOptional:!1},tenantId:{type:_.ID(),isOptional:!1},workspaceId:{type:_.ID(),isOptional:!0},connectionId:{type:_.ID(),isOptional:!1},correlationId:{type:ie,isOptional:!1},policyMode:{type:ie,isOptional:!1},authorization:{type:_.JSONObject(),isOptional:!0},budget:{type:_.JSONObject(),isOptional:!0},payload:{type:_.JSONObject(),isOptional:!1}}}),go=new kt({name:"WebAccessOperationOutput",fields:{status:{type:ie,isOptional:!1},data:{type:_.JSONObject(),isOptional:!0},sources:{type:_.JSONObject(),isOptional:!1,isArray:!0},usage:{type:_.JSONObject(),isOptional:!0},provenance:{type:_.JSONObject(),isOptional:!1},rawRedacted:{type:_.JSONObject(),isOptional:!0}}}),mo=new kt({name:"BrightDataDeliveryPayload",fields:{connectionId:{type:_.ID(),isOptional:!1},deliveryId:{type:ie,isOptional:!1},jobId:{type:ie,isOptional:!0},receivedAt:{type:_.DateTime(),isOptional:!1},contentEncoding:{type:ie,isOptional:!0},payload:{type:_.JSONObject(),isOptional:!1}}}),yo=new kt({name:"MassiveDeliveryPayload",fields:{connectionId:{type:_.ID(),isOptional:!1},deliveryId:{type:ie,isOptional:!1},jobId:{type:ie,isOptional:!0},kind:{type:ie,isOptional:!1},receivedAt:{type:_.DateTime(),isOptional:!1},payload:{type:_.JSONObject(),isOptional:!1}}});var ho=fo({meta:{key:"web-access.bright-data.delivery.received",version:"1.0.0",description:"Normalized Bright Data asynchronous delivery received.",stability:"experimental",owners:["@platform.integrations"],tags:["web-access","bright-data","webhook"]},pii:["payload"],payload:mo}),bo=fo({meta:{key:"web-access.massive.delivery.received",version:"1.0.0",description:"Normalized Massive asynchronous callback received.",stability:"experimental",owners:["@platform.integrations"],tags:["web-access","massive","webhook"]},pii:["payload"],payload:yo}),pA=[ho,bo];function dA(e){return e.register(ho).register(bo)}function oe(e,t,r,n="2026-08-09"){return Object.fromEntries(Object.entries(r).map(([i,s])=>[i,{sourceUrl:s.sourceUrl,snapshotPath:`packages/libs/contracts-integrations/evidence/web-access/${e}`,snapshotSha256:t,retrievedContentSha256:s.retrievedContentSha256,retrievedAt:n}]))}function h(e,t){return{sourceUrl:e,retrievedContentSha256:t}}var ko={sourcePath:"packages/integrations/provider-web-access/src/operation-bindings.ts",snapshotPath:"packages/libs/contracts-integrations/evidence/web-access/contractspec-mcp.json",snapshotSha256:"3d126c23506ff7441dd2c7e5386dee563fb0f3083fc642c239a42b030ba034a8",retrievedContentSha256:"4b5143367e7a6daf5da5d2faf359ff00416040c3421d37bf2610d95390a05fe3",retrievedAt:"2026-08-09"},Sr={sourcePath:"packages/integrations/provider-web-access/src/x402.ts",snapshotPath:"packages/libs/contracts-integrations/evidence/web-access/x402.json",snapshotSha256:"a044a37c3bb58cbc7e297b63c7ee7b32a2e96c037f04b8442c65da9843e85de6",retrievedContentSha256:"df7339295593b098e9fa29d7c34c2d9abdc8a44965c23b5f2989bbfa69469c79",retrievedAt:"2026-08-11"},Io=oe("bright-data.json","6710dfb60f411afbc0845411a05675c04b575409ecd346f6ef7abace245c1cff",{rest:h("https://docs.brightdata.com/api-reference/scrapers/synchronous-requests","25cfad0b8ef373e2317eeed5785d6ecda17457f54700f9d5a90fcb3eefd45e0c"),sdk:h("https://docs.brightdata.com/api-reference/SDK-JS","9a218cd9d4dda0dfbb1143f89c9894a7a214c226ffe219c91b5e6dae1e77e3e4"),webhook:h("https://docs.brightdata.com/datasets/scrapers/scrapers-library/delivery-options","e2f29df4c3849c50a51c153c28ba414cfa4ef07c5268df71f558ac7f62c0b8fb"),websocket:h("https://docs.brightdata.com/scraping-automation/scraping-browser/faqs","5af32930306491b4106cfb36abfbe49ddb8ddf83b3661f4e3c5e60861b67d6bc"),hostedMcp:h("https://docs.brightdata.com/ai/mcp-server/faqs","0808b1ca0c8bba58217b389dc5ab979fb0de2364cf4ad833519c86592df7a13f"),localMcp:h("https://docs.brightdata.com/ai/mcp-server/faqs","0808b1ca0c8bba58217b389dc5ab979fb0de2364cf4ad833519c86592df7a13f"),httpProxy:h("https://docs.brightdata.com/proxy-networks/socks5","92d7adeb49eb6645c5d6b8d891a226ae27dfc10d17c433cb2e50416b10ad6d52"),httpsProxy:h("https://docs.brightdata.com/proxy-networks/socks5","92d7adeb49eb6645c5d6b8d891a226ae27dfc10d17c433cb2e50416b10ad6d52"),socksProxy:h("https://docs.brightdata.com/proxy-networks/socks5","92d7adeb49eb6645c5d6b8d891a226ae27dfc10d17c433cb2e50416b10ad6d52")}),vo=oe("massive.json","a3a22c4db25c35e9e5375dab42e05d9575d24105df596069fe9216315128965d",{rest:h("https://docs.joinmassive.com/web-render/openapi.json","d953a3ea44fd623183654b2965850d8f5a20a6773ffaf3a78f1de03c10f7f0cd"),webhook:h("https://docs.joinmassive.com/web-render/openapi.json","5a0fcfac73bdfbbdeab4ec7cb23543e5a31179b8c39f848fcd1856fc71cf64a3"),websocket:h("https://docs.joinmassive.com/web-render/openapi.json","04892c265dd7be02cd9ffd6920d261b8c623d6e68685e9b603700cb9512e4516"),httpProxy:h("https://docs.joinmassive.com/residential/authentication","a965f1d82100645f862ba5577bb30b37e395bc875e352538cb9a18ebb845b7bc"),httpsProxy:h("https://docs.joinmassive.com/residential/authentication","a965f1d82100645f862ba5577bb30b37e395bc875e352538cb9a18ebb845b7bc"),socksProxy:h("https://docs.joinmassive.com/residential/authentication","a965f1d82100645f862ba5577bb30b37e395bc875e352538cb9a18ebb845b7bc")}),xo=oe("browserbase.json","6e829ed21adafceac4991cfb057d94d81b839498312cd49065031a597a83eba1",{rest:h("https://docs.browserbase.com/reference/api/overview","02488d77e46bbfdd8ced05eee472b881f962ab464317f358f1398b2c2ee70ccb"),sdk:h("https://docs.browserbase.com/reference/sdk/nodejs","fee6de0318a5e532b6fef8075444fe64805c8fbfe4a577a8453d6516c70f6a88"),websocket:h("https://docs.browserbase.com/reference/api/get-a-session","f1decad96262a632bcdcbb8aba6eb104611c6ce575b103c548f43cb0894792e5"),hostedMcp:h("https://docs.browserbase.com/integrations/mcp/setup","2bb5c042790eed16422dabf0316400d4dedc596446a166b7f67a9ff01128d06a"),localMcp:h("https://docs.browserbase.com/integrations/mcp/setup","2bb5c042790eed16422dabf0316400d4dedc596446a166b7f67a9ff01128d06a"),httpProxy:h("https://docs.browserbase.com/platform/identity/proxies","d2531a8c733e5351f47627b003253a2ab71ceda1566643a8d6739efea4f47deb"),httpsProxy:h("https://docs.browserbase.com/platform/identity/proxies","d2531a8c733e5351f47627b003253a2ab71ceda1566643a8d6739efea4f47deb")}),So=oe("serper.json","3d6dcba2dcc65c0edb58a4705f46188f2bb847e3ed75dcc957c288d1461bf4a8",{rest:h("https://serper.dev/","9774a63bdce81a83928f5315f81a4907b1f9a989230beb2aed8e8a68fbb8ef1f")}),wo=oe("linkup.json","06ccfac9b5a6511f7e7bd4ba87c3157f8c939aaa8aa0d1147bab7a10d78da013",{rest:h("https://docs.linkup.so/pages/documentation/get-started/introduction","afe8793642d5b07d314e1e72eb4d961c6ed4a3ac38496fcbc5c2fbfe78e9a545"),sdk:h("https://docs.linkup.so/pages/sdk/js/js","a8346e04b37853a872fe39dbac2f70ce7899e36fe31c5bab50a1bdf73947a39f"),hostedMcp:h("https://docs.linkup.so/pages/integrations/mcp/mcp","3aa26f65df3ec245a0ae5dcd7c546a887dc65fd4b7daf1a953ff3ba810a46848"),localMcp:h("https://docs.linkup.so/pages/integrations/mcp/mcp","3aa26f65df3ec245a0ae5dcd7c546a887dc65fd4b7daf1a953ff3ba810a46848")}),Ro=oe("tavily.json","2c44d4c405e0d1c724e4168bbec0a43cd970371b666b8ed49c6334d8bcaf75a2",{rest:h("https://docs.tavily.com/documentation/api-reference/introduction","edfe94a9df217ed8c3c874db71a0e5ccbb7cadaa3090a656eb7ab5ba91d17465"),sdk:h("https://docs.tavily.com/sdk/javascript/quick-start","745ebd8f0f1f6666aa6828a6ab3290232e309ab2fcc55970d0e3d1d4b7300784"),sse:h("https://docs.tavily.com/documentation/api-reference/endpoint/research-streaming","2068dd8cc4dc7f7201b3b45a6f2519bdd09b2e34d13efe6daac67a55e4bd2ebd"),hostedMcp:h("https://docs.tavily.com/documentation/mcp","6da3d29cc336ebc0d7449f5ab3801470a250316014cdbeef81356dddabf4aa86"),localMcp:h("https://docs.tavily.com/documentation/mcp","58d6f37c96a1b9cb4a333003986c1a8cc2be7af26d244db81c1df7b09c059aa3")}),Po={rest:{sourcePath:"packages/integrations/provider-web-access/src/adapters/direct-fetch.ts",snapshotPath:"packages/libs/contracts-integrations/evidence/web-access/direct-fetch.json",snapshotSha256:"b21a3651f2c86f98cd2164666ae7aa7a03393990e0c09255af0db3bd5075a48a",retrievedContentSha256:"8509df28f3ac1c63c4f4e6c56f783f2088dce87141b741bd4d5ed34a47053865",retrievedAt:"2026-08-14"}},Ao=oe("reworkd.json","d7d2b08427347152dbe80ab8273d55943247451e2b81a5d663c42ed115293e68",{rest:h("https://docs.reworkd.ai/api-reference/public/get-outputs-for-a-scraping-group","50cbd49697ef9457b90af8d5bba9cde0021f9b2cbb8fd53f146f0161d2cad86c")},"2026-08-14"),Oo=oe("firecrawl.json","ff9e24cda941141c9fdb1b7678dc066d5d20fe5bdcae5dec61b2f2d6df2212b8",{rest:h("https://docs.firecrawl.dev/api-reference/v2-introduction","b6801bd5fcc58878977c7ff9573ef70166e6440453e0e47bb4caebb85430dcc2")},"2026-08-14"),Co=oe("apify.json","ea75073a123c2d6e031886a8bb79129cd705b0d21fedce7887c601fd6183e707",{rest:h("https://docs.apify.com/api/v2","f5b212c6da3d4d5878eac0b00dec82bf70f87bdc794cccaeb9c89e22c89b3cbf")},"2026-08-14"),To=oe("oxylabs.json","c71efcd2e8fad341f8d26946d8b7f5f7025c20270594df1110bc4c2892c6ea74",{rest:h("https://developers.oxylabs.io/scraper-apis/web-scraper-api","5ff7526054c5df0731e4dce8bdfd6859f0eb157976bb77640137848890f9518e"),httpProxy:h("https://developers.oxylabs.io/proxies/residential-proxies/protocols","0f76b6b485eff8bf8d7b620cfb11d1f081e38824d63a0ebbd3f0506ac7972915"),httpsProxy:h("https://developers.oxylabs.io/proxies/residential-proxies/protocols","0f76b6b485eff8bf8d7b620cfb11d1f081e38824d63a0ebbd3f0506ac7972915"),socksProxy:h("https://developers.oxylabs.io/proxies/residential-proxies/protocols","0f76b6b485eff8bf8d7b620cfb11d1f081e38824d63a0ebbd3f0506ac7972915")},"2026-08-14");var q="packages/integrations/provider-web-access/src",Yl=`${q}/operation-bindings.test.ts`,Pe=`${q}/adapters/browserbase.test.ts`,Mo=`${q}/adapters/browserbase-stagehand.test.ts`,wr=["search.execute","fetch.execute","session.create","session.get","session.close","connection.describe","context.create","context.get","context.delete"],Eo=[...wr,...no],Lo={operationSuffixes:["session.create","proxy.describe"],adapterRef:`${q}/adapters/browserbase-resources.ts#BrowserbaseResourceService`,testIds:[Pe,`${q}/connection-boundaries.test.ts`]},Rr={rest:{operationSuffixes:wr,adapterRef:`${q}/adapters/browserbase-rest.ts#BrowserbaseRestApi`,testIds:[`${q}/adapters/browserbase-rest.test.ts`]},sdk:{operationSuffixes:Eo,adapterRef:`${q}/adapters/browserbase.ts#BrowserbaseAdapter`,testIds:[Pe,Mo]},x402:{operationSuffixes:wr,adapterRef:`${q}/adapters/browserbase.ts#BrowserbaseAdapter`,testIds:[Pe]},websocket:{operationSuffixes:["connection.describe"],adapterRef:`${q}/cdp.ts#PlaywrightCdpConnector`,testIds:[`${q}/connection-boundaries.test.ts`,Pe]},hostedMcp:{operationSuffixes:["mcp.describe"],adapterRef:`${q}/mcp.ts#AiSdkNativeMcpConnector`,testIds:[`${q}/mcp.test.ts`,Pe]},localMcp:{operationSuffixes:["mcp.describe"],adapterRef:`${q}/mcp.ts#AiSdkNativeMcpConnector`,testIds:[`${q}/mcp.test.ts`,Pe]},contractspecMcp:{operationSuffixes:Eo,adapterRef:`${q}/operation-bindings.ts#bindWebAccessOperations`,testIds:[Yl,Mo]},httpProxy:Lo,httpsProxy:Lo};var b="packages/integrations/provider-web-access/src",Xl=`${b}/operation-bindings.test.ts`,le=()=>({allProviderOperations:!0,adapterRef:`${b}/operation-bindings.ts#bindWebAccessOperations`,testIds:[Xl]}),It=(e)=>({operationSuffixes:["mcp.describe"],adapterRef:`${b}/mcp.ts#AiSdkNativeMcpConnector`,testIds:[`${b}/mcp.test.ts`,e]}),Do=["search.execute","fetch.execute","extract.execute","scraper.run","scraper.trigger","scraper.job.get","job.get","dataset.get","crawl.start","crawl.get"],Zl=[...Do,"browser.session.create","browser.session.get","browser.session.close","browser.connection.describe"],Ie=`${b}/adapters/bright-data.test.ts`,pe=[`${b}/connection-boundaries.test.ts`,`${b}/transports.test.ts`],_o={rest:{operationSuffixes:Do,adapterRef:`${b}/adapters/bright-data-rest.ts#BrightDataRestApi`,testIds:[`${b}/adapters/bright-data-rest.test.ts`]},sdk:{operationSuffixes:Zl,adapterRef:`${b}/adapters/bright-data.ts#BrightDataAdapter`,testIds:[Ie]},webhook:{eventKeys:["web-access.bright-data.delivery.received"],adapterRef:`${b}/bright-data-webhook.ts#BrightDataWebhookReceiver`,testIds:[`${b}/webhook.test.ts`]},websocket:{operationSuffixes:["browser.connection.describe"],adapterRef:`${b}/cdp.ts#PlaywrightCdpConnector`,testIds:[`${b}/connection-boundaries.test.ts`,Ie]},hostedMcp:It(Ie),localMcp:It(Ie),contractspecMcp:le(),httpProxy:de(Ie,pe),httpsProxy:de(Ie,pe),socksProxy:de(Ie,pe)},We=`${b}/adapters/rest-adapters.test.ts`,qo={rest:{operationSuffixes:["search.execute","render.execute","job.get","usage.get"],adapterRef:`${b}/adapters/massive.ts#MassiveAdapter`,testIds:[We]},webhook:{eventKeys:["web-access.massive.delivery.received"],adapterRef:`${b}/massive-webhook.ts#MassiveWebhookReceiver`,testIds:[`${b}/webhook.test.ts`]},websocket:{operationSuffixes:["browser.connection.describe"],adapterRef:`${b}/cdp.ts#PlaywrightCdpConnector`,testIds:[`${b}/connection-boundaries.test.ts`,We]},contractspecMcp:le(),httpProxy:de(We,pe),httpsProxy:de(We,pe),socksProxy:de(We,pe)},Uo={rest:{operationSuffixes:["search.execute","images.execute","news.execute","maps.execute","places.execute","videos.execute","shopping.execute","scholar.execute","patents.execute","autocomplete.execute"],adapterRef:`${b}/adapters/serper.ts#SerperAdapter`,testIds:[`${b}/adapters/rest-adapters.test.ts`]},contractspecMcp:le()},Wo={...zo("linkup",["search.execute","fetch.execute","research.start","task.get"]),x402:{operationSuffixes:["search.execute","fetch.execute","research.start"],adapterRef:`${b}/x402.ts#executeX402Request`,testIds:[`${b}/adapters/research-adapters.test.ts`]}},Fo={...zo("tavily",["search.execute","extract.execute","map.execute","crawl.execute","crawl.start","research.start","research.get"]),sse:{operationSuffixes:["research.stream"],adapterRef:`${b}/sse.ts#collectSseEvents`,testIds:[`${b}/adapters/research-adapters.test.ts`,`${b}/transports.test.ts`]}},Ae=`${b}/adapters/expanded-adapters.test.ts`,jo=`${b}/adapters/direct-reworkd.test.ts`,Bo={rest:{operationSuffixes:["fetch.execute"],adapterRef:`${b}/adapters/direct-fetch.ts#DirectFetchAdapter`,testIds:[jo]},contractspecMcp:le()},Ko={rest:{operationSuffixes:["dataset.get"],adapterRef:`${b}/adapters/reworkd.ts#ReworkdAdapter`,testIds:[jo]},contractspecMcp:le()},No={rest:{operationSuffixes:["search.execute","fetch.execute","extract.execute","map.execute","crawl.start","crawl.get","crawl.cancel"],adapterRef:`${b}/adapters/firecrawl.ts#FirecrawlAdapter`,testIds:[Ae]},contractspecMcp:le()},Ho={rest:{operationSuffixes:["scraper.run","job.get","job.cancel","dataset.get"],adapterRef:`${b}/adapters/apify.ts#ApifyAdapter`,testIds:[Ae]},contractspecMcp:le()},Go={rest:{operationSuffixes:["search.execute","fetch.execute"],adapterRef:`${b}/adapters/oxylabs.ts#OxylabsAdapter`,testIds:[Ae]},contractspecMcp:le(),httpProxy:de(Ae,pe),httpsProxy:de(Ae,pe),socksProxy:de(Ae,pe)};function de(e,t){return{operationSuffixes:["proxy.request","proxy.describe"],adapterRef:`${b}/proxy.ts#NodeProxyExecutor`,testIds:[...t,e]}}function zo(e,t){let r=`${b}/adapters/research-adapters.test.ts`;return{rest:{operationSuffixes:t,adapterRef:`${b}/adapters/${e}-rest.ts#${e==="linkup"?"LinkupRestApi":"TavilyRestApi"}`,testIds:[`${b}/adapters/research-rest.test.ts`]},sdk:{operationSuffixes:t,adapterRef:`${b}/adapters/${e}.ts#${e==="linkup"?"LinkupAdapter":"TavilyAdapter"}`,testIds:[r]},hostedMcp:It(r),localMcp:It(r),contractspecMcp:le()}}var Pr="packages/integrations/provider-web-access/src/adapters/expanded-adapters.test.ts",Vo="packages/integrations/provider-web-access/src/adapters/direct-reworkd.test.ts",$o=[{provider:"direct-fetch",supported:["rest","contractspecMcp"],reasons:Fe("Direct fetch is a local HTTP adapter without a vendor-native"),evidence:Po,mappings:Bo,testIds:[Vo]},{provider:"reworkd",supported:["rest","contractspecMcp"],reasons:{...Fe("Reworkd REST output access does not expose a"),sdk:"Reworkd Harambe is a generated scraper runtime, not a TypeScript API client bound by this package."},evidence:Ao,mappings:Ko,testIds:[Vo]},{provider:"firecrawl",supported:["rest","contractspecMcp"],reasons:{...Fe("The REST-first Firecrawl adapter does not bind a"),sdk:"Official Firecrawl SDKs exist, but this package intentionally binds REST without adding an SDK dependency.",webhook:"Firecrawl webhooks are documented but no verified receiver is implemented in this package.",hostedMcp:"Firecrawl hosted MCP embeds credentials in its documented URL and is not projected into opaque handles here.",localMcp:"Firecrawl local MCP is documented but is not bound by this REST-first checkpoint."},evidence:Oo,mappings:No,testIds:[Pr]},{provider:"apify",supported:["rest","contractspecMcp"],reasons:{...Fe("The REST-first Apify adapter does not bind a"),sdk:"The official apify-client exists, but this package intentionally binds REST without adding the dependency.",webhook:"Apify webhooks are documented but no verified receiver is implemented in this package.",hostedMcp:"Apify hosted MCP is documented but not bound by this REST-first checkpoint.",localMcp:"Apify local MCP is documented but not bound by this REST-first checkpoint."},evidence:Co,mappings:Ho,testIds:[Pr]},{provider:"oxylabs",supported:["rest","contractspecMcp","httpProxy","httpsProxy","socksProxy"],reasons:{...Fe("Oxylabs does not expose a bound"),localMcp:"Oxylabs local MCP is documented but not bound by this REST-first checkpoint."},evidence:To,mappings:Go,testIds:[Pr,"packages/integrations/provider-web-access/src/connection-boundaries.test.ts"]}];function Fe(e){return Object.fromEntries(["rest","sdk","x402","webhook","websocket","sse","hostedMcp","localMcp","contractspecMcp","httpProxy","httpsProxy","socksProxy"].map((t)=>[t,`${e} ${t} surface.`]))}var eu=["packages/integrations/provider-web-access/src/adapters/bright-data.test.ts","packages/integrations/provider-web-access/src/adapters/bright-data-rest.test.ts","packages/integrations/provider-web-access/src/adapters/browserbase.test.ts","packages/integrations/provider-web-access/src/adapters/browserbase-rest.test.ts","packages/integrations/provider-web-access/src/adapters/browserbase-stagehand.test.ts","packages/integrations/provider-web-access/src/compatibility.test.ts","packages/integrations/provider-web-access/src/connection-boundaries.test.ts","packages/integrations/provider-web-access/src/adapters/research-adapters.test.ts","packages/integrations/provider-web-access/src/adapters/research-rest.test.ts","packages/integrations/provider-web-access/src/adapters/rest-adapters.test.ts","packages/integrations/provider-web-access/src/webhook.test.ts","packages/integrations/provider-web-access/src/transports.test.ts","packages/integrations/provider-web-access/src/mcp.test.ts","packages/integrations/provider-web-access/src/operation-bindings.test.ts","packages/integrations/provider-web-access/src/stagehand-tools.test.ts","packages/integrations/provider-web-access/src/adapters/expanded-adapters.test.ts","packages/integrations/provider-web-access/src/adapters/direct-reworkd.test.ts"],Jo=[{provider:"bright-data",supported:["rest","sdk","webhook","websocket","hostedMcp","localMcp","contractspecMcp","httpProxy","httpsProxy","socksProxy"],reasons:{x402:"Bright Data does not expose an x402 payment transport.",sse:"Bright Data documents job delivery and CDP rather than SSE."},evidence:Io,mappings:_o,eventKeys:["web-access.bright-data.delivery.received"],testIds:["packages/integrations/provider-web-access/src/adapters/bright-data.test.ts","packages/integrations/provider-web-access/src/adapters/bright-data-rest.test.ts","packages/integrations/provider-web-access/src/webhook.test.ts","packages/integrations/provider-web-access/src/transports.test.ts"]},{provider:"massive",supported:["rest","webhook","websocket","contractspecMcp","httpProxy","httpsProxy","socksProxy"],reasons:{x402:"Massive does not expose an x402 payment transport.",sdk:"The device-monetization SDK is outside the web-access product scope.",sse:"Massive documents polling and CDP rather than SSE.",hostedMcp:"No vendor-hosted MCP is advertised.",localMcp:"No vendor-local MCP is advertised."},evidence:vo,mappings:qo,eventKeys:["web-access.massive.delivery.received"],testIds:["packages/integrations/provider-web-access/src/adapters/rest-adapters.test.ts","packages/integrations/provider-web-access/src/adapters/research-rest.test.ts","packages/integrations/provider-web-access/src/webhook.test.ts","packages/integrations/provider-web-access/src/transports.test.ts","packages/integrations/provider-web-access/src/compatibility.test.ts"]},{provider:"browserbase",supported:["rest","sdk","websocket","hostedMcp","localMcp","contractspecMcp"],accountGated:["x402","httpProxy","httpsProxy"],reasons:{webhook:"No vendor-native webhook is advertised.",sse:"Browser sessions use CDP WebSocket rather than SSE.",socksProxy:"Browserbase session proxy configuration does not expose SOCKS."},evidence:{...xo,x402:Sr},mappings:Rr,testIds:["packages/integrations/provider-web-access/src/adapters/browserbase.test.ts","packages/integrations/provider-web-access/src/adapters/browserbase-rest.test.ts","packages/integrations/provider-web-access/src/transports.test.ts"],browserAutomation:{profile:"stagehand-v4",state:"supported",operationKeys:["web-access.browserbase.browser.act","web-access.browserbase.browser.observe","web-access.browserbase.browser.extract"],adapterRef:"packages/integrations/provider-web-access/src/adapters/browserbase-stagehand.ts#BrowserbaseStagehandAdapter",testIds:["packages/integrations/provider-web-access/src/adapters/browserbase-stagehand.test.ts","packages/integrations/provider-web-access/src/stagehand-tools.test.ts"]}},{provider:"serper",supported:["rest","contractspecMcp"],reasons:{x402:"Serper does not expose an x402 payment transport.",sdk:"No official JavaScript SDK is advertised.",webhook:"No vendor-native webhook is advertised.",websocket:"No vendor-native WebSocket is advertised.",sse:"No vendor-native SSE is advertised.",hostedMcp:"No vendor-hosted MCP is advertised.",localMcp:"No vendor-local MCP is advertised.",httpProxy:"Serper is a search API, not a proxy network.",httpsProxy:"Serper is a search API, not a proxy network.",socksProxy:"Serper is a search API, not a proxy network."},evidence:So,mappings:Uo,testIds:["packages/integrations/provider-web-access/src/adapters/rest-adapters.test.ts"]},{provider:"linkup",supported:["rest","sdk","hostedMcp","localMcp","contractspecMcp"],accountGated:["x402"],reasons:{webhook:"Linkup asynchronous work is retrieved through Tasks.",websocket:"No vendor-native WebSocket is advertised.",sse:"No vendor-native SSE is advertised.",httpProxy:"Linkup is a search/research API, not a proxy network.",httpsProxy:"Linkup is a search/research API, not a proxy network.",socksProxy:"Linkup is a search/research API, not a proxy network."},evidence:{...wo,x402:Sr},mappings:Wo,testIds:["packages/integrations/provider-web-access/src/adapters/research-adapters.test.ts","packages/integrations/provider-web-access/src/adapters/research-rest.test.ts","packages/integrations/provider-web-access/src/mcp.test.ts","packages/integrations/provider-web-access/src/compatibility.test.ts"]},{provider:"tavily",supported:["rest","sdk","sse","hostedMcp","localMcp","contractspecMcp"],reasons:{x402:"Tavily does not expose an x402 payment transport.",webhook:"Tavily asynchronous research uses polling or SSE.",websocket:"Tavily streaming is SSE, not WebSocket.",httpProxy:"Tavily is a web research API, not a proxy network.",httpsProxy:"Tavily is a web research API, not a proxy network.",socksProxy:"Tavily is a web research API, not a proxy network."},evidence:Ro,mappings:Fo,testIds:["packages/integrations/provider-web-access/src/adapters/research-adapters.test.ts","packages/integrations/provider-web-access/src/adapters/research-rest.test.ts","packages/integrations/provider-web-access/src/mcp.test.ts","packages/integrations/provider-web-access/src/compatibility.test.ts"]},...$o];var m=(e,t,r,n=!0)=>({provider:e,suffix:t,title:r,kind:"command",costBearing:n}),k=(e,t,r,n=!1)=>({provider:e,suffix:t,title:r,kind:"query",costBearing:n}),Qo=[m("bright-data","search.execute","Search with Bright Data"),m("bright-data","fetch.execute","Fetch with Bright Data"),m("bright-data","extract.execute","Extract with Bright Data"),m("bright-data","scraper.run","Run Bright Data scraper"),m("bright-data","scraper.trigger","Trigger Bright Data scraper"),k("bright-data","scraper.job.get","Get Bright Data scraper job"),k("bright-data","job.get","Get Bright Data job"),m("bright-data","job.cancel","Cancel Bright Data job",!1),k("bright-data","dataset.get","Get Bright Data dataset"),m("bright-data","crawl.start","Start Bright Data crawl"),k("bright-data","crawl.get","Get Bright Data crawl"),m("bright-data","crawl.cancel","Cancel Bright Data crawl",!1),m("bright-data","browser.session.create","Create Bright Data browser session"),k("bright-data","browser.session.get","Get Bright Data browser session"),m("bright-data","browser.session.close","Close Bright Data browser session",!1),k("bright-data","browser.connection.describe","Describe Bright Data CDP connection"),m("bright-data","proxy.request","Request through Bright Data proxy"),k("bright-data","proxy.describe","Describe Bright Data proxy"),k("bright-data","mcp.describe","Describe Bright Data native MCP"),m("massive","search.execute","Search with Massive"),m("massive","render.execute","Render with Massive"),k("massive","job.get","Get Massive render job"),m("massive","job.cancel","Cancel Massive render job",!1),m("massive","browser.session.create","Create Massive browser session"),k("massive","browser.session.get","Get Massive browser session"),m("massive","browser.session.close","Close Massive browser session",!1),k("massive","browser.connection.describe","Describe Massive CDP connection"),m("massive","proxy.request","Request through Massive proxy"),k("massive","proxy.describe","Describe Massive proxy"),k("massive","usage.get","Get Massive usage"),k("massive","mcp.describe","Describe Massive MCP projection"),m("browserbase","search.execute","Search with Browserbase"),m("browserbase","fetch.execute","Fetch with Browserbase"),m("browserbase","session.create","Create Browserbase session"),k("browserbase","session.get","Get Browserbase session"),m("browserbase","session.close","Close Browserbase session",!1),k("browserbase","connection.describe","Describe Browserbase CDP connection"),m("browserbase","context.create","Create Browserbase context"),k("browserbase","context.get","Get Browserbase context"),m("browserbase","context.delete","Delete Browserbase context",!1),k("browserbase","proxy.describe","Describe Browserbase session proxy"),k("browserbase","mcp.describe","Describe Browserbase native MCP"),...["search","images","news","maps","places","videos","shopping","scholar","patents","autocomplete"].map((e)=>m("serper",`${e}.execute`,`Run Serper ${e}`)),k("serper","mcp.describe","Describe Serper MCP projection"),m("linkup","search.execute","Search with Linkup"),m("linkup","fetch.execute","Fetch with Linkup"),m("linkup","research.start","Start Linkup research"),k("linkup","task.get","Get Linkup task"),m("linkup","task.cancel","Cancel Linkup task",!1),k("linkup","mcp.describe","Describe Linkup native MCP"),m("tavily","search.execute","Search with Tavily"),m("tavily","extract.execute","Extract with Tavily"),m("tavily","map.execute","Map with Tavily"),m("tavily","crawl.execute","Crawl with Tavily"),m("tavily","crawl.start","Start Tavily crawl"),k("tavily","crawl.get","Get Tavily crawl"),m("tavily","crawl.cancel","Cancel Tavily crawl",!1),m("tavily","research.start","Start Tavily research"),k("tavily","research.get","Get Tavily research"),k("tavily","research.stream","Stream Tavily research"),m("tavily","research.cancel","Cancel Tavily research",!1),k("tavily","mcp.describe","Describe Tavily native MCP")],tu=[m("direct-fetch","fetch.execute","Fetch a public URL directly",!1),k("direct-fetch","mcp.describe","Describe direct-fetch MCP projection"),k("reworkd","dataset.get","Get Reworkd group outputs"),k("reworkd","mcp.describe","Describe Reworkd MCP projection"),m("firecrawl","search.execute","Search with Firecrawl"),m("firecrawl","fetch.execute","Scrape with Firecrawl"),m("firecrawl","extract.execute","Extract with Firecrawl"),m("firecrawl","map.execute","Map with Firecrawl"),m("firecrawl","crawl.start","Start Firecrawl crawl"),k("firecrawl","crawl.get","Get Firecrawl crawl"),m("firecrawl","crawl.cancel","Cancel Firecrawl crawl",!1),k("firecrawl","mcp.describe","Describe Firecrawl MCP projection"),m("apify","scraper.run","Run Apify Actor"),k("apify","job.get","Get Apify Actor run"),m("apify","job.cancel","Abort Apify Actor run",!1),k("apify","dataset.get","Get Apify dataset items"),k("apify","mcp.describe","Describe Apify MCP projection"),m("oxylabs","search.execute","Search with Oxylabs"),m("oxylabs","fetch.execute","Fetch with Oxylabs"),m("oxylabs","proxy.request","Request through Oxylabs proxy"),k("oxylabs","proxy.describe","Describe Oxylabs proxy"),k("oxylabs","mcp.describe","Describe Oxylabs MCP projection")],ru=[m("browserbase","browser.act","Act on a browser page"),k("browserbase","browser.observe","Observe actionable browser elements",!0),k("browserbase","browser.extract","Extract structured browser page data",!0)],nu=new Set(["bright-data:scraper.trigger","bright-data:scraper.job.get","bright-data:crawl.start","bright-data:crawl.get","bright-data:crawl.cancel","tavily:crawl.execute"]),Ar=Qo.filter((e)=>!nu.has(`${e.provider}:${e.suffix}`)),wA=Ar,Or=Qo,Cr=[...Or,...tu],je=[...Cr,...ru];function Be(e){return`web-access.${e.provider}.${e.suffix}`}var iu=(e)=>({state:"unsupported",reason:e});function ou(e){return Object.fromEntries(["rest","sdk","x402","webhook","websocket","sse","hostedMcp","localMcp","contractspecMcp","httpProxy","httpsProxy","socksProxy"].map((t)=>[t,e.supported.includes(t)?Yo(e,t,"supported"):e.accountGated?.includes(t)?Yo(e,t,"account-gated"):iu(e.reasons[t]??`${t} is not supported.`)]))}function Yo(e,t,r){let n=t==="contractspecMcp"?ko:e.evidence[t];if(!n)throw Error(`${e.provider}.${t} is missing source evidence`);let i=e.mappings[t];if(!i)throw Error(`${e.provider}.${t} is missing implementation mapping`);return{state:r,evidence:{contractRefs:au(e,t),adapterRef:i.adapterRef,testIds:i.testIds,sourceUrl:n.sourceUrl,sourcePath:n.sourcePath,snapshotPath:n.snapshotPath,snapshotSha256:n.snapshotSha256,retrievedContentSha256:n.retrievedContentSha256,sourceUrlSha256:n.snapshotSha256,retrievedAt:n.retrievedAt}}}function au(e,t){let r=e.mappings[t];if(!r)return[];if(r.eventKeys)return[...r.eventKeys];let n=new Set(r.operationSuffixes??[]);return je.filter((i)=>i.provider===e.provider).filter((i)=>r.allProviderOperations||n.has(i.suffix)).map(Be)}var CA=Jo.map((e)=>{let t=e.evidence.rest;if(!t)throw Error(`${e.provider} is missing primary evidence`);return{provider:e.provider,capabilityId:`web-access.${e.provider}`,surfaces:ou(e),operationKeys:je.filter((r)=>r.provider===e.provider).map(Be),eventKeys:e.eventKeys??[],adapterKey:e.provider,testIds:e.testIds,browserAutomation:e.browserAutomation,evidence:{sourceUrl:t.sourceUrl,sourcePath:t.sourcePath,snapshotPath:t.snapshotPath,snapshotSha256:t.snapshotSha256,retrievedContentSha256:t.retrievedContentSha256,sourceUrlSha256:t.snapshotSha256,retrievedAt:t.retrievedAt}}});var MA=["bright-data","massive","browserbase","serper","linkup","tavily","direct-fetch","reworkd","firecrawl","apify","oxylabs"];var Tr={policyDenied:{code:"WEB_ACCESS_POLICY_DENIED",http:403,description:"Authorization, evidence, or network policy denied execution."},authFailed:{code:"WEB_ACCESS_AUTH_FAILED",http:401,description:"The provider rejected the configured credential."},quotaExceeded:{code:"WEB_ACCESS_QUOTA_EXCEEDED",http:429,description:"The atomic request or monetary budget was exhausted."},rateLimited:{code:"WEB_ACCESS_RATE_LIMITED",http:429,retryable:!0,description:"Provider or local concurrency limits were reached."},timedOut:{code:"WEB_ACCESS_TIMEOUT",http:504,retryable:!0,description:"The bounded execution deadline elapsed."},unsupported:{code:"WEB_ACCESS_UNSUPPORTED",http:422,description:"The provider does not expose the requested native behavior."},cancelled:{code:"WEB_ACCESS_CANCELLED",http:499,description:"Execution was cancelled before provider completion."},notFound:{code:"WEB_ACCESS_NOT_FOUND",http:404,description:"The requested provider resource was not found."},providerUnavailable:{code:"WEB_ACCESS_PROVIDER_UNAVAILABLE",http:503,retryable:!0,description:"The provider is temporarily unavailable."},providerError:{code:"WEB_ACCESS_PROVIDER_ERROR",http:502,description:"The provider returned an unclassified failure."}},LA=Object.values(Tr).map((e)=>e.code);import{ScalarTypeEnum as Z,SchemaModel as Ce}from"@lssm/lib.schema";import{ScalarTypeEnum as j,SchemaModel as U}from"@lssm/lib.schema";var f=j.String_unsecure(),F=j.NonEmptyString(),X=j.Int_unsecure(),su=j.Float_unsecure(),ue=j.Boolean(),ae=j.URL(),Xo=new U({name:"WebAccessAuthorizationRecord",fields:{decision:{type:F,isOptional:!1},evidenceRefs:{type:F,isOptional:!1,isArray:!0},expiresAt:{type:j.DateTime(),isOptional:!0}}}),Zo=new U({name:"WebAccessBudgetRecord",fields:{currency:{type:j.Currency(),isOptional:!0},maximumAmountMinor:{type:X,isOptional:!0},maximumRequests:{type:X,isOptional:!0},estimatedAmountMinor:{type:X,isOptional:!0}}}),ea=new U({name:"WebAccessSearchPayload",fields:{query:{type:F,isOptional:!1},limit:{type:X,isOptional:!0},page:{type:X,isOptional:!0},language:{type:f,isOptional:!0},country:{type:f,isOptional:!0},category:{type:f,isOptional:!0},mode:{type:f,isOptional:!0},callback:{type:ae,isOptional:!0},includeDomains:{type:F,isOptional:!0,isArray:!0},excludeDomains:{type:F,isOptional:!0,isArray:!0},transport:{type:f,isOptional:!0},useX402:{type:ue,isOptional:!0}}}),ta=new U({name:"WebAccessFetchPayload",fields:{url:{type:ae,isOptional:!1},format:{type:f,isOptional:!0},headers:{type:j.JSONObject(),isOptional:!0},renderJs:{type:ue,isOptional:!0},includeRawContent:{type:ue,isOptional:!0},extractImages:{type:ue,isOptional:!0},country:{type:f,isOptional:!0},city:{type:f,isOptional:!0},mode:{type:f,isOptional:!0},callback:{type:ae,isOptional:!0},transport:{type:f,isOptional:!0},useX402:{type:ue,isOptional:!0}}}),ra=new U({name:"WebAccessExtractPayload",fields:{urls:{type:ae,isOptional:!1,isArray:!0},query:{type:f,isOptional:!0},format:{type:f,isOptional:!0},includeImages:{type:ue,isOptional:!0},transport:{type:f,isOptional:!0}}}),na=new U({name:"WebAccessCrawlPayload",fields:{url:{type:ae,isOptional:!0},urls:{type:ae,isOptional:!0,isArray:!0},instructions:{type:f,isOptional:!0},limit:{type:X,isOptional:!0},maxDepth:{type:X,isOptional:!0},allowExternal:{type:ue,isOptional:!0},format:{type:f,isOptional:!0},transport:{type:f,isOptional:!0}}}),ia=new U({name:"WebAccessResearchPayload",fields:{query:{type:F,isOptional:!1},model:{type:f,isOptional:!0},mode:{type:f,isOptional:!0},reasoningDepth:{type:f,isOptional:!0},maxEvents:{type:X,isOptional:!0},includeDomains:{type:F,isOptional:!0,isArray:!0},excludeDomains:{type:F,isOptional:!0,isArray:!0},transport:{type:f,isOptional:!0},useX402:{type:ue,isOptional:!0}}}),oa=new U({name:"WebAccessScraperPayload",fields:{collector:{type:F,isOptional:!1},input:{type:j.JSONObject(),isOptional:!0},transport:{type:f,isOptional:!0}}}),aa=new U({name:"WebAccessDatasetPayload",fields:{datasetId:{type:F,isOptional:!1},limit:{type:X,isOptional:!0},cursor:{type:X,isOptional:!0},createdAfter:{type:j.DateTime(),isOptional:!0},jobId:{type:f,isOptional:!0},url:{type:ae,isOptional:!0},transport:{type:f,isOptional:!0}}}),cu=new U({name:"WebAccessBrowserProxyPayload",fields:{mode:{type:F,isOptional:!1},country:{type:f,isOptional:!0},region:{type:f,isOptional:!0},city:{type:f,isOptional:!0},secretReference:{type:f,isOptional:!0}}}),sa=new U({name:"WebAccessBrowserCreatePayload",fields:{projectId:{type:f,isOptional:!0},contextId:{type:f,isOptional:!0},timeoutSeconds:{type:X,isOptional:!0},keepAlive:{type:ue,isOptional:!0},country:{type:f,isOptional:!0},proxy:{type:cu,isOptional:!0},transport:{type:f,isOptional:!0}}}),ca=new U({name:"WebAccessProxyPayload",fields:{url:{type:ae,isOptional:!1},method:{type:f,isOptional:!0},headers:{type:j.JSONObject(),isOptional:!0},body:{type:f,isOptional:!0},protocol:{type:f,isOptional:!0},country:{type:f,isOptional:!0},region:{type:f,isOptional:!0},city:{type:f,isOptional:!0},stickySessionId:{type:f,isOptional:!0}}}),pa=new U({name:"WebAccessUsagePayload",fields:{start:{type:j.DateTime(),isOptional:!0},end:{type:j.DateTime(),isOptional:!0}}}),da=new U({name:"WebAccessEmptyPayload",fields:{}}),Ke=new U({name:"WebAccessSourceRecord",fields:{url:{type:ae,isOptional:!1},title:{type:f,isOptional:!0},snippet:{type:f,isOptional:!0},publishedAt:{type:j.DateTime(),isOptional:!0},score:{type:su,isOptional:!0}}}),la=new U({name:"NativeMcpDescriptorRecord",fields:{provider:{type:F,isOptional:!1},transport:{type:F,isOptional:!1},endpoint:{type:ae,isOptional:!0},command:{type:f,isOptional:!0},args:{type:f,isOptional:!0,isArray:!0},auth:{type:F,isOptional:!1},toolPrefix:{type:F,isOptional:!1}}});var G=Z.String_unsecure(),Oe=Z.NonEmptyString(),ua=new Ce({name:"WebAccessSearchDataRecord",fields:{query:{type:G,isOptional:!0},answer:{type:G,isOptional:!0},results:{type:Ke,isOptional:!0,isArray:!0}}}),ga=new Ce({name:"WebAccessContentDataRecord",fields:{url:{type:Z.URL(),isOptional:!0},title:{type:G,isOptional:!0},content:{type:G,isOptional:!0},answer:{type:G,isOptional:!0},results:{type:Ke,isOptional:!0,isArray:!0}}}),ma=new Ce({name:"WebAccessJobDataRecord",fields:{provider:{type:Oe,isOptional:!0},jobId:{type:Oe,isOptional:!0},kind:{type:G,isOptional:!0},status:{type:G,isOptional:!0}}}),ya=new Ce({name:"WebAccessBrowserDataRecord",fields:{provider:{type:Oe,isOptional:!0},sessionId:{type:Oe,isOptional:!0},contextId:{type:Oe,isOptional:!0},status:{type:G,isOptional:!0},protocol:{type:G,isOptional:!0},connectHandle:{type:Oe,isOptional:!0},expiresAt:{type:Z.DateTime(),isOptional:!0}}}),fa=new Ce({name:"WebAccessProxyDataRecord",fields:{status:{type:Z.Int_unsecure(),isOptional:!0},finalUrl:{type:Z.URL(),isOptional:!0},host:{type:G,isOptional:!0},remoteDns:{type:Z.Boolean(),isOptional:!0},geoTargeting:{type:Z.Boolean(),isOptional:!0},stickySessions:{type:Z.Boolean(),isOptional:!0}}}),ha=new Ce({name:"WebAccessResourceDataRecord",fields:{id:{type:G,isOptional:!0},name:{type:G,isOptional:!0},status:{type:G,isOptional:!0},credits:{type:Z.Float_unsecure(),isOptional:!0},requestCount:{type:Z.Int_unsecure(),isOptional:!0}}});import{ScalarTypeEnum as V,SchemaModel as Ne}from"@lssm/lib.schema";var ge=V.NonEmptyString();function ba(e){let t=yu(e),r=uu(e,t),n=e.suffix==="mcp.describe",i=n?la:lu(e);return{input:pu(`${t}Input`,r),output:du(`${t}Output`,i,n)}}function pu(e,t){return new Ne({name:e,fields:{provider:{type:ge,isOptional:!1},tenantId:{type:V.ID(),isOptional:!1},workspaceId:{type:V.ID(),isOptional:!0},connectionId:{type:V.ID(),isOptional:!1},correlationId:{type:ge,isOptional:!1},policyMode:{type:ge,isOptional:!1},authorization:{type:Xo,isOptional:!0},budget:{type:Zo,isOptional:!0},payload:{type:t,isOptional:!1}}})}function du(e,t,r){return new Ne({name:e,fields:{status:{type:ge,isOptional:!1},data:r?{type:t,isOptional:!0,isArray:!0}:{type:t,isOptional:!0},sources:{type:Ke,isOptional:!1,isArray:!0},usage:{type:gu(e),isOptional:!0},provenance:{type:mu(e),isOptional:!1}}})}function lu(e){let t=e.suffix;if(t==="browser.act")return so;if(t==="browser.observe")return co;if(t==="browser.extract")return po;if(t.startsWith("proxy."))return fa;if(t.includes("session.")||t.startsWith("context.")||t.includes("connection.describe"))return ya;if(t==="dataset.get"||t==="usage.get")return ha;if(ka(t)||t.endsWith(".trigger"))return ma;if(t==="fetch.execute"||t==="extract.execute"||t==="render.execute"||t.startsWith("scraper.")||t.startsWith("crawl.")||t.startsWith("research.")||t==="map.execute")return ga;return ua}function uu(e,t){let r=e.suffix;if(r==="browser.act")return io;if(r==="browser.observe")return oo;if(r==="browser.extract")return ao;if(r==="mcp.describe"||r==="proxy.describe")return da;if(r==="usage.get")return pa;if(r==="proxy.request")return ca;if(r.includes("session.create")||r==="context.create")return sa;if(r.includes("session.")||r==="connection.describe")return Mr(t,"sessionId");if(r.startsWith("context."))return Mr(t,"contextId");if(r==="dataset.get")return aa;if(r.startsWith("scraper.")&&!r.includes(".job."))return oa;if(ka(r))return Mr(t,e.provider==="linkup"?"taskId":"jobId");if(r==="research.stream"||r==="research.start")return ia;if(r==="map.execute"||r.startsWith("crawl."))return na;if(r==="extract.execute")return ra;if(r==="fetch.execute"||r==="render.execute")return ta;return ea}function Mr(e,t){return new Ne({name:`${e}Payload`,fields:{[t]:{type:ge,isOptional:!1},kind:{type:V.String_unsecure(),isOptional:!0},transport:{type:V.String_unsecure(),isOptional:!0}}})}function gu(e){return new Ne({name:`${e}Usage`,fields:{requestCount:{type:V.Int_unsecure(),isOptional:!0},credits:{type:V.Float_unsecure(),isOptional:!0},costAmountMinor:{type:V.Int_unsecure(),isOptional:!0},currency:{type:V.Currency(),isOptional:!0},providerReported:{type:V.Boolean(),isOptional:!1}}})}function mu(e){return new Ne({name:`${e}Provenance`,fields:{provider:{type:ge,isOptional:!1},providerRequestId:{type:ge,isOptional:!0},retrievedAt:{type:V.DateTime(),isOptional:!1},transport:{type:ge,isOptional:!1},policyMode:{type:ge,isOptional:!1}}})}function ka(e){return e.endsWith(".get")||e.endsWith(".cancel")||e==="scraper.job.get"}function yu(e){return`${e.provider}-${e.suffix}`.split(/[^a-zA-Z0-9]+/).filter(Boolean).map((t)=>`${t[0]?.toUpperCase()}${t.slice(1)}`).join("")}import{docRef as fu}from"@lssm/lib.contracts-spec/docs";import{defineCommand as Ia,defineQuery as va}from"@lssm/lib.contracts-spec/operations";var hu={id:"docs.integrations.web-access-operations",title:"Governed web-access provider operations",summary:"Normalized scraping, research, browser automation, MCP, callback, streaming, and residential-proxy contracts for eleven providers.",kind:"reference",visibility:"public",route:"/docs/integrations/web-access",tags:["integrations","scraping","research","browser","proxy","mcp"],body:`# Governed web-access provider operations
3
+
4
+ The web-access contract normalizes Bright Data, Massive, Browserbase, Serper,
5
+ Linkup, Tavily, direct fetch, Reworkd, Firecrawl, Apify, and Oxylabs without
6
+ inventing vendor-native transports. Provider-neutral browser act, observe, and
7
+ structured extract contracts form the Stagehand v4 compatibility profile. The
8
+ capability ledger reports that profile as supported by the separately owned
9
+ Browserbase Stagehand adapter and executable adapter/tool tests. Every operation has a
10
+ concrete payload family, normalized result/provenance, and typed failure catalog.
11
+ The original generic 1.0 envelopes remain exported unchanged for pinned consumers.
12
+
13
+ Governed execution fails closed unless an unexpired allow decision carries at
14
+ least one evidence reference. Configured request or monetary budgets require an
15
+ atomic budget port. Secrets remain behind SecretProvider references; MCP and CDP
16
+ connectors accept only immutable provider manifests; proxy and fetch targets are
17
+ subject to SSRF and redirect validation.
18
+
19
+ Legacy operation keys remain callable for compatibility. Where a provider does
20
+ not expose the formerly declared cancellation or polling behavior, execution
21
+ returns WEB_ACCESS_UNSUPPORTED instead of emulating a native surface.
22
+ `};function vt(e,t,r){let n=Be(e),i=ba(e),s=t.replaceAll(".","_"),u=e.kind==="query"?e.costBearing?["read","cost-bearing"]:["read"]:e.costBearing?["read","cost-bearing","external-side-effect"]:["write","external-side-effect"],c={meta:{key:n,version:t,title:e.title,description:`${e.title} through the governed web-access provider port.`,goal:e.title,context:"Network and secret safety are mandatory in every policy mode; provider availability remains connection and account dependent.",owners:["@platform.integrations"],tags:["integration","web-access",e.provider],stability:"experimental",docId:[fu(hu.id)]},policy:{auth:"user",policies:[{key:"platform.web-access.execute",version:t}],idempotent:e.kind==="query",escalate:null},execution:{effects:u},economicEvidence:e.costBearing?{required:!0,modelVersion:"provider-reported-v1",refs:[{id:`usage:${e.provider}:${e.suffix}`,kind:"usage",source:"@lssm/integration.provider-web-access"}]}:void 0,transport:{rest:{method:e.kind==="query"?"GET":"POST",path:`/api/contracts/${n}/v${t}`},mcp:{toolName:`${n.replaceAll(".","_")}-v${s}`}}};if(r){let I={...c,io:{input:i.input,output:i.output,errors:Tr}};return e.kind==="command"?Ia(I):va(I)}let z={...c,io:{input:uo,output:go}};return e.kind==="command"?Ia(z):va(z)}var xa=Ar.map((e)=>vt(e,"1.0.0",!1)),Er=Or.map((e)=>vt(e,"1.1.0",!0)),bu=Cr.map((e)=>vt(e,"1.2.0",!0)),Sa=je.map((e)=>vt(e,"1.3.0",!0)),Lr=xa,YA=Sa,ku=[...xa,...Er,...bu,...Sa];function wa(e){return ku.reduce((t,r)=>t.register(r),e)}import{defineQuery as Ra}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as N,SchemaModel as xt}from"@lssm/lib.schema";var Pa=new xt({name:"EmailProviderScopeInput",fields:{tenantId:{type:N.ID(),isOptional:!1},connectionId:{type:N.ID(),isOptional:!1}}}),Iu=new xt({name:"EmailProviderHealthOutput",fields:{provider:{type:N.NonEmptyString(),isOptional:!1},status:{type:N.NonEmptyString(),isOptional:!1},checkedAt:{type:N.DateTime(),isOptional:!1},latencyMs:{type:N.Float_unsecure(),isOptional:!0},errorCode:{type:N.String_unsecure(),isOptional:!0}}}),vu=new xt({name:"EmailInboundRouteRecord",fields:{id:{type:N.ID(),isOptional:!1},domainId:{type:N.ID(),isOptional:!1},name:{type:N.String_unsecure(),isOptional:!1},enabled:{type:N.Boolean(),isOptional:!1},createdAt:{type:N.DateTime(),isOptional:!0},updatedAt:{type:N.DateTime(),isOptional:!0}}}),xu=new xt({name:"EmailInboundRoutesOutput",fields:{provider:{type:N.NonEmptyString(),isOptional:!1},routes:{type:vu,isOptional:!1,isArray:!0}}}),Su=Ra({meta:{key:"integrations.email.provider.health",title:"Inspect Email Provider Health",version:"1.0.0",description:"Inspect the redacted health state of a tenant-scoped email provider connection.",goal:"Give operators and governed agents safe provider diagnostics.",context:"Returns health metadata only; credentials and provider response bodies are never exposed.",owners:["@platform.integrations"],tags:["integration","email","health"],stability:"experimental"},io:{input:Pa,output:Iu},policy:{auth:"admin",policies:[{key:"platform.integration.read",version:"1.0.0"}]}}),wu=Ra({meta:{key:"integrations.email.inbound-routes.list",title:"List Email Inbound Routes",version:"1.0.0",description:"List redacted inbound routing metadata for a tenant-scoped email provider connection.",goal:"Let operators verify inbound delivery configuration without revealing secrets.",context:"Exposes identifiers, labels, enabled state, and timestamps; filters and webhook secrets stay server-side.",owners:["@platform.integrations"],tags:["integration","email","inbound"],stability:"experimental"},io:{input:Pa,output:xu},policy:{auth:"admin",policies:[{key:"platform.integration.read",version:"1.0.0"}]}}),Dr=[Su,wu];class Ru{telemetry;nowFn;constructor(e={}){this.telemetry=e.telemetry,this.nowFn=e.now??(()=>new Date)}async check(e,t){let r=this.nowFn();try{await t(e);let n=this.nowFn(),i={status:"connected",checkedAt:n,latencyMs:n.getTime()-r.getTime()};return this.emitTelemetry(e,i,"success"),i}catch(n){let i=this.nowFn(),s=n instanceof Error?n.message:"Unknown error",u=Pu(n),c={status:"error",checkedAt:i,latencyMs:i.getTime()-r.getTime(),errorMessage:s,errorCode:u};return this.emitTelemetry(e,c,"error",u,s),c}}emitTelemetry(e,t,r,n,i){if(!this.telemetry)return;this.telemetry.record({tenantId:e.tenantId,appId:e.appId,environment:e.environment,slotId:e.slotId,integrationKey:e.spec.meta.key,integrationVersion:e.spec.meta.version,connectionId:e.connection.meta.id,status:r,durationMs:t.latencyMs,errorCode:n,errorMessage:i,occurredAt:t.checkedAt??this.nowFn(),metadata:{...e.trace?{blueprint:`${e.trace.blueprintName}.v${e.trace.blueprintVersion}`,configVersion:e.trace.configVersion}:{},status:t.status}})}}function Pu(e){if(!e||typeof e!=="object")return;let t=e;if(t.code==null)return;return String(t.code)}import{defineCapability as Au}from"@lssm/lib.contracts-spec/capabilities";import{StabilityEnum as Ou}from"@lssm/lib.contracts-spec/ownership";var ZO=Au({meta:{key:"integrations",version:"1.0.0",kind:"integration",stability:Ou.Experimental,description:"Core integrations capability for third-party connections",owners:["@platform.core"],tags:["integrations","platform"]}});import{defineFeature as Cu}from"@lssm/lib.contracts-spec/features";var rC=Cu({meta:{key:"platform.integrations",version:"1.0.0",title:"Platform Integrations",description:"Manage integration connections to external providers (e.g., Stripe, Qdrant)",domain:"platform",owners:["@platform.integrations"],tags:["integrations","connections","platform"],stability:"experimental"},operations:[{key:"integrations.connection.create",version:"1.0.0"},{key:"integrations.connection.update",version:"1.0.0"},{key:"integrations.connection.delete",version:"1.0.0"},{key:"integrations.connection.list",version:"1.0.0"},{key:"integrations.connection.test",version:"1.0.0"}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:"integrations",version:"1.0.0"}],requires:[{key:"identity",version:"1.0.0"}]}});import{defineCommand as Dt,defineQuery as Qu}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as l,SchemaModel as ye}from"@lssm/lib.schema";import{defineEvent as Aa}from"@lssm/lib.contracts-spec/events";import{ScalarTypeEnum as _r,SchemaModel as Oa}from"@lssm/lib.schema";var Te=_r.NonEmptyString(),Ca={connectionId:{type:Te,isOptional:!1},deliveryId:{type:Te,isOptional:!1},jobId:{type:Te,isOptional:!1},correlationId:{type:Te,isOptional:!0},receivedAt:{type:_r.DateTime(),isOptional:!1},payload:{type:_r.JSONObject(),isOptional:!1}},Tu=new Oa({name:"FullEnrichBatchCompletePayload",fields:{...Ca,batchId:{type:Te,isOptional:!1}}}),Mu=new Oa({name:"FullEnrichContactFinishedPayload",fields:{...Ca,contactId:{type:Te,isOptional:!1}}}),Eu=Aa({meta:{key:"sales-intelligence.fullenrich.webhook.batch-complete",version:"1.0.0",description:"A FullEnrich enrichment batch reached a terminal result.",stability:"experimental",owners:["@platform.integrations"],tags:["sales-intelligence","fullenrich","webhook"]},pii:["payload"],payload:Tu}),Lu=Aa({meta:{key:"sales-intelligence.fullenrich.webhook.contact-finished",version:"1.0.0",description:"A FullEnrich contact enrichment result became available.",stability:"experimental",owners:["@platform.integrations"],tags:["sales-intelligence","fullenrich","webhook"]},pii:["payload"],payload:Mu}),Du=[Eu,Lu];function sC(e){return Du.reduce((t,r)=>t.register(r),e)}import{defineCommand as qu}from"@lssm/lib.contracts-spec/operations";import{defaultRestPath as _u}from"@lssm/lib.contracts-spec/jsonschema";var He="1.0.0";function St(e){return _u(e,He)}function Ta(e){return`${e.replace(/\./g,"_")}-v1_0_0`}function wt(e){return`fullenrich_${e}-v1_0_0`}import{ScalarTypeEnum as Pt,SchemaModel as At}from"@lssm/lib.schema";var Rt=Pt.JSONObject(),Ma=Pt.String_unsecure(),se=Pt.NonEmptyString(),Ge=new At({name:"FullEnrichResultInput",fields:{connectionId:{type:se,isOptional:!1},jobId:{type:se,isOptional:!1},correlationId:{type:se,isOptional:!0}}}),Ea=new At({name:"FullEnrichWebhookInput",fields:{connectionId:{type:se,isOptional:!1},headers:{type:Rt,isOptional:!0},payload:{type:Rt,isOptional:!1},receivedAt:{type:Pt.DateTime(),isOptional:!0}}}),Me=new At({name:"FullEnrichReceiptOutput",fields:{providerKey:{type:se,isOptional:!1},jobId:{type:se,isOptional:!0},correlationId:{type:se,isOptional:!0},status:{type:Ma,isOptional:!1},data:{type:Rt,isOptional:!0},rawRedacted:{type:Rt,isOptional:!0}}}),La=new At({name:"FullEnrichRemoteMcpOutput",fields:{providerKey:{type:se,isOptional:!1},url:{type:se,isOptional:!1},auth:{type:se,isOptional:!1},toolCategories:{type:Ma,isOptional:!1,isArray:!0}}});var Da="sales-intelligence.fullenrich.contact.enrichment.cancel",_a=qu({meta:{key:Da,version:He,title:"Cancel FullEnrich Contact Enrichment",description:"Cancel a pending FullEnrich contact enrichment job.",goal:"Stop pending credit-bearing work when the provider still permits it.",context:"Cancellation is terminal and requires scoped human approval.",owners:["@platform.integrations"],tags:["sales-intelligence","fullenrich","pii-safe"],stability:"experimental"},io:{input:Ge,output:Me},policy:{auth:"user",policies:[],escalate:"human_review"},execution:{effects:["write","external-side-effect"],approval:{required:!0,effects:["write","external-side-effect"]}},transport:{rest:{method:"POST",path:St(Da)},mcp:{toolName:wt("contact_enrichment_cancel")}}});import{defineCommand as Br,defineQuery as me}from"@lssm/lib.contracts-spec/operations";import{ScalarTypeEnum as Ot,SchemaModel as Ct}from"@lssm/lib.schema";var qa=Ot.JSONObject(),Ua=Ot.String_unsecure(),ee=Ot.NonEmptyString(),Tt=new Ct({name:"FullEnrichCorrelationInput",fields:{connectionId:{type:ee,isOptional:!1},correlationId:{type:ee,isOptional:!0},idempotencyKey:{type:ee,isOptional:!0}}}),qr=new Ct({name:"FullEnrichSearchInput",fields:{connectionId:{type:ee,isOptional:!1},query:{type:ee,isOptional:!0},filters:{type:qa,isOptional:!0},limit:{type:Ot.Int_unsecure(),isOptional:!0},correlationId:{type:ee,isOptional:!0}}}),Ur=new Ct({name:"FullEnrichLookupInput",fields:{connectionId:{type:ee,isOptional:!1},identifier:{type:ee,isOptional:!1},identifierType:{type:Ua,isOptional:!1},correlationId:{type:ee,isOptional:!0}}}),Wr=new Ct({name:"FullEnrichAsyncStartInput",fields:{connectionId:{type:ee,isOptional:!1},request:{type:qa,isOptional:!1},correlationId:{type:ee,isOptional:!0},webhookUrl:{type:Ua,isOptional:!0}}});import{ScalarTypeEnum as ze,SchemaModel as Mt}from"@lssm/lib.schema";var Wa=ze.JSONObject(),Fr=ze.String_unsecure(),he=ze.NonEmptyString(),Fa=new Mt({name:"FullEnrichCreditOutput",fields:{providerKey:{type:he,isOptional:!1},creditsRemaining:{type:ze.Float_unsecure(),isOptional:!0},raw:{type:Wa,isOptional:!0},correlationId:{type:he,isOptional:!0}}}),ja=new Mt({name:"FullEnrichValidationOutput",fields:{valid:{type:ze.Boolean(),isOptional:!1},providerKey:{type:he,isOptional:!1},message:{type:Fr,isOptional:!0}}}),Ve=new Mt({name:"FullEnrichResultListOutput",fields:{providerKey:{type:he,isOptional:!1},items:{type:Wa,isOptional:!1},correlationId:{type:he,isOptional:!0}}}),jr=new Mt({name:"FullEnrichAsyncStartOutput",fields:{providerKey:{type:he,isOptional:!1},jobId:{type:he,isOptional:!0},correlationId:{type:he,isOptional:!0},status:{type:Fr,isOptional:!1},expectedWebhookPath:{type:Fr,isOptional:!0}}});var Uu=["@platform.integrations"],J={version:He,owners:Uu,tags:["sales-intelligence","fullenrich","pii-safe"],stability:"experimental"},ve={effects:["read"]},Et={effects:["write","cost-bearing","external-side-effect"],approval:{required:!0}};function te(e,t,r){return{rest:{method:t,path:St(e)},mcp:{toolName:r??Ta(e)}}}var Wu=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.credits.get",title:"Get FullEnrich Credits",description:"Read FullEnrich credit balance without exposing API keys.",goal:"Preflight enrichment usage and quota availability.",context:"Uses the documented FullEnrich credits API via a secret-backed runtime adapter."},io:{input:Tt,output:Fa},policy:{auth:"user",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.credits.get","GET")}),Fu=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.api-key.validate",title:"Validate FullEnrich API Key",description:"Validate configured FullEnrich credentials with redacted output.",goal:"Fail fast on invalid BYOK setup without logging key material.",context:"Uses provider key-validation endpoint through runtime secrets only."},io:{input:Tt,output:ja},policy:{auth:"admin",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.api-key.validate","GET")}),ju=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.people.search",title:"Search FullEnrich People",description:"Search people through FullEnrich Search API.",goal:"Find candidate contacts with synthetic-test-safe result handling.",context:"Synchronous FullEnrich people search; no live calls in tests."},io:{input:qr,output:Ve},policy:{auth:"user",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.people.search","POST")}),Bu=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.companies.search",title:"Search FullEnrich Companies",description:"Search companies through FullEnrich Search API.",goal:"Find candidate company records.",context:"Synchronous FullEnrich company search; no live calls in tests."},io:{input:qr,output:Ve},policy:{auth:"user",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.companies.search","POST")}),Ku=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.people.lookup",title:"Lookup FullEnrich Person",description:"Lookup/enrich a known person record.",goal:"Resolve a known person identifier through FullEnrich.",context:"Uses lookup/search surface only when provider supports the identifier type."},io:{input:Ur,output:Ve},policy:{auth:"user",policies:[]},execution:Et,transport:te("sales-intelligence.fullenrich.people.lookup","POST")}),Nu=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.companies.lookup",title:"Lookup FullEnrich Company",description:"Lookup/enrich a known company record.",goal:"Resolve a known company identifier through FullEnrich.",context:"Uses lookup/search surface only when provider supports the identifier type."},io:{input:Ur,output:Ve},policy:{auth:"user",policies:[]},execution:Et,transport:te("sales-intelligence.fullenrich.companies.lookup","POST")}),Hu=Br({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.contact.enrichment.start",title:"Start FullEnrich Contact Enrichment",description:"Start async FullEnrich contact enrichment.",goal:"Start enrichment and return correlation/job metadata.",context:"Webhook-first async flow; polling is fallback only."},io:{input:Wr,output:jr},policy:{auth:"user",policies:[]},execution:Et,transport:te("sales-intelligence.fullenrich.contact.enrichment.start","POST")}),Gu=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.contact.enrichment.result.get",title:"Get FullEnrich Contact Enrichment Result",description:"Slow polling fallback for async enrichment results.",goal:"Retrieve a result when webhook delivery is unavailable.",context:"Fallback-only because FullEnrich recommends webhooks for async results."},io:{input:Ge,output:Me},policy:{auth:"user",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.contact.enrichment.result.get","GET",wt("contact_result_get"))}),zu=Br({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.reverse-email.start",title:"Start FullEnrich Reverse Email Lookup",description:"Start async reverse-email lookup.",goal:"Resolve a contact from an email address with correlation metadata.",context:"Webhook-first async reverse-email flow."},io:{input:Wr,output:jr},policy:{auth:"user",policies:[]},execution:Et,transport:te("sales-intelligence.fullenrich.reverse-email.start","POST")}),Vu=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.reverse-email.result.get",title:"Get FullEnrich Reverse Email Result",description:"Slow polling fallback for reverse-email results.",goal:"Retrieve a reverse-email result when webhook delivery is unavailable.",context:"Fallback-only; callers should prefer webhook receipt."},io:{input:Ge,output:Me},policy:{auth:"user",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.reverse-email.result.get","GET")}),$u=Br({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.webhook.enrichment.received",title:"Receive FullEnrich Enrichment Webhook",description:"Normalize inbound enrichment webhook payloads.",goal:"Produce an idempotent receipt without leaking raw PII or secrets.",context:"Signature verification is only enabled when official signing docs exist."},io:{input:Ea,output:Me},policy:{auth:"admin",policies:[]},execution:{effects:["external-side-effect"]}}),Ju=me({meta:{...J,version:"1.0.0",key:"sales-intelligence.fullenrich.mcp.remote.describe",title:"Describe FullEnrich Remote MCP",description:"Describe the official FullEnrich remote MCP endpoint and auth.",goal:"Let agents discover remote MCP metadata without proxying OAuth secrets.",context:"Declares https://mcp.fullenrich.com/mcp with OAuth metadata."},io:{input:Tt,output:La},policy:{auth:"user",policies:[]},execution:ve,transport:te("sales-intelligence.fullenrich.mcp.remote.describe","GET")}),Lt=[Wu,Fu,ju,Bu,Ku,Nu,Hu,Gu,_a,zu,Vu,$u,Ju],AC=Object.fromEntries(Lt.map((e)=>[e.meta.key,e]));function Ba(e){return Lt.reduce((t,r)=>t.register(r),e)}var Kr=new ye({name:"IntegrationConnectionRecord",fields:{id:{type:l.ID(),isOptional:!1},tenantId:{type:l.ID(),isOptional:!1},integrationKey:{type:l.NonEmptyString(),isOptional:!1},integrationVersion:{type:l.Int_unsecure(),isOptional:!1},label:{type:l.String_unsecure(),isOptional:!1},ownershipMode:{type:l.String_unsecure(),isOptional:!1},externalAccountId:{type:l.String_unsecure(),isOptional:!0},secretProvider:{type:l.String_unsecure(),isOptional:!1},secretRef:{type:l.String_unsecure(),isOptional:!1},status:{type:l.String_unsecure(),isOptional:!1},environment:{type:l.String_unsecure(),isOptional:!0},healthStatus:{type:l.String_unsecure(),isOptional:!0},healthCheckedAt:{type:l.DateTime(),isOptional:!0},healthLatencyMs:{type:l.Float_unsecure(),isOptional:!0},healthErrorCode:{type:l.String_unsecure(),isOptional:!0},healthErrorMessage:{type:l.String_unsecure(),isOptional:!0},usageRequestCount:{type:l.Int_unsecure(),isOptional:!0},usageSuccessCount:{type:l.Int_unsecure(),isOptional:!0},usageErrorCount:{type:l.Int_unsecure(),isOptional:!0},usageLastUsedAt:{type:l.DateTime(),isOptional:!0},usageLastErrorAt:{type:l.DateTime(),isOptional:!0},usageLastErrorCode:{type:l.String_unsecure(),isOptional:!0},createdAt:{type:l.DateTime(),isOptional:!0},updatedAt:{type:l.DateTime(),isOptional:!0}}}),Yu=new ye({name:"CreateIntegrationConnectionInput",fields:{tenantId:{type:l.ID(),isOptional:!1},integrationKey:{type:l.NonEmptyString(),isOptional:!1},integrationVersion:{type:l.Int_unsecure(),isOptional:!1},label:{type:l.String_unsecure(),isOptional:!1},ownershipMode:{type:l.String_unsecure(),isOptional:!1},externalAccountId:{type:l.String_unsecure(),isOptional:!0},secretProvider:{type:l.String_unsecure(),isOptional:!1},secretRef:{type:l.String_unsecure(),isOptional:!1},environment:{type:l.String_unsecure(),isOptional:!0},config:{type:l.JSONObject(),isOptional:!1}}}),Xu=new ye({name:"UpdateIntegrationConnectionInput",fields:{connectionId:{type:l.ID(),isOptional:!1},label:{type:l.String_unsecure(),isOptional:!0},status:{type:l.String_unsecure(),isOptional:!0},ownershipMode:{type:l.String_unsecure(),isOptional:!0},externalAccountId:{type:l.String_unsecure(),isOptional:!0},secretProvider:{type:l.String_unsecure(),isOptional:!0},secretRef:{type:l.String_unsecure(),isOptional:!0},config:{type:l.JSONObject(),isOptional:!0}}}),Zu=new ye({name:"DeleteIntegrationConnectionInput",fields:{connectionId:{type:l.ID(),isOptional:!1}}}),eg=new ye({name:"ListIntegrationConnectionsInput",fields:{tenantId:{type:l.ID(),isOptional:!1},category:{type:l.String_unsecure(),isOptional:!0},status:{type:l.String_unsecure(),isOptional:!0}}}),tg=new ye({name:"ListIntegrationConnectionsOutput",fields:{connections:{type:Kr,isOptional:!1,isArray:!0}}}),rg=new ye({name:"TestIntegrationConnectionInput",fields:{connectionId:{type:l.ID(),isOptional:!1}}}),ng=new ye({name:"TestIntegrationConnectionOutput",fields:{success:{type:l.Boolean(),isOptional:!1},status:{type:l.String_unsecure(),isOptional:!0},latencyMs:{type:l.Float_unsecure(),isOptional:!0},error:{type:l.String_unsecure(),isOptional:!0},errorCode:{type:l.String_unsecure(),isOptional:!0}}}),ig=new ye({name:"DeleteIntegrationConnectionOutput",fields:{success:{type:l.Boolean(),isOptional:!1}}}),Ka=Dt({meta:{key:"integrations.connection.create",title:"Create Integration Connection",version:"1.0.0",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:Yu,output:Kr},policy:{auth:"admin",policies:[{key:"platform.integration.manage",version:"1.0.0"}]}}),Na=Dt({meta:{key:"integrations.connection.update",title:"Update Integration Connection",version:"1.0.0",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:Xu,output:Kr},policy:{auth:"admin",policies:[{key:"platform.integration.manage",version:"1.0.0"}]}}),Ha=Dt({meta:{key:"integrations.connection.delete",title:"Delete Integration Connection",version:"1.0.0",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:Zu,output:ig},policy:{auth:"admin",policies:[{key:"platform.integration.manage",version:"1.0.0"}]}}),Ga=Qu({meta:{key:"integrations.connection.list",title:"List Integration Connections",version:"1.0.0",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:eg,output:tg},policy:{auth:"admin",policies:[{key:"platform.integration.read",version:"1.0.0"}]}}),za=Dt({meta:{key:"integrations.connection.test",title:"Test Integration Connection",version:"1.0.0",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:rg,output:ng},policy:{auth:"admin",policies:[{key:"platform.integration.manage",version:"1.0.0"}]}}),KC={CreateIntegrationConnection:Ka,UpdateIntegrationConnection:Na,DeleteIntegrationConnection:Ha,ListIntegrationConnections:Ga,TestIntegrationConnection:za,...Object.fromEntries(Dr.map((e)=>[e.meta.key,e])),...Object.fromEntries(Lt.map((e)=>[e.meta.key,e])),...Object.fromEntries(Lr.map((e)=>[e.meta.key,e])),...Object.fromEntries(Er.filter((e)=>!Lr.some((t)=>t.meta.key===e.meta.key)).map((e)=>[e.meta.key,e]))};function NC(e){let t=e.register(Ka).register(Na).register(Ha).register(Ga).register(za);for(let r of Dr)t.register(r);return Ba(wa(t))}export{dr as AccountBalanceRecord,pr as BankAccountRecord,On as BankTransactionRecord,mo as BrightDataDeliveryPayload,ho as BrightDataDeliveryReceivedEvent,ft as CRM_READ_CONTRACT_VERSION,ks as ClayHttpActionCallbackPayload,tn as ClayHttpActionReceivedEvent,ag as ContractsIntegrationsFeature,Ka as CreateIntegrationConnection,D as CrmReadContractError,jP as DEFAULT_SOCIAL_RETENTION_POLICY,Ha as DeleteIntegrationConnection,Su as EmailProviderHealthQuery,Fu as FullEnrichApiKeyValidate,Wr as FullEnrichAsyncStartInput,jr as FullEnrichAsyncStartOutput,Eu as FullEnrichBatchCompleteEvent,Tu as FullEnrichBatchCompletePayload,Nu as FullEnrichCompaniesLookup,Bu as FullEnrichCompaniesSearch,_a as FullEnrichContactEnrichmentCancel,Gu as FullEnrichContactEnrichmentResultGet,Hu as FullEnrichContactEnrichmentStart,Lu as FullEnrichContactFinishedEvent,Mu as FullEnrichContactFinishedPayload,Tt as FullEnrichCorrelationInput,Fa as FullEnrichCreditOutput,Wu as FullEnrichCreditsGet,Ur as FullEnrichLookupInput,Ju as FullEnrichMcpRemoteDescribe,Ku as FullEnrichPeopleLookup,ju as FullEnrichPeopleSearch,Me as FullEnrichReceiptOutput,La as FullEnrichRemoteMcpOutput,Ge as FullEnrichResultInput,Ve as FullEnrichResultListOutput,Vu as FullEnrichReverseEmailResultGet,zu as FullEnrichReverseEmailStart,qr as FullEnrichSearchInput,ja as FullEnrichValidationOutput,$u as FullEnrichWebhookEnrichmentReceived,Ea as FullEnrichWebhookInput,zr as GtmAttributeChildInput,Qe as GtmCollectionInput,Ee as GtmConnectionInput,Xe as GtmCreateInput,Hr as GtmNestedCreateInput,Vr as GtmNestedQueryInput,Nr as GtmNestedResourceIdInput,Gr as GtmNestedUpdateInput,Ye as GtmResourceIdInput,mg as GtmResourceInput,et as GtmResourceOutput,Ze as GtmUpdateInput,yg as GtmWebhookInput,fg as GtmWebhookReceiptOutput,Ws as HEALTH_PII_FIELDS,E as HEALTH_TELEMETRY_EVENTS,an as HealthActivityRecord,pn as HealthBiometricRecord,Ry as HealthCapability,dy as HealthFeature,Bt as HealthListActivities,Nt as HealthListBiometrics,Gt as HealthListNutrition,Vt as HealthListSleep,Qt as HealthListWorkouts,dn as HealthNutritionRecord,cn as HealthSleepRecord,Kt as HealthSyncActivities,Ht as HealthSyncBiometrics,zt as HealthSyncNutrition,$t as HealthSyncSleep,Yt as HealthSyncWorkouts,ln as HealthWebhookEventRecord,Jt as HealthWebhookIngest,sn as HealthWorkoutRecord,tt as HostedMcpDescriptorOutput,yw as IMAGE_PRESETS,rn as INTEGRATION_TOPOLOGY_PROVIDER_RECEIPT_V1,Ru as IntegrationHealthService,br as IntegrationSpecRegistry,ZO as IntegrationsCapability,rC as IntegrationsFeature,Ay as LINKEDIN_CAPABILITY_IDS,In as LINKEDIN_OPERATION_CONTRACTS,jy as LINKEDIN_OPERATION_KEYS,Ny as LINKEDIN_OPERATION_PORT_METHODS,pt as LinkedInProviderError,wu as ListEmailInboundRoutesQuery,Ga as ListIntegrationConnections,Oc as MEETING_RECORDER_PII_FIELDS,nr as MEETING_RECORDER_TELEMETRY_EVENTS,yo as MassiveDeliveryPayload,bo as MassiveDeliveryReceivedEvent,dt as MeetingParticipantRecord,lt as MeetingRecordModel,Cf as MeetingRecorderFeature,rr as MeetingRecorderGetMeeting,or as MeetingRecorderGetTranscript,tr as MeetingRecorderListMeetings,ar as MeetingRecorderSyncTranscript,Zt as MeetingRecorderWebhookEventRecord,sr as MeetingRecorderWebhookIngest,Xt as MeetingTranscriptRecordModel,vn as MeetingTranscriptSegmentRecord,la as NativeMcpDescriptorRecord,Fc as OPENBANKING_PII_FIELDS,ce as OPENBANKING_TELEMETRY_EVENTS,oh as OpenBankingFeature,ur as OpenBankingGetAccount,mr as OpenBankingGetBalances,lr as OpenBankingListAccounts,fr as OpenBankingListTransactions,yr as OpenBankingRefreshBalances,gr as OpenBankingSyncAccounts,hr as OpenBankingSyncTransactions,Lw as POSTHOG_EVALUATION_TEMPLATES,Gl as POSTHOG_LLM_PII_FIELDS,Ew as POSTHOG_LLM_TELEMETRY_EVENTS,bt as PaymentProviderError,UP as SOCIAL_READ_OPERATION_SUFFIXES,WP as SOCIAL_TRACKING_OPERATION_SUFFIXES,zl as SocialProviderError,za as TestIntegrationConnection,Na as UpdateIntegrationConnection,Bw as VIDEO_FORMATS,Xo as WebAccessAuthorizationRecord,so as WebAccessBrowserActDataRecord,io as WebAccessBrowserActPayload,$l as WebAccessBrowserActionCandidateRecord,sa as WebAccessBrowserCreatePayload,ya as WebAccessBrowserDataRecord,po as WebAccessBrowserExtractDataRecord,ao as WebAccessBrowserExtractPayload,co as WebAccessBrowserObserveDataRecord,oo as WebAccessBrowserObservePayload,cu as WebAccessBrowserProxyPayload,Zo as WebAccessBudgetRecord,ga as WebAccessContentDataRecord,na as WebAccessCrawlPayload,aa as WebAccessDatasetPayload,da as WebAccessEmptyPayload,ra as WebAccessExtractPayload,ta as WebAccessFetchPayload,ma as WebAccessJobDataRecord,uo as WebAccessOperationInput,go as WebAccessOperationOutput,hu as WebAccessOperationsDocBlock,fa as WebAccessProxyDataRecord,ca as WebAccessProxyPayload,ia as WebAccessResearchPayload,ha as WebAccessResourceDataRecord,oa as WebAccessScraperPayload,ua as WebAccessSearchDataRecord,ea as WebAccessSearchPayload,Ke as WebAccessSourceRecord,pa as WebAccessUsagePayload,fm as acceptWebhookIngress,Co as apifyEvidence,dp as apifyIntegrationSpec,Ho as apifyMappings,yp as appleHealthIntegrationSpec,dm as assertCapabilityLedger,nw as assertCommunicationChannelWriteContext,ro as assertCrmReadRequest,ow as assertExternalProfileRef,qy as assertLinkedInInstallationBoundary,Dy as assertLinkedInWebhookHostRequest,By as assertLinkedInWriteAuthority,xw as assertPaymentMutationAuthorized,lm as assertPinnedEvidenceDigest,vy as assertPrimaryHealthReady,gh as assertPrimaryOpenBankingReady,rA as assertWebAccessCapabilityLedger,em as assessIntegrationTopologyProviderReceipt,hp as attioHostedMcp,bp as attioIntegrationSpec,cs as attioOperations,Xa as attioWebhookEventNames,es as attioWebhookEvents,Io as brightDataEvidence,kp as brightDataIntegrationSpec,_o as brightDataMappings,no as browserAutomationOperationSuffixes,xo as browserbaseEvidence,Ip as browserbaseIntegrationSpec,Rr as browserbaseMappings,ps as buildLegacyCredentialManifest,Ds as capabilityAvailabilities,Es as capabilityGranularities,_s as capabilityStabilities,nn as capabilitySurfaceNames,us as catalogDefinitionId,Cy as certificationCovers,xp as clayHostedMcp,Sp as clayIntegrationSpec,Ps as clayOperations,Kg as clayWebhookEvents,Rp as composioIntegrationSpec,ko as contractspecMcpEvidence,tw as createContractsIntegrationCatalogDefinitions,to as createDefaultIntegrationSpecRegistry,dw as createHubSpotCrmFixtureAdapter,Dg as createIntegrationCatalog,vw as createPaymentAuthorizationScope,gw as createSalesforceCrmFixtureAdapter,YA as currentWebAccessOperations,Ap as deepgramIntegrationSpec,Ta as defaultSalesIntelligenceMcpTool,St as defaultSalesIntelligenceRestPath,o as defineIntegration,Lg as defineIntegrationCatalogDefinition,nt as defineVendorHostedMcp,nm as digestIntegrationDeploymentTopology,Po as directFetchEvidence,Cp as directFetchIntegrationSpec,Bo as directFetchMappings,Tp as eightSleepIntegrationSpec,Ep as elevenLabsIntegrationSpec,Dr as emailProviderOperations,Ic as ensurePrimaryHealthIntegration,ap as ensurePrimaryOpenBankingIntegration,Ty as evaluateLinkedInCapabilityAccess,qp as falImageIntegrationSpec,Dp as falIntegrationSpec,Wp as fathomIntegrationSpec,JS as filterByAuthMethod,$S as filterByTransport,YS as filterByokRotatable,Ug as filterIntegrationCatalog,QS as filterVersioned,Rg as findAuthConfig,$h as findTransportConfig,Oo as firecrawlEvidence,Fp as firecrawlIntegrationSpec,No as firecrawlMappings,Bp as firefliesIntegrationSpec,Kp as fitbitIntegrationSpec,Hp as fullEnrichIntegrationSpec,Lt as fullEnrichSalesIntelligenceOperations,Du as fullEnrichWebhookEvents,Gp as garminIntegrationSpec,Vp as gcsStorageIntegrationSpec,XP as getActiveVersions,Le as getIntegrationCredentialManifest,Cg as getIntegrationCredentialRequirements,Vl as getVersionInfo,Jp as gmailIntegrationSpec,xh as googleAdvertisingIntegrationSpec,Yp as googleCalendarIntegrationSpec,Zp as googleDriveIntegrationSpec,td as gradiumIntegrationSpec,nd as granolaIntegrationSpec,id as higgsfieldIntegrationSpec,Ls as implementationStates,yl as instagramIntegrationSpec,KC as integrationContracts,Tg as integrationHasCredentialCoverage,Qr as integrationHasManagedSupportEvidence,Ag as isByokValidationStale,Oy as isLinkedInCapabilityAvailable,Fw as isProviderDeltaTombstoned,YP as isVersionDeprecated,ad as jiraIntegrationSpec,_g as joinIntegrationCatalogView,cd as linearIntegrationSpec,dd as linkedinCommunityIntegrationSpec,ld as linkedinMarketingIntegrationSpec,ud as linkedinMemberIntegrationSpec,gd as linkedinMessagingIntegrationSpec,md as linkedinSalesNavigatorIntegrationSpec,wo as linkupEvidence,yd as linkupIntegrationSpec,Wo as linkupMappings,hh as makeIntegrationSpecKey,vo as massiveEvidence,fd as massiveIntegrationSpec,hd as massiveIntegrationSpecV1_1,qo as massiveMappings,kd as messagingGithubIntegrationSpec,vd as messagingMatrixIntegrationSpec,Sd as messagingSlackIntegrationSpec,Rd as messagingTeamsIntegrationSpec,Ad as messagingTelegramIntegrationSpec,Cd as messagingWhatsappMetaIntegrationSpec,Md as messagingWhatsappTwilioIntegrationSpec,vh as metaAdvertisingIntegrationSpec,_d as mistralConversationalIntegrationSpec,Ld as mistralIntegrationSpec,Ud as mistralSttIntegrationSpec,Wd as myFitnessPalIntegrationSpec,jd as notionIntegrationSpec,zd as openWearablesIntegrationSpec,Kd as openaiImageIntegrationSpec,Hd as openaiRealtimeIntegrationSpec,Vd as ouraIntegrationSpec,To as oxylabsEvidence,$d as oxylabsIntegrationSpec,Go as oxylabsMappings,Qd as paypalIntegrationSpec,Yd as pelotonIntegrationSpec,Zd as posthogIntegrationSpec,Mw as posthogLLMTelemetrySpec,tl as postmarkIntegrationSpec,nl as powensIntegrationSpec,mm as preflightGtmCapability,Xr as projectIntegrationSpecToCatalogDefinition,ol as qdrantIntegrationSpec,qg as queryIntegrationCatalog,un as redactHealthTelemetryPayload,Ey as redactLinkedInCredentialReference,wn as redactMeetingRecorderTelemetryPayload,Cn as redactOpenBankingTelemetryPayload,Dw as redactPostHogLLMTelemetryPayload,Dn as registerAdvertisingIntegrations,_n as registerApifyIntegration,Un as registerAppleHealthIntegration,Wn as registerAttioIntegration,Ig as registerAttioOperations,lg as registerAttioWebhookEvents,Fn as registerBrightDataIntegration,jn as registerBrowserbaseIntegration,Kn as registerClayIntegration,Vg as registerClayOperations,Ng as registerClayWebhookEvents,Nn as registerComposioIntegration,Hn as registerDeepgramIntegration,Gn as registerDirectFetchIntegration,zn as registerEightSleepIntegration,Vn as registerElevenLabsIntegration,Jn as registerFalImageIntegration,$n as registerFalIntegration,Qn as registerFathomIntegration,Yn as registerFirecrawlIntegration,Xn as registerFirefliesIntegration,Zn as registerFitbitIntegration,ei as registerFullEnrichIntegration,sC as registerFullEnrichWebhookEvents,ti as registerGarminIntegration,ri as registerGcsStorageIntegration,ni as registerGmailIntegration,ii as registerGoogleCalendarIntegration,oi as registerGoogleDriveIntegration,ai as registerGradiumIntegration,si as registerGranolaIntegration,by as registerHealthContracts,ci as registerHiggsfieldIntegration,NC as registerIntegrationContracts,pi as registerJiraIntegration,di as registerLinearIntegration,li as registerLinkedinCommunityIntegration,ui as registerLinkedinMarketingIntegration,gi as registerLinkedinMemberIntegration,mi as registerLinkedinMessagingIntegration,yi as registerLinkedinSalesNavigatorIntegration,fi as registerLinkupIntegration,bi as registerMassiveIntegration,Df as registerMeetingRecorderContracts,ki as registerMessagingGithubIntegration,Ii as registerMessagingMatrixIntegration,vi as registerMessagingSlackIntegration,xi as registerMessagingTeamsIntegration,Si as registerMessagingTelegramIntegration,wi as registerMessagingWhatsappMetaIntegration,Ri as registerMessagingWhatsappTwilioIntegration,Ai as registerMistralConversationalIntegration,Pi as registerMistralIntegration,Oi as registerMistralSttIntegration,Ci as registerMyFitnessPalIntegration,Ti as registerNotionIntegration,dh as registerOpenBankingContracts,Li as registerOpenWearablesIntegration,Mi as registerOpenaiImageIntegration,Ei as registerOpenaiRealtimeIntegration,Di as registerOuraIntegration,_i as registerOxylabsIntegration,qi as registerPaypalIntegration,Ui as registerPelotonIntegration,Wi as registerPosthogIntegration,Fi as registerPostmarkIntegration,ji as registerPowensIntegration,Bi as registerQdrantIntegration,Ki as registerReworkdIntegration,Ba as registerSalesIntelligenceContracts,Ni as registerSerperIntegration,Gi as registerSillageIntegration,zi as registerSlngIntegration,$v as registerSocialIntegration,Ir as registerSocialIntegrations,Vi as registerStravaIntegration,$i as registerStripeIntegration,Ji as registerSupabasePostgresIntegration,Qi as registerSupabaseVectorIntegration,Yi as registerTavilyIntegration,Xi as registerTldvIntegration,Zi as registerTwilioSmsIntegration,dA as registerWebAccessEvents,wa as registerWebAccessOperations,eo as registerWhoopIntegration,Uw as requireProjectManagementMutationRecord,QP as resolveApiVersion,Ao as reworkdEvidence,al as reworkdIntegrationSpec,Ko as reworkdMappings,He as salesIntelligenceOperationVersion,AC as salesIntelligenceOperations,So as serperEvidence,sl as serperIntegrationSpec,Uo as serperMappings,wt as shortFullEnrichMcpTool,pl as sillageIntegrationSpec,Hi as sillageVendorDocsRequiredCode,ll as slngIntegrationSpec,hl as stravaIntegrationSpec,kl as stripeIntegrationSpec,vl as supabasePostgresIntegrationSpec,Sl as supabaseVectorIntegrationSpec,$r as supportsAuthMethod,Bn as supportsTransport,qs as surfaceSupportStates,Ro as tavilyEvidence,Rl as tavilyIntegrationSpec,Pl as tavilyIntegrationSpecV1_1,Fo as tavilyMappings,Sh as tiktokAdvertisingIntegrationSpec,ml as tiktokIntegrationSpec,Ol as tldvIntegrationSpec,Tl as twilioSmsIntegrationSpec,qw as unsupportedProjectManagementCapability,im as validateIntegrationDeploymentTopology,CA as webAccessCapabilityLedger,pA as webAccessEvents,eu as webAccessEvidenceTestIds,Jo as webAccessInventoryDefinitions,wA as webAccessOperationDefinitions,Ar as webAccessOperationDefinitionsV1,Or as webAccessOperationDefinitionsV1_1,Cr as webAccessOperationDefinitionsV1_2,je as webAccessOperationDefinitionsV1_3,LA as webAccessOperationErrorCodes,Tr as webAccessOperationErrors,Be as webAccessOperationKey,ba as webAccessOperationSchemas,ku as webAccessOperationVersions,Lr as webAccessOperations,xa as webAccessOperationsV1,Er as webAccessOperationsV1_1,bu as webAccessOperationsV1_2,Sa as webAccessOperationsV1_3,MA as webAccessProviderKeys,Jl as webAccessSurfaceNames,Ml as whoopIntegrationSpec,Sr as x402Evidence,fl as xIntegrationSpec,gl as youtubeIntegrationSpec};