@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.
- package/README.md +27 -0
- package/assets/open-connector/catalog/apps/assured_platform.json +218 -0
- package/assets/open-connector/catalog/apps/baixiao.json +1080 -0
- package/assets/open-connector/catalog/apps/benchmarkone.json +956 -0
- package/assets/open-connector/catalog/apps/bing_webmaster.json +3097 -0
- package/assets/open-connector/catalog/apps/buzzsprout.json +1979 -0
- package/assets/open-connector/catalog/apps/feishu.json +13 -19
- package/assets/open-connector/catalog/apps/feishu_app_bot.json +12 -19
- package/assets/open-connector/catalog/apps/jin10.json +1 -1
- package/assets/open-connector/catalog/apps/linkfox.json +836 -0
- package/assets/open-connector/catalog/apps/metatraderapi.json +1077 -0
- package/assets/open-connector/catalog/apps/mktindex.json +2411 -0
- package/assets/open-connector/catalog/apps/mojo_helpdesk.json +660 -0
- package/assets/open-connector/catalog/apps/mumble.json +446 -0
- package/assets/open-connector/catalog/apps/notion.json +112 -3
- package/assets/open-connector/catalog/apps/omise.json +438 -0
- package/assets/open-connector/catalog/apps/panjiva.json +2858 -0
- package/assets/open-connector/catalog/apps/papertrail.json +449 -0
- package/assets/open-connector/catalog/apps/peec.json +747 -0
- package/assets/open-connector/catalog/apps/polygon_io.json +5156 -584
- package/assets/open-connector/catalog/apps/quant_data.json +1928 -0
- package/assets/open-connector/catalog/apps/riddle_quiz_maker.json +621 -0
- package/assets/open-connector/catalog/apps/slack.json +327 -4
- package/assets/open-connector/catalog/apps/slackbot.json +280 -3
- package/assets/open-connector/catalog/apps/templatedocs.json +438 -0
- package/assets/open-connector/catalog/apps/terminus_app.json +510 -0
- package/assets/open-connector/catalog/apps/ticket_tailor.json +584 -0
- package/assets/open-connector/catalog/apps/tongdaxin.json +2186 -82
- package/assets/open-connector/catalog/apps/veremark.json +514 -0
- package/assets/open-connector/catalog/apps/walletap.json +549 -0
- package/assets/open-connector/catalog/apps/xiaohongshu_store.json +955 -39
- package/assets/open-connector/catalog/apps-index.json +1 -1
- package/package.json +5 -1
- package/src/connection-service.d.ts +2 -0
- package/src/connection-service.js +8 -1
- package/src/core/provider-id.d.ts +5 -0
- package/src/core/provider-id.js +12 -0
- package/src/oauth/oauth-credential-refresh-service.js +2 -0
- package/src/oauth/oauth-flow-service.js +2 -0
- package/src/providers/action-contracts.generated.d.ts +27 -7
- package/src/providers/assured_platform/executors.d.ts +4 -0
- package/src/providers/assured_platform/executors.js +18 -0
- package/src/providers/assured_platform/runtime.d.ts +7 -0
- package/src/providers/assured_platform/runtime.js +108 -0
- package/src/providers/baixiao/actions.d.ts +2 -0
- package/src/providers/baixiao/actions.js +377 -0
- package/src/providers/baixiao/executors.d.ts +4 -0
- package/src/providers/baixiao/executors.js +106 -0
- package/src/providers/benchmarkone/executors.d.ts +4 -0
- package/src/providers/benchmarkone/executors.js +26 -0
- package/src/providers/benchmarkone/runtime.d.ts +12 -0
- package/src/providers/benchmarkone/runtime.js +113 -0
- package/src/providers/bing_webmaster/actions.d.ts +2 -0
- package/src/providers/bing_webmaster/actions.js +113 -0
- package/src/providers/bing_webmaster/executors.d.ts +4 -0
- package/src/providers/bing_webmaster/executors.js +104 -0
- package/src/providers/bing_webmaster/management-actions.d.ts +2 -0
- package/src/providers/bing_webmaster/management-actions.js +241 -0
- package/src/providers/bing_webmaster/reporting-actions.d.ts +2 -0
- package/src/providers/bing_webmaster/reporting-actions.js +300 -0
- package/src/providers/bing_webmaster/schemas.d.ts +33 -0
- package/src/providers/bing_webmaster/schemas.js +313 -0
- package/src/providers/buzzsprout/executors.d.ts +4 -0
- package/src/providers/buzzsprout/executors.js +21 -0
- package/src/providers/buzzsprout/runtime.d.ts +12 -0
- package/src/providers/buzzsprout/runtime.js +237 -0
- package/src/providers/dropbox/executors.js +21 -3
- package/src/providers/feishu/shared/drive-actions.d.ts +1 -0
- package/src/providers/feishu/shared/drive-actions.js +13 -9
- package/src/providers/feishu/shared/drive-runtime.js +15 -3
- package/src/providers/feishu/shared/wiki-actions.js +4 -2
- package/src/providers/feishu_app_bot/scopes.js +1 -1
- package/src/providers/hithink_finance/runtime.js +39 -60
- package/src/providers/linkfox/actions.js +2 -0
- package/src/providers/linkfox/runtime.js +70 -1
- package/src/providers/linkfox/sif-actions.d.ts +10 -0
- package/src/providers/linkfox/sif-actions.js +193 -0
- package/src/providers/mcp-client.d.ts +1 -0
- package/src/providers/mcp-client.js +41 -27
- package/src/providers/metatraderapi/executors.d.ts +4 -0
- package/src/providers/metatraderapi/executors.js +18 -0
- package/src/providers/metatraderapi/runtime.d.ts +7 -0
- package/src/providers/metatraderapi/runtime.js +216 -0
- package/src/providers/mktindex/actions-mmi.d.ts +2 -0
- package/src/providers/mktindex/actions-mmi.js +510 -0
- package/src/providers/mktindex/actions.d.ts +2 -0
- package/src/providers/mktindex/actions.js +2 -0
- package/src/providers/mktindex/executors.d.ts +4 -0
- package/src/providers/mktindex/executors.js +27 -0
- package/src/providers/mktindex/request.d.ts +17 -0
- package/src/providers/mktindex/request.js +48 -0
- package/src/providers/mktindex/runtime.d.ts +9 -0
- package/src/providers/mktindex/runtime.js +492 -0
- package/src/providers/mojo_helpdesk/executors.d.ts +4 -0
- package/src/providers/mojo_helpdesk/executors.js +18 -0
- package/src/providers/mojo_helpdesk/runtime.d.ts +7 -0
- package/src/providers/mojo_helpdesk/runtime.js +173 -0
- package/src/providers/mumble/executors.d.ts +4 -0
- package/src/providers/mumble/executors.js +99 -0
- package/src/providers/notion/executors.d.ts +9 -0
- package/src/providers/notion/executors.js +161 -6
- package/src/providers/omise/executors.d.ts +4 -0
- package/src/providers/omise/executors.js +120 -0
- package/src/providers/panjiva/actions.d.ts +14 -0
- package/src/providers/panjiva/actions.js +389 -0
- package/src/providers/panjiva/executors.d.ts +4 -0
- package/src/providers/panjiva/executors.js +136 -0
- package/src/providers/papertrail/executors.d.ts +4 -0
- package/src/providers/papertrail/executors.js +15 -0
- package/src/providers/papertrail/runtime.d.ts +7 -0
- package/src/providers/papertrail/runtime.js +167 -0
- package/src/providers/peec/executors.d.ts +4 -0
- package/src/providers/peec/executors.js +15 -0
- package/src/providers/peec/runtime.d.ts +7 -0
- package/src/providers/peec/runtime.js +128 -0
- package/src/providers/polygon_io/actions.d.ts +2 -0
- package/src/providers/polygon_io/actions.js +282 -0
- package/src/providers/polygon_io/expanded-actions.d.ts +2 -0
- package/src/providers/polygon_io/expanded-actions.js +375 -0
- package/src/providers/polygon_io/expanded-runtime.d.ts +16 -0
- package/src/providers/polygon_io/expanded-runtime.js +277 -0
- package/src/providers/polygon_io/runtime.js +21 -2
- package/src/providers/quant_data/executors.d.ts +4 -0
- package/src/providers/quant_data/executors.js +15 -0
- package/src/providers/quant_data/runtime.d.ts +7 -0
- package/src/providers/quant_data/runtime.js +118 -0
- package/src/providers/registry.generated.js +20 -0
- package/src/providers/riddle_quiz_maker/executors.d.ts +4 -0
- package/src/providers/riddle_quiz_maker/executors.js +15 -0
- package/src/providers/riddle_quiz_maker/runtime.d.ts +7 -0
- package/src/providers/riddle_quiz_maker/runtime.js +145 -0
- package/src/providers/sellersprite_mcp/executors.js +2 -1
- package/src/providers/slack/actions.js +106 -3
- package/src/providers/slack/runtime.js +262 -38
- package/src/providers/slackbot/actions.js +1 -1
- package/src/providers/templatedocs/executors.d.ts +4 -0
- package/src/providers/templatedocs/executors.js +18 -0
- package/src/providers/templatedocs/runtime.d.ts +13 -0
- package/src/providers/templatedocs/runtime.js +151 -0
- package/src/providers/terminus_app/executors.d.ts +4 -0
- package/src/providers/terminus_app/executors.js +15 -0
- package/src/providers/terminus_app/runtime.d.ts +7 -0
- package/src/providers/terminus_app/runtime.js +172 -0
- package/src/providers/ticket_tailor/executors.d.ts +4 -0
- package/src/providers/ticket_tailor/executors.js +15 -0
- package/src/providers/ticket_tailor/runtime.d.ts +7 -0
- package/src/providers/ticket_tailor/runtime.js +152 -0
- package/src/providers/tongdaxin/actions.d.ts +1 -0
- package/src/providers/tongdaxin/actions.js +6 -3
- package/src/providers/tongdaxin/executors.js +55 -13
- package/src/providers/tongdaxin/named-action-output.d.ts +1 -0
- package/src/providers/tongdaxin/named-action-output.js +143 -0
- package/src/providers/tongdaxin/named-action-routing.d.ts +9 -0
- package/src/providers/tongdaxin/named-action-routing.js +417 -0
- package/src/providers/tongdaxin/named-actions.d.ts +2 -0
- package/src/providers/tongdaxin/named-actions.js +373 -0
- package/src/providers/twenty_crm/runtime.js +4 -2
- package/src/providers/veremark/executors.d.ts +4 -0
- package/src/providers/veremark/executors.js +129 -0
- package/src/providers/walletap/executors.d.ts +4 -0
- package/src/providers/walletap/executors.js +15 -0
- package/src/providers/walletap/runtime.d.ts +7 -0
- package/src/providers/walletap/runtime.js +147 -0
- package/src/providers/weixin_official_account/access-token.js +31 -7
- package/src/providers/weixin_store/access-token.js +33 -7
- package/src/providers/xiaohongshu_store/executors.js +152 -3
- package/src/server/api/openapi.js +3 -0
- package/src/server/connector-assets.d.ts +4 -0
- package/src/server/connector-assets.js +12 -0
- package/src/server/connector-build.d.ts +33 -0
- package/src/server/connector-build.js +73 -0
- package/src/server/connector-runtime.d.ts +1 -2
- package/src/server/connector-runtime.js +2 -8
- package/src/server/server-assets.d.ts +0 -28
- 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
|
-
|
|
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")
|