@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
@@ -0,0 +1,289 @@
1
+ import {
2
+ createAuthedClient
3
+ } from "./chunk-RTW5VRTK.js";
4
+ import "./chunk-BNMLA2RC.js";
5
+ import {
6
+ asJsonObject,
7
+ compactDefined,
8
+ trimmedText
9
+ } from "./chunk-JXHMDBAY.js";
10
+ import {
11
+ createProviderPlugin,
12
+ requireApiKey,
13
+ upstreamError
14
+ } from "./chunk-X7ZUTKHR.js";
15
+ import "./chunk-7ISGFRC6.js";
16
+ import "./chunk-UY6ANCOY.js";
17
+ import {
18
+ TBError
19
+ } from "./chunk-HA4BGL6C.js";
20
+ import "./chunk-U67V476Y.js";
21
+
22
+ // ../plugins/src/lemlist/api.ts
23
+ var SERVICE = "lemlist";
24
+ var API_BASE = "https://api.lemlist.com/api";
25
+ function stringArray(value) {
26
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : void 0;
27
+ }
28
+ function objectArray(value) {
29
+ if (!Array.isArray(value)) return void 0;
30
+ return value.map(asJsonObject).filter((item) => item !== void 0);
31
+ }
32
+ function basicAuthHeader(apiKey) {
33
+ const bytes = new TextEncoder().encode(`:${apiKey}`);
34
+ let binary = "";
35
+ for (const byte of bytes) binary += String.fromCharCode(byte);
36
+ return `Basic ${btoa(binary)}`;
37
+ }
38
+ var http = createAuthedClient({
39
+ baseUrl: `${API_BASE}/`,
40
+ service: SERVICE,
41
+ // Basic(用户名留空、key 当密码)不在 helper 的三种头型里,自己拼。
42
+ auth: { kind: "custom", headers: (ctx) => ({ authorization: basicAuthHeader(requireApiKey(ctx, SERVICE)) }) },
43
+ headers: { accept: "application/json" },
44
+ errorMessage: {
45
+ keys: ["message", "error", "reason"],
46
+ fallback: (status) => `lemlist \u8BF7\u6C42\u5931\u8D25,HTTP ${status}`
47
+ },
48
+ mapTransportError: ({ message }) => upstreamError(
49
+ 502,
50
+ message === void 0 ? "lemlist \u8BF7\u6C42\u5931\u8D25" : `lemlist \u8BF7\u6C42\u5931\u8D25: ${message}`
51
+ )
52
+ });
53
+ async function request(ctx, path, query = {}) {
54
+ const pairs = [];
55
+ for (const [key, value] of Object.entries(query)) {
56
+ if (typeof value === "number" || typeof value === "string" && value !== "") {
57
+ pairs.push([key, value]);
58
+ }
59
+ }
60
+ const { data } = await http.request(ctx, {
61
+ path,
62
+ query: pairs,
63
+ invalidJson: "text"
64
+ });
65
+ return data ?? null;
66
+ }
67
+ function requireObject(value, message) {
68
+ const object = asJsonObject(value);
69
+ if (object === void 0) throw new TBError("unavailable", message, { retryable: true });
70
+ return object;
71
+ }
72
+ function requireArray(value, message) {
73
+ if (Array.isArray(value)) return value;
74
+ throw new TBError("unavailable", message, { retryable: true });
75
+ }
76
+ function normalizeTeam(value) {
77
+ const team = requireObject(value, "lemlist team \u54CD\u5E94\u5FC5\u987B\u662F JSON \u5BF9\u8C61");
78
+ return compactDefined({
79
+ _id: trimmedText(team._id),
80
+ name: trimmedText(team.name),
81
+ userIds: stringArray(team.userIds),
82
+ createdBy: trimmedText(team.createdBy),
83
+ createdAt: trimmedText(team.createdAt),
84
+ beta: stringArray(team.beta),
85
+ pictureId: trimmedText(team.pictureId),
86
+ customDomain: trimmedText(team.customDomain),
87
+ raw: team
88
+ });
89
+ }
90
+ function normalizeCampaign(value) {
91
+ const campaign = requireObject(value, "lemlist campaign \u54CD\u5E94\u5FC5\u987B\u662F JSON \u5BF9\u8C61");
92
+ return compactDefined({
93
+ _id: trimmedText(campaign._id),
94
+ name: trimmedText(campaign.name),
95
+ labels: stringArray(campaign.labels),
96
+ createdAt: trimmedText(campaign.createdAt),
97
+ createdBy: trimmedText(campaign.createdBy),
98
+ status: trimmedText(campaign.status),
99
+ sequenceId: trimmedText(campaign.sequenceId),
100
+ scheduleIds: stringArray(campaign.scheduleIds),
101
+ teamId: trimmedText(campaign.teamId),
102
+ hasError: typeof campaign.hasError === "boolean" ? campaign.hasError : void 0,
103
+ errors: stringArray(campaign.errors),
104
+ creator: asJsonObject(campaign.creator),
105
+ senders: objectArray(campaign.senders),
106
+ raw: campaign
107
+ });
108
+ }
109
+ function normalizeLead(value) {
110
+ const lead = requireObject(value, "lemlist lead \u54CD\u5E94\u5FC5\u987B\u662F JSON \u5BF9\u8C61");
111
+ return compactDefined({
112
+ _id: trimmedText(lead._id),
113
+ contactId: trimmedText(lead.contactId),
114
+ state: trimmedText(lead.state),
115
+ raw: lead
116
+ });
117
+ }
118
+ async function getTeam(_input, ctx) {
119
+ return { team: normalizeTeam(await request(ctx, "/team")) };
120
+ }
121
+ async function listCampaigns(input, ctx) {
122
+ const payload = await request(ctx, "/campaigns", {
123
+ // lemlist 的 /campaigns 默认还是 v1 形状,固定请求 v2 才拿得到归一函数期望的字段。
124
+ version: "v2",
125
+ limit: input.limit,
126
+ offset: input.offset,
127
+ page: input.page,
128
+ sortBy: input.sortBy,
129
+ sortOrder: input.sortOrder,
130
+ status: input.status,
131
+ createdBy: input.createdBy
132
+ });
133
+ return {
134
+ campaigns: requireArray(payload, "lemlist campaign \u5217\u8868\u5FC5\u987B\u662F\u6570\u7EC4").map(normalizeCampaign)
135
+ };
136
+ }
137
+ async function getCampaign(input, ctx) {
138
+ const campaignId = input.campaignId?.trim();
139
+ if (campaignId === void 0 || campaignId === "") {
140
+ throw new TBError("invalid_argument", "campaignId is required");
141
+ }
142
+ return { campaign: normalizeCampaign(await request(ctx, `/campaigns/${encodeURIComponent(campaignId)}`)) };
143
+ }
144
+ async function listCampaignLeads(input, ctx) {
145
+ const path = `/campaigns/${encodeURIComponent(input.campaignId.trim())}/leads/`;
146
+ const payload = await request(ctx, path, { state: input.state, limit: input.limit });
147
+ return {
148
+ leads: requireArray(payload, "lemlist lead \u5217\u8868\u5FC5\u987B\u662F\u6570\u7EC4").map(normalizeLead)
149
+ };
150
+ }
151
+
152
+ // ../plugins/src/lemlist/schema.ts
153
+ import { z } from "zod/v4";
154
+ var getTeamInput = z.strictObject({}).describe("Input parameters for retrieving the lemlist team.");
155
+ var getTeamOutput = z.strictObject({
156
+ team: z.looseObject({
157
+ _id: z.string().describe("Unique team identifier."),
158
+ name: z.string().describe("Team name."),
159
+ userIds: z.array(z.string().describe("User ID.")).describe("User IDs in this team.").optional(),
160
+ createdBy: z.string().describe("User ID who created the team.").optional(),
161
+ createdAt: z.string().describe("Date and time when the team was created.").optional(),
162
+ beta: z.array(z.string().describe("Beta feature name.")).describe("Beta features enabled for the team.").optional(),
163
+ pictureId: z.string().describe("Team profile picture file ID.").optional(),
164
+ customDomain: z.string().describe("Custom domain for the team.").optional(),
165
+ raw: z.looseObject({}).describe("Raw team payload returned by lemlist.").optional()
166
+ }).describe("lemlist team information.").optional()
167
+ }).describe("lemlist team response.");
168
+ var listCampaignsInput = z.strictObject({
169
+ limit: z.int().min(1).max(100).describe("Number of campaigns to retrieve. lemlist allows up to 100.").optional(),
170
+ offset: z.int().min(0).describe("Offset from the start for pagination.").optional(),
171
+ page: z.int().min(1).describe("Page number to retrieve.").optional(),
172
+ sortBy: z.enum(["createdAt"]).describe("Field by which to sort campaigns.").optional(),
173
+ sortOrder: z.enum(["asc", "desc"]).describe("Sort direction for campaign listing.").optional(),
174
+ status: z.enum(["running", "draft", "archived", "ended", "paused", "errors"]).describe("Campaign status filter supported by lemlist.").optional(),
175
+ createdBy: z.string().min(1).describe("Creator user ID used to filter campaigns.").optional()
176
+ }).describe("Input parameters for listing lemlist campaigns.");
177
+ var listCampaignsOutput = z.strictObject({
178
+ campaigns: z.array(z.looseObject({
179
+ _id: z.string().describe("Unique campaign identifier."),
180
+ name: z.string().describe("Campaign name."),
181
+ labels: z.array(z.string().describe("Campaign label.")).describe("Categorization labels.").optional(),
182
+ createdAt: z.string().describe("Creation timestamp.").optional(),
183
+ createdBy: z.string().describe("Creator user ID.").optional(),
184
+ status: z.string().describe("Campaign status returned by lemlist.").optional(),
185
+ sequenceId: z.string().describe("Main sequence ID.").optional(),
186
+ scheduleIds: z.array(z.string().describe("Schedule ID.")).describe("Associated schedule IDs.").optional(),
187
+ teamId: z.string().describe("ID of the team that owns this campaign.").optional(),
188
+ hasError: z.boolean().describe("Whether the campaign has errors.").optional(),
189
+ errors: z.array(z.string().describe("Campaign error message.")).describe("Campaign error messages.").optional(),
190
+ creator: z.looseObject({
191
+ userId: z.string().describe("Creator user ID.").optional(),
192
+ userEmail: z.email().describe("Creator email address.").optional()
193
+ }).describe("Campaign creator information.").optional(),
194
+ senders: z.array(z.looseObject({
195
+ id: z.string().describe("Sender user ID.").optional(),
196
+ email: z.email().describe("Sender email address.").optional(),
197
+ sendUserMailboxId: z.string().describe("Mailbox ID used for sending.").optional()
198
+ }).describe("Campaign sender configuration.")).describe("Campaign senders configuration.").optional(),
199
+ raw: z.looseObject({}).describe("Raw campaign payload returned by lemlist.").optional()
200
+ }).describe("lemlist campaign summary or detail.")).describe("Campaigns returned by lemlist.").optional()
201
+ }).describe("lemlist campaign list response.");
202
+ var getCampaignInput = z.strictObject({
203
+ campaignId: z.string().min(1).describe("Unique identifier of the campaign to retrieve.").optional()
204
+ }).describe("Input parameters for retrieving a lemlist campaign.");
205
+ var getCampaignOutput = z.strictObject({
206
+ campaign: z.looseObject({
207
+ _id: z.string().describe("Unique campaign identifier."),
208
+ name: z.string().describe("Campaign name."),
209
+ labels: z.array(z.string().describe("Campaign label.")).describe("Categorization labels.").optional(),
210
+ createdAt: z.string().describe("Creation timestamp.").optional(),
211
+ createdBy: z.string().describe("Creator user ID.").optional(),
212
+ status: z.string().describe("Campaign status returned by lemlist.").optional(),
213
+ sequenceId: z.string().describe("Main sequence ID.").optional(),
214
+ scheduleIds: z.array(z.string().describe("Schedule ID.")).describe("Associated schedule IDs.").optional(),
215
+ teamId: z.string().describe("ID of the team that owns this campaign.").optional(),
216
+ hasError: z.boolean().describe("Whether the campaign has errors.").optional(),
217
+ errors: z.array(z.string().describe("Campaign error message.")).describe("Campaign error messages.").optional(),
218
+ creator: z.looseObject({
219
+ userId: z.string().describe("Creator user ID.").optional(),
220
+ userEmail: z.email().describe("Creator email address.").optional()
221
+ }).describe("Campaign creator information.").optional(),
222
+ senders: z.array(z.looseObject({
223
+ id: z.string().describe("Sender user ID.").optional(),
224
+ email: z.email().describe("Sender email address.").optional(),
225
+ sendUserMailboxId: z.string().describe("Mailbox ID used for sending.").optional()
226
+ }).describe("Campaign sender configuration.")).describe("Campaign senders configuration.").optional(),
227
+ raw: z.looseObject({}).describe("Raw campaign payload returned by lemlist.").optional()
228
+ }).describe("lemlist campaign summary or detail.").optional()
229
+ }).describe("lemlist campaign response.");
230
+ var listCampaignLeadsInput = z.strictObject({
231
+ campaignId: z.string().min(1).describe("Unique identifier of the campaign whose leads should be listed."),
232
+ state: z.string().min(1).describe("Lead state filter such as scanned, contacted, or interested.").optional(),
233
+ limit: z.int().min(1).max(500).describe("Maximum number of leads to return. lemlist allows up to 500.").optional()
234
+ }).describe("Input parameters for listing leads in a lemlist campaign.");
235
+ var listCampaignLeadsOutput = z.strictObject({
236
+ leads: z.array(z.looseObject({
237
+ _id: z.string().describe("Unique lead identifier."),
238
+ contactId: z.string().describe("Associated contact identifier.").optional(),
239
+ state: z.string().describe("Current lead state.").optional(),
240
+ raw: z.looseObject({}).describe("Raw lead payload returned by lemlist.").optional()
241
+ }).describe("lemlist lead summary.")).describe("Leads returned by lemlist.").optional()
242
+ }).describe("lemlist campaign leads response.");
243
+ var lemlistActions = {
244
+ get_team: {
245
+ description: "Retrieve information about the lemlist team for the API key.",
246
+ effect: "read",
247
+ inputSchema: getTeamInput,
248
+ outputSchema: z.toJSONSchema(getTeamOutput, { io: "output", unrepresentable: "any" })
249
+ },
250
+ list_campaigns: {
251
+ description: "List lemlist campaigns with optional pagination and status filters.",
252
+ effect: "read",
253
+ inputSchema: listCampaignsInput,
254
+ outputSchema: z.toJSONSchema(listCampaignsOutput, { io: "output", unrepresentable: "any" })
255
+ },
256
+ get_campaign: {
257
+ description: "Retrieve one lemlist campaign by campaign ID.",
258
+ effect: "read",
259
+ inputSchema: getCampaignInput,
260
+ outputSchema: z.toJSONSchema(getCampaignOutput, { io: "output", unrepresentable: "any" })
261
+ },
262
+ list_campaign_leads: {
263
+ description: "List leads from a lemlist campaign with optional state filtering.",
264
+ effect: "read",
265
+ inputSchema: listCampaignLeadsInput,
266
+ outputSchema: z.toJSONSchema(listCampaignLeadsOutput, { io: "output", unrepresentable: "any" })
267
+ }
268
+ };
269
+
270
+ // ../plugins/src/lemlist/index.ts
271
+ function createLemlistPlugin() {
272
+ return createProviderPlugin({
273
+ description: "lemlist",
274
+ actions: lemlistActions,
275
+ // 上游 credentialValidators 就是打 /team 试凭证,这里对应到同一个 action。
276
+ credentialProbe: "get_team",
277
+ handlers: {
278
+ get_team: getTeam,
279
+ list_campaigns: listCampaigns,
280
+ get_campaign: getCampaign,
281
+ list_campaign_leads: listCampaignLeads
282
+ }
283
+ });
284
+ }
285
+ var lemlist_default = createLemlistPlugin();
286
+ export {
287
+ createLemlistPlugin,
288
+ lemlist_default as default
289
+ };