@oomol-lab/open-connector 1.6.2 → 1.6.4

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 (175) hide show
  1. package/README.md +27 -0
  2. package/assets/open-connector/catalog/apps/assured_platform.json +218 -0
  3. package/assets/open-connector/catalog/apps/baixiao.json +1080 -0
  4. package/assets/open-connector/catalog/apps/benchmarkone.json +956 -0
  5. package/assets/open-connector/catalog/apps/bing_webmaster.json +3097 -0
  6. package/assets/open-connector/catalog/apps/buzzsprout.json +1979 -0
  7. package/assets/open-connector/catalog/apps/feishu.json +13 -19
  8. package/assets/open-connector/catalog/apps/feishu_app_bot.json +12 -19
  9. package/assets/open-connector/catalog/apps/jin10.json +1 -1
  10. package/assets/open-connector/catalog/apps/linkfox.json +836 -0
  11. package/assets/open-connector/catalog/apps/metatraderapi.json +1077 -0
  12. package/assets/open-connector/catalog/apps/mktindex.json +2411 -0
  13. package/assets/open-connector/catalog/apps/mojo_helpdesk.json +660 -0
  14. package/assets/open-connector/catalog/apps/mumble.json +446 -0
  15. package/assets/open-connector/catalog/apps/notion.json +112 -3
  16. package/assets/open-connector/catalog/apps/omise.json +438 -0
  17. package/assets/open-connector/catalog/apps/panjiva.json +2858 -0
  18. package/assets/open-connector/catalog/apps/papertrail.json +449 -0
  19. package/assets/open-connector/catalog/apps/peec.json +747 -0
  20. package/assets/open-connector/catalog/apps/polygon_io.json +5156 -584
  21. package/assets/open-connector/catalog/apps/quant_data.json +1928 -0
  22. package/assets/open-connector/catalog/apps/riddle_quiz_maker.json +621 -0
  23. package/assets/open-connector/catalog/apps/slack.json +327 -4
  24. package/assets/open-connector/catalog/apps/slackbot.json +280 -3
  25. package/assets/open-connector/catalog/apps/templatedocs.json +438 -0
  26. package/assets/open-connector/catalog/apps/terminus_app.json +510 -0
  27. package/assets/open-connector/catalog/apps/ticket_tailor.json +584 -0
  28. package/assets/open-connector/catalog/apps/tongdaxin.json +2186 -82
  29. package/assets/open-connector/catalog/apps/veremark.json +514 -0
  30. package/assets/open-connector/catalog/apps/walletap.json +549 -0
  31. package/assets/open-connector/catalog/apps/xiaohongshu_store.json +955 -39
  32. package/assets/open-connector/catalog/apps-index.json +1 -1
  33. package/package.json +5 -1
  34. package/src/connection-service.d.ts +2 -0
  35. package/src/connection-service.js +8 -1
  36. package/src/core/provider-id.d.ts +5 -0
  37. package/src/core/provider-id.js +12 -0
  38. package/src/oauth/oauth-credential-refresh-service.js +2 -0
  39. package/src/oauth/oauth-flow-service.js +2 -0
  40. package/src/providers/action-contracts.generated.d.ts +27 -7
  41. package/src/providers/assured_platform/executors.d.ts +4 -0
  42. package/src/providers/assured_platform/executors.js +18 -0
  43. package/src/providers/assured_platform/runtime.d.ts +7 -0
  44. package/src/providers/assured_platform/runtime.js +108 -0
  45. package/src/providers/baixiao/actions.d.ts +2 -0
  46. package/src/providers/baixiao/actions.js +377 -0
  47. package/src/providers/baixiao/executors.d.ts +4 -0
  48. package/src/providers/baixiao/executors.js +106 -0
  49. package/src/providers/benchmarkone/executors.d.ts +4 -0
  50. package/src/providers/benchmarkone/executors.js +26 -0
  51. package/src/providers/benchmarkone/runtime.d.ts +12 -0
  52. package/src/providers/benchmarkone/runtime.js +113 -0
  53. package/src/providers/bing_webmaster/actions.d.ts +2 -0
  54. package/src/providers/bing_webmaster/actions.js +113 -0
  55. package/src/providers/bing_webmaster/executors.d.ts +4 -0
  56. package/src/providers/bing_webmaster/executors.js +104 -0
  57. package/src/providers/bing_webmaster/management-actions.d.ts +2 -0
  58. package/src/providers/bing_webmaster/management-actions.js +241 -0
  59. package/src/providers/bing_webmaster/reporting-actions.d.ts +2 -0
  60. package/src/providers/bing_webmaster/reporting-actions.js +300 -0
  61. package/src/providers/bing_webmaster/schemas.d.ts +33 -0
  62. package/src/providers/bing_webmaster/schemas.js +313 -0
  63. package/src/providers/buzzsprout/executors.d.ts +4 -0
  64. package/src/providers/buzzsprout/executors.js +21 -0
  65. package/src/providers/buzzsprout/runtime.d.ts +12 -0
  66. package/src/providers/buzzsprout/runtime.js +237 -0
  67. package/src/providers/dropbox/executors.js +21 -3
  68. package/src/providers/feishu/shared/drive-actions.d.ts +1 -0
  69. package/src/providers/feishu/shared/drive-actions.js +13 -9
  70. package/src/providers/feishu/shared/drive-runtime.js +15 -3
  71. package/src/providers/feishu/shared/wiki-actions.js +4 -2
  72. package/src/providers/feishu_app_bot/scopes.js +1 -1
  73. package/src/providers/hithink_finance/runtime.js +39 -60
  74. package/src/providers/linkfox/actions.js +2 -0
  75. package/src/providers/linkfox/runtime.js +70 -1
  76. package/src/providers/linkfox/sif-actions.d.ts +10 -0
  77. package/src/providers/linkfox/sif-actions.js +193 -0
  78. package/src/providers/mcp-client.d.ts +1 -0
  79. package/src/providers/mcp-client.js +41 -27
  80. package/src/providers/metatraderapi/executors.d.ts +4 -0
  81. package/src/providers/metatraderapi/executors.js +18 -0
  82. package/src/providers/metatraderapi/runtime.d.ts +7 -0
  83. package/src/providers/metatraderapi/runtime.js +216 -0
  84. package/src/providers/mktindex/actions-mmi.d.ts +2 -0
  85. package/src/providers/mktindex/actions-mmi.js +510 -0
  86. package/src/providers/mktindex/actions.d.ts +2 -0
  87. package/src/providers/mktindex/actions.js +2 -0
  88. package/src/providers/mktindex/executors.d.ts +4 -0
  89. package/src/providers/mktindex/executors.js +27 -0
  90. package/src/providers/mktindex/request.d.ts +17 -0
  91. package/src/providers/mktindex/request.js +48 -0
  92. package/src/providers/mktindex/runtime.d.ts +9 -0
  93. package/src/providers/mktindex/runtime.js +492 -0
  94. package/src/providers/mojo_helpdesk/executors.d.ts +4 -0
  95. package/src/providers/mojo_helpdesk/executors.js +18 -0
  96. package/src/providers/mojo_helpdesk/runtime.d.ts +7 -0
  97. package/src/providers/mojo_helpdesk/runtime.js +173 -0
  98. package/src/providers/mumble/executors.d.ts +4 -0
  99. package/src/providers/mumble/executors.js +99 -0
  100. package/src/providers/notion/executors.d.ts +9 -0
  101. package/src/providers/notion/executors.js +161 -6
  102. package/src/providers/omise/executors.d.ts +4 -0
  103. package/src/providers/omise/executors.js +120 -0
  104. package/src/providers/panjiva/actions.d.ts +14 -0
  105. package/src/providers/panjiva/actions.js +389 -0
  106. package/src/providers/panjiva/executors.d.ts +4 -0
  107. package/src/providers/panjiva/executors.js +136 -0
  108. package/src/providers/papertrail/executors.d.ts +4 -0
  109. package/src/providers/papertrail/executors.js +15 -0
  110. package/src/providers/papertrail/runtime.d.ts +7 -0
  111. package/src/providers/papertrail/runtime.js +167 -0
  112. package/src/providers/peec/executors.d.ts +4 -0
  113. package/src/providers/peec/executors.js +15 -0
  114. package/src/providers/peec/runtime.d.ts +7 -0
  115. package/src/providers/peec/runtime.js +128 -0
  116. package/src/providers/polygon_io/actions.d.ts +2 -0
  117. package/src/providers/polygon_io/actions.js +282 -0
  118. package/src/providers/polygon_io/expanded-actions.d.ts +2 -0
  119. package/src/providers/polygon_io/expanded-actions.js +375 -0
  120. package/src/providers/polygon_io/expanded-runtime.d.ts +16 -0
  121. package/src/providers/polygon_io/expanded-runtime.js +277 -0
  122. package/src/providers/polygon_io/runtime.js +21 -2
  123. package/src/providers/quant_data/executors.d.ts +4 -0
  124. package/src/providers/quant_data/executors.js +15 -0
  125. package/src/providers/quant_data/runtime.d.ts +7 -0
  126. package/src/providers/quant_data/runtime.js +118 -0
  127. package/src/providers/registry.generated.js +20 -0
  128. package/src/providers/riddle_quiz_maker/executors.d.ts +4 -0
  129. package/src/providers/riddle_quiz_maker/executors.js +15 -0
  130. package/src/providers/riddle_quiz_maker/runtime.d.ts +7 -0
  131. package/src/providers/riddle_quiz_maker/runtime.js +145 -0
  132. package/src/providers/sellersprite_mcp/executors.js +2 -1
  133. package/src/providers/slack/actions.js +106 -3
  134. package/src/providers/slack/runtime.js +262 -38
  135. package/src/providers/slackbot/actions.js +1 -1
  136. package/src/providers/templatedocs/executors.d.ts +4 -0
  137. package/src/providers/templatedocs/executors.js +18 -0
  138. package/src/providers/templatedocs/runtime.d.ts +13 -0
  139. package/src/providers/templatedocs/runtime.js +151 -0
  140. package/src/providers/terminus_app/executors.d.ts +4 -0
  141. package/src/providers/terminus_app/executors.js +15 -0
  142. package/src/providers/terminus_app/runtime.d.ts +7 -0
  143. package/src/providers/terminus_app/runtime.js +172 -0
  144. package/src/providers/ticket_tailor/executors.d.ts +4 -0
  145. package/src/providers/ticket_tailor/executors.js +15 -0
  146. package/src/providers/ticket_tailor/runtime.d.ts +7 -0
  147. package/src/providers/ticket_tailor/runtime.js +152 -0
  148. package/src/providers/tongdaxin/actions.d.ts +1 -0
  149. package/src/providers/tongdaxin/actions.js +6 -3
  150. package/src/providers/tongdaxin/executors.js +55 -13
  151. package/src/providers/tongdaxin/named-action-output.d.ts +1 -0
  152. package/src/providers/tongdaxin/named-action-output.js +143 -0
  153. package/src/providers/tongdaxin/named-action-routing.d.ts +9 -0
  154. package/src/providers/tongdaxin/named-action-routing.js +417 -0
  155. package/src/providers/tongdaxin/named-actions.d.ts +2 -0
  156. package/src/providers/tongdaxin/named-actions.js +373 -0
  157. package/src/providers/twenty_crm/runtime.js +4 -2
  158. package/src/providers/veremark/executors.d.ts +4 -0
  159. package/src/providers/veremark/executors.js +129 -0
  160. package/src/providers/walletap/executors.d.ts +4 -0
  161. package/src/providers/walletap/executors.js +15 -0
  162. package/src/providers/walletap/runtime.d.ts +7 -0
  163. package/src/providers/walletap/runtime.js +147 -0
  164. package/src/providers/weixin_official_account/access-token.js +31 -7
  165. package/src/providers/weixin_store/access-token.js +33 -7
  166. package/src/providers/xiaohongshu_store/executors.js +152 -3
  167. package/src/server/api/openapi.js +3 -0
  168. package/src/server/connector-assets.d.ts +4 -0
  169. package/src/server/connector-assets.js +12 -0
  170. package/src/server/connector-build.d.ts +33 -0
  171. package/src/server/connector-build.js +73 -0
  172. package/src/server/connector-runtime.d.ts +1 -2
  173. package/src/server/connector-runtime.js +2 -8
  174. package/src/server/server-assets.d.ts +0 -28
  175. package/src/server/server-assets.js +0 -50
