@hasna/connectors 0.3.16 → 0.4.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 (512) hide show
  1. package/bin/index.js +246 -1
  2. package/bin/mcp.js +246 -1
  3. package/bin/serve.js +245 -0
  4. package/connectors/connect-airtable/.env.example +11 -0
  5. package/connectors/connect-airtable/CLAUDE.md +121 -0
  6. package/connectors/connect-airtable/README.md +193 -0
  7. package/connectors/connect-airtable/package.json +50 -0
  8. package/connectors/connect-airtable/src/api/client.ts +139 -0
  9. package/connectors/connect-airtable/src/api/index.ts +405 -0
  10. package/connectors/connect-airtable/src/cli/index.ts +637 -0
  11. package/connectors/connect-airtable/src/index.ts +20 -0
  12. package/connectors/connect-airtable/src/types/index.ts +349 -0
  13. package/connectors/connect-airtable/src/utils/config.ts +197 -0
  14. package/connectors/connect-airtable/tsconfig.json +16 -0
  15. package/connectors/connect-amplitude/.env.example +11 -0
  16. package/connectors/connect-amplitude/CLAUDE.md +121 -0
  17. package/connectors/connect-amplitude/README.md +193 -0
  18. package/connectors/connect-amplitude/package.json +51 -0
  19. package/connectors/connect-amplitude/src/api/client.ts +144 -0
  20. package/connectors/connect-amplitude/src/api/index.ts +215 -0
  21. package/connectors/connect-amplitude/src/cli/index.ts +532 -0
  22. package/connectors/connect-amplitude/src/index.ts +22 -0
  23. package/connectors/connect-amplitude/src/types/index.ts +329 -0
  24. package/connectors/connect-amplitude/src/utils/config.ts +208 -0
  25. package/connectors/connect-amplitude/tsconfig.json +16 -0
  26. package/connectors/connect-asana/.env.example +11 -0
  27. package/connectors/connect-asana/CLAUDE.md +128 -0
  28. package/connectors/connect-asana/README.md +193 -0
  29. package/connectors/connect-asana/package.json +52 -0
  30. package/connectors/connect-asana/src/api/client.ts +119 -0
  31. package/connectors/connect-asana/src/api/index.ts +319 -0
  32. package/connectors/connect-asana/src/cli/index.ts +731 -0
  33. package/connectors/connect-asana/src/index.ts +19 -0
  34. package/connectors/connect-asana/src/types/index.ts +270 -0
  35. package/connectors/connect-asana/src/utils/config.ts +171 -0
  36. package/connectors/connect-asana/src/utils/output.ts +119 -0
  37. package/connectors/connect-asana/tsconfig.json +16 -0
  38. package/connectors/connect-calendly/.env.example +11 -0
  39. package/connectors/connect-calendly/CLAUDE.md +272 -0
  40. package/connectors/connect-calendly/README.md +193 -0
  41. package/connectors/connect-calendly/package.json +51 -0
  42. package/connectors/connect-calendly/scripts/release.ts +179 -0
  43. package/connectors/connect-calendly/src/api/client.ts +213 -0
  44. package/connectors/connect-calendly/src/api/example.ts +48 -0
  45. package/connectors/connect-calendly/src/api/index.ts +51 -0
  46. package/connectors/connect-calendly/src/cli/index.ts +254 -0
  47. package/connectors/connect-calendly/src/index.ts +103 -0
  48. package/connectors/connect-calendly/src/types/index.ts +237 -0
  49. package/connectors/connect-calendly/src/utils/auth.ts +274 -0
  50. package/connectors/connect-calendly/src/utils/bulk.ts +212 -0
  51. package/connectors/connect-calendly/src/utils/config.ts +326 -0
  52. package/connectors/connect-calendly/src/utils/output.ts +175 -0
  53. package/connectors/connect-calendly/src/utils/settings.ts +114 -0
  54. package/connectors/connect-calendly/src/utils/storage.ts +198 -0
  55. package/connectors/connect-calendly/tsconfig.json +16 -0
  56. package/connectors/connect-clickup/.env.example +11 -0
  57. package/connectors/connect-clickup/CLAUDE.md +128 -0
  58. package/connectors/connect-clickup/README.md +193 -0
  59. package/connectors/connect-clickup/package.json +52 -0
  60. package/connectors/connect-clickup/src/api/client.ts +116 -0
  61. package/connectors/connect-clickup/src/api/index.ts +400 -0
  62. package/connectors/connect-clickup/src/cli/index.ts +625 -0
  63. package/connectors/connect-clickup/src/index.ts +19 -0
  64. package/connectors/connect-clickup/src/types/index.ts +591 -0
  65. package/connectors/connect-clickup/src/utils/config.ts +157 -0
  66. package/connectors/connect-clickup/src/utils/output.ts +119 -0
  67. package/connectors/connect-clickup/tsconfig.json +16 -0
  68. package/connectors/connect-confluence/.env.example +11 -0
  69. package/connectors/connect-confluence/CLAUDE.md +272 -0
  70. package/connectors/connect-confluence/README.md +193 -0
  71. package/connectors/connect-confluence/package.json +53 -0
  72. package/connectors/connect-confluence/scripts/release.ts +179 -0
  73. package/connectors/connect-confluence/src/api/client.ts +213 -0
  74. package/connectors/connect-confluence/src/api/example.ts +48 -0
  75. package/connectors/connect-confluence/src/api/index.ts +51 -0
  76. package/connectors/connect-confluence/src/cli/index.ts +254 -0
  77. package/connectors/connect-confluence/src/index.ts +103 -0
  78. package/connectors/connect-confluence/src/types/index.ts +237 -0
  79. package/connectors/connect-confluence/src/utils/auth.ts +274 -0
  80. package/connectors/connect-confluence/src/utils/bulk.ts +212 -0
  81. package/connectors/connect-confluence/src/utils/config.ts +326 -0
  82. package/connectors/connect-confluence/src/utils/output.ts +175 -0
  83. package/connectors/connect-confluence/src/utils/settings.ts +114 -0
  84. package/connectors/connect-confluence/src/utils/storage.ts +198 -0
  85. package/connectors/connect-confluence/tsconfig.json +16 -0
  86. package/connectors/connect-convertkit/.env.example +11 -0
  87. package/connectors/connect-convertkit/CLAUDE.md +272 -0
  88. package/connectors/connect-convertkit/README.md +193 -0
  89. package/connectors/connect-convertkit/package.json +51 -0
  90. package/connectors/connect-convertkit/scripts/release.ts +179 -0
  91. package/connectors/connect-convertkit/src/api/client.ts +213 -0
  92. package/connectors/connect-convertkit/src/api/example.ts +48 -0
  93. package/connectors/connect-convertkit/src/api/index.ts +51 -0
  94. package/connectors/connect-convertkit/src/cli/index.ts +254 -0
  95. package/connectors/connect-convertkit/src/index.ts +103 -0
  96. package/connectors/connect-convertkit/src/types/index.ts +237 -0
  97. package/connectors/connect-convertkit/src/utils/auth.ts +274 -0
  98. package/connectors/connect-convertkit/src/utils/bulk.ts +212 -0
  99. package/connectors/connect-convertkit/src/utils/config.ts +326 -0
  100. package/connectors/connect-convertkit/src/utils/output.ts +175 -0
  101. package/connectors/connect-convertkit/src/utils/settings.ts +114 -0
  102. package/connectors/connect-convertkit/src/utils/storage.ts +198 -0
  103. package/connectors/connect-convertkit/tsconfig.json +16 -0
  104. package/connectors/connect-crisp/.env.example +11 -0
  105. package/connectors/connect-crisp/CLAUDE.md +272 -0
  106. package/connectors/connect-crisp/README.md +193 -0
  107. package/connectors/connect-crisp/package.json +51 -0
  108. package/connectors/connect-crisp/scripts/release.ts +179 -0
  109. package/connectors/connect-crisp/src/api/client.ts +213 -0
  110. package/connectors/connect-crisp/src/api/example.ts +48 -0
  111. package/connectors/connect-crisp/src/api/index.ts +51 -0
  112. package/connectors/connect-crisp/src/cli/index.ts +254 -0
  113. package/connectors/connect-crisp/src/index.ts +103 -0
  114. package/connectors/connect-crisp/src/types/index.ts +237 -0
  115. package/connectors/connect-crisp/src/utils/auth.ts +274 -0
  116. package/connectors/connect-crisp/src/utils/bulk.ts +212 -0
  117. package/connectors/connect-crisp/src/utils/config.ts +326 -0
  118. package/connectors/connect-crisp/src/utils/output.ts +175 -0
  119. package/connectors/connect-crisp/src/utils/settings.ts +114 -0
  120. package/connectors/connect-crisp/src/utils/storage.ts +198 -0
  121. package/connectors/connect-crisp/tsconfig.json +16 -0
  122. package/connectors/connect-docusign/.env.example +11 -0
  123. package/connectors/connect-docusign/CLAUDE.md +128 -0
  124. package/connectors/connect-docusign/README.md +193 -0
  125. package/connectors/connect-docusign/package.json +52 -0
  126. package/connectors/connect-docusign/src/api/client.ts +133 -0
  127. package/connectors/connect-docusign/src/api/index.ts +178 -0
  128. package/connectors/connect-docusign/src/cli/index.ts +381 -0
  129. package/connectors/connect-docusign/src/index.ts +23 -0
  130. package/connectors/connect-docusign/src/types/index.ts +208 -0
  131. package/connectors/connect-docusign/src/utils/config.ts +125 -0
  132. package/connectors/connect-docusign/src/utils/output.ts +119 -0
  133. package/connectors/connect-docusign/tsconfig.json +16 -0
  134. package/connectors/connect-drift/.env.example +11 -0
  135. package/connectors/connect-drift/CLAUDE.md +272 -0
  136. package/connectors/connect-drift/README.md +193 -0
  137. package/connectors/connect-drift/package.json +51 -0
  138. package/connectors/connect-drift/scripts/release.ts +179 -0
  139. package/connectors/connect-drift/src/api/client.ts +213 -0
  140. package/connectors/connect-drift/src/api/example.ts +48 -0
  141. package/connectors/connect-drift/src/api/index.ts +51 -0
  142. package/connectors/connect-drift/src/cli/index.ts +254 -0
  143. package/connectors/connect-drift/src/index.ts +103 -0
  144. package/connectors/connect-drift/src/types/index.ts +237 -0
  145. package/connectors/connect-drift/src/utils/auth.ts +274 -0
  146. package/connectors/connect-drift/src/utils/bulk.ts +212 -0
  147. package/connectors/connect-drift/src/utils/config.ts +326 -0
  148. package/connectors/connect-drift/src/utils/output.ts +175 -0
  149. package/connectors/connect-drift/src/utils/settings.ts +114 -0
  150. package/connectors/connect-drift/src/utils/storage.ts +198 -0
  151. package/connectors/connect-drift/tsconfig.json +16 -0
  152. package/connectors/connect-freshdesk/.env.example +11 -0
  153. package/connectors/connect-freshdesk/CLAUDE.md +272 -0
  154. package/connectors/connect-freshdesk/README.md +193 -0
  155. package/connectors/connect-freshdesk/package.json +51 -0
  156. package/connectors/connect-freshdesk/scripts/release.ts +179 -0
  157. package/connectors/connect-freshdesk/src/api/client.ts +213 -0
  158. package/connectors/connect-freshdesk/src/api/example.ts +48 -0
  159. package/connectors/connect-freshdesk/src/api/index.ts +51 -0
  160. package/connectors/connect-freshdesk/src/cli/index.ts +254 -0
  161. package/connectors/connect-freshdesk/src/index.ts +103 -0
  162. package/connectors/connect-freshdesk/src/types/index.ts +237 -0
  163. package/connectors/connect-freshdesk/src/utils/auth.ts +274 -0
  164. package/connectors/connect-freshdesk/src/utils/bulk.ts +212 -0
  165. package/connectors/connect-freshdesk/src/utils/config.ts +326 -0
  166. package/connectors/connect-freshdesk/src/utils/output.ts +175 -0
  167. package/connectors/connect-freshdesk/src/utils/settings.ts +114 -0
  168. package/connectors/connect-freshdesk/src/utils/storage.ts +198 -0
  169. package/connectors/connect-freshdesk/tsconfig.json +16 -0
  170. package/connectors/connect-gumroad/.env.example +11 -0
  171. package/connectors/connect-gumroad/CLAUDE.md +272 -0
  172. package/connectors/connect-gumroad/README.md +193 -0
  173. package/connectors/connect-gumroad/package.json +51 -0
  174. package/connectors/connect-gumroad/scripts/release.ts +179 -0
  175. package/connectors/connect-gumroad/src/api/client.ts +213 -0
  176. package/connectors/connect-gumroad/src/api/example.ts +48 -0
  177. package/connectors/connect-gumroad/src/api/index.ts +51 -0
  178. package/connectors/connect-gumroad/src/cli/index.ts +254 -0
  179. package/connectors/connect-gumroad/src/index.ts +103 -0
  180. package/connectors/connect-gumroad/src/types/index.ts +237 -0
  181. package/connectors/connect-gumroad/src/utils/auth.ts +274 -0
  182. package/connectors/connect-gumroad/src/utils/bulk.ts +212 -0
  183. package/connectors/connect-gumroad/src/utils/config.ts +326 -0
  184. package/connectors/connect-gumroad/src/utils/output.ts +175 -0
  185. package/connectors/connect-gumroad/src/utils/settings.ts +114 -0
  186. package/connectors/connect-gumroad/src/utils/storage.ts +198 -0
  187. package/connectors/connect-gumroad/tsconfig.json +16 -0
  188. package/connectors/connect-hubspot/.env.example +11 -0
  189. package/connectors/connect-hubspot/CLAUDE.md +128 -0
  190. package/connectors/connect-hubspot/README.md +193 -0
  191. package/connectors/connect-hubspot/package.json +52 -0
  192. package/connectors/connect-hubspot/src/api/client.ts +136 -0
  193. package/connectors/connect-hubspot/src/api/index.ts +379 -0
  194. package/connectors/connect-hubspot/src/cli/index.ts +589 -0
  195. package/connectors/connect-hubspot/src/index.ts +21 -0
  196. package/connectors/connect-hubspot/src/types/index.ts +285 -0
  197. package/connectors/connect-hubspot/src/utils/config.ts +205 -0
  198. package/connectors/connect-hubspot/src/utils/output.ts +119 -0
  199. package/connectors/connect-hubspot/tsconfig.json +16 -0
  200. package/connectors/connect-intercom/.env.example +11 -0
  201. package/connectors/connect-intercom/CLAUDE.md +131 -0
  202. package/connectors/connect-intercom/README.md +193 -0
  203. package/connectors/connect-intercom/package.json +52 -0
  204. package/connectors/connect-intercom/src/api/client.ts +132 -0
  205. package/connectors/connect-intercom/src/api/index.ts +366 -0
  206. package/connectors/connect-intercom/src/cli/index.ts +831 -0
  207. package/connectors/connect-intercom/src/index.ts +21 -0
  208. package/connectors/connect-intercom/src/types/index.ts +650 -0
  209. package/connectors/connect-intercom/src/utils/config.ts +157 -0
  210. package/connectors/connect-intercom/src/utils/output.ts +119 -0
  211. package/connectors/connect-intercom/tsconfig.json +16 -0
  212. package/connectors/connect-jira/.env.example +11 -0
  213. package/connectors/connect-jira/CLAUDE.md +128 -0
  214. package/connectors/connect-jira/README.md +193 -0
  215. package/connectors/connect-jira/package.json +53 -0
  216. package/connectors/connect-jira/src/api/client.ts +131 -0
  217. package/connectors/connect-jira/src/api/index.ts +266 -0
  218. package/connectors/connect-jira/src/cli/index.ts +653 -0
  219. package/connectors/connect-jira/src/index.ts +23 -0
  220. package/connectors/connect-jira/src/types/index.ts +448 -0
  221. package/connectors/connect-jira/src/utils/config.ts +179 -0
  222. package/connectors/connect-jira/src/utils/output.ts +119 -0
  223. package/connectors/connect-jira/tsconfig.json +16 -0
  224. package/connectors/connect-lemonsqueezy/.env.example +11 -0
  225. package/connectors/connect-lemonsqueezy/CLAUDE.md +128 -0
  226. package/connectors/connect-lemonsqueezy/README.md +193 -0
  227. package/connectors/connect-lemonsqueezy/package.json +52 -0
  228. package/connectors/connect-lemonsqueezy/src/api/client.ts +133 -0
  229. package/connectors/connect-lemonsqueezy/src/api/index.ts +502 -0
  230. package/connectors/connect-lemonsqueezy/src/cli/index.ts +723 -0
  231. package/connectors/connect-lemonsqueezy/src/index.ts +21 -0
  232. package/connectors/connect-lemonsqueezy/src/types/index.ts +353 -0
  233. package/connectors/connect-lemonsqueezy/src/utils/config.ts +205 -0
  234. package/connectors/connect-lemonsqueezy/src/utils/output.ts +119 -0
  235. package/connectors/connect-lemonsqueezy/tsconfig.json +16 -0
  236. package/connectors/connect-linear/CLAUDE.md +88 -0
  237. package/connectors/connect-linear/README.md +201 -0
  238. package/connectors/connect-linear/package.json +45 -0
  239. package/connectors/connect-linear/src/api/client.ts +62 -0
  240. package/connectors/connect-linear/src/api/index.ts +46 -0
  241. package/connectors/connect-linear/src/api/issues.ts +247 -0
  242. package/connectors/connect-linear/src/api/projects.ts +179 -0
  243. package/connectors/connect-linear/src/api/teams.ts +125 -0
  244. package/connectors/connect-linear/src/api/users.ts +112 -0
  245. package/connectors/connect-linear/src/cli/index.ts +560 -0
  246. package/connectors/connect-linear/src/index.ts +27 -0
  247. package/connectors/connect-linear/src/types/index.ts +275 -0
  248. package/connectors/connect-linear/src/utils/config.ts +249 -0
  249. package/connectors/connect-linear/src/utils/output.ts +119 -0
  250. package/connectors/connect-linear/tsconfig.json +16 -0
  251. package/connectors/connect-linkedin/.env.example +11 -0
  252. package/connectors/connect-linkedin/CLAUDE.md +124 -0
  253. package/connectors/connect-linkedin/README.md +193 -0
  254. package/connectors/connect-linkedin/package.json +52 -0
  255. package/connectors/connect-linkedin/src/api/client.ts +132 -0
  256. package/connectors/connect-linkedin/src/api/index.ts +313 -0
  257. package/connectors/connect-linkedin/src/cli/index.ts +548 -0
  258. package/connectors/connect-linkedin/src/index.ts +21 -0
  259. package/connectors/connect-linkedin/src/types/index.ts +472 -0
  260. package/connectors/connect-linkedin/src/utils/config.ts +157 -0
  261. package/connectors/connect-linkedin/src/utils/output.ts +119 -0
  262. package/connectors/connect-linkedin/tsconfig.json +16 -0
  263. package/connectors/connect-mailchimp/.env.example +11 -0
  264. package/connectors/connect-mailchimp/CLAUDE.md +127 -0
  265. package/connectors/connect-mailchimp/README.md +193 -0
  266. package/connectors/connect-mailchimp/package.json +52 -0
  267. package/connectors/connect-mailchimp/src/api/client.ts +162 -0
  268. package/connectors/connect-mailchimp/src/api/index.ts +580 -0
  269. package/connectors/connect-mailchimp/src/cli/index.ts +822 -0
  270. package/connectors/connect-mailchimp/src/index.ts +23 -0
  271. package/connectors/connect-mailchimp/src/types/index.ts +585 -0
  272. package/connectors/connect-mailchimp/src/utils/config.ts +208 -0
  273. package/connectors/connect-mailchimp/src/utils/output.ts +119 -0
  274. package/connectors/connect-mailchimp/tsconfig.json +16 -0
  275. package/connectors/connect-mongodb/.env.example +11 -0
  276. package/connectors/connect-mongodb/CLAUDE.md +272 -0
  277. package/connectors/connect-mongodb/README.md +193 -0
  278. package/connectors/connect-mongodb/package.json +51 -0
  279. package/connectors/connect-mongodb/scripts/release.ts +179 -0
  280. package/connectors/connect-mongodb/src/api/client.ts +213 -0
  281. package/connectors/connect-mongodb/src/api/example.ts +48 -0
  282. package/connectors/connect-mongodb/src/api/index.ts +51 -0
  283. package/connectors/connect-mongodb/src/cli/index.ts +254 -0
  284. package/connectors/connect-mongodb/src/index.ts +103 -0
  285. package/connectors/connect-mongodb/src/types/index.ts +237 -0
  286. package/connectors/connect-mongodb/src/utils/auth.ts +274 -0
  287. package/connectors/connect-mongodb/src/utils/bulk.ts +212 -0
  288. package/connectors/connect-mongodb/src/utils/config.ts +326 -0
  289. package/connectors/connect-mongodb/src/utils/output.ts +175 -0
  290. package/connectors/connect-mongodb/src/utils/settings.ts +114 -0
  291. package/connectors/connect-mongodb/src/utils/storage.ts +198 -0
  292. package/connectors/connect-mongodb/tsconfig.json +16 -0
  293. package/connectors/connect-netlify/.env.example +11 -0
  294. package/connectors/connect-netlify/CLAUDE.md +170 -0
  295. package/connectors/connect-netlify/README.md +193 -0
  296. package/connectors/connect-netlify/package.json +53 -0
  297. package/connectors/connect-netlify/src/api/client.ts +132 -0
  298. package/connectors/connect-netlify/src/api/index.ts +533 -0
  299. package/connectors/connect-netlify/src/cli/index.ts +985 -0
  300. package/connectors/connect-netlify/src/index.ts +22 -0
  301. package/connectors/connect-netlify/src/types/index.ts +423 -0
  302. package/connectors/connect-netlify/src/utils/config.ts +171 -0
  303. package/connectors/connect-netlify/src/utils/output.ts +119 -0
  304. package/connectors/connect-netlify/tsconfig.json +16 -0
  305. package/connectors/connect-paypal/.env.example +11 -0
  306. package/connectors/connect-paypal/CLAUDE.md +128 -0
  307. package/connectors/connect-paypal/README.md +193 -0
  308. package/connectors/connect-paypal/package.json +51 -0
  309. package/connectors/connect-paypal/src/api/client.ts +182 -0
  310. package/connectors/connect-paypal/src/api/index.ts +235 -0
  311. package/connectors/connect-paypal/src/cli/index.ts +559 -0
  312. package/connectors/connect-paypal/src/index.ts +23 -0
  313. package/connectors/connect-paypal/src/types/index.ts +377 -0
  314. package/connectors/connect-paypal/src/utils/config.ts +125 -0
  315. package/connectors/connect-paypal/src/utils/output.ts +119 -0
  316. package/connectors/connect-paypal/tsconfig.json +16 -0
  317. package/connectors/connect-pinterest/.env.example +11 -0
  318. package/connectors/connect-pinterest/CLAUDE.md +115 -0
  319. package/connectors/connect-pinterest/README.md +193 -0
  320. package/connectors/connect-pinterest/package.json +52 -0
  321. package/connectors/connect-pinterest/src/api/client.ts +125 -0
  322. package/connectors/connect-pinterest/src/api/index.ts +203 -0
  323. package/connectors/connect-pinterest/src/cli/index.ts +653 -0
  324. package/connectors/connect-pinterest/src/index.ts +21 -0
  325. package/connectors/connect-pinterest/src/types/index.ts +268 -0
  326. package/connectors/connect-pinterest/src/utils/config.ts +157 -0
  327. package/connectors/connect-pinterest/src/utils/output.ts +119 -0
  328. package/connectors/connect-pinterest/tsconfig.json +16 -0
  329. package/connectors/connect-posthog/.env.example +11 -0
  330. package/connectors/connect-posthog/CLAUDE.md +272 -0
  331. package/connectors/connect-posthog/README.md +193 -0
  332. package/connectors/connect-posthog/package.json +51 -0
  333. package/connectors/connect-posthog/scripts/release.ts +179 -0
  334. package/connectors/connect-posthog/src/api/client.ts +213 -0
  335. package/connectors/connect-posthog/src/api/example.ts +48 -0
  336. package/connectors/connect-posthog/src/api/index.ts +51 -0
  337. package/connectors/connect-posthog/src/cli/index.ts +254 -0
  338. package/connectors/connect-posthog/src/index.ts +103 -0
  339. package/connectors/connect-posthog/src/types/index.ts +237 -0
  340. package/connectors/connect-posthog/src/utils/auth.ts +274 -0
  341. package/connectors/connect-posthog/src/utils/bulk.ts +212 -0
  342. package/connectors/connect-posthog/src/utils/config.ts +326 -0
  343. package/connectors/connect-posthog/src/utils/output.ts +175 -0
  344. package/connectors/connect-posthog/src/utils/settings.ts +114 -0
  345. package/connectors/connect-posthog/src/utils/storage.ts +198 -0
  346. package/connectors/connect-posthog/tsconfig.json +16 -0
  347. package/connectors/connect-salesforce/.env.example +11 -0
  348. package/connectors/connect-salesforce/CLAUDE.md +128 -0
  349. package/connectors/connect-salesforce/README.md +193 -0
  350. package/connectors/connect-salesforce/package.json +53 -0
  351. package/connectors/connect-salesforce/src/api/client.ts +150 -0
  352. package/connectors/connect-salesforce/src/api/index.ts +367 -0
  353. package/connectors/connect-salesforce/src/cli/index.ts +594 -0
  354. package/connectors/connect-salesforce/src/index.ts +21 -0
  355. package/connectors/connect-salesforce/src/types/index.ts +292 -0
  356. package/connectors/connect-salesforce/src/utils/config.ts +208 -0
  357. package/connectors/connect-salesforce/src/utils/output.ts +119 -0
  358. package/connectors/connect-salesforce/tsconfig.json +16 -0
  359. package/connectors/connect-segment/.env.example +11 -0
  360. package/connectors/connect-segment/CLAUDE.md +272 -0
  361. package/connectors/connect-segment/README.md +193 -0
  362. package/connectors/connect-segment/package.json +51 -0
  363. package/connectors/connect-segment/scripts/release.ts +179 -0
  364. package/connectors/connect-segment/src/api/client.ts +213 -0
  365. package/connectors/connect-segment/src/api/example.ts +48 -0
  366. package/connectors/connect-segment/src/api/index.ts +51 -0
  367. package/connectors/connect-segment/src/cli/index.ts +254 -0
  368. package/connectors/connect-segment/src/index.ts +103 -0
  369. package/connectors/connect-segment/src/types/index.ts +237 -0
  370. package/connectors/connect-segment/src/utils/auth.ts +274 -0
  371. package/connectors/connect-segment/src/utils/bulk.ts +212 -0
  372. package/connectors/connect-segment/src/utils/config.ts +326 -0
  373. package/connectors/connect-segment/src/utils/output.ts +175 -0
  374. package/connectors/connect-segment/src/utils/settings.ts +114 -0
  375. package/connectors/connect-segment/src/utils/storage.ts +198 -0
  376. package/connectors/connect-segment/tsconfig.json +16 -0
  377. package/connectors/connect-sendgrid/.env.example +11 -0
  378. package/connectors/connect-sendgrid/CLAUDE.md +125 -0
  379. package/connectors/connect-sendgrid/README.md +193 -0
  380. package/connectors/connect-sendgrid/package.json +53 -0
  381. package/connectors/connect-sendgrid/src/api/client.ts +137 -0
  382. package/connectors/connect-sendgrid/src/api/index.ts +588 -0
  383. package/connectors/connect-sendgrid/src/cli/index.ts +764 -0
  384. package/connectors/connect-sendgrid/src/index.ts +21 -0
  385. package/connectors/connect-sendgrid/src/types/index.ts +403 -0
  386. package/connectors/connect-sendgrid/src/utils/config.ts +197 -0
  387. package/connectors/connect-sendgrid/src/utils/output.ts +119 -0
  388. package/connectors/connect-sendgrid/tsconfig.json +16 -0
  389. package/connectors/connect-slack/.env.example +7 -0
  390. package/connectors/connect-slack/CLAUDE.md +69 -0
  391. package/connectors/connect-slack/README.md +150 -0
  392. package/connectors/connect-slack/package.json +44 -0
  393. package/connectors/connect-slack/src/api/channels.ts +112 -0
  394. package/connectors/connect-slack/src/api/client.ts +97 -0
  395. package/connectors/connect-slack/src/api/index.ts +42 -0
  396. package/connectors/connect-slack/src/api/messages.ts +127 -0
  397. package/connectors/connect-slack/src/api/users.ts +110 -0
  398. package/connectors/connect-slack/src/cli/index.ts +494 -0
  399. package/connectors/connect-slack/src/index.ts +21 -0
  400. package/connectors/connect-slack/src/types/index.ts +263 -0
  401. package/connectors/connect-slack/src/utils/config.ts +297 -0
  402. package/connectors/connect-slack/src/utils/output.ts +119 -0
  403. package/connectors/connect-slack/tsconfig.json +16 -0
  404. package/connectors/connect-supabase/.env.example +11 -0
  405. package/connectors/connect-supabase/CLAUDE.md +132 -0
  406. package/connectors/connect-supabase/README.md +193 -0
  407. package/connectors/connect-supabase/package.json +52 -0
  408. package/connectors/connect-supabase/src/api/client.ts +231 -0
  409. package/connectors/connect-supabase/src/api/index.ts +439 -0
  410. package/connectors/connect-supabase/src/cli/index.ts +691 -0
  411. package/connectors/connect-supabase/src/index.ts +24 -0
  412. package/connectors/connect-supabase/src/types/index.ts +215 -0
  413. package/connectors/connect-supabase/src/utils/config.ts +219 -0
  414. package/connectors/connect-supabase/tsconfig.json +16 -0
  415. package/connectors/connect-telegram/.env.example +2 -0
  416. package/connectors/connect-telegram/package.json +49 -0
  417. package/connectors/connect-todoist/.env.example +11 -0
  418. package/connectors/connect-todoist/CLAUDE.md +104 -0
  419. package/connectors/connect-todoist/README.md +193 -0
  420. package/connectors/connect-todoist/package.json +52 -0
  421. package/connectors/connect-todoist/src/api/client.ts +117 -0
  422. package/connectors/connect-todoist/src/api/index.ts +188 -0
  423. package/connectors/connect-todoist/src/cli/index.ts +990 -0
  424. package/connectors/connect-todoist/src/index.ts +21 -0
  425. package/connectors/connect-todoist/src/types/index.ts +240 -0
  426. package/connectors/connect-todoist/src/utils/config.ts +157 -0
  427. package/connectors/connect-todoist/src/utils/output.ts +119 -0
  428. package/connectors/connect-todoist/tsconfig.json +16 -0
  429. package/connectors/connect-trello/.env.example +11 -0
  430. package/connectors/connect-trello/CLAUDE.md +128 -0
  431. package/connectors/connect-trello/README.md +193 -0
  432. package/connectors/connect-trello/package.json +53 -0
  433. package/connectors/connect-trello/src/api/client.ts +128 -0
  434. package/connectors/connect-trello/src/api/index.ts +278 -0
  435. package/connectors/connect-trello/src/cli/index.ts +737 -0
  436. package/connectors/connect-trello/src/index.ts +21 -0
  437. package/connectors/connect-trello/src/types/index.ts +314 -0
  438. package/connectors/connect-trello/src/utils/config.ts +182 -0
  439. package/connectors/connect-trello/src/utils/output.ts +119 -0
  440. package/connectors/connect-trello/tsconfig.json +16 -0
  441. package/connectors/connect-vercel/.env.example +11 -0
  442. package/connectors/connect-vercel/CLAUDE.md +142 -0
  443. package/connectors/connect-vercel/README.md +193 -0
  444. package/connectors/connect-vercel/package.json +52 -0
  445. package/connectors/connect-vercel/src/api/client.ts +139 -0
  446. package/connectors/connect-vercel/src/api/index.ts +384 -0
  447. package/connectors/connect-vercel/src/cli/index.ts +740 -0
  448. package/connectors/connect-vercel/src/index.ts +24 -0
  449. package/connectors/connect-vercel/src/types/index.ts +350 -0
  450. package/connectors/connect-vercel/src/utils/config.ts +182 -0
  451. package/connectors/connect-vercel/src/utils/output.ts +119 -0
  452. package/connectors/connect-vercel/tsconfig.json +16 -0
  453. package/connectors/connect-whatsapp/.env.example +11 -0
  454. package/connectors/connect-whatsapp/CLAUDE.md +113 -0
  455. package/connectors/connect-whatsapp/README.md +193 -0
  456. package/connectors/connect-whatsapp/package.json +53 -0
  457. package/connectors/connect-whatsapp/src/api/client.ts +133 -0
  458. package/connectors/connect-whatsapp/src/api/index.ts +365 -0
  459. package/connectors/connect-whatsapp/src/cli/index.ts +686 -0
  460. package/connectors/connect-whatsapp/src/index.ts +25 -0
  461. package/connectors/connect-whatsapp/src/types/index.ts +502 -0
  462. package/connectors/connect-whatsapp/src/utils/config.ts +179 -0
  463. package/connectors/connect-whatsapp/src/utils/output.ts +119 -0
  464. package/connectors/connect-whatsapp/tsconfig.json +16 -0
  465. package/connectors/connect-zendesk/.env.example +10 -0
  466. package/connectors/connect-zendesk/.github/workflows/deploy.yml +51 -0
  467. package/connectors/connect-zendesk/CLAUDE.md +78 -0
  468. package/connectors/connect-zendesk/Makefile +129 -0
  469. package/connectors/connect-zendesk/README.md +295 -0
  470. package/connectors/connect-zendesk/SCAFFOLD.md +178 -0
  471. package/connectors/connect-zendesk/nginx-connector.conf +218 -0
  472. package/connectors/connect-zendesk/nginx.conf +61 -0
  473. package/connectors/connect-zendesk/package.json +71 -0
  474. package/connectors/connect-zendesk/scripts/init.sh +62 -0
  475. package/connectors/connect-zendesk/scripts/publish.ts +210 -0
  476. package/connectors/connect-zendesk/server/index.js +142 -0
  477. package/connectors/connect-zendesk/src/api/automations.ts +95 -0
  478. package/connectors/connect-zendesk/src/api/brands.ts +80 -0
  479. package/connectors/connect-zendesk/src/api/bulk.ts +838 -0
  480. package/connectors/connect-zendesk/src/api/client.test.ts +315 -0
  481. package/connectors/connect-zendesk/src/api/client.ts +173 -0
  482. package/connectors/connect-zendesk/src/api/example.ts +59 -0
  483. package/connectors/connect-zendesk/src/api/groups.ts +60 -0
  484. package/connectors/connect-zendesk/src/api/index.test.ts +111 -0
  485. package/connectors/connect-zendesk/src/api/index.ts +131 -0
  486. package/connectors/connect-zendesk/src/api/macros.ts +124 -0
  487. package/connectors/connect-zendesk/src/api/organizations.ts +85 -0
  488. package/connectors/connect-zendesk/src/api/slas.ts +80 -0
  489. package/connectors/connect-zendesk/src/api/ticket-fields.ts +98 -0
  490. package/connectors/connect-zendesk/src/api/tickets.test.ts +215 -0
  491. package/connectors/connect-zendesk/src/api/tickets.ts +103 -0
  492. package/connectors/connect-zendesk/src/api/triggers.test.ts +204 -0
  493. package/connectors/connect-zendesk/src/api/triggers.ts +125 -0
  494. package/connectors/connect-zendesk/src/api/users.test.ts +180 -0
  495. package/connectors/connect-zendesk/src/api/users.ts +108 -0
  496. package/connectors/connect-zendesk/src/api/views.test.ts +223 -0
  497. package/connectors/connect-zendesk/src/api/views.ts +145 -0
  498. package/connectors/connect-zendesk/src/api/webhooks.test.ts +208 -0
  499. package/connectors/connect-zendesk/src/api/webhooks.ts +118 -0
  500. package/connectors/connect-zendesk/src/cli/index.ts +1478 -0
  501. package/connectors/connect-zendesk/src/index.ts +36 -0
  502. package/connectors/connect-zendesk/src/server/index.ts +204 -0
  503. package/connectors/connect-zendesk/src/types/index.ts +910 -0
  504. package/connectors/connect-zendesk/src/utils/config.test.ts +193 -0
  505. package/connectors/connect-zendesk/src/utils/config.ts +526 -0
  506. package/connectors/connect-zendesk/src/utils/export.ts +338 -0
  507. package/connectors/connect-zendesk/src/utils/logger.ts +105 -0
  508. package/connectors/connect-zendesk/src/utils/output.test.ts +137 -0
  509. package/connectors/connect-zendesk/src/utils/output.ts +119 -0
  510. package/connectors/connect-zendesk/tsconfig.json +31 -0
  511. package/dist/index.js +245 -0
  512. package/package.json +1 -1
