@zapier/zapier-sdk 0.4.0 → 0.5.0

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 (374) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/api/auth.d.ts +9 -0
  3. package/dist/api/auth.d.ts.map +1 -0
  4. package/dist/api/auth.js +25 -0
  5. package/dist/api/client.d.ts +9 -0
  6. package/dist/api/client.d.ts.map +1 -0
  7. package/dist/api/client.js +322 -0
  8. package/dist/api/debug.d.ts +13 -0
  9. package/dist/api/debug.d.ts.map +1 -0
  10. package/dist/api/debug.js +55 -0
  11. package/dist/api/index.d.ts +29 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +41 -0
  14. package/dist/api/polling.d.ts +16 -0
  15. package/dist/api/polling.d.ts.map +1 -0
  16. package/dist/api/polling.js +45 -0
  17. package/dist/api/schemas.d.ts +2473 -0
  18. package/dist/api/schemas.d.ts.map +1 -0
  19. package/dist/api/schemas.js +355 -0
  20. package/dist/api/types.d.ts +75 -0
  21. package/dist/api/types.d.ts.map +1 -0
  22. package/dist/api/types.js +11 -0
  23. package/dist/auth.d.ts +34 -0
  24. package/dist/auth.d.ts.map +1 -0
  25. package/dist/auth.js +47 -0
  26. package/dist/constants.d.ts +10 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +9 -0
  29. package/dist/index.cjs +2134 -1444
  30. package/dist/index.d.mts +2456 -584
  31. package/dist/index.d.ts +17 -840
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +20 -0
  34. package/dist/index.mjs +2118 -1428
  35. package/dist/plugins/api/index.d.ts +14 -0
  36. package/dist/plugins/api/index.d.ts.map +1 -0
  37. package/dist/plugins/api/index.js +21 -0
  38. package/dist/plugins/apps/index.d.ts +11 -0
  39. package/dist/plugins/apps/index.d.ts.map +1 -0
  40. package/dist/plugins/apps/index.js +91 -0
  41. package/dist/plugins/apps/types.d.ts +30 -0
  42. package/dist/plugins/apps/types.d.ts.map +1 -0
  43. package/dist/plugins/apps/types.js +2 -0
  44. package/dist/plugins/fetch/index.d.ts +21 -0
  45. package/dist/plugins/fetch/index.d.ts.map +1 -0
  46. package/dist/plugins/fetch/index.js +20 -0
  47. package/dist/plugins/findFirstAuthentication/index.d.ts +20 -0
  48. package/dist/plugins/findFirstAuthentication/index.d.ts.map +1 -0
  49. package/dist/plugins/findFirstAuthentication/index.js +24 -0
  50. package/dist/plugins/findFirstAuthentication/index.test.d.ts +2 -0
  51. package/dist/plugins/findFirstAuthentication/index.test.d.ts.map +1 -0
  52. package/dist/plugins/findFirstAuthentication/index.test.js +171 -0
  53. package/dist/plugins/findFirstAuthentication/schemas.d.ts +29 -0
  54. package/dist/plugins/findFirstAuthentication/schemas.d.ts.map +1 -0
  55. package/dist/plugins/findFirstAuthentication/schemas.js +18 -0
  56. package/dist/plugins/findUniqueAuthentication/index.d.ts +20 -0
  57. package/dist/plugins/findUniqueAuthentication/index.d.ts.map +1 -0
  58. package/dist/plugins/findUniqueAuthentication/index.js +31 -0
  59. package/dist/plugins/findUniqueAuthentication/index.test.d.ts +2 -0
  60. package/dist/plugins/findUniqueAuthentication/index.test.d.ts.map +1 -0
  61. package/dist/plugins/findUniqueAuthentication/index.test.js +152 -0
  62. package/dist/plugins/findUniqueAuthentication/schemas.d.ts +29 -0
  63. package/dist/plugins/findUniqueAuthentication/schemas.d.ts.map +1 -0
  64. package/dist/plugins/findUniqueAuthentication/schemas.js +18 -0
  65. package/dist/plugins/getAction/index.d.ts +23 -0
  66. package/dist/plugins/getAction/index.d.ts.map +1 -0
  67. package/dist/plugins/getAction/index.js +28 -0
  68. package/dist/plugins/getAction/index.test.d.ts +2 -0
  69. package/dist/plugins/getAction/index.test.d.ts.map +1 -0
  70. package/dist/plugins/getAction/index.test.js +186 -0
  71. package/dist/plugins/getAction/schemas.d.ts +23 -0
  72. package/dist/plugins/getAction/schemas.d.ts.map +1 -0
  73. package/dist/plugins/getAction/schemas.js +10 -0
  74. package/dist/plugins/getApp/index.d.ts +22 -0
  75. package/dist/plugins/getApp/index.d.ts.map +1 -0
  76. package/dist/plugins/getApp/index.js +39 -0
  77. package/dist/plugins/getApp/index.test.d.ts +2 -0
  78. package/dist/plugins/getApp/index.test.d.ts.map +1 -0
  79. package/dist/plugins/getApp/index.test.js +100 -0
  80. package/dist/plugins/getApp/schemas.d.ts +18 -0
  81. package/dist/plugins/getApp/schemas.d.ts.map +1 -0
  82. package/dist/plugins/getApp/schemas.js +10 -0
  83. package/dist/plugins/getAuthentication/index.d.ts +22 -0
  84. package/dist/plugins/getAuthentication/index.d.ts.map +1 -0
  85. package/dist/plugins/getAuthentication/index.js +41 -0
  86. package/dist/plugins/getAuthentication/index.test.d.ts +2 -0
  87. package/dist/plugins/getAuthentication/index.test.d.ts.map +1 -0
  88. package/dist/plugins/getAuthentication/index.test.js +205 -0
  89. package/dist/plugins/getAuthentication/schemas.d.ts +17 -0
  90. package/dist/plugins/getAuthentication/schemas.d.ts.map +1 -0
  91. package/dist/plugins/getAuthentication/schemas.js +11 -0
  92. package/dist/plugins/getProfile/index.d.ts +23 -0
  93. package/dist/plugins/getProfile/index.d.ts.map +1 -0
  94. package/dist/plugins/getProfile/index.js +29 -0
  95. package/dist/plugins/getProfile/schemas.d.ts +13 -0
  96. package/dist/plugins/getProfile/schemas.d.ts.map +1 -0
  97. package/dist/plugins/getProfile/schemas.js +5 -0
  98. package/dist/plugins/listActions/index.d.ts +28 -0
  99. package/dist/plugins/listActions/index.d.ts.map +1 -0
  100. package/dist/plugins/listActions/index.js +61 -0
  101. package/dist/plugins/listActions/index.test.d.ts +2 -0
  102. package/dist/plugins/listActions/index.test.d.ts.map +1 -0
  103. package/dist/plugins/listActions/index.test.js +467 -0
  104. package/dist/plugins/listActions/schemas.d.ts +29 -0
  105. package/dist/plugins/listActions/schemas.d.ts.map +1 -0
  106. package/dist/plugins/listActions/schemas.js +21 -0
  107. package/dist/plugins/listApps/index.d.ts +28 -0
  108. package/dist/plugins/listApps/index.d.ts.map +1 -0
  109. package/dist/plugins/listApps/index.js +62 -0
  110. package/dist/plugins/listApps/index.test.d.ts +2 -0
  111. package/dist/plugins/listApps/index.test.d.ts.map +1 -0
  112. package/dist/plugins/listApps/index.test.js +313 -0
  113. package/dist/plugins/listApps/schemas.d.ts +30 -0
  114. package/dist/plugins/listApps/schemas.d.ts.map +1 -0
  115. package/dist/plugins/listApps/schemas.js +23 -0
  116. package/dist/plugins/listAuthentications/index.d.ts +28 -0
  117. package/dist/plugins/listAuthentications/index.d.ts.map +1 -0
  118. package/dist/plugins/listAuthentications/index.js +77 -0
  119. package/dist/plugins/listAuthentications/index.test.d.ts +2 -0
  120. package/dist/plugins/listAuthentications/index.test.d.ts.map +1 -0
  121. package/dist/plugins/listAuthentications/index.test.js +564 -0
  122. package/dist/plugins/listAuthentications/schemas.d.ts +38 -0
  123. package/dist/plugins/listAuthentications/schemas.d.ts.map +1 -0
  124. package/dist/plugins/listAuthentications/schemas.js +28 -0
  125. package/dist/plugins/listInputFields/index.d.ts +28 -0
  126. package/dist/plugins/listInputFields/index.d.ts.map +1 -0
  127. package/dist/plugins/listInputFields/index.js +133 -0
  128. package/dist/plugins/listInputFields/index.test.d.ts +2 -0
  129. package/dist/plugins/listInputFields/index.test.d.ts.map +1 -0
  130. package/dist/plugins/listInputFields/index.test.js +325 -0
  131. package/dist/plugins/listInputFields/schemas.d.ts +38 -0
  132. package/dist/plugins/listInputFields/schemas.d.ts.map +1 -0
  133. package/dist/plugins/listInputFields/schemas.js +22 -0
  134. package/dist/plugins/registry/index.d.ts +11 -0
  135. package/dist/plugins/registry/index.d.ts.map +1 -0
  136. package/dist/plugins/registry/index.js +14 -0
  137. package/dist/plugins/request/index.d.ts +19 -0
  138. package/dist/plugins/request/index.d.ts.map +1 -0
  139. package/dist/plugins/request/index.js +62 -0
  140. package/dist/plugins/request/index.test.d.ts +2 -0
  141. package/dist/plugins/request/index.test.d.ts.map +1 -0
  142. package/dist/plugins/request/index.test.js +256 -0
  143. package/dist/plugins/request/schemas.d.ts +69 -0
  144. package/dist/plugins/request/schemas.d.ts.map +1 -0
  145. package/dist/plugins/request/schemas.js +42 -0
  146. package/dist/plugins/runAction/index.d.ts +28 -0
  147. package/dist/plugins/runAction/index.d.ts.map +1 -0
  148. package/dist/plugins/runAction/index.js +86 -0
  149. package/dist/plugins/runAction/index.test.d.ts +2 -0
  150. package/dist/plugins/runAction/index.test.d.ts.map +1 -0
  151. package/dist/plugins/runAction/index.test.js +320 -0
  152. package/dist/plugins/runAction/schemas.d.ts +37 -0
  153. package/dist/plugins/runAction/schemas.d.ts.map +1 -0
  154. package/dist/plugins/runAction/schemas.js +22 -0
  155. package/dist/resolvers/actionKey.d.ts +9 -0
  156. package/dist/resolvers/actionKey.d.ts.map +1 -0
  157. package/dist/resolvers/actionKey.js +19 -0
  158. package/dist/resolvers/actionType.d.ts +9 -0
  159. package/dist/resolvers/actionType.d.ts.map +1 -0
  160. package/dist/resolvers/actionType.js +22 -0
  161. package/dist/resolvers/appKey.d.ts +7 -0
  162. package/dist/resolvers/appKey.d.ts.map +1 -0
  163. package/dist/resolvers/appKey.js +5 -0
  164. package/dist/resolvers/authenticationId.d.ts +9 -0
  165. package/dist/resolvers/authenticationId.d.ts.map +1 -0
  166. package/dist/resolvers/authenticationId.js +33 -0
  167. package/dist/resolvers/index.d.ts +40 -0
  168. package/dist/resolvers/index.d.ts.map +1 -0
  169. package/dist/resolvers/index.js +91 -0
  170. package/dist/resolvers/inputs.d.ts +8 -0
  171. package/dist/resolvers/inputs.d.ts.map +1 -0
  172. package/dist/resolvers/inputs.js +14 -0
  173. package/dist/schemas/Action.d.ts +243 -0
  174. package/dist/schemas/Action.d.ts.map +1 -0
  175. package/dist/schemas/Action.js +34 -0
  176. package/dist/schemas/App.d.ts +26 -0
  177. package/dist/schemas/App.d.ts.map +1 -0
  178. package/dist/schemas/App.js +22 -0
  179. package/dist/schemas/Auth.d.ts +161 -0
  180. package/dist/schemas/Auth.d.ts.map +1 -0
  181. package/dist/schemas/Auth.js +41 -0
  182. package/dist/schemas/Field.d.ts +144 -0
  183. package/dist/schemas/Field.d.ts.map +1 -0
  184. package/dist/schemas/Field.js +105 -0
  185. package/dist/schemas/UserProfile.d.ts +163 -0
  186. package/dist/schemas/UserProfile.d.ts.map +1 -0
  187. package/dist/schemas/UserProfile.js +29 -0
  188. package/dist/sdk.d.ts +10 -0
  189. package/dist/sdk.d.ts.map +1 -0
  190. package/dist/sdk.js +94 -0
  191. package/dist/sdk.test.d.ts +2 -0
  192. package/dist/sdk.test.d.ts.map +1 -0
  193. package/dist/sdk.test.js +135 -0
  194. package/dist/types/domain.d.ts +36 -0
  195. package/dist/types/domain.d.ts.map +1 -0
  196. package/dist/types/domain.js +1 -0
  197. package/dist/types/domain.test.d.ts +2 -0
  198. package/dist/types/domain.test.d.ts.map +1 -0
  199. package/dist/types/domain.test.js +39 -0
  200. package/dist/types/errors.d.ts +143 -0
  201. package/dist/types/errors.d.ts.map +1 -0
  202. package/dist/types/errors.js +187 -0
  203. package/dist/types/events.d.ts +38 -0
  204. package/dist/types/events.d.ts.map +1 -0
  205. package/dist/types/events.js +7 -0
  206. package/dist/types/functions.d.ts +26 -0
  207. package/dist/types/functions.d.ts.map +1 -0
  208. package/dist/types/functions.js +4 -0
  209. package/dist/types/plugin.d.ts +61 -0
  210. package/dist/types/plugin.d.ts.map +1 -0
  211. package/dist/types/plugin.js +9 -0
  212. package/dist/types/properties.d.ts +22 -0
  213. package/dist/types/properties.d.ts.map +1 -0
  214. package/dist/types/properties.js +50 -0
  215. package/dist/types/sdk.d.ts +43 -0
  216. package/dist/types/sdk.d.ts.map +1 -0
  217. package/dist/types/sdk.js +4 -0
  218. package/dist/utils/array-utils.d.ts +31 -0
  219. package/dist/utils/array-utils.d.ts.map +1 -0
  220. package/dist/utils/array-utils.js +36 -0
  221. package/dist/utils/array-utils.test.d.ts +2 -0
  222. package/dist/utils/array-utils.test.d.ts.map +1 -0
  223. package/dist/utils/array-utils.test.js +107 -0
  224. package/dist/utils/domain-utils.d.ts +78 -0
  225. package/dist/utils/domain-utils.d.ts.map +1 -0
  226. package/dist/utils/domain-utils.js +218 -0
  227. package/dist/utils/domain-utils.test.d.ts +2 -0
  228. package/dist/utils/domain-utils.test.d.ts.map +1 -0
  229. package/dist/utils/domain-utils.test.js +192 -0
  230. package/dist/utils/function-utils.d.ts +45 -0
  231. package/dist/utils/function-utils.d.ts.map +1 -0
  232. package/dist/utils/function-utils.js +158 -0
  233. package/dist/utils/function-utils.test.d.ts +2 -0
  234. package/dist/utils/function-utils.test.d.ts.map +1 -0
  235. package/dist/utils/function-utils.test.js +110 -0
  236. package/dist/utils/pagination-utils.d.ts +37 -0
  237. package/dist/utils/pagination-utils.d.ts.map +1 -0
  238. package/dist/utils/pagination-utils.js +165 -0
  239. package/dist/utils/pagination-utils.test.d.ts +17 -0
  240. package/dist/utils/pagination-utils.test.d.ts.map +1 -0
  241. package/dist/utils/pagination-utils.test.js +461 -0
  242. package/dist/utils/schema-utils.d.ts +45 -0
  243. package/dist/utils/schema-utils.d.ts.map +1 -0
  244. package/dist/utils/schema-utils.js +65 -0
  245. package/dist/utils/validation.d.ts +4 -0
  246. package/dist/utils/validation.d.ts.map +1 -0
  247. package/dist/utils/validation.js +30 -0
  248. package/dist/utils/validation.test.d.ts +2 -0
  249. package/dist/utils/validation.test.d.ts.map +1 -0
  250. package/dist/utils/validation.test.js +43 -0
  251. package/package.json +12 -3
  252. package/src/api/client.ts +403 -167
  253. package/src/api/debug.ts +10 -1
  254. package/src/api/index.ts +0 -2
  255. package/src/api/polling.ts +31 -14
  256. package/src/api/schemas.ts +387 -0
  257. package/src/api/types.ts +73 -138
  258. package/src/constants.ts +10 -0
  259. package/src/index.ts +45 -20
  260. package/src/plugins/api/index.ts +47 -0
  261. package/src/plugins/apps/index.ts +36 -31
  262. package/src/plugins/apps/types.ts +24 -12
  263. package/src/plugins/fetch/index.ts +58 -0
  264. package/src/plugins/findFirstAuthentication/index.test.ts +206 -0
  265. package/src/plugins/findFirstAuthentication/index.ts +55 -0
  266. package/src/plugins/findFirstAuthentication/schemas.ts +41 -0
  267. package/src/plugins/findUniqueAuthentication/index.test.ts +197 -0
  268. package/src/plugins/findUniqueAuthentication/index.ts +72 -0
  269. package/src/plugins/findUniqueAuthentication/schemas.ts +42 -0
  270. package/src/plugins/getAction/index.test.ts +239 -0
  271. package/src/plugins/getAction/index.ts +57 -0
  272. package/src/plugins/getAction/schemas.ts +33 -0
  273. package/src/plugins/getApp/index.test.ts +127 -0
  274. package/src/plugins/getApp/index.ts +66 -0
  275. package/src/plugins/getApp/schemas.ts +38 -0
  276. package/src/plugins/getAuthentication/index.test.ts +284 -0
  277. package/src/plugins/getAuthentication/index.ts +86 -0
  278. package/src/plugins/getAuthentication/schemas.ts +31 -0
  279. package/src/plugins/getProfile/index.ts +55 -0
  280. package/src/plugins/getProfile/schemas.ts +26 -0
  281. package/src/plugins/listActions/index.test.ts +582 -0
  282. package/src/plugins/listActions/index.ts +115 -0
  283. package/src/plugins/listActions/schemas.ts +54 -0
  284. package/src/plugins/listApps/index.test.ts +357 -0
  285. package/src/plugins/listApps/index.ts +121 -0
  286. package/src/plugins/listApps/schemas.ts +49 -0
  287. package/src/plugins/listAuthentications/index.test.ts +709 -0
  288. package/src/plugins/listAuthentications/index.ts +136 -0
  289. package/src/plugins/listAuthentications/schemas.ts +60 -0
  290. package/src/plugins/listInputFields/index.test.ts +408 -0
  291. package/src/plugins/listInputFields/index.ts +204 -0
  292. package/src/plugins/listInputFields/schemas.ts +56 -0
  293. package/src/plugins/registry/index.ts +30 -0
  294. package/src/plugins/request/index.test.ts +329 -0
  295. package/src/plugins/request/index.ts +103 -0
  296. package/src/plugins/request/schemas.ts +64 -0
  297. package/src/plugins/runAction/index.test.ts +387 -0
  298. package/src/plugins/runAction/index.ts +176 -0
  299. package/src/plugins/runAction/schemas.ts +53 -0
  300. package/src/resolvers/actionKey.ts +6 -4
  301. package/src/resolvers/actionType.ts +7 -2
  302. package/src/resolvers/appKey.ts +1 -1
  303. package/src/resolvers/authenticationId.ts +12 -3
  304. package/src/resolvers/inputs.ts +3 -1
  305. package/src/schemas/Action.ts +18 -12
  306. package/src/schemas/App.ts +11 -19
  307. package/src/schemas/Auth.ts +18 -13
  308. package/src/schemas/Field.ts +106 -11
  309. package/src/schemas/UserProfile.ts +43 -0
  310. package/src/sdk.test.ts +212 -0
  311. package/src/sdk.ts +133 -105
  312. package/src/types/domain.test.ts +50 -0
  313. package/src/types/domain.ts +43 -75
  314. package/src/types/errors.ts +275 -0
  315. package/src/types/functions.ts +27 -0
  316. package/src/types/optional-zapier-sdk-cli-login.d.ts +37 -0
  317. package/src/types/plugin.ts +105 -0
  318. package/src/types/properties.ts +4 -3
  319. package/src/types/sdk.ts +71 -46
  320. package/src/utils/array-utils.test.ts +131 -0
  321. package/src/utils/array-utils.ts +41 -0
  322. package/src/utils/domain-utils.test.ts +239 -0
  323. package/src/utils/domain-utils.ts +283 -0
  324. package/src/utils/function-utils.test.ts +141 -0
  325. package/src/utils/function-utils.ts +245 -0
  326. package/src/utils/pagination-utils.test.ts +620 -0
  327. package/src/utils/pagination-utils.ts +242 -0
  328. package/src/utils/validation.test.ts +50 -0
  329. package/src/utils/validation.ts +44 -0
  330. package/tsconfig.build.json +16 -2
  331. package/tsconfig.json +3 -1
  332. package/tsconfig.tsbuildinfo +1 -0
  333. package/tsup.config.ts +2 -0
  334. package/src/functions/bundleCode/index.ts +0 -78
  335. package/src/functions/bundleCode/info.ts +0 -9
  336. package/src/functions/bundleCode/schemas.ts +0 -30
  337. package/src/functions/fetch/index.ts +0 -180
  338. package/src/functions/fetch/info.ts +0 -8
  339. package/src/functions/fetch/schemas.ts +0 -46
  340. package/src/functions/findFirstAuthentication/index.ts +0 -24
  341. package/src/functions/findFirstAuthentication/info.ts +0 -9
  342. package/src/functions/findFirstAuthentication/schemas.ts +0 -50
  343. package/src/functions/findUniqueAuthentication/index.ts +0 -35
  344. package/src/functions/findUniqueAuthentication/info.ts +0 -9
  345. package/src/functions/findUniqueAuthentication/schemas.ts +0 -50
  346. package/src/functions/generateTypes/index.ts +0 -363
  347. package/src/functions/generateTypes/info.ts +0 -9
  348. package/src/functions/generateTypes/schemas.ts +0 -31
  349. package/src/functions/getAction/index.ts +0 -33
  350. package/src/functions/getAction/info.ts +0 -9
  351. package/src/functions/getAction/schemas.ts +0 -25
  352. package/src/functions/getApp/index.ts +0 -41
  353. package/src/functions/getApp/info.ts +0 -9
  354. package/src/functions/getApp/schemas.ts +0 -20
  355. package/src/functions/getAuthentication/index.ts +0 -50
  356. package/src/functions/getAuthentication/info.ts +0 -9
  357. package/src/functions/getAuthentication/schemas.ts +0 -29
  358. package/src/functions/listActions/index.ts +0 -149
  359. package/src/functions/listActions/info.ts +0 -9
  360. package/src/functions/listActions/schemas.ts +0 -30
  361. package/src/functions/listApps/index.ts +0 -60
  362. package/src/functions/listApps/info.ts +0 -9
  363. package/src/functions/listApps/schemas.ts +0 -32
  364. package/src/functions/listAuthentications/index.ts +0 -162
  365. package/src/functions/listAuthentications/info.ts +0 -9
  366. package/src/functions/listAuthentications/schemas.ts +0 -50
  367. package/src/functions/listFields/index.ts +0 -86
  368. package/src/functions/listFields/info.ts +0 -9
  369. package/src/functions/listFields/schemas.ts +0 -36
  370. package/src/functions/runAction/index.ts +0 -127
  371. package/src/functions/runAction/info.ts +0 -9
  372. package/src/functions/runAction/schemas.ts +0 -34
  373. package/src/plugins/apps/info.ts +0 -12
  374. /package/src/{schema-utils.ts → utils/schema-utils.ts} +0 -0
