@apteva/integrations 0.3.62 → 0.15.3

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 (434) hide show
  1. package/dist/aws-sigv4.d.ts +32 -0
  2. package/dist/aws-sigv4.d.ts.map +1 -0
  3. package/dist/aws-sigv4.js +126 -0
  4. package/dist/aws-sigv4.js.map +1 -0
  5. package/dist/explorer/main.js +21617 -0
  6. package/dist/explorer/main.js.map +90 -0
  7. package/dist/explorer/style.css +2 -0
  8. package/dist/http-executor.d.ts.map +1 -1
  9. package/dist/http-executor.js +145 -12
  10. package/dist/http-executor.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp-generator.d.ts +7 -2
  15. package/dist/mcp-generator.d.ts.map +1 -1
  16. package/dist/mcp-generator.js +46 -5
  17. package/dist/mcp-generator.js.map +1 -1
  18. package/dist/oauth.js +1 -1
  19. package/dist/oauth.js.map +1 -1
  20. package/dist/types.d.ts +251 -3
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/ui/github/ActivityFeed.d.ts +24 -0
  23. package/dist/ui/github/ActivityFeed.d.ts.map +1 -0
  24. package/dist/ui/github/ActivityFeed.js +106 -0
  25. package/dist/ui/github/ActivityFeed.js.map +1 -0
  26. package/dist/ui/github/ActivityFeed.mjs +3 -0
  27. package/dist/ui/github/ActivityFeed.mjs.map +29 -0
  28. package/dist/ui/github/CommitCard.d.ts +24 -0
  29. package/dist/ui/github/CommitCard.d.ts.map +1 -0
  30. package/dist/ui/github/CommitCard.js +102 -0
  31. package/dist/ui/github/CommitCard.js.map +1 -0
  32. package/dist/ui/github/CommitCard.mjs +5 -0
  33. package/dist/ui/github/CommitCard.mjs.map +11 -0
  34. package/dist/ui/github/IssueCard.d.ts +33 -0
  35. package/dist/ui/github/IssueCard.d.ts.map +1 -0
  36. package/dist/ui/github/IssueCard.js +131 -0
  37. package/dist/ui/github/IssueCard.js.map +1 -0
  38. package/dist/ui/github/IssueCard.mjs +3 -0
  39. package/dist/ui/github/IssueCard.mjs.map +21 -0
  40. package/dist/ui/github/PullRequestCard.d.ts +36 -0
  41. package/dist/ui/github/PullRequestCard.d.ts.map +1 -0
  42. package/dist/ui/github/PullRequestCard.js +158 -0
  43. package/dist/ui/github/PullRequestCard.js.map +1 -0
  44. package/dist/ui/github/PullRequestCard.mjs +3 -0
  45. package/dist/ui/github/PullRequestCard.mjs.map +22 -0
  46. package/dist/ui/github/WorkflowRunCard.d.ts +30 -0
  47. package/dist/ui/github/WorkflowRunCard.d.ts.map +1 -0
  48. package/dist/ui/github/WorkflowRunCard.js +124 -0
  49. package/dist/ui/github/WorkflowRunCard.js.map +1 -0
  50. package/dist/ui/github/WorkflowRunCard.mjs +3 -0
  51. package/dist/ui/github/WorkflowRunCard.mjs.map +11 -0
  52. package/dist/ui/github/lib/github.d.ts +43 -0
  53. package/dist/ui/github/lib/github.d.ts.map +1 -0
  54. package/dist/ui/github/lib/github.js +151 -0
  55. package/dist/ui/github/lib/github.js.map +1 -0
  56. package/dist/ui/hubspot/ActivityFeed.d.ts +22 -0
  57. package/dist/ui/hubspot/ActivityFeed.d.ts.map +1 -0
  58. package/dist/ui/hubspot/ActivityFeed.js +52 -0
  59. package/dist/ui/hubspot/ActivityFeed.js.map +1 -0
  60. package/dist/ui/hubspot/ActivityFeed.mjs +3 -0
  61. package/dist/ui/hubspot/ActivityFeed.mjs.map +26 -0
  62. package/dist/ui/hubspot/CompanyCard.d.ts +22 -0
  63. package/dist/ui/hubspot/CompanyCard.d.ts.map +1 -0
  64. package/dist/ui/hubspot/CompanyCard.js +63 -0
  65. package/dist/ui/hubspot/CompanyCard.js.map +1 -0
  66. package/dist/ui/hubspot/CompanyCard.mjs +3 -0
  67. package/dist/ui/hubspot/CompanyCard.mjs.map +11 -0
  68. package/dist/ui/hubspot/ContactCard.d.ts +22 -0
  69. package/dist/ui/hubspot/ContactCard.d.ts.map +1 -0
  70. package/dist/ui/hubspot/ContactCard.js +62 -0
  71. package/dist/ui/hubspot/ContactCard.js.map +1 -0
  72. package/dist/ui/hubspot/ContactCard.mjs +3 -0
  73. package/dist/ui/hubspot/ContactCard.mjs.map +11 -0
  74. package/dist/ui/hubspot/ContactList.d.ts +21 -0
  75. package/dist/ui/hubspot/ContactList.d.ts.map +1 -0
  76. package/dist/ui/hubspot/ContactList.js +31 -0
  77. package/dist/ui/hubspot/ContactList.js.map +1 -0
  78. package/dist/ui/hubspot/ContactList.mjs +3 -0
  79. package/dist/ui/hubspot/ContactList.mjs.map +11 -0
  80. package/dist/ui/hubspot/DealCard.d.ts +23 -0
  81. package/dist/ui/hubspot/DealCard.d.ts.map +1 -0
  82. package/dist/ui/hubspot/DealCard.js +63 -0
  83. package/dist/ui/hubspot/DealCard.js.map +1 -0
  84. package/dist/ui/hubspot/DealCard.mjs +3 -0
  85. package/dist/ui/hubspot/DealCard.mjs.map +11 -0
  86. package/dist/ui/hubspot/DealList.d.ts +24 -0
  87. package/dist/ui/hubspot/DealList.d.ts.map +1 -0
  88. package/dist/ui/hubspot/DealList.js +35 -0
  89. package/dist/ui/hubspot/DealList.js.map +1 -0
  90. package/dist/ui/hubspot/DealList.mjs +3 -0
  91. package/dist/ui/hubspot/DealList.mjs.map +11 -0
  92. package/dist/ui/hubspot/EmailCard.d.ts +25 -0
  93. package/dist/ui/hubspot/EmailCard.d.ts.map +1 -0
  94. package/dist/ui/hubspot/EmailCard.js +62 -0
  95. package/dist/ui/hubspot/EmailCard.js.map +1 -0
  96. package/dist/ui/hubspot/EmailCard.mjs +5 -0
  97. package/dist/ui/hubspot/EmailCard.mjs.map +11 -0
  98. package/dist/ui/hubspot/InboxStrip.d.ts +23 -0
  99. package/dist/ui/hubspot/InboxStrip.d.ts.map +1 -0
  100. package/dist/ui/hubspot/InboxStrip.js +36 -0
  101. package/dist/ui/hubspot/InboxStrip.js.map +1 -0
  102. package/dist/ui/hubspot/InboxStrip.mjs +3 -0
  103. package/dist/ui/hubspot/InboxStrip.mjs.map +11 -0
  104. package/dist/ui/hubspot/PipelineStrip.d.ts +22 -0
  105. package/dist/ui/hubspot/PipelineStrip.d.ts.map +1 -0
  106. package/dist/ui/hubspot/PipelineStrip.js +54 -0
  107. package/dist/ui/hubspot/PipelineStrip.js.map +1 -0
  108. package/dist/ui/hubspot/PipelineStrip.mjs +3 -0
  109. package/dist/ui/hubspot/PipelineStrip.mjs.map +11 -0
  110. package/dist/ui/hubspot/TicketCard.d.ts +25 -0
  111. package/dist/ui/hubspot/TicketCard.d.ts.map +1 -0
  112. package/dist/ui/hubspot/TicketCard.js +53 -0
  113. package/dist/ui/hubspot/TicketCard.js.map +1 -0
  114. package/dist/ui/hubspot/TicketCard.mjs +3 -0
  115. package/dist/ui/hubspot/TicketCard.mjs.map +21 -0
  116. package/dist/ui/hubspot/TicketList.d.ts +21 -0
  117. package/dist/ui/hubspot/TicketList.d.ts.map +1 -0
  118. package/dist/ui/hubspot/TicketList.js +33 -0
  119. package/dist/ui/hubspot/TicketList.js.map +1 -0
  120. package/dist/ui/hubspot/TicketList.mjs +3 -0
  121. package/dist/ui/hubspot/TicketList.mjs.map +11 -0
  122. package/dist/ui/hubspot/lib/hubspot.d.ts +24 -0
  123. package/dist/ui/hubspot/lib/hubspot.d.ts.map +1 -0
  124. package/dist/ui/hubspot/lib/hubspot.js +176 -0
  125. package/dist/ui/hubspot/lib/hubspot.js.map +1 -0
  126. package/dist/ui/notion/DatabaseCard.d.ts +24 -0
  127. package/dist/ui/notion/DatabaseCard.d.ts.map +1 -0
  128. package/dist/ui/notion/DatabaseCard.js +86 -0
  129. package/dist/ui/notion/DatabaseCard.js.map +1 -0
  130. package/dist/ui/notion/DatabaseCard.mjs +3 -0
  131. package/dist/ui/notion/DatabaseCard.mjs.map +11 -0
  132. package/dist/ui/notion/DatabaseRowList.d.ts +36 -0
  133. package/dist/ui/notion/DatabaseRowList.d.ts.map +1 -0
  134. package/dist/ui/notion/DatabaseRowList.js +87 -0
  135. package/dist/ui/notion/DatabaseRowList.js.map +1 -0
  136. package/dist/ui/notion/DatabaseRowList.mjs +3 -0
  137. package/dist/ui/notion/DatabaseRowList.mjs.map +11 -0
  138. package/dist/ui/notion/PageCard.d.ts +27 -0
  139. package/dist/ui/notion/PageCard.d.ts.map +1 -0
  140. package/dist/ui/notion/PageCard.js +80 -0
  141. package/dist/ui/notion/PageCard.js.map +1 -0
  142. package/dist/ui/notion/PageCard.mjs +3 -0
  143. package/dist/ui/notion/PageCard.mjs.map +11 -0
  144. package/dist/ui/notion/PageList.d.ts +24 -0
  145. package/dist/ui/notion/PageList.d.ts.map +1 -0
  146. package/dist/ui/notion/PageList.js +51 -0
  147. package/dist/ui/notion/PageList.js.map +1 -0
  148. package/dist/ui/notion/PageList.mjs +3 -0
  149. package/dist/ui/notion/PageList.mjs.map +11 -0
  150. package/dist/ui/notion/lib/notion.d.ts +35 -0
  151. package/dist/ui/notion/lib/notion.d.ts.map +1 -0
  152. package/dist/ui/notion/lib/notion.js +119 -0
  153. package/dist/ui/notion/lib/notion.js.map +1 -0
  154. package/dist/xml-to-json.d.ts +20 -0
  155. package/dist/xml-to-json.d.ts.map +1 -0
  156. package/dist/xml-to-json.js +256 -0
  157. package/dist/xml-to-json.js.map +1 -0
  158. package/package.json +12 -1
  159. package/src/apps/adroll.json +254 -0
  160. package/src/apps/ahrefs.json +156 -0
  161. package/src/apps/airtable.json +4 -13
  162. package/src/apps/algolia.json +115 -0
  163. package/src/apps/alibaba-cloud.json +211 -0
  164. package/src/apps/aliexpress.json +369 -0
  165. package/src/apps/alpaca-market-data.json +699 -0
  166. package/src/apps/alpaca-trading.json +214 -989
  167. package/src/apps/amazon-ads.json +249 -0
  168. package/src/apps/amazon-associates.json +102 -0
  169. package/src/apps/amplitude.json +86 -0
  170. package/src/apps/anchor-browser.json +173 -0
  171. package/src/apps/anthropic-api.json +9 -4
  172. package/src/apps/api-sports.json +180 -0
  173. package/src/apps/apple-search-ads.json +266 -0
  174. package/src/apps/auth0.json +126 -0
  175. package/src/apps/awin.json +111 -0
  176. package/src/apps/aws-codebuild.json +139 -0
  177. package/src/apps/aws-mediaconvert.json +196 -0
  178. package/src/apps/aws-s3.json +108 -192
  179. package/src/apps/aws-ses.json +666 -303
  180. package/src/apps/aws-sns.json +128 -106
  181. package/src/apps/azure-container-apps.json +116 -0
  182. package/src/apps/backblaze-b2.json +175 -0
  183. package/src/apps/bamboohr.json +303 -0
  184. package/src/apps/basiq.json +308 -0
  185. package/src/apps/bigcommerce.json +366 -0
  186. package/src/apps/bigquery.json +121 -0
  187. package/src/apps/binance-trading.json +7 -4
  188. package/src/apps/bing-webmaster-tools.json +158 -0
  189. package/src/apps/bitbucket.json +163 -0
  190. package/src/apps/blacksmith.json +81 -0
  191. package/src/apps/bls.json +104 -0
  192. package/src/apps/bluesky.json +74 -0
  193. package/src/apps/braze.json +103 -0
  194. package/src/apps/brevo.json +4 -1
  195. package/src/apps/brightdata.json +94 -0
  196. package/src/apps/browserbase.json +237 -0
  197. package/src/apps/bscscan.json +150 -0
  198. package/src/apps/buffer.json +121 -0
  199. package/src/apps/buildjet.json +80 -0
  200. package/src/apps/builtwith.json +101 -0
  201. package/src/apps/bunny-cdn.json +104 -0
  202. package/src/apps/bunny-stream.json +205 -3
  203. package/src/apps/byrd.json +585 -0
  204. package/src/apps/calendly.json +10 -7
  205. package/src/apps/campaign-manager-360.json +264 -0
  206. package/src/apps/capturekit.json +51 -0
  207. package/src/apps/circleci.json +212 -0
  208. package/src/apps/cirrus-runners.json +75 -0
  209. package/src/apps/cj-affiliate.json +101 -0
  210. package/src/apps/cjdropshipping.json +278 -0
  211. package/src/apps/clerk.json +153 -0
  212. package/src/apps/cloudflare-containers.json +98 -0
  213. package/src/apps/cloudflare-r2.json +180 -0
  214. package/src/apps/cloudflare.json +474 -157
  215. package/src/apps/cloudinary.json +119 -97
  216. package/src/apps/coconut.json +94 -0
  217. package/src/apps/contentful.json +157 -0
  218. package/src/apps/criteo.json +222 -0
  219. package/src/apps/crunchbase.json +104 -0
  220. package/src/apps/customer-io.json +106 -0
  221. package/src/apps/databricks.json +94 -0
  222. package/src/apps/deepgram.json +3 -0
  223. package/src/apps/deepl.json +113 -0
  224. package/src/apps/deepseek.json +5 -2
  225. package/src/apps/depot.json +102 -0
  226. package/src/apps/digitalocean-spaces.json +121 -0
  227. package/src/apps/digitalocean.json +115 -0
  228. package/src/apps/discord.json +90 -1
  229. package/src/apps/docker-build-cloud.json +68 -0
  230. package/src/apps/duffel.json +193 -77
  231. package/src/apps/dux-soup.json +4 -1
  232. package/src/apps/dv360.json +287 -0
  233. package/src/apps/earthly-cloud.json +84 -0
  234. package/src/apps/eia.json +121 -0
  235. package/src/apps/elasticsearch.json +282 -0
  236. package/src/apps/elevenlabs.json +336 -192
  237. package/src/apps/etherscan.json +162 -0
  238. package/src/apps/etsy.json +484 -0
  239. package/src/apps/eventbrite-events.json +5 -2
  240. package/src/apps/exa.json +101 -0
  241. package/src/apps/facebook-ads.json +3 -3
  242. package/src/apps/facebook-api.json +1484 -37
  243. package/src/apps/finnhub.json +232 -0
  244. package/src/apps/flightapi.json +248 -0
  245. package/src/apps/fly-io.json +134 -0
  246. package/src/apps/fred.json +156 -0
  247. package/src/apps/gdelt.json +96 -0
  248. package/src/apps/gelato.json +123 -0
  249. package/src/apps/gemini.json +143 -49
  250. package/src/apps/getscreenshot.json +52 -0
  251. package/src/apps/github.json +355 -39
  252. package/src/apps/gmail.json +151 -2
  253. package/src/apps/gnews.json +71 -0
  254. package/src/apps/google-analytics.json +311 -0
  255. package/src/apps/google-cloud-storage.json +484 -0
  256. package/src/apps/google-docs.json +2 -2
  257. package/src/apps/google-drive.json +2 -2
  258. package/src/apps/google-places.json +127 -0
  259. package/src/apps/google-search-console.json +126 -0
  260. package/src/apps/google-sheets.json +2 -2
  261. package/src/apps/grafana-cloud.json +98 -0
  262. package/src/apps/groq.json +119 -0
  263. package/src/apps/hetzner-object-storage.json +177 -0
  264. package/src/apps/hetzner.json +255 -367
  265. package/src/apps/heygen.json +828 -141
  266. package/src/apps/hive-fulfillment.json +559 -0
  267. package/src/apps/hotjar.json +91 -0
  268. package/src/apps/huawei-cloud.json +189 -0
  269. package/src/apps/huboo.json +286 -0
  270. package/src/apps/hubspot.json +253 -637
  271. package/src/apps/huggingface.json +5 -2
  272. package/src/apps/hunter.json +5 -2
  273. package/src/apps/hyperbrowser.json +205 -0
  274. package/src/apps/idrive-e2.json +128 -0
  275. package/src/apps/impact.json +106 -0
  276. package/src/apps/instagram-api.json +185 -11
  277. package/src/apps/instantly.json +169 -0
  278. package/src/apps/ionos.json +250 -0
  279. package/src/apps/{learning-platform.json → kalio.json} +162 -3
  280. package/src/apps/kalshi.json +144 -0
  281. package/src/apps/keywords-everywhere.json +86 -0
  282. package/src/apps/kickbox.json +71 -0
  283. package/src/apps/launchdarkly.json +111 -0
  284. package/src/apps/leadbyte.json +600 -0
  285. package/src/apps/leadfeeder.json +89 -0
  286. package/src/apps/lemlist.json +109 -0
  287. package/src/apps/linkedin-ads.json +279 -0
  288. package/src/apps/linkedin.json +96 -2
  289. package/src/apps/linode-object-storage.json +183 -0
  290. package/src/apps/linode.json +160 -0
  291. package/src/apps/lnk-bio.json +5 -2
  292. package/src/apps/loom.json +5 -2
  293. package/src/apps/lusha.json +104 -0
  294. package/src/apps/magalu-cloud.json +187 -0
  295. package/src/apps/majestic.json +117 -0
  296. package/src/apps/manifold-markets.json +144 -0
  297. package/src/apps/mapbox.json +118 -0
  298. package/src/apps/microsoft-ads.json +246 -0
  299. package/src/apps/microsoft-onedrive.json +380 -0
  300. package/src/apps/microsoft-teams.json +315 -96
  301. package/src/apps/millionverifier.json +85 -0
  302. package/src/apps/mindee.json +246 -0
  303. package/src/apps/miro.json +138 -0
  304. package/src/apps/mistral.json +129 -0
  305. package/src/apps/mixpanel.json +95 -0
  306. package/src/apps/moz.json +127 -0
  307. package/src/apps/mux.json +201 -0
  308. package/src/apps/namecheap.json +321 -123
  309. package/src/apps/namespace-cloud.json +84 -0
  310. package/src/apps/naver-cloud.json +184 -0
  311. package/src/apps/neon.json +122 -0
  312. package/src/apps/netlify.json +124 -0
  313. package/src/apps/neverbounce.json +92 -0
  314. package/src/apps/newrelic.json +80 -0
  315. package/src/apps/newsapi.json +86 -0
  316. package/src/apps/ngrok.json +29 -0
  317. package/src/apps/nixbuild.json +116 -0
  318. package/src/apps/northflank.json +161 -0
  319. package/src/apps/notion.json +3 -0
  320. package/src/apps/okta.json +131 -0
  321. package/src/apps/omnikit-analytics.json +73 -1
  322. package/src/apps/omnikit-api-gateway.json +74 -2
  323. package/src/apps/omnikit-billing.json +73 -1
  324. package/src/apps/omnikit-cms.json +73 -1
  325. package/src/apps/omnikit-code-ops.json +76 -4
  326. package/src/apps/omnikit-functions.json +74 -2
  327. package/src/apps/omnikit-intelligence.json +176 -33
  328. package/src/apps/omnikit-management.json +73 -1
  329. package/src/apps/omnikit-media.json +73 -1
  330. package/src/apps/omnikit-messaging.json +72 -0
  331. package/src/apps/omnikit-redirects.json +73 -1
  332. package/src/apps/omnikit-sites.json +325 -66
  333. package/src/apps/omnikit-storage.json +104 -7
  334. package/src/apps/omnikit-webhooks.json +73 -1
  335. package/src/apps/omnikit-workflows.json +73 -1
  336. package/src/apps/onesignal.json +108 -0
  337. package/src/apps/openai-api.json +176 -30
  338. package/src/apps/openai-codex.json +187 -0
  339. package/src/apps/opencode-go.json +113 -0
  340. package/src/apps/optinmonster.json +7 -4
  341. package/src/apps/outlook-calendar.json +350 -0
  342. package/src/apps/outlook-mail.json +337 -0
  343. package/src/apps/outscraper.json +118 -0
  344. package/src/apps/ovhcloud.json +209 -0
  345. package/src/apps/paddle.json +170 -0
  346. package/src/apps/pagerduty.json +151 -0
  347. package/src/apps/partnerstack.json +118 -0
  348. package/src/apps/perplexity.json +37 -0
  349. package/src/apps/phantombuster.json +85 -0
  350. package/src/apps/pinecone.json +129 -0
  351. package/src/apps/pinterest-ads.json +261 -0
  352. package/src/apps/pinterest.json +217 -0
  353. package/src/apps/planetscale.json +139 -0
  354. package/src/apps/polygonscan.json +157 -0
  355. package/src/apps/polymarket-clob.json +184 -0
  356. package/src/apps/polymarket-data.json +153 -0
  357. package/src/apps/porkbun.json +609 -145
  358. package/src/apps/posthog.json +107 -0
  359. package/src/apps/pushover.json +28 -0
  360. package/src/apps/quora-ads.json +251 -0
  361. package/src/apps/railway.json +57 -0
  362. package/src/apps/reddit-ads.json +238 -0
  363. package/src/apps/reddit.json +274 -0
  364. package/src/apps/render.json +124 -0
  365. package/src/apps/replicate.json +5 -2
  366. package/src/apps/reply-io.json +111 -0
  367. package/src/apps/resend.json +110 -0
  368. package/src/apps/ringover.json +1144 -0
  369. package/src/apps/rocketreach.json +158 -0
  370. package/src/apps/rollbar.json +88 -0
  371. package/src/apps/runs-on.json +70 -0
  372. package/src/apps/sanity.json +89 -0
  373. package/src/apps/scaleway-object-storage.json +175 -0
  374. package/src/apps/scrapingbee.json +75 -0
  375. package/src/apps/screenshotlayer.json +49 -0
  376. package/src/apps/screenshotmachine.json +49 -0
  377. package/src/apps/se-ranking.json +239 -0
  378. package/src/apps/seamless-ai.json +91 -0
  379. package/src/apps/sec-edgar.json +107 -0
  380. package/src/apps/segment.json +104 -0
  381. package/src/apps/semrush.json +153 -0
  382. package/src/apps/sentry.json +109 -0
  383. package/src/apps/serpapi.json +95 -0
  384. package/src/apps/serper.json +139 -0
  385. package/src/apps/shareasale.json +130 -0
  386. package/src/apps/skimlinks.json +48 -0
  387. package/src/apps/slack.json +101 -0
  388. package/src/apps/smartlead.json +146 -0
  389. package/src/apps/snapchat-ads.json +238 -0
  390. package/src/apps/snaprender.json +64 -0
  391. package/src/apps/snowflake.json +70 -0
  392. package/src/apps/snyk.json +108 -0
  393. package/src/apps/socialcast.json +74 -8
  394. package/src/apps/sovrn.json +125 -0
  395. package/src/apps/spotify-ads.json +231 -0
  396. package/src/apps/steel.json +239 -0
  397. package/src/apps/stocktwits.json +120 -0
  398. package/src/apps/stripe.json +153 -0
  399. package/src/apps/target-circle.json +348 -0
  400. package/src/apps/tavily.json +104 -0
  401. package/src/apps/tavus.json +403 -0
  402. package/src/apps/telegram.json +5 -2
  403. package/src/apps/teller.json +187 -0
  404. package/src/apps/tencent-cloud.json +214 -0
  405. package/src/apps/tennis-abstract.json +108 -0
  406. package/src/apps/the-odds-api.json +132 -0
  407. package/src/apps/the-sports-db.json +163 -0
  408. package/src/apps/tiktok-ads.json +295 -0
  409. package/src/apps/tiktok-api.json +181 -7
  410. package/src/apps/together.json +5 -2
  411. package/src/apps/trade-desk.json +237 -0
  412. package/src/apps/trading212.json +26 -29
  413. package/src/apps/transloadit.json +138 -0
  414. package/src/apps/truelayer.json +318 -0
  415. package/src/apps/twilio.json +313 -42
  416. package/src/apps/twitter-api.json +216 -33
  417. package/src/apps/ubicloud.json +82 -0
  418. package/src/apps/uplead.json +105 -0
  419. package/src/apps/upstash.json +90 -0
  420. package/src/apps/valueserp.json +63 -0
  421. package/src/apps/venice-ai.json +685 -0
  422. package/src/apps/vercel.json +137 -0
  423. package/src/apps/wappalyzer.json +65 -0
  424. package/src/apps/wasabi.json +175 -0
  425. package/src/apps/whale-alert.json +74 -0
  426. package/src/apps/whatsapp-business.json +131 -0
  427. package/src/apps/wikipedia.json +112 -0
  428. package/src/apps/workos.json +123 -0
  429. package/src/apps/yahoo-dsp.json +265 -0
  430. package/src/apps/yahoo-finance.json +60 -0
  431. package/src/apps/youtube-api.json +520 -142
  432. package/src/apps/zenrows.json +47 -0
  433. package/src/apps/zenserp.json +99 -0
  434. package/src/apps/zerobounce.json +80 -0
