@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,279 @@
1
+ import {
2
+ createProviderHttpClient
3
+ } from "./chunk-BNMLA2RC.js";
4
+ import "./chunk-JXHMDBAY.js";
5
+ import {
6
+ createProviderPlugin,
7
+ requireApiKey,
8
+ upstreamError
9
+ } from "./chunk-X7ZUTKHR.js";
10
+ import "./chunk-7ISGFRC6.js";
11
+ import "./chunk-UY6ANCOY.js";
12
+ import {
13
+ TBError
14
+ } from "./chunk-HA4BGL6C.js";
15
+ import "./chunk-U67V476Y.js";
16
+
17
+ // ../plugins/src/ipqualityscore/api.ts
18
+ import { z } from "zod/v4";
19
+ var SERVICE = "ipqualityscore";
20
+ var API_BASE = "https://www.ipqualityscore.com";
21
+ var http = createProviderHttpClient({ baseUrl: API_BASE, service: SERVICE });
22
+ var IP_LITERAL = z.union([z.ipv4(), z.ipv6()]);
23
+ function optionalText(value) {
24
+ return value?.trim() || void 0;
25
+ }
26
+ function pathValue(value, field) {
27
+ const trimmed = value.trim();
28
+ if (trimmed === "") throw new TBError("invalid_argument", `${field} \u4E0D\u80FD\u4E3A\u7A7A`);
29
+ return trimmed;
30
+ }
31
+ function messageOf(payload) {
32
+ if (typeof payload === "string") return optionalText(payload);
33
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) return void 0;
34
+ const record = payload;
35
+ const pick = (value) => typeof value === "string" ? optionalText(value) : void 0;
36
+ return pick(record.message) ?? pick(record.error);
37
+ }
38
+ function ipqsError(status, statusText, payload) {
39
+ const message = messageOf(payload) ?? optionalText(statusText) ?? `IPQualityScore request failed with ${status}`;
40
+ const lower = message.toLowerCase();
41
+ if (status === 429 || status === 402 || lower.includes("insufficient credits")) {
42
+ return upstreamError(429, message);
43
+ }
44
+ if (lower.includes("invalid api key") || lower.includes("api key") || status === 401 || status === 403) {
45
+ return upstreamError(401, message);
46
+ }
47
+ if (status === 400 || lower.includes("invalid ip") || lower.includes("invalid email") || lower.includes("invalid phone") || lower.includes("invalid url")) {
48
+ return upstreamError(400, message);
49
+ }
50
+ return upstreamError(status >= 400 ? status : 502, message);
51
+ }
52
+ async function request(ctx, family, value, query = []) {
53
+ const apiKey = requireApiKey(ctx, SERVICE);
54
+ const result = await http.request({
55
+ path: `/api/json/${family}/${encodeURIComponent(apiKey)}/${encodeURIComponent(value)}`,
56
+ method: "GET",
57
+ query,
58
+ headers: { accept: "application/json" },
59
+ invalidJson: "text",
60
+ sensitiveValues: [apiKey],
61
+ mapError: ({ data, status, statusText }) => ipqsError(status, statusText, data),
62
+ mapTransportError: ({ message }) => new TBError(
63
+ "unavailable",
64
+ message === void 0 ? "IPQualityScore \u8BF7\u6C42\u5931\u8D25" : `IPQualityScore \u8BF7\u6C42\u5931\u8D25: ${message}`,
65
+ { retryable: true }
66
+ )
67
+ });
68
+ const payload = result.bodyKind === "empty" ? null : result.data;
69
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
70
+ throw new TBError("unavailable", `IPQualityScore \u5BF9 ${family} \u7684\u54CD\u5E94\u4E0D\u662F JSON \u5BF9\u8C61`, { retryable: true });
71
+ }
72
+ if (payload.success === false) throw ipqsError(result.status, result.statusText, payload);
73
+ return payload;
74
+ }
75
+ async function checkIpReputation(input, ctx) {
76
+ const ipAddress = pathValue(input.ipAddress, "ipAddress");
77
+ if (!IP_LITERAL.safeParse(ipAddress).success) {
78
+ throw new TBError("invalid_argument", "ipAddress \u5FC5\u987B\u662F\u5408\u6CD5\u7684 IPv4 \u6216 IPv6 \u5730\u5740");
79
+ }
80
+ return await request(ctx, "ip", ipAddress, [
81
+ ["strictness", input.strictness?.toString()],
82
+ ["allow_public_access_points", input.allowPublicAccessPoints?.toString()],
83
+ ["user_agent", optionalText(input.userAgent)],
84
+ ["user_language", optionalText(input.userLanguage)]
85
+ ]);
86
+ }
87
+ async function validateEmail(input, ctx) {
88
+ return await request(ctx, "email", pathValue(input.email, "email"), [
89
+ ["timeout", input.timeout?.toString()],
90
+ ["abuse_strictness", input.abuseStrictness?.toString()]
91
+ ]);
92
+ }
93
+ async function validatePhone(input, ctx) {
94
+ return await request(ctx, "phone", pathValue(input.phone, "phone"), [
95
+ ["strictness", input.strictness?.toString()],
96
+ // 多个候选国家是重复的 `country[]`,且上游只认大写的 ISO alpha-2。
97
+ ...(input.country ?? []).map((code) => ["country[]", code.toUpperCase()])
98
+ ]);
99
+ }
100
+ async function scanUrl(input, ctx) {
101
+ return await request(ctx, "url", pathValue(input.url, "url"), [
102
+ ["strictness", input.strictness?.toString()]
103
+ ]);
104
+ }
105
+
106
+ // ../plugins/src/ipqualityscore/schema.ts
107
+ import { z as z2 } from "zod/v4";
108
+ var checkIpReputationInput = z2.strictObject({
109
+ ipAddress: z2.string().min(1).describe("The IPv4 or IPv6 address to inspect."),
110
+ strictness: z2.int().min(0).max(3).describe("How strict IPQS should be when scoring the lookup. Higher values may increase false positives.").optional(),
111
+ allowPublicAccessPoints: z2.boolean().describe("Whether to reduce risk flags for public access points such as schools or libraries.").optional(),
112
+ userAgent: z2.string().min(1).describe("The user agent associated with the IP lookup.").optional(),
113
+ userLanguage: z2.string().min(1).describe("The browser language associated with the IP lookup.").optional()
114
+ }).describe("Input for checking IP address reputation with IPQualityScore.");
115
+ var checkIpReputationOutput = z2.looseObject({
116
+ success: z2.boolean().describe("Whether IPQS completed the IP reputation lookup successfully."),
117
+ message: z2.string().describe("Human-readable status message returned by IPQS."),
118
+ fraud_score: z2.int().min(0).max(100).describe("The risk score returned by IPQS from 0 to 100."),
119
+ country_code: z2.string().describe("The two-letter country code associated with the IP.").nullable().optional(),
120
+ region: z2.string().describe("The region associated with the IP.").nullable().optional(),
121
+ city: z2.string().describe("The city associated with the IP.").nullable().optional(),
122
+ ISP: z2.string().describe("The internet service provider associated with the IP.").nullable().optional(),
123
+ ASN: z2.int().describe("The autonomous system number associated with the IP.").nullable().optional(),
124
+ organization: z2.string().describe("The organization associated with the IP.").nullable().optional(),
125
+ is_crawler: z2.boolean().describe("Whether IPQS identified the IP as a crawler.").optional(),
126
+ timezone: z2.string().describe("The timezone associated with the IP.").nullable().optional(),
127
+ mobile: z2.boolean().describe("Whether the IP appears to belong to a mobile connection.").optional(),
128
+ host: z2.string().describe("The host associated with the IP.").nullable().optional(),
129
+ proxy: z2.boolean().describe("Whether IPQS identified the IP as a proxy.").optional(),
130
+ vpn: z2.boolean().describe("Whether IPQS identified the IP as a VPN.").optional(),
131
+ tor: z2.boolean().describe("Whether IPQS identified the IP as Tor.").optional(),
132
+ active_vpn: z2.boolean().describe("Whether IPQS identified an active VPN connection.").optional(),
133
+ active_tor: z2.boolean().describe("Whether IPQS identified an active Tor connection.").optional(),
134
+ recent_abuse: z2.boolean().describe("Whether IPQS has seen recent abuse from the IP.").optional(),
135
+ bot_status: z2.boolean().describe("Whether IPQS identified bot behavior for the IP.").optional(),
136
+ connection_type: z2.string().describe("The connection type associated with the IP.").nullable().optional(),
137
+ abuse_velocity: z2.string().describe("The recent abuse velocity associated with the IP.").nullable().optional(),
138
+ request_id: z2.string().describe("The IPQS request identifier for support and tracing.").optional()
139
+ }).describe("IP reputation result returned by IPQualityScore.");
140
+ var validateEmailInput = z2.strictObject({
141
+ email: z2.email().describe("The email address to validate."),
142
+ timeout: z2.int().min(1).max(60).describe("Maximum number of seconds IPQS should spend on mail service provider checks.").optional(),
143
+ abuseStrictness: z2.int().min(0).max(3).describe("How strict IPQS should be when scoring the lookup. Higher values may increase false positives.").optional()
144
+ }).describe("Input for validating an email address with IPQualityScore.");
145
+ var validateEmailOutput = z2.looseObject({
146
+ success: z2.boolean().describe("Whether IPQS completed the email validation lookup successfully."),
147
+ message: z2.string().describe("Human-readable status message returned by IPQS."),
148
+ valid: z2.boolean().describe("Whether IPQS considers the email address valid."),
149
+ disposable: z2.boolean().describe("Whether the email address belongs to a disposable email provider.").optional(),
150
+ smtp_score: z2.int().describe("The SMTP deliverability score returned by IPQS.").nullable().optional(),
151
+ overall_score: z2.int().describe("The overall email quality score returned by IPQS.").nullable().optional(),
152
+ first_name: z2.string().describe("The first name inferred by IPQS, when available.").nullable().optional(),
153
+ generic: z2.boolean().describe("Whether IPQS considers the email address generic.").optional(),
154
+ common: z2.boolean().describe("Whether the email address is commonly used.").optional(),
155
+ dns_valid: z2.boolean().describe("Whether DNS records for the email domain are valid.").optional(),
156
+ honeypot: z2.boolean().describe("Whether IPQS identified the email as a honeypot.").optional(),
157
+ deliverability: z2.string().describe("The deliverability classification returned by IPQS.").nullable().optional(),
158
+ frequent_complainer: z2.boolean().describe("Whether the email is associated with frequent complaints.").optional(),
159
+ spam_trap_score: z2.string().describe("The spam trap score returned by IPQS.").nullable().optional(),
160
+ catch_all: z2.boolean().describe("Whether the email domain accepts all mailbox names.").optional(),
161
+ timed_out: z2.boolean().describe("Whether IPQS timed out during provider checks.").optional(),
162
+ suspect: z2.boolean().describe("Whether IPQS considers the email suspicious.").optional(),
163
+ recent_abuse: z2.boolean().describe("Whether IPQS has seen recent abuse for the email.").optional(),
164
+ fraud_score: z2.int().min(0).max(100).describe("The risk score returned by IPQS from 0 to 100.").optional(),
165
+ suggested_domain: z2.string().describe("Suggested corrected domain for possible typos.").nullable().optional(),
166
+ leaked: z2.boolean().describe("Whether IPQS found the email in leaked data.").optional(),
167
+ sanitized_email: z2.email().describe("The normalized email address returned by IPQS.").optional(),
168
+ request_id: z2.string().describe("The IPQS request identifier for support and tracing.").optional()
169
+ }).describe("Email validation result returned by IPQualityScore.");
170
+ var validatePhoneInput = z2.strictObject({
171
+ phone: z2.string().min(1).describe("The phone number to validate."),
172
+ country: z2.array(z2.string().min(2).max(2).regex(new RegExp("^[A-Za-z]{2}$")).describe("An ISO 3166-1 alpha-2 country code.")).min(1).describe("Optional ISO 3166-1 alpha-2 countries to use when interpreting local numbers.").optional(),
173
+ strictness: z2.int().min(0).max(3).describe("How strict IPQS should be when scoring the lookup. Higher values may increase false positives.").optional()
174
+ }).describe("Input for validating a phone number with IPQualityScore.");
175
+ var validatePhoneOutput = z2.looseObject({
176
+ success: z2.boolean().describe("Whether IPQS completed the phone validation lookup successfully."),
177
+ message: z2.string().describe("Human-readable status message returned by IPQS."),
178
+ formatted: z2.string().describe("The formatted phone number returned by IPQS.").nullable().optional(),
179
+ local_format: z2.string().describe("The local phone number format returned by IPQS.").nullable().optional(),
180
+ valid: z2.boolean().describe("Whether IPQS considers the phone number valid."),
181
+ fraud_score: z2.int().min(0).max(100).describe("The risk score returned by IPQS from 0 to 100.").optional(),
182
+ recent_abuse: z2.boolean().describe("Whether IPQS has seen recent abuse for the phone number.").optional(),
183
+ VOIP: z2.boolean().describe("Whether the phone number appears to be a VoIP number.").optional(),
184
+ prepaid: z2.boolean().describe("Whether the phone number appears to be prepaid.").optional(),
185
+ risky: z2.boolean().describe("Whether IPQS considers the phone number risky.").optional(),
186
+ active: z2.boolean().describe("Whether IPQS considers the phone number active.").optional(),
187
+ name: z2.string().describe("The phone owner name returned by IPQS, when available.").nullable().optional(),
188
+ carrier: z2.string().describe("The carrier associated with the phone number.").nullable().optional(),
189
+ line_type: z2.string().describe("The line type associated with the phone number.").nullable().optional(),
190
+ country: z2.string().describe("The country associated with the phone number.").nullable().optional(),
191
+ city: z2.string().describe("The city associated with the phone number.").nullable().optional(),
192
+ zip_code: z2.string().describe("The postal code associated with the phone number.").nullable().optional(),
193
+ region: z2.string().describe("The region associated with the phone number.").nullable().optional(),
194
+ dialing_code: z2.int().describe("The international dialing code associated with the phone number.").nullable().optional(),
195
+ sms_pumping: z2.looseObject({
196
+ risk_score: z2.int().min(0).max(100).describe("The risk score returned by IPQS from 0 to 100.").optional(),
197
+ message: z2.string().describe("Human-readable SMS pumping risk message returned by IPQS.").optional(),
198
+ velocity: z2.string().describe("SMS pumping velocity classification returned by IPQS.").optional()
199
+ }).describe("SMS pumping risk details returned by IPQS.").optional(),
200
+ request_id: z2.string().describe("The IPQS request identifier for support and tracing.").optional()
201
+ }).describe("Phone validation result returned by IPQualityScore.");
202
+ var scanUrlInput = z2.strictObject({
203
+ url: z2.string().min(1).describe("The URL or domain to scan."),
204
+ strictness: z2.int().min(0).max(2).describe("How strict IPQS should be when scanning the URL. Higher values may increase false positives.").optional()
205
+ }).describe("Input for scanning a URL or domain with IPQualityScore.");
206
+ var scanUrlOutput = z2.looseObject({
207
+ success: z2.boolean().describe("Whether IPQS completed the URL scan successfully."),
208
+ message: z2.string().describe("Human-readable status message returned by IPQS."),
209
+ unsafe: z2.boolean().describe("Whether IPQS considers the URL unsafe."),
210
+ domain: z2.string().describe("The domain parsed from the submitted URL.").nullable().optional(),
211
+ root_domain: z2.string().describe("The root domain parsed from the submitted URL.").nullable().optional(),
212
+ ip_address: z2.string().describe("The IP address associated with the domain.").nullable().optional(),
213
+ server: z2.string().describe("The server header or hosting stack returned by IPQS.").nullable().optional(),
214
+ content_type: z2.string().describe("The content type returned by IPQS.").nullable().optional(),
215
+ status_code: z2.int().describe("The HTTP status code returned by IPQS.").nullable().optional(),
216
+ page_size: z2.int().describe("The page size returned by IPQS.").nullable().optional(),
217
+ domain_rank: z2.int().describe("The domain rank returned by IPQS.").nullable().optional(),
218
+ dns_valid: z2.boolean().describe("Whether DNS records for the domain are valid.").optional(),
219
+ parking: z2.boolean().describe("Whether IPQS considers the domain parked.").optional(),
220
+ spamming: z2.boolean().describe("Whether IPQS associates the URL with spam.").optional(),
221
+ malware: z2.boolean().describe("Whether IPQS associates the URL with malware.").optional(),
222
+ phishing: z2.boolean().describe("Whether IPQS associates the URL with phishing.").optional(),
223
+ suspicious: z2.boolean().describe("Whether IPQS considers the URL suspicious.").optional(),
224
+ adult: z2.boolean().describe("Whether IPQS classifies the URL as adult content.").optional(),
225
+ risk_score: z2.int().min(0).max(100).describe("The risk score returned by IPQS from 0 to 100.").optional(),
226
+ domain_age: z2.looseObject({
227
+ human: z2.string().describe("Human-readable domain age returned by IPQS.").nullable().optional(),
228
+ timestamp: z2.int().describe("Domain creation timestamp returned by IPQS.").nullable().optional(),
229
+ iso: z2.string().describe("Domain creation date returned by IPQS.").nullable().optional()
230
+ }).describe("Domain age details returned by IPQualityScore.").optional(),
231
+ category: z2.string().describe("The content category returned by IPQS.").nullable().optional(),
232
+ domain_trust: z2.string().describe("The domain trust classification returned by IPQS.").nullable().optional(),
233
+ request_id: z2.string().describe("The IPQS request identifier for support and tracing.").optional()
234
+ }).describe("URL reputation result returned by IPQualityScore.");
235
+ var ipqualityscoreActions = {
236
+ check_ip_reputation: {
237
+ description: "Check an IP address for proxy, VPN, Tor, bot, and abuse risk signals.",
238
+ effect: "read",
239
+ inputSchema: checkIpReputationInput,
240
+ outputSchema: z2.toJSONSchema(checkIpReputationOutput, { io: "output", unrepresentable: "any" })
241
+ },
242
+ validate_email: {
243
+ description: "Validate an email address and return deliverability and abuse risk signals.",
244
+ effect: "write",
245
+ inputSchema: validateEmailInput,
246
+ outputSchema: z2.toJSONSchema(validateEmailOutput, { io: "output", unrepresentable: "any" })
247
+ },
248
+ validate_phone: {
249
+ description: "Validate a phone number and return carrier, activity, and risk signals.",
250
+ effect: "write",
251
+ inputSchema: validatePhoneInput,
252
+ outputSchema: z2.toJSONSchema(validatePhoneOutput, { io: "output", unrepresentable: "any" })
253
+ },
254
+ scan_url: {
255
+ description: "Scan a URL or domain and return malware, phishing, and domain risk signals.",
256
+ effect: "write",
257
+ inputSchema: scanUrlInput,
258
+ outputSchema: z2.toJSONSchema(scanUrlOutput, { io: "output", unrepresentable: "any" })
259
+ }
260
+ };
261
+
262
+ // ../plugins/src/ipqualityscore/index.ts
263
+ function createIpqualityscorePlugin() {
264
+ return createProviderPlugin({
265
+ description: "IPQualityScore",
266
+ actions: ipqualityscoreActions,
267
+ handlers: {
268
+ check_ip_reputation: checkIpReputation,
269
+ validate_email: validateEmail,
270
+ validate_phone: validatePhone,
271
+ scan_url: scanUrl
272
+ }
273
+ });
274
+ }
275
+ var ipqualityscore_default = createIpqualityscorePlugin();
276
+ export {
277
+ createIpqualityscorePlugin,
278
+ ipqualityscore_default as default
279
+ };
@@ -1,16 +1,15 @@
1
1
  import {
2
2
  createAuthedClient
3
- } from "./chunk-XYBU3WZH.js";
4
- import "./chunk-E6JCVKW6.js";
3
+ } from "./chunk-RTW5VRTK.js";
4
+ import "./chunk-BNMLA2RC.js";
5
5
  import "./chunk-JXHMDBAY.js";
