@tool-bridge/server 0.21.1 → 0.22.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 (178) hide show
  1. package/dist/admin.js +170 -0
  2. package/dist/airtable-ML2GIGCH.js +790 -0
  3. package/dist/{alt_text_generator_ai-W7O34SNG.js → alt_text_generator_ai-FGYQAF2A.js} +12 -11
  4. package/dist/{amap-VOX4T2AW.js → amap-G7V65NGK.js} +221 -220
  5. package/dist/anthropic-6ZK24TBB.js +203 -0
  6. package/dist/apify-VDGYHP6W.js +248 -0
  7. package/dist/brave_search-TAATLZOS.js +302 -0
  8. package/dist/chunk-2IAI3XQM.js +302 -0
  9. package/dist/chunk-7ISGFRC6.js +161 -0
  10. package/dist/{chunk-E6JCVKW6.js → chunk-BNMLA2RC.js} +3 -3
  11. package/dist/chunk-HA4BGL6C.js +8429 -0
  12. package/dist/{chunk-KMTT3I6D.js → chunk-RMAWSG7E.js} +19172 -25717
  13. package/dist/{chunk-XYBU3WZH.js → chunk-RTW5VRTK.js} +3 -3
  14. package/dist/chunk-U7PTOA3U.js +7320 -0
  15. package/dist/chunk-UY6ANCOY.js +378 -0
  16. package/dist/{chunk-ATK45BXV.js → chunk-X7ZUTKHR.js} +4 -2
  17. package/dist/circleci-BQ2UWXL2.js +389 -0
  18. package/dist/clerk-2JYWQNOI.js +1019 -0
  19. package/dist/cohere-6MI7AQM4.js +185 -0
  20. package/dist/{confluence-B3EWPZVE.js → confluence-6Y6GDETF.js} +105 -104
  21. package/dist/{convertapi-EUWSQYPF.js → convertapi-HBZCSWOX.js} +32 -31
  22. package/dist/{currencyapi-KVTIK3GL.js → currencyapi-337U5TGI.js} +71 -71
  23. package/dist/deepseek-OSPASO7O.js +210 -0
  24. package/dist/docker_hub-3ATQOY5L.js +933 -0
  25. package/dist/dropbox-LSA4GM2Y.js +1305 -0
  26. package/dist/dub-VZPJSPI6.js +680 -0
  27. package/dist/e2b-6SDYQZL2.js +278 -0
  28. package/dist/exa-B6EUYDVP.js +332 -0
  29. package/dist/{fal_ai-23E7JPNT.js → fal_ai-K4Q27IME.js} +81 -80
  30. package/dist/{feishu-7QRIDUV6.js → feishu-4TKXG4SU.js} +528 -572
  31. package/dist/{feishu_custom_bot-TJ4K7QNJ.js → feishu_custom_bot-7CTEAKRB.js} +57 -53
  32. package/dist/figma-OUKSZLD5.js +777 -0
  33. package/dist/firehydrant-7MOYL7QH.js +563 -0
  34. package/dist/{fixer-BWON27UO.js → fixer-H2BV2NO4.js} +34 -33
  35. package/dist/fly-PXKY6PNH.js +469 -0
  36. package/dist/{front-QCGXYEDJ.js → front-UZYIV5DW.js} +104 -104
  37. package/dist/geocodio-NSYO7TFP.js +213 -0
  38. package/dist/ghost-QBKKQQMF.js +338 -0
  39. package/dist/github-ENLSJ4CL.js +5421 -0
  40. package/dist/gmail-KQSDEB47.js +1887 -0
  41. package/dist/googlecalendar-5YCX4SZF.js +2524 -0
  42. package/dist/{googledocs-BUHL4J2H.js → googledocs-SSWIVFKA.js} +341 -340
  43. package/dist/{grafana-GLU2DWF2.js → grafana-TF2LXDQA.js} +221 -220
  44. package/dist/graphhopper-CURBVHYK.js +325 -0
  45. package/dist/index.d.ts +1132 -332
  46. package/dist/index.js +31 -14
  47. package/dist/{ip2proxy-EZ64Y4ZH.js → ip2proxy-YNVMTZEM.js} +28 -27
  48. package/dist/ipgeolocation_io-NAU7VJ4J.js +315 -0
  49. package/dist/ipqualityscore-OT63L4TI.js +279 -0
  50. package/dist/{jina_ai-EFBHTBXL.js → jina_ai-6WBMBGWM.js} +23 -23
  51. package/dist/{jira-HQSHAA5K.js → jira-DVDVTHNO.js} +118 -117
  52. package/dist/langsmith-IM5N4YAU.js +593 -0
  53. package/dist/lemlist-277SHUQF.js +289 -0
  54. package/dist/{linear-K7RYFYAD.js → linear-AEPH7B5V.js} +327 -326
  55. package/dist/logsnag-VEWRAGBG.js +150 -0
  56. package/dist/main.js +57 -280
  57. package/dist/{mattermost-S2BRCWLQ.js → mattermost-Q3A2BIZA.js} +59 -58
  58. package/dist/mem0-AXS7GZGI.js +544 -0
  59. package/dist/memos-7TXG4ZTU.js +744 -0
  60. package/dist/{metabase-MMSEPCOF.js → metabase-NSVACWQM.js} +90 -89
  61. package/dist/mistral_ai-YZ52RGD4.js +1196 -0
  62. package/dist/{mother_duck-H7PCQNZ2.js → mother_duck-XLLL6FVL.js} +94 -93
  63. package/dist/ngrok-4O4W3WZW.js +356 -0
  64. package/dist/{notes-PFMKRO33.js → notes-YTB3TJOO.js} +11 -9
  65. package/dist/notion-4W4O7J7V.js +940 -0
  66. package/dist/open_exchange_rates-23QJXVO5.js +215 -0
  67. package/dist/openai-ZS7GLSLH.js +800 -0
  68. package/dist/opengraph_io-PMVH7OYI.js +362 -0
  69. package/dist/openrouter-ONRGFNB6.js +441 -0
  70. package/dist/outline-UCUYZZ7J.js +599 -0
  71. package/dist/paddle-35HTKTUL.js +454 -0
  72. package/dist/perplexity-NVOBYN24.js +220 -0
  73. package/dist/pinecone-55CJY73C.js +571 -0
  74. package/dist/{pipedrive-Y2O7QGFF.js → pipedrive-WMCAKS72.js} +99 -98
  75. package/dist/polar-SM4ZM53B.js +395 -0
  76. package/dist/posthog-NWCXVXNJ.js +3464 -0
  77. package/dist/postmark-QJV5PHUQ.js +427 -0
  78. package/dist/{prerender-MENYM2TY.js → prerender-2W7UT4SC.js} +31 -30
  79. package/dist/{pubmed-GOXUVVH5.js → pubmed-VVV7XYLU.js} +239 -238
  80. package/dist/{railway-V2SID4WV.js → railway-KGI57S3O.js} +118 -117
  81. package/dist/readwise-AGHTQB42.js +470 -0
  82. package/dist/render-O4HBROCK.js +461 -0
  83. package/dist/{replicate-756MXPYX.js → replicate-KWBOMX7D.js} +81 -80
  84. package/dist/{resend-ZKH3BTBI.js → resend-DRH6Y6I4.js} +20 -16
  85. package/dist/rootly-XGCUDW6X.js +336 -0
  86. package/dist/{scrapfly-NSRHFDIQ.js → scrapfly-OIQ3OY6L.js} +62 -61
  87. package/dist/{scrapingbee-OQHLAVEY.js → scrapingbee-OCZO4FHX.js} +56 -56
  88. package/dist/{screenshot_fyi-DVWG3AXC.js → screenshot_fyi-CUNGFZOC.js} +16 -16
  89. package/dist/semantic_scholar-3UJRLKES.js +611 -0
  90. package/dist/{sentry-546MNDJG.js → sentry-5BWVZFJV.js} +208 -207
  91. package/dist/{shodan-C3OON3Z3.js → shodan-HI37CTEW.js} +62 -61
  92. package/dist/shopify-LJ2EV2HH.js +610 -0
  93. package/dist/stripe-3LHMV55K.js +585 -0
  94. package/dist/{supabase-U2SL4D63.js → supabase-H2KPX3Q2.js} +245 -244
  95. package/dist/tavily-FBEWGH3Z.js +326 -0
  96. package/dist/telegram-MYYO3JND.js +1767 -0
  97. package/dist/{telnyx-CXQ4EZUX.js → telnyx-H4ALEGAX.js} +57 -56
  98. package/dist/todoist-OBWICA5Q.js +664 -0
  99. package/dist/trello-GUFUJRWO.js +1080 -0
  100. package/dist/turso-NIAK4UMS.js +416 -0
  101. package/dist/{twilio-4PDBJKWX.js → twilio-K6SLK2CX.js} +70 -69
  102. package/dist/umami-42RS2EPS.js +389 -0
  103. package/dist/unsplash-V7TOTETT.js +351 -0
  104. package/dist/{upstash_redis-G4LQBYHA.js → upstash_redis-AWQMB6Y3.js} +51 -50
  105. package/dist/uptimerobot-AZC2DHOT.js +483 -0
  106. package/dist/v2ex-4TVRNMLS.js +667 -0
  107. package/dist/vercel-DPHTJ3XR.js +1076 -0
  108. package/dist/{wolfram_alpha_api-3G4PUJWB.js → wolfram_alpha_api-XAG7IXBW.js} +36 -35
  109. package/dist/wordpress-KMPKVGUX.js +812 -0
  110. package/dist/workos-PKB2YR7S.js +664 -0
  111. package/dist/zhihu-Y4H4XYPB.js +254 -0
  112. package/package.json +18 -9
  113. package/dist/airtable-LLZDFN7M.js +0 -789
  114. package/dist/anthropic-G23NN3X5.js +0 -202
  115. package/dist/apify-Y3SS734K.js +0 -247
  116. package/dist/brave_search-ZC7OAPSZ.js +0 -301
  117. package/dist/chunk-R6P4XAE5.js +0 -248
  118. package/dist/chunk-U7B6DS2O.js +0 -977
  119. package/dist/chunk-UZM2RXZH.js +0 -23436
  120. package/dist/circleci-3BAX5FCG.js +0 -388
  121. package/dist/clerk-6LEM6TNU.js +0 -1019
  122. package/dist/cloudflare_dns-KINYTJUD.js +0 -588
  123. package/dist/cohere-XCJ5AJ6B.js +0 -185
  124. package/dist/deepseek-PC5YGNC5.js +0 -209
  125. package/dist/docker_hub-C3MA5FU6.js +0 -932
  126. package/dist/dropbox-XBV7Z2IR.js +0 -1304
  127. package/dist/dub-LDOFG3HC.js +0 -679
  128. package/dist/e2b-JMCPSVBW.js +0 -277
  129. package/dist/exa-RAK7O7RD.js +0 -331
  130. package/dist/figma-E6IX5DTH.js +0 -773
  131. package/dist/firehydrant-ZBLPQREE.js +0 -562
  132. package/dist/fly-ZH3HFCZJ.js +0 -468
  133. package/dist/geocodio-YGNI7DA4.js +0 -212
  134. package/dist/ghost-EVSGKH2Q.js +0 -337
  135. package/dist/github-MA2BGRCJ.js +0 -5420
  136. package/dist/gmail-E5E6AADE.js +0 -1886
  137. package/dist/googlecalendar-BTLFPXTD.js +0 -2523
  138. package/dist/graphhopper-WSMB3TCD.js +0 -324
  139. package/dist/ipgeolocation_io-AA7HAS22.js +0 -315
  140. package/dist/ipqualityscore-BHJXVTJT.js +0 -277
  141. package/dist/langsmith-5W6SCT6F.js +0 -592
  142. package/dist/lemlist-HJWH6UMK.js +0 -288
  143. package/dist/logsnag-4KFOHL37.js +0 -150
  144. package/dist/mem0-CAW43CIC.js +0 -543
  145. package/dist/memos-TWEGPKFM.js +0 -740
  146. package/dist/mistral_ai-64BGZQHP.js +0 -1195
  147. package/dist/ngrok-GQCUGZKJ.js +0 -356
  148. package/dist/notion-DQWZWP4N.js +0 -936
  149. package/dist/open_exchange_rates-QMMD735E.js +0 -214
  150. package/dist/openai-W6PX32NZ.js +0 -799
  151. package/dist/opengraph_io-HNDBXYNW.js +0 -361
  152. package/dist/openrouter-JJYMEAUL.js +0 -437
  153. package/dist/outline-MCBNQZYY.js +0 -595
  154. package/dist/paddle-D2SKLUDN.js +0 -453
  155. package/dist/perplexity-XIFMKUAE.js +0 -219
  156. package/dist/pinecone-HUFTALV2.js +0 -570
  157. package/dist/polar-TYTOMOSR.js +0 -394
  158. package/dist/posthog-43JAR3VW.js +0 -3463
  159. package/dist/postmark-KL2QJYSG.js +0 -426
  160. package/dist/readwise-CI4GIMMJ.js +0 -469
  161. package/dist/render-SUBJ6YRZ.js +0 -460
  162. package/dist/rootly-CD2LJHPI.js +0 -336
  163. package/dist/semantic_scholar-T4A252KW.js +0 -610
  164. package/dist/shopify-Y2HN2MCQ.js +0 -609
  165. package/dist/stripe-VE3CD3AY.js +0 -584
  166. package/dist/tavily-KCZHK6HE.js +0 -326
  167. package/dist/telegram-3URFBCMY.js +0 -1766
  168. package/dist/todoist-HNPWNYTD.js +0 -663
  169. package/dist/trello-3W2MIXRP.js +0 -1079
  170. package/dist/turso-2EQF7C2Z.js +0 -415
  171. package/dist/umami-5REN7TGP.js +0 -388
  172. package/dist/unsplash-EIXL424F.js +0 -350
  173. package/dist/uptimerobot-KNJ3EYLY.js +0 -482
  174. package/dist/v2ex-RHJ234PZ.js +0 -666
  175. package/dist/vercel-AS6NCIC7.js +0 -1075
  176. package/dist/wordpress-KNDAAUV7.js +0 -811
  177. package/dist/workos-R6UITSJ7.js +0 -663
  178. package/dist/zhihu-AGK4HILK.js +0 -253