package/dist/types.d.ts CHANGED
@@ -8,6 +8,208 @@ export interface AppTemplate {
8
8
  base_url: string;
9
9
  tools: AppToolTemplate[];
10
10
  webhooks?: AppWebhookConfig;
11
+ kind?: AppKind;
12
+ mcp?: RemoteMcpConfig;
13
+ credential_group?: CredentialGroup;
14
+ scopes?: AppScopes;
15
+ ui_components?: UIComponent[];
16
+ /** Optional declarative resource browser for the dashboard. The
17
+ * explorer never defines new capabilities; it only maps friendly
18
+ * navigation and actions onto existing tools in `tools[]`. */
19
+ explorer?: IntegrationExplorerConfig;
20
+ /** Cheap probe used by the dashboard "Test" button and the
21
+ * pre-flight check in POST /connections (non-OAuth). When the
22
+ * user types in credentials and hits save, the server runs this
23
+ * endpoint with the same credential resolution + signing that a
24
+ * real tool call would use; if it returns one of the expected
25
+ * status codes the connection is saved as active, otherwise the
26
+ * form surfaces an error and nothing is persisted. The probe
27
+ * should be read-only and zero-arg.
28
+ *
29
+ * ExpectStatus defaults to [200] when omitted. BaseURL is
30
+ * optional and overrides AppTemplate.base_url for this probe
31
+ * only (handy when an auth-introspection endpoint lives on a
32
+ * different host than the data-plane). */
33
+ health_check?: AppHealthCheck;
34
+ }
35
+ /** Per-app credential probe used by the dashboard's "Test"
36
+ * button and the pre-flight check at connection-creation time.
37
+ *
38
+ * Two forms — pick whichever fits the app:
39
+ *
40
+ * 1. Reference an existing tool by name. The runner looks the
41
+ * tool up in tools[] and reuses its method/path/query_params.
42
+ * DRY: a fix to the tool propagates to the probe automatically.
43
+ * Use this when there's a natural read-only zero-arg tool
44
+ * (S3 list_buckets, GitHub /user, Slack auth.test).
45
+ *
46
+ * { "tool": "list_buckets" }
47
+ *
48
+ * Pass `input` if the tool needs parameters:
49
+ * { "tool": "me", "input": { "scope": "read" } }
50
+ *
51
+ * 2. Synthetic HTTP request. Use when the probe URL doesn't
52
+ * correspond to any exposed tool (a dedicated /healthz, a
53
+ * different host, etc.):
54
+ *
55
+ * { "method": "GET", "path": "/healthz" }
56
+ *
57
+ * expect_status defaults to [200]. base_url overrides
58
+ * AppTemplate.base_url for this probe only. */
59
+ export interface AppHealthCheck {
60
+ tool?: string;
61
+ input?: Record<string, unknown>;
62
+ method?: "GET" | "HEAD" | "POST";
63
+ path?: string;
64
+ base_url?: string;
65
+ expect_status?: number[];
66
+ /** Treat a 401/403 response as "auth valid, permission denied"
67
+ * when the body contains any of these substrings. Designed
68
+ * for S3-compatible APIs where bucket-scoped tokens can't
69
+ * list buckets at account level — R2 returns
70
+ * `403 <Code>AccessDenied</Code>` for valid bucket-only
71
+ * tokens but `403 <Code>InvalidAccessKeyId</Code>` for typo'd
72
+ * ones; listing "AccessDenied" here passes the former and
73
+ * fails the latter from the same probe. */
74
+ auth_ok_when_body_contains?: string[];
75
+ }
76
+ export interface UIComponent {
77
+ /** Stable name used by the agent in respond(components=[…]). */
78
+ name: string;
79
+ /** Built module path under /api/integrations/<slug>/<entry>. */
80
+ entry: string;
81
+ /** Render slots this component opts into. The chat MCP filters
82
+ * the AVAILABLE COMPONENTS catalog by the chat.message_attachment
83
+ * slot before showing it to the agent. */
84
+ slots?: string[];
85
+ /** JSON-Schema-shaped props contract. Required key list +
86
+ * property types are surfaced in the agent-facing description. */
87
+ props_schema?: {
88
+ type?: "object";
89
+ required?: string[];
90
+ properties?: Record<string, {
91
+ type?: string;
92
+ description?: string;
93
+ }>;
94
+ };
95
+ /** Soft preview convention: when the dashboard's app-detail panel
96
+ * mounts this component for visual preview, it spreads these
97
+ * props. The component decides what synthetic state to render —
98
+ * typically a `preview: true` boolean flag. */
99
+ preview_props?: Record<string, unknown>;
100
+ }
101
+ export interface IntegrationExplorerConfig {
102
+ resources: IntegrationExplorerResource[];
103
+ }
104
+ export interface IntegrationExplorerResource {
105
+ /** Stable resource id, e.g. "collections". */
106
+ id: string;
107
+ /** Human label shown in the explorer navigation. */
108
+ label: string;
109
+ description?: string;
110
+ /** Existing tool name used to list this resource. */
111
+ list_tool: string;
112
+ /** Optional input object sent with list_tool. Values may be templates. */
113
+ list_input?: Record<string, unknown>;
114
+ /** Dot path into the tool response where rows live. Defaults to "Items". */
115
+ response_path?: string;
116
+ /** Dot paths read from each row for compact display. */
117
+ item_id_path?: string;
118
+ item_label_path?: string;
119
+ item_subtitle_path?: string;
120
+ /** Existing tool name used to load details for a selected row. */
121
+ detail_tool?: string;
122
+ /** Input object for detail_tool. Supports {{item.foo}} templates. */
123
+ detail_input?: Record<string, unknown>;
124
+ actions?: IntegrationExplorerAction[];
125
+ }
126
+ export interface IntegrationExplorerAction {
127
+ label: string;
128
+ tool: string;
129
+ /** Optional preset input. Supports {{item.foo}} templates when an item is selected. */
130
+ input?: Record<string, unknown>;
131
+ destructive?: boolean;
132
+ description?: string;
133
+ }
134
+ /**
135
+ * "rest" — legacy + default: tools are HTTP endpoints we call directly,
136
+ * a local stdio MCP is generated per connection from `tools`.
137
+ * "remote_mcp" — vendor hosts an MCP server. After OAuth, we register
138
+ * the vendor's URL with the instance's MCP gateway and proxy
139
+ * tool calls through. The agent sees the vendor's tool list
140
+ * verbatim, no local generation.
141
+ */
142
+ export type AppKind = "rest" | "remote_mcp";
143
+ export interface RemoteMcpConfig {
144
+ /** Wire format the vendor's MCP server speaks. */
145
+ transport: "http" | "sse";
146
+ /** Fully-qualified URL of the vendor's MCP endpoint. */
147
+ url: string;
148
+ /**
149
+ * Header name + template used to authenticate every MCP call to the
150
+ * upstream. Defaults to `Authorization: Bearer {{token}}` when
151
+ * absent. Same {{credential.X}}/{{token}}/{{api_key}} resolution as
152
+ * AppAuthConfig.headers.
153
+ */
154
+ auth_header?: {
155
+ name: string;
156
+ value: string;
157
+ };
158
+ }
159
+ export interface CredentialGroup {
160
+ /** Stable key used as the master connection's app_slug (prefixed with `_group:`). */
161
+ id: string;
162
+ /** Display name of the suite (e.g. "OmniKit", "SocialCast"). */
163
+ name: string;
164
+ /** Logo for the collapsed suite card in the catalog. */
165
+ logo?: string | null;
166
+ /** Marketing description shown on the connect screen. */
167
+ description?: string;
168
+ /**
169
+ * How to enumerate child projects from an account-wide credential.
170
+ * Called once at connect time and on explicit refresh; never during
171
+ * normal tool execution. All fields inherit from the owning
172
+ * AppTemplate when omitted (base_url, auth.headers).
173
+ */
174
+ discovery?: GroupDiscoveryConfig;
175
+ }
176
+ export interface GroupDiscoveryConfig {
177
+ list_projects: DiscoveryCall;
178
+ }
179
+ export interface DiscoveryCall {
180
+ method: "GET" | "POST";
181
+ /** Path relative to base_url (or the owning app's base_url). */
182
+ path: string;
183
+ /** Optional override of the app's base_url. */
184
+ base_url?: string;
185
+ /** Dot/[] path into the JSON response where the project array lives. */
186
+ response_path?: string;
187
+ /** Field on each project object that is its external id. */
188
+ id_field: string;
189
+ /** Field on each project object that is its human label. */
190
+ label_field: string;
191
+ }
192
+ export interface AppScopes {
193
+ /** Account-wide key that can see multiple projects. */
194
+ account?: AppScope;
195
+ /** Single-project key — legacy-equivalent shape. */
196
+ project?: AppScope;
197
+ }
198
+ export interface AppScope {
199
+ credential_fields: CredentialField[];
200
+ /** Auth headers for this scope; overrides AppAuthConfig.headers. */
201
+ auth_headers?: Record<string, string>;
202
+ /** Auth query params for this scope; overrides AppAuthConfig.query_params. */
203
+ auth_query?: Record<string, string>;
204
+ /** How a child project_id is injected into each request (account scope only). */
205
+ project_binding?: ProjectBinding;
206
+ }
207
+ export interface ProjectBinding {
208
+ type: "header" | "path_prefix" | "path_param";
209
+ /** Header name for `header`, path segment template for `path_prefix`, input field name for `path_param`. */
210
+ name: string;
211
+ /** Value template, e.g. "{{project_id}}". Resolved against the child connection metadata. */
212
+ value: string;
11
213
  }
