@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,206 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { ZapierValidationError } from "../../types/errors";
3
+ import { findFirstAuthenticationPlugin } from "./index";
4
+ import { createSdk } from "../../sdk";
5
+ import type { AuthenticationItem } from "../../types/domain";
6
+ import { ListAuthenticationsSchema } from "../listAuthentications/schemas";
7
+
8
+ const mockAuthentications: AuthenticationItem[] = [
9
+ {
10
+ id: 123,
11
+ title: "My Slack",
12
+ date: "2021-01-01",
13
+ account_id: 123,
14
+ implementation_id: "api_123",
15
+ is_expired: "false",
16
+ expired_at: null,
17
+ is_invite_only: false,
18
+ is_private: false,
19
+ shared_with_all: false,
20
+ },
21
+ {
22
+ id: 456,
23
+ title: "Slack Workspace 2",
24
+ is_expired: "false",
25
+ expired_at: null,
26
+ date: "2021-01-01",
27
+ account_id: 123,
28
+ implementation_id: "api_123",
29
+ is_invite_only: false,
30
+ is_private: false,
31
+ shared_with_all: false,
32
+ },
33
+ ];
34
+
35
+ describe("findFirstAuthentication plugin", () => {
36
+ let mockListAuthentications: any;
37
+
38
+ beforeEach(() => {
39
+ vi.clearAllMocks();
40
+ mockListAuthentications = vi.fn().mockResolvedValue({
41
+ data: mockAuthentications,
42
+ });
43
+ });
44
+
45
+ function createTestSdk() {
46
+ // Create a proper plugin chain: first add a mock listAuthentications plugin, then add findFirstAuthentication
47
+ const mockListAuthenticationsPlugin = () => ({
48
+ listAuthentications: mockListAuthentications,
49
+ context: {
50
+ meta: {
51
+ listAuthentications: {
52
+ inputSchema: ListAuthenticationsSchema,
53
+ },
54
+ },
55
+ },
56
+ });
57
+
58
+ // Build SDK with proper plugin composition
59
+ return createSdk()
60
+ .addPlugin(mockListAuthenticationsPlugin)
61
+ .addPlugin(findFirstAuthenticationPlugin);
62
+ }
63
+
64
+ describe("schema validation", () => {
65
+ it("should pass validation with empty options", async () => {
66
+ const sdk = createTestSdk();
67
+ const result = await sdk.findFirstAuthentication({});
68
+ expect(result.data).toBeDefined();
69
+ });
70
+
71
+ it("should pass validation with undefined options", async () => {
72
+ const sdk = createTestSdk();
73
+ const result = await sdk.findFirstAuthentication();
74
+ expect(result.data).toBeDefined();
75
+ });
76
+
77
+ it("should throw validation error for invalid appKey type", async () => {
78
+ const sdk = createTestSdk();
79
+ await expect(
80
+ sdk.findFirstAuthentication({
81
+ appKey: 123 as any, // intentionally wrong type for testing
82
+ }),
83
+ ).rejects.toThrow(ZapierValidationError);
84
+ });
85
+
86
+ it("should throw validation error for invalid search type", async () => {
87
+ const sdk = createTestSdk();
88
+ await expect(
89
+ sdk.findFirstAuthentication({
90
+ search: 123 as any,
91
+ }),
92
+ ).rejects.toThrow(ZapierValidationError);
93
+ });
94
+
95
+ it("should throw validation error for invalid parameter types", async () => {
96
+ const sdk = createTestSdk();
97
+ await expect(
98
+ sdk.findFirstAuthentication({
99
+ title: 123 as any,
100
+ account_id: 456 as any,
101
+ owner: true as any,
102
+ }),
103
+ ).rejects.toThrow(ZapierValidationError);
104
+ });
105
+
106
+ it("should pass validation with all valid fields", async () => {
107
+ const sdk = createTestSdk();
108
+ const result = await sdk.findFirstAuthentication({
109
+ appKey: "slack",
110
+ search: "workspace",
111
+ title: "My Slack Workspace",
112
+ account_id: "acc_123",
113
+ owner: "me",
114
+ });
115
+
116
+ expect(result.data).toBeDefined();
117
+ });
118
+ });
119
+
120
+ describe("business logic", () => {
121
+ it("should return first authentication when found", async () => {
122
+ const mockAuth = mockAuthentications[0];
123
+ mockListAuthentications.mockResolvedValue({
124
+ data: [mockAuth],
125
+ });
126
+
127
+ const sdk = createTestSdk();
128
+ const result = await sdk.findFirstAuthentication({
129
+ appKey: "slack",
130
+ });
131
+
132
+ expect(result.data).toEqual(mockAuth);
133
+ });
134
+
135
+ it("should return null when no authentications found", async () => {
136
+ mockListAuthentications.mockResolvedValue({
137
+ data: [],
138
+ });
139
+
140
+ const sdk = createTestSdk();
141
+ const result = await sdk.findFirstAuthentication({
142
+ appKey: "nonexistent",
143
+ });
144
+
145
+ expect(result.data).toBeNull();
146
+ });
147
+
148
+ it("should return first authentication when multiple found", async () => {
149
+ const mockAuth = mockAuthentications[0];
150
+ mockListAuthentications.mockResolvedValue({
151
+ data: [mockAuth, mockAuthentications[1]],
152
+ });
153
+
154
+ const sdk = createTestSdk();
155
+ const result = await sdk.findFirstAuthentication({
156
+ search: "Slack",
157
+ });
158
+
159
+ expect(result.data).toEqual(mockAuth);
160
+ });
161
+ });
162
+
163
+ describe("options forwarding", () => {
164
+ it("should forward all options to listAuthentications", async () => {
165
+ const sdk = createTestSdk();
166
+ const options = {
167
+ appKey: "slack",
168
+ search: "workspace",
169
+ title: "My Slack Workspace",
170
+ account_id: "acc_123",
171
+ owner: "me",
172
+ };
173
+
174
+ await sdk.findFirstAuthentication(options);
175
+
176
+ expect(mockListAuthentications).toHaveBeenCalledWith({
177
+ ...options,
178
+ maxItems: 1,
179
+ });
180
+ });
181
+ });
182
+
183
+ describe("limit enforcement", () => {
184
+ it("should automatically set maxItems to 1", async () => {
185
+ const sdk = createTestSdk();
186
+ await sdk.findFirstAuthentication({
187
+ appKey: "slack",
188
+ });
189
+
190
+ expect(mockListAuthentications).toHaveBeenCalledWith({
191
+ appKey: "slack",
192
+ maxItems: 1,
193
+ });
194
+ });
195
+ });
196
+
197
+ describe("context and metadata", () => {
198
+ it("should provide context with meta information", () => {
199
+ const sdk = createTestSdk();
200
+ const context = sdk.getContext();
201
+
202
+ expect(context.meta.findFirstAuthentication).toBeDefined();
203
+ expect(context.meta.findFirstAuthentication.inputSchema).toBeDefined();
204
+ });
205
+ });
206
+ });
@@ -0,0 +1,55 @@
1
+ import type { Plugin, GetSdkType } from "../../types/plugin";
2
+ import type { AuthenticationItem } from "../../types/domain";
3
+ import {
4
+ FindFirstAuthenticationSchema,
5
+ type FindFirstAuthenticationOptions,
6
+ } from "./schemas";
7
+ import { createFunction } from "../../utils/function-utils";
8
+ import type { ListAuthenticationsPluginProvides } from "../listAuthentications";
9
+
10
+ export interface FindFirstAuthenticationPluginProvides {
11
+ findFirstAuthentication: (
12
+ options?: FindFirstAuthenticationOptions,
13
+ ) => Promise<{ data: AuthenticationItem | null }>;
14
+ context: {
15
+ meta: {
16
+ findFirstAuthentication: {
17
+ inputSchema: typeof FindFirstAuthenticationSchema;
18
+ };
19
+ };
20
+ };
21
+ }
22
+
23
+ export const findFirstAuthenticationPlugin: Plugin<
24
+ GetSdkType<ListAuthenticationsPluginProvides>, // requires listAuthentications in SDK
25
+ {}, // no context requirements
26
+ FindFirstAuthenticationPluginProvides
27
+ > = ({ sdk }) => {
28
+ const findFirstAuthentication = createFunction(
29
+ async function findFirstAuthentication(
30
+ options: FindFirstAuthenticationOptions = {},
31
+ ) {
32
+ // Use listAuthentications with maxItems 1 to get the first result
33
+ const authsResponse = await sdk.listAuthentications({
34
+ ...options,
35
+ maxItems: 1,
36
+ });
37
+
38
+ return {
39
+ data: authsResponse.data.length > 0 ? authsResponse.data[0] : null,
40
+ };
41
+ },
42
+ FindFirstAuthenticationSchema,
43
+ );
44
+
45
+ return {
46
+ findFirstAuthentication,
47
+ context: {
48
+ meta: {
49
+ findFirstAuthentication: {
50
+ inputSchema: FindFirstAuthenticationSchema,
51
+ },
52
+ },
53
+ },
54
+ };
55
+ };
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ import { AppKeyPropertySchema } from "../../types/properties";
3
+ import type { AuthenticationItem } from "../../types/domain";
4
+
5
+ // Pure Zod schema - no resolver metadata!
6
+ export const FindFirstAuthenticationSchema = z
7
+ .object({
8
+ appKey: AppKeyPropertySchema.optional().describe(
9
+ "App key of authentication to find (e.g., 'SlackCLIAPI')",
10
+ ),
11
+ search: z
12
+ .string()
13
+ .optional()
14
+ .describe("Search term to filter authentications by title"),
15
+ title: z
16
+ .string()
17
+ .optional()
18
+ .describe("Filter authentications by exact title match"),
19
+ account_id: z.string().optional().describe("Filter by account ID"),
20
+ owner: z.string().optional().describe("Filter by owner"),
21
+ })
22
+ .describe("Find the first authentication matching the criteria");
23
+
24
+ // Type inferred from schema
25
+ export type FindFirstAuthenticationOptions = z.infer<
26
+ typeof FindFirstAuthenticationSchema
27
+ >;
28
+
29
+ // Error union for this function (inherits from listAuthenticationsSafe)
30
+ export type FindFirstAuthenticationError =
31
+ | import("../../types/errors").ZapierAuthenticationError
32
+ | import("../../types/errors").ZapierApiError
33
+ | import("../../types/errors").ZapierValidationError
34
+ | import("../../types/errors").ZapierUnknownError;
35
+
36
+ // SDK function interface
37
+ export interface FindFirstAuthenticationSdkFunction {
38
+ findFirstAuthentication: (
39
+ options?: FindFirstAuthenticationOptions,
40
+ ) => Promise<{ data: AuthenticationItem | null }>;
41
+ }
@@ -0,0 +1,197 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import {
3
+ ZapierValidationError,
4
+ ZapierResourceNotFoundError,
5
+ } from "../../types/errors";
6
+ import { findUniqueAuthenticationPlugin } from "./index";
7
+ import { createSdk } from "../../sdk";
8
+ import type { AuthenticationItem } from "../../types/domain";
9
+ import { ListAuthenticationsSchema } from "../listAuthentications/schemas";
10
+
11
+ const mockAuthentication: AuthenticationItem = {
12
+ id: 123,
13
+ title: "My Slack",
14
+ date: "2021-01-01",
15
+ account_id: 123,
16
+ implementation_id: "api_123",
17
+ is_expired: "false",
18
+ expired_at: null,
19
+ is_invite_only: false,
20
+ is_private: false,
21
+ shared_with_all: false,
22
+ };
23
+
24
+ const mockAuthentications: AuthenticationItem[] = [
25
+ mockAuthentication,
26
+ {
27
+ id: 456,
28
+ title: "Slack Workspace 2",
29
+ is_expired: "false",
30
+ expired_at: null,
31
+ date: "2021-01-01",
32
+ account_id: 123,
33
+ implementation_id: "api_123",
34
+ is_invite_only: false,
35
+ is_private: false,
36
+ shared_with_all: false,
37
+ },
38
+ ];
39
+
40
+ describe("findUniqueAuthentication plugin", () => {
41
+ let mockListAuthentications: any;
42
+
43
+ beforeEach(() => {
44
+ vi.clearAllMocks();
45
+ mockListAuthentications = vi.fn().mockResolvedValue({
46
+ data: [mockAuthentication],
47
+ });
48
+ });
49
+
50
+ function createTestSdk() {
51
+ // Create a proper plugin chain: first add a mock listAuthentications plugin, then add findUniqueAuthentication
52
+ const mockListAuthenticationsPlugin = () => ({
53
+ listAuthentications: mockListAuthentications,
54
+ context: {
55
+ meta: {
56
+ listAuthentications: {
57
+ inputSchema: ListAuthenticationsSchema,
58
+ },
59
+ },
60
+ },
61
+ });
62
+
63
+ // Build SDK with proper plugin composition
64
+ return createSdk()
65
+ .addPlugin(mockListAuthenticationsPlugin)
66
+ .addPlugin(findUniqueAuthenticationPlugin);
67
+ }
68
+
69
+ describe("schema validation", () => {
70
+ it("should pass validation with empty options", async () => {
71
+ const sdk = createTestSdk();
72
+ const result = await sdk.findUniqueAuthentication({});
73
+ expect(result.data).toBeDefined();
74
+ });
75
+
76
+ it("should throw validation error for invalid appKey type", async () => {
77
+ const sdk = createTestSdk();
78
+ await expect(
79
+ sdk.findUniqueAuthentication({
80
+ appKey: 123 as any,
81
+ }),
82
+ ).rejects.toThrow(ZapierValidationError);
83
+ });
84
+
85
+ it("should throw validation error for invalid parameter types", async () => {
86
+ const sdk = createTestSdk();
87
+ await expect(
88
+ sdk.findUniqueAuthentication({
89
+ search: 123 as any,
90
+ title: 456 as any,
91
+ account_id: 789 as any,
92
+ owner: false as any,
93
+ }),
94
+ ).rejects.toThrow(ZapierValidationError);
95
+ });
96
+
97
+ it("should pass validation with all valid fields", async () => {
98
+ const sdk = createTestSdk();
99
+ const result = await sdk.findUniqueAuthentication({
100
+ appKey: "slack",
101
+ search: "Workspace",
102
+ title: "My Slack",
103
+ account_id: "acc_123",
104
+ owner: "me",
105
+ });
106
+
107
+ expect(result.data).toBeDefined();
108
+ });
109
+ });
110
+
111
+ describe("business logic", () => {
112
+ it("should return the first authentication when exactly one is found", async () => {
113
+ mockListAuthentications.mockResolvedValue({
114
+ data: [mockAuthentication],
115
+ });
116
+
117
+ const sdk = createTestSdk();
118
+ const result = await sdk.findUniqueAuthentication({
119
+ appKey: "slack",
120
+ });
121
+
122
+ expect(result.data).toEqual(mockAuthentication);
123
+ });
124
+
125
+ it("should throw ZapierResourceNotFoundError when no authentications found", async () => {
126
+ mockListAuthentications.mockResolvedValue({
127
+ data: [],
128
+ });
129
+
130
+ const sdk = createTestSdk();
131
+ await expect(
132
+ sdk.findUniqueAuthentication({
133
+ appKey: "nonexistent",
134
+ }),
135
+ ).rejects.toThrow(ZapierResourceNotFoundError);
136
+
137
+ await expect(
138
+ sdk.findUniqueAuthentication({
139
+ appKey: "nonexistent",
140
+ }),
141
+ ).rejects.toThrow(
142
+ "No authentication found matching the specified criteria",
143
+ );
144
+ });
145
+
146
+ it("should throw ZapierValidationError when multiple authentications found", async () => {
147
+ mockListAuthentications.mockResolvedValue({
148
+ data: mockAuthentications, // Two authentications
149
+ });
150
+
151
+ const sdk = createTestSdk();
152
+ await expect(
153
+ sdk.findUniqueAuthentication({
154
+ search: "Workspace",
155
+ }),
156
+ ).rejects.toThrow(ZapierValidationError);
157
+
158
+ await expect(
159
+ sdk.findUniqueAuthentication({
160
+ search: "Workspace",
161
+ }),
162
+ ).rejects.toThrow(
163
+ "Multiple authentications found matching the specified criteria. Expected exactly one.",
164
+ );
165
+ });
166
+ });
167
+
168
+ describe("options forwarding", () => {
169
+ it("should forward all options to listAuthentications with maxItems=2", async () => {
170
+ const sdk = createTestSdk();
171
+ const options = {
172
+ appKey: "slack",
173
+ search: "workspace",
174
+ title: "My Slack Workspace",
175
+ account_id: "acc_123",
176
+ owner: "me",
177
+ };
178
+
179
+ await sdk.findUniqueAuthentication(options);
180
+
181
+ expect(mockListAuthentications).toHaveBeenCalledWith({
182
+ ...options,
183
+ maxItems: 2,
184
+ });
185
+ });
186
+ });
187
+
188
+ describe("context and metadata", () => {
189
+ it("should provide context with meta information", () => {
190
+ const sdk = createTestSdk();
191
+ const context = sdk.getContext();
192
+
193
+ expect(context.meta.findUniqueAuthentication).toBeDefined();
194
+ expect(context.meta.findUniqueAuthentication.inputSchema).toBeDefined();
195
+ });
196
+ });
197
+ });
@@ -0,0 +1,72 @@
1
+ import type { Plugin, GetSdkType } from "../../types/plugin";
2
+ import type { AuthenticationItem } from "../../types/domain";
3
+ import {
4
+ FindUniqueAuthenticationSchema,
5
+ type FindUniqueAuthenticationOptions,
6
+ } from "./schemas";
7
+ import {
8
+ ZapierResourceNotFoundError,
9
+ ZapierValidationError,
10
+ } from "../../types/errors";
11
+ import { createFunction } from "../../utils/function-utils";
12
+ import type { ListAuthenticationsPluginProvides } from "../listAuthentications";
13
+
14
+ export interface FindUniqueAuthenticationPluginProvides {
15
+ findUniqueAuthentication: (
16
+ options?: FindUniqueAuthenticationOptions,
17
+ ) => Promise<{ data: AuthenticationItem }>;
18
+ context: {
19
+ meta: {
20
+ findUniqueAuthentication: {
21
+ inputSchema: typeof FindUniqueAuthenticationSchema;
22
+ };
23
+ };
24
+ };
25
+ }
26
+
27
+ export const findUniqueAuthenticationPlugin: Plugin<
28
+ GetSdkType<ListAuthenticationsPluginProvides>, // requires listAuthentications in SDK
29
+ {}, // no context requirements
30
+ FindUniqueAuthenticationPluginProvides
31
+ > = ({ sdk }) => {
32
+ const findUniqueAuthentication = createFunction(
33
+ async function findUniqueAuthentication(
34
+ options: FindUniqueAuthenticationOptions = {},
35
+ ) {
36
+ // Use listAuthentications with maxItems 2 to check for uniqueness
37
+ const authsResponse = await sdk.listAuthentications({
38
+ ...options,
39
+ maxItems: 2, // Get up to 2 to check for uniqueness
40
+ });
41
+
42
+ if (authsResponse.data.length === 0) {
43
+ throw new ZapierResourceNotFoundError(
44
+ "No authentication found matching the specified criteria",
45
+ { resourceType: "Authentication" },
46
+ );
47
+ }
48
+
49
+ if (authsResponse.data.length > 1) {
50
+ throw new ZapierValidationError(
51
+ "Multiple authentications found matching the specified criteria. Expected exactly one.",
52
+ );
53
+ }
54
+
55
+ return {
56
+ data: authsResponse.data[0],
57
+ };
58
+ },
59
+ FindUniqueAuthenticationSchema,
60
+ );
61
+
62
+ return {
63
+ findUniqueAuthentication,
64
+ context: {
65
+ meta: {
66
+ findUniqueAuthentication: {
67
+ inputSchema: FindUniqueAuthenticationSchema,
68
+ },
69
+ },
70
+ },
71
+ };
72
+ };
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { AppKeyPropertySchema } from "../../types/properties";
3
+ import type { AuthenticationItem } from "../../types/domain";
4
+
5
+ // Pure Zod schema - no resolver metadata!
6
+ export const FindUniqueAuthenticationSchema = z
7
+ .object({
8
+ appKey: AppKeyPropertySchema.optional().describe(
9
+ "App key of authentication to find (e.g., 'SlackCLIAPI')",
10
+ ),
11
+ search: z
12
+ .string()
13
+ .optional()
14
+ .describe("Search term to filter authentications by title"),
15
+ title: z
16
+ .string()
17
+ .optional()
18
+ .describe("Filter authentications by exact title match"),
19
+ account_id: z.string().optional().describe("Filter by account ID"),
20
+ owner: z.string().optional().describe("Filter by owner"),
21
+ })
22
+ .describe("Find a unique authentication matching the criteria");
23
+
24
+ // Type inferred from schema
25
+ export type FindUniqueAuthenticationOptions = z.infer<
26
+ typeof FindUniqueAuthenticationSchema
27
+ >;
28
+
29
+ // Error union for this function
30
+ export type FindUniqueAuthenticationError =
31
+ | import("../../types/errors").ZapierAuthenticationError
32
+ | import("../../types/errors").ZapierApiError
33
+ | import("../../types/errors").ZapierResourceNotFoundError
34
+ | import("../../types/errors").ZapierValidationError
35
+ | import("../../types/errors").ZapierUnknownError;
36
+
37
+ // SDK function interface
38
+ export interface FindUniqueAuthenticationSdkFunction {
39
+ findUniqueAuthentication: (
40
+ options?: FindUniqueAuthenticationOptions,
41
+ ) => Promise<{ data: AuthenticationItem }>;
42
+ }