@doist/todoist-sdk 0.0.1 → 8.0.1

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 (340) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -29
  3. package/dist/cjs/authentication.js +204 -0
  4. package/dist/cjs/consts/endpoints.js +141 -0
  5. package/dist/cjs/index.js +20 -0
  6. package/dist/cjs/package.json +1 -0
  7. package/dist/cjs/test-utils/asserts.js +11 -0
  8. package/dist/cjs/test-utils/msw-setup.js +97 -0
  9. package/dist/cjs/test-utils/obsidian-fetch-adapter.js +53 -0
  10. package/dist/cjs/test-utils/test-defaults.js +290 -0
  11. package/dist/cjs/todoist-api.js +2636 -0
  12. package/dist/cjs/transport/fetch-with-retry.js +206 -0
  13. package/dist/cjs/transport/http-client.js +133 -0
  14. package/dist/cjs/transport/http-dispatcher.js +72 -0
  15. package/dist/cjs/types/activity/index.js +18 -0
  16. package/dist/cjs/types/activity/requests.js +2 -0
  17. package/dist/cjs/types/activity/types.js +28 -0
  18. package/dist/cjs/types/backups/index.js +18 -0
  19. package/dist/cjs/types/backups/requests.js +2 -0
  20. package/dist/cjs/types/backups/types.js +8 -0
  21. package/dist/cjs/types/comments/index.js +18 -0
  22. package/dist/cjs/types/comments/requests.js +2 -0
  23. package/dist/cjs/types/comments/types.js +60 -0
  24. package/dist/cjs/types/common.js +10 -0
  25. package/dist/cjs/types/emails/index.js +17 -0
  26. package/dist/cjs/types/emails/requests.js +5 -0
  27. package/dist/cjs/types/errors.js +29 -0
  28. package/dist/cjs/types/folders/index.js +17 -0
  29. package/dist/cjs/types/folders/requests.js +2 -0
  30. package/dist/cjs/types/http.js +24 -0
  31. package/dist/cjs/types/id-mappings/index.js +18 -0
  32. package/dist/cjs/types/id-mappings/requests.js +20 -0
  33. package/dist/cjs/types/id-mappings/types.js +12 -0
  34. package/dist/cjs/types/index.js +36 -0
  35. package/dist/cjs/types/insights/index.js +18 -0
  36. package/dist/cjs/types/insights/requests.js +2 -0
  37. package/dist/cjs/types/insights/types.js +84 -0
  38. package/dist/cjs/types/labels/index.js +18 -0
  39. package/dist/cjs/types/labels/requests.js +2 -0
  40. package/dist/cjs/types/labels/types.js +11 -0
  41. package/dist/cjs/types/productivity/index.js +17 -0
  42. package/dist/cjs/types/productivity/types.js +67 -0
  43. package/dist/cjs/types/projects/index.js +18 -0
  44. package/dist/cjs/types/projects/requests.js +2 -0
  45. package/dist/cjs/types/projects/types.js +56 -0
  46. package/dist/cjs/types/reminders/index.js +17 -0
  47. package/dist/cjs/types/reminders/requests.js +95 -0
  48. package/dist/cjs/types/sections/index.js +18 -0
  49. package/dist/cjs/types/sections/requests.js +2 -0
  50. package/dist/cjs/types/sections/types.js +22 -0
  51. package/dist/cjs/types/sync/commands/calendars.js +2 -0
  52. package/dist/cjs/types/sync/commands/filters.js +2 -0
  53. package/dist/cjs/types/sync/commands/folders.js +2 -0
  54. package/dist/cjs/types/sync/commands/index.js +35 -0
  55. package/dist/cjs/types/sync/commands/labels.js +5 -0
  56. package/dist/cjs/types/sync/commands/notes.js +2 -0
  57. package/dist/cjs/types/sync/commands/notifications.js +2 -0
  58. package/dist/cjs/types/sync/commands/others.js +2 -0
  59. package/dist/cjs/types/sync/commands/project-view-options.js +2 -0
  60. package/dist/cjs/types/sync/commands/projects.js +2 -0
  61. package/dist/cjs/types/sync/commands/reminders.js +2 -0
  62. package/dist/cjs/types/sync/commands/sections.js +2 -0
  63. package/dist/cjs/types/sync/commands/shared.js +20 -0
  64. package/dist/cjs/types/sync/commands/sharing.js +2 -0
  65. package/dist/cjs/types/sync/commands/tasks.js +2 -0
  66. package/dist/cjs/types/sync/commands/view-options.js +2 -0
  67. package/dist/cjs/types/sync/commands/workspace-filters.js +2 -0
  68. package/dist/cjs/types/sync/commands/workspace-goals.js +2 -0
  69. package/dist/cjs/types/sync/commands/workspaces.js +2 -0
  70. package/dist/cjs/types/sync/index.js +22 -0
  71. package/dist/cjs/types/sync/request.js +2 -0
  72. package/dist/cjs/types/sync/resource-types.js +40 -0
  73. package/dist/cjs/types/sync/resources/calendars.js +31 -0
  74. package/dist/cjs/types/sync/resources/collaborators.js +25 -0
  75. package/dist/cjs/types/sync/resources/completed-info.js +30 -0
  76. package/dist/cjs/types/sync/resources/filters.js +16 -0
  77. package/dist/cjs/types/sync/resources/folders.js +14 -0
  78. package/dist/cjs/types/sync/resources/index.js +33 -0
  79. package/dist/cjs/types/sync/resources/live-notifications.js +39 -0
  80. package/dist/cjs/types/sync/resources/notes.js +23 -0
  81. package/dist/cjs/types/sync/resources/reminders.js +50 -0
  82. package/dist/cjs/types/sync/resources/suggestions.js +42 -0
  83. package/dist/cjs/types/sync/resources/tooltips.js +10 -0
  84. package/dist/cjs/types/sync/resources/user-plan-limits.js +24 -0
  85. package/dist/cjs/types/sync/resources/user-settings.js +42 -0
  86. package/dist/cjs/types/sync/resources/user.js +120 -0
  87. package/dist/cjs/types/sync/resources/view-options.js +83 -0
  88. package/dist/cjs/types/sync/resources/workspace-filters.js +21 -0
  89. package/dist/cjs/types/sync/resources/workspace-goals.js +32 -0
  90. package/dist/cjs/types/sync/resources/workspaces.js +73 -0
  91. package/dist/cjs/types/sync/response.js +2 -0
  92. package/dist/cjs/types/sync/user-preferences.js +71 -0
  93. package/dist/cjs/types/tasks/index.js +18 -0
  94. package/dist/cjs/types/tasks/requests.js +2 -0
  95. package/dist/cjs/types/tasks/types.js +59 -0
  96. package/dist/cjs/types/templates/index.js +17 -0
  97. package/dist/cjs/types/templates/requests.js +2 -0
  98. package/dist/cjs/types/uploads/index.js +17 -0
  99. package/dist/cjs/types/uploads/requests.js +2 -0
  100. package/dist/cjs/types/users/index.js +17 -0
  101. package/dist/cjs/types/users/types.js +51 -0
  102. package/dist/cjs/types/workspaces/index.js +18 -0
  103. package/dist/cjs/types/workspaces/requests.js +2 -0
  104. package/dist/cjs/types/workspaces/types.js +155 -0
  105. package/dist/cjs/utils/activity-helpers.js +58 -0
  106. package/dist/cjs/utils/case-conversion.js +69 -0
  107. package/dist/cjs/utils/colors.js +143 -0
  108. package/dist/cjs/utils/index.js +25 -0
  109. package/dist/cjs/utils/multipart-upload.js +178 -0
  110. package/dist/cjs/utils/processing-helpers.js +18 -0
  111. package/dist/cjs/utils/sanitization.js +116 -0
  112. package/dist/cjs/utils/sync-helpers.js +22 -0
  113. package/dist/cjs/utils/uncompletable-helpers.js +60 -0
  114. package/dist/cjs/utils/url-helpers.js +74 -0
  115. package/dist/cjs/utils/validators.js +141 -0
  116. package/dist/esm/authentication.js +196 -0
  117. package/dist/esm/consts/endpoints.js +122 -0
  118. package/dist/esm/index.js +4 -0
  119. package/dist/esm/test-utils/asserts.js +8 -0
  120. package/dist/esm/test-utils/msw-setup.js +88 -0
  121. package/dist/esm/test-utils/obsidian-fetch-adapter.js +50 -0
  122. package/dist/esm/test-utils/test-defaults.js +287 -0
  123. package/dist/esm/todoist-api.js +2632 -0
  124. package/dist/esm/transport/fetch-with-retry.js +203 -0
  125. package/dist/esm/transport/http-client.js +128 -0
  126. package/dist/esm/transport/http-dispatcher.js +35 -0
  127. package/dist/esm/types/activity/index.js +2 -0
  128. package/dist/esm/types/activity/requests.js +1 -0
  129. package/dist/esm/types/activity/types.js +25 -0
  130. package/dist/esm/types/backups/index.js +2 -0
  131. package/dist/esm/types/backups/requests.js +1 -0
  132. package/dist/esm/types/backups/types.js +5 -0
  133. package/dist/esm/types/comments/index.js +2 -0
  134. package/dist/esm/types/comments/requests.js +1 -0
  135. package/dist/esm/types/comments/types.js +57 -0
  136. package/dist/esm/types/common.js +7 -0
  137. package/dist/esm/types/emails/index.js +1 -0
  138. package/dist/esm/types/emails/requests.js +2 -0
  139. package/dist/esm/types/errors.js +24 -0
  140. package/dist/esm/types/folders/index.js +1 -0
  141. package/dist/esm/types/folders/requests.js +1 -0
  142. package/dist/esm/types/http.js +20 -0
  143. package/dist/esm/types/id-mappings/index.js +2 -0
  144. package/dist/esm/types/id-mappings/requests.js +17 -0
  145. package/dist/esm/types/id-mappings/types.js +9 -0
  146. package/dist/esm/types/index.js +20 -0
  147. package/dist/esm/types/insights/index.js +2 -0
  148. package/dist/esm/types/insights/requests.js +1 -0
  149. package/dist/esm/types/insights/types.js +81 -0
  150. package/dist/esm/types/labels/index.js +2 -0
  151. package/dist/esm/types/labels/requests.js +1 -0
  152. package/dist/esm/types/labels/types.js +8 -0
  153. package/dist/esm/types/productivity/index.js +1 -0
  154. package/dist/esm/types/productivity/types.js +64 -0
  155. package/dist/esm/types/projects/index.js +2 -0
  156. package/dist/esm/types/projects/requests.js +1 -0
  157. package/dist/esm/types/projects/types.js +53 -0
  158. package/dist/esm/types/reminders/index.js +1 -0
  159. package/dist/esm/types/reminders/requests.js +92 -0
  160. package/dist/esm/types/sections/index.js +2 -0
  161. package/dist/esm/types/sections/requests.js +1 -0
  162. package/dist/esm/types/sections/types.js +19 -0
  163. package/dist/esm/types/sync/commands/calendars.js +1 -0
  164. package/dist/esm/types/sync/commands/filters.js +1 -0
  165. package/dist/esm/types/sync/commands/folders.js +1 -0
  166. package/dist/esm/types/sync/commands/index.js +19 -0
  167. package/dist/esm/types/sync/commands/labels.js +2 -0
  168. package/dist/esm/types/sync/commands/notes.js +1 -0
  169. package/dist/esm/types/sync/commands/notifications.js +1 -0
  170. package/dist/esm/types/sync/commands/others.js +1 -0
  171. package/dist/esm/types/sync/commands/project-view-options.js +1 -0
  172. package/dist/esm/types/sync/commands/projects.js +1 -0
  173. package/dist/esm/types/sync/commands/reminders.js +1 -0
  174. package/dist/esm/types/sync/commands/sections.js +1 -0
  175. package/dist/esm/types/sync/commands/shared.js +16 -0
  176. package/dist/esm/types/sync/commands/sharing.js +1 -0
  177. package/dist/esm/types/sync/commands/tasks.js +1 -0
  178. package/dist/esm/types/sync/commands/view-options.js +1 -0
  179. package/dist/esm/types/sync/commands/workspace-filters.js +1 -0
  180. package/dist/esm/types/sync/commands/workspace-goals.js +1 -0
  181. package/dist/esm/types/sync/commands/workspaces.js +1 -0
  182. package/dist/esm/types/sync/index.js +6 -0
  183. package/dist/esm/types/sync/request.js +1 -0
  184. package/dist/esm/types/sync/resource-types.js +37 -0
  185. package/dist/esm/types/sync/resources/calendars.js +28 -0
  186. package/dist/esm/types/sync/resources/collaborators.js +22 -0
  187. package/dist/esm/types/sync/resources/completed-info.js +27 -0
  188. package/dist/esm/types/sync/resources/filters.js +13 -0
  189. package/dist/esm/types/sync/resources/folders.js +11 -0
  190. package/dist/esm/types/sync/resources/index.js +17 -0
  191. package/dist/esm/types/sync/resources/live-notifications.js +36 -0
  192. package/dist/esm/types/sync/resources/notes.js +20 -0
  193. package/dist/esm/types/sync/resources/reminders.js +47 -0
  194. package/dist/esm/types/sync/resources/suggestions.js +39 -0
  195. package/dist/esm/types/sync/resources/tooltips.js +7 -0
  196. package/dist/esm/types/sync/resources/user-plan-limits.js +21 -0
  197. package/dist/esm/types/sync/resources/user-settings.js +39 -0
  198. package/dist/esm/types/sync/resources/user.js +117 -0
  199. package/dist/esm/types/sync/resources/view-options.js +80 -0
  200. package/dist/esm/types/sync/resources/workspace-filters.js +18 -0
  201. package/dist/esm/types/sync/resources/workspace-goals.js +29 -0
  202. package/dist/esm/types/sync/resources/workspaces.js +70 -0
  203. package/dist/esm/types/sync/response.js +1 -0
  204. package/dist/esm/types/sync/user-preferences.js +68 -0
  205. package/dist/esm/types/tasks/index.js +2 -0
  206. package/dist/esm/types/tasks/requests.js +1 -0
  207. package/dist/esm/types/tasks/types.js +56 -0
  208. package/dist/esm/types/templates/index.js +1 -0
  209. package/dist/esm/types/templates/requests.js +1 -0
  210. package/dist/esm/types/uploads/index.js +1 -0
  211. package/dist/esm/types/uploads/requests.js +1 -0
  212. package/dist/esm/types/users/index.js +1 -0
  213. package/dist/esm/types/users/types.js +48 -0
  214. package/dist/esm/types/workspaces/index.js +2 -0
  215. package/dist/esm/types/workspaces/requests.js +1 -0
  216. package/dist/esm/types/workspaces/types.js +152 -0
  217. package/dist/esm/utils/activity-helpers.js +53 -0
  218. package/dist/esm/utils/case-conversion.js +61 -0
  219. package/dist/esm/utils/colors.js +139 -0
  220. package/dist/esm/utils/index.js +4 -0
  221. package/dist/esm/utils/multipart-upload.js +142 -0
  222. package/dist/esm/utils/processing-helpers.js +12 -0
  223. package/dist/esm/utils/sanitization.js +112 -0
  224. package/dist/esm/utils/sync-helpers.js +19 -0
  225. package/dist/esm/utils/uncompletable-helpers.js +54 -0
  226. package/dist/esm/utils/url-helpers.js +68 -0
  227. package/dist/esm/utils/validators.js +132 -0
  228. package/dist/types/authentication.d.ts +158 -0
  229. package/dist/types/consts/endpoints.d.ts +81 -0
  230. package/dist/types/index.d.ts +4 -0
  231. package/dist/types/test-utils/asserts.d.ts +1 -0
  232. package/dist/types/test-utils/msw-setup.d.ts +33 -0
  233. package/dist/types/test-utils/obsidian-fetch-adapter.d.ts +29 -0
  234. package/dist/types/test-utils/test-defaults.d.ts +267 -0
  235. package/dist/types/todoist-api.d.ts +1021 -0
  236. package/dist/types/transport/fetch-with-retry.d.ts +12 -0
  237. package/dist/types/transport/http-client.d.ts +16 -0
  238. package/dist/types/transport/http-dispatcher.d.ts +3 -0
  239. package/dist/types/types/activity/index.d.ts +2 -0
  240. package/dist/types/types/activity/requests.d.ts +85 -0
  241. package/dist/types/types/activity/types.d.ts +49 -0
  242. package/dist/types/types/backups/index.d.ts +2 -0
  243. package/dist/types/types/backups/requests.d.ts +16 -0
  244. package/dist/types/types/backups/types.d.ts +7 -0
  245. package/dist/types/types/comments/index.d.ts +2 -0
  246. package/dist/types/types/comments/requests.d.ts +64 -0
  247. package/dist/types/types/comments/types.d.ts +141 -0
  248. package/dist/types/types/common.d.ts +13 -0
  249. package/dist/types/types/emails/index.d.ts +1 -0
  250. package/dist/types/types/emails/requests.d.ts +30 -0
  251. package/dist/types/types/errors.d.ts +12 -0
  252. package/dist/types/types/folders/index.d.ts +1 -0
  253. package/dist/types/types/folders/requests.d.ts +20 -0
  254. package/dist/types/types/http.d.ts +85 -0
  255. package/dist/types/types/id-mappings/index.d.ts +2 -0
  256. package/dist/types/types/id-mappings/requests.d.ts +28 -0
  257. package/dist/types/types/id-mappings/types.d.ts +13 -0
  258. package/dist/types/types/index.d.ts +20 -0
  259. package/dist/types/types/insights/index.d.ts +2 -0
  260. package/dist/types/types/insights/requests.d.ts +26 -0
  261. package/dist/types/types/insights/types.d.ts +186 -0
  262. package/dist/types/types/labels/index.d.ts +2 -0
  263. package/dist/types/types/labels/requests.d.ts +75 -0
  264. package/dist/types/types/labels/types.d.ts +13 -0
  265. package/dist/types/types/productivity/index.d.ts +1 -0
  266. package/dist/types/types/productivity/types.d.ts +115 -0
  267. package/dist/types/types/projects/index.d.ts +2 -0
  268. package/dist/types/types/projects/requests.d.ts +190 -0
  269. package/dist/types/types/projects/types.d.ts +201 -0
  270. package/dist/types/types/reminders/index.d.ts +1 -0
  271. package/dist/types/types/reminders/requests.d.ts +205 -0
  272. package/dist/types/types/sections/index.d.ts +2 -0
  273. package/dist/types/types/sections/requests.d.ts +41 -0
  274. package/dist/types/types/sections/types.d.ts +44 -0
  275. package/dist/types/types/sync/commands/calendars.d.ts +14 -0
  276. package/dist/types/types/sync/commands/filters.d.ts +22 -0
  277. package/dist/types/types/sync/commands/folders.d.ts +18 -0
  278. package/dist/types/types/sync/commands/index.d.ts +171 -0
  279. package/dist/types/types/sync/commands/labels.d.ts +32 -0
  280. package/dist/types/types/sync/commands/notes.d.ts +27 -0
  281. package/dist/types/types/sync/commands/notifications.d.ts +10 -0
  282. package/dist/types/types/sync/commands/others.d.ts +39 -0
  283. package/dist/types/types/sync/commands/project-view-options.d.ts +14 -0
  284. package/dist/types/types/sync/commands/projects.d.ts +90 -0
  285. package/dist/types/types/sync/commands/reminders.d.ts +51 -0
  286. package/dist/types/types/sync/commands/sections.d.ts +31 -0
  287. package/dist/types/types/sync/commands/shared.d.ts +51 -0
  288. package/dist/types/types/sync/commands/sharing.d.ts +16 -0
  289. package/dist/types/types/sync/commands/tasks.d.ts +78 -0
  290. package/dist/types/types/sync/commands/view-options.d.ts +15 -0
  291. package/dist/types/types/sync/commands/workspace-filters.d.ts +23 -0
  292. package/dist/types/types/sync/commands/workspace-goals.d.ts +24 -0
  293. package/dist/types/types/sync/commands/workspaces.d.ts +79 -0
  294. package/dist/types/types/sync/index.d.ts +6 -0
  295. package/dist/types/types/sync/request.d.ts +7 -0
  296. package/dist/types/types/sync/resource-types.d.ts +5 -0
  297. package/dist/types/types/sync/resources/calendars.d.ts +38 -0
  298. package/dist/types/types/sync/resources/collaborators.d.ts +28 -0
  299. package/dist/types/types/sync/resources/completed-info.d.ts +33 -0
  300. package/dist/types/types/sync/resources/filters.d.ts +12 -0
  301. package/dist/types/types/sync/resources/folders.d.ts +10 -0
  302. package/dist/types/types/sync/resources/index.d.ts +17 -0
  303. package/dist/types/types/sync/resources/live-notifications.d.ts +32 -0
  304. package/dist/types/types/sync/resources/notes.d.ts +34 -0
  305. package/dist/types/types/sync/resources/reminders.d.ts +126 -0
  306. package/dist/types/types/sync/resources/suggestions.d.ts +96 -0
  307. package/dist/types/types/sync/resources/tooltips.d.ts +6 -0
  308. package/dist/types/types/sync/resources/user-plan-limits.d.ts +41 -0
  309. package/dist/types/types/sync/resources/user-settings.d.ts +40 -0
  310. package/dist/types/types/sync/resources/user.d.ts +134 -0
  311. package/dist/types/types/sync/resources/view-options.d.ts +169 -0
  312. package/dist/types/types/sync/resources/workspace-filters.d.ts +17 -0
  313. package/dist/types/types/sync/resources/workspace-goals.d.ts +29 -0
  314. package/dist/types/types/sync/resources/workspaces.d.ts +142 -0
  315. package/dist/types/types/sync/response.d.ts +51 -0
  316. package/dist/types/types/sync/user-preferences.d.ts +39 -0
  317. package/dist/types/types/tasks/index.d.ts +2 -0
  318. package/dist/types/types/tasks/requests.d.ts +197 -0
  319. package/dist/types/types/tasks/types.d.ts +162 -0
  320. package/dist/types/types/templates/index.d.ts +1 -0
  321. package/dist/types/types/templates/requests.d.ts +92 -0
  322. package/dist/types/types/uploads/index.d.ts +1 -0
  323. package/dist/types/types/uploads/requests.d.ts +32 -0
  324. package/dist/types/types/users/index.d.ts +1 -0
  325. package/dist/types/types/users/types.d.ts +66 -0
  326. package/dist/types/types/workspaces/index.d.ts +2 -0
  327. package/dist/types/types/workspaces/requests.d.ts +260 -0
  328. package/dist/types/types/workspaces/types.d.ts +267 -0
  329. package/dist/types/utils/activity-helpers.d.ts +28 -0
  330. package/dist/types/utils/case-conversion.d.ts +12 -0
  331. package/dist/types/utils/colors.d.ts +197 -0
  332. package/dist/types/utils/index.d.ts +4 -0
  333. package/dist/types/utils/multipart-upload.d.ts +54 -0
  334. package/dist/types/utils/processing-helpers.d.ts +1 -0
  335. package/dist/types/utils/sanitization.d.ts +35 -0
  336. package/dist/types/utils/sync-helpers.d.ts +17 -0
  337. package/dist/types/utils/uncompletable-helpers.d.ts +30 -0
  338. package/dist/types/utils/url-helpers.d.ts +32 -0
  339. package/dist/types/utils/validators.d.ts +1404 -0
  340. package/package.json +99 -8
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpResponse = exports.http = exports.server = exports.handlers = void 0;
4
+ exports.captureRequest = captureRequest;
5
+ exports.getLastRequest = getLastRequest;
6
+ exports.getAllRequests = getAllRequests;
7
+ exports.clearCapturedRequests = clearCapturedRequests;
8
+ exports.mockApiResponse = mockApiResponse;
9
+ exports.mockApiError = mockApiError;
10
+ const vitest_1 = require("vitest");
11
+ const node_1 = require("msw/node");
12
+ const msw_1 = require("msw");
13
+ Object.defineProperty(exports, "http", { enumerable: true, get: function () { return msw_1.http; } });
14
+ Object.defineProperty(exports, "HttpResponse", { enumerable: true, get: function () { return msw_1.HttpResponse; } });
15
+ // Request capture storage
16
+ const capturedRequests = [];
17
+ // Helper function to capture requests
18
+ function captureRequest({ request, body }) {
19
+ const headers = {};
20
+ request.headers.forEach((value, key) => {
21
+ headers[key] = value;
22
+ });
23
+ capturedRequests.push({
24
+ url: request.url,
25
+ method: request.method,
26
+ headers,
27
+ body,
28
+ });
29
+ }
30
+ // Helper function to get the last captured request
31
+ function getLastRequest() {
32
+ return capturedRequests[capturedRequests.length - 1];
33
+ }
34
+ // Helper function to get all captured requests
35
+ function getAllRequests() {
36
+ return [...capturedRequests];
37
+ }
38
+ // Helper function to clear captured requests
39
+ function clearCapturedRequests() {
40
+ capturedRequests.length = 0;
41
+ }
42
+ // Default handlers for common API responses
43
+ exports.handlers = [
44
+ // Default handlers can be added here for common endpoints
45
+ // Individual test files will add their own specific handlers
46
+ ];
47
+ // Create MSW server instance
48
+ exports.server = (0, node_1.setupServer)(...exports.handlers);
49
+ // Helper to create a resolver function for MSW handlers
50
+ function createResolver(data, status, headers) {
51
+ return async function resolver({ request }) {
52
+ let body = undefined;
53
+ if (request.method !== 'GET') {
54
+ try {
55
+ body = await request.json();
56
+ }
57
+ catch (_a) {
58
+ // Body might not be JSON
59
+ try {
60
+ body = await request.text();
61
+ }
62
+ catch (_b) {
63
+ // Body might be FormData or not parseable
64
+ }
65
+ }
66
+ }
67
+ captureRequest({ request, body });
68
+ return msw_1.HttpResponse.json(data, {
69
+ status,
70
+ headers,
71
+ });
72
+ };
73
+ }
74
+ // Helper to mock a successful API response
75
+ function mockApiResponse({ endpoint, data, options = {}, }) {
76
+ const { status = 200, method = 'GET', headers = {} } = options;
77
+ const resolver = createResolver(data, status, headers);
78
+ const httpMethod = method.toLowerCase();
79
+ exports.server.use(msw_1.http[httpMethod](endpoint, resolver));
80
+ }
81
+ // Helper to mock an error response
82
+ function mockApiError({ endpoint, data, status, options = {}, }) {
83
+ mockApiResponse({ endpoint, data, options: Object.assign(Object.assign({}, options), { status }) });
84
+ }
85
+ // Setup MSW for tests
86
+ (0, vitest_1.beforeAll)(() => {
87
+ exports.server.listen({
88
+ onUnhandledRequest: 'error', // Throw errors for unhandled requests to catch unexpected fetch calls
89
+ });
90
+ });
91
+ (0, vitest_1.afterEach)(() => {
92
+ exports.server.resetHandlers(); // Reset handlers between tests
93
+ clearCapturedRequests(); // Clear captured requests between tests
94
+ });
95
+ (0, vitest_1.afterAll)(() => {
96
+ exports.server.close(); // Clean up after all tests
97
+ });
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createObsidianFetchAdapter = createObsidianFetchAdapter;
4
+ /**
5
+ * Creates a CustomFetch adapter for Obsidian's requestUrl API.
6
+ *
7
+ * This adapter bridges the gap between Obsidian's requestUrl interface and the
8
+ * standard fetch-like interface expected by the Todoist API SDK.
9
+ *
10
+ * Key differences handled by this adapter:
11
+ * - Obsidian returns response data as properties (response.json, response.text)
12
+ * while the SDK expects methods (response.json(), response.text())
13
+ * - Obsidian's requestUrl bypasses CORS restrictions that would block standard fetch
14
+ * - Obsidian throws on HTTP errors by default; we set throw: false to handle manually
15
+ * - Obsidian doesn't provide statusText; we default to empty string
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { requestUrl } from 'obsidian';
20
+ * import { createObsidianFetchAdapter } from './obsidian-fetch-adapter';
21
+ *
22
+ * const api = new TodoistApi('your-token', {
23
+ * customFetch: createObsidianFetchAdapter(requestUrl)
24
+ * });
25
+ * ```
26
+ *
27
+ * @param requestUrl - The Obsidian requestUrl function
28
+ * @returns A CustomFetch function compatible with the Todoist API SDK
29
+ */
30
+ function createObsidianFetchAdapter(requestUrl) {
31
+ return async (url, options) => {
32
+ // Build the request parameters in Obsidian's format
33
+ const requestParams = {
34
+ url,
35
+ method: (options === null || options === void 0 ? void 0 : options.method) || 'GET',
36
+ headers: options === null || options === void 0 ? void 0 : options.headers,
37
+ body: options === null || options === void 0 ? void 0 : options.body,
38
+ throw: false, // Don't throw on HTTP errors; let the SDK handle status codes
39
+ };
40
+ // Make the request using Obsidian's requestUrl
41
+ const response = await requestUrl(requestParams);
42
+ // Transform Obsidian's response format to match CustomFetchResponse interface
43
+ return {
44
+ ok: response.status >= 200 && response.status < 300,
45
+ status: response.status,
46
+ statusText: '', // Obsidian doesn't provide statusText
47
+ headers: response.headers,
48
+ // Wrap Obsidian's direct properties as methods returning promises
49
+ text: () => Promise.resolve(response.text),
50
+ json: () => Promise.resolve(response.json),
51
+ };
52
+ };
53
+ }
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_NOTE = exports.DEFAULT_COLLABORATOR_STATE = exports.DEFAULT_COLLABORATOR = exports.DEFAULT_FOLDER = exports.COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = exports.COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = exports.RAW_COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = exports.COMMENT_WITH_OPTIONALS_AS_NULL_TASK = exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK = exports.INVALID_COMMENT = exports.DEFAULT_LOCATION_REMINDER = exports.DEFAULT_ABSOLUTE_REMINDER = exports.DEFAULT_RELATIVE_REMINDER = exports.DEFAULT_REMINDER_ID = exports.DEFAULT_COMMENT = exports.DEFAULT_RAW_COMMENT = exports.INVALID_ATTACHMENT = exports.DEFAULT_ATTACHMENT = exports.INVALID_USER = exports.DEFAULT_USER = exports.INVALID_LABEL = exports.DEFAULT_LABEL = exports.INVALID_SECTION = exports.DEFAULT_SECTION = exports.DEFAULT_WORKSPACE_PROJECT = exports.PROJECT_WITH_OPTIONALS_AS_NULL = exports.INVALID_PROJECT = exports.DEFAULT_PROJECT = exports.TASK_WITH_OPTIONALS_AS_NULL = exports.INVALID_TASK = exports.DEFAULT_TASK = exports.DEFAULT_DEADLINE = exports.DEFAULT_DURATION = exports.DEFAULT_DUE_DATE = exports.INVALID_ENTITY_ID = exports.DEFAULT_REQUEST_ID = exports.DEFAULT_AUTH_TOKEN = exports.DEFAULT_PROJECT_VIEW_STYLE = exports.DEFAULT_PROJECT_NAME = exports.DEFAULT_PROJECT_ID = exports.DEFAULT_ORDER = exports.DEFAULT_TASK_PRIORITY = exports.DEFAULT_TASK_DESCRIPTION = exports.DEFAULT_TASK_CONTENT = exports.DEFAULT_TASK_ID = void 0;
4
+ const url_helpers_1 = require("../utils/url-helpers");
5
+ exports.DEFAULT_TASK_ID = '1234';
6
+ exports.DEFAULT_TASK_CONTENT = 'This is a task';
7
+ exports.DEFAULT_TASK_DESCRIPTION = 'A description';
8
+ exports.DEFAULT_TASK_PRIORITY = 1;
9
+ exports.DEFAULT_ORDER = 3;
10
+ exports.DEFAULT_PROJECT_ID = '123';
11
+ exports.DEFAULT_PROJECT_NAME = 'This is a project';
12
+ exports.DEFAULT_PROJECT_VIEW_STYLE = 'list';
13
+ const DEFAULT_LABEL_ID = '456';
14
+ const DEFAULT_LABEL_NAME = 'This is a label';
15
+ const DEFAULT_SECTION_ID = '456';
16
+ const DEFAULT_SECTION_NAME = 'This is a section';
17
+ const DEFAULT_PARENT_ID = '5678';
18
+ const DEFAULT_ASSIGNEE = '1234';
19
+ const DEFAULT_CREATOR = '1234';
20
+ const DEFAULT_DATE = '2020-09-08T12:00:00Z';
21
+ const DEFAULT_ENTITY_COLOR = 'berry_red';
22
+ const DEFAULT_LABELS = ['personal', 'work', 'hobby'];
23
+ const DEFAULT_USER_ID = '5';
24
+ const DEFAULT_USER_NAME = 'A User';
25
+ const DEFAULT_USER_EMAIL = 'atestuser@doist.com';
26
+ const DEFAULT_COMMENT_ID = '4';
27
+ const DEFAULT_COMMENT_CONTENT = 'A comment';
28
+ const DEFAULT_COMMENT_REACTIONS = { '👍': ['1234', '5678'] };
29
+ const DEFAULT_CAN_ASSIGN_TASKS = true;
30
+ const DEFAULT_IS_ARCHIVED = false;
31
+ const DEFAULT_IS_DELETED = false;
32
+ const DEFAULT_IS_FROZEN = false;
33
+ const DEFAULT_IS_COLLAPSED = false;
34
+ // URL constants using the helper functions
35
+ const DEFAULT_TASK_URL = (0, url_helpers_1.getTaskUrl)(exports.DEFAULT_TASK_ID, exports.DEFAULT_TASK_CONTENT);
36
+ const DEFAULT_PROJECT_URL = (0, url_helpers_1.getProjectUrl)(exports.DEFAULT_PROJECT_ID, exports.DEFAULT_PROJECT_NAME);
37
+ const DEFAULT_SECTION_URL = (0, url_helpers_1.getSectionUrl)(DEFAULT_SECTION_ID, DEFAULT_SECTION_NAME);
38
+ exports.DEFAULT_AUTH_TOKEN = 'AToken';
39
+ exports.DEFAULT_REQUEST_ID = 'ARequestID';
40
+ exports.INVALID_ENTITY_ID = 1234;
41
+ exports.DEFAULT_DUE_DATE = {
42
+ isRecurring: false,
43
+ string: 'a date string',
44
+ date: DEFAULT_DATE,
45
+ lang: 'en',
46
+ timezone: null,
47
+ };
48
+ exports.DEFAULT_DURATION = {
49
+ amount: 10,
50
+ unit: 'minute',
51
+ };
52
+ exports.DEFAULT_DEADLINE = {
53
+ date: '2020-09-08',
54
+ lang: 'en',
55
+ };
56
+ exports.DEFAULT_TASK = {
57
+ id: exports.DEFAULT_TASK_ID,
58
+ userId: DEFAULT_CREATOR,
59
+ projectId: exports.DEFAULT_PROJECT_ID,
60
+ sectionId: DEFAULT_SECTION_ID,
61
+ parentId: DEFAULT_PARENT_ID,
62
+ addedByUid: DEFAULT_CREATOR,
63
+ assignedByUid: DEFAULT_CREATOR,
64
+ responsibleUid: DEFAULT_ASSIGNEE,
65
+ labels: DEFAULT_LABELS,
66
+ deadline: exports.DEFAULT_DEADLINE,
67
+ duration: exports.DEFAULT_DURATION,
68
+ checked: false,
69
+ isDeleted: DEFAULT_IS_DELETED,
70
+ addedAt: DEFAULT_DATE,
71
+ completedAt: null,
72
+ updatedAt: DEFAULT_DATE,
73
+ due: exports.DEFAULT_DUE_DATE,
74
+ priority: exports.DEFAULT_TASK_PRIORITY,
75
+ childOrder: exports.DEFAULT_ORDER,
76
+ content: exports.DEFAULT_TASK_CONTENT,
77
+ description: exports.DEFAULT_TASK_DESCRIPTION,
78
+ dayOrder: exports.DEFAULT_ORDER,
79
+ isCollapsed: DEFAULT_IS_COLLAPSED,
80
+ isUncompletable: false,
81
+ url: DEFAULT_TASK_URL,
82
+ };
83
+ exports.INVALID_TASK = Object.assign(Object.assign({}, exports.DEFAULT_TASK), { due: '2020-01-31' });
84
+ exports.TASK_WITH_OPTIONALS_AS_NULL = {
85
+ userId: DEFAULT_CREATOR,
86
+ id: exports.DEFAULT_TASK_ID,
87
+ projectId: exports.DEFAULT_PROJECT_ID,
88
+ sectionId: null,
89
+ parentId: null,
90
+ addedByUid: DEFAULT_CREATOR,
91
+ assignedByUid: null,
92
+ responsibleUid: null,
93
+ labels: [],
94
+ deadline: null,
95
+ duration: null,
96
+ checked: false,
97
+ isDeleted: DEFAULT_IS_DELETED,
98
+ addedAt: DEFAULT_DATE,
99
+ completedAt: null,
100
+ updatedAt: DEFAULT_DATE,
101
+ due: null,
102
+ priority: exports.DEFAULT_TASK_PRIORITY,
103
+ childOrder: exports.DEFAULT_ORDER,
104
+ content: exports.DEFAULT_TASK_CONTENT,
105
+ description: exports.DEFAULT_TASK_DESCRIPTION,
106
+ dayOrder: exports.DEFAULT_ORDER,
107
+ isCollapsed: DEFAULT_IS_COLLAPSED,
108
+ isUncompletable: false,
109
+ url: DEFAULT_TASK_URL,
110
+ };
111
+ exports.DEFAULT_PROJECT = {
112
+ id: exports.DEFAULT_PROJECT_ID,
113
+ name: exports.DEFAULT_PROJECT_NAME,
114
+ color: DEFAULT_ENTITY_COLOR,
115
+ childOrder: exports.DEFAULT_ORDER,
116
+ parentId: exports.DEFAULT_PROJECT_ID,
117
+ isFavorite: false,
118
+ isShared: false,
119
+ inboxProject: false,
120
+ viewStyle: exports.DEFAULT_PROJECT_VIEW_STYLE,
121
+ canAssignTasks: DEFAULT_CAN_ASSIGN_TASKS,
122
+ isArchived: DEFAULT_IS_ARCHIVED,
123
+ isDeleted: DEFAULT_IS_DELETED,
124
+ isFrozen: DEFAULT_IS_FROZEN,
125
+ createdAt: DEFAULT_DATE,
126
+ updatedAt: DEFAULT_DATE,
127
+ defaultOrder: exports.DEFAULT_ORDER,
128
+ description: '',
129
+ isCollapsed: DEFAULT_IS_COLLAPSED,
130
+ url: DEFAULT_PROJECT_URL,
131
+ };
132
+ exports.INVALID_PROJECT = Object.assign(Object.assign({}, exports.DEFAULT_PROJECT), { name: 123 });
133
+ exports.PROJECT_WITH_OPTIONALS_AS_NULL = Object.assign(Object.assign({}, exports.DEFAULT_PROJECT), { parentId: null });
134
+ exports.DEFAULT_WORKSPACE_PROJECT = {
135
+ id: exports.DEFAULT_PROJECT_ID,
136
+ name: exports.DEFAULT_PROJECT_NAME,
137
+ color: DEFAULT_ENTITY_COLOR,
138
+ childOrder: exports.DEFAULT_ORDER,
139
+ isFavorite: false,
140
+ isShared: true,
141
+ viewStyle: exports.DEFAULT_PROJECT_VIEW_STYLE,
142
+ canAssignTasks: DEFAULT_CAN_ASSIGN_TASKS,
143
+ isArchived: DEFAULT_IS_ARCHIVED,
144
+ isDeleted: DEFAULT_IS_DELETED,
145
+ isFrozen: DEFAULT_IS_FROZEN,
146
+ createdAt: DEFAULT_DATE,
147
+ updatedAt: DEFAULT_DATE,
148
+ defaultOrder: exports.DEFAULT_ORDER,
149
+ description: '',
150
+ isCollapsed: DEFAULT_IS_COLLAPSED,
151
+ url: DEFAULT_PROJECT_URL,
152
+ workspaceId: '100',
153
+ folderId: null,
154
+ collaboratorRoleDefault: 'READ_WRITE',
155
+ isInviteOnly: false,
156
+ isLinkSharingEnabled: true,
157
+ role: 'ADMIN',
158
+ status: 'ACTIVE',
159
+ };
160
+ exports.DEFAULT_SECTION = {
161
+ id: DEFAULT_SECTION_ID,
162
+ userId: DEFAULT_USER_ID,
163
+ projectId: exports.DEFAULT_PROJECT_ID,
164
+ addedAt: '2025-03-28T14:01:23.334881Z',
165
+ updatedAt: '2025-03-28T14:01:23.334885Z',
166
+ archivedAt: null,
167
+ name: DEFAULT_SECTION_NAME,
168
+ sectionOrder: exports.DEFAULT_ORDER,
169
+ isArchived: false,
170
+ isDeleted: false,
171
+ isCollapsed: false,
172
+ url: DEFAULT_SECTION_URL,
173
+ };
174
+ exports.INVALID_SECTION = Object.assign(Object.assign({}, exports.DEFAULT_SECTION), { projectId: undefined });
175
+ exports.DEFAULT_LABEL = {
176
+ id: DEFAULT_LABEL_ID,
177
+ name: DEFAULT_LABEL_NAME,
178
+ color: DEFAULT_ENTITY_COLOR,
179
+ order: exports.DEFAULT_ORDER,
180
+ isFavorite: false,
181
+ };
182
+ exports.INVALID_LABEL = Object.assign(Object.assign({}, exports.DEFAULT_LABEL), { isFavorite: 'true' });
183
+ exports.DEFAULT_USER = {
184
+ id: DEFAULT_USER_ID,
185
+ name: DEFAULT_USER_NAME,
186
+ email: DEFAULT_USER_EMAIL,
187
+ };
188
+ exports.INVALID_USER = Object.assign(Object.assign({}, exports.DEFAULT_USER), { email: undefined });
189
+ exports.DEFAULT_ATTACHMENT = {
190
+ resourceType: 'file',
191
+ fileType: 'image/png',
192
+ fileUrl: 'https://someurl.com/image.jpg',
193
+ uploadState: 'completed',
194
+ };
195
+ exports.INVALID_ATTACHMENT = Object.assign(Object.assign({}, exports.DEFAULT_ATTACHMENT), { uploadState: 'something random' });
196
+ exports.DEFAULT_RAW_COMMENT = {
197
+ id: DEFAULT_COMMENT_ID,
198
+ postedUid: DEFAULT_USER_ID,
199
+ content: DEFAULT_COMMENT_CONTENT,
200
+ fileAttachment: exports.DEFAULT_ATTACHMENT,
201
+ uidsToNotify: null,
202
+ isDeleted: false,
203
+ postedAt: DEFAULT_DATE,
204
+ reactions: DEFAULT_COMMENT_REACTIONS,
205
+ itemId: exports.DEFAULT_TASK_ID,
206
+ };
207
+ exports.DEFAULT_COMMENT = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { taskId: exports.DEFAULT_RAW_COMMENT.itemId, itemId: undefined });
208
+ exports.DEFAULT_REMINDER_ID = '6XGgmFQrx44wfGHr';
209
+ exports.DEFAULT_RELATIVE_REMINDER = {
210
+ id: exports.DEFAULT_REMINDER_ID,
211
+ itemId: exports.DEFAULT_TASK_ID,
212
+ notifyUid: DEFAULT_USER_ID,
213
+ isDeleted: false,
214
+ type: 'relative',
215
+ minuteOffset: 30,
216
+ due: exports.DEFAULT_DUE_DATE,
217
+ isUrgent: false,
218
+ };
219
+ exports.DEFAULT_ABSOLUTE_REMINDER = {
220
+ id: exports.DEFAULT_REMINDER_ID,
221
+ itemId: exports.DEFAULT_TASK_ID,
222
+ notifyUid: DEFAULT_USER_ID,
223
+ isDeleted: false,
224
+ type: 'absolute',
225
+ due: exports.DEFAULT_DUE_DATE,
226
+ isUrgent: true,
227
+ };
228
+ exports.DEFAULT_LOCATION_REMINDER = {
229
+ id: exports.DEFAULT_REMINDER_ID,
230
+ itemId: exports.DEFAULT_TASK_ID,
231
+ notifyUid: DEFAULT_USER_ID,
232
+ isDeleted: false,
233
+ type: 'location',
234
+ name: 'Aliados',
235
+ locLat: '41.148581',
236
+ locLong: '-8.610945000000015',
237
+ locTrigger: 'on_enter',
238
+ radius: 100,
239
+ };
240
+ exports.INVALID_COMMENT = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { isDeleted: 'true' });
241
+ exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { fileAttachment: null, uidsToNotify: null, reactions: null });
242
+ exports.COMMENT_WITH_OPTIONALS_AS_NULL_TASK = Object.assign(Object.assign({}, exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK), { taskId: exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_TASK.itemId, itemId: undefined });
243
+ exports.RAW_COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { fileAttachment: {
244
+ resourceType: 'file',
245
+ fileName: null,
246
+ fileSize: null,
247
+ fileType: null,
248
+ fileDuration: null,
249
+ uploadState: null,
250
+ image: null,
251
+ imageWidth: null,
252
+ imageHeight: null,
253
+ url: null,
254
+ title: null,
255
+ } });
256
+ exports.COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL = Object.assign(Object.assign({}, exports.RAW_COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL), { taskId: exports.RAW_COMMENT_WITH_ATTACHMENT_WITH_OPTIONALS_AS_NULL.itemId, itemId: undefined });
257
+ exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = Object.assign(Object.assign({}, exports.DEFAULT_RAW_COMMENT), { itemId: undefined, projectId: exports.DEFAULT_PROJECT_ID });
258
+ exports.COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT = Object.assign(Object.assign({}, exports.RAW_COMMENT_WITH_OPTIONALS_AS_NULL_PROJECT), { taskId: undefined });
259
+ exports.DEFAULT_FOLDER = {
260
+ id: '789',
261
+ name: 'This is a folder',
262
+ workspaceId: '100',
263
+ defaultOrder: 3,
264
+ childOrder: 3,
265
+ isDeleted: false,
266
+ };
267
+ exports.DEFAULT_COLLABORATOR = {
268
+ id: DEFAULT_USER_ID,
269
+ email: DEFAULT_USER_EMAIL,
270
+ fullName: DEFAULT_USER_NAME,
271
+ timezone: 'UTC',
272
+ imageId: null,
273
+ };
274
+ exports.DEFAULT_COLLABORATOR_STATE = {
275
+ userId: DEFAULT_USER_ID,
276
+ projectId: exports.DEFAULT_PROJECT_ID,
277
+ state: 'active',
278
+ isDeleted: false,
279
+ };
280
+ exports.DEFAULT_NOTE = {
281
+ id: DEFAULT_COMMENT_ID,
282
+ projectId: exports.DEFAULT_PROJECT_ID,
283
+ content: DEFAULT_COMMENT_CONTENT,
284
+ postedAt: DEFAULT_DATE,
285
+ fileAttachment: exports.DEFAULT_ATTACHMENT,
286
+ postedUid: DEFAULT_USER_ID,
287
+ uidsToNotify: null,
288
+ reactions: DEFAULT_COMMENT_REACTIONS,
289
+ isDeleted: false,
290
+ };