@hasna/connectors 1.0.5 → 1.0.6

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 (640) hide show
  1. package/bin/index.js +253 -1
  2. package/bin/mcp.js +253 -1
  3. package/bin/serve.js +252 -0
  4. package/connectors/connect-papyrs/.env.example +11 -0
  5. package/connectors/connect-papyrs/CLAUDE.md +272 -0
  6. package/connectors/connect-papyrs/README.md +193 -0
  7. package/connectors/connect-papyrs/package.json +51 -0
  8. package/connectors/connect-papyrs/scripts/release.ts +179 -0
  9. package/connectors/connect-papyrs/src/api/client.ts +213 -0
  10. package/connectors/connect-papyrs/src/api/example.ts +48 -0
  11. package/connectors/connect-papyrs/src/api/index.ts +51 -0
  12. package/connectors/connect-papyrs/src/cli/index.ts +254 -0
  13. package/connectors/connect-papyrs/src/index.ts +103 -0
  14. package/connectors/connect-papyrs/src/types/index.ts +237 -0
  15. package/connectors/connect-papyrs/src/utils/auth.ts +274 -0
  16. package/connectors/connect-papyrs/src/utils/bulk.ts +212 -0
  17. package/connectors/connect-papyrs/src/utils/config.ts +326 -0
  18. package/connectors/connect-papyrs/src/utils/output.ts +175 -0
  19. package/connectors/connect-papyrs/src/utils/settings.ts +114 -0
  20. package/connectors/connect-papyrs/src/utils/storage.ts +198 -0
  21. package/connectors/connect-papyrs/tsconfig.json +16 -0
  22. package/connectors/connect-parsehub/.env.example +11 -0
  23. package/connectors/connect-parsehub/CLAUDE.md +272 -0
  24. package/connectors/connect-parsehub/README.md +193 -0
  25. package/connectors/connect-parsehub/package.json +51 -0
  26. package/connectors/connect-parsehub/scripts/release.ts +179 -0
  27. package/connectors/connect-parsehub/src/api/client.ts +213 -0
  28. package/connectors/connect-parsehub/src/api/example.ts +48 -0
  29. package/connectors/connect-parsehub/src/api/index.ts +51 -0
  30. package/connectors/connect-parsehub/src/cli/index.ts +254 -0
  31. package/connectors/connect-parsehub/src/index.ts +103 -0
  32. package/connectors/connect-parsehub/src/types/index.ts +237 -0
  33. package/connectors/connect-parsehub/src/utils/auth.ts +274 -0
  34. package/connectors/connect-parsehub/src/utils/bulk.ts +212 -0
  35. package/connectors/connect-parsehub/src/utils/config.ts +326 -0
  36. package/connectors/connect-parsehub/src/utils/output.ts +175 -0
  37. package/connectors/connect-parsehub/src/utils/settings.ts +114 -0
  38. package/connectors/connect-parsehub/src/utils/storage.ts +198 -0
  39. package/connectors/connect-parsehub/tsconfig.json +16 -0
  40. package/connectors/connect-parseprompt/.env.example +11 -0
  41. package/connectors/connect-parseprompt/CLAUDE.md +272 -0
  42. package/connectors/connect-parseprompt/README.md +193 -0
  43. package/connectors/connect-parseprompt/package.json +51 -0
  44. package/connectors/connect-parseprompt/scripts/release.ts +179 -0
  45. package/connectors/connect-parseprompt/src/api/client.ts +213 -0
  46. package/connectors/connect-parseprompt/src/api/example.ts +48 -0
  47. package/connectors/connect-parseprompt/src/api/index.ts +51 -0
  48. package/connectors/connect-parseprompt/src/cli/index.ts +254 -0
  49. package/connectors/connect-parseprompt/src/index.ts +103 -0
  50. package/connectors/connect-parseprompt/src/types/index.ts +237 -0
  51. package/connectors/connect-parseprompt/src/utils/auth.ts +274 -0
  52. package/connectors/connect-parseprompt/src/utils/bulk.ts +212 -0
  53. package/connectors/connect-parseprompt/src/utils/config.ts +326 -0
  54. package/connectors/connect-parseprompt/src/utils/output.ts +175 -0
  55. package/connectors/connect-parseprompt/src/utils/settings.ts +114 -0
  56. package/connectors/connect-parseprompt/src/utils/storage.ts +198 -0
  57. package/connectors/connect-parseprompt/tsconfig.json +16 -0
  58. package/connectors/connect-passcreator/.env.example +11 -0
  59. package/connectors/connect-passcreator/CLAUDE.md +272 -0
  60. package/connectors/connect-passcreator/README.md +193 -0
  61. package/connectors/connect-passcreator/package.json +51 -0
  62. package/connectors/connect-passcreator/scripts/release.ts +179 -0
  63. package/connectors/connect-passcreator/src/api/client.ts +213 -0
  64. package/connectors/connect-passcreator/src/api/example.ts +48 -0
  65. package/connectors/connect-passcreator/src/api/index.ts +51 -0
  66. package/connectors/connect-passcreator/src/cli/index.ts +254 -0
  67. package/connectors/connect-passcreator/src/index.ts +103 -0
  68. package/connectors/connect-passcreator/src/types/index.ts +237 -0
  69. package/connectors/connect-passcreator/src/utils/auth.ts +274 -0
  70. package/connectors/connect-passcreator/src/utils/bulk.ts +212 -0
  71. package/connectors/connect-passcreator/src/utils/config.ts +326 -0
  72. package/connectors/connect-passcreator/src/utils/output.ts +175 -0
  73. package/connectors/connect-passcreator/src/utils/settings.ts +114 -0
  74. package/connectors/connect-passcreator/src/utils/storage.ts +198 -0
  75. package/connectors/connect-passcreator/tsconfig.json +16 -0
  76. package/connectors/connect-passslot/.env.example +11 -0
  77. package/connectors/connect-passslot/CLAUDE.md +272 -0
  78. package/connectors/connect-passslot/README.md +193 -0
  79. package/connectors/connect-passslot/package.json +51 -0
  80. package/connectors/connect-passslot/scripts/release.ts +179 -0
  81. package/connectors/connect-passslot/src/api/client.ts +213 -0
  82. package/connectors/connect-passslot/src/api/example.ts +48 -0
  83. package/connectors/connect-passslot/src/api/index.ts +51 -0
  84. package/connectors/connect-passslot/src/cli/index.ts +254 -0
  85. package/connectors/connect-passslot/src/index.ts +103 -0
  86. package/connectors/connect-passslot/src/types/index.ts +237 -0
  87. package/connectors/connect-passslot/src/utils/auth.ts +274 -0
  88. package/connectors/connect-passslot/src/utils/bulk.ts +212 -0
  89. package/connectors/connect-passslot/src/utils/config.ts +326 -0
  90. package/connectors/connect-passslot/src/utils/output.ts +175 -0
  91. package/connectors/connect-passslot/src/utils/settings.ts +114 -0
  92. package/connectors/connect-passslot/src/utils/storage.ts +198 -0
  93. package/connectors/connect-passslot/tsconfig.json +16 -0
  94. package/connectors/connect-patentsview/.env.example +7 -0
  95. package/connectors/connect-patentsview/CLAUDE.md +257 -0
  96. package/connectors/connect-patentsview/README.md +334 -0
  97. package/connectors/connect-patentsview/package.json +54 -0
  98. package/connectors/connect-patentsview/src/api/assignees.ts +182 -0
  99. package/connectors/connect-patentsview/src/api/client.ts +139 -0
  100. package/connectors/connect-patentsview/src/api/cpc.ts +191 -0
  101. package/connectors/connect-patentsview/src/api/index.ts +73 -0
  102. package/connectors/connect-patentsview/src/api/inventors.ts +176 -0
  103. package/connectors/connect-patentsview/src/api/locations.ts +200 -0
  104. package/connectors/connect-patentsview/src/api/patents.ts +202 -0
  105. package/connectors/connect-patentsview/src/cli/index.ts +649 -0
  106. package/connectors/connect-patentsview/src/index.ts +24 -0
  107. package/connectors/connect-patentsview/src/types/index.ts +333 -0
  108. package/connectors/connect-patentsview/src/utils/config.ts +212 -0
  109. package/connectors/connect-patentsview/src/utils/output.ts +119 -0
  110. package/connectors/connect-patentsview/tsconfig.json +16 -0
  111. package/connectors/connect-patreon/.env.example +11 -0
  112. package/connectors/connect-patreon/CLAUDE.md +272 -0
  113. package/connectors/connect-patreon/README.md +193 -0
  114. package/connectors/connect-patreon/package.json +51 -0
  115. package/connectors/connect-patreon/scripts/release.ts +179 -0
  116. package/connectors/connect-patreon/src/api/client.ts +213 -0
  117. package/connectors/connect-patreon/src/api/example.ts +48 -0
  118. package/connectors/connect-patreon/src/api/index.ts +51 -0
  119. package/connectors/connect-patreon/src/cli/index.ts +254 -0
  120. package/connectors/connect-patreon/src/index.ts +103 -0
  121. package/connectors/connect-patreon/src/types/index.ts +237 -0
  122. package/connectors/connect-patreon/src/utils/auth.ts +274 -0
  123. package/connectors/connect-patreon/src/utils/bulk.ts +212 -0
  124. package/connectors/connect-patreon/src/utils/config.ts +326 -0
  125. package/connectors/connect-patreon/src/utils/output.ts +175 -0
  126. package/connectors/connect-patreon/src/utils/settings.ts +114 -0
  127. package/connectors/connect-patreon/src/utils/storage.ts +198 -0
  128. package/connectors/connect-patreon/tsconfig.json +16 -0
  129. package/connectors/connect-paymo/.env.example +11 -0
  130. package/connectors/connect-paymo/CLAUDE.md +272 -0
  131. package/connectors/connect-paymo/README.md +193 -0
  132. package/connectors/connect-paymo/package.json +51 -0
  133. package/connectors/connect-paymo/scripts/release.ts +179 -0
  134. package/connectors/connect-paymo/src/api/client.ts +213 -0
  135. package/connectors/connect-paymo/src/api/example.ts +48 -0
  136. package/connectors/connect-paymo/src/api/index.ts +51 -0
  137. package/connectors/connect-paymo/src/cli/index.ts +254 -0
  138. package/connectors/connect-paymo/src/index.ts +103 -0
  139. package/connectors/connect-paymo/src/types/index.ts +237 -0
  140. package/connectors/connect-paymo/src/utils/auth.ts +274 -0
  141. package/connectors/connect-paymo/src/utils/bulk.ts +212 -0
  142. package/connectors/connect-paymo/src/utils/config.ts +326 -0
  143. package/connectors/connect-paymo/src/utils/output.ts +175 -0
  144. package/connectors/connect-paymo/src/utils/settings.ts +114 -0
  145. package/connectors/connect-paymo/src/utils/storage.ts +198 -0
  146. package/connectors/connect-paymo/tsconfig.json +16 -0
  147. package/connectors/connect-peekalink/.env.example +11 -0
  148. package/connectors/connect-peekalink/CLAUDE.md +272 -0
  149. package/connectors/connect-peekalink/README.md +193 -0
  150. package/connectors/connect-peekalink/package.json +51 -0
  151. package/connectors/connect-peekalink/scripts/release.ts +179 -0
  152. package/connectors/connect-peekalink/src/api/client.ts +213 -0
  153. package/connectors/connect-peekalink/src/api/example.ts +48 -0
  154. package/connectors/connect-peekalink/src/api/index.ts +51 -0
  155. package/connectors/connect-peekalink/src/cli/index.ts +254 -0
  156. package/connectors/connect-peekalink/src/index.ts +103 -0
  157. package/connectors/connect-peekalink/src/types/index.ts +237 -0
  158. package/connectors/connect-peekalink/src/utils/auth.ts +274 -0
  159. package/connectors/connect-peekalink/src/utils/bulk.ts +212 -0
  160. package/connectors/connect-peekalink/src/utils/config.ts +326 -0
  161. package/connectors/connect-peekalink/src/utils/output.ts +175 -0
  162. package/connectors/connect-peekalink/src/utils/settings.ts +114 -0
  163. package/connectors/connect-peekalink/src/utils/storage.ts +198 -0
  164. package/connectors/connect-peekalink/tsconfig.json +16 -0
  165. package/connectors/connect-persio/.env.example +11 -0
  166. package/connectors/connect-persio/CLAUDE.md +272 -0
  167. package/connectors/connect-persio/README.md +193 -0
  168. package/connectors/connect-persio/package.json +51 -0
  169. package/connectors/connect-persio/scripts/release.ts +179 -0
  170. package/connectors/connect-persio/src/api/client.ts +213 -0
  171. package/connectors/connect-persio/src/api/example.ts +48 -0
  172. package/connectors/connect-persio/src/api/index.ts +51 -0
  173. package/connectors/connect-persio/src/cli/index.ts +254 -0
  174. package/connectors/connect-persio/src/index.ts +103 -0
  175. package/connectors/connect-persio/src/types/index.ts +237 -0
  176. package/connectors/connect-persio/src/utils/auth.ts +274 -0
  177. package/connectors/connect-persio/src/utils/bulk.ts +212 -0
  178. package/connectors/connect-persio/src/utils/config.ts +326 -0
  179. package/connectors/connect-persio/src/utils/output.ts +175 -0
  180. package/connectors/connect-persio/src/utils/settings.ts +114 -0
  181. package/connectors/connect-persio/src/utils/storage.ts +198 -0
  182. package/connectors/connect-persio/tsconfig.json +16 -0
  183. package/connectors/connect-personalai/.env.example +11 -0
  184. package/connectors/connect-personalai/CLAUDE.md +272 -0
  185. package/connectors/connect-personalai/README.md +193 -0
  186. package/connectors/connect-personalai/package.json +51 -0
  187. package/connectors/connect-personalai/scripts/release.ts +179 -0
  188. package/connectors/connect-personalai/src/api/client.ts +213 -0
  189. package/connectors/connect-personalai/src/api/example.ts +48 -0
  190. package/connectors/connect-personalai/src/api/index.ts +51 -0
  191. package/connectors/connect-personalai/src/cli/index.ts +254 -0
  192. package/connectors/connect-personalai/src/index.ts +103 -0
  193. package/connectors/connect-personalai/src/types/index.ts +237 -0
  194. package/connectors/connect-personalai/src/utils/auth.ts +274 -0
  195. package/connectors/connect-personalai/src/utils/bulk.ts +212 -0
  196. package/connectors/connect-personalai/src/utils/config.ts +326 -0
  197. package/connectors/connect-personalai/src/utils/output.ts +175 -0
  198. package/connectors/connect-personalai/src/utils/settings.ts +114 -0
  199. package/connectors/connect-personalai/src/utils/storage.ts +198 -0
  200. package/connectors/connect-personalai/tsconfig.json +16 -0
  201. package/connectors/connect-phantombuster/.env.example +11 -0
  202. package/connectors/connect-phantombuster/CLAUDE.md +272 -0
  203. package/connectors/connect-phantombuster/README.md +193 -0
  204. package/connectors/connect-phantombuster/package.json +51 -0
  205. package/connectors/connect-phantombuster/scripts/release.ts +179 -0
  206. package/connectors/connect-phantombuster/src/api/client.ts +213 -0
  207. package/connectors/connect-phantombuster/src/api/example.ts +48 -0
  208. package/connectors/connect-phantombuster/src/api/index.ts +51 -0
  209. package/connectors/connect-phantombuster/src/cli/index.ts +254 -0
  210. package/connectors/connect-phantombuster/src/index.ts +103 -0
  211. package/connectors/connect-phantombuster/src/types/index.ts +237 -0
  212. package/connectors/connect-phantombuster/src/utils/auth.ts +274 -0
  213. package/connectors/connect-phantombuster/src/utils/bulk.ts +212 -0
  214. package/connectors/connect-phantombuster/src/utils/config.ts +326 -0
  215. package/connectors/connect-phantombuster/src/utils/output.ts +175 -0
  216. package/connectors/connect-phantombuster/src/utils/settings.ts +114 -0
  217. package/connectors/connect-phantombuster/src/utils/storage.ts +198 -0
  218. package/connectors/connect-phantombuster/tsconfig.json +16 -0
  219. package/connectors/connect-philipshue/.env.example +11 -0
  220. package/connectors/connect-philipshue/CLAUDE.md +272 -0
  221. package/connectors/connect-philipshue/README.md +193 -0
  222. package/connectors/connect-philipshue/package.json +51 -0
  223. package/connectors/connect-philipshue/scripts/release.ts +179 -0
  224. package/connectors/connect-philipshue/src/api/client.ts +213 -0
  225. package/connectors/connect-philipshue/src/api/example.ts +48 -0
  226. package/connectors/connect-philipshue/src/api/index.ts +51 -0
  227. package/connectors/connect-philipshue/src/cli/index.ts +254 -0
  228. package/connectors/connect-philipshue/src/index.ts +103 -0
  229. package/connectors/connect-philipshue/src/types/index.ts +237 -0
  230. package/connectors/connect-philipshue/src/utils/auth.ts +274 -0
  231. package/connectors/connect-philipshue/src/utils/bulk.ts +212 -0
  232. package/connectors/connect-philipshue/src/utils/config.ts +326 -0
  233. package/connectors/connect-philipshue/src/utils/output.ts +175 -0
  234. package/connectors/connect-philipshue/src/utils/settings.ts +114 -0
  235. package/connectors/connect-philipshue/src/utils/storage.ts +198 -0
  236. package/connectors/connect-philipshue/tsconfig.json +16 -0
  237. package/connectors/connect-phrase/.env.example +11 -0
  238. package/connectors/connect-phrase/CLAUDE.md +272 -0
  239. package/connectors/connect-phrase/README.md +193 -0
  240. package/connectors/connect-phrase/package.json +51 -0
  241. package/connectors/connect-phrase/scripts/release.ts +179 -0
  242. package/connectors/connect-phrase/src/api/client.ts +213 -0
  243. package/connectors/connect-phrase/src/api/example.ts +48 -0
  244. package/connectors/connect-phrase/src/api/index.ts +51 -0
  245. package/connectors/connect-phrase/src/cli/index.ts +254 -0
  246. package/connectors/connect-phrase/src/index.ts +103 -0
  247. package/connectors/connect-phrase/src/types/index.ts +237 -0
  248. package/connectors/connect-phrase/src/utils/auth.ts +274 -0
  249. package/connectors/connect-phrase/src/utils/bulk.ts +212 -0
  250. package/connectors/connect-phrase/src/utils/config.ts +326 -0
  251. package/connectors/connect-phrase/src/utils/output.ts +175 -0
  252. package/connectors/connect-phrase/src/utils/settings.ts +114 -0
  253. package/connectors/connect-phrase/src/utils/storage.ts +198 -0
  254. package/connectors/connect-phrase/tsconfig.json +16 -0
  255. package/connectors/connect-pika/.env.example +11 -0
  256. package/connectors/connect-pika/CLAUDE.md +128 -0
  257. package/connectors/connect-pika/README.md +193 -0
  258. package/connectors/connect-pika/package.json +51 -0
  259. package/connectors/connect-pika/src/api/client.ts +77 -0
  260. package/connectors/connect-pika/src/api/index.ts +40 -0
  261. package/connectors/connect-pika/src/cli/index.ts +300 -0
  262. package/connectors/connect-pika/src/index.ts +19 -0
  263. package/connectors/connect-pika/src/types/index.ts +54 -0
  264. package/connectors/connect-pika/src/utils/config.ts +103 -0
  265. package/connectors/connect-pika/src/utils/output.ts +119 -0
  266. package/connectors/connect-pika/tsconfig.json +16 -0
  267. package/connectors/connect-pinata/.env.example +11 -0
  268. package/connectors/connect-pinata/CLAUDE.md +272 -0
  269. package/connectors/connect-pinata/README.md +193 -0
  270. package/connectors/connect-pinata/package.json +51 -0
  271. package/connectors/connect-pinata/scripts/release.ts +179 -0
  272. package/connectors/connect-pinata/src/api/client.ts +213 -0
  273. package/connectors/connect-pinata/src/api/example.ts +48 -0
  274. package/connectors/connect-pinata/src/api/index.ts +51 -0
  275. package/connectors/connect-pinata/src/cli/index.ts +254 -0
  276. package/connectors/connect-pinata/src/index.ts +103 -0
  277. package/connectors/connect-pinata/src/types/index.ts +237 -0
  278. package/connectors/connect-pinata/src/utils/auth.ts +274 -0
  279. package/connectors/connect-pinata/src/utils/bulk.ts +212 -0
  280. package/connectors/connect-pinata/src/utils/config.ts +326 -0
  281. package/connectors/connect-pinata/src/utils/output.ts +175 -0
  282. package/connectors/connect-pinata/src/utils/settings.ts +114 -0
  283. package/connectors/connect-pinata/src/utils/storage.ts +198 -0
  284. package/connectors/connect-pinata/tsconfig.json +16 -0
  285. package/connectors/connect-pipefy/.env.example +11 -0
  286. package/connectors/connect-pipefy/CLAUDE.md +272 -0
  287. package/connectors/connect-pipefy/README.md +193 -0
  288. package/connectors/connect-pipefy/package.json +51 -0
  289. package/connectors/connect-pipefy/scripts/release.ts +179 -0
  290. package/connectors/connect-pipefy/src/api/client.ts +213 -0
  291. package/connectors/connect-pipefy/src/api/example.ts +48 -0
  292. package/connectors/connect-pipefy/src/api/index.ts +51 -0
  293. package/connectors/connect-pipefy/src/cli/index.ts +254 -0
  294. package/connectors/connect-pipefy/src/index.ts +103 -0
  295. package/connectors/connect-pipefy/src/types/index.ts +237 -0
  296. package/connectors/connect-pipefy/src/utils/auth.ts +274 -0
  297. package/connectors/connect-pipefy/src/utils/bulk.ts +212 -0
  298. package/connectors/connect-pipefy/src/utils/config.ts +326 -0
  299. package/connectors/connect-pipefy/src/utils/output.ts +175 -0
  300. package/connectors/connect-pipefy/src/utils/settings.ts +114 -0
  301. package/connectors/connect-pipefy/src/utils/storage.ts +198 -0
  302. package/connectors/connect-pipefy/tsconfig.json +16 -0
  303. package/connectors/connect-pirateweather/.env.example +11 -0
  304. package/connectors/connect-pirateweather/CLAUDE.md +272 -0
  305. package/connectors/connect-pirateweather/README.md +193 -0
  306. package/connectors/connect-pirateweather/package.json +51 -0
  307. package/connectors/connect-pirateweather/scripts/release.ts +179 -0
  308. package/connectors/connect-pirateweather/src/api/client.ts +213 -0
  309. package/connectors/connect-pirateweather/src/api/example.ts +48 -0
  310. package/connectors/connect-pirateweather/src/api/index.ts +51 -0
  311. package/connectors/connect-pirateweather/src/cli/index.ts +254 -0
  312. package/connectors/connect-pirateweather/src/index.ts +103 -0
  313. package/connectors/connect-pirateweather/src/types/index.ts +237 -0
  314. package/connectors/connect-pirateweather/src/utils/auth.ts +274 -0
  315. package/connectors/connect-pirateweather/src/utils/bulk.ts +212 -0
  316. package/connectors/connect-pirateweather/src/utils/config.ts +326 -0
  317. package/connectors/connect-pirateweather/src/utils/output.ts +175 -0
  318. package/connectors/connect-pirateweather/src/utils/settings.ts +114 -0
  319. package/connectors/connect-pirateweather/src/utils/storage.ts +198 -0
  320. package/connectors/connect-pirateweather/tsconfig.json +16 -0
  321. package/connectors/connect-pitchly/.env.example +11 -0
  322. package/connectors/connect-pitchly/CLAUDE.md +272 -0
  323. package/connectors/connect-pitchly/README.md +193 -0
  324. package/connectors/connect-pitchly/package.json +51 -0
  325. package/connectors/connect-pitchly/scripts/release.ts +179 -0
  326. package/connectors/connect-pitchly/src/api/client.ts +213 -0
  327. package/connectors/connect-pitchly/src/api/example.ts +48 -0
  328. package/connectors/connect-pitchly/src/api/index.ts +51 -0
  329. package/connectors/connect-pitchly/src/cli/index.ts +254 -0
  330. package/connectors/connect-pitchly/src/index.ts +103 -0
  331. package/connectors/connect-pitchly/src/types/index.ts +237 -0
  332. package/connectors/connect-pitchly/src/utils/auth.ts +274 -0
  333. package/connectors/connect-pitchly/src/utils/bulk.ts +212 -0
  334. package/connectors/connect-pitchly/src/utils/config.ts +326 -0
  335. package/connectors/connect-pitchly/src/utils/output.ts +175 -0
  336. package/connectors/connect-pitchly/src/utils/settings.ts +114 -0
  337. package/connectors/connect-pitchly/src/utils/storage.ts +198 -0
  338. package/connectors/connect-pitchly/tsconfig.json +16 -0
  339. package/connectors/connect-pivotaltracker/.env.example +11 -0
  340. package/connectors/connect-pivotaltracker/CLAUDE.md +272 -0
  341. package/connectors/connect-pivotaltracker/README.md +193 -0
  342. package/connectors/connect-pivotaltracker/package.json +51 -0
  343. package/connectors/connect-pivotaltracker/scripts/release.ts +179 -0
  344. package/connectors/connect-pivotaltracker/src/api/client.ts +213 -0
  345. package/connectors/connect-pivotaltracker/src/api/example.ts +48 -0
  346. package/connectors/connect-pivotaltracker/src/api/index.ts +51 -0
  347. package/connectors/connect-pivotaltracker/src/cli/index.ts +254 -0
  348. package/connectors/connect-pivotaltracker/src/index.ts +103 -0
  349. package/connectors/connect-pivotaltracker/src/types/index.ts +237 -0
  350. package/connectors/connect-pivotaltracker/src/utils/auth.ts +274 -0
  351. package/connectors/connect-pivotaltracker/src/utils/bulk.ts +212 -0
  352. package/connectors/connect-pivotaltracker/src/utils/config.ts +326 -0
  353. package/connectors/connect-pivotaltracker/src/utils/output.ts +175 -0
  354. package/connectors/connect-pivotaltracker/src/utils/settings.ts +114 -0
  355. package/connectors/connect-pivotaltracker/src/utils/storage.ts +198 -0
  356. package/connectors/connect-pivotaltracker/tsconfig.json +16 -0
  357. package/connectors/connect-planviewleankit/.env.example +11 -0
  358. package/connectors/connect-planviewleankit/CLAUDE.md +272 -0
  359. package/connectors/connect-planviewleankit/README.md +193 -0
  360. package/connectors/connect-planviewleankit/package.json +51 -0
  361. package/connectors/connect-planviewleankit/scripts/release.ts +179 -0
  362. package/connectors/connect-planviewleankit/src/api/client.ts +213 -0
  363. package/connectors/connect-planviewleankit/src/api/example.ts +48 -0
  364. package/connectors/connect-planviewleankit/src/api/index.ts +51 -0
  365. package/connectors/connect-planviewleankit/src/cli/index.ts +254 -0
  366. package/connectors/connect-planviewleankit/src/index.ts +103 -0
  367. package/connectors/connect-planviewleankit/src/types/index.ts +237 -0
  368. package/connectors/connect-planviewleankit/src/utils/auth.ts +274 -0
  369. package/connectors/connect-planviewleankit/src/utils/bulk.ts +212 -0
  370. package/connectors/connect-planviewleankit/src/utils/config.ts +326 -0
  371. package/connectors/connect-planviewleankit/src/utils/output.ts +175 -0
  372. package/connectors/connect-planviewleankit/src/utils/settings.ts +114 -0
  373. package/connectors/connect-planviewleankit/src/utils/storage.ts +198 -0
  374. package/connectors/connect-planviewleankit/tsconfig.json +16 -0
  375. package/connectors/connect-planyoonlinebooking/.env.example +11 -0
  376. package/connectors/connect-planyoonlinebooking/CLAUDE.md +272 -0
  377. package/connectors/connect-planyoonlinebooking/README.md +193 -0
  378. package/connectors/connect-planyoonlinebooking/package.json +51 -0
  379. package/connectors/connect-planyoonlinebooking/scripts/release.ts +179 -0
  380. package/connectors/connect-planyoonlinebooking/src/api/client.ts +213 -0
  381. package/connectors/connect-planyoonlinebooking/src/api/example.ts +48 -0
  382. package/connectors/connect-planyoonlinebooking/src/api/index.ts +51 -0
  383. package/connectors/connect-planyoonlinebooking/src/cli/index.ts +254 -0
  384. package/connectors/connect-planyoonlinebooking/src/index.ts +103 -0
  385. package/connectors/connect-planyoonlinebooking/src/types/index.ts +237 -0
  386. package/connectors/connect-planyoonlinebooking/src/utils/auth.ts +274 -0
  387. package/connectors/connect-planyoonlinebooking/src/utils/bulk.ts +212 -0
  388. package/connectors/connect-planyoonlinebooking/src/utils/config.ts +326 -0
  389. package/connectors/connect-planyoonlinebooking/src/utils/output.ts +175 -0
  390. package/connectors/connect-planyoonlinebooking/src/utils/settings.ts +114 -0
  391. package/connectors/connect-planyoonlinebooking/src/utils/storage.ts +198 -0
  392. package/connectors/connect-planyoonlinebooking/tsconfig.json +16 -0
  393. package/connectors/connect-platformly/.env.example +11 -0
  394. package/connectors/connect-platformly/CLAUDE.md +272 -0
  395. package/connectors/connect-platformly/README.md +193 -0
  396. package/connectors/connect-platformly/package.json +51 -0
  397. package/connectors/connect-platformly/scripts/release.ts +179 -0
  398. package/connectors/connect-platformly/src/api/client.ts +213 -0
  399. package/connectors/connect-platformly/src/api/example.ts +48 -0
  400. package/connectors/connect-platformly/src/api/index.ts +51 -0
  401. package/connectors/connect-platformly/src/cli/index.ts +254 -0
  402. package/connectors/connect-platformly/src/index.ts +103 -0
  403. package/connectors/connect-platformly/src/types/index.ts +237 -0
  404. package/connectors/connect-platformly/src/utils/auth.ts +274 -0
  405. package/connectors/connect-platformly/src/utils/bulk.ts +212 -0
  406. package/connectors/connect-platformly/src/utils/config.ts +326 -0
  407. package/connectors/connect-platformly/src/utils/output.ts +175 -0
  408. package/connectors/connect-platformly/src/utils/settings.ts +114 -0
  409. package/connectors/connect-platformly/src/utils/storage.ts +198 -0
  410. package/connectors/connect-platformly/tsconfig.json +16 -0
  411. package/connectors/connect-playht/.env.example +11 -0
  412. package/connectors/connect-playht/CLAUDE.md +128 -0
  413. package/connectors/connect-playht/README.md +193 -0
  414. package/connectors/connect-playht/package.json +53 -0
  415. package/connectors/connect-playht/src/api/client.ts +146 -0
  416. package/connectors/connect-playht/src/api/index.ts +179 -0
  417. package/connectors/connect-playht/src/cli/index.ts +384 -0
  418. package/connectors/connect-playht/src/index.ts +21 -0
  419. package/connectors/connect-playht/src/types/index.ts +148 -0
  420. package/connectors/connect-playht/src/utils/config.ts +114 -0
  421. package/connectors/connect-playht/src/utils/output.ts +119 -0
  422. package/connectors/connect-playht/tsconfig.json +16 -0
  423. package/connectors/connect-plecto/.env.example +11 -0
  424. package/connectors/connect-plecto/CLAUDE.md +272 -0
  425. package/connectors/connect-plecto/README.md +193 -0
  426. package/connectors/connect-plecto/package.json +51 -0
  427. package/connectors/connect-plecto/scripts/release.ts +179 -0
  428. package/connectors/connect-plecto/src/api/client.ts +213 -0
  429. package/connectors/connect-plecto/src/api/example.ts +48 -0
  430. package/connectors/connect-plecto/src/api/index.ts +51 -0
  431. package/connectors/connect-plecto/src/cli/index.ts +254 -0
  432. package/connectors/connect-plecto/src/index.ts +103 -0
  433. package/connectors/connect-plecto/src/types/index.ts +237 -0
  434. package/connectors/connect-plecto/src/utils/auth.ts +274 -0
  435. package/connectors/connect-plecto/src/utils/bulk.ts +212 -0
  436. package/connectors/connect-plecto/src/utils/config.ts +326 -0
  437. package/connectors/connect-plecto/src/utils/output.ts +175 -0
  438. package/connectors/connect-plecto/src/utils/settings.ts +114 -0
  439. package/connectors/connect-plecto/src/utils/storage.ts +198 -0
  440. package/connectors/connect-plecto/tsconfig.json +16 -0
  441. package/connectors/connect-plivo/.env.example +11 -0
  442. package/connectors/connect-plivo/CLAUDE.md +272 -0
  443. package/connectors/connect-plivo/README.md +193 -0
  444. package/connectors/connect-plivo/package.json +51 -0
  445. package/connectors/connect-plivo/scripts/release.ts +179 -0
  446. package/connectors/connect-plivo/src/api/client.ts +213 -0
  447. package/connectors/connect-plivo/src/api/example.ts +48 -0
  448. package/connectors/connect-plivo/src/api/index.ts +51 -0
  449. package/connectors/connect-plivo/src/cli/index.ts +254 -0
  450. package/connectors/connect-plivo/src/index.ts +103 -0
  451. package/connectors/connect-plivo/src/types/index.ts +237 -0
  452. package/connectors/connect-plivo/src/utils/auth.ts +274 -0
  453. package/connectors/connect-plivo/src/utils/bulk.ts +212 -0
  454. package/connectors/connect-plivo/src/utils/config.ts +326 -0
  455. package/connectors/connect-plivo/src/utils/output.ts +175 -0
  456. package/connectors/connect-plivo/src/utils/settings.ts +114 -0
  457. package/connectors/connect-plivo/src/utils/storage.ts +198 -0
  458. package/connectors/connect-plivo/tsconfig.json +16 -0
  459. package/connectors/connect-postgres/.env.example +11 -0
  460. package/connectors/connect-postgres/CLAUDE.md +272 -0
  461. package/connectors/connect-postgres/README.md +193 -0
  462. package/connectors/connect-postgres/package.json +51 -0
  463. package/connectors/connect-postgres/scripts/release.ts +179 -0
  464. package/connectors/connect-postgres/src/api/client.ts +213 -0
  465. package/connectors/connect-postgres/src/api/example.ts +48 -0
  466. package/connectors/connect-postgres/src/api/index.ts +51 -0
  467. package/connectors/connect-postgres/src/cli/index.ts +254 -0
  468. package/connectors/connect-postgres/src/index.ts +103 -0
  469. package/connectors/connect-postgres/src/types/index.ts +237 -0
  470. package/connectors/connect-postgres/src/utils/auth.ts +274 -0
  471. package/connectors/connect-postgres/src/utils/bulk.ts +212 -0
  472. package/connectors/connect-postgres/src/utils/config.ts +326 -0
  473. package/connectors/connect-postgres/src/utils/output.ts +175 -0
  474. package/connectors/connect-postgres/src/utils/settings.ts +114 -0
  475. package/connectors/connect-postgres/src/utils/storage.ts +198 -0
  476. package/connectors/connect-postgres/tsconfig.json +16 -0
  477. package/connectors/connect-practitest/.env.example +11 -0
  478. package/connectors/connect-practitest/CLAUDE.md +272 -0
  479. package/connectors/connect-practitest/README.md +193 -0
  480. package/connectors/connect-practitest/package.json +51 -0
  481. package/connectors/connect-practitest/scripts/release.ts +179 -0
  482. package/connectors/connect-practitest/src/api/client.ts +213 -0
  483. package/connectors/connect-practitest/src/api/example.ts +48 -0
  484. package/connectors/connect-practitest/src/api/index.ts +51 -0
  485. package/connectors/connect-practitest/src/cli/index.ts +254 -0
  486. package/connectors/connect-practitest/src/index.ts +103 -0
  487. package/connectors/connect-practitest/src/types/index.ts +237 -0
  488. package/connectors/connect-practitest/src/utils/auth.ts +274 -0
  489. package/connectors/connect-practitest/src/utils/bulk.ts +212 -0
  490. package/connectors/connect-practitest/src/utils/config.ts +326 -0
  491. package/connectors/connect-practitest/src/utils/output.ts +175 -0
  492. package/connectors/connect-practitest/src/utils/settings.ts +114 -0
  493. package/connectors/connect-practitest/src/utils/storage.ts +198 -0
  494. package/connectors/connect-practitest/tsconfig.json +16 -0
  495. package/connectors/connect-predisai/.env.example +11 -0
  496. package/connectors/connect-predisai/CLAUDE.md +272 -0
  497. package/connectors/connect-predisai/README.md +193 -0
  498. package/connectors/connect-predisai/package.json +51 -0
  499. package/connectors/connect-predisai/scripts/release.ts +179 -0
  500. package/connectors/connect-predisai/src/api/client.ts +213 -0
  501. package/connectors/connect-predisai/src/api/example.ts +48 -0
  502. package/connectors/connect-predisai/src/api/index.ts +51 -0
  503. package/connectors/connect-predisai/src/cli/index.ts +254 -0
  504. package/connectors/connect-predisai/src/index.ts +103 -0
  505. package/connectors/connect-predisai/src/types/index.ts +237 -0
  506. package/connectors/connect-predisai/src/utils/auth.ts +274 -0
  507. package/connectors/connect-predisai/src/utils/bulk.ts +212 -0
  508. package/connectors/connect-predisai/src/utils/config.ts +326 -0
  509. package/connectors/connect-predisai/src/utils/output.ts +175 -0
  510. package/connectors/connect-predisai/src/utils/settings.ts +114 -0
  511. package/connectors/connect-predisai/src/utils/storage.ts +198 -0
  512. package/connectors/connect-predisai/tsconfig.json +16 -0
  513. package/connectors/connect-prodia/.env.example +11 -0
  514. package/connectors/connect-prodia/CLAUDE.md +272 -0
  515. package/connectors/connect-prodia/README.md +193 -0
  516. package/connectors/connect-prodia/package.json +51 -0
  517. package/connectors/connect-prodia/scripts/release.ts +179 -0
  518. package/connectors/connect-prodia/src/api/client.ts +213 -0
  519. package/connectors/connect-prodia/src/api/example.ts +48 -0
  520. package/connectors/connect-prodia/src/api/index.ts +51 -0
  521. package/connectors/connect-prodia/src/cli/index.ts +254 -0
  522. package/connectors/connect-prodia/src/index.ts +103 -0
  523. package/connectors/connect-prodia/src/types/index.ts +237 -0
  524. package/connectors/connect-prodia/src/utils/auth.ts +274 -0
  525. package/connectors/connect-prodia/src/utils/bulk.ts +212 -0
  526. package/connectors/connect-prodia/src/utils/config.ts +326 -0
  527. package/connectors/connect-prodia/src/utils/output.ts +175 -0
  528. package/connectors/connect-prodia/src/utils/settings.ts +114 -0
  529. package/connectors/connect-prodia/src/utils/storage.ts +198 -0
  530. package/connectors/connect-prodia/tsconfig.json +16 -0
  531. package/connectors/connect-profitwell/.env.example +11 -0
  532. package/connectors/connect-profitwell/CLAUDE.md +272 -0
  533. package/connectors/connect-profitwell/README.md +193 -0
  534. package/connectors/connect-profitwell/package.json +51 -0
  535. package/connectors/connect-profitwell/scripts/release.ts +179 -0
  536. package/connectors/connect-profitwell/src/api/client.ts +213 -0
  537. package/connectors/connect-profitwell/src/api/example.ts +48 -0
  538. package/connectors/connect-profitwell/src/api/index.ts +51 -0
  539. package/connectors/connect-profitwell/src/cli/index.ts +254 -0
  540. package/connectors/connect-profitwell/src/index.ts +103 -0
  541. package/connectors/connect-profitwell/src/types/index.ts +237 -0
  542. package/connectors/connect-profitwell/src/utils/auth.ts +274 -0
  543. package/connectors/connect-profitwell/src/utils/bulk.ts +212 -0
  544. package/connectors/connect-profitwell/src/utils/config.ts +326 -0
  545. package/connectors/connect-profitwell/src/utils/output.ts +175 -0
  546. package/connectors/connect-profitwell/src/utils/settings.ts +114 -0
  547. package/connectors/connect-profitwell/src/utils/storage.ts +198 -0
  548. package/connectors/connect-profitwell/tsconfig.json +16 -0
  549. package/connectors/connect-projectbubbleproprofsproject/.env.example +11 -0
  550. package/connectors/connect-projectbubbleproprofsproject/CLAUDE.md +272 -0
  551. package/connectors/connect-projectbubbleproprofsproject/README.md +193 -0
  552. package/connectors/connect-projectbubbleproprofsproject/package.json +51 -0
  553. package/connectors/connect-projectbubbleproprofsproject/scripts/release.ts +179 -0
  554. package/connectors/connect-projectbubbleproprofsproject/src/api/client.ts +213 -0
  555. package/connectors/connect-projectbubbleproprofsproject/src/api/example.ts +48 -0
  556. package/connectors/connect-projectbubbleproprofsproject/src/api/index.ts +51 -0
  557. package/connectors/connect-projectbubbleproprofsproject/src/cli/index.ts +254 -0
  558. package/connectors/connect-projectbubbleproprofsproject/src/index.ts +103 -0
  559. package/connectors/connect-projectbubbleproprofsproject/src/types/index.ts +237 -0
  560. package/connectors/connect-projectbubbleproprofsproject/src/utils/auth.ts +274 -0
  561. package/connectors/connect-projectbubbleproprofsproject/src/utils/bulk.ts +212 -0
  562. package/connectors/connect-projectbubbleproprofsproject/src/utils/config.ts +326 -0
  563. package/connectors/connect-projectbubbleproprofsproject/src/utils/output.ts +175 -0
  564. package/connectors/connect-projectbubbleproprofsproject/src/utils/settings.ts +114 -0
  565. package/connectors/connect-projectbubbleproprofsproject/src/utils/storage.ts +198 -0
  566. package/connectors/connect-projectbubbleproprofsproject/tsconfig.json +16 -0
  567. package/connectors/connect-prompthub/.env.example +11 -0
  568. package/connectors/connect-prompthub/CLAUDE.md +272 -0
  569. package/connectors/connect-prompthub/README.md +193 -0
  570. package/connectors/connect-prompthub/package.json +51 -0
  571. package/connectors/connect-prompthub/scripts/release.ts +179 -0
  572. package/connectors/connect-prompthub/src/api/client.ts +213 -0
  573. package/connectors/connect-prompthub/src/api/example.ts +48 -0
  574. package/connectors/connect-prompthub/src/api/index.ts +51 -0
  575. package/connectors/connect-prompthub/src/cli/index.ts +254 -0
  576. package/connectors/connect-prompthub/src/index.ts +103 -0
  577. package/connectors/connect-prompthub/src/types/index.ts +237 -0
  578. package/connectors/connect-prompthub/src/utils/auth.ts +274 -0
  579. package/connectors/connect-prompthub/src/utils/bulk.ts +212 -0
  580. package/connectors/connect-prompthub/src/utils/config.ts +326 -0
  581. package/connectors/connect-prompthub/src/utils/output.ts +175 -0
  582. package/connectors/connect-prompthub/src/utils/settings.ts +114 -0
  583. package/connectors/connect-prompthub/src/utils/storage.ts +198 -0
  584. package/connectors/connect-prompthub/tsconfig.json +16 -0
  585. package/connectors/connect-prospeai/.env.example +11 -0
  586. package/connectors/connect-prospeai/CLAUDE.md +272 -0
  587. package/connectors/connect-prospeai/README.md +193 -0
  588. package/connectors/connect-prospeai/package.json +51 -0
  589. package/connectors/connect-prospeai/scripts/release.ts +179 -0
  590. package/connectors/connect-prospeai/src/api/client.ts +213 -0
  591. package/connectors/connect-prospeai/src/api/example.ts +48 -0
  592. package/connectors/connect-prospeai/src/api/index.ts +51 -0
  593. package/connectors/connect-prospeai/src/cli/index.ts +254 -0
  594. package/connectors/connect-prospeai/src/index.ts +103 -0
  595. package/connectors/connect-prospeai/src/types/index.ts +237 -0
  596. package/connectors/connect-prospeai/src/utils/auth.ts +274 -0
  597. package/connectors/connect-prospeai/src/utils/bulk.ts +212 -0
  598. package/connectors/connect-prospeai/src/utils/config.ts +326 -0
  599. package/connectors/connect-prospeai/src/utils/output.ts +175 -0
  600. package/connectors/connect-prospeai/src/utils/settings.ts +114 -0
  601. package/connectors/connect-prospeai/src/utils/storage.ts +198 -0
  602. package/connectors/connect-prospeai/tsconfig.json +16 -0
  603. package/connectors/connect-pulsetic/.env.example +11 -0
  604. package/connectors/connect-pulsetic/CLAUDE.md +272 -0
  605. package/connectors/connect-pulsetic/README.md +193 -0
  606. package/connectors/connect-pulsetic/package.json +51 -0
  607. package/connectors/connect-pulsetic/scripts/release.ts +179 -0
  608. package/connectors/connect-pulsetic/src/api/client.ts +213 -0
  609. package/connectors/connect-pulsetic/src/api/example.ts +48 -0
  610. package/connectors/connect-pulsetic/src/api/index.ts +51 -0
  611. package/connectors/connect-pulsetic/src/cli/index.ts +254 -0
  612. package/connectors/connect-pulsetic/src/index.ts +103 -0
  613. package/connectors/connect-pulsetic/src/types/index.ts +237 -0
  614. package/connectors/connect-pulsetic/src/utils/auth.ts +274 -0
  615. package/connectors/connect-pulsetic/src/utils/bulk.ts +212 -0
  616. package/connectors/connect-pulsetic/src/utils/config.ts +326 -0
  617. package/connectors/connect-pulsetic/src/utils/output.ts +175 -0
  618. package/connectors/connect-pulsetic/src/utils/settings.ts +114 -0
  619. package/connectors/connect-pulsetic/src/utils/storage.ts +198 -0
  620. package/connectors/connect-pulsetic/tsconfig.json +16 -0
  621. package/connectors/connect-pushbullet/.env.example +11 -0
  622. package/connectors/connect-pushbullet/CLAUDE.md +272 -0
  623. package/connectors/connect-pushbullet/README.md +193 -0
  624. package/connectors/connect-pushbullet/package.json +51 -0
  625. package/connectors/connect-pushbullet/scripts/release.ts +179 -0
  626. package/connectors/connect-pushbullet/src/api/client.ts +213 -0
  627. package/connectors/connect-pushbullet/src/api/example.ts +48 -0
  628. package/connectors/connect-pushbullet/src/api/index.ts +51 -0
  629. package/connectors/connect-pushbullet/src/cli/index.ts +254 -0
  630. package/connectors/connect-pushbullet/src/index.ts +103 -0
  631. package/connectors/connect-pushbullet/src/types/index.ts +237 -0
  632. package/connectors/connect-pushbullet/src/utils/auth.ts +274 -0
  633. package/connectors/connect-pushbullet/src/utils/bulk.ts +212 -0
  634. package/connectors/connect-pushbullet/src/utils/config.ts +326 -0
  635. package/connectors/connect-pushbullet/src/utils/output.ts +175 -0
  636. package/connectors/connect-pushbullet/src/utils/settings.ts +114 -0
  637. package/connectors/connect-pushbullet/src/utils/storage.ts +198 -0
  638. package/connectors/connect-pushbullet/tsconfig.json +16 -0
  639. package/dist/index.js +252 -0
  640. package/package.json +1 -1