12
214
  export interface AppWebhookConfig {
13
215
  signature_header: string;
@@ -44,14 +246,40 @@ export interface WebhookRegistrationConfig {
44
246
  export interface AppWebhookEvent {
45
247
  name: string;
46
248
  description: string;
249
+ /** Omitted or "webhook" means native upstream webhook delivery. "poll" means the server synthesizes events by calling poll.tool. */
250
+ delivery?: "webhook" | "poll";
251
+ poll?: WebhookPollConfig;
252
+ }
253
+ export interface WebhookPollConfig {
254
+ tool: string;
255
+ default_interval_seconds?: number;
256
+ min_interval_seconds?: number;
257
+ input?: Record<string, unknown>;
258
+ items_path?: string;
259
+ id_fields: string[];
260
+ timestamp_field?: string;
261
+ mode?: "new_items" | "updated_items";
262
+ emit_initial?: boolean;
263
+ max_seen?: number;
47
264
  }
48
265
  export interface AppAuthConfig {
49
266
  types: AuthType[];
50
267
  oauth2?: OAuthConfig;
268
+ aws_sigv4?: AwsSigv4Config;
269
+ shareasale?: ShareASaleAuthConfig;
51
270
  headers?: Record<string, string>;
52
271
  query_params?: Record<string, string>;
272
+ body_params?: Record<string, string>;
53
273
  credential_fields?: CredentialField[];
54
274
  }
275
+ export interface AwsSigv4Config {
276
+ /** AWS service name used in the credential scope (e.g. "ses", "lambda", "dynamodb"). */
277
+ service: string;
278
+ }
279
+ export interface ShareASaleAuthConfig {
280
+ /** Credential key containing the ShareASale API secret key. */
281
+ secret_field: string;
282
+ }
55
283
  export interface CredentialField {
56
284
  name: string;
57
285
  label: string;
@@ -59,7 +287,7 @@ export interface CredentialField {
59
287
  required?: boolean;
60
288
  type?: "password" | "text";
61
289
  }
62
- export type AuthType = "api_key" | "bearer" | "basic" | "oauth2";
290
+ export type AuthType = "api_key" | "bearer" | "basic" | "oauth2" | "oauth_device_code" | "aws_sigv4";
63
291
  export interface OAuthConfig {
64
292
  authorize_url: string;
65
293
  token_url: string;
@@ -74,12 +302,20 @@ export interface AppToolTemplate {
74
302
  name: string;
75
303
  description: string;
76
304
  method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
305
+ /** Optional override when one integration mixes hosts. Defaults to AppTemplate.base_url. */
306
+ base_url?: string;
77
307
  path: string;
308
+ /** Optional per-tool request headers. Overrides app-level auth headers. */
309
+ headers?: Record<string, string>;
78
310
  input_schema: Record<string, unknown>;
311
+ mock_response?: unknown;
79
312
  query_params?: string[];
80
313
  response_path?: string;
314
+ return_request_url?: boolean;
315
+ timeout_ms?: number;
81
316
  response_omit?: string[];
82
317
  body_binary_param?: string;
318
+ body_root_param?: string;
83
319
  }
84
320
  export interface Connection {
85
321
  id: string;
@@ -119,9 +355,21 @@ export interface LocalTriggerConfig {
119
355
  }
120
356
  export interface GeneratedMcpServer {
121
357
  name: string;
122
- type: "local";
123
- source: "local-integration";
358
+ /** "local" — tools were generated from a REST template. "remote" —
359
+ * vendor hosts the MCP, see `remote` for the upstream URL + headers. */
360
+ type: "local" | "remote";
361
+ source: "local-integration" | "remote-integration";
362
+ /** Generated tools. Always set for "local". For "remote" left empty
363
+ * (the upstream's tools/list is the source of truth). */
124
364
  tools: GeneratedMcpTool[];
365
+ /** Present only when `type === "remote"`. */
366
+ remote?: GeneratedRemoteMcp;
367
+ }
368
+ export interface GeneratedRemoteMcp {
369
+ transport: "http" | "sse";
370
+ url: string;
371
+ /** Resolved auth headers (credentials already substituted). */
372
+ headers: Record<string, string>;
125
373
  }
126
374
  export interface GeneratedMcpTool {
127
375
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ type Kind = "push" | "pull_opened" | "pull_merged" | "pull_closed" | "issue_opened" | "issue_closed" | "release" | "run_completed" | "comment" | "branch_create";
2
+ interface Event {
3
+ id: string;
4
+ kind: Kind;
5
+ /** ISO timestamp. */
6
+ timestamp: string;
7
+ title: string;
8
+ subtitle?: string;
9
+ /** Optional URL for the event (commit, PR, run, etc.). */
10
+ href?: string;
11
+ }
12
+ interface Props {
13
+ /** "owner/name" — required for the header link + title. */
14
+ repo: string;
15
+ /** Either an array (preferred) or JSON-encoded list of events. */
16
+ events?: Event[] | string;
17
+ /** Cap rendered events; show "+N more" footer when exceeded. Default 12. */
18
+ max?: number;
19
+ preview?: boolean;
20
+ projectId?: string;
21
+ }
22
+ export default function ActivityFeed(props: Props): import("react").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=ActivityFeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityFeed.d.ts","sourceRoot":"","sources":["../../../src/ui/github/ActivityFeed.tsx"],"names":[],"mappings":"AAgCA,KAAK,IAAI,GACL,MAAM,GACN,aAAa,GAAG,aAAa,GAAI,aAAa,GAC9C,cAAc,GAAG,cAAc,GAC/B,SAAS,GACT,eAAe,GACf,SAAS,GACT,eAAe,CAAC;AAEpB,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,KAAK;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyCD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,KAAK,+BA0ChD"}
@@ -0,0 +1,106 @@
1
+ // ActivityFeed (GitHub flavor) — chronological event stream for a
2
+ // repo. Mirrors the HubSpot ActivityFeed shape exactly (Card +
3
+ // CardHeader + Timeline) so a demo profile can swap CRM activity ↔
4
+ // engineering activity by changing the slot's component.
5
+ //
6
+ // Event-kind mapping table (kept in sync with what the agent
7
+ // fetches from gh's events API and normalises before passing in):
8
+ //
9
+ // push Pushed N commits to <branch>
10
+ // pull_opened Opened PR #<n> "<title>"
11
+ // pull_merged Merged PR #<n>
12
+ // pull_closed Closed PR #<n>
13
+ // issue_opened Opened issue #<n> "<title>"
14
+ // issue_closed Closed issue #<n>
15
+ // release Released <tag>
16
+ // run_completed CI #<n> <success|failed> on <branch>
17
+ // comment Commented on #<n>
18
+ // branch_create Created branch <name>
19
+ //
20
+ // The agent server-side compacts rapid-fire pushes from the same
21
+ // actor into one entry ("Pushed 3 commits to X") so the feed stays
22
+ // scannable. The component itself is dumb — every event is one row.
23
+ import { Check, CircleDot, GitBranchPlus, GitCommitHorizontal, GitMerge, GitPullRequest, GitPullRequestClosed, MessageSquare, Tag, } from "lucide-react";
24
+ import { Card, CardHeader, Timeline } from "@apteva/ui-kit";
25
+ import { githubVendor, minusHoursISO, repoUrl } from "./lib/github";
26
+ const KIND_TONE = {
27
+ push: "neutral",
28
+ pull_opened: "info",
29
+ pull_merged: "success",
30
+ pull_closed: "error",
31
+ issue_opened: "info",
32
+ issue_closed: "success",
33
+ release: "success",
34
+ run_completed: "neutral",
35
+ comment: "neutral",
36
+ branch_create: "neutral",
37
+ };
38
+ const KIND_ICON = {
39
+ push: GitCommitHorizontal,
40
+ pull_opened: GitPullRequest,
41
+ pull_merged: GitMerge,
42
+ pull_closed: GitPullRequestClosed,
43
+ issue_opened: CircleDot,
44
+ issue_closed: Check,
45
+ release: Tag,
46
+ run_completed: Check,
47
+ comment: MessageSquare,
48
+ branch_create: GitBranchPlus,
49
+ };
50
+ const previewEvents = [
51
+ { id: "1", kind: "push", timestamp: minusHoursISO(0.2), title: "Pushed 3 commits to feature/idempotency-keys", subtitle: "maya · refactor webhook handler · …" },
52
+ { id: "2", kind: "run_completed", timestamp: minusHoursISO(0.13), title: "CI #2841 passed", subtitle: "feature/idempotency-keys · 2m 14s" },
53
+ { id: "3", kind: "pull_opened", timestamp: minusHoursISO(0.5), title: "Opened PR #847", subtitle: "Add idempotency keys to webhook receiver · maya" },
54
+ { id: "4", kind: "issue_closed", timestamp: minusHoursISO(2), title: "Closed issue #1219", subtitle: "Webhook receipts duplicate on retry · ari" },
55
+ { id: "5", kind: "comment", timestamp: minusHoursISO(3), title: "Commented on PR #843", subtitle: "lin · \"can we split this into 2 PRs?\"" },
56
+ { id: "6", kind: "release", timestamp: minusHoursISO(28), title: "Released v1.4.2", subtitle: "3 contributors · 12 commits since v1.4.1" },
57
+ { id: "7", kind: "run_completed", timestamp: minusHoursISO(31), title: "CI #2837 failed", subtitle: "main · 4m 02s · integration job timed out" },
58
+ { id: "8", kind: "pull_merged", timestamp: minusHoursISO(33), title: "Merged PR #843", subtitle: "ari → main · Switch retry queue to bullmq" },
59
+ { id: "9", kind: "issue_opened", timestamp: minusHoursISO(50), title: "Opened issue #1234", subtitle: "Retry tier escalation skips dunning step · maya" },
60
+ { id: "10", kind: "branch_create", timestamp: minusHoursISO(54), title: "Created branch feature/idempotency-keys", subtitle: "from main · maya" },
61
+ ];
62
+ export default function ActivityFeed(props) {
63
+ const repo = props.repo || "acme/api"; // preview-mode fallback
64
+ const events = props.preview
65
+ ? previewEvents
66
+ : (parseEvents(props.events) ?? []);
67
+ const max = props.max ?? 12;
68
+ // Hand events to the ui-kit Timeline. Build the icon node lazily —
69
+ // each kind gets its own sized lucide component so the column of
70
+ // icons reads as a coherent legend.
71
+ const timelineEvents = events.map((e) => {
72
+ const Icon = KIND_ICON[e.kind] ?? GitCommitHorizontal;
73
+ return {
74
+ id: e.id,
75
+ timestamp: e.timestamp,
76
+ tone: KIND_TONE[e.kind] ?? "neutral",
77
+ icon: <Icon className="w-3.5 h-3.5"/>,
78
+ title: e.title,
79
+ subtitle: e.subtitle,
80
+ href: e.href,
81
+ };
82
+ });
83
+ // Headline count — count what we show, not what would render
84
+ // after the +N truncation; consistent with HubSpot's pattern.
85
+ const subtitle = events.length === 0
86
+ ? "Quiet"
87
+ : `${events.length} event${events.length === 1 ? "" : "s"}`;
88
+ return (<Card fullWidth>
89
+ <CardHeader vendor={githubVendor} title={`${repo} · activity`} subtitle={subtitle} action={{ label: "View on GitHub", href: repoUrl(repo) }}/>
90
+ <Timeline events={timelineEvents} max={max} emptyLabel="No activity yet."/>
91
+ </Card>);
92
+ }
93
+ function parseEvents(raw) {
94
+ if (!raw)
95
+ return null;
96
+ if (Array.isArray(raw))
97
+ return raw;
98
+ try {
99
+ const parsed = JSON.parse(raw);
100
+ return Array.isArray(parsed) ? parsed : null;
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ //# sourceMappingURL=ActivityFeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityFeed.js","sourceRoot":"","sources":["../../../src/ui/github/ActivityFeed.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import{forwardRef as m,createElement as r}from"react";var y=(...J)=>J.filter((Q,Y,$)=>{return Boolean(Q)&&Q.trim()!==""&&$.indexOf(Q)===Y}).join(" ").trim();var z=(J)=>J.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var x=(J)=>J.replace(/^([A-Z])|[\s-_]+(\w)/g,(Q,Y,$)=>$?$.toUpperCase():Y.toLowerCase());var M=(J)=>{let Q=x(J);return Q.charAt(0).toUpperCase()+Q.slice(1)};import{forwardRef as a,createElement as L}from"react";var U={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var I=(J)=>{for(let Q in J)if(Q.startsWith("aria-")||Q==="role"||Q==="title")return!0;return!1};import{createContext as l,useContext as u,useMemo as UJ,createElement as WJ}from"react";var j=l({});var _=()=>u(j);var v=a(({color:J,size:Q,strokeWidth:Y,absoluteStrokeWidth:$,className:T="",children:F,iconNode:V,...P},k)=>{let{size:W=24,strokeWidth:S=2,absoluteStrokeWidth:f=!1,color:w="currentColor",className:g=""}=_()??{},h=$??f?Number(Y??S)*24/Number(Q??W):Y??S;return L("svg",{ref:k,...U,width:Q??W??U.width,height:Q??W??U.height,stroke:J??w,strokeWidth:h,className:y("lucide",g,T),...!F&&!I(P)&&{"aria-hidden":"true"},...P},[...V.map(([d,p])=>L(d,p)),...Array.isArray(F)?F:[F]])});var X=(J,Q)=>{let Y=m(({className:$,...T},F)=>r(v,{ref:F,iconNode:Q,className:y(`lucide-${z(M(J))}`,`lucide-${J}`,$),...T}));return Y.displayName=M(J),Y};var t=[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]],B=X("git-commit-horizontal",t);var n=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],D=X("check",n);var c=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],K=X("circle-dot",c);var i=[["path",{d:"M6 3v12",key:"qpgusn"}],["path",{d:"M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",key:"1d02ji"}],["path",{d:"M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",key:"chk6ph"}],["path",{d:"M15 6a9 9 0 0 0-9 9",key:"or332x"}],["path",{d:"M18 15v6",key:"9wciyi"}],["path",{d:"M21 18h-6",key:"139f0c"}]],E=X("git-branch-plus",i);var e=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],A=X("git-merge",e);var o=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 9v12",key:"1sc30k"}],["path",{d:"m21 3-6 6",key:"16nqsk"}],["path",{d:"m21 9-6-6",key:"9j17rh"}],["path",{d:"M18 11.5V15",key:"65xf6f"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}]],q=X("git-pull-request-closed",o);var s=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]],G=X("git-pull-request",s);var JJ=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],O=X("message-square",JJ);var QJ=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],H=X("tag",QJ);import{Card as YJ,CardHeader as ZJ,Timeline as $J}from"@apteva/ui-kit";import{jsx as C}from"react/jsx-runtime";var XJ=C("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor","aria-hidden":!0,children:C("path",{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.807 1.305 3.492.998.108-.776.42-1.305.762-1.604-2.665-.305-5.466-1.334-5.466-5.93 0-1.31.467-2.38 1.235-3.22-.135-.303-.54-1.524.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.4 3-.405 1.02.005 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.652.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.435.375.81 1.102.81 2.222 0 1.605-.015 2.898-.015 3.293 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"})});var b={name:"GitHub",logo:XJ,color:"#8957e5"};function N(J){return`https://github.com/${J}`}function Z(J){return new Date(Date.now()-J*60*60*1000).toISOString()}import{jsx as R,jsxs as KJ}from"react/jsx-runtime";var VJ={push:"neutral",pull_opened:"info",pull_merged:"success",pull_closed:"error",issue_opened:"info",issue_closed:"success",release:"success",run_completed:"neutral",comment:"neutral",branch_create:"neutral"},BJ={push:B,pull_opened:G,pull_merged:A,pull_closed:q,issue_opened:K,issue_closed:D,release:H,run_completed:D,comment:O,branch_create:E},FJ=[{id:"1",kind:"push",timestamp:Z(0.2),title:"Pushed 3 commits to feature/idempotency-keys",subtitle:"maya · refactor webhook handler · …"},{id:"2",kind:"run_completed",timestamp:Z(0.13),title:"CI #2841 passed",subtitle:"feature/idempotency-keys · 2m 14s"},{id:"3",kind:"pull_opened",timestamp:Z(0.5),title:"Opened PR #847",subtitle:"Add idempotency keys to webhook receiver · maya"},{id:"4",kind:"issue_closed",timestamp:Z(2),title:"Closed issue #1219",subtitle:"Webhook receipts duplicate on retry · ari"},{id:"5",kind:"comment",timestamp:Z(3),title:"Commented on PR #843",subtitle:'lin · "can we split this into 2 PRs?"'},{id:"6",kind:"release",timestamp:Z(28),title:"Released v1.4.2",subtitle:"3 contributors · 12 commits since v1.4.1"},{id:"7",kind:"run_completed",timestamp:Z(31),title:"CI #2837 failed",subtitle:"main · 4m 02s · integration job timed out"},{id:"8",kind:"pull_merged",timestamp:Z(33),title:"Merged PR #843",subtitle:"ari → main · Switch retry queue to bullmq"},{id:"9",kind:"issue_opened",timestamp:Z(50),title:"Opened issue #1234",subtitle:"Retry tier escalation skips dunning step · maya"},{id:"10",kind:"branch_create",timestamp:Z(54),title:"Created branch feature/idempotency-keys",subtitle:"from main · maya"}];function DJ(J){let Q=J.repo||"acme/api",Y=J.preview?FJ:TJ(J.events)??[],$=J.max??12,T=Y.map((V)=>{let P=BJ[V.kind]??B;return{id:V.id,timestamp:V.timestamp,tone:VJ[V.kind]??"neutral",icon:R(P,{className:"w-3.5 h-3.5"}),title:V.title,subtitle:V.subtitle,href:V.href}}),F=Y.length===0?"Quiet":`${Y.length} event${Y.length===1?"":"s"}`;return KJ(YJ,{fullWidth:!0,children:[R(ZJ,{vendor:b,title:`${Q} · activity`,subtitle:F,action:{label:"View on GitHub",href:N(Q)}}),R($J,{events:T,max:$,emptyLabel:"No activity yet."})]})}function TJ(J){if(!J)return null;if(Array.isArray(J))return J;try{let Q=JSON.parse(J);return Array.isArray(Q)?Q:null}catch{return null}}export{DJ as default};
2
+
3
+ //# debugId=F496D75BC22A7AA364756E2164756E21
@@ -0,0 +1,29 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs", "../../../node_modules/lucide-react/dist/esm/Icon.mjs", "../../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs", "../../../node_modules/lucide-react/dist/esm/context.mjs", "../../../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.mjs", "../../../node_modules/lucide-react/dist/esm/icons/check.mjs", "../../../node_modules/lucide-react/dist/esm/icons/circle-dot.mjs", "../../../node_modules/lucide-react/dist/esm/icons/git-branch-plus.mjs", "../../../node_modules/lucide-react/dist/esm/icons/git-merge.mjs", "../../../node_modules/lucide-react/dist/esm/icons/git-pull-request-closed.mjs", "../../../node_modules/lucide-react/dist/esm/icons/git-pull-request.mjs", "../../../node_modules/lucide-react/dist/esm/icons/message-square.mjs", "../../../node_modules/lucide-react/dist/esm/icons/tag.mjs", "../../../src/ui/github/ActivityFeed.tsx", "../../../src/ui/github/lib/github.tsx"],
4
+ "sourcesContent": [
5
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n",
6
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n",
7
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n",
8
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n",
9
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n",
10
+ "\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n",
11
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n",
12
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n",
13
+ "\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n",
14
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n];\nconst GitCommitHorizontal = createLucideIcon(\"git-commit-horizontal\", __iconNode);\n\nexport { __iconNode, GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.mjs.map\n",
15
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.mjs.map\n",
16
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }]\n];\nconst CircleDot = createLucideIcon(\"circle-dot\", __iconNode);\n\nexport { __iconNode, CircleDot as default };\n//# sourceMappingURL=circle-dot.mjs.map\n",
17
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M6 3v12\", key: \"qpgusn\" }],\n [\"path\", { d: \"M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z\", key: \"1d02ji\" }],\n [\"path\", { d: \"M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z\", key: \"chk6ph\" }],\n [\"path\", { d: \"M15 6a9 9 0 0 0-9 9\", key: \"or332x\" }],\n [\"path\", { d: \"M18 15v6\", key: \"9wciyi\" }],\n [\"path\", { d: \"M21 18h-6\", key: \"139f0c\" }]\n];\nconst GitBranchPlus = createLucideIcon(\"git-branch-plus\", __iconNode);\n\nexport { __iconNode, GitBranchPlus as default };\n//# sourceMappingURL=git-branch-plus.mjs.map\n",
18
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M6 21V9a9 9 0 0 0 9 9\", key: \"7kw0sc\" }]\n];\nconst GitMerge = createLucideIcon(\"git-merge\", __iconNode);\n\nexport { __iconNode, GitMerge as default };\n//# sourceMappingURL=git-merge.mjs.map\n",
19
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M6 9v12\", key: \"1sc30k\" }],\n [\"path\", { d: \"m21 3-6 6\", key: \"16nqsk\" }],\n [\"path\", { d: \"m21 9-6-6\", key: \"9j17rh\" }],\n [\"path\", { d: \"M18 11.5V15\", key: \"65xf6f\" }],\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }]\n];\nconst GitPullRequestClosed = createLucideIcon(\"git-pull-request-closed\", __iconNode);\n\nexport { __iconNode, GitPullRequestClosed as default };\n//# sourceMappingURL=git-pull-request-closed.mjs.map\n",
20
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M13 6h3a2 2 0 0 1 2 2v7\", key: \"1yeb86\" }],\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"9\", y2: \"21\", key: \"rroup\" }]\n];\nconst GitPullRequest = createLucideIcon(\"git-pull-request\", __iconNode);\n\nexport { __iconNode, GitPullRequest as default };\n//# sourceMappingURL=git-pull-request.mjs.map\n",
21
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\",\n key: \"18887p\"\n }\n ]\n];\nconst MessageSquare = createLucideIcon(\"message-square\", __iconNode);\n\nexport { __iconNode, MessageSquare as default };\n//# sourceMappingURL=message-square.mjs.map\n",
22
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\",\n key: \"vktsd0\"\n }\n ],\n [\"circle\", { cx: \"7.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"kqv944\" }]\n];\nconst Tag = createLucideIcon(\"tag\", __iconNode);\n\nexport { __iconNode, Tag as default };\n//# sourceMappingURL=tag.mjs.map\n",
23
+ "// ActivityFeed (GitHub flavor) — chronological event stream for a\n// repo. Mirrors the HubSpot ActivityFeed shape exactly (Card +\n// CardHeader + Timeline) so a demo profile can swap CRM activity ↔\n// engineering activity by changing the slot's component.\n//\n// Event-kind mapping table (kept in sync with what the agent\n// fetches from gh's events API and normalises before passing in):\n//\n// push Pushed N commits to <branch>\n// pull_opened Opened PR #<n> \"<title>\"\n// pull_merged Merged PR #<n>\n// pull_closed Closed PR #<n>\n// issue_opened Opened issue #<n> \"<title>\"\n// issue_closed Closed issue #<n>\n// release Released <tag>\n// run_completed CI #<n> <success|failed> on <branch>\n// comment Commented on #<n>\n// branch_create Created branch <name>\n//\n// The agent server-side compacts rapid-fire pushes from the same\n// actor into one entry (\"Pushed 3 commits to X\") so the feed stays\n// scannable. The component itself is dumb — every event is one row.\n\nimport type { ComponentType } from \"react\";\nimport {\n Check, CircleDot, GitBranchPlus, GitCommitHorizontal,\n GitMerge, GitPullRequest, GitPullRequestClosed, MessageSquare, Tag, X,\n} from \"lucide-react\";\nimport { Card, CardHeader, Timeline } from \"@apteva/ui-kit\";\nimport type { TimelineEvent, TimelineTone } from \"@apteva/ui-kit\";\nimport { githubVendor, minusHoursISO, repoUrl } from \"./lib/github\";\n\ntype Kind =\n | \"push\"\n | \"pull_opened\" | \"pull_merged\" | \"pull_closed\"\n | \"issue_opened\" | \"issue_closed\"\n | \"release\"\n | \"run_completed\"\n | \"comment\"\n | \"branch_create\";\n\ninterface Event {\n id: string;\n kind: Kind;\n /** ISO timestamp. */\n timestamp: string;\n title: string;\n subtitle?: string;\n /** Optional URL for the event (commit, PR, run, etc.). */\n href?: string;\n}\n\ninterface Props {\n /** \"owner/name\" — required for the header link + title. */\n repo: string;\n /** Either an array (preferred) or JSON-encoded list of events. */\n events?: Event[] | string;\n /** Cap rendered events; show \"+N more\" footer when exceeded. Default 12. */\n max?: number;\n preview?: boolean;\n projectId?: string;\n}\n\nconst KIND_TONE: Record<Kind, TimelineTone> = {\n push: \"neutral\",\n pull_opened: \"info\",\n pull_merged: \"success\",\n pull_closed: \"error\",\n issue_opened: \"info\",\n issue_closed: \"success\",\n release: \"success\",\n run_completed: \"neutral\",\n comment: \"neutral\",\n branch_create: \"neutral\",\n};\n\nconst KIND_ICON: Record<Kind, ComponentType<{ className?: string }>> = {\n push: GitCommitHorizontal,\n pull_opened: GitPullRequest,\n pull_merged: GitMerge,\n pull_closed: GitPullRequestClosed,\n issue_opened: CircleDot,\n issue_closed: Check,\n release: Tag,\n run_completed: Check,\n comment: MessageSquare,\n branch_create: GitBranchPlus,\n};\n\nconst previewEvents: Event[] = [\n { id: \"1\", kind: \"push\", timestamp: minusHoursISO(0.2), title: \"Pushed 3 commits to feature/idempotency-keys\", subtitle: \"maya · refactor webhook handler · …\" },\n { id: \"2\", kind: \"run_completed\", timestamp: minusHoursISO(0.13), title: \"CI #2841 passed\", subtitle: \"feature/idempotency-keys · 2m 14s\" },\n { id: \"3\", kind: \"pull_opened\", timestamp: minusHoursISO(0.5), title: \"Opened PR #847\", subtitle: \"Add idempotency keys to webhook receiver · maya\" },\n { id: \"4\", kind: \"issue_closed\", timestamp: minusHoursISO(2), title: \"Closed issue #1219\", subtitle: \"Webhook receipts duplicate on retry · ari\" },\n { id: \"5\", kind: \"comment\", timestamp: minusHoursISO(3), title: \"Commented on PR #843\", subtitle: \"lin · \\\"can we split this into 2 PRs?\\\"\" },\n { id: \"6\", kind: \"release\", timestamp: minusHoursISO(28), title: \"Released v1.4.2\", subtitle: \"3 contributors · 12 commits since v1.4.1\" },\n { id: \"7\", kind: \"run_completed\", timestamp: minusHoursISO(31), title: \"CI #2837 failed\", subtitle: \"main · 4m 02s · integration job timed out\" },\n { id: \"8\", kind: \"pull_merged\", timestamp: minusHoursISO(33), title: \"Merged PR #843\", subtitle: \"ari → main · Switch retry queue to bullmq\" },\n { id: \"9\", kind: \"issue_opened\", timestamp: minusHoursISO(50), title: \"Opened issue #1234\", subtitle: \"Retry tier escalation skips dunning step · maya\" },\n { id: \"10\", kind: \"branch_create\", timestamp: minusHoursISO(54), title: \"Created branch feature/idempotency-keys\", subtitle: \"from main · maya\" },\n];\n\nexport default function ActivityFeed(props: Props) {\n const repo = props.repo || \"acme/api\"; // preview-mode fallback\n const events = props.preview\n ? previewEvents\n : (parseEvents(props.events) ?? []);\n\n const max = props.max ?? 12;\n\n // Hand events to the ui-kit Timeline. Build the icon node lazily —\n // each kind gets its own sized lucide component so the column of\n // icons reads as a coherent legend.\n const timelineEvents: TimelineEvent[] = events.map((e) => {\n const Icon = KIND_ICON[e.kind] ?? GitCommitHorizontal;\n return {\n id: e.id,\n timestamp: e.timestamp,\n tone: KIND_TONE[e.kind] ?? \"neutral\",\n icon: <Icon className=\"w-3.5 h-3.5\" />,\n title: e.title,\n subtitle: e.subtitle,\n href: e.href,\n };\n });\n\n // Headline count — count what we show, not what would render\n // after the +N truncation; consistent with HubSpot's pattern.\n const subtitle =\n events.length === 0\n ? \"Quiet\"\n : `${events.length} event${events.length === 1 ? \"\" : \"s\"}`;\n\n return (\n <Card fullWidth>\n <CardHeader\n vendor={githubVendor}\n title={`${repo} · activity`}\n subtitle={subtitle}\n action={{ label: \"View on GitHub\", href: repoUrl(repo) }}\n />\n <Timeline events={timelineEvents} max={max} emptyLabel=\"No activity yet.\" />\n </Card>\n );\n}\n\nfunction parseEvents(raw: Event[] | string | undefined): Event[] | null {\n if (!raw) return null;\n if (Array.isArray(raw)) return raw;\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n",
24
+ "// Shared helpers for every GitHub UI component.\n//\n// * githubVendor — CardHeader brand pill (logo + name + color)\n// * URL builders — repo, issue, PR, commit, workflow run, branch\n// * formatters — relative time, short sha, file-stat string\n// * status mappers — PR state → StatusPill variant, run conclusion\n// → StatusDot variant, etc.\n//\n// Mirrors the lib/hubspot.tsx pattern so any vendor lib has the\n// same shape (logo + vendor + URL helpers + status mappers + time\n// helpers).\n\nimport type { ReactNode } from \"react\";\nimport type { CardVendor, StatusDotVariant, StatusPillVariant } from \"@apteva/ui-kit\";\n\n// ─── Brand mark ───────────────────────────────────────────────────\n//\n// Octocat outline. currentColor so CardHeader's vendor pill can\n// recolor it via inline `style.color`.\n\nexport const githubLogo: ReactNode = (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden>\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.807 1.305 3.492.998.108-.776.42-1.305.762-1.604-2.665-.305-5.466-1.334-5.466-5.93 0-1.31.467-2.38 1.235-3.22-.135-.303-.54-1.524.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.4 3-.405 1.02.005 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.652.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.435.375.81 1.102.81 2.222 0 1.605-.015 2.898-.015 3.293 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n);\n\n// GitHub Mona Purple — secondary brand color, used in the vendor\n// pill and any GitHub-specific accents. Distinct from HubSpot orange\n// so two cards from different vendors read as different upstreams at\n// a glance.\nexport const GITHUB_BRAND_COLOR = \"#8957e5\";\n\nexport const githubVendor: CardVendor = {\n name: \"GitHub\",\n logo: githubLogo,\n color: GITHUB_BRAND_COLOR,\n};\n\n// ─── URL builders ─────────────────────────────────────────────────\n\nexport function repoUrl(repo: string): string {\n return `https://github.com/${repo}`;\n}\nexport function issueUrl(repo: string, number: number | string): string {\n return `https://github.com/${repo}/issues/${number}`;\n}\nexport function pullRequestUrl(repo: string, number: number | string): string {\n return `https://github.com/${repo}/pull/${number}`;\n}\nexport function commitUrl(repo: string, sha: string): string {\n return `https://github.com/${repo}/commit/${sha}`;\n}\nexport function workflowRunUrl(repo: string, run_id: number | string): string {\n return `https://github.com/${repo}/actions/runs/${run_id}`;\n}\nexport function branchUrl(repo: string, branch: string): string {\n return `https://github.com/${repo}/tree/${encodeURIComponent(branch)}`;\n}\nexport function userUrl(login: string): string {\n return `https://github.com/${login}`;\n}\n\n// ─── Formatters ───────────────────────────────────────────────────\n\n/** \"3d ago\" / \"12m ago\" / \"just now\" — coarse human-readable delta. */\nexport function timeAgo(iso?: string): string {\n if (!iso) return \"\";\n const t = new Date(iso).getTime();\n if (!Number.isFinite(t)) return \"\";\n const s = Math.max(0, (Date.now() - t) / 1000);\n if (s < 60) return \"just now\";\n const m = s / 60; if (m < 60) return `${Math.round(m)}m ago`;\n const h = m / 60; if (h < 24) return `${Math.round(h)}h ago`;\n const d = h / 24; if (d < 30) return `${Math.round(d)}d ago`;\n const mo = d / 30; if (mo < 12) return `${Math.round(mo)}mo ago`;\n return `${Math.round(mo / 12)}y ago`;\n}\n\n/** Coerce ISO durations to mm:ss / hh:mm:ss. Used for run/job times. */\nexport function formatDuration(ms?: number): string {\n if (!ms || ms < 0) return \"—\";\n const s = Math.round(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n const rs = s % 60;\n if (m < 60) return rs ? `${m}m ${rs}s` : `${m}m`;\n const h = Math.floor(m / 60);\n return `${h}h ${m % 60}m`;\n}\n\n/** \"abc1234\" — 7-char short sha. Tolerates already-short input. */\nexport function shortSha(sha?: string): string {\n if (!sha) return \"\";\n return sha.length > 7 ? sha.slice(0, 7) : sha;\n}\n\n/** Test fixture helper — same shape as lib/hubspot's minusHoursISO. */\nexport function minusHoursISO(h: number): string {\n return new Date(Date.now() - h * 60 * 60 * 1000).toISOString();\n}\n\n// ─── Status mappers ───────────────────────────────────────────────\n\n/** PR state → StatusPill variant + label. */\nexport function pullRequestState(opts: {\n state?: \"open\" | \"closed\";\n merged?: boolean;\n draft?: boolean;\n}): { label: string; variant: StatusPillVariant; dot: StatusDotVariant } {\n if (opts.merged) return { label: \"merged\", variant: \"success\", dot: \"live\" };\n if (opts.state === \"closed\") return { label: \"closed\", variant: \"error\", dot: \"error\" };\n if (opts.draft) return { label: \"draft\", variant: \"neutral\", dot: \"muted\" };\n return { label: \"open\", variant: \"info\", dot: \"active\" };\n}\n\n/** Workflow-run status + conclusion → label/variant pair. */\nexport function runState(opts: {\n status?: string; // queued | in_progress | completed\n conclusion?: string; // success | failure | cancelled | skipped | neutral | timed_out\n}): { label: string; variant: StatusPillVariant; dot: StatusDotVariant } {\n if (opts.status === \"in_progress\") return { label: \"running\", variant: \"info\", dot: \"active\" };\n if (opts.status === \"queued\") return { label: \"queued\", variant: \"neutral\", dot: \"muted\" };\n switch (opts.conclusion) {\n case \"success\": return { label: \"success\", variant: \"success\", dot: \"live\" };\n case \"failure\": return { label: \"failed\", variant: \"error\", dot: \"error\" };\n case \"cancelled\": return { label: \"cancelled\", variant: \"neutral\", dot: \"muted\" };\n case \"skipped\": return { label: \"skipped\", variant: \"neutral\", dot: \"muted\" };\n case \"timed_out\": return { label: \"timed out\", variant: \"warn\", dot: \"warn\" };\n case \"neutral\": return { label: \"neutral\", variant: \"neutral\", dot: \"muted\" };\n default: return { label: \"—\", variant: \"neutral\", dot: \"muted\" };\n }\n}\n\n/** Job conclusion → small dot variant for inline lists. */\nexport function jobDot(conclusion?: string, status?: string): StatusDotVariant {\n if (status === \"in_progress\") return \"active\";\n if (status === \"queued\") return \"muted\";\n switch (conclusion) {\n case \"success\": return \"live\";\n case \"failure\": return \"error\";\n case \"cancelled\": return \"muted\";\n case \"skipped\": return \"muted\";\n case \"timed_out\": return \"warn\";\n default: return \"muted\";\n }\n}\n\n// ─── Mini avatar fallback (data URL) ──────────────────────────────\n//\n// IssueCard's preview avatars used inline data:image/svg+xml URLs so\n// the explorer doesn't depend on network requests. Same helper\n// reused across cards' preview samples.\n\nexport function avatarDataUrl(hexFill: string): string {\n return (\n \"data:image/svg+xml;utf8,\" +\n encodeURIComponent(\n `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><circle cx='8' cy='8' r='8' fill='%23${hexFill}'/></svg>`,\n )\n );\n}\n"
25
+ ],
26
+ "mappings": "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",
27
+ "debugId": "F496D75BC22A7AA364756E2164756E21",
28
+ "names": []
29
+ }