@hasna/connectors 0.4.0 → 0.4.2

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 (390) hide show
  1. package/bin/index.js +189 -2
  2. package/bin/mcp.js +176 -1
  3. package/bin/serve.js +175 -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-calendly/.env.example +11 -0
  27. package/connectors/connect-calendly/CLAUDE.md +272 -0
  28. package/connectors/connect-calendly/README.md +193 -0
  29. package/connectors/connect-calendly/package.json +51 -0
  30. package/connectors/connect-calendly/scripts/release.ts +179 -0
  31. package/connectors/connect-calendly/src/api/client.ts +213 -0
  32. package/connectors/connect-calendly/src/api/example.ts +48 -0
  33. package/connectors/connect-calendly/src/api/index.ts +51 -0
  34. package/connectors/connect-calendly/src/cli/index.ts +254 -0
  35. package/connectors/connect-calendly/src/index.ts +103 -0
  36. package/connectors/connect-calendly/src/types/index.ts +237 -0
  37. package/connectors/connect-calendly/src/utils/auth.ts +274 -0
  38. package/connectors/connect-calendly/src/utils/bulk.ts +212 -0
  39. package/connectors/connect-calendly/src/utils/config.ts +326 -0
  40. package/connectors/connect-calendly/src/utils/output.ts +175 -0
  41. package/connectors/connect-calendly/src/utils/settings.ts +114 -0
  42. package/connectors/connect-calendly/src/utils/storage.ts +198 -0
  43. package/connectors/connect-calendly/tsconfig.json +16 -0
  44. package/connectors/connect-convertkit/.env.example +11 -0
  45. package/connectors/connect-convertkit/CLAUDE.md +272 -0
  46. package/connectors/connect-convertkit/README.md +193 -0
  47. package/connectors/connect-convertkit/package.json +51 -0
  48. package/connectors/connect-convertkit/scripts/release.ts +179 -0
  49. package/connectors/connect-convertkit/src/api/client.ts +213 -0
  50. package/connectors/connect-convertkit/src/api/example.ts +48 -0
  51. package/connectors/connect-convertkit/src/api/index.ts +51 -0
  52. package/connectors/connect-convertkit/src/cli/index.ts +254 -0
  53. package/connectors/connect-convertkit/src/index.ts +103 -0
  54. package/connectors/connect-convertkit/src/types/index.ts +237 -0
  55. package/connectors/connect-convertkit/src/utils/auth.ts +274 -0
  56. package/connectors/connect-convertkit/src/utils/bulk.ts +212 -0
  57. package/connectors/connect-convertkit/src/utils/config.ts +326 -0
  58. package/connectors/connect-convertkit/src/utils/output.ts +175 -0
  59. package/connectors/connect-convertkit/src/utils/settings.ts +114 -0
  60. package/connectors/connect-convertkit/src/utils/storage.ts +198 -0
  61. package/connectors/connect-convertkit/tsconfig.json +16 -0
  62. package/connectors/connect-crisp/.env.example +11 -0
  63. package/connectors/connect-crisp/CLAUDE.md +272 -0
  64. package/connectors/connect-crisp/README.md +193 -0
  65. package/connectors/connect-crisp/package.json +51 -0
  66. package/connectors/connect-crisp/scripts/release.ts +179 -0
  67. package/connectors/connect-crisp/src/api/client.ts +213 -0
  68. package/connectors/connect-crisp/src/api/example.ts +48 -0
  69. package/connectors/connect-crisp/src/api/index.ts +51 -0
  70. package/connectors/connect-crisp/src/cli/index.ts +254 -0
  71. package/connectors/connect-crisp/src/index.ts +103 -0
  72. package/connectors/connect-crisp/src/types/index.ts +237 -0
  73. package/connectors/connect-crisp/src/utils/auth.ts +274 -0
  74. package/connectors/connect-crisp/src/utils/bulk.ts +212 -0
  75. package/connectors/connect-crisp/src/utils/config.ts +326 -0
  76. package/connectors/connect-crisp/src/utils/output.ts +175 -0
  77. package/connectors/connect-crisp/src/utils/settings.ts +114 -0
  78. package/connectors/connect-crisp/src/utils/storage.ts +198 -0
  79. package/connectors/connect-crisp/tsconfig.json +16 -0
  80. package/connectors/connect-docusign/.env.example +11 -0
  81. package/connectors/connect-docusign/CLAUDE.md +128 -0
  82. package/connectors/connect-docusign/README.md +193 -0
  83. package/connectors/connect-docusign/package.json +52 -0
  84. package/connectors/connect-docusign/src/api/client.ts +133 -0
  85. package/connectors/connect-docusign/src/api/index.ts +178 -0
  86. package/connectors/connect-docusign/src/cli/index.ts +381 -0
  87. package/connectors/connect-docusign/src/index.ts +23 -0
  88. package/connectors/connect-docusign/src/types/index.ts +208 -0
  89. package/connectors/connect-docusign/src/utils/config.ts +125 -0
  90. package/connectors/connect-docusign/src/utils/output.ts +119 -0
  91. package/connectors/connect-docusign/tsconfig.json +16 -0
  92. package/connectors/connect-drift/.env.example +11 -0
  93. package/connectors/connect-drift/CLAUDE.md +272 -0
  94. package/connectors/connect-drift/README.md +193 -0
  95. package/connectors/connect-drift/package.json +51 -0
  96. package/connectors/connect-drift/scripts/release.ts +179 -0
  97. package/connectors/connect-drift/src/api/client.ts +213 -0
  98. package/connectors/connect-drift/src/api/example.ts +48 -0
  99. package/connectors/connect-drift/src/api/index.ts +51 -0
  100. package/connectors/connect-drift/src/cli/index.ts +254 -0
  101. package/connectors/connect-drift/src/index.ts +103 -0
  102. package/connectors/connect-drift/src/types/index.ts +237 -0
  103. package/connectors/connect-drift/src/utils/auth.ts +274 -0
  104. package/connectors/connect-drift/src/utils/bulk.ts +212 -0
  105. package/connectors/connect-drift/src/utils/config.ts +326 -0
  106. package/connectors/connect-drift/src/utils/output.ts +175 -0
  107. package/connectors/connect-drift/src/utils/settings.ts +114 -0
  108. package/connectors/connect-drift/src/utils/storage.ts +198 -0
  109. package/connectors/connect-drift/tsconfig.json +16 -0
  110. package/connectors/connect-freshdesk/.env.example +11 -0
  111. package/connectors/connect-freshdesk/CLAUDE.md +272 -0
  112. package/connectors/connect-freshdesk/README.md +193 -0
  113. package/connectors/connect-freshdesk/package.json +51 -0
  114. package/connectors/connect-freshdesk/scripts/release.ts +179 -0
  115. package/connectors/connect-freshdesk/src/api/client.ts +213 -0
  116. package/connectors/connect-freshdesk/src/api/example.ts +48 -0
  117. package/connectors/connect-freshdesk/src/api/index.ts +51 -0
  118. package/connectors/connect-freshdesk/src/cli/index.ts +254 -0
  119. package/connectors/connect-freshdesk/src/index.ts +103 -0
  120. package/connectors/connect-freshdesk/src/types/index.ts +237 -0
  121. package/connectors/connect-freshdesk/src/utils/auth.ts +274 -0
  122. package/connectors/connect-freshdesk/src/utils/bulk.ts +212 -0
  123. package/connectors/connect-freshdesk/src/utils/config.ts +326 -0
  124. package/connectors/connect-freshdesk/src/utils/output.ts +175 -0
  125. package/connectors/connect-freshdesk/src/utils/settings.ts +114 -0
  126. package/connectors/connect-freshdesk/src/utils/storage.ts +198 -0
  127. package/connectors/connect-freshdesk/tsconfig.json +16 -0
  128. package/connectors/connect-gumroad/.env.example +11 -0
  129. package/connectors/connect-gumroad/CLAUDE.md +272 -0
  130. package/connectors/connect-gumroad/README.md +193 -0
  131. package/connectors/connect-gumroad/package.json +51 -0
  132. package/connectors/connect-gumroad/scripts/release.ts +179 -0
  133. package/connectors/connect-gumroad/src/api/client.ts +213 -0
  134. package/connectors/connect-gumroad/src/api/example.ts +48 -0
  135. package/connectors/connect-gumroad/src/api/index.ts +51 -0
  136. package/connectors/connect-gumroad/src/cli/index.ts +254 -0
  137. package/connectors/connect-gumroad/src/index.ts +103 -0
  138. package/connectors/connect-gumroad/src/types/index.ts +237 -0
  139. package/connectors/connect-gumroad/src/utils/auth.ts +274 -0
  140. package/connectors/connect-gumroad/src/utils/bulk.ts +212 -0
  141. package/connectors/connect-gumroad/src/utils/config.ts +326 -0
  142. package/connectors/connect-gumroad/src/utils/output.ts +175 -0
  143. package/connectors/connect-gumroad/src/utils/settings.ts +114 -0
  144. package/connectors/connect-gumroad/src/utils/storage.ts +198 -0
  145. package/connectors/connect-gumroad/tsconfig.json +16 -0
  146. package/connectors/connect-hubspot/.env.example +11 -0
  147. package/connectors/connect-hubspot/CLAUDE.md +128 -0
  148. package/connectors/connect-hubspot/README.md +193 -0
  149. package/connectors/connect-hubspot/package.json +52 -0
  150. package/connectors/connect-hubspot/src/api/client.ts +136 -0
  151. package/connectors/connect-hubspot/src/api/index.ts +379 -0
  152. package/connectors/connect-hubspot/src/cli/index.ts +589 -0
  153. package/connectors/connect-hubspot/src/index.ts +21 -0
  154. package/connectors/connect-hubspot/src/types/index.ts +285 -0
  155. package/connectors/connect-hubspot/src/utils/config.ts +205 -0
  156. package/connectors/connect-hubspot/src/utils/output.ts +119 -0
  157. package/connectors/connect-hubspot/tsconfig.json +16 -0
  158. package/connectors/connect-intercom/.env.example +11 -0
  159. package/connectors/connect-intercom/CLAUDE.md +131 -0
  160. package/connectors/connect-intercom/README.md +193 -0
  161. package/connectors/connect-intercom/package.json +52 -0
  162. package/connectors/connect-intercom/src/api/client.ts +132 -0
  163. package/connectors/connect-intercom/src/api/index.ts +366 -0
  164. package/connectors/connect-intercom/src/cli/index.ts +831 -0
  165. package/connectors/connect-intercom/src/index.ts +21 -0
  166. package/connectors/connect-intercom/src/types/index.ts +650 -0
  167. package/connectors/connect-intercom/src/utils/config.ts +157 -0
  168. package/connectors/connect-intercom/src/utils/output.ts +119 -0
  169. package/connectors/connect-intercom/tsconfig.json +16 -0
  170. package/connectors/connect-lemonsqueezy/.env.example +11 -0
  171. package/connectors/connect-lemonsqueezy/CLAUDE.md +128 -0
  172. package/connectors/connect-lemonsqueezy/README.md +193 -0
  173. package/connectors/connect-lemonsqueezy/package.json +52 -0
  174. package/connectors/connect-lemonsqueezy/src/api/client.ts +133 -0
  175. package/connectors/connect-lemonsqueezy/src/api/index.ts +502 -0
  176. package/connectors/connect-lemonsqueezy/src/cli/index.ts +723 -0
  177. package/connectors/connect-lemonsqueezy/src/index.ts +21 -0
  178. package/connectors/connect-lemonsqueezy/src/types/index.ts +353 -0
  179. package/connectors/connect-lemonsqueezy/src/utils/config.ts +205 -0
  180. package/connectors/connect-lemonsqueezy/src/utils/output.ts +119 -0
  181. package/connectors/connect-lemonsqueezy/tsconfig.json +16 -0
  182. package/connectors/connect-linkedin/.env.example +11 -0
  183. package/connectors/connect-linkedin/CLAUDE.md +124 -0
  184. package/connectors/connect-linkedin/README.md +193 -0
  185. package/connectors/connect-linkedin/package.json +52 -0
  186. package/connectors/connect-linkedin/src/api/client.ts +132 -0
  187. package/connectors/connect-linkedin/src/api/index.ts +313 -0
  188. package/connectors/connect-linkedin/src/cli/index.ts +548 -0
  189. package/connectors/connect-linkedin/src/index.ts +21 -0
  190. package/connectors/connect-linkedin/src/types/index.ts +472 -0
  191. package/connectors/connect-linkedin/src/utils/config.ts +157 -0
  192. package/connectors/connect-linkedin/src/utils/output.ts +119 -0
  193. package/connectors/connect-linkedin/tsconfig.json +16 -0
  194. package/connectors/connect-mailchimp/.env.example +11 -0
  195. package/connectors/connect-mailchimp/CLAUDE.md +127 -0
  196. package/connectors/connect-mailchimp/README.md +193 -0
  197. package/connectors/connect-mailchimp/package.json +52 -0
  198. package/connectors/connect-mailchimp/src/api/client.ts +162 -0
  199. package/connectors/connect-mailchimp/src/api/index.ts +580 -0
  200. package/connectors/connect-mailchimp/src/cli/index.ts +822 -0
  201. package/connectors/connect-mailchimp/src/index.ts +23 -0
  202. package/connectors/connect-mailchimp/src/types/index.ts +585 -0
  203. package/connectors/connect-mailchimp/src/utils/config.ts +208 -0
  204. package/connectors/connect-mailchimp/src/utils/output.ts +119 -0
  205. package/connectors/connect-mailchimp/tsconfig.json +16 -0
  206. package/connectors/connect-mongodb/.env.example +11 -0
  207. package/connectors/connect-mongodb/CLAUDE.md +272 -0
  208. package/connectors/connect-mongodb/README.md +193 -0
  209. package/connectors/connect-mongodb/package.json +51 -0
  210. package/connectors/connect-mongodb/scripts/release.ts +179 -0
  211. package/connectors/connect-mongodb/src/api/client.ts +213 -0
  212. package/connectors/connect-mongodb/src/api/example.ts +48 -0
  213. package/connectors/connect-mongodb/src/api/index.ts +51 -0
  214. package/connectors/connect-mongodb/src/cli/index.ts +254 -0
  215. package/connectors/connect-mongodb/src/index.ts +103 -0
  216. package/connectors/connect-mongodb/src/types/index.ts +237 -0
  217. package/connectors/connect-mongodb/src/utils/auth.ts +274 -0
  218. package/connectors/connect-mongodb/src/utils/bulk.ts +212 -0
  219. package/connectors/connect-mongodb/src/utils/config.ts +326 -0
  220. package/connectors/connect-mongodb/src/utils/output.ts +175 -0
  221. package/connectors/connect-mongodb/src/utils/settings.ts +114 -0
  222. package/connectors/connect-mongodb/src/utils/storage.ts +198 -0
  223. package/connectors/connect-mongodb/tsconfig.json +16 -0
  224. package/connectors/connect-netlify/.env.example +11 -0
  225. package/connectors/connect-netlify/CLAUDE.md +170 -0
  226. package/connectors/connect-netlify/README.md +193 -0
  227. package/connectors/connect-netlify/package.json +53 -0
  228. package/connectors/connect-netlify/src/api/client.ts +132 -0
  229. package/connectors/connect-netlify/src/api/index.ts +533 -0
  230. package/connectors/connect-netlify/src/cli/index.ts +985 -0
  231. package/connectors/connect-netlify/src/index.ts +22 -0
  232. package/connectors/connect-netlify/src/types/index.ts +423 -0
  233. package/connectors/connect-netlify/src/utils/config.ts +171 -0
  234. package/connectors/connect-netlify/src/utils/output.ts +119 -0
  235. package/connectors/connect-netlify/tsconfig.json +16 -0
  236. package/connectors/connect-paypal/.env.example +11 -0
  237. package/connectors/connect-paypal/CLAUDE.md +128 -0
  238. package/connectors/connect-paypal/README.md +193 -0
  239. package/connectors/connect-paypal/package.json +51 -0
  240. package/connectors/connect-paypal/src/api/client.ts +182 -0
  241. package/connectors/connect-paypal/src/api/index.ts +235 -0
  242. package/connectors/connect-paypal/src/cli/index.ts +559 -0
  243. package/connectors/connect-paypal/src/index.ts +23 -0
  244. package/connectors/connect-paypal/src/types/index.ts +377 -0
  245. package/connectors/connect-paypal/src/utils/config.ts +125 -0
  246. package/connectors/connect-paypal/src/utils/output.ts +119 -0
  247. package/connectors/connect-paypal/tsconfig.json +16 -0
  248. package/connectors/connect-pinterest/.env.example +11 -0
  249. package/connectors/connect-pinterest/CLAUDE.md +115 -0
  250. package/connectors/connect-pinterest/README.md +193 -0
  251. package/connectors/connect-pinterest/package.json +52 -0
  252. package/connectors/connect-pinterest/src/api/client.ts +125 -0
  253. package/connectors/connect-pinterest/src/api/index.ts +203 -0
  254. package/connectors/connect-pinterest/src/cli/index.ts +653 -0
  255. package/connectors/connect-pinterest/src/index.ts +21 -0
  256. package/connectors/connect-pinterest/src/types/index.ts +268 -0
  257. package/connectors/connect-pinterest/src/utils/config.ts +157 -0
  258. package/connectors/connect-pinterest/src/utils/output.ts +119 -0
  259. package/connectors/connect-pinterest/tsconfig.json +16 -0
  260. package/connectors/connect-posthog/.env.example +11 -0
  261. package/connectors/connect-posthog/CLAUDE.md +272 -0
  262. package/connectors/connect-posthog/README.md +193 -0
  263. package/connectors/connect-posthog/package.json +51 -0
  264. package/connectors/connect-posthog/scripts/release.ts +179 -0
  265. package/connectors/connect-posthog/src/api/client.ts +213 -0
  266. package/connectors/connect-posthog/src/api/example.ts +48 -0
  267. package/connectors/connect-posthog/src/api/index.ts +51 -0
  268. package/connectors/connect-posthog/src/cli/index.ts +254 -0
  269. package/connectors/connect-posthog/src/index.ts +103 -0
  270. package/connectors/connect-posthog/src/types/index.ts +237 -0
  271. package/connectors/connect-posthog/src/utils/auth.ts +274 -0
  272. package/connectors/connect-posthog/src/utils/bulk.ts +212 -0
  273. package/connectors/connect-posthog/src/utils/config.ts +326 -0
  274. package/connectors/connect-posthog/src/utils/output.ts +175 -0
  275. package/connectors/connect-posthog/src/utils/settings.ts +114 -0
  276. package/connectors/connect-posthog/src/utils/storage.ts +198 -0
  277. package/connectors/connect-posthog/tsconfig.json +16 -0
  278. package/connectors/connect-salesforce/.env.example +11 -0
  279. package/connectors/connect-salesforce/CLAUDE.md +128 -0
  280. package/connectors/connect-salesforce/README.md +193 -0
  281. package/connectors/connect-salesforce/package.json +53 -0
  282. package/connectors/connect-salesforce/src/api/client.ts +150 -0
  283. package/connectors/connect-salesforce/src/api/index.ts +367 -0
  284. package/connectors/connect-salesforce/src/cli/index.ts +594 -0
  285. package/connectors/connect-salesforce/src/index.ts +21 -0
  286. package/connectors/connect-salesforce/src/types/index.ts +292 -0
  287. package/connectors/connect-salesforce/src/utils/config.ts +208 -0
  288. package/connectors/connect-salesforce/src/utils/output.ts +119 -0
  289. package/connectors/connect-salesforce/tsconfig.json +16 -0
  290. package/connectors/connect-segment/.env.example +11 -0
  291. package/connectors/connect-segment/CLAUDE.md +272 -0
  292. package/connectors/connect-segment/README.md +193 -0
  293. package/connectors/connect-segment/package.json +51 -0
  294. package/connectors/connect-segment/scripts/release.ts +179 -0
  295. package/connectors/connect-segment/src/api/client.ts +213 -0
  296. package/connectors/connect-segment/src/api/example.ts +48 -0
  297. package/connectors/connect-segment/src/api/index.ts +51 -0
  298. package/connectors/connect-segment/src/cli/index.ts +254 -0
  299. package/connectors/connect-segment/src/index.ts +103 -0
  300. package/connectors/connect-segment/src/types/index.ts +237 -0
  301. package/connectors/connect-segment/src/utils/auth.ts +274 -0
  302. package/connectors/connect-segment/src/utils/bulk.ts +212 -0
  303. package/connectors/connect-segment/src/utils/config.ts +326 -0
  304. package/connectors/connect-segment/src/utils/output.ts +175 -0
  305. package/connectors/connect-segment/src/utils/settings.ts +114 -0
  306. package/connectors/connect-segment/src/utils/storage.ts +198 -0
  307. package/connectors/connect-segment/tsconfig.json +16 -0
  308. package/connectors/connect-sendgrid/.env.example +11 -0
  309. package/connectors/connect-sendgrid/CLAUDE.md +125 -0
  310. package/connectors/connect-sendgrid/README.md +193 -0
  311. package/connectors/connect-sendgrid/package.json +53 -0
  312. package/connectors/connect-sendgrid/src/api/client.ts +137 -0
  313. package/connectors/connect-sendgrid/src/api/index.ts +588 -0
  314. package/connectors/connect-sendgrid/src/cli/index.ts +764 -0
  315. package/connectors/connect-sendgrid/src/index.ts +21 -0
  316. package/connectors/connect-sendgrid/src/types/index.ts +403 -0
  317. package/connectors/connect-sendgrid/src/utils/config.ts +197 -0
  318. package/connectors/connect-sendgrid/src/utils/output.ts +119 -0
  319. package/connectors/connect-sendgrid/tsconfig.json +16 -0
  320. package/connectors/connect-supabase/.env.example +11 -0
  321. package/connectors/connect-supabase/CLAUDE.md +132 -0
  322. package/connectors/connect-supabase/README.md +193 -0
  323. package/connectors/connect-supabase/package.json +52 -0
  324. package/connectors/connect-supabase/src/api/client.ts +231 -0
  325. package/connectors/connect-supabase/src/api/index.ts +439 -0
  326. package/connectors/connect-supabase/src/cli/index.ts +691 -0
  327. package/connectors/connect-supabase/src/index.ts +24 -0
  328. package/connectors/connect-supabase/src/types/index.ts +215 -0
  329. package/connectors/connect-supabase/src/utils/config.ts +219 -0
  330. package/connectors/connect-supabase/tsconfig.json +16 -0
  331. package/connectors/connect-vercel/.env.example +11 -0
  332. package/connectors/connect-vercel/CLAUDE.md +142 -0
  333. package/connectors/connect-vercel/README.md +193 -0
  334. package/connectors/connect-vercel/package.json +52 -0
  335. package/connectors/connect-vercel/src/api/client.ts +139 -0
  336. package/connectors/connect-vercel/src/api/index.ts +384 -0
  337. package/connectors/connect-vercel/src/cli/index.ts +740 -0
  338. package/connectors/connect-vercel/src/index.ts +24 -0
  339. package/connectors/connect-vercel/src/types/index.ts +350 -0
  340. package/connectors/connect-vercel/src/utils/config.ts +182 -0
  341. package/connectors/connect-vercel/src/utils/output.ts +119 -0
  342. package/connectors/connect-vercel/tsconfig.json +16 -0
  343. package/connectors/connect-zendesk/.env.example +10 -0
  344. package/connectors/connect-zendesk/.github/workflows/deploy.yml +51 -0
  345. package/connectors/connect-zendesk/CLAUDE.md +78 -0
  346. package/connectors/connect-zendesk/Makefile +129 -0
  347. package/connectors/connect-zendesk/README.md +295 -0
  348. package/connectors/connect-zendesk/SCAFFOLD.md +178 -0
  349. package/connectors/connect-zendesk/nginx-connector.conf +218 -0
  350. package/connectors/connect-zendesk/nginx.conf +61 -0
  351. package/connectors/connect-zendesk/package.json +71 -0
  352. package/connectors/connect-zendesk/scripts/init.sh +62 -0
  353. package/connectors/connect-zendesk/scripts/publish.ts +210 -0
  354. package/connectors/connect-zendesk/server/index.js +142 -0
  355. package/connectors/connect-zendesk/src/api/automations.ts +95 -0
  356. package/connectors/connect-zendesk/src/api/brands.ts +80 -0
  357. package/connectors/connect-zendesk/src/api/bulk.ts +838 -0
  358. package/connectors/connect-zendesk/src/api/client.test.ts +315 -0
  359. package/connectors/connect-zendesk/src/api/client.ts +173 -0
  360. package/connectors/connect-zendesk/src/api/example.ts +59 -0
  361. package/connectors/connect-zendesk/src/api/groups.ts +60 -0
  362. package/connectors/connect-zendesk/src/api/index.test.ts +111 -0
  363. package/connectors/connect-zendesk/src/api/index.ts +131 -0
  364. package/connectors/connect-zendesk/src/api/macros.ts +124 -0
  365. package/connectors/connect-zendesk/src/api/organizations.ts +85 -0
  366. package/connectors/connect-zendesk/src/api/slas.ts +80 -0
  367. package/connectors/connect-zendesk/src/api/ticket-fields.ts +98 -0
  368. package/connectors/connect-zendesk/src/api/tickets.test.ts +215 -0
  369. package/connectors/connect-zendesk/src/api/tickets.ts +103 -0
  370. package/connectors/connect-zendesk/src/api/triggers.test.ts +204 -0
  371. package/connectors/connect-zendesk/src/api/triggers.ts +125 -0
  372. package/connectors/connect-zendesk/src/api/users.test.ts +180 -0
  373. package/connectors/connect-zendesk/src/api/users.ts +108 -0
  374. package/connectors/connect-zendesk/src/api/views.test.ts +223 -0
  375. package/connectors/connect-zendesk/src/api/views.ts +145 -0
  376. package/connectors/connect-zendesk/src/api/webhooks.test.ts +208 -0
  377. package/connectors/connect-zendesk/src/api/webhooks.ts +118 -0
  378. package/connectors/connect-zendesk/src/cli/index.ts +1478 -0
  379. package/connectors/connect-zendesk/src/index.ts +36 -0
  380. package/connectors/connect-zendesk/src/server/index.ts +204 -0
  381. package/connectors/connect-zendesk/src/types/index.ts +910 -0
  382. package/connectors/connect-zendesk/src/utils/config.test.ts +193 -0
  383. package/connectors/connect-zendesk/src/utils/config.ts +526 -0
  384. package/connectors/connect-zendesk/src/utils/export.ts +338 -0
  385. package/connectors/connect-zendesk/src/utils/logger.ts +105 -0
  386. package/connectors/connect-zendesk/src/utils/output.test.ts +137 -0
  387. package/connectors/connect-zendesk/src/utils/output.ts +119 -0
  388. package/connectors/connect-zendesk/tsconfig.json +31 -0
  389. package/dist/index.js +175 -0
  390. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Auto-versioning publish script