@@ -1,663 +0,0 @@
1
- import {
2
- createAuthedClient
3
- } from "./chunk-XYBU3WZH.js";
4
- import "./chunk-E6JCVKW6.js";
5
- import {
6
- asJsonObject,
7
- compactDefined,
8
- trimmedText
9
- } from "./chunk-JXHMDBAY.js";
10
- import {
11
- createProviderPlugin,
12
- upstreamError
13
- } from "./chunk-ATK45BXV.js";
14
- import "./chunk-U7B6DS2O.js";
15
- import {
16
- TBError,
17
- external_exports
18
- } from "./chunk-UZM2RXZH.js";
19
- import "./chunk-U67V476Y.js";
20
-
21
- // ../plugins/src/todoist/api.ts
22
- var SERVICE = "todoist";
23
- var API_BASE = "https://api.todoist.com/api/v1";
24
- var USER_PATH = "/user";
25
- function requireText(value, field) {
26
- const result = trimmedText(value);
27
- if (result === void 0) throw new TBError("invalid_argument", `${field} is required.`);
28
- return result;
29
- }
30
- function stringArray(value) {
31
- if (!Array.isArray(value)) return void 0;
32
- const items = value.map((item) => trimmedText(item)).filter((item) => item !== void 0);
33
- return items.length > 0 ? items : void 0;
34
- }
35
- function requireRecord(value, label) {
36
- const result = asJsonObject(value);
37
- if (result === void 0) throw new TBError("unavailable", `${label}\u4E0D\u662F\u5BF9\u8C61`, { retryable: true });
38
- return result;
39
- }
40
- function errorMessage(status, payload) {
41
- const body = asJsonObject(payload);
42
- const direct = trimmedText(body?.error) ?? trimmedText(body?.error_description) ?? trimmedText(body?.message) ?? trimmedText(body?.detail);
43
- if (direct !== void 0) return direct;
44
- if (Array.isArray(body?.errors)) {
45
- const first = body.errors.find((item) => trimmedText(item) !== void 0);
46
- if (first !== void 0) return first;
47
- }
48
- return `todoist request failed with ${status}`;
49
- }
50
- var http = createAuthedClient({
51
- baseUrl: `${API_BASE}/`,
52
- service: SERVICE,
53
- auth: { kind: "bearer" },
54
- headers: { accept: "application/json" },
55
- mapError: ({ data, status }) => upstreamError(
56
- status,
57
- errorMessage(status, typeof data === "string" ? { message: data } : data)
58
- )
59
- });
60
- async function request(ctx, input) {
61
- const hasBody = input.body !== void 0;
62
- const query = Object.entries(input.query ?? {}).map(([key, value]) => [
63
- key,
64
- // 多值参数(list_tasks 的 ids)是**逗号串**,不是重复的同名参数。
65
- Array.isArray(value) ? value.join(",") : value
66
- ]);
67
- const { data } = await http.request(ctx, {
68
- path: input.path,
69
- method: input.method ?? "GET",
70
- query,
71
- ...hasBody ? { json: input.body } : {},
72
- invalidJsonMessage: "Todoist \u8FD4\u56DE\u4E86\u975E JSON \u54CD\u5E94"
73
- });
74
- return data ?? {};
75
- }
76
- function results(payload, label) {
77
- const body = requireRecord(payload, `${label} \u54CD\u5E94`);
78
- if (!Array.isArray(body.results)) {
79
- throw new TBError("unavailable", `${label} \u54CD\u5E94\u7F3A\u5C11 results`, { retryable: true });
80
- }
81
- return body.results.map((item) => asJsonObject(item)).filter((item) => item !== void 0);
82
- }
83
- function nextCursor(payload) {
84
- return trimmedText(asJsonObject(payload)?.next_cursor) ?? null;
85
- }
86
- function idValue(value) {
87
- if (typeof value === "number" && Number.isInteger(value)) return value;
88
- return trimmedText(value);
89
- }
90
- function normalizeComment(payload) {
91
- const comment = requireRecord(payload, "todoist comment");
92
- return compactDefined({
93
- ...comment,
94
- attachment: asJsonObject(comment.attachment) ?? asJsonObject(comment.file_attachment)
95
- });
96
- }
97
- function commentAttachment(value) {
98
- const attachment = asJsonObject(value);
99
- if (attachment === void 0) return void 0;
100
- return compactDefined({
101
- file_url: trimmedText(attachment.fileUrl),
102
- file_name: trimmedText(attachment.fileName),
103
- file_type: trimmedText(attachment.fileType),
104
- resource_type: trimmedText(attachment.resourceType)
105
- });
106
- }
107
- function notifyUserIds(value) {
108
- if (!Array.isArray(value)) return void 0;
109
- const ids = value.filter((item) => typeof item === "number" && Number.isInteger(item));
110
- return ids.length > 0 ? ids : void 0;
111
- }
112
- function taskBody(input, isCreate) {
113
- return compactDefined({
114
- content: isCreate ? requireText(input.content, "content") : trimmedText(input.content),
115
- description: input.description,
116
- project_id: trimmedText(input.projectId),
117
- section_id: trimmedText(input.sectionId),
118
- parent_id: trimmedText(input.parentId),
119
- order: input.order,
120
- labels: stringArray(input.labels),
121
- priority: input.priority,
122
- assignee_id: input.assigneeId,
123
- due_string: trimmedText(input.dueString),
124
- due_date: trimmedText(input.dueDate),
125
- due_datetime: trimmedText(input.dueDatetime),
126
- due_lang: trimmedText(input.dueLang),
127
- duration: input.duration,
128
- duration_unit: input.durationUnit,
129
- deadline_date: input.deadlineDate,
130
- child_order: input.childOrder,
131
- is_collapsed: input.isCollapsed,
132
- day_order: input.dayOrder
133
- });
134
- }
135
- async function getCurrentUser(_input, ctx) {
136
- return { user: requireRecord(await request(ctx, { path: USER_PATH }), "todoist user \u54CD\u5E94") };
137
- }
138
- async function listProjects(input, ctx) {
139
- const payload = await request(ctx, {
140
- path: "/projects",
141
- query: {
142
- folder_id: idValue(input.folderId),
143
- workspace_id: idValue(input.workspaceId),
144
- cursor: trimmedText(input.cursor),
145
- limit: input.limit
146
- }
147
- });
148
- return { projects: results(payload, "todoist projects"), nextCursor: nextCursor(payload) };
149
- }
150
- async function getProject(input, ctx) {
151
- const path = `/projects/${encodeURIComponent(requireText(input.projectId, "projectId"))}`;
152
- return { project: requireRecord(await request(ctx, { path }), "todoist project \u54CD\u5E94") };
153
- }
154
- async function createProject(input, ctx) {
155
- const payload = await request(ctx, {
156
- path: "/projects",
157
- method: "POST",
158
- body: compactDefined({
159
- name: requireText(input.name, "name"),
160
- description: trimmedText(input.description),
161
- // 上游显式区分 null(建成顶层项目)与"未给"(不带这个键)。
162
- parent_id: input.parentId === null ? null : trimmedText(input.parentId),
163
- color: input.color,
164
- is_favorite: input.isFavorite,
165
- view_style: trimmedText(input.viewStyle),
166
- workspace_id: idValue(input.workspaceId)
167
- })
168
- });
169
- return { project: requireRecord(payload, "todoist project \u54CD\u5E94") };
170
- }
171
- async function updateProject(input, ctx) {
172
- const payload = await request(ctx, {
173
- path: `/projects/${encodeURIComponent(requireText(input.projectId, "projectId"))}`,
174
- method: "POST",
175
- // 更新是三态字段:未给不改、null 清空、有值改成它 —— 故原样透传。
176
- body: compactDefined({
177
- name: input.name,
178
- description: input.description,
179
- color: input.color,
180
- is_favorite: input.isFavorite,
181
- view_style: input.viewStyle,
182
- child_order: input.childOrder,
183
- is_collapsed: input.isCollapsed,
184
- folder_id: input.folderId
185
- })
186
- });
187
- return { project: requireRecord(payload, "todoist project \u54CD\u5E94") };
188
- }
189
- async function listSections(input, ctx) {
190
- const payload = await request(ctx, {
191
- path: "/sections",
192
- query: { project_id: trimmedText(input.projectId), cursor: trimmedText(input.cursor), limit: input.limit }
193
- });
194
- return { sections: results(payload, "todoist sections"), nextCursor: nextCursor(payload) };
195
- }
196
- async function getSection(input, ctx) {
197
- const path = `/sections/${encodeURIComponent(requireText(input.sectionId, "sectionId"))}`;
198
- return { section: requireRecord(await request(ctx, { path }), "todoist section \u54CD\u5E94") };
199
- }
200
- async function createSection(input, ctx) {
201
- const payload = await request(ctx, {
202
- path: "/sections",
203
- method: "POST",
204
- body: compactDefined({
205
- name: requireText(input.name, "name"),
206
- project_id: requireText(input.projectId, "projectId"),
207
- order: input.order
208
- })
209
- });
210
- return { section: requireRecord(payload, "todoist section \u54CD\u5E94") };
211
- }
212
- async function updateSection(input, ctx) {
213
- const payload = await request(ctx, {
214
- path: `/sections/${encodeURIComponent(requireText(input.sectionId, "sectionId"))}`,
215
- method: "POST",
216
- body: compactDefined({
217
- name: input.name,
218
- section_order: input.sectionOrder,
219
- is_collapsed: input.isCollapsed
220
- })
221
- });
222
- return { section: requireRecord(payload, "todoist section \u54CD\u5E94") };
223
- }
224
- async function listTasks(input, ctx) {
225
- const payload = await request(ctx, {
226
- path: "/tasks",
227
- query: {
228
- project_id: trimmedText(input.projectId),
229
- section_id: trimmedText(input.sectionId),
230
- parent_id: trimmedText(input.parentId),
231
- label: trimmedText(input.label),
232
- ids: stringArray(input.ids),
233
- goal_id: trimmedText(input.goalId),
234
- cursor: trimmedText(input.cursor),
235
- limit: input.limit
236
- }
237
- });
238
- return { tasks: results(payload, "todoist tasks"), nextCursor: nextCursor(payload) };
239
- }
240
- async function getTask(input, ctx) {
241
- const path = `/tasks/${encodeURIComponent(requireText(input.taskId, "taskId"))}`;
242
- return { task: requireRecord(await request(ctx, { path }), "todoist task \u54CD\u5E94") };
243
- }
244
- async function createTask(input, ctx) {
245
- const payload = await request(ctx, { path: "/tasks", method: "POST", body: taskBody(input, true) });
246
- return { task: requireRecord(payload, "todoist task \u54CD\u5E94") };
247
- }
248
- async function updateTask(input, ctx) {
249
- const payload = await request(ctx, {
250
- path: `/tasks/${encodeURIComponent(requireText(input.taskId, "taskId"))}`,
251
- method: "POST",
252
- body: taskBody(input, false)
253
- });
254
- return { task: requireRecord(payload, "todoist task \u54CD\u5E94") };
255
- }
256
- async function closeTask(input, ctx) {
257
- await request(ctx, {
258
- path: `/tasks/${encodeURIComponent(requireText(input.taskId, "taskId"))}/close`,
259
- method: "POST"
260
- });
261
- return { success: true };
262
- }
263
- async function listComments(input, ctx) {
264
- const payload = await request(ctx, {
265
- path: "/comments",
266
- query: {
267
- task_id: trimmedText(input.taskId),
268
- project_id: trimmedText(input.projectId),
269
- cursor: trimmedText(input.cursor),
270
- limit: input.limit
271
- }
272
- });
273
- return {
274
- comments: results(payload, "todoist comments").map((comment) => normalizeComment(comment)),
275
- nextCursor: nextCursor(payload)
276
- };
277
- }
278
- async function getComment(input, ctx) {
279
- const path = `/comments/${encodeURIComponent(requireText(input.commentId, "commentId"))}`;
280
- return { comment: normalizeComment(await request(ctx, { path })) };
281
- }
282
- async function createComment(input, ctx) {
283
- const payload = await request(ctx, {
284
- path: "/comments",
285
- method: "POST",
286
- body: compactDefined({
287
- content: requireText(input.content, "content"),
288
- task_id: trimmedText(input.taskId),
289
- project_id: trimmedText(input.projectId),
290
- attachment: commentAttachment(input.attachment),
291
- uids_to_notify: notifyUserIds(input.uidsToNotify)
292
- })
293
- });
294
- return { comment: normalizeComment(payload) };
295
- }
296
- async function updateComment(input, ctx) {
297
- const payload = await request(ctx, {
298
- path: `/comments/${encodeURIComponent(requireText(input.commentId, "commentId"))}`,
299
- method: "POST",
300
- // 更新评论只改正文,且正文必填(生成的 schema 里它是 optional,断言留在本层)。
301
- body: { content: requireText(input.content, "content") }
302
- });
303
- return { comment: normalizeComment(payload) };
304
- }
305
- async function listLabels(input, ctx) {
306
- const payload = await request(ctx, {
307
- path: "/labels",
308
- query: { cursor: trimmedText(input.cursor), limit: input.limit }
309
- });
310
- return { labels: results(payload, "todoist labels"), nextCursor: nextCursor(payload) };
311
- }
312
-
313
- // ../plugins/src/todoist/schema.ts
314
- var getCurrentUserInput = external_exports.strictObject({}).describe("The input payload for this action.");
315
- var getCurrentUserOutput = external_exports.strictObject({
316
- user: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
317
- });
318
- var listProjectsInput = external_exports.strictObject({
319
- folderId: external_exports.union([external_exports.int().describe("Optional Todoist folder ID to filter projects by."), external_exports.string().min(1).describe("Optional Todoist folder ID to filter projects by.")]).describe("Optional Todoist folder ID to filter projects by.").optional(),
320
- workspaceId: external_exports.union([external_exports.int().describe("Optional Todoist workspace ID to filter projects by."), external_exports.string().min(1).describe("Optional Todoist workspace ID to filter projects by.")]).describe("Optional Todoist workspace ID to filter projects by.").optional(),
321
- cursor: external_exports.string().min(1).describe("Opaque pagination cursor returned by a previous Todoist response.").optional(),
322
- limit: external_exports.int().min(1).max(200).describe("Maximum number of Todoist results to return in one page.").optional()
323
- }).describe("The input payload for this action.");
324
- var listProjectsOutput = external_exports.strictObject({
325
- projects: external_exports.array(external_exports.looseObject({}).describe("A Todoist project.")).describe("The Todoist projects returned for the page.").optional(),
326
- nextCursor: external_exports.string().describe("Cursor for the next page, or null when no further page exists.").nullable().optional()
327
- });
328
- var getProjectInput = external_exports.strictObject({
329
- projectId: external_exports.string().min(1).describe("Todoist project ID.").optional()
330
- }).describe("The input payload for this action.");
331
- var getProjectOutput = external_exports.strictObject({
332
- project: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
333
- });
334
- var createProjectInput = external_exports.strictObject({
335
- name: external_exports.string().min(1).describe("Todoist project name."),
336
- description: external_exports.string().describe("Todoist project description.").optional(),
337
- parentId: external_exports.string().describe("Parent project ID, or null where the API supports clearing it.").nullable().optional(),
338
- color: external_exports.union([external_exports.enum(["berry_red", "red", "orange", "yellow", "olive_green", "lime_green", "green", "mint_green", "teal", "sky_blue", "light_blue", "blue", "grape", "violet", "lavender", "magenta", "salmon", "charcoal", "grey", "taupe"]).describe("Todoist color name."), external_exports.int().min(30).max(49).describe("Todoist legacy numeric color code.")]).describe("Todoist color value as a named palette entry or legacy numeric code.").optional(),
339
- isFavorite: external_exports.boolean().describe("Whether the project is a favorite.").optional(),
340
- viewStyle: external_exports.enum(["list", "board", "calendar"]).describe("Todoist project view style.").optional(),
341
- workspaceId: external_exports.union([external_exports.int().describe("Todoist workspace ID for creating a workspace-scoped project."), external_exports.string().min(1).describe("Todoist workspace ID for creating a workspace-scoped project.")]).describe("Todoist workspace ID for creating a workspace-scoped project.").optional()
342
- }).describe("The input payload for this action.");
343
- var createProjectOutput = external_exports.strictObject({
344
- project: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
345
- });
346
- var updateProjectInput = external_exports.strictObject({
347
- projectId: external_exports.string().min(1).describe("Todoist project ID."),
348
- name: external_exports.string().describe("Updated project name.").nullable().optional(),
349
- description: external_exports.string().describe("Updated project description.").nullable().optional(),
350
- color: external_exports.union([external_exports.enum(["berry_red", "red", "orange", "yellow", "olive_green", "lime_green", "green", "mint_green", "teal", "sky_blue", "light_blue", "blue", "grape", "violet", "lavender", "magenta", "salmon", "charcoal", "grey", "taupe"]).describe("Todoist color name."), external_exports.int().min(30).max(49).describe("Todoist legacy numeric color code.")]).describe("Todoist color value as a named palette entry or legacy numeric code.").nullable().optional(),
351
- isFavorite: external_exports.boolean().describe("Updated favorite flag.").nullable().optional(),
352
- viewStyle: external_exports.enum(["list", "board", "calendar"]).describe("Todoist project view style.").nullable().optional(),
353
- childOrder: external_exports.int().describe("Updated project order among sibling projects.").nullable().optional(),
354
- isCollapsed: external_exports.boolean().describe("Updated collapsed state of the project.").nullable().optional(),
355
- folderId: external_exports.int().describe("Updated folder ID for a workspace project.").nullable().optional()
356
- }).describe("The input payload for this action.");
357
- var updateProjectOutput = external_exports.strictObject({
358
- project: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
359
- });
360
- var listSectionsInput = external_exports.strictObject({
361
- projectId: external_exports.string().min(1).describe("Optional Todoist project ID.").optional(),
362
- cursor: external_exports.string().min(1).describe("Opaque pagination cursor returned by a previous Todoist response.").optional(),
363
- limit: external_exports.int().min(1).max(200).describe("Maximum number of Todoist results to return in one page.").optional()
364
- }).describe("The input payload for this action.");
365
- var listSectionsOutput = external_exports.strictObject({
366
- sections: external_exports.array(external_exports.looseObject({}).describe("A Todoist section.")).describe("The Todoist sections returned for the page.").optional(),
367
- nextCursor: external_exports.string().describe("Cursor for the next page, or null when no further page exists.").nullable().optional()
368
- });
369
- var getSectionInput = external_exports.strictObject({
370
- sectionId: external_exports.string().min(1).describe("Todoist section ID.").optional()
371
- }).describe("The input payload for this action.");
372
- var getSectionOutput = external_exports.strictObject({
373
- section: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
374
- });
375
- var createSectionInput = external_exports.strictObject({
376
- projectId: external_exports.string().min(1).describe("Todoist project ID that will own the section."),
377
- name: external_exports.string().min(1).describe("Todoist section name."),
378
- order: external_exports.int().describe("Optional section order within the project.").optional()
379
- }).describe("The input payload for this action.");
380
- var createSectionOutput = external_exports.strictObject({
381
- section: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
382
- });
383
- var updateSectionInput = external_exports.strictObject({
384
- sectionId: external_exports.string().min(1).describe("Todoist section ID."),
385
- name: external_exports.string().describe("Updated section name.").nullable().optional(),
386
- sectionOrder: external_exports.int().describe("Updated section order.").nullable().optional(),
387
- isCollapsed: external_exports.boolean().describe("Updated collapsed state of the section.").nullable().optional()
388
- }).describe("The input payload for this action.");
389
- var updateSectionOutput = external_exports.strictObject({
390
- section: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
391
- });
392
- var listTasksInput = external_exports.strictObject({
393
- projectId: external_exports.string().min(1).describe("Optional Todoist project ID filter.").optional(),
394
- sectionId: external_exports.string().min(1).describe("Optional Todoist section ID filter.").optional(),
395
- parentId: external_exports.string().min(1).describe("Optional Todoist parent task ID filter.").optional(),
396
- label: external_exports.string().min(1).describe("Optional Todoist label name filter.").optional(),
397
- ids: external_exports.array(external_exports.string().min(1)).min(1).describe("Explicit Todoist task IDs to fetch.").optional(),
398
- goalId: external_exports.string().min(1).describe("Optional Todoist goal ID filter.").optional(),
399
- cursor: external_exports.string().min(1).describe("Opaque pagination cursor returned by a previous Todoist response.").optional(),
400
- limit: external_exports.int().min(1).max(200).describe("Maximum number of Todoist results to return in one page.").optional()
401
- }).describe("The input payload for this action.");
402
- var listTasksOutput = external_exports.strictObject({
403
- tasks: external_exports.array(external_exports.looseObject({}).describe("A Todoist task.")).describe("The Todoist tasks returned for the page.").optional(),
404
- nextCursor: external_exports.string().describe("Cursor for the next page, or null when no further page exists.").nullable().optional()
405
- });
406
- var getTaskInput = external_exports.strictObject({
407
- taskId: external_exports.string().min(1).describe("Todoist task ID.").optional()
408
- }).describe("The input payload for this action.");
409
- var getTaskOutput = external_exports.strictObject({
410
- task: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
411
- });
412
- var createTaskInput = external_exports.strictObject({
413
- content: external_exports.string().min(1).describe("Todoist task title."),
414
- description: external_exports.string().describe("Todoist task description.").optional(),
415
- projectId: external_exports.string().min(1).describe("Project ID that will own the task.").optional(),
416
- sectionId: external_exports.string().min(1).describe("Section ID that will own the task.").optional(),
417
- parentId: external_exports.string().min(1).describe("Parent task ID.").optional(),
418
- order: external_exports.int().describe("Task order.").optional(),
419
- labels: external_exports.array(external_exports.string().min(1)).min(1).describe("Todoist label names to attach.").optional(),
420
- priority: external_exports.int().min(1).max(4).describe("Todoist priority from 1 to 4.").optional(),
421
- assigneeId: external_exports.int().describe("Todoist user ID to assign, or null where supported.").nullable().optional(),
422
- dueString: external_exports.string().min(1).describe("Natural language due date string.").optional(),
423
- dueDate: external_exports.iso.date().describe("Due date in YYYY-MM-DD format.").optional(),
424
- dueDatetime: external_exports.iso.datetime({ offset: true }).describe("Due date-time in RFC 3339 form.").optional(),
425
- dueLang: external_exports.string().min(1).describe("Language code used to parse the due string.").optional(),
426
- duration: external_exports.int().describe("Duration amount.").optional(),
427
- durationUnit: external_exports.enum(["minute", "day"]).describe("Todoist duration unit.").optional(),
428
- deadlineDate: external_exports.iso.date().describe("Deadline date in YYYY-MM-DD format.").optional(),
429
- childOrder: external_exports.int().describe("Task order among siblings.").optional(),
430
- isCollapsed: external_exports.boolean().describe("Whether subtasks are collapsed.").optional(),
431
- dayOrder: external_exports.int().describe("Task order in Today and Upcoming.").optional()
432
- }).describe("The input payload for this action.");
433
- var createTaskOutput = external_exports.strictObject({
434
- task: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
435
- });
436
- var updateTaskInput = external_exports.strictObject({
437
- taskId: external_exports.string().min(1).describe("Todoist task ID."),
438
- content: external_exports.string().min(1).describe("Todoist task title.").optional(),
439
- description: external_exports.string().describe("Todoist task description.").optional(),
440
- projectId: external_exports.string().min(1).describe("Project ID that will own the task.").optional(),
441
- sectionId: external_exports.string().min(1).describe("Section ID that will own the task.").optional(),
442
- parentId: external_exports.string().min(1).describe("Parent task ID.").optional(),
443
- order: external_exports.int().describe("Task order.").optional(),
444
- labels: external_exports.array(external_exports.string().min(1)).min(1).describe("Todoist label names to attach.").optional(),
445
- priority: external_exports.int().min(1).max(4).describe("Todoist priority from 1 to 4.").optional(),
446
- assigneeId: external_exports.int().describe("Todoist user ID to assign, or null where supported.").nullable().optional(),
447
- dueString: external_exports.string().min(1).describe("Natural language due date string.").optional(),
448
- dueDate: external_exports.iso.date().describe("Due date in YYYY-MM-DD format.").optional(),
449
- dueDatetime: external_exports.iso.datetime({ offset: true }).describe("Due date-time in RFC 3339 form.").optional(),
450
- dueLang: external_exports.string().min(1).describe("Language code used to parse the due string.").optional(),
451
- duration: external_exports.int().describe("Duration amount.").optional(),
452
- durationUnit: external_exports.enum(["minute", "day"]).describe("Todoist duration unit.").optional(),
453
- deadlineDate: external_exports.iso.date().describe("Deadline date in YYYY-MM-DD format.").optional(),
454
- childOrder: external_exports.int().describe("Task order among siblings.").optional(),
455
- isCollapsed: external_exports.boolean().describe("Whether subtasks are collapsed.").optional(),
456
- dayOrder: external_exports.int().describe("Task order in Today and Upcoming.").optional()
457
- }).describe("The input payload for this action.");
458
- var updateTaskOutput = external_exports.strictObject({
459
- task: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
460
- });
461
- var closeTaskInput = external_exports.strictObject({
462
- taskId: external_exports.string().min(1).describe("Todoist task ID.").optional()
463
- }).describe("The input payload for this action.");
464
- var closeTaskOutput = external_exports.strictObject({
465
- success: external_exports.literal(true).optional()
466
- });
467
- var listCommentsInput = external_exports.strictObject({
468
- taskId: external_exports.string().min(1).describe("Optional task ID filter.").optional(),
469
- projectId: external_exports.string().min(1).describe("Optional project ID filter.").optional(),
470
- cursor: external_exports.string().min(1).describe("Opaque pagination cursor returned by a previous Todoist response.").optional(),
471
- limit: external_exports.int().min(1).max(200).describe("Maximum number of Todoist results to return in one page.").optional()
472
- }).describe("The input payload for this action.");
473
- var listCommentsOutput = external_exports.strictObject({
474
- comments: external_exports.array(external_exports.looseObject({}).describe("A Todoist comment.")).describe("The Todoist comments returned for the page.").optional(),
475
- nextCursor: external_exports.string().describe("Cursor for the next page, or null when no further page exists.").nullable().optional()
476
- });
477
- var getCommentInput = external_exports.strictObject({
478
- commentId: external_exports.string().min(1).describe("Todoist comment ID.").optional()
479
- }).describe("The input payload for this action.");
480
- var getCommentOutput = external_exports.strictObject({
481
- comment: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
482
- });
483
- var createCommentInput = external_exports.strictObject({
484
- content: external_exports.string().min(1).describe("Todoist comment content."),
485
- taskId: external_exports.string().min(1).describe("Task ID that owns the comment.").optional(),
486
- projectId: external_exports.string().min(1).describe("Project ID that owns the comment.").optional(),
487
- attachment: external_exports.strictObject({
488
- fileUrl: external_exports.url().describe("Attachment download URL.").optional(),
489
- fileName: external_exports.string().describe("Attachment file name.").optional(),
490
- fileType: external_exports.string().describe("Attachment MIME type.").optional(),
491
- resourceType: external_exports.string().describe("Attachment resource type.").optional()
492
- }).describe("Todoist comment attachment metadata.").optional(),
493
- uidsToNotify: external_exports.array(external_exports.int().describe("A Todoist user ID.")).min(1).describe("Todoist user IDs to notify.").optional()
494
- }).describe("The input payload for this action.");
495
- var createCommentOutput = external_exports.strictObject({
496
- comment: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
497
- });
498
- var updateCommentInput = external_exports.strictObject({
499
- commentId: external_exports.string().min(1).describe("Todoist comment ID.").optional(),
500
- content: external_exports.string().min(1).describe("Updated Todoist comment content.").optional()
501
- }).describe("The input payload for this action.");
502
- var updateCommentOutput = external_exports.strictObject({
503
- comment: external_exports.looseObject({}).describe("The raw Todoist object returned by the API.").optional()
504
- });
505
- var listLabelsInput = external_exports.strictObject({
506
- cursor: external_exports.string().min(1).describe("Opaque pagination cursor returned by a previous Todoist response.").optional(),
507
- limit: external_exports.int().min(1).max(200).describe("Maximum number of Todoist results to return in one page.").optional()
508
- }).describe("The input payload for this action.");
509
- var listLabelsOutput = external_exports.strictObject({
510
- labels: external_exports.array(external_exports.looseObject({}).describe("A Todoist label.")).describe("The Todoist labels returned for the page.").optional(),
511
- nextCursor: external_exports.string().describe("Cursor for the next page, or null when no further page exists.").nullable().optional()
512
- });
513
- var todoistActions = {
514
- get_current_user: {
515
- description: "Get the current Todoist user profile.",
516
- effect: "read",
517
- inputSchema: getCurrentUserInput,
518
- outputSchema: external_exports.toJSONSchema(getCurrentUserOutput, { io: "output", unrepresentable: "any" })
519
- },
520
- list_projects: {
521
- description: "List Todoist projects visible to the connected account.",
522
- effect: "read",
523
- inputSchema: listProjectsInput,
524
- outputSchema: external_exports.toJSONSchema(listProjectsOutput, { io: "output", unrepresentable: "any" })
525
- },
526
- get_project: {
527
- description: "Get one Todoist project by ID.",
528
- effect: "read",
529
- inputSchema: getProjectInput,
530
- outputSchema: external_exports.toJSONSchema(getProjectOutput, { io: "output", unrepresentable: "any" })
531
- },
532
- create_project: {
533
- description: "Create a Todoist project.",
534
- effect: "write",
535
- inputSchema: createProjectInput,
536
- outputSchema: external_exports.toJSONSchema(createProjectOutput, { io: "output", unrepresentable: "any" })
537
- },
538
- update_project: {
539
- description: "Update a Todoist project.",
540
- effect: "write",
541
- inputSchema: updateProjectInput,
542
- outputSchema: external_exports.toJSONSchema(updateProjectOutput, { io: "output", unrepresentable: "any" })
543
- },
544
- list_sections: {
545
- description: "List Todoist sections, optionally scoped to a project.",
546
- effect: "read",
547
- inputSchema: listSectionsInput,
548
- outputSchema: external_exports.toJSONSchema(listSectionsOutput, { io: "output", unrepresentable: "any" })
549
- },
550
- get_section: {
551
- description: "Get one Todoist section by ID.",
552
- effect: "read",
553
- inputSchema: getSectionInput,
554
- outputSchema: external_exports.toJSONSchema(getSectionOutput, { io: "output", unrepresentable: "any" })
555
- },
556
- create_section: {
557
- description: "Create a Todoist section.",
558
- effect: "write",
559
- inputSchema: createSectionInput,
560
- outputSchema: external_exports.toJSONSchema(createSectionOutput, { io: "output", unrepresentable: "any" })
561
- },
562
- update_section: {
563
- description: "Update a Todoist section.",
564
- effect: "write",
565
- inputSchema: updateSectionInput,
566
- outputSchema: external_exports.toJSONSchema(updateSectionOutput, { io: "output", unrepresentable: "any" })
567
- },
568
- list_tasks: {
569
- description: "List Todoist tasks using the API v1 filters.",
570
- effect: "read",
571
- inputSchema: listTasksInput,
572
- outputSchema: external_exports.toJSONSchema(listTasksOutput, { io: "output", unrepresentable: "any" })
573
- },
574
- get_task: {
575
- description: "Get one Todoist task by ID.",
576
- effect: "read",
577
- inputSchema: getTaskInput,
578
- outputSchema: external_exports.toJSONSchema(getTaskOutput, { io: "output", unrepresentable: "any" })
579
- },
580
- create_task: {
581
- description: "Create a Todoist task.",
582
- effect: "write",
583
- inputSchema: createTaskInput,
584
- outputSchema: external_exports.toJSONSchema(createTaskOutput, { io: "output", unrepresentable: "any" })
585
- },
586
- update_task: {
587
- description: "Update a Todoist task.",
588
- effect: "write",
589
- inputSchema: updateTaskInput,
590
- outputSchema: external_exports.toJSONSchema(updateTaskOutput, { io: "output", unrepresentable: "any" })
591
- },
592
- close_task: {
593
- description: "Close a Todoist task.",
594
- effect: "write",
595
- inputSchema: closeTaskInput,
596
- outputSchema: external_exports.toJSONSchema(closeTaskOutput, { io: "output", unrepresentable: "any" })
597
- },
598
- list_comments: {
599
- description: "List Todoist comments by task or project.",
600
- effect: "read",
601
- inputSchema: listCommentsInput,
602
- outputSchema: external_exports.toJSONSchema(listCommentsOutput, { io: "output", unrepresentable: "any" })
603
- },
604
- get_comment: {
605
- description: "Get one Todoist comment by ID.",
606
- effect: "read",
607
- inputSchema: getCommentInput,
608
- outputSchema: external_exports.toJSONSchema(getCommentOutput, { io: "output", unrepresentable: "any" })
609
- },
610
- create_comment: {
611
- description: "Create a Todoist comment on a task or project.",
612
- effect: "write",
613
- inputSchema: createCommentInput,
614
- outputSchema: external_exports.toJSONSchema(createCommentOutput, { io: "output", unrepresentable: "any" })
615
- },
616
- update_comment: {
617
- description: "Update a Todoist comment.",
618
- effect: "write",
619
- inputSchema: updateCommentInput,
620
- outputSchema: external_exports.toJSONSchema(updateCommentOutput, { io: "output", unrepresentable: "any" })
621
- },
622
- list_labels: {
623
- description: "List Todoist labels visible to the connected account.",
624
- effect: "read",
625
- inputSchema: listLabelsInput,
626
- outputSchema: external_exports.toJSONSchema(listLabelsOutput, { io: "output", unrepresentable: "any" })
627
- }
628
- };
629
-
630
- // ../plugins/src/todoist/index.ts
631
- function createTodoistPlugin() {
632
- return createProviderPlugin({
633
- description: "Todoist",
634
- actions: todoistActions,
635
- credentialProbe: "get_current_user",
636
- handlers: {
637
- get_current_user: getCurrentUser,
638
- list_projects: listProjects,
639
- get_project: getProject,
640
- create_project: createProject,
641
- update_project: updateProject,
642
- list_sections: listSections,
643
- get_section: getSection,
644
- create_section: createSection,
645
- update_section: updateSection,
646
- list_tasks: listTasks,
647
- get_task: getTask,
648
- create_task: createTask,
649
- update_task: updateTask,
650
- close_task: closeTask,
651
- list_comments: listComments,
652
- get_comment: getComment,
653
- create_comment: createComment,
654
- update_comment: updateComment,
655
- list_labels: listLabels
656
- }
657
- });
658
- }
659
- var todoist_default = createTodoistPlugin();
660
- export {
661
- createTodoistPlugin,
662
- todoist_default as default
663
- };