@@ -0,0 +1,146 @@
1
+ import type { PlayHTConfig, OutputFormat } from '../types';
2
+ import { PlayHTApiError } from '../types';
3
+
4
+ const DEFAULT_BASE_URL = 'https://api.play.ht/api/v2';
5
+
6
+ export interface RequestOptions {
7
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
8
+ params?: Record<string, string | number | boolean | undefined>;
9
+ body?: Record<string, unknown> | unknown[] | string;
10
+ headers?: Record<string, string>;
11
+ format?: OutputFormat;
12
+ rawResponse?: boolean;
13
+ }
14
+
15
+ export class PlayHTClient {
16
+ private readonly apiKey: string;
17
+ private readonly userId: string;
18
+ private readonly baseUrl: string;
19
+
20
+ constructor(config: PlayHTConfig) {
21
+ if (!config.apiKey) {
22
+ throw new Error('API key is required');
23
+ }
24
+ if (!config.userId) {
25
+ throw new Error('User ID is required');
26
+ }
27
+ this.apiKey = config.apiKey;
28
+ this.userId = config.userId;
29
+ this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;
30
+ }
31
+
32
+ private buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {
33
+ const url = new URL(`${this.baseUrl}${path}`);
34
+
35
+ if (params) {
36
+ Object.entries(params).forEach(([key, value]) => {
37
+ if (value !== undefined && value !== null && value !== '') {
38
+ url.searchParams.append(key, String(value));
39
+ }
40
+ });
41
+ }
42
+
43
+ return url.toString();
44
+ }
45
+
46
+ async request<T>(path: string, options: RequestOptions = {}): Promise<T> {
47
+ const { method = 'GET', params, body, headers = {}, rawResponse = false } = options;
48
+
49
+ const url = this.buildUrl(path, params);
50
+
51
+ // PlayHT requires both Authorization and X-USER-ID headers
52
+ const requestHeaders: Record<string, string> = {
53
+ 'Authorization': `Bearer ${this.apiKey}`,
54
+ 'X-USER-ID': this.userId,
55
+ 'Accept': 'application/json',
56
+ ...headers,
57
+ };
58
+
59
+ if (body && ['POST', 'PUT', 'PATCH'].includes(method)) {
60
+ requestHeaders['Content-Type'] = 'application/json';
61
+ }
62
+
63
+ const fetchOptions: RequestInit = {
64
+ method,
65
+ headers: requestHeaders,
66
+ };
67
+
68
+ if (body && ['POST', 'PUT', 'PATCH'].includes(method)) {
69
+ fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body);
70
+ }
71
+
72
+ const response = await fetch(url, fetchOptions);
73
+
74
+ // Handle 204 No Content
75
+ if (response.status === 204) {
76
+ return {} as T;
77
+ }
78
+
79
+ // For raw response (audio data)
80
+ if (rawResponse) {
81
+ if (!response.ok) {
82
+ const errorText = await response.text();
83
+ throw new PlayHTApiError(errorText || response.statusText, response.status);
84
+ }
85
+ const buffer = await response.arrayBuffer();
86
+ return {
87
+ audio_data: Buffer.from(buffer).toString('base64'),
88
+ content_type: response.headers.get('content-type'),
89
+ } as T;
90
+ }
91
+
92
+ // Parse response
93
+ let data: unknown;
94
+ const contentType = response.headers.get('content-type') || '';
95
+
96
+ if (contentType.includes('application/json')) {
97
+ const text = await response.text();
98
+ if (text) {
99
+ try {
100
+ data = JSON.parse(text);
101
+ } catch {
102
+ data = text;
103
+ }
104
+ }
105
+ } else {
106
+ data = await response.text();
107
+ }
108
+
109
+ // Handle errors
110
+ if (!response.ok) {
111
+ const errorMessage = typeof data === 'object' && data !== null
112
+ ? JSON.stringify(data)
113
+ : String(data || response.statusText);
114
+ throw new PlayHTApiError(errorMessage, response.status);
115
+ }
116
+
117
+ return data as T;
118
+ }
119
+
120
+ async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {
121
+ return this.request<T>(path, { method: 'GET', params });
122
+ }
123
+
124
+ async post<T>(path: string, body?: Record<string, unknown> | unknown[] | string | object, params?: Record<string, string | number | boolean | undefined>): Promise<T> {
125
+ return this.request<T>(path, { method: 'POST', body: body as Record<string, unknown>, params });
126
+ }
127
+
128
+ async postRaw<T>(path: string, body?: Record<string, unknown> | object): Promise<T> {
129
+ return this.request<T>(path, { method: 'POST', body: body as Record<string, unknown>, rawResponse: true });
130
+ }
131
+
132
+ async delete<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {
133
+ return this.request<T>(path, { method: 'DELETE', params });
134
+ }
135
+
136
+ getApiKeyPreview(): string {
137
+ if (this.apiKey.length > 10) {
138
+ return `${this.apiKey.substring(0, 6)}...${this.apiKey.substring(this.apiKey.length - 4)}`;
139
+ }
140
+ return '***';
141
+ }
142
+
143
+ getUserId(): string {
144
+ return this.userId;
145
+ }
146
+ }
@@ -0,0 +1,179 @@
1
+ import type {
2
+ PlayHTConfig,
3
+ VoicesListResponse,
4
+ Voice,
5
+ ClonedVoicesResponse,
6
+ GenerateSpeechOptions,
7
+ GenerateSpeechResponse,
8
+ CloneVoiceOptions,
9
+ InstantCloneOptions,
10
+ CloneVoiceResponse,
11
+ DeleteVoiceResponse,
12
+ } from '../types';
13
+ import { PlayHTClient } from './client';
14
+
15
+ /**
16
+ * PlayHT API Client
17
+ * Text-to-speech API with voice cloning support
18
+ */
19
+ export class PlayHT {
20
+ private readonly client: PlayHTClient;
21
+
22
+ constructor(config: PlayHTConfig) {
23
+ this.client = new PlayHTClient(config);
24
+ }
25
+
26
+ /**
27
+ * Create a client from environment variables
28
+ */
29
+ static fromEnv(): PlayHT {
30
+ const apiKey = process.env.PLAYHT_API_KEY;
31
+ const userId = process.env.PLAYHT_USER_ID;
32
+
33
+ if (!apiKey) {
34
+ throw new Error('PLAYHT_API_KEY environment variable is required');
35
+ }
36
+ if (!userId) {
37
+ throw new Error('PLAYHT_USER_ID environment variable is required');
38
+ }
39
+ return new PlayHT({ apiKey, userId });
40
+ }
41
+
42
+ // ============================================
43
+ // Voice Methods
44
+ // ============================================
45
+
46
+ /**
47
+ * List all stock voices
48
+ */
49
+ async listVoices(): Promise<Voice[]> {
50
+ return this.client.get<Voice[]>('/voices');
51
+ }
52
+
53
+ /**
54
+ * List cloned voices
55
+ */
56
+ async listClonedVoices(): Promise<ClonedVoicesResponse> {
57
+ return this.client.get<ClonedVoicesResponse>('/cloned-voices');
58
+ }
59
+
60
+ /**
61
+ * Get voice by ID
62
+ */
63
+ async getVoice(voiceId: string): Promise<Voice> {
64
+ const voices = await this.listVoices();
65
+ const voice = voices.find(v => v.id === voiceId);
66
+ if (!voice) {
67
+ throw new Error(`Voice not found: ${voiceId}`);
68
+ }
69
+ return voice;
70
+ }
71
+
72
+ // ============================================
73
+ // Speech Generation Methods
74
+ // ============================================
75
+
76
+ /**
77
+ * Generate speech from text
78
+ */
79
+ async generateSpeech(options: GenerateSpeechOptions): Promise<GenerateSpeechResponse> {
80
+ return this.client.post<GenerateSpeechResponse>('/tts', {
81
+ text: options.text,
82
+ voice: options.voice,
83
+ output_format: options.output_format || 'mp3',
84
+ voice_engine: options.voice_engine || 'PlayHT2.0-turbo',
85
+ quality: options.quality || 'medium',
86
+ speed: options.speed,
87
+ sample_rate: options.sample_rate,
88
+ seed: options.seed,
89
+ temperature: options.temperature,
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Generate speech and return audio as Buffer
95
+ */
96
+ async speak(text: string, voice: string, options?: {
97
+ output_format?: 'mp3' | 'wav' | 'ogg' | 'flac' | 'mulaw';
98
+ voice_engine?: 'PlayHT2.0' | 'PlayHT2.0-turbo' | 'PlayHT1.0' | 'Standard';
99
+ quality?: 'draft' | 'low' | 'medium' | 'high' | 'premium';
100
+ speed?: number;
101
+ }): Promise<{ audio: Buffer; contentType: string; url?: string }> {
102
+ const result = await this.generateSpeech({
103
+ text,
104
+ voice,
105
+ output_format: options?.output_format || 'mp3',
106
+ voice_engine: options?.voice_engine || 'PlayHT2.0-turbo',
107
+ quality: options?.quality || 'medium',
108
+ speed: options?.speed,
109
+ });
110
+
111
+ // PlayHT returns a URL to download the audio
112
+ if (result.url) {
113
+ const response = await fetch(result.url);
114
+ const buffer = await response.arrayBuffer();
115
+ return {
116
+ audio: Buffer.from(buffer),
117
+ contentType: response.headers.get('content-type') || 'audio/mpeg',
118
+ url: result.url,
119
+ };
120
+ }
121
+
122
+ throw new Error('No audio URL in response');
123
+ }
124
+
125
+ // ============================================
126
+ // Voice Cloning Methods
127
+ // ============================================
128
+
129
+ /**
130
+ * Clone a voice (high quality, takes longer)
131
+ */
132
+ async cloneVoice(options: CloneVoiceOptions): Promise<CloneVoiceResponse> {
133
+ return this.client.post<CloneVoiceResponse>('/cloned-voices', {
134
+ voice_name: options.voice_name,
135
+ sample_file_url: options.sample_file_url,
136
+ mime_type: options.mime_type,
137
+ });
138
+ }
139
+
140
+ /**
141
+ * Instant voice clone (faster but lower quality)
142
+ */
143
+ async instantCloneVoice(options: InstantCloneOptions): Promise<CloneVoiceResponse> {
144
+ return this.client.post<CloneVoiceResponse>('/cloned-voices/instant', {
145
+ voice_name: options.voice_name,
146
+ sample_file_url: options.sample_file_url,
147
+ });
148
+ }
149
+
150
+ /**
151
+ * Delete a cloned voice
152
+ */
153
+ async deleteClonedVoice(voiceId: string): Promise<DeleteVoiceResponse> {
154
+ return this.client.delete<DeleteVoiceResponse>(`/cloned-voices/${voiceId}`);
155
+ }
156
+
157
+ /**
158
+ * Get a preview of the API key
159
+ */
160
+ getApiKeyPreview(): string {
161
+ return this.client.getApiKeyPreview();
162
+ }
163
+
164
+ /**
165
+ * Get the user ID
166
+ */
167
+ getUserId(): string {
168
+ return this.client.getUserId();
169
+ }
170
+
171
+ /**
172
+ * Get the underlying client for direct API access
173
+ */
174
+ getClient(): PlayHTClient {
175
+ return this.client;
176
+ }
177
+ }
178
+
179
+ export { PlayHTClient } from './client';
@@ -0,0 +1,384 @@
1
+ #!/usr/bin/env bun
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { PlayHT } from '../api';
5
+ import {
6
+ getApiKey,
7
+ setApiKey,
8
+ getUserId,
9
+ setUserId,
10
+ clearConfig,
11
+ getConfigDir,
12
+ setProfileOverride,
13
+ getCurrentProfile,
14
+ setCurrentProfile,
15
+ listProfiles,
16
+ createProfile,
17
+ deleteProfile,
18
+ profileExists,
19
+ loadProfile,
20
+ } from '../utils/config';
21
+ import type { OutputFormat } from '../utils/output';
22
+ import { success, error, info, print } from '../utils/output';
23
+
24
+ const CONNECTOR_NAME = 'connect-playht';
25
+ const VERSION = '0.0.1';
26
+
27
+ const program = new Command();
28
+
29
+ program
30
+ .name(CONNECTOR_NAME)
31
+ .description('PlayHT connector CLI - Text-to-speech with voice cloning support')
32
+ .version(VERSION)
33
+ .option('-k, --api-key <key>', 'API key (overrides config)')
34
+ .option('-u, --user-id <id>', 'User ID (overrides config)')
35
+ .option('-f, --format <format>', 'Output format (json, pretty)', 'pretty')
36
+ .option('-p, --profile <profile>', 'Use a specific profile')
37
+ .hook('preAction', (thisCommand) => {
38
+ const opts = thisCommand.opts();
39
+ if (opts.profile) {
40
+ if (!profileExists(opts.profile)) {
41
+ error(`Profile "${opts.profile}" does not exist. Create it with "${CONNECTOR_NAME} profile create ${opts.profile}"`);
42
+ process.exit(1);
43
+ }
44
+ setProfileOverride(opts.profile);
45
+ }
46
+ if (opts.apiKey) {
47
+ process.env.PLAYHT_API_KEY = opts.apiKey;
48
+ }
49
+ if (opts.userId) {
50
+ process.env.PLAYHT_USER_ID = opts.userId;
51
+ }
52
+ });
53
+
54
+ function getFormat(cmd: Command): OutputFormat {
55
+ const parent = cmd.parent;
56
+ return (parent?.opts().format || 'pretty') as OutputFormat;
57
+ }
58
+
59
+ function getClient(): PlayHT {
60
+ const apiKey = getApiKey();
61
+ const userId = getUserId();
62
+ if (!apiKey) {
63
+ error(`No API key configured. Run "${CONNECTOR_NAME} config set-key <key>" or set PLAYHT_API_KEY environment variable.`);
64
+ process.exit(1);
65
+ }
66
+ if (!userId) {
67
+ error(`No User ID configured. Run "${CONNECTOR_NAME} config set-user <id>" or set PLAYHT_USER_ID environment variable.`);
68
+ process.exit(1);
69
+ }
70
+ return new PlayHT({ apiKey, userId });
71
+ }
72
+
73
+ // ============================================
74
+ // Profile Commands
75
+ // ============================================
76
+ const profileCmd = program
77
+ .command('profile')
78
+ .description('Manage configuration profiles');
79
+
80
+ profileCmd
81
+ .command('list')
82
+ .description('List all profiles')
83
+ .action(() => {
84
+ const profiles = listProfiles();
85
+ const current = getCurrentProfile();
86
+ if (profiles.length === 0) {
87
+ info('No profiles found. Use "profile create <name>" to create one.');
88
+ return;
89
+ }
90
+ success(`Profiles:`);
91
+ profiles.forEach(p => {
92
+ const isActive = p === current ? chalk.green(' (active)') : '';
93
+ console.log(` ${p}${isActive}`);
94
+ });
95
+ });
96
+
97
+ profileCmd
98
+ .command('use <name>')
99
+ .description('Switch to a profile')
100
+ .action((name: string) => {
101
+ if (!profileExists(name)) {
102
+ error(`Profile "${name}" does not exist. Create it with "profile create ${name}"`);
103
+ process.exit(1);
104
+ }
105
+ setCurrentProfile(name);
106
+ success(`Switched to profile: ${name}`);
107
+ });
108
+
109
+ profileCmd
110
+ .command('create <name>')
111
+ .description('Create a new profile')
112
+ .option('--api-key <key>', 'API key')
113
+ .option('--user-id <id>', 'User ID')
114
+ .option('--use', 'Switch to this profile after creation')
115
+ .action((name: string, opts) => {
116
+ if (profileExists(name)) {
117
+ error(`Profile "${name}" already exists`);
118
+ process.exit(1);
119
+ }
120
+ createProfile(name, { apiKey: opts.apiKey, userId: opts.userId });
121
+ success(`Profile "${name}" created`);
122
+ if (opts.use) {
123
+ setCurrentProfile(name);
124
+ info(`Switched to profile: ${name}`);
125
+ }
126
+ });
127
+
128
+ profileCmd
129
+ .command('delete <name>')
130
+ .description('Delete a profile')
131
+ .action((name: string) => {
132
+ if (name === 'default') {
133
+ error('Cannot delete the default profile');
134
+ process.exit(1);
135
+ }
136
+ if (deleteProfile(name)) {
137
+ success(`Profile "${name}" deleted`);
138
+ } else {
139
+ error(`Profile "${name}" not found`);
140
+ process.exit(1);
141
+ }
142
+ });
143
+
144
+ profileCmd
145
+ .command('show [name]')
146
+ .description('Show profile configuration')
147
+ .action((name?: string) => {
148
+ const profileName = name || getCurrentProfile();
149
+ const config = loadProfile(profileName);
150
+ const active = getCurrentProfile();
151
+ console.log(chalk.bold(`Profile: ${profileName}${profileName === active ? chalk.green(' (active)') : ''}`));
152
+ info(`API Key: ${config.apiKey ? `${config.apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
153
+ info(`User ID: ${config.userId || chalk.gray('not set')}`);
154
+ });
155
+
156
+ // ============================================
157
+ // Config Commands
158
+ // ============================================
159
+ const configCmd = program
160
+ .command('config')
161
+ .description('Manage CLI configuration (for active profile)');
162
+
163
+ configCmd
164
+ .command('set-key <apiKey>')
165
+ .description('Set API key')
166
+ .action((apiKey: string) => {
167
+ setApiKey(apiKey);
168
+ success(`API key saved to profile: ${getCurrentProfile()}`);
169
+ });
170
+
171
+ configCmd
172
+ .command('set-user <userId>')
173
+ .description('Set User ID')
174
+ .action((userId: string) => {
175
+ setUserId(userId);
176
+ success(`User ID saved to profile: ${getCurrentProfile()}`);
177
+ });
178
+
179
+ configCmd
180
+ .command('show')
181
+ .description('Show current configuration')
182
+ .action(() => {
183
+ const profileName = getCurrentProfile();
184
+ const apiKey = getApiKey();
185
+ const userId = getUserId();
186
+ console.log(chalk.bold(`Active Profile: ${profileName}`));
187
+ info(`Config directory: ${getConfigDir()}`);
188
+ info(`API Key: ${apiKey ? `${apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
189
+ info(`User ID: ${userId || chalk.gray('not set')}`);
190
+ });
191
+
192
+ configCmd
193
+ .command('clear')
194
+ .description('Clear configuration for active profile')
195
+ .action(() => {
196
+ clearConfig();
197
+ success(`Configuration cleared for profile: ${getCurrentProfile()}`);
198
+ });
199
+
200
+ // ============================================
201
+ // Voice Commands
202
+ // ============================================
203
+ const voiceCmd = program
204
+ .command('voice')
205
+ .description('Voice management commands');
206
+
207
+ voiceCmd
208
+ .command('list')
209
+ .description('List all stock voices')
210
+ .option('-l, --language <lang>', 'Filter by language')
211
+ .option('-g, --gender <gender>', 'Filter by gender')
212
+ .action(async (opts) => {
213
+ try {
214
+ const client = getClient();
215
+ let voices = await client.listVoices();
216
+
217
+ if (opts.language) {
218
+ voices = voices.filter(v =>
219
+ v.language?.toLowerCase().includes(opts.language.toLowerCase()) ||
220
+ v.language_code?.toLowerCase().includes(opts.language.toLowerCase())
221
+ );
222
+ }
223
+ if (opts.gender) {
224
+ voices = voices.filter(v =>
225
+ v.gender?.toLowerCase() === opts.gender.toLowerCase()
226
+ );
227
+ }
228
+
229
+ const format = getFormat(voiceCmd);
230
+ if (format === 'json') {
231
+ print(voices, format);
232
+ } else {
233
+ success(`Stock Voices (${voices.length}):`);
234
+ voices.slice(0, 20).forEach(v => {
235
+ const gender = v.gender ? chalk.cyan(` [${v.gender}]`) : '';
236
+ const lang = v.language ? chalk.gray(` (${v.language})`) : '';
237
+ console.log(` ${v.name}${gender}${lang}`);
238
+ console.log(` ID: ${v.id}`);
239
+ });
240
+ if (voices.length > 20) {
241
+ info(`... and ${voices.length - 20} more voices`);
242
+ }
243
+ }
244
+ } catch (err) {
245
+ error(String(err));
246
+ process.exit(1);
247
+ }
248
+ });
249
+
250
+ voiceCmd
251
+ .command('cloned')
252
+ .description('List cloned voices')
253
+ .action(async () => {
254
+ try {
255
+ const client = getClient();
256
+ const result = await client.listClonedVoices();
257
+ const format = getFormat(voiceCmd);
258
+ if (format === 'json') {
259
+ print(result, format);
260
+ } else {
261
+ success(`Cloned Voices (${result.voices.length}):`);
262
+ result.voices.forEach(v => {
263
+ const type = chalk.cyan(` [${v.type}]`);
264
+ console.log(` ${v.name}${type}`);
265
+ console.log(` ID: ${v.id}`);
266
+ });
267
+ }
268
+ } catch (err) {
269
+ error(String(err));
270
+ process.exit(1);
271
+ }
272
+ });
273
+
274
+ voiceCmd
275
+ .command('clone')
276
+ .description('Clone a voice from audio sample')
277
+ .requiredOption('-n, --name <name>', 'Name for the cloned voice')
278
+ .option('-u, --url <url>', 'URL to audio sample')
279
+ .option('--instant', 'Use instant cloning (faster but lower quality)')
280
+ .action(async (opts) => {
281
+ try {
282
+ const client = getClient();
283
+ let result;
284
+
285
+ if (opts.instant) {
286
+ if (!opts.url) {
287
+ error('--url is required for instant cloning');
288
+ process.exit(1);
289
+ }
290
+ result = await client.instantCloneVoice({
291
+ voice_name: opts.name,
292
+ sample_file_url: opts.url,
293
+ });
294
+ } else {
295
+ result = await client.cloneVoice({
296
+ voice_name: opts.name,
297
+ sample_file_url: opts.url,
298
+ });
299
+ }
300
+
301
+ const format = getFormat(voiceCmd);
302
+ if (format === 'json') {
303
+ print(result, format);
304
+ } else {
305
+ success('Voice cloned successfully!');
306
+ info(`Name: ${result.name}`);
307
+ info(`ID: ${result.id}`);
308
+ info(`Status: ${result.status}`);
309
+ }
310
+ } catch (err) {
311
+ error(String(err));
312
+ process.exit(1);
313
+ }
314
+ });
315
+
316
+ voiceCmd
317
+ .command('delete <voiceId>')
318
+ .description('Delete a cloned voice')
319
+ .action(async (voiceId: string) => {
320
+ try {
321
+ const client = getClient();
322
+ await client.deleteClonedVoice(voiceId);
323
+ success('Voice deleted successfully');
324
+ } catch (err) {
325
+ error(String(err));
326
+ process.exit(1);
327
+ }
328
+ });
329
+
330
+ // ============================================
331
+ // Speech Commands
332
+ // ============================================
333
+ const speakCmd = program
334
+ .command('speak')
335
+ .description('Text-to-speech commands');
336
+
337
+ speakCmd
338
+ .command('generate <text>')
339
+ .description('Generate speech from text')
340
+ .requiredOption('-v, --voice <voiceId>', 'Voice ID to use')
341
+ .option('-o, --output <file>', 'Output file path')
342
+ .option('-e, --encoding <format>', 'Audio format (mp3, wav, ogg, flac, mulaw)', 'mp3')
343
+ .option('--engine <engine>', 'Voice engine (PlayHT2.0, PlayHT2.0-turbo, PlayHT1.0, Standard)', 'PlayHT2.0-turbo')
344
+ .option('-q, --quality <quality>', 'Quality (draft, low, medium, high, premium)', 'medium')
345
+ .option('-s, --speed <speed>', 'Speech speed (0.5-2.0)', '1.0')
346
+ .action(async (text: string, opts) => {
347
+ try {
348
+ const client = getClient();
349
+ const result = await client.speak(text, opts.voice, {
350
+ output_format: opts.encoding as any,
351
+ voice_engine: opts.engine as any,
352
+ quality: opts.quality as any,
353
+ speed: parseFloat(opts.speed),
354
+ });
355
+
356
+ if (opts.output) {
357
+ const fs = await import('fs');
358
+ fs.writeFileSync(opts.output, result.audio);
359
+ success(`Audio saved to ${opts.output}`);
360
+ info(`Size: ${result.audio.length} bytes`);
361
+ if (result.url) info(`URL: ${result.url}`);
362
+ } else {
363
+ const format = getFormat(speakCmd);
364
+ if (format === 'json') {
365
+ print({
366
+ contentType: result.contentType,
367
+ audioSize: result.audio.length,
368
+ url: result.url,
369
+ }, format);
370
+ } else {
371
+ success('Speech generated');
372
+ info(`Content-Type: ${result.contentType}`);
373
+ info(`Audio size: ${result.audio.length} bytes`);
374
+ if (result.url) info(`URL: ${result.url}`);
375
+ info('Use --output <file> to save the audio');
376
+ }
377
+ }
378
+ } catch (err) {
379
+ error(String(err));
380
+ process.exit(1);
381
+ }
382
+ });
383
+
384
+ program.parse();