@@ -1,8 +1,10 @@
1
1
  import { compactObject, optionalBoolean, optionalInteger, optionalNumber, optionalRecord, optionalString, requiredString, } from "../../core/cast.js";
2
- import { defineApiKeyProviderExecutors, ProviderRequestError, providerUserAgent, requiredInputString, } from "../provider-runtime.js";
2
+ import { defineApiKeyProviderExecutors, getProviderActionHandler, mapProviderActionHandlers, ProviderRequestError, providerUserAgent, requiredInputString, } from "../provider-runtime.js";
3
+ import { polygonIoActions } from "./actions.js";
4
+ import { executeExpandedPolygonIoAction, expandedPolygonIoActionNames } from "./expanded-runtime.js";
3
5
  const service = "polygon_io";
4
6
  export const polygonIoApiBaseUrl = "https://api.massive.com";
5
- export const polygonIoActionHandlers = {
7
+ const baseActionHandlers = {
6
8
  async list_tickers(input, context) {
7
9
  const response = optionalRecord(await requestPolygonIoJson(context, "/v3/reference/tickers", {
8
10
  ticker: optionalString(input.ticker),
@@ -85,6 +87,23 @@ export const polygonIoActionHandlers = {
85
87
  return normalizeMarketStatus(response);
86
88
  },
87
89
  };
90
+ export const polygonIoActionHandlers = mapProviderActionHandlers(service, polygonIoActions, (_action, name) => {
91
+ const baseHandler = getProviderActionHandler(baseActionHandlers, name);
92
+ if (baseHandler)
93
+ return baseHandler;
94
+ if (!expandedPolygonIoActionNames.has(name)) {
95
+ return async () => {
96
+ throw new ProviderRequestError(500, `polygon_io action is not implemented: ${name}`);
97
+ };
98
+ }
99
+ return (input, context) => executeExpandedPolygonIoAction({
100
+ actionName: name,
101
+ input,
102
+ apiKey: context.apiKey,
103
+ fetcher: context.fetcher,
104
+ requestJson: ({ path, query, phase }) => requestPolygonIoJson(context, path, query, phase),
105
+ });
106
+ });
88
107
  export const executors = defineApiKeyProviderExecutors(service, polygonIoActionHandlers);
89
108
  export async function validatePolygonIoCredential(input, fetcher) {
90
109
  const apiKey = requiredString(input.apiKey, "apiKey", (message) => new ProviderRequestError(401, message));
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const proxy: ProviderProxyExecutor;
4
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,15 @@
1
+ import { defineApiKeyProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
+ import { quantDataActionHandlers, validateQuantDataCredential } from "./runtime.js";
3
+ const service = "quant_data";
4
+ export const executors = defineApiKeyProviderExecutors(service, quantDataActionHandlers);
5
+ export const proxy = defineProviderProxy({
6
+ service,
7
+ baseUrl: "https://api.quantdata.us",
8
+ auth: { type: "api_key_authorization", prefix: "Bearer " },
9
+ skipDnsValidation: true,
10
+ });
11
+ export const credentialValidators = {
12
+ apiKey(input, { fetcher, signal }) {
13
+ return validateQuantDataCredential(input.apiKey, fetcher, signal);
14
+ },
15
+ };
@@ -0,0 +1,7 @@
1
+ import type { CredentialValidationResult } from "../../core/types.ts";
2
+ import type { ApiKeyProviderContext, ProviderActionHandlers, ProviderFetch } from "../provider-runtime.ts";
3
+ export declare const quantDataApiBaseUrl = "https://api.quantdata.us";
4
+ type QuantDataHandler = (input: Record<string, unknown>, context: ApiKeyProviderContext) => Promise<unknown>;
5
+ export declare const quantDataActionHandlers: ProviderActionHandlers<"quant_data", QuantDataHandler>;
6
+ export declare function validateQuantDataCredential(apiKey: string, fetcher: ProviderFetch, signal?: AbortSignal): Promise<CredentialValidationResult>;
7
+ export {};
@@ -0,0 +1,118 @@
1
+ import { looseArray, optionalRecord, optionalString } from "../../core/cast.js";
2
+ import { readProviderTextBody } from "../provider-runtime.js";
3
+ import { providerInputError, providerUserAgent, ProviderRequestError, requiredResponseRecord, runProviderRequest, } from "../provider-runtime.js";
4
+ export const quantDataApiBaseUrl = "https://api.quantdata.us";
5
+ const endpointByAction = {
6
+ get_gainers_losers: "/v1/options/tool/gainers-losers",
7
+ get_order_flow_consolidated: "/v1/options/tool/order-flow/consolidated",
8
+ get_exposure_by_strike: "/v1/options/tool/exposure-by-strike",
9
+ get_exposure_by_expiration: "/v1/options/tool/exposure-by-expiration",
10
+ get_net_drift: "/v1/options/tool/net-drift",
11
+ get_net_flow: "/v1/options/tool/net-flow",
12
+ get_iv_rank: "/v1/options/tool/iv-rank",
13
+ get_volatility_skew: "/v1/options/tool/volatility-skew",
14
+ get_dark_flow: "/v1/equities/tool/dark-flow",
15
+ get_dark_pool_levels: "/v1/equities/tool/dark-pool-levels",
16
+ get_equity_prints: "/v1/equities/tool/equity-prints",
17
+ get_news_articles: "/v1/news/tool/news-articles",
18
+ };
19
+ export const quantDataActionHandlers = Object.fromEntries(Object.entries(endpointByAction).map(([name, path]) => [
20
+ name,
21
+ (input, context) => {
22
+ validateInput(input);
23
+ return requestQuantDataJson({
24
+ path,
25
+ body: input,
26
+ apiKey: context.apiKey,
27
+ fetcher: context.fetcher,
28
+ signal: context.signal,
29
+ phase: "execute",
30
+ });
31
+ },
32
+ ]));
33
+ function validateInput(input) {
34
+ if (input.sessionDate !== undefined && input.timeRange !== undefined)
35
+ throw providerInputError("sessionDate and timeRange are mutually exclusive");
36
+ if (input.sessionDate !== undefined && input.snapshotTime !== undefined)
37
+ throw providerInputError("sessionDate and snapshotTime are mutually exclusive");
38
+ if (input.includes !== undefined && input.excludes !== undefined)
39
+ throw providerInputError("includes and excludes are mutually exclusive");
40
+ }
41
+ export async function validateQuantDataCredential(apiKey, fetcher, signal) {
42
+ await requestQuantDataJson({
43
+ path: endpointByAction.get_gainers_losers,
44
+ body: {},
45
+ apiKey,
46
+ fetcher,
47
+ signal,
48
+ phase: "validate",
49
+ });
50
+ return {
51
+ profile: { accountId: "quant-data", displayName: "Quant Data API Key" },
52
+ grantedScopes: [],
53
+ metadata: { apiBaseUrl: quantDataApiBaseUrl, validationEndpoint: endpointByAction.get_gainers_losers },
54
+ };
55
+ }
56
+ async function requestQuantDataJson(input) {
57
+ return runProviderRequest({ label: "Quant Data", signal: input.signal }, async (signal) => {
58
+ const response = await input.fetcher(`${quantDataApiBaseUrl}${input.path}`, {
59
+ method: "POST",
60
+ headers: {
61
+ accept: "application/json",
62
+ authorization: `Bearer ${input.apiKey}`,
63
+ "content-type": "application/json",
64
+ "user-agent": providerUserAgent,
65
+ },
66
+ body: JSON.stringify(input.body),
67
+ signal,
68
+ });
69
+ const payload = await readQuantDataPayload(response);
70
+ if (!response.ok)
71
+ throw createQuantDataError(response.status, payload, input.phase);
72
+ return requiredResponseRecord(payload, "Quant Data response");
73
+ });
74
+ }
75
+ async function readQuantDataPayload(response) {
76
+ const text = await readProviderTextBody(response, "Quant Data response");
77
+ if (!text.trim())
78
+ return null;
79
+ try {
80
+ return JSON.parse(text);
81
+ }
82
+ catch {
83
+ throw new ProviderRequestError(502, "Quant Data returned invalid JSON");
84
+ }
85
+ }
86
+ function createQuantDataError(status, payload, phase) {
87
+ const problem = optionalRecord(payload);
88
+ const problemType = optionalString(problem?.type);
89
+ const message = extractQuantDataErrorMessage(payload, status);
90
+ if (status === 429 || problemType === "https://quantdata.us/errors/rate-limit-exceeded")
91
+ return new ProviderRequestError(429, message, payload);
92
+ if (phase === "validate" && 400 <= status && status < 500)
93
+ return new ProviderRequestError(400, message, payload);
94
+ if (problemType === "https://quantdata.us/errors/authentication")
95
+ return new ProviderRequestError(401, message, payload);
96
+ if (problemType === "https://quantdata.us/errors/validation" ||
97
+ problemType === "https://quantdata.us/errors/bad-request")
98
+ return new ProviderRequestError(400, message, payload);
99
+ return new ProviderRequestError(status || 502, message, payload);
100
+ }
101
+ function extractQuantDataErrorMessage(payload, status) {
102
+ const problem = optionalRecord(payload);
103
+ const detail = optionalString(problem?.detail);
104
+ const validationMessages = looseArray(problem?.errors)
105
+ .map((entry) => {
106
+ const error = optionalRecord(entry);
107
+ const field = optionalString(error?.field);
108
+ const message = optionalString(error?.message);
109
+ return message ? (field ? `${field}: ${message}` : message) : undefined;
110
+ })
111
+ .filter((message) => message !== undefined);
112
+ if (validationMessages.length)
113
+ return validationMessages.join("; ");
114
+ const agreementUrl = optionalString(problem?.agreementUrl);
115
+ if (detail && agreementUrl && !detail.includes(agreementUrl))
116
+ return `${detail} ${agreementUrl}`;
117
+ return detail ?? optionalString(problem?.title) ?? `Quant Data request failed with status ${status}`;
118
+ }
@@ -100,6 +100,7 @@ export const executorModules = {
100
100
  ashby: () => import("./ashby/executors.js"),
101
101
  asin_data_api: () => import("./asin_data_api/executors.js"),
102
102
  assemblyai: () => import("./assemblyai/executors.js"),
103
+ assured_platform: () => import("./assured_platform/executors.js"),
103
104
  atlas_so: () => import("./atlas_so/executors.js"),
104
105
  attention: () => import("./attention/executors.js"),
105
106
  attio: () => import("./attio/executors.js"),
@@ -117,6 +118,7 @@ export const executorModules = {
117
118
  ayrshare: () => import("./ayrshare/executors.js"),
118
119
  baidu_maps: () => import("./baidu_maps/executors.js"),
119
120
  baidu_netdisk: () => import("./baidu_netdisk/executors.js"),
121
+ baixiao: () => import("./baixiao/executors.js"),
120
122
  balldontlie_worldcup: () => import("./balldontlie_worldcup/executors.js"),
121
123
  bamboohr: () => import("./bamboohr/executors.js"),
122
124
  bannerbear: () => import("./bannerbear/executors.js"),
@@ -132,6 +134,7 @@ export const executorModules = {
132
134
  beehiiv: () => import("./beehiiv/executors.js"),
133
135
  beeminder: () => import("./beeminder/executors.js"),
134
136
  benchmark_email: () => import("./benchmark_email/executors.js"),
137
+ benchmarkone: () => import("./benchmarkone/executors.js"),
135
138
  benzinga: () => import("./benzinga/executors.js"),
136
139
  bestbuy: () => import("./bestbuy/executors.js"),
137
140
  better_proposals: () => import("./better_proposals/executors.js"),
@@ -143,6 +146,7 @@ export const executorModules = {
143
146
  bigmailer: () => import("./bigmailer/executors.js"),
144
147
  bigml: () => import("./bigml/executors.js"),
145
148
  bigpicture_io: () => import("./bigpicture_io/executors.js"),
149
+ bing_webmaster: () => import("./bing_webmaster/executors.js"),
146
150
  biorxiv_medrxiv: () => import("./biorxiv_medrxiv/executors.js"),
147
151
  bird: () => import("./bird/executors.js"),
148
152
  bitbucket: () => import("./bitbucket/executors.js"),
@@ -193,6 +197,7 @@ export const executorModules = {
193
197
  bunnycdn: () => import("./bunnycdn/executors.js"),
194
198
  businessmap: () => import("./businessmap/executors.js"),
195
199
  buttondown: () => import("./buttondown/executors.js"),
200
+ buzzsprout: () => import("./buzzsprout/executors.js"),
196
201
  byteforms: () => import("./byteforms/executors.js"),
197
202
  cal: () => import("./cal/executors.js"),
198
203
  calendarific: () => import("./calendarific/executors.js"),
@@ -832,6 +837,7 @@ export const executorModules = {
832
837
  metabase: () => import("./metabase/executors.js"),
833
838
  metaso: () => import("./metaso/executors.js"),
834
839
  metatextai: () => import("./metatextai/executors.js"),
840
+ metatraderapi: () => import("./metatraderapi/executors.js"),
835
841
  metronome: () => import("./metronome/executors.js"),
836
842
  mezmo: () => import("./mezmo/executors.js"),
837
843
  microsoft_clarity: () => import("./microsoft_clarity/executors.js"),
@@ -849,11 +855,13 @@ export const executorModules = {
849
855
  mistral_ai: () => import("./mistral_ai/executors.js"),
850
856
  mixmax: () => import("./mixmax/executors.js"),
851
857
  mixpanel: () => import("./mixpanel/executors.js"),
858
+ mktindex: () => import("./mktindex/executors.js"),
852
859
  mobile_text_alerts: () => import("./mobile_text_alerts/executors.js"),
853
860
  mocean: () => import("./mocean/executors.js"),
854
861
  moco: () => import("./moco/executors.js"),
855
862
  modjo_ai: () => import("./modjo_ai/executors.js"),
856
863
  moesif: () => import("./moesif/executors.js"),
864
+ mojo_helpdesk: () => import("./mojo_helpdesk/executors.js"),
857
865
  momentum_io: () => import("./momentum_io/executors.js"),
858
866
  monday: () => import("./monday/executors.js"),
859
867
  mongo_db_atlas_administration: () => import("./mongo_db_atlas_administration/executors.js"),
@@ -868,6 +876,7 @@ export const executorModules = {
868
876
  moxie: () => import("./moxie/executors.js"),
869
877
  mqtt: () => import("./mqtt/executors.js"),
870
878
  msg91: () => import("./msg91/executors.js"),
879
+ mumble: () => import("./mumble/executors.js"),
871
880
  mux: () => import("./mux/executors.js"),
872
881
  mx: () => import("./mx/executors.js"),
873
882
  mx_toolbox: () => import("./mx_toolbox/executors.js"),
@@ -918,6 +927,7 @@ export const executorModules = {
918
927
  octopus_deploy: () => import("./octopus_deploy/executors.js"),
919
928
  oksign: () => import("./oksign/executors.js"),
920
929
  okta: () => import("./okta/executors.js"),
930
+ omise: () => import("./omise/executors.js"),
921
931
  omnisend: () => import("./omnisend/executors.js"),
922
932
  oncehub: () => import("./oncehub/executors.js"),
923
933
  one_drive: () => import("./one_drive/executors.js"),
@@ -963,8 +973,10 @@ export const executorModules = {
963
973
  paddle: () => import("./paddle/executors.js"),
964
974
  pagerduty: () => import("./pagerduty/executors.js"),
965
975
  pandadoc: () => import("./pandadoc/executors.js"),
976
+ panjiva: () => import("./panjiva/executors.js"),
966
977
  paperform: () => import("./paperform/executors.js"),
967
978
  paperless_ngx: () => import("./paperless_ngx/executors.js"),
979
+ papertrail: () => import("./papertrail/executors.js"),
968
980
  paradym: () => import("./paradym/executors.js"),
969
981
  parallel: () => import("./parallel/executors.js"),
970
982
  parma: () => import("./parma/executors.js"),
@@ -985,6 +997,7 @@ export const executorModules = {
985
997
  pdf_co: () => import("./pdf_co/executors.js"),
986
998
  pdfless: () => import("./pdfless/executors.js"),
987
999
  pdfmonkey: () => import("./pdfmonkey/executors.js"),
1000
+ peec: () => import("./peec/executors.js"),
988
1001
  pendo: () => import("./pendo/executors.js"),
989
1002
  peopledatalabs: () => import("./peopledatalabs/executors.js"),
990
1003
  perdoo: () => import("./perdoo/executors.js"),
@@ -1067,6 +1080,7 @@ export const executorModules = {
1067
1080
  qlty: () => import("./qlty/executors.js"),
1068
1081
  qq_mail: () => import("./qq_mail/executors.js"),
1069
1082
  quaderno: () => import("./quaderno/executors.js"),
1083
+ quant_data: () => import("./quant_data/executors.js"),
1070
1084
  quentn: () => import("./quentn/executors.js"),
1071
1085
  quickbase: () => import("./quickbase/executors.js"),
1072
1086
  quickchart: () => import("./quickchart/executors.js"),
@@ -1114,6 +1128,7 @@ export const executorModules = {
1114
1128
  revenuecat: () => import("./revenuecat/executors.js"),
1115
1129
  reversecontact: () => import("./reversecontact/executors.js"),
1116
1130
  rewiser: () => import("./rewiser/executors.js"),
1131
+ riddle_quiz_maker: () => import("./riddle_quiz_maker/executors.js"),
1117
1132
  ringba: () => import("./ringba/executors.js"),
1118
1133
  ringg_ai: () => import("./ringg_ai/executors.js"),
1119
1134
  ringover: () => import("./ringover/executors.js"),
@@ -1309,9 +1324,11 @@ export const executorModules = {
1309
1324
  telnyx: () => import("./telnyx/executors.js"),
1310
1325
  teltel: () => import("./teltel/executors.js"),
1311
1326
  templated: () => import("./templated/executors.js"),
1327
+ templatedocs: () => import("./templatedocs/executors.js"),
1312
1328
  templatefox: () => import("./templatefox/executors.js"),
1313
1329
  tencent_docs: () => import("./tencent_docs/executors.js"),
1314
1330
  tencent_maps: () => import("./tencent_maps/executors.js"),
1331
+ terminus_app: () => import("./terminus_app/executors.js"),
1315
1332
  terraform: () => import("./terraform/executors.js"),
1316
1333
  textcortex: () => import("./textcortex/executors.js"),
1317
1334
  textit: () => import("./textit/executors.js"),
@@ -1329,6 +1346,7 @@ export const executorModules = {
1329
1346
  tianyancha: () => import("./tianyancha/executors.js"),
1330
1347
  tick: () => import("./tick/executors.js"),
1331
1348
  ticket_source: () => import("./ticket_source/executors.js"),
1349
+ ticket_tailor: () => import("./ticket_tailor/executors.js"),
1332
1350
  ticketmaster: () => import("./ticketmaster/executors.js"),
1333
1351
  ticktick: () => import("./ticktick/executors.js"),
1334
1352
  tidb: () => import("./tidb/executors.js"),
@@ -1410,6 +1428,7 @@ export const executorModules = {
1410
1428
  venafitlsprotectcloud: () => import("./venafitlsprotectcloud/executors.js"),
1411
1429
  venafitlsprotectdatacenter: () => import("./venafitlsprotectdatacenter/executors.js"),
1412
1430
  vercel: () => import("./vercel/executors.js"),
1431
+ veremark: () => import("./veremark/executors.js"),
1413
1432
  verifiedemail: () => import("./verifiedemail/executors.js"),
1414
1433
  veriphone: () => import("./veriphone/executors.js"),
1415
1434
  vestaboard: () => import("./vestaboard/executors.js"),
@@ -1431,6 +1450,7 @@ export const executorModules = {
1431
1450
  waiverfile: () => import("./waiverfile/executors.js"),
1432
1451
  waiverforever: () => import("./waiverforever/executors.js"),
1433
1452
  wakatime: () => import("./wakatime/executors.js"),
1453
+ walletap: () => import("./walletap/executors.js"),
1434
1454
  walmart_marketplace: () => import("./walmart_marketplace/executors.js"),
1435
1455
  wandb: () => import("./wandb/executors.js"),
1436
1456
  wangdian: () => import("./wangdian/executors.js"),
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const proxy: ProviderProxyExecutor;
4
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,15 @@
1
+ import { defineApiKeyProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
+ import { riddleQuizMakerActionHandlers, validateRiddleQuizMakerCredential } from "./runtime.js";
3
+ const service = "riddle_quiz_maker";
4
+ export const executors = defineApiKeyProviderExecutors(service, riddleQuizMakerActionHandlers);
5
+ export const proxy = defineProviderProxy({
6
+ service,
7
+ baseUrl: "https://www.riddle.com/creator/api/v3/",
8
+ auth: { type: "api_key_authorization", prefix: "Bearer " },
9
+ skipDnsValidation: true,
10
+ });
11
+ export const credentialValidators = {
12
+ apiKey(input, { fetcher, signal }) {
13
+ return validateRiddleQuizMakerCredential(input.apiKey, fetcher, signal);
14
+ },
15
+ };
@@ -0,0 +1,7 @@
1
+ import type { CredentialValidationResult } from "../../core/types.ts";
2
+ import type { ApiKeyProviderContext, ProviderActionHandlers, ProviderFetch } from "../provider-runtime.ts";
3
+ export declare const riddleQuizMakerApiBaseUrl = "https://www.riddle.com/creator/api/v3/";
4
+ type Handler = (input: Record<string, unknown>, context: ApiKeyProviderContext) => Promise<unknown>;
5
+ export declare const riddleQuizMakerActionHandlers: ProviderActionHandlers<"riddle_quiz_maker", Handler>;
6
+ export declare function validateRiddleQuizMakerCredential(apiKey: string, fetcher: ProviderFetch, signal?: AbortSignal): Promise<CredentialValidationResult>;
7
+ export {};
@@ -0,0 +1,145 @@
1
+ import { compactObject, looseArray, optionalRecord, optionalString } from "../../core/cast.js";
2
+ import { readProviderTextBody } from "../provider-runtime.js";
3
+ import { providerInputError, providerUserAgent, ProviderRequestError, requiredInputString, runProviderRequest, } from "../provider-runtime.js";
4
+ export const riddleQuizMakerApiBaseUrl = "https://www.riddle.com/creator/api/v3/";
5
+ export const riddleQuizMakerActionHandlers = {
6
+ async list_riddles(input, context) {
7
+ const envelope = await requestRiddle({ path: "riddle/list", method: "POST", body: compactObject(input) }, context);
8
+ return { riddles: looseArray(envelope.data), pagination: optionalRecord(envelope.pagination) ?? null };
9
+ },
10
+ async get_riddle(input, context) {
11
+ return {
12
+ riddle: await requestObject(`riddle/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}`, context),
13
+ };
14
+ },
15
+ async rename_riddle(input, context) {
16
+ return {
17
+ riddle: await requestObject(`riddle/rename/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}`, context, { title: requiredInputString(input.title, "title") }),
18
+ };
19
+ },
20
+ async publish_riddle(input, context) {
21
+ return {
22
+ riddle: await requestObject(`riddle/publish/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}`, context, undefined, "POST"),
23
+ };
24
+ },
25
+ async unpublish_riddle(input, context) {
26
+ return {
27
+ riddle: await requestObject(`riddle/unpublish/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}`, context, undefined, "POST"),
28
+ };
29
+ },
30
+ async get_embed_code(input, context) {
31
+ const envelope = await requestRiddle({ path: `riddle/embed-code/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}` }, context);
32
+ const embedCode = optionalString(envelope.data);
33
+ if (embedCode === undefined)
34
+ throw new ProviderRequestError(502, "Riddle embed-code response did not include a string data value");
35
+ return { embedCode };
36
+ },
37
+ async list_projects(input, context) {
38
+ const envelope = await requestRiddle({ path: "project/list", query: compactObject({ page: input.page, pageSize: input.pageSize }) }, context);
39
+ const data = optionalRecord(envelope.data);
40
+ return {
41
+ projects: Array.isArray(envelope.data) ? envelope.data : looseArray(data?.items ?? data?.projects),
42
+ pagination: optionalRecord(envelope.pagination) ?? null,
43
+ };
44
+ },
45
+ async get_project(input, context) {
46
+ return { project: await requestObject(`project/${encodeURIComponent(String(input.projectId))}`, context) };
47
+ },
48
+ async list_tags(input, context) {
49
+ const envelope = await requestRiddle({ path: "tag/list", method: "POST", body: compactObject({ project: input.project }) }, context);
50
+ return { tags: looseArray(envelope.data) };
51
+ },
52
+ async list_riddle_tags(input, context) {
53
+ const envelope = await requestRiddle({ path: `tag/riddle/list/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}` }, context);
54
+ return { tags: looseArray(envelope.data) };
55
+ },
56
+ async add_riddle_tag(input, context) {
57
+ if (input.id !== undefined && input.name !== undefined)
58
+ throw providerInputError("provide either id or name, not both");
59
+ return {
60
+ riddle: await requestObject(`tag/riddle/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}`, context, compactObject({ id: input.id, name: input.name })),
61
+ };
62
+ },
63
+ async remove_riddle_tag(input, context) {
64
+ const envelope = await requestRiddle({
65
+ path: `tag/riddle/${encodeURIComponent(requiredInputString(input.riddleUuid, "riddleUuid"))}/${encodeURIComponent(String(input.tagId))}`,
66
+ method: "DELETE",
67
+ }, context);
68
+ return { riddle: requireDataObject(envelope.data, "Riddle remove-tag response") };
69
+ },
70
+ };
71
+ export async function validateRiddleQuizMakerCredential(apiKey, fetcher, signal) {
72
+ const envelope = await requestRiddle({ path: "project/list", query: { page: 1, pageSize: 1 } }, { apiKey, fetcher, signal }, "validate");
73
+ const projects = Array.isArray(envelope.data) ? envelope.data : looseArray(optionalRecord(envelope.data)?.items);
74
+ const first = optionalRecord(projects[0]);
75
+ return {
76
+ profile: {
77
+ accountId: "api_key",
78
+ displayName: optionalString(first?.name) ?? optionalString(first?.title) ?? "Riddle API Key",
79
+ },
80
+ grantedScopes: [],
81
+ metadata: { apiBaseUrl: riddleQuizMakerApiBaseUrl, validationEndpoint: "/project/list" },
82
+ };
83
+ }
84
+ async function requestObject(path, context, body, method) {
85
+ const envelope = await requestRiddle({ path, method: method ?? (body === undefined ? "GET" : "POST"), body }, context);
86
+ return requireDataObject(envelope.data, "Riddle response");
87
+ }
88
+ async function requestRiddle(request, context, phase = "execute") {
89
+ return runProviderRequest({ label: "Riddle", signal: context.signal }, async (signal) => {
90
+ const url = new URL(request.path, riddleQuizMakerApiBaseUrl);
91
+ for (const [key, value] of Object.entries(request.query ?? {}))
92
+ if (value !== undefined)
93
+ url.searchParams.set(key, String(value));
94
+ const hasBody = request.body !== undefined;
95
+ const headers = new Headers({
96
+ accept: "application/json",
97
+ authorization: `Bearer ${context.apiKey}`,
98
+ "user-agent": providerUserAgent,
99
+ });
100
+ if (hasBody)
101
+ headers.set("content-type", "application/json");
102
+ const response = await context.fetcher(url, {
103
+ method: request.method ?? "GET",
104
+ headers,
105
+ body: hasBody ? JSON.stringify(request.body) : undefined,
106
+ signal,
107
+ });
108
+ const payload = await readJson(response);
109
+ const envelope = optionalRecord(payload);
110
+ if (!response.ok || envelope?.success === false)
111
+ throw createError(response, envelope, phase);
112
+ if (!envelope)
113
+ throw new ProviderRequestError(502, "Riddle returned an invalid response envelope");
114
+ return envelope;
115
+ });
116
+ }
117
+ async function readJson(response) {
118
+ const text = await readProviderTextBody(response, "Riddle Quiz Maker response");
119
+ if (!text.trim())
120
+ return null;
121
+ try {
122
+ return JSON.parse(text);
123
+ }
124
+ catch {
125
+ throw new ProviderRequestError(502, "Riddle returned invalid JSON");
126
+ }
127
+ }
128
+ function createError(response, envelope, phase) {
129
+ const message = optionalString(envelope?.message) ??
130
+ optionalString(envelope?.error) ??
131
+ `Riddle request failed with status ${response.status}`;
132
+ if (response.status === 429 || envelope?.error === "API_RATE_LIMIT_EXCEEDED")
133
+ return new ProviderRequestError(429, message, envelope);
134
+ if (phase === "validate" && 400 <= response.status && response.status < 500)
135
+ return new ProviderRequestError(400, message, envelope);
136
+ if (response.status === 400 || response.status === 404 || response.status === 422)
137
+ return new ProviderRequestError(400, message, envelope);
138
+ return new ProviderRequestError(response.status || 502, message, envelope);
139
+ }
140
+ function requireDataObject(value, label) {
141
+ const object = optionalRecord(value);
142
+ if (!object)
143
+ throw new ProviderRequestError(502, `${label} data must be an object`);
144
+ return object;
145
+ }
@@ -87,8 +87,9 @@ function normalize(result) {
87
87
  const message = envelope.message ?? `SellerSprite MCP tool failed with ${envelope.code}`;
88
88
  if (["ERROR_UNAUTHORIZED", "ERROR_SECRET_KEY", "ERROR_SECRET_KEY_INVALID", "ERROR_SECRET_KEY_OVERDUE"].includes(envelope.code))
89
89
  throw new ProviderRequestError(401, message, envelope);
90
- if (envelope.code === "ERROR_VISIT_MAX")
90
+ if (envelope.code === "ERROR_VISIT_MAX" || envelope.code === "ERROR_MAXIMUM_ACCESS_PER_MINUTE") {
91
91
  throw new ProviderRequestError(429, message, envelope);
92
+ }
92
93
  if (envelope.code === "ERROR_AUTH_ERROR")
93
94
  throw new ProviderRequestError(403, message, envelope);
94
95
  if (envelope.code === "ERROR_PARAM")