rotacloud 1.5.1 → 2.0.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 (488) hide show
  1. package/README.md +23 -13
  2. package/dist/client-builder.d.ts +34 -0
  3. package/dist/client-builder.js +70 -0
  4. package/dist/client-builder.test.js +163 -0
  5. package/dist/endpoint.d.ts +51 -0
  6. package/dist/interfaces/launch-terminal.interface.d.ts +6 -0
  7. package/dist/{mjs/interfaces → interfaces}/leave-request.interface.d.ts +1 -1
  8. package/dist/{cjs/interfaces → interfaces}/leave.interface.d.ts +1 -1
  9. package/dist/{mjs/interfaces → interfaces}/query-params/toil-allowance-query-params.interface.d.ts +1 -0
  10. package/dist/{cjs/interfaces → interfaces}/sdk-config.interface.d.ts +8 -11
  11. package/dist/{mjs/interfaces → interfaces}/shift.interface.d.ts +11 -0
  12. package/dist/interfaces/user-clock-in.interface.d.ts +18 -0
  13. package/dist/interfaces/user-clock-in.interface.js +1 -0
  14. package/dist/{cjs/interfaces → interfaces}/user.interface.d.ts +5 -4
  15. package/dist/interfaces/user.interface.js +1 -0
  16. package/dist/interfaces/users-clocked-in.interface.js +1 -0
  17. package/dist/interfaces/users-clocked-out.interface.js +1 -0
  18. package/dist/main.d.ts +203 -0
  19. package/dist/main.js +6 -0
  20. package/dist/models/SDKError.model.d.ts +15 -0
  21. package/dist/{mjs/models → models}/SDKError.model.js +10 -3
  22. package/dist/ops.d.ts +195 -0
  23. package/dist/ops.js +304 -0
  24. package/dist/ops.test.d.ts +1 -0
  25. package/dist/ops.test.js +101 -0
  26. package/dist/service.d.ts +233 -0
  27. package/dist/service.js +317 -0
  28. package/dist/utils.d.ts +41 -0
  29. package/dist/utils.js +149 -0
  30. package/package.json +19 -20
  31. package/src/client-builder.test.ts +188 -0
  32. package/src/client-builder.ts +118 -0
  33. package/src/endpoint.ts +99 -0
  34. package/src/interfaces/launch-terminal.interface.ts +7 -0
  35. package/src/interfaces/leave-request.interface.ts +1 -1
  36. package/src/interfaces/leave.interface.ts +1 -1
  37. package/src/interfaces/query-params/toil-allowance-query-params.interface.ts +1 -0
  38. package/src/interfaces/sdk-config.interface.ts +11 -14
  39. package/src/interfaces/shift.interface.ts +12 -0
  40. package/src/interfaces/time-zone.interface.ts +6 -6
  41. package/src/interfaces/user-clock-in.interface.ts +20 -0
  42. package/src/interfaces/user.interface.ts +16 -4
  43. package/src/main.ts +7 -0
  44. package/src/models/SDKError.model.ts +8 -8
  45. package/src/ops.test.ts +121 -0
  46. package/src/ops.ts +533 -0
  47. package/src/service.ts +395 -0
  48. package/src/utils.ts +193 -0
  49. package/.eslintignore +0 -5
  50. package/.eslintrc.json +0 -27
  51. package/.gitattributes +0 -1
  52. package/.github/workflows/check.yml +0 -36
  53. package/.github/workflows/publish.yml +0 -44
  54. package/.prettierrc.json +0 -7
  55. package/.vscode/settings.json +0 -4
  56. package/dist/cjs/interfaces/account-service.interface.js +0 -2
  57. package/dist/cjs/interfaces/account-services.interface.js +0 -2
  58. package/dist/cjs/interfaces/account.interface.js +0 -2
  59. package/dist/cjs/interfaces/attendance.interface.js +0 -2
  60. package/dist/cjs/interfaces/auth.interface.js +0 -2
  61. package/dist/cjs/interfaces/availability-pattern.interface.js +0 -2
  62. package/dist/cjs/interfaces/availability.interface.js +0 -2
  63. package/dist/cjs/interfaces/daily-budgets.interface.js +0 -2
  64. package/dist/cjs/interfaces/daily-revenue.interface.js +0 -2
  65. package/dist/cjs/interfaces/day-note.interface.js +0 -2
  66. package/dist/cjs/interfaces/days-off-pattern.interface.js +0 -2
  67. package/dist/cjs/interfaces/days-off.interface.js +0 -2
  68. package/dist/cjs/interfaces/document.interface.js +0 -2
  69. package/dist/cjs/interfaces/drop-request.interface.js +0 -2
  70. package/dist/cjs/interfaces/group.interface.js +0 -2
  71. package/dist/cjs/interfaces/holiday_allowance.interface.js +0 -2
  72. package/dist/cjs/interfaces/index.js +0 -55
  73. package/dist/cjs/interfaces/leave-date.interface.js +0 -2
  74. package/dist/cjs/interfaces/leave-embargo.interface.js +0 -2
  75. package/dist/cjs/interfaces/leave-rate.interface.js +0 -2
  76. package/dist/cjs/interfaces/leave-request.interface.d.ts +0 -23
  77. package/dist/cjs/interfaces/leave-request.interface.js +0 -2
  78. package/dist/cjs/interfaces/leave-type.interface.js +0 -2
  79. package/dist/cjs/interfaces/leave.interface.js +0 -2
  80. package/dist/cjs/interfaces/location-coordinate.interface.js +0 -2
  81. package/dist/cjs/interfaces/location.interface.js +0 -2
  82. package/dist/cjs/interfaces/logbook-category.interface.js +0 -2
  83. package/dist/cjs/interfaces/logbook-event.interface.js +0 -2
  84. package/dist/cjs/interfaces/pay-period.interface.js +0 -2
  85. package/dist/cjs/interfaces/pin.interface.js +0 -2
  86. package/dist/cjs/interfaces/query-params/attendance-query-params.interface.js +0 -2
  87. package/dist/cjs/interfaces/query-params/availability-patterns-query-params.interface.js +0 -2
  88. package/dist/cjs/interfaces/query-params/availability-query-params.interface.js +0 -2
  89. package/dist/cjs/interfaces/query-params/common-shift-times-query-params.interface.js +0 -2
  90. package/dist/cjs/interfaces/query-params/daily-budgets-query-params.interface.js +0 -2
  91. package/dist/cjs/interfaces/query-params/daily-revenue-query-params.interface.js +0 -2
  92. package/dist/cjs/interfaces/query-params/day-notes-query-params.interface.js +0 -2
  93. package/dist/cjs/interfaces/query-params/days-off-patterns-query-params.interface.js +0 -2
  94. package/dist/cjs/interfaces/query-params/days-off-query-params.interface.js +0 -2
  95. package/dist/cjs/interfaces/query-params/documents-query-params.interface.js +0 -2
  96. package/dist/cjs/interfaces/query-params/groups-query-params.interface.js +0 -2
  97. package/dist/cjs/interfaces/query-params/index.js +0 -42
  98. package/dist/cjs/interfaces/query-params/leave-embargoes-query-params.interface.js +0 -2
  99. package/dist/cjs/interfaces/query-params/leave-query-params.interface.js +0 -2
  100. package/dist/cjs/interfaces/query-params/leave-requests-query-params.interface.js +0 -2
  101. package/dist/cjs/interfaces/query-params/locations-query-params.interface.js +0 -2
  102. package/dist/cjs/interfaces/query-params/logbook-events-query-params.interface.js +0 -2
  103. package/dist/cjs/interfaces/query-params/pay-periods-query-params.interface.js +0 -2
  104. package/dist/cjs/interfaces/query-params/roles-query-params.interface.js +0 -2
  105. package/dist/cjs/interfaces/query-params/settings-query-params.interface.js +0 -2
  106. package/dist/cjs/interfaces/query-params/shifts-query-params.interface.js +0 -2
  107. package/dist/cjs/interfaces/query-params/swap-requests-query-params.interface.js +0 -2
  108. package/dist/cjs/interfaces/query-params/terminals-query-params.interface.js +0 -2
  109. package/dist/cjs/interfaces/query-params/toil-accruals-query-params.interface.js +0 -2
  110. package/dist/cjs/interfaces/query-params/toil-allowance-query-params.interface.d.ts +0 -3
  111. package/dist/cjs/interfaces/query-params/toil-allowance-query-params.interface.js +0 -2
  112. package/dist/cjs/interfaces/query-params/unavailability-requests-query-params.interface.js +0 -2
  113. package/dist/cjs/interfaces/query-params/users-query-params.interface.js +0 -2
  114. package/dist/cjs/interfaces/role-rate.interface.js +0 -2
  115. package/dist/cjs/interfaces/role.interface.js +0 -2
  116. package/dist/cjs/interfaces/sdk-config.interface.js +0 -8
  117. package/dist/cjs/interfaces/settings.interface.js +0 -2
  118. package/dist/cjs/interfaces/shift.interface.d.ts +0 -25
  119. package/dist/cjs/interfaces/shift.interface.js +0 -2
  120. package/dist/cjs/interfaces/swap-request.interface.js +0 -2
  121. package/dist/cjs/interfaces/terminal.interface.js +0 -2
  122. package/dist/cjs/interfaces/time-zone.interface.js +0 -2
  123. package/dist/cjs/interfaces/toil-accrual.interface.js +0 -2
  124. package/dist/cjs/interfaces/toil-allowance.interface.js +0 -2
  125. package/dist/cjs/interfaces/user.interface.js +0 -2
  126. package/dist/cjs/interfaces/users-clocked-in.interface.js +0 -2
  127. package/dist/cjs/interfaces/users-clocked-out.interface.js +0 -2
  128. package/dist/cjs/models/SDKError.model.d.ts +0 -11
  129. package/dist/cjs/models/SDKError.model.js +0 -15
  130. package/dist/cjs/models/index.js +0 -17
  131. package/dist/cjs/package.json +0 -3
  132. package/dist/cjs/rotacloud.d.ts +0 -47
  133. package/dist/cjs/rotacloud.js +0 -166
  134. package/dist/cjs/services/accounts.service.d.ts +0 -33
  135. package/dist/cjs/services/accounts.service.js +0 -83
  136. package/dist/cjs/services/attendance.service.d.ts +0 -51
  137. package/dist/cjs/services/attendance.service.js +0 -102
  138. package/dist/cjs/services/auth.service.d.ts +0 -10
  139. package/dist/cjs/services/auth.service.js +0 -14
  140. package/dist/cjs/services/availability.service.d.ts +0 -25
  141. package/dist/cjs/services/availability.service.js +0 -69
  142. package/dist/cjs/services/daily-budgets.service.d.ts +0 -27
  143. package/dist/cjs/services/daily-budgets.service.js +0 -87
  144. package/dist/cjs/services/daily-revenue.service.d.ts +0 -27
  145. package/dist/cjs/services/daily-revenue.service.js +0 -87
  146. package/dist/cjs/services/day-notes.service.d.ts +0 -49
  147. package/dist/cjs/services/day-notes.service.js +0 -102
  148. package/dist/cjs/services/days-off.service.d.ts +0 -32
  149. package/dist/cjs/services/days-off.service.js +0 -102
  150. package/dist/cjs/services/documents.service.d.ts +0 -73
  151. package/dist/cjs/services/documents.service.js +0 -125
  152. package/dist/cjs/services/groups.service.d.ts +0 -51
  153. package/dist/cjs/services/groups.service.js +0 -102
  154. package/dist/cjs/services/index.d.ts +0 -25
  155. package/dist/cjs/services/index.js +0 -41
  156. package/dist/cjs/services/leave-embargoes.service.d.ts +0 -51
  157. package/dist/cjs/services/leave-embargoes.service.js +0 -102
  158. package/dist/cjs/services/leave-request.service.d.ts +0 -51
  159. package/dist/cjs/services/leave-request.service.js +0 -106
  160. package/dist/cjs/services/leave-types.service.d.ts +0 -11
  161. package/dist/cjs/services/leave-types.service.js +0 -16
  162. package/dist/cjs/services/leave.service.d.ts +0 -51
  163. package/dist/cjs/services/leave.service.js +0 -102
  164. package/dist/cjs/services/locations.service.d.ts +0 -51
  165. package/dist/cjs/services/locations.service.js +0 -102
  166. package/dist/cjs/services/pins.service.d.ts +0 -18
  167. package/dist/cjs/services/pins.service.js +0 -16
  168. package/dist/cjs/services/roles.service.d.ts +0 -51
  169. package/dist/cjs/services/roles.service.js +0 -102
  170. package/dist/cjs/services/service.d.ts +0 -47
  171. package/dist/cjs/services/service.js +0 -149
  172. package/dist/cjs/services/settings.service.d.ts +0 -12
  173. package/dist/cjs/services/settings.service.js +0 -16
  174. package/dist/cjs/services/shifts.service.d.ts +0 -120
  175. package/dist/cjs/services/shifts.service.js +0 -154
  176. package/dist/cjs/services/terminals-active.service.d.ts +0 -46
  177. package/dist/cjs/services/terminals-active.service.js +0 -97
  178. package/dist/cjs/services/terminals.service.d.ts +0 -50
  179. package/dist/cjs/services/terminals.service.js +0 -102
  180. package/dist/cjs/services/time-zone.service.d.ts +0 -14
  181. package/dist/cjs/services/time-zone.service.js +0 -83
  182. package/dist/cjs/services/toil-accruals.service.d.ts +0 -27
  183. package/dist/cjs/services/toil-accruals.service.js +0 -93
  184. package/dist/cjs/services/toil-allowance.service.d.ts +0 -9
  185. package/dist/cjs/services/toil-allowance.service.js +0 -78
  186. package/dist/cjs/services/users-clock-in.service.d.ts +0 -66
  187. package/dist/cjs/services/users-clock-in.service.js +0 -113
  188. package/dist/cjs/services/users.service.d.ts +0 -51
  189. package/dist/cjs/services/users.service.js +0 -102
  190. package/dist/cjs/version.d.ts +0 -3
  191. package/dist/cjs/version.js +0 -4
  192. package/dist/mjs/interfaces/account-service.interface.d.ts +0 -6
  193. package/dist/mjs/interfaces/account-services.interface.d.ts +0 -6
  194. package/dist/mjs/interfaces/account.interface.d.ts +0 -40
  195. package/dist/mjs/interfaces/attendance.interface.d.ts +0 -31
  196. package/dist/mjs/interfaces/auth.interface.d.ts +0 -8
  197. package/dist/mjs/interfaces/availability-pattern.interface.d.ts +0 -20
  198. package/dist/mjs/interfaces/availability.interface.d.ts +0 -13
  199. package/dist/mjs/interfaces/daily-budgets.interface.d.ts +0 -6
  200. package/dist/mjs/interfaces/daily-revenue.interface.d.ts +0 -7
  201. package/dist/mjs/interfaces/day-note.interface.d.ts +0 -9
  202. package/dist/mjs/interfaces/days-off-pattern.interface.d.ts +0 -13
  203. package/dist/mjs/interfaces/days-off.interface.d.ts +0 -8
  204. package/dist/mjs/interfaces/document.interface.d.ts +0 -36
  205. package/dist/mjs/interfaces/drop-request.interface.d.ts +0 -13
  206. package/dist/mjs/interfaces/group.interface.d.ts +0 -7
  207. package/dist/mjs/interfaces/holiday_allowance.interface.d.ts +0 -11
  208. package/dist/mjs/interfaces/index.d.ts +0 -39
  209. package/dist/mjs/interfaces/leave-date.interface.d.ts +0 -8
  210. package/dist/mjs/interfaces/leave-embargo.interface.d.ts +0 -10
  211. package/dist/mjs/interfaces/leave-rate.interface.d.ts +0 -3
  212. package/dist/mjs/interfaces/leave-type.interface.d.ts +0 -8
  213. package/dist/mjs/interfaces/leave.interface.d.ts +0 -8
  214. package/dist/mjs/interfaces/location-coordinate.interface.d.ts +0 -5
  215. package/dist/mjs/interfaces/location.interface.d.ts +0 -13
  216. package/dist/mjs/interfaces/logbook-category.interface.d.ts +0 -5
  217. package/dist/mjs/interfaces/logbook-event.interface.d.ts +0 -16
  218. package/dist/mjs/interfaces/pay-period.interface.d.ts +0 -16
  219. package/dist/mjs/interfaces/pin.interface.d.ts +0 -3
  220. package/dist/mjs/interfaces/query-params/attendance-query-params.interface.d.ts +0 -9
  221. package/dist/mjs/interfaces/query-params/availability-patterns-query-params.interface.d.ts +0 -5
  222. package/dist/mjs/interfaces/query-params/availability-query-params.interface.d.ts +0 -12
  223. package/dist/mjs/interfaces/query-params/common-shift-times-query-params.interface.d.ts +0 -3
  224. package/dist/mjs/interfaces/query-params/daily-budgets-query-params.interface.d.ts +0 -5
  225. package/dist/mjs/interfaces/query-params/daily-revenue-query-params.interface.d.ts +0 -5
  226. package/dist/mjs/interfaces/query-params/day-notes-query-params.interface.d.ts +0 -5
  227. package/dist/mjs/interfaces/query-params/days-off-patterns-query-params.interface.d.ts +0 -5
  228. package/dist/mjs/interfaces/query-params/days-off-query-params.interface.d.ts +0 -5
  229. package/dist/mjs/interfaces/query-params/documents-query-params.interface.d.ts +0 -4
  230. package/dist/mjs/interfaces/query-params/groups-query-params.interface.d.ts +0 -3
  231. package/dist/mjs/interfaces/query-params/index.d.ts +0 -26
  232. package/dist/mjs/interfaces/query-params/leave-embargoes-query-params.interface.d.ts +0 -5
  233. package/dist/mjs/interfaces/query-params/leave-query-params.interface.d.ts +0 -13
  234. package/dist/mjs/interfaces/query-params/leave-requests-query-params.interface.d.ts +0 -4
  235. package/dist/mjs/interfaces/query-params/locations-query-params.interface.d.ts +0 -7
  236. package/dist/mjs/interfaces/query-params/logbook-events-query-params.interface.d.ts +0 -3
  237. package/dist/mjs/interfaces/query-params/pay-periods-query-params.interface.d.ts +0 -4
  238. package/dist/mjs/interfaces/query-params/roles-query-params.interface.d.ts +0 -5
  239. package/dist/mjs/interfaces/query-params/settings-query-params.interface.d.ts +0 -3
  240. package/dist/mjs/interfaces/query-params/shifts-query-params.interface.d.ts +0 -14
  241. package/dist/mjs/interfaces/query-params/swap-requests-query-params.interface.d.ts +0 -8
  242. package/dist/mjs/interfaces/query-params/terminals-query-params.interface.d.ts +0 -3
  243. package/dist/mjs/interfaces/query-params/toil-accruals-query-params.interface.d.ts +0 -4
  244. package/dist/mjs/interfaces/query-params/unavailability-requests-query-params.interface.d.ts +0 -8
  245. package/dist/mjs/interfaces/query-params/users-query-params.interface.d.ts +0 -24
  246. package/dist/mjs/interfaces/role-rate.interface.d.ts +0 -6
  247. package/dist/mjs/interfaces/role.interface.d.ts +0 -9
  248. package/dist/mjs/interfaces/sdk-config.interface.d.ts +0 -47
  249. package/dist/mjs/interfaces/settings.interface.d.ts +0 -64
  250. package/dist/mjs/interfaces/swap-request.interface.d.ts +0 -16
  251. package/dist/mjs/interfaces/terminal.interface.d.ts +0 -23
  252. package/dist/mjs/interfaces/time-zone.interface.d.ts +0 -7
  253. package/dist/mjs/interfaces/toil-accrual.interface.d.ts +0 -14
  254. package/dist/mjs/interfaces/toil-allowance.interface.d.ts +0 -7
  255. package/dist/mjs/interfaces/user.interface.d.ts +0 -47
  256. package/dist/mjs/interfaces/users-clocked-in.interface.d.ts +0 -14
  257. package/dist/mjs/interfaces/users-clocked-out.interface.d.ts +0 -26
  258. package/dist/mjs/models/SDKError.model.d.ts +0 -11
  259. package/dist/mjs/models/index.d.ts +0 -1
  260. package/dist/mjs/package.json +0 -3
  261. package/dist/mjs/rotacloud.d.ts +0 -47
  262. package/dist/mjs/rotacloud.js +0 -133
  263. package/dist/mjs/services/accounts.service.d.ts +0 -33
  264. package/dist/mjs/services/accounts.service.js +0 -25
  265. package/dist/mjs/services/attendance.service.d.ts +0 -51
  266. package/dist/mjs/services/attendance.service.js +0 -44
  267. package/dist/mjs/services/auth.service.d.ts +0 -10
  268. package/dist/mjs/services/auth.service.js +0 -10
  269. package/dist/mjs/services/availability.service.d.ts +0 -25
  270. package/dist/mjs/services/availability.service.js +0 -35
  271. package/dist/mjs/services/daily-budgets.service.d.ts +0 -27
  272. package/dist/mjs/services/daily-budgets.service.js +0 -29
  273. package/dist/mjs/services/daily-revenue.service.d.ts +0 -27
  274. package/dist/mjs/services/daily-revenue.service.js +0 -29
  275. package/dist/mjs/services/day-notes.service.d.ts +0 -49
  276. package/dist/mjs/services/day-notes.service.js +0 -44
  277. package/dist/mjs/services/days-off.service.d.ts +0 -32
  278. package/dist/mjs/services/days-off.service.js +0 -44
  279. package/dist/mjs/services/documents.service.d.ts +0 -73
  280. package/dist/mjs/services/documents.service.js +0 -67
  281. package/dist/mjs/services/groups.service.d.ts +0 -51
  282. package/dist/mjs/services/groups.service.js +0 -44
  283. package/dist/mjs/services/index.d.ts +0 -25
  284. package/dist/mjs/services/index.js +0 -25
  285. package/dist/mjs/services/leave-embargoes.service.d.ts +0 -51
  286. package/dist/mjs/services/leave-embargoes.service.js +0 -44
  287. package/dist/mjs/services/leave-request.service.d.ts +0 -51
  288. package/dist/mjs/services/leave-request.service.js +0 -48
  289. package/dist/mjs/services/leave-types.service.d.ts +0 -11
  290. package/dist/mjs/services/leave-types.service.js +0 -12
  291. package/dist/mjs/services/leave.service.d.ts +0 -51
  292. package/dist/mjs/services/leave.service.js +0 -44
  293. package/dist/mjs/services/locations.service.d.ts +0 -51
  294. package/dist/mjs/services/locations.service.js +0 -44
  295. package/dist/mjs/services/pins.service.d.ts +0 -18
  296. package/dist/mjs/services/pins.service.js +0 -12
  297. package/dist/mjs/services/roles.service.d.ts +0 -51
  298. package/dist/mjs/services/roles.service.js +0 -44
  299. package/dist/mjs/services/service.d.ts +0 -47
  300. package/dist/mjs/services/service.js +0 -101
  301. package/dist/mjs/services/settings.service.d.ts +0 -12
  302. package/dist/mjs/services/settings.service.js +0 -12
  303. package/dist/mjs/services/shifts.service.d.ts +0 -120
  304. package/dist/mjs/services/shifts.service.js +0 -96
  305. package/dist/mjs/services/terminals-active.service.d.ts +0 -46
  306. package/dist/mjs/services/terminals-active.service.js +0 -39
  307. package/dist/mjs/services/terminals.service.d.ts +0 -50
  308. package/dist/mjs/services/terminals.service.js +0 -44
  309. package/dist/mjs/services/time-zone.service.d.ts +0 -14
  310. package/dist/mjs/services/time-zone.service.js +0 -25
  311. package/dist/mjs/services/toil-accruals.service.d.ts +0 -27
  312. package/dist/mjs/services/toil-accruals.service.js +0 -35
  313. package/dist/mjs/services/toil-allowance.service.d.ts +0 -9
  314. package/dist/mjs/services/toil-allowance.service.js +0 -20
  315. package/dist/mjs/services/users-clock-in.service.d.ts +0 -66
  316. package/dist/mjs/services/users-clock-in.service.js +0 -47
  317. package/dist/mjs/services/users.service.d.ts +0 -51
  318. package/dist/mjs/services/users.service.js +0 -44
  319. package/dist/mjs/version.d.ts +0 -3
  320. package/dist/mjs/version.js +0 -1
  321. package/fixup +0 -12
  322. package/src/rotacloud.ts +0 -207
  323. package/src/services/accounts.service.ts +0 -52
  324. package/src/services/attendance.service.ts +0 -106
  325. package/src/services/auth.service.ts +0 -13
  326. package/src/services/availability.service.ts +0 -58
  327. package/src/services/daily-budgets.service.ts +0 -65
  328. package/src/services/daily-revenue.service.ts +0 -62
  329. package/src/services/day-notes.service.ts +0 -98
  330. package/src/services/days-off.service.ts +0 -85
  331. package/src/services/documents.service.ts +0 -142
  332. package/src/services/groups.service.ts +0 -97
  333. package/src/services/index.ts +0 -25
  334. package/src/services/leave-embargoes.service.ts +0 -106
  335. package/src/services/leave-request.service.ts +0 -113
  336. package/src/services/leave-types.service.ts +0 -16
  337. package/src/services/leave.service.ts +0 -100
  338. package/src/services/locations.service.ts +0 -106
  339. package/src/services/pins.service.ts +0 -21
  340. package/src/services/roles.service.ts +0 -96
  341. package/src/services/service.ts +0 -168
  342. package/src/services/settings.service.ts +0 -19
  343. package/src/services/shifts.service.ts +0 -200
  344. package/src/services/terminals-active.service.ts +0 -85
  345. package/src/services/terminals.service.ts +0 -93
  346. package/src/services/time-zone.service.ts +0 -34
  347. package/src/services/toil-accruals.service.ts +0 -56
  348. package/src/services/toil-allowance.service.ts +0 -23
  349. package/src/services/users-clock-in.service.ts +0 -130
  350. package/src/services/users.service.ts +0 -96
  351. package/src/version.ts +0 -1
  352. package/tsconfig-base.json +0 -98
  353. package/tsconfig-cjs.json +0 -8
  354. package/tsconfig.json +0 -8
  355. /package/dist/{mjs/interfaces/account-service.interface.js → client-builder.test.d.ts} +0 -0
  356. /package/dist/{mjs/interfaces/account-services.interface.js → endpoint.js} +0 -0
  357. /package/dist/{cjs/interfaces → interfaces}/account-service.interface.d.ts +0 -0
  358. /package/dist/{mjs/interfaces/account.interface.js → interfaces/account-service.interface.js} +0 -0
  359. /package/dist/{cjs/interfaces → interfaces}/account-services.interface.d.ts +0 -0
  360. /package/dist/{mjs/interfaces/attendance.interface.js → interfaces/account-services.interface.js} +0 -0
  361. /package/dist/{cjs/interfaces → interfaces}/account.interface.d.ts +0 -0
  362. /package/dist/{mjs/interfaces/auth.interface.js → interfaces/account.interface.js} +0 -0
  363. /package/dist/{cjs/interfaces → interfaces}/attendance.interface.d.ts +0 -0
  364. /package/dist/{mjs/interfaces/availability-pattern.interface.js → interfaces/attendance.interface.js} +0 -0
  365. /package/dist/{cjs/interfaces → interfaces}/auth.interface.d.ts +0 -0
  366. /package/dist/{mjs/interfaces/availability.interface.js → interfaces/auth.interface.js} +0 -0
  367. /package/dist/{cjs/interfaces → interfaces}/availability-pattern.interface.d.ts +0 -0
  368. /package/dist/{mjs/interfaces/daily-budgets.interface.js → interfaces/availability-pattern.interface.js} +0 -0
  369. /package/dist/{cjs/interfaces → interfaces}/availability.interface.d.ts +0 -0
  370. /package/dist/{mjs/interfaces/daily-revenue.interface.js → interfaces/availability.interface.js} +0 -0
  371. /package/dist/{cjs/interfaces → interfaces}/daily-budgets.interface.d.ts +0 -0
  372. /package/dist/{mjs/interfaces/day-note.interface.js → interfaces/daily-budgets.interface.js} +0 -0
  373. /package/dist/{cjs/interfaces → interfaces}/daily-revenue.interface.d.ts +0 -0
  374. /package/dist/{mjs/interfaces/days-off-pattern.interface.js → interfaces/daily-revenue.interface.js} +0 -0
  375. /package/dist/{cjs/interfaces → interfaces}/day-note.interface.d.ts +0 -0
  376. /package/dist/{mjs/interfaces/days-off.interface.js → interfaces/day-note.interface.js} +0 -0
  377. /package/dist/{cjs/interfaces → interfaces}/days-off-pattern.interface.d.ts +0 -0
  378. /package/dist/{mjs/interfaces/document.interface.js → interfaces/days-off-pattern.interface.js} +0 -0
  379. /package/dist/{cjs/interfaces → interfaces}/days-off.interface.d.ts +0 -0
  380. /package/dist/{mjs/interfaces/drop-request.interface.js → interfaces/days-off.interface.js} +0 -0
  381. /package/dist/{cjs/interfaces → interfaces}/document.interface.d.ts +0 -0
  382. /package/dist/{mjs/interfaces/group.interface.js → interfaces/document.interface.js} +0 -0
  383. /package/dist/{cjs/interfaces → interfaces}/drop-request.interface.d.ts +0 -0
  384. /package/dist/{mjs/interfaces/holiday_allowance.interface.js → interfaces/drop-request.interface.js} +0 -0
  385. /package/dist/{cjs/interfaces → interfaces}/group.interface.d.ts +0 -0
  386. /package/dist/{mjs/interfaces/leave-date.interface.js → interfaces/group.interface.js} +0 -0
  387. /package/dist/{cjs/interfaces → interfaces}/holiday_allowance.interface.d.ts +0 -0
  388. /package/dist/{mjs/interfaces/leave-embargo.interface.js → interfaces/holiday_allowance.interface.js} +0 -0
  389. /package/dist/{cjs/interfaces → interfaces}/index.d.ts +0 -0
  390. /package/dist/{mjs/interfaces → interfaces}/index.js +0 -0
  391. /package/dist/{mjs/interfaces/leave-rate.interface.js → interfaces/launch-terminal.interface.js} +0 -0
  392. /package/dist/{cjs/interfaces → interfaces}/leave-date.interface.d.ts +0 -0
  393. /package/dist/{mjs/interfaces/leave-request.interface.js → interfaces/leave-date.interface.js} +0 -0
  394. /package/dist/{cjs/interfaces → interfaces}/leave-embargo.interface.d.ts +0 -0
  395. /package/dist/{mjs/interfaces/leave-type.interface.js → interfaces/leave-embargo.interface.js} +0 -0
  396. /package/dist/{cjs/interfaces → interfaces}/leave-rate.interface.d.ts +0 -0
  397. /package/dist/{mjs/interfaces/leave.interface.js → interfaces/leave-rate.interface.js} +0 -0
  398. /package/dist/{mjs/interfaces/location-coordinate.interface.js → interfaces/leave-request.interface.js} +0 -0
  399. /package/dist/{cjs/interfaces → interfaces}/leave-type.interface.d.ts +0 -0
  400. /package/dist/{mjs/interfaces/location.interface.js → interfaces/leave-type.interface.js} +0 -0
  401. /package/dist/{mjs/interfaces/logbook-category.interface.js → interfaces/leave.interface.js} +0 -0
  402. /package/dist/{cjs/interfaces → interfaces}/location-coordinate.interface.d.ts +0 -0
  403. /package/dist/{mjs/interfaces/logbook-event.interface.js → interfaces/location-coordinate.interface.js} +0 -0
  404. /package/dist/{cjs/interfaces → interfaces}/location.interface.d.ts +0 -0
  405. /package/dist/{mjs/interfaces/pay-period.interface.js → interfaces/location.interface.js} +0 -0
  406. /package/dist/{cjs/interfaces → interfaces}/logbook-category.interface.d.ts +0 -0
  407. /package/dist/{mjs/interfaces/pin.interface.js → interfaces/logbook-category.interface.js} +0 -0
  408. /package/dist/{cjs/interfaces → interfaces}/logbook-event.interface.d.ts +0 -0
  409. /package/dist/{mjs/interfaces/query-params/attendance-query-params.interface.js → interfaces/logbook-event.interface.js} +0 -0
  410. /package/dist/{cjs/interfaces → interfaces}/pay-period.interface.d.ts +0 -0
  411. /package/dist/{mjs/interfaces/query-params/availability-patterns-query-params.interface.js → interfaces/pay-period.interface.js} +0 -0
  412. /package/dist/{cjs/interfaces → interfaces}/pin.interface.d.ts +0 -0
  413. /package/dist/{mjs/interfaces/query-params/availability-query-params.interface.js → interfaces/pin.interface.js} +0 -0
  414. /package/dist/{cjs/interfaces → interfaces}/query-params/attendance-query-params.interface.d.ts +0 -0
  415. /package/dist/{mjs/interfaces/query-params/common-shift-times-query-params.interface.js → interfaces/query-params/attendance-query-params.interface.js} +0 -0
  416. /package/dist/{cjs/interfaces → interfaces}/query-params/availability-patterns-query-params.interface.d.ts +0 -0
  417. /package/dist/{mjs/interfaces/query-params/daily-budgets-query-params.interface.js → interfaces/query-params/availability-patterns-query-params.interface.js} +0 -0
  418. /package/dist/{cjs/interfaces → interfaces}/query-params/availability-query-params.interface.d.ts +0 -0
  419. /package/dist/{mjs/interfaces/query-params/daily-revenue-query-params.interface.js → interfaces/query-params/availability-query-params.interface.js} +0 -0
  420. /package/dist/{cjs/interfaces → interfaces}/query-params/common-shift-times-query-params.interface.d.ts +0 -0
  421. /package/dist/{mjs/interfaces/query-params/day-notes-query-params.interface.js → interfaces/query-params/common-shift-times-query-params.interface.js} +0 -0
  422. /package/dist/{cjs/interfaces → interfaces}/query-params/daily-budgets-query-params.interface.d.ts +0 -0
  423. /package/dist/{mjs/interfaces/query-params/days-off-patterns-query-params.interface.js → interfaces/query-params/daily-budgets-query-params.interface.js} +0 -0
  424. /package/dist/{cjs/interfaces → interfaces}/query-params/daily-revenue-query-params.interface.d.ts +0 -0
  425. /package/dist/{mjs/interfaces/query-params/days-off-query-params.interface.js → interfaces/query-params/daily-revenue-query-params.interface.js} +0 -0
  426. /package/dist/{cjs/interfaces → interfaces}/query-params/day-notes-query-params.interface.d.ts +0 -0
  427. /package/dist/{mjs/interfaces/query-params/documents-query-params.interface.js → interfaces/query-params/day-notes-query-params.interface.js} +0 -0
  428. /package/dist/{cjs/interfaces → interfaces}/query-params/days-off-patterns-query-params.interface.d.ts +0 -0
  429. /package/dist/{mjs/interfaces/query-params/groups-query-params.interface.js → interfaces/query-params/days-off-patterns-query-params.interface.js} +0 -0
  430. /package/dist/{cjs/interfaces → interfaces}/query-params/days-off-query-params.interface.d.ts +0 -0
  431. /package/dist/{mjs/interfaces/query-params/leave-embargoes-query-params.interface.js → interfaces/query-params/days-off-query-params.interface.js} +0 -0
  432. /package/dist/{cjs/interfaces → interfaces}/query-params/documents-query-params.interface.d.ts +0 -0
  433. /package/dist/{mjs/interfaces/query-params/leave-query-params.interface.js → interfaces/query-params/documents-query-params.interface.js} +0 -0
  434. /package/dist/{cjs/interfaces → interfaces}/query-params/groups-query-params.interface.d.ts +0 -0
  435. /package/dist/{mjs/interfaces/query-params/leave-requests-query-params.interface.js → interfaces/query-params/groups-query-params.interface.js} +0 -0
  436. /package/dist/{cjs/interfaces → interfaces}/query-params/index.d.ts +0 -0
  437. /package/dist/{mjs/interfaces → interfaces}/query-params/index.js +0 -0
  438. /package/dist/{cjs/interfaces → interfaces}/query-params/leave-embargoes-query-params.interface.d.ts +0 -0
  439. /package/dist/{mjs/interfaces/query-params/locations-query-params.interface.js → interfaces/query-params/leave-embargoes-query-params.interface.js} +0 -0
  440. /package/dist/{cjs/interfaces → interfaces}/query-params/leave-query-params.interface.d.ts +0 -0
  441. /package/dist/{mjs/interfaces/query-params/logbook-events-query-params.interface.js → interfaces/query-params/leave-query-params.interface.js} +0 -0
  442. /package/dist/{cjs/interfaces → interfaces}/query-params/leave-requests-query-params.interface.d.ts +0 -0
  443. /package/dist/{mjs/interfaces/query-params/pay-periods-query-params.interface.js → interfaces/query-params/leave-requests-query-params.interface.js} +0 -0
  444. /package/dist/{cjs/interfaces → interfaces}/query-params/locations-query-params.interface.d.ts +0 -0
  445. /package/dist/{mjs/interfaces/query-params/roles-query-params.interface.js → interfaces/query-params/locations-query-params.interface.js} +0 -0
  446. /package/dist/{cjs/interfaces → interfaces}/query-params/logbook-events-query-params.interface.d.ts +0 -0
  447. /package/dist/{mjs/interfaces/query-params/settings-query-params.interface.js → interfaces/query-params/logbook-events-query-params.interface.js} +0 -0
  448. /package/dist/{cjs/interfaces → interfaces}/query-params/pay-periods-query-params.interface.d.ts +0 -0
  449. /package/dist/{mjs/interfaces/query-params/shifts-query-params.interface.js → interfaces/query-params/pay-periods-query-params.interface.js} +0 -0
  450. /package/dist/{cjs/interfaces → interfaces}/query-params/roles-query-params.interface.d.ts +0 -0
  451. /package/dist/{mjs/interfaces/query-params/swap-requests-query-params.interface.js → interfaces/query-params/roles-query-params.interface.js} +0 -0
  452. /package/dist/{cjs/interfaces → interfaces}/query-params/settings-query-params.interface.d.ts +0 -0
  453. /package/dist/{mjs/interfaces/query-params/terminals-query-params.interface.js → interfaces/query-params/settings-query-params.interface.js} +0 -0
  454. /package/dist/{cjs/interfaces → interfaces}/query-params/shifts-query-params.interface.d.ts +0 -0
  455. /package/dist/{mjs/interfaces/query-params/toil-accruals-query-params.interface.js → interfaces/query-params/shifts-query-params.interface.js} +0 -0
  456. /package/dist/{cjs/interfaces → interfaces}/query-params/swap-requests-query-params.interface.d.ts +0 -0
  457. /package/dist/{mjs/interfaces/query-params/toil-allowance-query-params.interface.js → interfaces/query-params/swap-requests-query-params.interface.js} +0 -0
  458. /package/dist/{cjs/interfaces → interfaces}/query-params/terminals-query-params.interface.d.ts +0 -0
  459. /package/dist/{mjs/interfaces/query-params/unavailability-requests-query-params.interface.js → interfaces/query-params/terminals-query-params.interface.js} +0 -0
  460. /package/dist/{cjs/interfaces → interfaces}/query-params/toil-accruals-query-params.interface.d.ts +0 -0
  461. /package/dist/{mjs/interfaces/query-params/users-query-params.interface.js → interfaces/query-params/toil-accruals-query-params.interface.js} +0 -0
  462. /package/dist/{mjs/interfaces/role-rate.interface.js → interfaces/query-params/toil-allowance-query-params.interface.js} +0 -0
  463. /package/dist/{cjs/interfaces → interfaces}/query-params/unavailability-requests-query-params.interface.d.ts +0 -0
  464. /package/dist/{mjs/interfaces/role.interface.js → interfaces/query-params/unavailability-requests-query-params.interface.js} +0 -0
  465. /package/dist/{cjs/interfaces → interfaces}/query-params/users-query-params.interface.d.ts +0 -0
  466. /package/dist/{mjs/interfaces/settings.interface.js → interfaces/query-params/users-query-params.interface.js} +0 -0
  467. /package/dist/{cjs/interfaces → interfaces}/role-rate.interface.d.ts +0 -0
  468. /package/dist/{mjs/interfaces/shift.interface.js → interfaces/role-rate.interface.js} +0 -0
  469. /package/dist/{cjs/interfaces → interfaces}/role.interface.d.ts +0 -0
  470. /package/dist/{mjs/interfaces/swap-request.interface.js → interfaces/role.interface.js} +0 -0
  471. /package/dist/{mjs/interfaces → interfaces}/sdk-config.interface.js +0 -0
  472. /package/dist/{cjs/interfaces → interfaces}/settings.interface.d.ts +0 -0
  473. /package/dist/{mjs/interfaces/terminal.interface.js → interfaces/settings.interface.js} +0 -0
  474. /package/dist/{mjs/interfaces/time-zone.interface.js → interfaces/shift.interface.js} +0 -0
  475. /package/dist/{cjs/interfaces → interfaces}/swap-request.interface.d.ts +0 -0
  476. /package/dist/{mjs/interfaces/toil-accrual.interface.js → interfaces/swap-request.interface.js} +0 -0
  477. /package/dist/{cjs/interfaces → interfaces}/terminal.interface.d.ts +0 -0
  478. /package/dist/{mjs/interfaces/toil-allowance.interface.js → interfaces/terminal.interface.js} +0 -0
  479. /package/dist/{cjs/interfaces → interfaces}/time-zone.interface.d.ts +0 -0
  480. /package/dist/{mjs/interfaces/user.interface.js → interfaces/time-zone.interface.js} +0 -0
  481. /package/dist/{cjs/interfaces → interfaces}/toil-accrual.interface.d.ts +0 -0
  482. /package/dist/{mjs/interfaces/users-clocked-in.interface.js → interfaces/toil-accrual.interface.js} +0 -0
  483. /package/dist/{cjs/interfaces → interfaces}/toil-allowance.interface.d.ts +0 -0
  484. /package/dist/{mjs/interfaces/users-clocked-out.interface.js → interfaces/toil-allowance.interface.js} +0 -0
  485. /package/dist/{cjs/interfaces → interfaces}/users-clocked-in.interface.d.ts +0 -0
  486. /package/dist/{cjs/interfaces → interfaces}/users-clocked-out.interface.d.ts +0 -0
  487. /package/dist/{cjs/models → models}/index.d.ts +0 -0
  488. /package/dist/{mjs/models → models}/index.js +0 -0