4
+ * - Fetches current npm version
5
+ * - Auto-bumps patch version if local version <= npm version
6
+ * - Creates git tag
7
+ * - Publishes to npm
8
+ */
9
+
10
+ import { $ } from 'bun';
11
+ import { readFileSync, writeFileSync } from 'fs';
12
+ import { join } from 'path';
13
+
14
+ interface PackageJson {
15
+ name: string;
16
+ version: string;
17
+ [key: string]: unknown;
18
+ }
19
+
20
+ type BumpType = 'patch' | 'minor' | 'major';
21
+
22
+ function parseVersion(version: string): { major: number; minor: number; patch: number } {
23
+ const [major, minor, patch] = version.split('.').map(Number);
24
+ return { major, minor, patch };
25
+ }
26
+
27
+ function bumpVersion(version: string, type: BumpType = 'patch'): string {
28
+ const { major, minor, patch } = parseVersion(version);
29
+
30
+ switch (type) {
31
+ case 'major':
32
+ return `${major + 1}.0.0`;
33
+ case 'minor':
34
+ return `${major}.${minor + 1}.0`;
35
+ case 'patch':
36
+ default:
37
+ return `${major}.${minor}.${patch + 1}`;
38
+ }
39
+ }
40
+
41
+ function compareVersions(a: string, b: string): number {
42
+ const vA = parseVersion(a);
43
+ const vB = parseVersion(b);
44
+
45
+ if (vA.major !== vB.major) return vA.major - vB.major;
46
+ if (vA.minor !== vB.minor) return vA.minor - vB.minor;
47
+ return vA.patch - vB.patch;
48
+ }
49
+
50
+ async function getNpmVersion(packageName: string): Promise<string | null> {
51
+ try {
52
+ const result = await $`npm view ${packageName} version 2>/dev/null`.text();
53
+ return result.trim() || null;
54
+ } catch {
55
+ return null;
56
+ }
57
+ }
58
+
59
+ async function hasUncommittedChanges(): Promise<boolean> {
60
+ try {
61
+ const result = await $`git status --porcelain`.text();
62
+ return result.trim().length > 0;
63
+ } catch {
64
+ return false;
65
+ }
66
+ }
67
+
68
+ async function isGitRepo(): Promise<boolean> {
69
+ try {
70
+ await $`git rev-parse --git-dir 2>/dev/null`.text();
71
+ return true;
72
+ } catch {
73
+ return false;
74
+ }
75
+ }
76
+
77
+ async function createGitTag(version: string, packageName: string): Promise<boolean> {
78
+ const tagName = `${packageName}@${version}`;
79
+
80
+ try {
81
+ // Check if tag already exists
82
+ const existingTags = await $`git tag -l ${tagName}`.text();
83
+ if (existingTags.trim()) {
84
+ console.log(`⚠️ Tag ${tagName} already exists, skipping tag creation`);
85
+ return true;
86
+ }
87
+
88
+ await $`git tag -a ${tagName} -m "Release ${tagName}"`;
89
+ console.log(`✅ Created git tag: ${tagName}`);
90
+ return true;
91
+ } catch (error) {
92
+ console.error(`❌ Failed to create git tag: ${error}`);
93
+ return false;
94
+ }
95
+ }
96
+
97
+ async function commitVersionBump(version: string, packageName: string): Promise<boolean> {
98
+ try {
99
+ await $`git add package.json`;
100
+ await $`git commit -m "chore(${packageName}): bump version to ${version}"`;
101
+ console.log(`✅ Committed version bump`);
102
+ return true;
103
+ } catch (error) {
104
+ console.error(`❌ Failed to commit: ${error}`);
105
+ return false;
106
+ }
107
+ }
108
+
109
+ async function main() {
110
+ const args = process.argv.slice(2);
111
+ const bumpType = (args.find(a => ['patch', 'minor', 'major'].includes(a)) || 'patch') as BumpType;
112
+ const skipGit = args.includes('--skip-git');
113
+ const dryRun = args.includes('--dry-run');
114
+ const force = args.includes('--force');
115
+
116
+ // Read package.json
117
+ const pkgPath = join(process.cwd(), 'package.json');
118
+ const pkg: PackageJson = JSON.parse(readFileSync(pkgPath, 'utf-8'));
119
+
120
+ console.log(`\n📦 Publishing ${pkg.name}\n`);
121
+
122
+ // Get current npm version
123
+ const npmVersion = await getNpmVersion(pkg.name);
124
+ let newVersion = pkg.version;
125
+
126
+ if (npmVersion) {
127
+ console.log(`📌 Current npm version: ${npmVersion}`);
128
+ console.log(`📌 Local version: ${pkg.version}`);
129
+
130
+ // Check if we need to bump
131
+ if (compareVersions(pkg.version, npmVersion) <= 0) {
132
+ newVersion = bumpVersion(npmVersion, bumpType);
133
+ console.log(`🔄 Auto-bumping to: ${newVersion}`);
134
+ } else {
135
+ console.log(`✅ Local version is ahead, using: ${pkg.version}`);
136
+ }
137
+ } else {
138
+ console.log(`📌 Package not yet published to npm`);
139
+ console.log(`📌 Using local version: ${pkg.version}`);
140
+ }
141
+
142
+ // Update package.json if version changed
143
+ if (newVersion !== pkg.version) {
144
+ if (dryRun) {
145
+ console.log(`\n🧪 DRY RUN: Would update version to ${newVersion}`);
146
+ } else {
147
+ pkg.version = newVersion;
148
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
149
+ console.log(`✅ Updated package.json to version ${newVersion}`);
150
+ }
151
+ }
152
+
153
+ // Git operations
154
+ const isGit = await isGitRepo();
155
+
156
+ if (isGit && !skipGit) {
157
+ const hasChanges = await hasUncommittedChanges();
158
+
159
+ if (hasChanges && newVersion !== pkg.version) {
160
+ if (dryRun) {
161
+ console.log(`🧪 DRY RUN: Would commit version bump`);
162
+ } else {
163
+ await commitVersionBump(newVersion, pkg.name.replace('@hasna/', ''));
164
+ }
165
+ }
166
+
167
+ if (dryRun) {
168
+ console.log(`🧪 DRY RUN: Would create tag ${pkg.name}@${newVersion}`);
169
+ } else {
170
+ await createGitTag(newVersion, pkg.name.replace('@hasna/', ''));
171
+ }
172
+ }
173
+
174
+ // Build
175
+ console.log(`\n🔨 Building...`);
176
+ if (!dryRun) {
177
+ await $`bun run build`;
178
+ } else {
179
+ console.log(`🧪 DRY RUN: Would run build`);
180
+ }
181
+
182
+ // Publish
183
+ console.log(`\n🚀 Publishing to npm...`);
184
+ if (dryRun) {
185
+ console.log(`🧪 DRY RUN: Would publish ${pkg.name}@${newVersion}`);
186
+ } else {
187
+ try {
188
+ await $`npm publish`;
189
+ console.log(`\n✅ Successfully published ${pkg.name}@${newVersion}`);
190
+ } catch (error) {
191
+ console.error(`\n❌ Publish failed: ${error}`);
192
+ process.exit(1);
193
+ }
194
+ }
195
+
196
+ // Push tags
197
+ if (isGit && !skipGit && !dryRun) {
198
+ console.log(`\n📤 Pushing tags to remote...`);
199
+ try {
200
+ await $`git push --tags`;
201
+ console.log(`✅ Pushed tags to remote`);
202
+ } catch {
203
+ console.log(`⚠️ Could not push tags (no remote or not configured)`);
204
+ }
205
+ }
206
+
207
+ console.log(`\n✨ Done!\n`);
208
+ }
209
+
210
+ main().catch(console.error);
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+
4
+ // src/server/index.ts
5
+ var PORT = parseInt(process.env.PORT || "3000");
6
+ var HOST = process.env.HOST || "0.0.0.0";
7
+ var API_KEY = process.env.CONNECTOR_API_KEY || "";
8
+ if (!API_KEY) {
9
+ console.error("WARNING: CONNECTOR_API_KEY not set - server will reject all authenticated requests");
10
+ }
11
+ var startTime = Date.now();
12
+ function getServerInfo() {
13
+ return {
14
+ name: "connect-zendesk",
15
+ version: "1.0.0",
16
+ uptime: Math.floor((Date.now() - startTime) / 1000),
17
+ timestamp: new Date().toISOString(),
18
+ environment: "development"
19
+ };
20
+ }
21
+ function jsonResponse(data, status = 200) {
22
+ return new Response(JSON.stringify(data, null, 2), {
23
+ status,
24
+ headers: {
25
+ "Content-Type": "application/json",
26
+ "Access-Control-Allow-Origin": "*",
27
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
28
+ "Access-Control-Allow-Headers": "Content-Type, Authorization, X-API-Key"
29
+ }
30
+ });
31
+ }
32
+ function handleCORS() {
33
+ return new Response(null, {
34
+ status: 204,
35
+ headers: {
36
+ "Access-Control-Allow-Origin": "*",
37
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
38
+ "Access-Control-Allow-Headers": "Content-Type, Authorization, X-API-Key"
39
+ }
40
+ });
41
+ }
42
+ function validateApiKey(req) {
43
+ const apiKey = req.headers.get("X-API-Key");
44
+ return apiKey === API_KEY && API_KEY !== "";
45
+ }
46
+ var server = Bun.serve({
47
+ port: PORT,
48
+ hostname: HOST,
49
+ async fetch(req) {
50
+ const url = new URL(req.url);
51
+ const path = url.pathname;
52
+ if (req.method === "OPTIONS") {
53
+ return handleCORS();
54
+ }
55
+ if (path === "/health" || path === "/zendesk/health") {
56
+ return jsonResponse({ status: "healthy" });
57
+ }
58
+ if (!validateApiKey(req)) {
59
+ return jsonResponse({
60
+ error: "Unauthorized",
61
+ code: "INVALID_API_KEY",
62
+ hint: "Provide valid API key via X-API-Key header"
63
+ }, 401);
64
+ }
65
+ if (path === "/status" || path === "/zendesk/status") {
66
+ return jsonResponse({
67
+ status: "ok",
68
+ service: "connect-zendesk",
69
+ ...getServerInfo(),
70
+ endpoints: {
71
+ health: "/zendesk/health",
72
+ status: "/zendesk/status",
73
+ api: "/zendesk/api/*"
74
+ }
75
+ });
76
+ }
77
+ if (path === "/" || path === "/zendesk" || path === "/zendesk/") {
78
+ return jsonResponse({
79
+ service: "connect-zendesk",
80
+ description: "Zendesk API connector service",
81
+ version: "1.0.0",
82
+ documentation: "https://github.com/hasna/connect-zendesk",
83
+ endpoints: {
84
+ health: "GET /zendesk/health (no auth)",
85
+ status: "GET /zendesk/status (requires X-API-Key)",
86
+ api: "See Zendesk API documentation (requires X-API-Key)"
87
+ }
88
+ });
89
+ }
90
+ if (path.startsWith("/zendesk/api/") || path.startsWith("/api/")) {
91
+ const authHeader = req.headers.get("Authorization");
92
+ if (!authHeader) {
93
+ return jsonResponse({ error: "Authorization header required for Zendesk API", code: "ZENDESK_AUTH_REQUIRED" }, 401);
94
+ }
95
+ const subdomain = url.searchParams.get("subdomain") || req.headers.get("X-Zendesk-Subdomain");
96
+ if (!subdomain) {
97
+ return jsonResponse({
98
+ error: "Zendesk subdomain required",
99
+ code: "MISSING_SUBDOMAIN",
100
+ hint: "Provide subdomain via query param (?subdomain=xxx) or X-Zendesk-Subdomain header"
101
+ }, 400);
102
+ }
103
+ const apiPath = path.replace("/zendesk/api/", "").replace("/api/", "");
104
+ const zendeskUrl = `https://${subdomain}.zendesk.com/api/v2/${apiPath}${url.search}`;
105
+ try {
106
+ const response = await fetch(zendeskUrl, {
107
+ method: req.method,
108
+ headers: {
109
+ Authorization: authHeader,
110
+ "Content-Type": "application/json",
111
+ Accept: "application/json"
112
+ },
113
+ body: req.method !== "GET" && req.method !== "HEAD" ? await req.text() : undefined
114
+ });
115
+ const data = await response.json();
116
+ return jsonResponse(data, response.status);
117
+ } catch (err) {
118
+ return jsonResponse({
119
+ error: "Failed to proxy request to Zendesk",
120
+ code: "PROXY_ERROR",
121
+ details: String(err)
122
+ }, 502);
123
+ }
124
+ }
125
+ return jsonResponse({
126
+ error: "Not found",
127
+ code: "NOT_FOUND",
128
+ path
129
+ }, 404);
130
+ },
131
+ error(error) {
132
+ console.error("Server error:", error);
133
+ return jsonResponse({ error: "Internal server error", code: "INTERNAL_ERROR" }, 500);
134
+ }
135
+ });
136
+ console.log(`\uD83D\uDE80 connect-zendesk server running at http://${HOST}:${PORT}`);
137
+ console.log(` Health: http://${HOST}:${PORT}/zendesk/health (no auth)`);
138
+ console.log(` Status: http://${HOST}:${PORT}/zendesk/status (requires X-API-Key)`);
139
+ console.log(` API Key configured: ${API_KEY ? "Yes" : "No"}`);
140
+ export {
141
+ server
142
+ };
@@ -0,0 +1,95 @@
1
+ import type { ZendeskClient } from './client';
2
+ import type {
3
+ ZendeskAutomation,
4
+ ZendeskAutomationResponse,
5
+ ZendeskAutomationsResponse,
6
+ CreateAutomationRequest,
7
+ UpdateAutomationRequest,
8
+ AutomationListParams,
9
+ } from '../types';
10
+
11
+ /**
12
+ * Zendesk Automations API
13
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/
14
+ */
15
+ export class AutomationsApi {
16
+ constructor(private readonly client: ZendeskClient) {}
17
+
18
+ /**
19
+ * List all automations
20
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#list-automations
21
+ */
22
+ async list(params?: AutomationListParams): Promise<ZendeskAutomation[]> {
23
+ const response = await this.client.get<ZendeskAutomationsResponse>('/automations.json', {
24
+ page: params?.page,
25
+ per_page: params?.per_page,
26
+ active: params?.active,
27
+ sort_by: params?.sort_by,
28
+ sort_order: params?.sort_order,
29
+ });
30
+ return response.automations;
31
+ }
32
+
33
+ /**
34
+ * List active automations
35
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#list-active-automations
36
+ */
37
+ async listActive(params?: AutomationListParams): Promise<ZendeskAutomation[]> {
38
+ const response = await this.client.get<ZendeskAutomationsResponse>('/automations/active.json', {
39
+ page: params?.page,
40
+ per_page: params?.per_page,
41
+ sort_by: params?.sort_by,
42
+ sort_order: params?.sort_order,
43
+ });
44
+ return response.automations;
45
+ }
46
+
47
+ /**
48
+ * Get an automation by ID
49
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#show-automation
50
+ */
51
+ async get(automationId: number): Promise<ZendeskAutomation> {
52
+ const response = await this.client.get<ZendeskAutomationResponse>(`/automations/${automationId}.json`);
53
+ return response.automation;
54
+ }
55
+
56
+ /**
57
+ * Create a new automation
58
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#create-automation
59
+ */
60
+ async create(data: CreateAutomationRequest): Promise<ZendeskAutomation> {
61
+ const response = await this.client.post<ZendeskAutomationResponse>('/automations.json', data);
62
+ return response.automation;
63
+ }
64
+
65
+ /**
66
+ * Update an automation
67
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#update-automation
68
+ */
69
+ async update(automationId: number, data: UpdateAutomationRequest): Promise<ZendeskAutomation> {
70
+ const response = await this.client.put<ZendeskAutomationResponse>(`/automations/${automationId}.json`, data);
71
+ return response.automation;
72
+ }
73
+
74
+ /**
75
+ * Delete an automation
76
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#delete-automation
77
+ */
78
+ async delete(automationId: number): Promise<void> {
79
+ await this.client.delete(`/automations/${automationId}.json`);
80
+ }
81
+
82
+ /**
83
+ * Search automations by title
84
+ * @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#search-automations
85
+ */
86
+ async search(query: string, params?: AutomationListParams): Promise<ZendeskAutomation[]> {
87
+ const response = await this.client.get<ZendeskAutomationsResponse>('/automations/search.json', {
88
+ query,
89
+ page: params?.page,
90
+ per_page: params?.per_page,
91
+ active: params?.active,
92
+ });
93
+ return response.automations;
94
+ }
95
+ }
@@ -0,0 +1,80 @@
1
+ import type { ZendeskClient } from './client';
2
+ import type {
3
+ ZendeskBrand,
4
+ ZendeskBrandResponse,
5
+ ZendeskBrandsResponse,
6
+ CreateBrandRequest,
7
+ UpdateBrandRequest,
8
+ BrandListParams,
9
+ } from '../types';
10
+
11
+ /**
12
+ * Zendesk Brands API
13
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/
14
+ */
15
+ export class BrandsApi {
16
+ constructor(private readonly client: ZendeskClient) {}
17
+
18
+ /**
19
+ * List all brands
20
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#list-brands
21
+ */
22
+ async list(params?: BrandListParams): Promise<ZendeskBrand[]> {
23
+ const response = await this.client.get<ZendeskBrandsResponse>('/brands.json', {
24
+ page: params?.page,
25
+ per_page: params?.per_page,
26
+ });
27
+ return response.brands;
28
+ }
29
+
30
+ /**
31
+ * Get a brand by ID
32
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#show-brand
33
+ */
34
+ async get(brandId: number): Promise<ZendeskBrand> {
35
+ const response = await this.client.get<ZendeskBrandResponse>(`/brands/${brandId}.json`);
36
+ return response.brand;
37
+ }
38
+
39
+ /**
40
+ * Create a new brand
41
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#create-brand
42
+ */
43
+ async create(data: CreateBrandRequest): Promise<ZendeskBrand> {
44
+ const response = await this.client.post<ZendeskBrandResponse>('/brands.json', data);
45
+ return response.brand;
46
+ }
47
+
48
+ /**
49
+ * Update a brand
50
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#update-brand
51
+ */
52
+ async update(brandId: number, data: UpdateBrandRequest): Promise<ZendeskBrand> {
53
+ const response = await this.client.put<ZendeskBrandResponse>(`/brands/${brandId}.json`, data);
54
+ return response.brand;
55
+ }
56
+
57
+ /**
58
+ * Delete a brand
59
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#delete-brand
60
+ */
61
+ async delete(brandId: number): Promise<void> {
62
+ await this.client.delete(`/brands/${brandId}.json`);
63
+ }
64
+
65
+ /**
66
+ * Check host mapping validity
67
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#check-host-mapping-validity-for-an-existing-brand
68
+ */
69
+ async checkHostMapping(brandId: number): Promise<{ is_valid: boolean; reason: string | null }> {
70
+ return this.client.get(`/brands/${brandId}/check_host_mapping.json`);
71
+ }
72
+
73
+ /**
74
+ * Check host mapping validity (before creating)
75
+ * @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/#check-host-mapping-validity
76
+ */
77
+ async checkHostMappingForHost(hostMapping: string, subdomain: string): Promise<{ is_valid: boolean; reason: string | null }> {
78
+ return this.client.get('/brands/check_host_mapping.json', { host_mapping: hostMapping, subdomain });
79
+ }
80
+ }