@@ -0,0 +1,239 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import {
3
+ ZapierValidationError,
4
+ ZapierResourceNotFoundError,
5
+ } from "../../types/errors";
6
+ import { getActionPlugin } from "./index";
7
+ import { createSdk } from "../../sdk";
8
+ import type { GetActionOptions } from "./schemas";
9
+ import type { ActionItem } from "../../types/domain";
10
+ import type { ApiClient } from "../../api";
11
+ import { ListActionsSchema } from "../listActions/schemas";
12
+
13
+ const mockActions: ActionItem[] = [
14
+ {
15
+ type: "action",
16
+ key: "user_by_email",
17
+ title: "Search User by Email",
18
+ description: "Find a user by email address",
19
+ app_key: "slack",
20
+ action_type: "search",
21
+ },
22
+ {
23
+ type: "action",
24
+ key: "search_messages",
25
+ title: "Search Messages",
26
+ description: "Search for messages in channels",
27
+ app_key: "slack",
28
+ action_type: "search",
29
+ },
30
+ {
31
+ type: "action",
32
+ key: "user_by_email",
33
+ title: "Search User by Email",
34
+ description: "Find a user by email address",
35
+ app_key: "slack",
36
+ action_type: "write", // Different action type for testing mismatch
37
+ },
38
+ ];
39
+
40
+ describe("getAction plugin", () => {
41
+ let mockListActions: any;
42
+ let mockApiClient: ApiClient;
43
+
44
+ beforeEach(() => {
45
+ vi.clearAllMocks();
46
+ mockListActions = vi.fn().mockResolvedValue({
47
+ data: mockActions,
48
+ });
49
+ mockApiClient = {} as ApiClient;
50
+ });
51
+
52
+ function createTestSdk() {
53
+ // Create a proper plugin chain with context dependencies
54
+ const mockListActionsPlugin = () => ({
55
+ listActions: mockListActions,
56
+ context: {
57
+ meta: {
58
+ listActions: {
59
+ inputSchema: ListActionsSchema,
60
+ },
61
+ },
62
+ },
63
+ });
64
+
65
+ // Build SDK with proper plugin composition, providing API in initial context
66
+ return createSdk({}, { api: mockApiClient, meta: {} })
67
+ .addPlugin(mockListActionsPlugin)
68
+ .addPlugin(getActionPlugin);
69
+ }
70
+
71
+ describe("schema validation", () => {
72
+ it("should throw validation error for missing appKey", async () => {
73
+ const sdk = createTestSdk();
74
+ await expect(
75
+ sdk.getAction({
76
+ actionType: "search",
77
+ actionKey: "user_by_email",
78
+ } as Partial<GetActionOptions> as GetActionOptions),
79
+ ).rejects.toThrow(ZapierValidationError);
80
+ });
81
+
82
+ it("should throw validation error for missing actionType", async () => {
83
+ const sdk = createTestSdk();
84
+ await expect(
85
+ sdk.getAction({
86
+ appKey: "slack",
87
+ actionKey: "user_by_email",
88
+ } as Partial<GetActionOptions> as GetActionOptions),
89
+ ).rejects.toThrow(ZapierValidationError);
90
+ });
91
+
92
+ it("should throw validation error for missing actionKey", async () => {
93
+ const sdk = createTestSdk();
94
+ await expect(
95
+ sdk.getAction({
96
+ appKey: "slack",
97
+ actionType: "search",
98
+ } as Partial<GetActionOptions> as GetActionOptions),
99
+ ).rejects.toThrow(ZapierValidationError);
100
+ });
101
+
102
+ it("should throw validation error for invalid appKey type", async () => {
103
+ const sdk = createTestSdk();
104
+ await expect(
105
+ sdk.getAction({
106
+ appKey: 123 as any,
107
+ actionType: "search",
108
+ actionKey: "user_by_email",
109
+ } as any),
110
+ ).rejects.toThrow(ZapierValidationError);
111
+ });
112
+
113
+ it("should throw validation error for invalid actionType", async () => {
114
+ const sdk = createTestSdk();
115
+ await expect(
116
+ sdk.getAction({
117
+ appKey: "slack",
118
+ actionType: "invalid-type" as any,
119
+ actionKey: "user_by_email",
120
+ } as any),
121
+ ).rejects.toThrow(ZapierValidationError);
122
+ });
123
+
124
+ it("should throw validation error for invalid actionKey type", async () => {
125
+ const sdk = createTestSdk();
126
+ await expect(
127
+ sdk.getAction({
128
+ appKey: "slack",
129
+ actionType: "search",
130
+ actionKey: 123,
131
+ } as any),
132
+ ).rejects.toThrow(ZapierValidationError);
133
+ });
134
+
135
+ it("should throw validation error for empty appKey", async () => {
136
+ const sdk = createTestSdk();
137
+ await expect(
138
+ sdk.getAction({
139
+ appKey: "",
140
+ actionType: "search",
141
+ actionKey: "user_by_email",
142
+ }),
143
+ ).rejects.toThrow(ZapierValidationError);
144
+ });
145
+
146
+ it("should throw validation error for empty actionKey", async () => {
147
+ const sdk = createTestSdk();
148
+ await expect(
149
+ sdk.getAction({
150
+ appKey: "slack",
151
+ actionType: "search",
152
+ actionKey: "",
153
+ }),
154
+ ).rejects.toThrow(ZapierValidationError);
155
+ });
156
+
157
+ it("should pass validation with all required fields", async () => {
158
+ const sdk = createTestSdk();
159
+ const result = await sdk.getAction({
160
+ appKey: "slack",
161
+ actionType: "search",
162
+ actionKey: "user_by_email",
163
+ });
164
+
165
+ expect(result.data).toEqual(mockActions[0]);
166
+ });
167
+ });
168
+
169
+ describe("action lookup", () => {
170
+ it("should call listActions with correct parameters", async () => {
171
+ const sdk = createTestSdk();
172
+ await sdk.getAction({
173
+ appKey: "slack",
174
+ actionType: "search",
175
+ actionKey: "user_by_email",
176
+ });
177
+
178
+ expect(mockListActions).toHaveBeenCalledWith({
179
+ appKey: "slack",
180
+ });
181
+ });
182
+
183
+ it("should return the correct action when found", async () => {
184
+ const sdk = createTestSdk();
185
+ const result = await sdk.getAction({
186
+ appKey: "slack",
187
+ actionType: "search",
188
+ actionKey: "user_by_email",
189
+ });
190
+
191
+ expect(result.data).toEqual(mockActions[0]);
192
+ });
193
+
194
+ it("should throw error when action key not found", async () => {
195
+ const sdk = createTestSdk();
196
+ await expect(
197
+ sdk.getAction({
198
+ appKey: "slack",
199
+ actionType: "search",
200
+ actionKey: "nonexistent_action",
201
+ }),
202
+ ).rejects.toThrow(ZapierResourceNotFoundError);
203
+ });
204
+
205
+ it("should throw error when action type doesn't match", async () => {
206
+ const sdk = createTestSdk();
207
+ await expect(
208
+ sdk.getAction({
209
+ appKey: "slack",
210
+ actionType: "write",
211
+ actionKey: "search_messages", // This action is type "search" in mock
212
+ }),
213
+ ).rejects.toThrow(ZapierResourceNotFoundError);
214
+ });
215
+
216
+ it("should handle listActions errors", async () => {
217
+ mockListActions.mockRejectedValue(new Error("API Error"));
218
+
219
+ const sdk = createTestSdk();
220
+ await expect(
221
+ sdk.getAction({
222
+ appKey: "slack",
223
+ actionType: "search",
224
+ actionKey: "user_by_email",
225
+ }),
226
+ ).rejects.toThrow("API Error");
227
+ });
228
+ });
229
+
230
+ describe("plugin integration", () => {
231
+ it("should provide metadata in context", () => {
232
+ const sdk = createTestSdk();
233
+ const context = sdk.getContext();
234
+
235
+ expect(context.meta.getAction).toBeDefined();
236
+ expect(context.meta.getAction.inputSchema).toBeDefined();
237
+ });
238
+ });
239
+ });
@@ -0,0 +1,57 @@
1
+ import type { Plugin, GetSdkType } from "../../types/plugin";
2
+ import type { ApiClient } from "../../api";
3
+ import type { ActionItem } from "../../types/domain";
4
+ import { GetActionSchema, type GetActionOptions } from "./schemas";
5
+ import { ZapierResourceNotFoundError } from "../../types/errors";
6
+ import { createFunction } from "../../utils/function-utils";
7
+ import type { ListActionsPluginProvides } from "../listActions";
8
+
9
+ export interface GetActionPluginProvides {
10
+ getAction: (options: GetActionOptions) => Promise<{ data: ActionItem }>;
11
+ context: {
12
+ meta: {
13
+ getAction: {
14
+ inputSchema: typeof GetActionSchema;
15
+ };
16
+ };
17
+ };
18
+ }
19
+
20
+ export const getActionPlugin: Plugin<
21
+ GetSdkType<ListActionsPluginProvides>, // requires listActions in SDK
22
+ { api: ApiClient }, // requires api in context
23
+ GetActionPluginProvides
24
+ > = ({ sdk }) => {
25
+ const getAction = createFunction(async function getAction(
26
+ options: GetActionOptions,
27
+ ) {
28
+ const { actionKey, actionType, appKey } = options;
29
+
30
+ // Use the listActions function from the SDK to search for the specific action
31
+ const actionsResult = await sdk.listActions({ appKey });
32
+
33
+ // Search through all actions to find the matching one
34
+ for (const action of actionsResult.data) {
35
+ if (action.key === actionKey && action.action_type === actionType) {
36
+ return { data: action };
37
+ }
38
+ }
39
+
40
+ // If we get here, action was not found
41
+ throw new ZapierResourceNotFoundError(
42
+ `Action not found: ${actionKey} with type ${actionType}`,
43
+ { resourceType: "Action", resourceId: `${actionKey} (${actionType})` },
44
+ );
45
+ }, GetActionSchema);
46
+
47
+ return {
48
+ getAction,
49
+ context: {
50
+ meta: {
51
+ getAction: {
52
+ inputSchema: GetActionSchema,
53
+ },
54
+ },
55
+ },
56
+ };
57
+ };
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import {
3
+ AppKeyPropertySchema,
4
+ ActionTypePropertySchema,
5
+ ActionKeyPropertySchema,
6
+ } from "../../types/properties";
7
+ import type { ActionItem } from "../../types/domain";
8
+
9
+ // Pure Zod schema - no resolver metadata!
10
+ export const GetActionSchema = z
11
+ .object({
12
+ appKey: AppKeyPropertySchema,
13
+ actionType: ActionTypePropertySchema,
14
+ actionKey: ActionKeyPropertySchema,
15
+ })
16
+ .describe("Get detailed information about a specific action");
17
+
18
+ // Type inferred from schema
19
+ export type GetActionOptions = z.infer<typeof GetActionSchema>;
20
+
21
+ // Error union for this function (inherits from listActionsSafe + resource not found)
22
+ export type GetActionError =
23
+ | import("../../types/errors").ZapierAuthenticationError
24
+ | import("../../types/errors").ZapierApiError
25
+ | import("../../types/errors").ZapierAppNotFoundError
26
+ | import("../../types/errors").ZapierValidationError
27
+ | import("../../types/errors").ZapierResourceNotFoundError
28
+ | import("../../types/errors").ZapierUnknownError;
29
+
30
+ // SDK function interface
31
+ export interface GetActionSdkFunction {
32
+ getAction: (options: GetActionOptions) => Promise<{ data: ActionItem }>;
33
+ }
@@ -0,0 +1,127 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import {
3
+ ZapierValidationError,
4
+ ZapierAppNotFoundError,
5
+ } from "../../types/errors";
6
+ import { getAppPlugin } from "./index";
7
+ import { createSdk } from "../../sdk";
8
+ import { apiPlugin } from "../api/index";
9
+ import { listAppsPlugin } from "../listApps";
10
+
11
+ function createTestSdk() {
12
+ return createSdk()
13
+ .addPlugin(apiPlugin, { fetch: global.fetch })
14
+ .addPlugin(listAppsPlugin)
15
+ .addPlugin(getAppPlugin);
16
+ }
17
+
18
+ describe("getApp plugin", () => {
19
+ beforeEach(() => {
20
+ vi.clearAllMocks();
21
+ });
22
+
23
+ describe("schema validation", () => {
24
+ it("should throw validation error for missing appKey", async () => {
25
+ const sdk = createTestSdk();
26
+ await expect(sdk.getApp({} as any)).rejects.toThrow(
27
+ ZapierValidationError,
28
+ );
29
+ });
30
+
31
+ it("should throw validation error for invalid appKey type", async () => {
32
+ const sdk = createTestSdk();
33
+ await expect(
34
+ sdk.getApp({
35
+ appKey: 123 as any,
36
+ } as any),
37
+ ).rejects.toThrow(ZapierValidationError);
38
+ });
39
+
40
+ it("should throw validation error for empty string appKey", async () => {
41
+ const sdk = createTestSdk();
42
+ await expect(
43
+ sdk.getApp({
44
+ appKey: "",
45
+ }),
46
+ ).rejects.toThrow(ZapierValidationError);
47
+ });
48
+
49
+ it("should pass validation with valid appKey", async () => {
50
+ const sdk = createTestSdk();
51
+ const context = sdk.getContext();
52
+
53
+ // Mock the API client in context to respond to listApps implementation
54
+ (context.api as any).get = vi.fn().mockResolvedValue({
55
+ results: [
56
+ {
57
+ id: "SlackCLIAPI@1.0.0",
58
+ name: "Slack",
59
+ description: "Team communication",
60
+ primary_color: "#4A154B",
61
+ categories: ["communication"],
62
+ },
63
+ ],
64
+ next: null,
65
+ });
66
+
67
+ const result = await sdk.getApp({
68
+ appKey: "slack",
69
+ });
70
+
71
+ expect(result.data.title).toBe("Slack");
72
+ expect(result.data.key).toBe("SlackCLIAPI");
73
+ expect(result.data.current_implementation_id).toBe("SlackCLIAPI@1.0.0");
74
+ expect(result.data.version).toBe("1.0.0");
75
+ });
76
+ });
77
+
78
+ describe("error handling", () => {
79
+ it("should throw ZapierAppNotFoundError when app does not exist", async () => {
80
+ const sdk = createTestSdk();
81
+ const context = sdk.getContext();
82
+
83
+ // Mock API to return empty results (app not found)
84
+ (context.api as any).get = vi.fn().mockResolvedValue({
85
+ results: [],
86
+ next: null,
87
+ });
88
+
89
+ await expect(
90
+ sdk.getApp({
91
+ appKey: "nonexistent-app",
92
+ }),
93
+ ).rejects.toThrow(ZapierAppNotFoundError);
94
+ });
95
+ });
96
+
97
+ describe("data mapping", () => {
98
+ it("should return essential app properties", async () => {
99
+ const sdk = createTestSdk();
100
+ const context = sdk.getContext();
101
+
102
+ // Mock the API client in context to respond to listApps implementation
103
+ (context.api as any).get = vi.fn().mockResolvedValue({
104
+ results: [
105
+ {
106
+ id: "TestCLIAPI@1.0.0",
107
+ name: "Test App",
108
+ description: "Test description",
109
+ primary_color: "#FF0000",
110
+ categories: ["testing"],
111
+ },
112
+ ],
113
+ next: null,
114
+ });
115
+
116
+ const result = await sdk.getApp({
117
+ appKey: "test",
118
+ });
119
+
120
+ expect(result.data.title).toBeDefined();
121
+ expect(result.data.key).toBeDefined();
122
+ expect(result.data.current_implementation_id).toBeDefined();
123
+ expect(result.data.title).toBe("Test App");
124
+ expect(result.data.key).toBe("TestCLIAPI");
125
+ });
126
+ });
127
+ });
@@ -0,0 +1,66 @@
1
+ import type { Plugin } from "../../types/plugin";
2
+ import { createFunction } from "../../utils/function-utils";
3
+ import { GetAppSchema } from "./schemas";
4
+ import type { GetAppOptions } from "./schemas";
5
+ import type { AppItem } from "../../types/domain";
6
+ import { ZapierAppNotFoundError } from "../../types/errors";
7
+ import type { ListAppsPluginProvides } from "../listApps";
8
+ import type { GetSdkType } from "../../types/plugin";
9
+
10
+ // GetApp plugin provides interface - getApp goes directly to SDK root
11
+ export interface GetAppPluginProvides {
12
+ getApp: (options: GetAppOptions) => Promise<{ data: AppItem }>;
13
+ context: {
14
+ meta: {
15
+ getApp: {
16
+ inputSchema: typeof GetAppSchema;
17
+ };
18
+ };
19
+ };
20
+ }
21
+
22
+ // GetApp plugin depends on listApps SDK function
23
+ export const getAppPlugin: Plugin<
24
+ GetSdkType<ListAppsPluginProvides>, // depends on listApps
25
+ {}, // no additional context dependencies
26
+ GetAppPluginProvides
27
+ > = ({ sdk }) => {
28
+ const getApp = createFunction(async function getApp(options: GetAppOptions) {
29
+ const { appKey } = options;
30
+
31
+ // Use listApps to get the app by key
32
+ const appsIterator = sdk
33
+ .listApps({
34
+ ...options,
35
+ appKeys: [appKey],
36
+ })
37
+ .items();
38
+
39
+ // Get the first (and should be only) result
40
+ const apps = [];
41
+ for await (const app of appsIterator) {
42
+ apps.push(app);
43
+ break; // Only need the first result
44
+ }
45
+
46
+ if (apps.length === 0) {
47
+ throw new ZapierAppNotFoundError(appKey);
48
+ }
49
+
50
+ return {
51
+ data: apps[0],
52
+ };
53
+ }, GetAppSchema);
54
+
55
+ // Return flat structure - getApp goes directly to SDK
56
+ return {
57
+ getApp,
58
+ context: {
59
+ meta: {
60
+ getApp: {
61
+ inputSchema: GetAppSchema,
62
+ },
63
+ },
64
+ },
65
+ };
66
+ };
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { AppKeyPropertySchema } from "../../types/properties";
3
+ import { withOutputSchema } from "../../utils/schema-utils";
4
+ import { AppItemSchema } from "../../schemas/App";
5
+ import type { AppItem } from "../../types/domain";
6
+ import {
7
+ ZapierApiError,
8
+ ZapierAppNotFoundError,
9
+ ZapierValidationError,
10
+ } from "../../types/errors";
11
+
12
+ // Error types (now imported from types/errors)
13
+
14
+ // Union of all possible errors for getApp
15
+ export type GetAppError =
16
+ | ZapierAppNotFoundError
17
+ | ZapierApiError
18
+ | ZapierValidationError;
19
+
20
+ // Pure Zod schema - no resolver metadata!
21
+ export const GetAppSchema = withOutputSchema(
22
+ z
23
+ .object({
24
+ appKey: AppKeyPropertySchema.describe(
25
+ "App key of app to fetch (e.g., 'SlackCLIAPI')",
26
+ ),
27
+ })
28
+ .describe("Get detailed information about a specific app"),
29
+ AppItemSchema,
30
+ );
31
+
32
+ // Type inferred from schema
33
+ export type GetAppOptions = z.infer<typeof GetAppSchema>;
34
+
35
+ // SDK function interface - ready to be mixed into main SDK interface
36
+ export interface GetAppSdkFunction {
37
+ getApp: (options: GetAppOptions) => Promise<{ data: AppItem }>;
38
+ }