@@ -0,0 +1,121 @@
1
+ import { describe, expect, test, vi } from 'vitest';
2
+ import { Axios } from 'axios';
3
+ import { createSdkClient } from './client-builder.js';
4
+ import { getOpMap } from './ops.js';
5
+ import { ServiceSpecification } from './service.js';
6
+
7
+ let mockAxiosClient: Axios;
8
+ vi.mock(import('axios'), async (importOriginal) => {
9
+ const mod = await importOriginal();
10
+ return {
11
+ ...mod,
12
+ default: {
13
+ ...mod.default,
14
+ create: (...args) => {
15
+ mockAxiosClient = mod.default.create(...args);
16
+ mockAxiosClient.request = vi.fn().mockImplementation(() => Promise.resolve({}));
17
+ return mockAxiosClient;
18
+ },
19
+ },
20
+ // NOTE: vitest does not correctly infer the type for default hence the cast
21
+ } as any;
22
+ });
23
+
24
+ describe('Operations', () => {
25
+ const service = {
26
+ endpoint: 'settings',
27
+ endpointVersion: 'v1',
28
+ operations: ['get', 'list'],
29
+ customOperations: {
30
+ promiseOp: async () => 3,
31
+ },
32
+ } satisfies ServiceSpecification;
33
+ const clientBuilder = createSdkClient({
34
+ service,
35
+ });
36
+ const client = clientBuilder({ basicAuth: '' });
37
+
38
+ test('operations returning a request config trigger a request call', async () => {
39
+ const basicOp = getOpMap().v1.get;
40
+ const basicOpRes = basicOp(
41
+ {
42
+ client: mockAxiosClient,
43
+ request: {},
44
+ service,
45
+ sdkConfig: { apiKey: '' },
46
+ },
47
+ 1,
48
+ );
49
+ expect(basicOpRes).toStrictEqual(
50
+ expect.objectContaining({
51
+ method: 'GET',
52
+ }),
53
+ );
54
+
55
+ await client.service.get(1);
56
+ expect(mockAxiosClient.request).toHaveBeenCalledWith(expect.objectContaining(basicOpRes));
57
+ });
58
+
59
+ test('operations returning a promise are returned as is', async () => {
60
+ const promiseOpRes = await service.customOperations.promiseOp();
61
+ expect(promiseOpRes).toStrictEqual(await client.service.promiseOp());
62
+ });
63
+
64
+ describe('list op', () => {
65
+ test('respects `maxResults` parameter in legacy pagination', async () => {
66
+ vi.spyOn(mockAxiosClient, 'request').mockResolvedValue({ data: [] });
67
+
68
+ await client.service.list({}, { maxResults: 2 }).next();
69
+ expect(mockAxiosClient.request).toHaveBeenCalledWith(
70
+ expect.objectContaining({
71
+ url: expect.any(String),
72
+ params: {
73
+ limit: 2,
74
+ },
75
+ }),
76
+ );
77
+ });
78
+
79
+ test('automatically paginates', async () => {
80
+ const pageTotal = 3;
81
+ let pageCount = 0;
82
+ vi.spyOn(mockAxiosClient, 'request').mockResolvedValue({
83
+ headers: {
84
+ 'x-limit': 1,
85
+ 'x-total-count': pageTotal,
86
+ // eslint-disable-next-line no-plusplus
87
+ 'x-offset': pageCount++,
88
+ },
89
+ data: [],
90
+ });
91
+
92
+ for await (const res of client.service.list({})) {
93
+ res;
94
+ }
95
+ expect(mockAxiosClient.request).toHaveBeenCalledTimes(pageTotal);
96
+ });
97
+
98
+ test('stops automatic pagination after maxResults reached', async () => {
99
+ const pageLimit = 2;
100
+ const pageTotal = 6;
101
+ let pageCount = 0;
102
+ vi.spyOn(mockAxiosClient, 'request').mockResolvedValue({
103
+ headers: {
104
+ 'x-limit': pageLimit,
105
+ 'x-total-count': pageTotal,
106
+ // eslint-disable-next-line no-plusplus
107
+ 'x-offset': pageCount++,
108
+ },
109
+ data: new Array(pageLimit).fill('entity'),
110
+ });
111
+
112
+ let resultCount = 0;
113
+ for await (const res of client.service.list({}, { maxResults: 3 })) {
114
+ resultCount += 1;
115
+ res;
116
+ }
117
+ expect(resultCount).toBe(3);
118
+ expect(mockAxiosClient.request).toHaveBeenCalledTimes(2);
119
+ });
120
+ });
121
+ });
package/src/ops.ts ADDED
@@ -0,0 +1,533 @@
1
+ import { Axios, AxiosRequestConfig, AxiosResponse } from 'axios';
2
+ import { ServiceSpecification } from './service.js';
3
+ import { RequestOptions, QueryParameterValue, RequirementsOf, assert } from './utils.js';
4
+ import { Endpoint, EndpointVersion } from './endpoint.js';
5
+ import { SDKConfig } from './main.js';
6
+
7
+ /** Supported common operations */
8
+ export type Operation =
9
+ | 'get'
10
+ | 'list'
11
+ | 'listAll'
12
+ | 'listByPage'
13
+ | 'delete'
14
+ | 'deleteBatch'
15
+ | 'create'
16
+ | 'update'
17
+ | 'updateBatch';
18
+ /** Context provided to all operations */
19
+ export type OperationContext = {
20
+ client: Readonly<Axios>;
21
+ request: Readonly<AxiosRequestConfig>;
22
+ service: Readonly<ServiceSpecification>;
23
+ sdkConfig: Readonly<SDKConfig>;
24
+ };
25
+
26
+ /** Defines the mapping between the data sent for a given request (e.g with
27
+ * "POST" method) and the return type expected back
28
+ *
29
+ * NOTE: This is not type safe on purpose. There is no way to guarantee that a
30
+ * given HTTP call will return a specific type in TS alone
31
+ */
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
+ export type RequestConfig<RequestData, ResponseData> = AxiosRequestConfig<RequestData>;
34
+
35
+ /** Function to define an {@see OpFunction}
36
+ *
37
+ * This is intended as a convenient way of defining {@see OpFunction}s that can then be
38
+ * "built" ready for the end user to call ({@see buildOp})
39
+ * */
40
+ export type OpDef<T, Param = any, Opts extends Partial<RequestOptions<any>> = RequestOptions<unknown>, Return = T> =
41
+ | ((ctx: OperationContext, param: Param, opts?: Opts) => RequestConfig<T, Return>)
42
+ | ((ctx: OperationContext, param: Param, opts?: Opts) => AsyncIterable<T>)
43
+ | ((ctx: OperationContext, param: Param, opts?: Opts) => Promise<T>);
44
+
45
+ /** Operation function type to be called by the end user of the SDK.
46
+ *
47
+ * All methods on services follow this typing
48
+ * */
49
+ export type OpFunction<R = any, Param = undefined, Opts = RequestOptions<unknown>> = R extends
50
+ | AsyncIterable<infer U>
51
+ | Promise<Iterable<infer U>>
52
+ ? // List based op parameter names
53
+ Param extends undefined
54
+ ? {
55
+ (query?: Param): R;
56
+ <F extends keyof U>(
57
+ query: Param,
58
+ options: { fields: F[] } & RequestOptions<U>,
59
+ ): R extends AsyncIterable<U>
60
+ ? Promise<AsyncIterable<Pick<U, F>>>
61
+ : R extends Promise<Array<U>>
62
+ ? Promise<Array<Pick<U, F>>>
63
+ : Promise<Iterable<Pick<U, F>>>;
64
+ (query: Param, options?: Opts): R;
65
+ }
66
+ : Partial<Param> extends Param
67
+ ? {
68
+ (query?: Param): R;
69
+ <F extends keyof U>(
70
+ query: Param,
71
+ options: { fields: F[] } & RequestOptions<U>,
72
+ ): R extends AsyncIterable<U>
73
+ ? Promise<AsyncIterable<Pick<U, F>>>
74
+ : R extends Promise<Array<U>>
75
+ ? Promise<Array<Pick<U, F>>>
76
+ : Promise<Iterable<Pick<U, F>>>;
77
+ (query?: Param, options?: Opts): R;
78
+ }
79
+ : {
80
+ (query: Param): R;
81
+ <F extends keyof U>(
82
+ query: Param,
83
+ options: { fields: F[] } & RequestOptions<U>,
84
+ ): R extends AsyncIterable<U>
85
+ ? Promise<AsyncIterable<Pick<U, F>>>
86
+ : R extends Promise<Array<U>>
87
+ ? Promise<Array<Pick<U, F>>>
88
+ : Promise<Iterable<Pick<U, F>>>;
89
+ (query: Param, Options?: Opts): R;
90
+ }
91
+ : Param extends number
92
+ ? {
93
+ (id: Param): R;
94
+ <F extends keyof Awaited<R>>(
95
+ id: Param,
96
+ options: { fields: F[]; rawResponse: true } & RequestOptions<Awaited<R>>,
97
+ ): Promise<AxiosResponse<Pick<Awaited<R>, F>>>;
98
+ <F extends keyof Awaited<R>>(
99
+ id: Param,
100
+ options: { fields: F[] } & RequestOptions<Awaited<R>>,
101
+ ): Promise<Pick<Awaited<R>, F>>;
102
+ (
103
+ id: Param,
104
+ options?: {
105
+ rawResponse: true;
106
+ } & RequestOptions<Awaited<R>>,
107
+ ): Promise<AxiosResponse<Awaited<R>>>;
108
+ (id: Param, options?: RequestOptions<Awaited<R>>): R;
109
+ }
110
+ : Param extends undefined
111
+ ? {
112
+ (entity?: Param): R;
113
+ <F extends keyof Awaited<R>>(
114
+ entity: Param,
115
+ options: { fields: F[]; rawResponse: true } & RequestOptions<Awaited<R>>,
116
+ ): Promise<AxiosResponse<Pick<Awaited<R>, F>>>;
117
+ <F extends keyof Awaited<R>>(
118
+ entity: Param,
119
+ options: { fields: F[] } & RequestOptions<Awaited<R>>,
120
+ ): Promise<Pick<Awaited<R>, F>>;
121
+ (
122
+ entity?: Param,
123
+ options?: {
124
+ rawResponse: true;
125
+ } & RequestOptions<Awaited<R>>,
126
+ ): Promise<AxiosResponse<Awaited<R>>>;
127
+ (entity?: Param, options?: RequestOptions<Awaited<R>>): R;
128
+ }
129
+ : // Entity based op parameter names
130
+ {
131
+ (entity: Param): R;
132
+ <F extends keyof Awaited<R>>(
133
+ entity: Param,
134
+ options: { fields: F[]; rawResponse: true } & RequestOptions<Awaited<R>>,
135
+ ): Promise<AxiosResponse<Pick<Awaited<R>, F>>>;
136
+ <F extends keyof Awaited<R>>(
137
+ entity: Param,
138
+ options: { fields: F[] } & RequestOptions<Awaited<R>>,
139
+ ): Promise<Pick<Awaited<R>, F>>;
140
+ (
141
+ entity: Param,
142
+ options?: {
143
+ rawResponse: true;
144
+ } & RequestOptions<Awaited<R>>,
145
+ ): Promise<AxiosResponse<Awaited<R>>>;
146
+ (entity: Param, options?: RequestOptions<Awaited<R>>): R;
147
+ };
148
+
149
+ /** Wrapper type for expressing the response returned by a v2 list op supported endpoint */
150
+ interface PagedResponse<T> {
151
+ /** List of entities in a page */
152
+ data: T[];
153
+ /** Metadata about the current page */
154
+ pagination: {
155
+ /**
156
+ * The "cursor" for the next page where `null` means there is no next page
157
+ *
158
+ * Used as a value to the query parameter `cursor` in a supported endpoint
159
+ */
160
+ next: string | null;
161
+ /** Total count of entities matching the list query */
162
+ count: number;
163
+ };
164
+ }
165
+
166
+ /** Utility for creating a query params map needed by most API requests */
167
+ export function paramsFromOptions<T>(opts: RequestOptions<T>): Record<string, QueryParameterValue> {
168
+ return {
169
+ fields: opts?.fields,
170
+ limit: opts?.maxResults,
171
+ dry_run: opts?.dryRun,
172
+ };
173
+ }
174
+
175
+ /** Converts a given `{@see AxiosRequestConfig}` into an iterable of paginated requests
176
+ *
177
+ * Utility for simplifying {@see listOp}
178
+ */
179
+ function* requestPaginated<T>(
180
+ response: AxiosResponse<T>,
181
+ requestConfig: AxiosRequestConfig<T>,
182
+ ): Generator<AxiosRequestConfig<T>> {
183
+ const fallbackLimit = 20;
184
+ const limit = Number(response.headers?.['x-limit']) || fallbackLimit;
185
+ const entityCount = Number(response.headers?.['x-total-count']) || 0;
186
+ const requestOffset = Number(response.headers?.['x-offset']) || 0;
187
+
188
+ for (let offset = requestOffset + limit; offset < entityCount; offset += limit) {
189
+ yield {
190
+ ...requestConfig,
191
+ params: {
192
+ ...requestConfig.params,
193
+ limit,
194
+ offset,
195
+ exclude_link_header: true,
196
+ },
197
+ };
198
+ }
199
+ }
200
+
201
+ /** Operation for getting an entity */
202
+ function getOp<T = undefined>(ctx: OperationContext, id: number): RequestConfig<unknown, T> {
203
+ return {
204
+ ...ctx.request,
205
+ method: 'GET',
206
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}/${id}`,
207
+ };
208
+ }
209
+
210
+ /** Operation for creating an entity */
211
+ function createOp<T = unknown, NewEntity = unknown>(
212
+ ctx: OperationContext,
213
+ newEntity: NewEntity,
214
+ ): RequestConfig<NewEntity, T> {
215
+ return {
216
+ ...ctx.request,
217
+ method: 'POST',
218
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
219
+ data: newEntity,
220
+ };
221
+ }
222
+
223
+ /** Operation for updating an entity */
224
+ function updateOp<Return, Entity extends { id: number } & Partial<Return>>(
225
+ ctx: OperationContext,
226
+ entity: Entity,
227
+ ): RequestConfig<Entity, Return> {
228
+ return {
229
+ ...ctx.request,
230
+ method: 'POST',
231
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}/${entity.id}`,
232
+ data: entity,
233
+ };
234
+ }
235
+
236
+ /** Operation for deleting a list of entities */
237
+ async function updateBatchOp<Return, Entity extends { id: number } & Partial<Return>>(
238
+ ctx: OperationContext,
239
+ entities: Entity[],
240
+ ): Promise<{ success: Return[]; failed: { id: number; error: string }[] }> {
241
+ const res = await ctx.client.request<{ code: number; data?: Return; error?: string }[]>({
242
+ ...ctx.request,
243
+ method: 'POST',
244
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
245
+ data: entities,
246
+ });
247
+
248
+ return res.data.reduce(
249
+ (acc, entityRes, shiftIdx) => {
250
+ if (entityRes.error) {
251
+ acc.failed.push({ id: entities[shiftIdx].id, error: entityRes.error });
252
+ } else if (entityRes.data) {
253
+ acc.success.push(entityRes.data);
254
+ }
255
+ return acc;
256
+ },
257
+ { success: [] as Return[], failed: [] as { id: number; error: string }[] },
258
+ );
259
+ }
260
+
261
+ /** Operation for deleting an entity */
262
+ function deleteOp(ctx: OperationContext, id: number): RequestConfig<unknown, void> {
263
+ return {
264
+ ...ctx.request,
265
+ method: 'DELETE',
266
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}/${id}`,
267
+ };
268
+ }
269
+
270
+ /** Operation for deleting a list of entities */
271
+ function deleteBatchOp(ctx: OperationContext, ids: number[]): RequestConfig<unknown, void> {
272
+ return {
273
+ ...ctx.request,
274
+ method: 'DELETE',
275
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
276
+ data: ids,
277
+ };
278
+ }
279
+
280
+ /** Operation for listing all entities on a v1 endpoint for a given query by
281
+ * automatically handling pagination as and when needed
282
+ */
283
+ export async function* listOp<T, Query>(
284
+ ctx: OperationContext,
285
+ query: Query,
286
+ // NOTE: offset is only supported in v1
287
+ opts?: RequestOptions<T[]> & { offset?: number },
288
+ ): AsyncGenerator<T> {
289
+ const queriedRequest = {
290
+ ...ctx.request,
291
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
292
+ params: {
293
+ ...ctx.request.params,
294
+ ...query,
295
+ offset: opts?.offset,
296
+ },
297
+ };
298
+ const res = await ctx.client.request<T[]>(queriedRequest);
299
+ const maxEntities = opts?.maxResults ?? Infinity;
300
+ let entityCount = res.data.length;
301
+
302
+ assert(Array.isArray(res.data), 'list can only be performed on endpoints returning an array');
303
+ yield* res.data.slice(0, maxEntities);
304
+ if (entityCount >= maxEntities) return;
305
+
306
+ for (const pagedRequest of requestPaginated(res, ctx.request)) {
307
+ const pagedRes = await ctx.client.request<T[]>(pagedRequest);
308
+ for (const entity of pagedRes.data) {
309
+ yield entity;
310
+ entityCount += 1;
311
+ if (entityCount >= maxEntities) return;
312
+ }
313
+ }
314
+ }
315
+
316
+ /** Operation for listing all entities on a v2 endpoint for a given query by
317
+ * automatically handling pagination as and when needed
318
+ */
319
+ export async function* listV2Op<T, Query>(
320
+ ctx: OperationContext,
321
+ query: Query,
322
+ opts?: RequestOptions<T[]>,
323
+ ): AsyncGenerator<T> {
324
+ const queriedRequest = {
325
+ ...ctx.request,
326
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
327
+ params: {
328
+ ...ctx.request.params,
329
+ ...query,
330
+ limit: opts?.maxResults,
331
+ },
332
+ };
333
+ const res = await ctx.client.request<PagedResponse<T>>(queriedRequest);
334
+ const { data: entities, pagination } = res.data;
335
+ const maxEntities = opts?.maxResults ?? Infinity;
336
+ let pagedEntityCount = entities.length;
337
+
338
+ assert(Array.isArray(entities), 'list can only be performed on endpoints returning an array');
339
+ yield* entities.slice(0, maxEntities);
340
+ if (pagedEntityCount >= maxEntities) return;
341
+
342
+ let nextPage: string | undefined = pagination.next ?? undefined;
343
+ while (nextPage !== undefined) {
344
+ const pagedRes = await ctx.client.request<PagedResponse<T>>({
345
+ ...queriedRequest,
346
+ params: {
347
+ ...queriedRequest.params,
348
+ limit: pagedEntityCount,
349
+ cursor: nextPage,
350
+ },
351
+ });
352
+ nextPage = pagedRes.data.pagination.next ?? undefined;
353
+ for (const entity of pagedRes.data.data) {
354
+ yield entity;
355
+ pagedEntityCount += 1;
356
+ if (pagedEntityCount >= maxEntities) return;
357
+ }
358
+ }
359
+ }
360
+
361
+ /** Operation for listing all entities on a v1 endpoint for a given query as an array */
362
+ export async function listAllOp<T, Query>(
363
+ ctx: OperationContext,
364
+ query: Query,
365
+ // NOTE: offset is only supported in v1
366
+ opts?: RequestOptions<T[]> & { offset?: number },
367
+ ) {
368
+ const results: T[] = [];
369
+ for await (const entity of listOp<T, Query>(ctx, query, opts)) {
370
+ results.push(entity);
371
+ }
372
+ return results;
373
+ }
374
+
375
+ /** Operation for listing all entities on a v2 endpoint for a given query as an array */
376
+ export async function listAllV2Op<T, Query>(ctx: OperationContext, query: Query, opts?: RequestOptions<T[]>) {
377
+ const results: T[] = [];
378
+ for await (const entity of listV2Op<T, Query>(ctx, query, opts)) {
379
+ results.push(entity);
380
+ }
381
+ return results;
382
+ }
383
+
384
+ /** Operation for listing all entity pages on a v1 endpoint for a given query by
385
+ * automatically handling pagination as and when needed
386
+ */
387
+ async function* listByPageOp<T, Query>(
388
+ ctx: OperationContext,
389
+ query: Query,
390
+ // NOTE: offset is only supported in v1
391
+ opts?: RequestOptions<T[]> & { offset?: number },
392
+ ): AsyncGenerator<AxiosResponse<T[]>> {
393
+ const queriedRequest = {
394
+ ...ctx.request,
395
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
396
+ params: {
397
+ ...ctx.request.params,
398
+ ...query,
399
+ offset: opts?.offset,
400
+ },
401
+ };
402
+ const res = await ctx.client.request<T[]>(queriedRequest);
403
+ const maxEntities = opts?.maxResults ?? Infinity;
404
+ let entityCount = res.data.length;
405
+
406
+ assert(Array.isArray(res.data), 'listByPage can only be performed on endpoints returning an array');
407
+ yield res;
408
+ if (entityCount >= maxEntities) return;
409
+
410
+ for (const pagedRequest of requestPaginated(res, ctx.request)) {
411
+ const pagedRes = await ctx.client.request<T[]>(pagedRequest);
412
+ yield pagedRes;
413
+ entityCount += pagedRes.data.length;
414
+ if (entityCount >= maxEntities) return;
415
+ }
416
+ }
417
+
418
+ /** Operation for listing all entity pages on a v2 endpoint for a given query by
419
+ * automatically handling pagination as and when needed
420
+ */
421
+ async function* listByPageV2Op<T, Query>(
422
+ ctx: OperationContext,
423
+ query: Query,
424
+ opts?: RequestOptions<T[]>,
425
+ ): AsyncGenerator<AxiosResponse<PagedResponse<T>>> {
426
+ const queriedRequest = {
427
+ ...ctx.request,
428
+ url: `${ctx.service.endpointVersion}/${ctx.service.endpoint}`,
429
+ params: {
430
+ ...ctx.request.params,
431
+ ...query,
432
+ },
433
+ };
434
+ const res = await ctx.client.request<PagedResponse<T>>(queriedRequest);
435
+ const maxEntities = opts?.maxResults ?? Infinity;
436
+ let entityCount = res.data.data.length;
437
+
438
+ assert(Array.isArray(res.data.data), 'listByPage can only be performed on endpoints returning an array');
439
+ yield res;
440
+ if (entityCount >= maxEntities) return;
441
+
442
+ let nextPage = res.data.pagination.next;
443
+ while (nextPage !== undefined) {
444
+ const pagedRes = await ctx.client.request<PagedResponse<T>>({
445
+ ...queriedRequest,
446
+ params: {
447
+ ...queriedRequest.params,
448
+ cursor: nextPage,
449
+ },
450
+ });
451
+ nextPage = pagedRes.data.pagination.next;
452
+ yield pagedRes;
453
+ entityCount += pagedRes.data.data.length;
454
+ if (entityCount >= maxEntities) return;
455
+ }
456
+ }
457
+
458
+ /** Builds an {@see Op} definition into an {@see OpFunction} ready to be called
459
+ * by the end user
460
+ *
461
+ * This will map typings and parameters defined on an {@see Op} into a more
462
+ * convenient and type safe format for use by the end user
463
+ */
464
+ export function buildOp<
465
+ F extends OpDef<any>,
466
+ Param = Parameters<F>[1],
467
+ Opts = Parameters<F>[2],
468
+ Return = ReturnType<F> extends RequestConfig<infer _, infer T> ? Promise<T> : ReturnType<F>,
469
+ >(ctx: OperationContext, opFunc: F): OpFunction<Return, Param, Opts>;
470
+ export function buildOp<
471
+ F extends OpDef<any>,
472
+ Param = Parameters<F>[1],
473
+ Return = ReturnType<F> extends RequestConfig<infer _, infer T> ? Promise<T> : ReturnType<F>,
474
+ >(ctx: OperationContext, opFunc: F) {
475
+ return (param: Param, opts?: Parameters<F>[2]) => {
476
+ const configuredContext: OperationContext = {
477
+ ...ctx,
478
+ request: {
479
+ ...ctx.request,
480
+ params: {
481
+ ...ctx.request.params,
482
+ ...paramsFromOptions(opts ?? {}),
483
+ },
484
+ },
485
+ };
486
+ const req = opFunc(configuredContext, param, opts);
487
+ if (Symbol.asyncIterator in req) {
488
+ return req;
489
+ }
490
+
491
+ if (req instanceof Promise || ('then' in req && typeof req.then === 'function')) {
492
+ return req;
493
+ }
494
+
495
+ return ctx.client.request<Return>(req).then((res) => {
496
+ if (opts?.rawResponse) return res;
497
+ return res.data;
498
+ });
499
+ };
500
+ }
501
+
502
+ /** Function to return type safe mapping between a given endpoint; endpoint
503
+ * version and a common "op"
504
+ *
505
+ * NOTE: This is a function rather than a constant so that type generics work as
506
+ * intended. It's currently not possible to define a constant with generics
507
+ */
508
+ export function getOpMap<E extends Endpoint<any, any>, T extends E['type'] = E['type']>() {
509
+ return {
510
+ v1: {
511
+ get: getOp<T>,
512
+ delete: deleteOp,
513
+ deleteBatch: deleteBatchOp,
514
+ list: listOp<T, E['queryParameters']>,
515
+ listAll: listAllOp<T, E['queryParameters']>,
516
+ listByPage: listByPageOp<T, E['queryParameters']>,
517
+ create: createOp<T, E['createType']>,
518
+ update: updateOp<T, T extends { id: number } ? RequirementsOf<T, 'id'> : never>,
519
+ updateBatch: updateBatchOp<T, T extends { id: number } ? RequirementsOf<T, 'id'> : never>,
520
+ },
521
+ v2: {
522
+ get: getOp<T>,
523
+ delete: deleteOp,
524
+ deleteBatch: deleteBatchOp,
525
+ list: listV2Op<T, E['queryParameters']>,
526
+ listAll: listAllV2Op<T, E['queryParameters']>,
527
+ listByPage: listByPageV2Op<T, E['queryParameters']>,
528
+ create: createOp<T, E['createType']>,
529
+ update: updateOp<T, T extends { id: number } ? RequirementsOf<T, 'id'> : never>,
530
+ updateBatch: updateBatchOp<T, T extends { id: number } ? RequirementsOf<T, 'id'> : never>,
531
+ },
532
+ } satisfies Record<EndpointVersion, Record<Operation, OpDef<any, any>>>;
533
+ }