@@ -0,0 +1,88 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code when working with this repository.
4
+
5
+ ## Project Overview
6
+
7
+ connect-linear is a TypeScript CLI and library for Linear's GraphQL API. It provides issue management, project management, team operations, and user operations with multi-profile support for managing multiple Linear workspaces.
8
+
9
+ ## Build & Run Commands
10
+
11
+ ```bash
12
+ bun install # Install dependencies
13
+ bun run dev # Run CLI in development
14
+ bun run build # Build for distribution
15
+ bun run typecheck # Type check
16
+ ```
17
+
18
+ ## Code Style
19
+
20
+ - TypeScript with strict mode
21
+ - ESM modules (type: module)
22
+ - Async/await for all async operations
23
+ - Minimal dependencies: commander, chalk
24
+
25
+ ## Project Structure
26
+
27
+ ```
28
+ src/
29
+ ├── api/
30
+ │ ├── client.ts # GraphQL client with Bearer auth
31
+ │ ├── issues.ts # Issues API
32
+ │ ├── projects.ts # Projects API
33
+ │ ├── teams.ts # Teams API
34
+ │ ├── users.ts # Users API
35
+ │ └── index.ts # Main Linear class
36
+ ├── cli/
37
+ │ └── index.ts # CLI commands
38
+ ├── types/
39
+ │ └── index.ts # TypeScript types
40
+ ├── utils/
41
+ │ ├── config.ts # Multi-profile configuration
42
+ │ └── output.ts # CLI output formatting
43
+ └── index.ts # Library exports
44
+ ```
45
+
46
+ ## API Architecture
47
+
48
+ The Linear API uses GraphQL. The client architecture:
49
+
50
+ 1. `LinearClient` - Base GraphQL client that handles authentication and requests
51
+ 2. API modules (Issues, Projects, Teams, Users) - Use the client to make specific queries/mutations
52
+ 3. `Linear` class - Main entry point that combines all API modules
53
+
54
+ ## Environment Variables
55
+
56
+ | Variable | Description |
57
+ |----------|-------------|
58
+ | `LINEAR_API_KEY` | Linear API key |
59
+
60
+ ## Multi-Profile Configuration
61
+
62
+ Configuration stored in `~/.connect/connect-linear/`:
63
+
64
+ ```
65
+ ~/.connect/connect-linear/
66
+ ├── current_profile
67
+ └── profiles/
68
+ └── default/
69
+ └── config.json
70
+ ```
71
+
72
+ ## GraphQL Endpoint
73
+
74
+ - Base URL: https://api.linear.app/graphql
75
+ - Auth: Bearer token (API key sent directly as Authorization header)
76
+
77
+ ## Dependencies
78
+
79
+ - commander: CLI framework
80
+ - chalk: Terminal styling
81
+
82
+ ## Priority Values
83
+
84
+ - 0: No priority
85
+ - 1: Urgent
86
+ - 2: High
87
+ - 3: Normal
88
+ - 4: Low
@@ -0,0 +1,201 @@
1
+ # @hasna/connect-linear
2
+
3
+ Linear API connector with CLI and library support. Provides a TypeScript-first interface for interacting with the Linear GraphQL API.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @hasna/connect-linear
9
+ # or
10
+ bun add @hasna/connect-linear
11
+ ```
12
+
13
+ For CLI usage, install globally:
14
+
15
+ ```bash
16
+ npm install -g @hasna/connect-linear
17
+ ```
18
+
19
+ ## Configuration
20
+
21
+ ### Environment Variable
22
+
23
+ Set your Linear API key as an environment variable:
24
+
25
+ ```bash
26
+ export LINEAR_API_KEY="lin_api_xxxxx"
27
+ ```
28
+
29
+ ### CLI Configuration
30
+
31
+ Or use the CLI to save your API key:
32
+
33
+ ```bash
34
+ connect-linear config set-api-key lin_api_xxxxx
35
+ ```
36
+
37
+ Configuration is stored in `~/.connect/connect-linear/`.
38
+
39
+ ## CLI Usage
40
+
41
+ ### Authentication
42
+
43
+ ```bash
44
+ # Test authentication
45
+ connect-linear test
46
+
47
+ # Show current user
48
+ connect-linear whoami
49
+ ```
50
+
51
+ ### Issues
52
+
53
+ ```bash
54
+ # List issues
55
+ connect-linear issues list
56
+ connect-linear issues list --team <team-id>
57
+ connect-linear issues list --project <project-id>
58
+ connect-linear issues list --assignee <user-id>
59
+
60
+ # Get issue details
61
+ connect-linear issues get <issue-id>
62
+
63
+ # Create issue
64
+ connect-linear issues create --title "Bug fix" --team <team-id>
65
+ connect-linear issues create --title "Feature" --team <team-id> --description "Details here" --priority 2
66
+
67
+ # Update issue
68
+ connect-linear issues update <issue-id> --title "New title"
69
+ connect-linear issues update <issue-id> --state <state-id>
70
+ connect-linear issues update <issue-id> --assignee <user-id>
71
+
72
+ # Archive issue
73
+ connect-linear issues archive <issue-id>
74
+
75
+ # Search issues
76
+ connect-linear issues search "bug"
77
+ ```
78
+
79
+ ### Projects
80
+
81
+ ```bash
82
+ # List projects
83
+ connect-linear projects list
84
+
85
+ # Get project details
86
+ connect-linear projects get <project-id>
87
+ ```
88
+
89
+ ### Teams
90
+
91
+ ```bash
92
+ # List teams
93
+ connect-linear teams list
94
+
95
+ # Get team details
96
+ connect-linear teams get <team-id>
97
+
98
+ # List workflow states for a team
99
+ connect-linear teams states <team-id>
100
+ ```
101
+
102
+ ### Users
103
+
104
+ ```bash
105
+ # List users
106
+ connect-linear users list
107
+ connect-linear users list --all # Include inactive users
108
+
109
+ # Get user details
110
+ connect-linear users get <user-id>
111
+
112
+ # Current user
113
+ connect-linear users me
114
+ ```
115
+
116
+ ### Multi-Profile Support
117
+
118
+ ```bash
119
+ # Create a profile
120
+ connect-linear profile create work
121
+
122
+ # Switch profiles
123
+ connect-linear profile use work
124
+
125
+ # List profiles
126
+ connect-linear profile list
127
+
128
+ # Use profile for a single command
129
+ connect-linear --profile work issues list
130
+ ```
131
+
132
+ ### Output Formats
133
+
134
+ ```bash
135
+ # JSON output
136
+ connect-linear issues list --format json
137
+
138
+ # Table output
139
+ connect-linear issues list --format table
140
+
141
+ # Pretty output (default)
142
+ connect-linear issues list --format pretty
143
+ ```
144
+
145
+ ## Library Usage
146
+
147
+ ```typescript
148
+ import { Linear } from '@hasna/connect-linear';
149
+
150
+ const linear = new Linear({
151
+ apiKey: process.env.LINEAR_API_KEY!,
152
+ });
153
+
154
+ // List issues
155
+ const issues = await linear.issues.list({ teamId: 'team-id' });
156
+
157
+ // Create issue
158
+ const issue = await linear.issues.create({
159
+ title: 'New feature',
160
+ teamId: 'team-id',
161
+ description: 'Feature description',
162
+ priority: 2,
163
+ });
164
+
165
+ // Update issue
166
+ await linear.issues.update(issue.id, {
167
+ stateId: 'done-state-id',
168
+ });
169
+
170
+ // Get current user
171
+ const me = await linear.users.me();
172
+
173
+ // List teams
174
+ const teams = await linear.teams.list();
175
+
176
+ // Get workflow states
177
+ const states = await linear.teams.getWorkflowStates('team-id');
178
+
179
+ // Search issues
180
+ const results = await linear.issues.search('bug');
181
+ ```
182
+
183
+ ## Environment Variables
184
+
185
+ | Variable | Description |
186
+ |----------|-------------|
187
+ | `LINEAR_API_KEY` | Linear API key (required) |
188
+
189
+ ## Priority Values
190
+
191
+ | Value | Label |
192
+ |-------|-------|
193
+ | 0 | No priority |
194
+ | 1 | Urgent |
195
+ | 2 | High |
196
+ | 3 | Normal |
197
+ | 4 | Low |
198
+
199
+ ## License
200
+
201
+ Apache-2.0
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@hasna/connect-linear",
3
+ "version": "0.0.1",
4
+ "description": "Linear API connector with CLI and library support",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "connect-linear": "bin/index.js"
10
+ },
11
+ "scripts": {
12
+ "dev": "bun run ./src/cli/index.ts",
13
+ "build": "bun build ./src/index.ts --outdir ./dist --target bun && bun build ./src/cli/index.ts --outdir ./bin --target bun",
14
+ "typecheck": "tsc --noEmit",
15
+ "prepublishOnly": "bun run build"
16
+ },
17
+ "keywords": [
18
+ "linear",
19
+ "api",
20
+ "cli",
21
+ "connector",
22
+ "graphql"
23
+ ],
24
+ "author": "Hasna",
25
+ "license": "Apache-2.0",
26
+ "dependencies": {
27
+ "chalk": "^5.3.0",
28
+ "commander": "^12.1.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/bun": "latest",
32
+ "typescript": "^5.0.0"
33
+ },
34
+ "publishConfig": {
35
+ "registry": "https://registry.npmjs.org",
36
+ "access": "restricted"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "bin",
41
+ "src",
42
+ "README.md",
43
+ "CLAUDE.md"
44
+ ]
45
+ }
@@ -0,0 +1,62 @@
1
+ import type { LinearConfig, GraphQLResponse } from '../types';
2
+ import { LinearApiError } from '../types';
3
+
4
+ const DEFAULT_BASE_URL = 'https://api.linear.app/graphql';
5
+
6
+ export class LinearClient {
7
+ private readonly apiKey: string;
8
+ private readonly baseUrl: string;
9
+
10
+ constructor(config: LinearConfig) {
11
+ if (!config.apiKey) {
12
+ throw new Error('Linear API key is required');
13
+ }
14
+ this.apiKey = config.apiKey;
15
+ this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;
16
+ }
17
+
18
+ /**
19
+ * Execute a GraphQL query
20
+ */
21
+ async query<T>(query: string, variables?: Record<string, unknown>): Promise<T> {
22
+ const response = await fetch(this.baseUrl, {
23
+ method: 'POST',
24
+ headers: {
25
+ 'Content-Type': 'application/json',
26
+ 'Authorization': this.apiKey,
27
+ },
28
+ body: JSON.stringify({ query, variables }),
29
+ });
30
+
31
+ if (!response.ok) {
32
+ throw new LinearApiError(
33
+ `HTTP ${response.status}: ${response.statusText}`,
34
+ 'http_error',
35
+ response.status
36
+ );
37
+ }
38
+
39
+ const result = await response.json() as GraphQLResponse<T>;
40
+
41
+ if (result.errors && result.errors.length > 0) {
42
+ const error = result.errors[0];
43
+ throw new LinearApiError(
44
+ error.message,
45
+ error.extensions?.code as string || 'graphql_error'
46
+ );
47
+ }
48
+
49
+ if (!result.data) {
50
+ throw new LinearApiError('No data returned', 'no_data');
51
+ }
52
+
53
+ return result.data;
54
+ }
55
+
56
+ /**
57
+ * Execute a GraphQL mutation
58
+ */
59
+ async mutate<T>(mutation: string, variables?: Record<string, unknown>): Promise<T> {
60
+ return this.query<T>(mutation, variables);
61
+ }
62
+ }
@@ -0,0 +1,46 @@
1
+ import type { LinearConfig } from '../types';
2
+ import { LinearClient } from './client';
3
+ import { IssuesApi } from './issues';
4
+ import { ProjectsApi } from './projects';
5
+ import { TeamsApi } from './teams';
6
+ import { UsersApi } from './users';
7
+
8
+ export { LinearClient } from './client';
9
+ export { IssuesApi } from './issues';
10
+ export { ProjectsApi } from './projects';
11
+ export { TeamsApi } from './teams';
12
+ export { UsersApi } from './users';
13
+
14
+ /**
15
+ * Main Linear API class
16
+ */
17
+ export class Linear {
18
+ private readonly client: LinearClient;
19
+
20
+ public readonly issues: IssuesApi;
21
+ public readonly projects: ProjectsApi;
22
+ public readonly teams: TeamsApi;
23
+ public readonly users: UsersApi;
24
+
25
+ constructor(config: LinearConfig) {
26
+ this.client = new LinearClient(config);
27
+ this.issues = new IssuesApi(this.client);
28
+ this.projects = new ProjectsApi(this.client);
29
+ this.teams = new TeamsApi(this.client);
30
+ this.users = new UsersApi(this.client);
31
+ }
32
+
33
+ /**
34
+ * Test authentication and return current user
35
+ */
36
+ async test() {
37
+ return this.users.me();
38
+ }
39
+
40
+ /**
41
+ * Get the GraphQL client for custom queries
42
+ */
43
+ getClient(): LinearClient {
44
+ return this.client;
45
+ }
46
+ }
@@ -0,0 +1,247 @@
1
+ import type { LinearClient } from './client';
2
+ import type {
3
+ LinearIssue,
4
+ IssueListOptions,
5
+ CreateIssueInput,
6
+ UpdateIssueInput,
7
+ IssuesResponse,
8
+ IssueResponse,
9
+ CreateIssueResponse,
10
+ UpdateIssueResponse,
11
+ ArchiveIssueResponse,
12
+ IssueFilter,
13
+ } from '../types';
14
+
15
+ const ISSUE_FRAGMENT = `
16
+ fragment IssueFragment on Issue {
17
+ id
18
+ identifier
19
+ title
20
+ description
21
+ priority
22
+ priorityLabel
23
+ estimate
24
+ sortOrder
25
+ boardOrder
26
+ startedAt
27
+ completedAt
28
+ canceledAt
29
+ dueDate
30
+ createdAt
31
+ updatedAt
32
+ archivedAt
33
+ url
34
+ number
35
+ team {
36
+ id
37
+ name
38
+ key
39
+ }
40
+ state {
41
+ id
42
+ name
43
+ color
44
+ type
45
+ }
46
+ assignee {
47
+ id
48
+ name
49
+ displayName
50
+ email
51
+ }
52
+ creator {
53
+ id
54
+ name
55
+ displayName
56
+ }
57
+ labels {
58
+ nodes {
59
+ id
60
+ name
61
+ color
62
+ }
63
+ }
64
+ project {
65
+ id
66
+ name
67
+ }
68
+ }
69
+ `;
70
+
71
+ export class IssuesApi {
72
+ constructor(private readonly client: LinearClient) {}
73
+
74
+ /**
75
+ * List issues with optional filters
76
+ */
77
+ async list(options: IssueListOptions = {}): Promise<LinearIssue[]> {
78
+ const { first = 50, after, teamId, projectId, assigneeId, filter } = options;
79
+
80
+ // Build filter object
81
+ const filterObj: IssueFilter = filter || {};
82
+ if (teamId) {
83
+ filterObj.team = { id: { eq: teamId } };
84
+ }
85
+ if (projectId) {
86
+ filterObj.project = { id: { eq: projectId } };
87
+ }
88
+ if (assigneeId) {
89
+ filterObj.assignee = { id: { eq: assigneeId } };
90
+ }
91
+
92
+ const query = `
93
+ ${ISSUE_FRAGMENT}
94
+ query Issues($first: Int, $after: String, $filter: IssueFilter) {
95
+ issues(first: $first, after: $after, filter: $filter) {
96
+ nodes {
97
+ ...IssueFragment
98
+ }
99
+ pageInfo {
100
+ hasNextPage
101
+ endCursor
102
+ }
103
+ }
104
+ }
105
+ `;
106
+
107
+ const result = await this.client.query<IssuesResponse>(query, {
108
+ first,
109
+ after,
110
+ filter: Object.keys(filterObj).length > 0 ? filterObj : undefined,
111
+ });
112
+
113
+ return result.issues.nodes;
114
+ }
115
+
116
+ /**
117
+ * Get a single issue by ID
118
+ */
119
+ async get(id: string): Promise<LinearIssue> {
120
+ const query = `
121
+ ${ISSUE_FRAGMENT}
122
+ query Issue($id: String!) {
123
+ issue(id: $id) {
124
+ ...IssueFragment
125
+ }
126
+ }
127
+ `;
128
+
129
+ const result = await this.client.query<IssueResponse>(query, { id });
130
+ return result.issue;
131
+ }
132
+
133
+ /**
134
+ * Create a new issue
135
+ */
136
+ async create(input: CreateIssueInput): Promise<LinearIssue> {
137
+ const mutation = `
138
+ ${ISSUE_FRAGMENT}
139
+ mutation CreateIssue($input: IssueCreateInput!) {
140
+ issueCreate(input: $input) {
141
+ success
142
+ issue {
143
+ ...IssueFragment
144
+ }
145
+ }
146
+ }
147
+ `;
148
+
149
+ const result = await this.client.mutate<CreateIssueResponse>(mutation, {
150
+ input,
151
+ });
152
+
153
+ if (!result.issueCreate.success || !result.issueCreate.issue) {
154
+ throw new Error('Failed to create issue');
155
+ }
156
+
157
+ return result.issueCreate.issue;
158
+ }
159
+
160
+ /**
161
+ * Update an existing issue
162
+ */
163
+ async update(id: string, input: UpdateIssueInput): Promise<LinearIssue> {
164
+ const mutation = `
165
+ ${ISSUE_FRAGMENT}
166
+ mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {
167
+ issueUpdate(id: $id, input: $input) {
168
+ success
169
+ issue {
170
+ ...IssueFragment
171
+ }
172
+ }
173
+ }
174
+ `;
175
+
176
+ const result = await this.client.mutate<UpdateIssueResponse>(mutation, {
177
+ id,
178
+ input,
179
+ });
180
+
181
+ if (!result.issueUpdate.success || !result.issueUpdate.issue) {
182
+ throw new Error('Failed to update issue');
183
+ }
184
+
185
+ return result.issueUpdate.issue;
186
+ }
187
+
188
+ /**
189
+ * Archive an issue (soft delete)
190
+ */
191
+ async archive(id: string): Promise<boolean> {
192
+ const mutation = `
193
+ mutation ArchiveIssue($id: String!) {
194
+ issueArchive(id: $id) {
195
+ success
196
+ }
197
+ }
198
+ `;
199
+
200
+ const result = await this.client.mutate<ArchiveIssueResponse>(mutation, { id });
201
+ return result.issueArchive.success;
202
+ }
203
+
204
+ /**
205
+ * Change issue state by state ID
206
+ */
207
+ async changeState(id: string, stateId: string): Promise<LinearIssue> {
208
+ return this.update(id, { stateId });
209
+ }
210
+
211
+ /**
212
+ * Assign issue to a user
213
+ */
214
+ async assign(id: string, assigneeId: string): Promise<LinearIssue> {
215
+ return this.update(id, { assigneeId });
216
+ }
217
+
218
+ /**
219
+ * Add issue to a project
220
+ */
221
+ async addToProject(id: string, projectId: string): Promise<LinearIssue> {
222
+ return this.update(id, { projectId });
223
+ }
224
+
225
+ /**
226
+ * Search issues by query text
227
+ */
228
+ async search(query: string, first = 20): Promise<LinearIssue[]> {
229
+ const gqlQuery = `
230
+ ${ISSUE_FRAGMENT}
231
+ query SearchIssues($query: String!, $first: Int) {
232
+ issueSearch(query: $query, first: $first) {
233
+ nodes {
234
+ ...IssueFragment
235
+ }
236
+ }
237
+ }
238
+ `;
239
+
240
+ const result = await this.client.query<{ issueSearch: { nodes: LinearIssue[] } }>(
241
+ gqlQuery,
242
+ { query, first }
243
+ );
244
+
245
+ return result.issueSearch.nodes;
246
+ }
247
+ }