6
6
  import {
7
7
  createProviderPlugin,
8
8
  upstreamError
9
- } from "./chunk-ATK45BXV.js";
10
- import "./chunk-U7B6DS2O.js";
11
- import {
12
- external_exports
13
- } from "./chunk-UZM2RXZH.js";
9
+ } from "./chunk-X7ZUTKHR.js";
10
+ import "./chunk-7ISGFRC6.js";
11
+ import "./chunk-UY6ANCOY.js";
12
+ import "./chunk-HA4BGL6C.js";
14
13
  import "./chunk-U67V476Y.js";
15
14
 
16
15
  // ../plugins/src/jina_ai/api.ts
@@ -45,34 +44,35 @@ function rerankDocuments(input, ctx) {
45
44
  }
46
45
 
47
46
  // ../plugins/src/jina_ai/schema.ts
48
- var createEmbeddingsInput = external_exports.strictObject({
49
- model: external_exports.string().describe("The Jina AI embedding model identifier."),
50
- input: external_exports.array(external_exports.union([external_exports.string().describe("Text to embed."), external_exports.looseObject({}).describe("A JSON object returned by Jina AI.")]).describe("A text or multimodal embedding input.")).min(1).describe("The texts or multimodal inputs to embed."),
51
- encoding_format: external_exports.string().describe("The encoding format for returned embeddings.").optional(),
52
- dimensions: external_exports.int().describe("The requested embedding dimensionality.").optional(),
53
- normalized: external_exports.boolean().describe("Whether returned embeddings should be normalized.").optional()
47
+ import { z } from "zod/v4";
48
+ var createEmbeddingsInput = z.strictObject({
49
+ model: z.string().describe("The Jina AI embedding model identifier."),
50
+ input: z.array(z.union([z.string().describe("Text to embed."), z.looseObject({}).describe("A JSON object returned by Jina AI.")]).describe("A text or multimodal embedding input.")).min(1).describe("The texts or multimodal inputs to embed."),
51
+ encoding_format: z.string().describe("The encoding format for returned embeddings.").optional(),
52
+ dimensions: z.int().describe("The requested embedding dimensionality.").optional(),
53
+ normalized: z.boolean().describe("Whether returned embeddings should be normalized.").optional()
54
54
  }).describe("Input for generating embeddings with Jina AI.");
55
- var createEmbeddingsOutput = external_exports.looseObject({}).describe("A JSON object returned by Jina AI.");
56
- var rerankDocumentsInput = external_exports.strictObject({
57
- model: external_exports.string().describe("The Jina AI reranker model identifier."),
58
- query: external_exports.string().describe("The query used to rank documents."),
59
- documents: external_exports.array(external_exports.string().describe("A document to rank.")).min(1).describe("The documents to rank."),
60
- top_n: external_exports.int().describe("The maximum number of results to return.").optional(),
61
- return_documents: external_exports.boolean().describe("Whether to include document text in each result.").optional()
55
+ var createEmbeddingsOutput = z.looseObject({}).describe("A JSON object returned by Jina AI.");
56
+ var rerankDocumentsInput = z.strictObject({
57
+ model: z.string().describe("The Jina AI reranker model identifier."),
58
+ query: z.string().describe("The query used to rank documents."),
59
+ documents: z.array(z.string().describe("A document to rank.")).min(1).describe("The documents to rank."),
60
+ top_n: z.int().describe("The maximum number of results to return.").optional(),
61
+ return_documents: z.boolean().describe("Whether to include document text in each result.").optional()
62
62
  }).describe("Input for ranking documents by relevance with Jina AI.");
63
- var rerankDocumentsOutput = external_exports.looseObject({}).describe("A JSON object returned by Jina AI.");
63
+ var rerankDocumentsOutput = z.looseObject({}).describe("A JSON object returned by Jina AI.");
64
64
  var jinaAiActions = {
65
65
  create_embeddings: {
66
66
  description: "Create vector embeddings for text or multimodal inputs with Jina AI.",
67
67
  effect: "write",
68
68
  inputSchema: createEmbeddingsInput,
69
- outputSchema: external_exports.toJSONSchema(createEmbeddingsOutput, { io: "output", unrepresentable: "any" })
69
+ outputSchema: z.toJSONSchema(createEmbeddingsOutput, { io: "output", unrepresentable: "any" })
70
70
  },
71
71
  rerank_documents: {
72
72
  description: "Rank documents by relevance to a query with Jina AI.",
73
73
  effect: "write",
74
74
  inputSchema: rerankDocumentsInput,
75
- outputSchema: external_exports.toJSONSchema(rerankDocumentsOutput, { io: "output", unrepresentable: "any" })
75
+ outputSchema: z.toJSONSchema(rerankDocumentsOutput, { io: "output", unrepresentable: "any" })
76
76
  }
77
77
  };
78
78