synthos 0.7.2 → 0.8.0
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 +215 -65
- package/default-pages/application.json +1 -0
- package/default-pages/json_tools.json +1 -1
- package/default-pages/oregon_trail.html +321 -0
- package/default-pages/oregon_trail.json +12 -0
- package/default-pages/sidebar_page.json +1 -0
- package/default-pages/solar_explorer.html +10 -18
- package/default-pages/solar_explorer.json +2 -2
- package/default-pages/two-panel_page.json +1 -0
- package/default-pages/us_map.html +192 -0
- package/default-pages/us_map.json +12 -0
- package/default-pages/us_map_1850.html +325 -0
- package/default-pages/us_map_1850.json +12 -0
- package/default-pages/western_cities_1850.html +526 -0
- package/default-pages/western_cities_1850.json +12 -0
- package/default-themes/{nebula-dawn.css → nebula-dawn.v2.css} +24 -0
- package/default-themes/{nebula-dusk.css → nebula-dusk.v2.css} +24 -0
- package/dist/agents/a2a/a2aProvider.d.ts +3 -0
- package/dist/agents/a2a/a2aProvider.d.ts.map +1 -0
- package/dist/agents/a2a/a2aProvider.js +126 -0
- package/dist/agents/a2a/a2aProvider.js.map +1 -0
- package/dist/agents/discovery.d.ts +30 -0
- package/dist/agents/discovery.d.ts.map +1 -0
- package/dist/agents/discovery.js +52 -0
- package/dist/agents/discovery.js.map +1 -0
- package/dist/agents/index.d.ts +7 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +19 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/openclaw/gatewayManager.d.ts +113 -0
- package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -0
- package/dist/agents/openclaw/gatewayManager.js +470 -0
- package/dist/agents/openclaw/gatewayManager.js.map +1 -0
- package/dist/agents/openclaw/openclawProvider.d.ts +3 -0
- package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -0
- package/dist/agents/openclaw/openclawProvider.js +239 -0
- package/dist/agents/openclaw/openclawProvider.js.map +1 -0
- package/dist/agents/openclaw/sshTunnelManager.d.ts +23 -0
- package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -0
- package/dist/agents/openclaw/sshTunnelManager.js +340 -0
- package/dist/agents/openclaw/sshTunnelManager.js.map +1 -0
- package/dist/agents/types.d.ts +64 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +6 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/connectors/airtable/connector.json +27 -0
- package/dist/connectors/alpha-vantage/connector.json +26 -0
- package/dist/connectors/brave-search/connector.json +26 -0
- package/dist/connectors/cloudinary/connector.json +27 -0
- package/dist/connectors/deepl/connector.json +28 -0
- package/dist/connectors/elevenlabs/connector.json +30 -0
- package/dist/connectors/giphy/connector.json +27 -0
- package/dist/connectors/github/connector.json +29 -0
- package/dist/connectors/huggingface/connector.json +27 -0
- package/dist/connectors/imgur/connector.json +29 -0
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/instagram/connector.json +43 -0
- package/dist/connectors/jira/connector.json +28 -0
- package/dist/connectors/mapbox/connector.json +26 -0
- package/dist/connectors/nasa/connector.json +27 -0
- package/dist/connectors/newsapi/connector.json +27 -0
- package/dist/connectors/notion/connector.json +28 -0
- package/dist/connectors/open-exchange-rates/connector.json +27 -0
- package/dist/connectors/openweathermap/connector.json +26 -0
- package/dist/connectors/pexels/connector.json +27 -0
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +42 -96
- package/dist/connectors/registry.js.map +1 -1
- package/dist/connectors/resend/connector.json +29 -0
- package/dist/connectors/rss2json/connector.json +27 -0
- package/dist/connectors/sendgrid/connector.json +27 -0
- package/dist/connectors/spoonacular/connector.json +28 -0
- package/dist/connectors/stability-ai/connector.json +27 -0
- package/dist/connectors/twilio/connector.json +28 -0
- package/dist/connectors/types.d.ts +23 -0
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/connectors/unsplash/connector.json +27 -0
- package/dist/connectors/wolfram-alpha/connector.json +26 -0
- package/dist/connectors/youtube-data/connector.json +30 -0
- package/dist/files.d.ts +1 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +16 -1
- package/dist/files.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +28 -0
- package/dist/init.js.map +1 -1
- package/dist/migrations.d.ts +3 -2
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +122 -138
- package/dist/migrations.js.map +1 -1
- package/dist/models/anthropic.d.ts +22 -0
- package/dist/models/anthropic.d.ts.map +1 -0
- package/dist/models/anthropic.js +76 -0
- package/dist/models/anthropic.js.map +1 -0
- package/dist/models/chainOfThought.d.ts +12 -0
- package/dist/models/chainOfThought.d.ts.map +1 -0
- package/dist/models/chainOfThought.js +45 -0
- package/dist/models/chainOfThought.js.map +1 -0
- package/dist/models/fireworksai.d.ts +30 -0
- package/dist/models/fireworksai.d.ts.map +1 -0
- package/dist/models/fireworksai.js +133 -0
- package/dist/models/fireworksai.js.map +1 -0
- package/dist/models/index.d.ts +7 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +19 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/logCompletePrompt.d.ts +3 -0
- package/dist/models/logCompletePrompt.d.ts.map +1 -0
- package/dist/models/logCompletePrompt.js +23 -0
- package/dist/models/logCompletePrompt.js.map +1 -0
- package/dist/models/openai.d.ts +24 -0
- package/dist/models/openai.d.ts.map +1 -0
- package/dist/models/openai.js +80 -0
- package/dist/models/openai.js.map +1 -0
- package/dist/models/providers.d.ts +1 -0
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/providers.js +12 -4
- package/dist/models/providers.js.map +1 -1
- package/dist/models/types.d.ts +34 -2
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js +16 -0
- package/dist/models/types.js.map +1 -1
- package/dist/models/utils.d.ts +6 -0
- package/dist/models/utils.d.ts.map +1 -0
- package/dist/models/utils.js +21 -0
- package/dist/models/utils.js.map +1 -0
- package/dist/scripts.d.ts +2 -1
- package/dist/scripts.d.ts.map +1 -1
- package/dist/scripts.js +4 -3
- package/dist/scripts.js.map +1 -1
- package/dist/service/createCompletePrompt.d.ts +1 -1
- package/dist/service/createCompletePrompt.d.ts.map +1 -1
- package/dist/service/createCompletePrompt.js +9 -6
- package/dist/service/createCompletePrompt.js.map +1 -1
- package/dist/service/generateImage.d.ts +1 -1
- package/dist/service/generateImage.d.ts.map +1 -1
- package/dist/service/generateImage.js +3 -3
- package/dist/service/generateImage.js.map +1 -1
- package/dist/service/server.d.ts.map +1 -1
- package/dist/service/server.js +3 -0
- package/dist/service/server.js.map +1 -1
- package/dist/service/transformPage.d.ts +4 -2
- package/dist/service/transformPage.d.ts.map +1 -1
- package/dist/service/transformPage.js +74 -6
- package/dist/service/transformPage.js.map +1 -1
- package/dist/service/useAgentRoutes.d.ts +4 -0
- package/dist/service/useAgentRoutes.d.ts.map +1 -0
- package/dist/service/useAgentRoutes.js +389 -0
- package/dist/service/useAgentRoutes.js.map +1 -0
- package/dist/service/useApiRoutes.d.ts.map +1 -1
- package/dist/service/useApiRoutes.js +157 -16
- package/dist/service/useApiRoutes.js.map +1 -1
- package/dist/service/useConnectorRoutes.d.ts.map +1 -1
- package/dist/service/useConnectorRoutes.js +14 -3
- package/dist/service/useConnectorRoutes.js.map +1 -1
- package/dist/service/useGatewayRoutes.d.ts +4 -0
- package/dist/service/useGatewayRoutes.d.ts.map +1 -0
- package/dist/service/useGatewayRoutes.js +168 -0
- package/dist/service/useGatewayRoutes.js.map +1 -0
- package/dist/service/usePageRoutes.d.ts.map +1 -1
- package/dist/service/usePageRoutes.js +16 -5
- package/dist/service/usePageRoutes.js.map +1 -1
- package/dist/settings.d.ts +2 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +4 -8
- package/dist/settings.js.map +1 -1
- package/dist/themes.d.ts +14 -0
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +86 -13
- package/dist/themes.js.map +1 -1
- package/package.json +8 -5
- package/page-scripts/helpers-v2.js +101 -0
- package/page-scripts/page-v2.js +47 -6
- package/required-pages/builder.html +1 -27
- package/required-pages/pages.html +745 -22
- package/required-pages/settings.html +819 -21
- package/required-pages/synthos_apis.html +56 -1
- package/src/agents/a2a/a2aProvider.ts +110 -0
- package/src/agents/discovery.ts +74 -0
- package/src/agents/index.ts +6 -0
- package/src/agents/openclaw/gatewayManager.ts +559 -0
- package/src/agents/openclaw/openclawProvider.ts +261 -0
- package/src/agents/openclaw/sshTunnelManager.ts +385 -0
- package/src/agents/types.ts +82 -0
- package/src/connectors/airtable/connector.json +27 -0
- package/src/connectors/alpha-vantage/connector.json +26 -0
- package/src/connectors/brave-search/connector.json +26 -0
- package/src/connectors/cloudinary/connector.json +27 -0
- package/src/connectors/deepl/connector.json +28 -0
- package/src/connectors/elevenlabs/connector.json +30 -0
- package/src/connectors/giphy/connector.json +27 -0
- package/src/connectors/github/connector.json +29 -0
- package/src/connectors/huggingface/connector.json +27 -0
- package/src/connectors/imgur/connector.json +29 -0
- package/src/connectors/index.ts +2 -0
- package/src/connectors/instagram/connector.json +43 -0
- package/src/connectors/jira/connector.json +28 -0
- package/src/connectors/mapbox/connector.json +26 -0
- package/src/connectors/nasa/connector.json +27 -0
- package/src/connectors/newsapi/connector.json +27 -0
- package/src/connectors/notion/connector.json +28 -0
- package/src/connectors/open-exchange-rates/connector.json +27 -0
- package/src/connectors/openweathermap/connector.json +26 -0
- package/src/connectors/pexels/connector.json +27 -0
- package/src/connectors/registry.ts +21 -97
- package/src/connectors/resend/connector.json +29 -0
- package/src/connectors/rss2json/connector.json +27 -0
- package/src/connectors/sendgrid/connector.json +27 -0
- package/src/connectors/spoonacular/connector.json +28 -0
- package/src/connectors/stability-ai/connector.json +27 -0
- package/src/connectors/twilio/connector.json +28 -0
- package/src/connectors/types.ts +25 -0
- package/src/connectors/unsplash/connector.json +27 -0
- package/src/connectors/wolfram-alpha/connector.json +26 -0
- package/src/connectors/youtube-data/connector.json +30 -0
- package/src/files.ts +14 -0
- package/src/init.ts +27 -0
- package/src/migrations.ts +121 -138
- package/src/models/anthropic.ts +89 -0
- package/src/models/chainOfThought.ts +56 -0
- package/src/models/fireworksai.ts +136 -0
- package/src/models/index.ts +7 -1
- package/src/models/logCompletePrompt.ts +25 -0
- package/src/models/openai.ts +90 -0
- package/src/models/providers.ts +12 -3
- package/src/models/types.ts +67 -2
- package/src/models/utils.ts +16 -0
- package/src/scripts.ts +2 -2
- package/src/service/createCompletePrompt.ts +3 -1
- package/src/service/generateImage.ts +2 -2
- package/src/service/server.ts +4 -0
- package/src/service/transformPage.ts +81 -8
- package/src/service/useAgentRoutes.ts +423 -0
- package/src/service/useApiRoutes.ts +173 -18
- package/src/service/useConnectorRoutes.ts +14 -3
- package/src/service/usePageRoutes.ts +20 -6
- package/src/settings.ts +6 -10
- package/src/themes.ts +84 -12
- package/tests/anthropic.spec.ts +84 -0
- package/tests/chainOfThought.spec.ts +108 -0
- package/tests/ensureScripts.spec.ts +82 -0
- package/tests/files.spec.ts +233 -0
- package/tests/fireworksai.spec.ts +92 -0
- package/tests/logCompletePrompt.spec.ts +74 -0
- package/tests/migrations.spec.ts +79 -1
- package/tests/openai.spec.ts +71 -0
- package/tests/pages.spec.ts +226 -1
- package/tests/providers.spec.ts +144 -0
- package/tests/scripts.spec.ts +209 -0
- package/tests/transformPage.spec.ts +517 -0
- package/tests/types.spec.ts +23 -0
- package/default-pages/app_builder.json +0 -1
- package/default-pages/sidebar_builder.json +0 -1
- package/default-pages/two-panel_builder.json +0 -1
- package/images/home.png +0 -0
- package/images/page-management.png +0 -0
- package/images/settings.png +0 -0
- package/images/synthos-square.png +0 -0
- /package/default-pages/{app_builder.html → application.html} +0 -0
- /package/default-pages/{sidebar_builder.html → sidebar_page.html} +0 -0
- /package/default-pages/{two-panel_builder.html → two-panel_page.html} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "pexels",
|
|
3
|
+
"name": "Pexels",
|
|
4
|
+
"category": "Image",
|
|
5
|
+
"description": "Free stock photos and videos. Search a curated library of high-quality, royalty-free images and video clips.",
|
|
6
|
+
"baseUrl": "https://api.pexels.com",
|
|
7
|
+
"authStrategy": "header",
|
|
8
|
+
"authKey": "Authorization",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Search photos: GET https://api.pexels.com/v1/search?query={term}&per_page=10 — params: query (required), orientation (landscape|portrait|square), size (large|medium|small), color (red|orange|yellow|green|turquoise|blue|violet|pink|brown|black|gray|white|#hex), page (default:1), per_page (default:15, max:80)",
|
|
14
|
+
"Get a Photo by ID: GET https://api.pexels.com/v1/photos/{id} — params: id (required)",
|
|
15
|
+
"Response (search&get): { photos: [{ id, width, height, src: { original, large, medium, small, tiny }, alt, photographer }] }",
|
|
16
|
+
"Whenever you are doing an API request make sure to show a prominent link to Pexels. You can use a text link (e.g. 'Photos provided by Pexels').",
|
|
17
|
+
"Rate limit: 200 requests/hour, 20,000 requests/month."
|
|
18
|
+
],
|
|
19
|
+
"onboarding": {
|
|
20
|
+
"url": "https://www.pexels.com/api",
|
|
21
|
+
"steps": [
|
|
22
|
+
"Create an account at pexels.com",
|
|
23
|
+
"Go to pexels.com/api to request API access",
|
|
24
|
+
"Copy your API key from the dashboard"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,SAAS,CAAC;AAc7D,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,EAKH,CAAC"}
|
|
@@ -1,100 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.CONNECTOR_REGISTRY = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
{
|
|
24
|
-
id: 'elevenlabs',
|
|
25
|
-
name: 'ElevenLabs',
|
|
26
|
-
category: 'Audio',
|
|
27
|
-
description: 'AI-powered text-to-speech and voice synthesis. Generate natural-sounding audio from text.',
|
|
28
|
-
baseUrl: 'https://api.elevenlabs.io',
|
|
29
|
-
authStrategy: 'header',
|
|
30
|
-
authKey: 'xi-api-key',
|
|
31
|
-
fields: [
|
|
32
|
-
{ name: 'apiKey', label: 'API Key', type: 'password' }
|
|
33
|
-
],
|
|
34
|
-
hints: [
|
|
35
|
-
'List voices: GET /v1/voices → { voices: [{ voice_id, name, category }] }',
|
|
36
|
-
'Text-to-speech: POST /v1/text-to-speech/{voice_id}?output_format=mp3_44100_128',
|
|
37
|
-
' Request headers: Accept: audio/mpeg, Content-Type: application/json',
|
|
38
|
-
' Request body: { text: string, model_id: "eleven_multilingual_v2" }',
|
|
39
|
-
' Response: raw audio/mpeg binary — use resp.arrayBuffer() then new Blob([buf], {type:"audio/mpeg"}) and URL.createObjectURL() to play',
|
|
40
|
-
' IMPORTANT: The proxy returns raw binary, NOT JSON. Call fetch("/api/connectors", ...) directly instead of synthos.connectors.call() for TTS, since the helper parses JSON.',
|
|
41
|
-
'Default voice: "Rachel" (voice_id: 21m00Tcm4TlvDq8ikWAM) is a good general-purpose voice.',
|
|
42
|
-
'Max text length: 5000 characters per request.'
|
|
43
|
-
].join('\n')
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
id: 'stability-ai',
|
|
47
|
-
name: 'Stability AI',
|
|
48
|
-
category: 'Image',
|
|
49
|
-
description: 'AI image generation powered by Stable Diffusion. Create images from text prompts.',
|
|
50
|
-
baseUrl: 'https://api.stability.ai',
|
|
51
|
-
authStrategy: 'bearer',
|
|
52
|
-
authKey: 'Authorization',
|
|
53
|
-
fields: [
|
|
54
|
-
{ name: 'apiKey', label: 'API Key', type: 'password' }
|
|
55
|
-
],
|
|
56
|
-
hints: [
|
|
57
|
-
'Text-to-image: POST /v1/generation/stable-diffusion-xl-1024-v1-0/text-to-image',
|
|
58
|
-
' Request headers: Content-Type: application/json, Accept: application/json',
|
|
59
|
-
' Request body: { text_prompts: [{ text: string, weight: 1 }], cfg_scale: 7, steps: 30, width: 1024, height: 1024 }',
|
|
60
|
-
' Response: { artifacts: [{ base64: string, finishReason: string }] }',
|
|
61
|
-
' Display with: <img src="data:image/png;base64,{base64}">'
|
|
62
|
-
].join('\n')
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
id: 'instagram',
|
|
66
|
-
name: 'Instagram',
|
|
67
|
-
category: 'Social',
|
|
68
|
-
description: 'Post photos and videos to Instagram via the Instagram Graph API.',
|
|
69
|
-
baseUrl: 'https://graph.facebook.com/v21.0',
|
|
70
|
-
authStrategy: 'oauth2',
|
|
71
|
-
authKey: 'access_token',
|
|
72
|
-
authorizationUrl: 'https://www.facebook.com/v21.0/dialog/oauth',
|
|
73
|
-
tokenUrl: 'https://graph.facebook.com/v21.0/oauth/access_token',
|
|
74
|
-
scopes: [
|
|
75
|
-
'instagram_basic',
|
|
76
|
-
'instagram_content_publish',
|
|
77
|
-
'pages_show_list',
|
|
78
|
-
'pages_read_engagement'
|
|
79
|
-
],
|
|
80
|
-
fields: [
|
|
81
|
-
{ name: 'clientId', label: 'App ID', type: 'text' },
|
|
82
|
-
{ name: 'clientSecret', label: 'App Secret', type: 'password' }
|
|
83
|
-
],
|
|
84
|
-
hints: [
|
|
85
|
-
'Publishing flow (two-step):',
|
|
86
|
-
' 1. Create media container: POST /{ig-user-id}/media',
|
|
87
|
-
' Body (photo): { image_url, caption }',
|
|
88
|
-
' Body (reel/video): { video_url, caption, media_type: "REELS" }',
|
|
89
|
-
' Response: { id: "<container-id>" }',
|
|
90
|
-
' 2. Publish container: POST /{ig-user-id}/media_publish',
|
|
91
|
-
' Body: { creation_id: "<container-id>" }',
|
|
92
|
-
' Response: { id: "<media-id>" }',
|
|
93
|
-
'IMPORTANT: Do NOT include access_token in body or query params — the proxy attaches it automatically.',
|
|
94
|
-
'IMPORTANT: Images must be publicly accessible URLs. Use a hosting service or the data API to serve local images.',
|
|
95
|
-
'Rate limit: 25 posts per 24-hour period.',
|
|
96
|
-
'Requires a Business or Creator Instagram account linked to a Facebook Page.'
|
|
97
|
-
].join('\n')
|
|
98
|
-
}
|
|
99
|
-
];
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const connectorsDir = __dirname;
|
|
30
|
+
function loadConnectorJson(dir) {
|
|
31
|
+
const file = path.join(dir, 'connector.json');
|
|
32
|
+
if (!fs.existsSync(file))
|
|
33
|
+
return null;
|
|
34
|
+
const raw = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
35
|
+
return {
|
|
36
|
+
...raw,
|
|
37
|
+
hints: raw.hints ? raw.hints.join('\n') : undefined
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
exports.CONNECTOR_REGISTRY = fs
|
|
41
|
+
.readdirSync(connectorsDir, { withFileTypes: true })
|
|
42
|
+
.filter(d => d.isDirectory())
|
|
43
|
+
.map(d => loadConnectorJson(path.join(connectorsDir, d.name)))
|
|
44
|
+
.filter((d) => d !== null)
|
|
45
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
100
46
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAG7B,MAAM,aAAa,GAAG,SAAS,CAAC;AAEhC,SAAS,iBAAiB,CAAC,GAAW;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,GAAG,GAAkB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,OAAO;QACH,GAAG,GAAG;QACN,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC;AACN,CAAC;AAEY,QAAA,kBAAkB,GAA0B,EAAE;KACtD,WAAW,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KACnD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7D,MAAM,CAAC,CAAC,CAAC,EAA4B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;KACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "resend",
|
|
3
|
+
"name": "Resend",
|
|
4
|
+
"category": "Communication",
|
|
5
|
+
"description": "Modern email delivery API. Send transactional emails with a clean, developer-friendly interface.",
|
|
6
|
+
"baseUrl": "https://api.resend.com",
|
|
7
|
+
"authStrategy": "bearer",
|
|
8
|
+
"authKey": "Authorization",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Send email: POST /emails",
|
|
14
|
+
" Body: { from: \"you@yourdomain.com\", to: [\"recipient@example.com\"], subject: \"...\", html: \"<p>Hello</p>\" }",
|
|
15
|
+
" Response: { id: \"email-id\" }",
|
|
16
|
+
"Get email: GET /emails/{id}",
|
|
17
|
+
" Response: { id, from, to, subject, created_at, last_event }",
|
|
18
|
+
"IMPORTANT: 'from' must use a verified domain. Use 'onboarding@resend.dev' for testing.",
|
|
19
|
+
"Free tier: 100 emails/day, 3,000 emails/month."
|
|
20
|
+
],
|
|
21
|
+
"onboarding": {
|
|
22
|
+
"url": "https://resend.com/signup",
|
|
23
|
+
"steps": [
|
|
24
|
+
"Create an account at resend.com",
|
|
25
|
+
"Go to API Keys in the dashboard",
|
|
26
|
+
"Create a new API key and copy it"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "rss2json",
|
|
3
|
+
"name": "RSS/Atom Feed",
|
|
4
|
+
"category": "News",
|
|
5
|
+
"description": "Convert any RSS or Atom feed into JSON. Fetch and parse blog posts, podcasts, and news feeds from any source.",
|
|
6
|
+
"baseUrl": "https://api.rss2json.com",
|
|
7
|
+
"authStrategy": "query",
|
|
8
|
+
"authKey": "api_key",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Parse feed: GET /v1/api.json?rss_url={encoded_feed_url}",
|
|
14
|
+
"Response: { status: \"ok\", feed: { title, link, description }, items: [{ title, link, pubDate, description, content, thumbnail }] }",
|
|
15
|
+
"The rss_url param must be URL-encoded.",
|
|
16
|
+
"Free tier: 10,000 requests/day, up to 10 items per feed.",
|
|
17
|
+
"Paid plans return more items and support count, order_by, order_dir params."
|
|
18
|
+
],
|
|
19
|
+
"onboarding": {
|
|
20
|
+
"url": "https://rss2json.com/",
|
|
21
|
+
"steps": [
|
|
22
|
+
"Create a free account at rss2json.com",
|
|
23
|
+
"Your API key is shown on the dashboard after sign-up",
|
|
24
|
+
"Copy the API key"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "sendgrid",
|
|
3
|
+
"name": "SendGrid",
|
|
4
|
+
"category": "Communication",
|
|
5
|
+
"description": "Email delivery service. Send transactional and marketing emails at scale via API.",
|
|
6
|
+
"baseUrl": "https://api.sendgrid.com",
|
|
7
|
+
"authStrategy": "bearer",
|
|
8
|
+
"authKey": "Authorization",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Send email: POST /v3/mail/send",
|
|
14
|
+
" Body: { personalizations: [{ to: [{ email }] }], from: { email }, subject: \"...\", content: [{ type: \"text/plain\", value: \"...\" }] }",
|
|
15
|
+
" Returns 202 Accepted (no body) on success.",
|
|
16
|
+
"List templates: GET /v3/templates?generations=dynamic",
|
|
17
|
+
"Free tier: 100 emails/day."
|
|
18
|
+
],
|
|
19
|
+
"onboarding": {
|
|
20
|
+
"url": "https://signup.sendgrid.com/",
|
|
21
|
+
"steps": [
|
|
22
|
+
"Create an account at sendgrid.com",
|
|
23
|
+
"Go to Settings > API Keys",
|
|
24
|
+
"Create a new API key with appropriate permissions and copy it"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "spoonacular",
|
|
3
|
+
"name": "Spoonacular",
|
|
4
|
+
"category": "Food",
|
|
5
|
+
"description": "Food and recipe API. Search recipes, get nutritional data, meal planning, and ingredient information.",
|
|
6
|
+
"baseUrl": "https://api.spoonacular.com",
|
|
7
|
+
"authStrategy": "header",
|
|
8
|
+
"authKey": "x-api-key",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Search recipes: GET /recipes/complexSearch?query={term}&number=10",
|
|
14
|
+
"Get recipe: GET /recipes/{id}/information",
|
|
15
|
+
"Random recipes: GET /recipes/random?number=5",
|
|
16
|
+
"Nutritional info: GET /recipes/{id}/nutritionWidget.json",
|
|
17
|
+
"Response (search): { results: [{ id, title, image }], totalResults }",
|
|
18
|
+
"Free tier: 150 requests/day."
|
|
19
|
+
],
|
|
20
|
+
"onboarding": {
|
|
21
|
+
"url": "https://spoonacular.com/food-api/console#Dashboard",
|
|
22
|
+
"steps": [
|
|
23
|
+
"Create an account at spoonacular.com/food-api",
|
|
24
|
+
"Go to your Dashboard / Profile",
|
|
25
|
+
"Copy your API key"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "stability-ai",
|
|
3
|
+
"name": "Stability AI",
|
|
4
|
+
"category": "Image",
|
|
5
|
+
"description": "AI image generation powered by Stable Diffusion. Create images from text prompts.",
|
|
6
|
+
"baseUrl": "https://api.stability.ai",
|
|
7
|
+
"authStrategy": "bearer",
|
|
8
|
+
"authKey": "Authorization",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Text-to-image: POST /v1/generation/stable-diffusion-xl-1024-v1-0/text-to-image",
|
|
14
|
+
" Request headers: Content-Type: application/json, Accept: application/json",
|
|
15
|
+
" Request body: { text_prompts: [{ text: string, weight: 1 }], cfg_scale: 7, steps: 30, width: 1024, height: 1024 }",
|
|
16
|
+
" Response: { artifacts: [{ base64: string, finishReason: string }] }",
|
|
17
|
+
" Display with: <img src=\"data:image/png;base64,{base64}\">"
|
|
18
|
+
],
|
|
19
|
+
"onboarding": {
|
|
20
|
+
"url": "https://platform.stability.ai/",
|
|
21
|
+
"steps": [
|
|
22
|
+
"Create an account at platform.stability.ai",
|
|
23
|
+
"Go to Account > API Keys",
|
|
24
|
+
"Create and copy your API key"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "twilio",
|
|
3
|
+
"name": "Twilio",
|
|
4
|
+
"category": "Communication",
|
|
5
|
+
"description": "SMS, voice, and messaging APIs. Send text messages, make calls, and build communication workflows.",
|
|
6
|
+
"baseUrl": "https://api.twilio.com",
|
|
7
|
+
"authStrategy": "header",
|
|
8
|
+
"authKey": "Authorization",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "Auth Token (Base64 SID:Token)", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Send SMS: POST /2010-04-01/Accounts/{AccountSid}/Messages.json",
|
|
14
|
+
" Body (form-encoded): To=+1234567890&From=+0987654321&Body=Hello",
|
|
15
|
+
" IMPORTANT: Twilio uses Basic auth. Save your key as 'Basic base64(AccountSID:AuthToken)'.",
|
|
16
|
+
" Content-Type must be application/x-www-form-urlencoded for SMS.",
|
|
17
|
+
"List messages: GET /2010-04-01/Accounts/{AccountSid}/Messages.json",
|
|
18
|
+
"Free trial: requires verified phone numbers."
|
|
19
|
+
],
|
|
20
|
+
"onboarding": {
|
|
21
|
+
"url": "https://www.twilio.com/try-twilio",
|
|
22
|
+
"steps": [
|
|
23
|
+
"Create a Twilio account at twilio.com/try-twilio",
|
|
24
|
+
"Find your Account SID and Auth Token on the Console dashboard",
|
|
25
|
+
"Base64-encode 'AccountSID:AuthToken' and paste as your key"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -4,6 +4,10 @@ export interface ConnectorField {
|
|
|
4
4
|
label: string;
|
|
5
5
|
type: 'password' | 'text';
|
|
6
6
|
}
|
|
7
|
+
export interface ConnectorOnboarding {
|
|
8
|
+
url: string;
|
|
9
|
+
steps: string[];
|
|
10
|
+
}
|
|
7
11
|
export interface ConnectorDefinition {
|
|
8
12
|
id: string;
|
|
9
13
|
name: string;
|
|
@@ -15,6 +19,8 @@ export interface ConnectorDefinition {
|
|
|
15
19
|
fields: ConnectorField[];
|
|
16
20
|
/** Usage hints shown to the LLM — recommended endpoints, default settings, gotchas. */
|
|
17
21
|
hints?: string;
|
|
22
|
+
/** Onboarding instructions — signup URL and steps to get an API key. */
|
|
23
|
+
onboarding?: ConnectorOnboarding;
|
|
18
24
|
/** OAuth2: Authorization endpoint URL. */
|
|
19
25
|
authorizationUrl?: string;
|
|
20
26
|
/** OAuth2: Token exchange endpoint URL. */
|
|
@@ -22,6 +28,21 @@ export interface ConnectorDefinition {
|
|
|
22
28
|
/** OAuth2: Requested scopes. */
|
|
23
29
|
scopes?: string[];
|
|
24
30
|
}
|
|
31
|
+
export interface ConnectorJson {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
category: string;
|
|
35
|
+
description: string;
|
|
36
|
+
baseUrl: string;
|
|
37
|
+
authStrategy: AuthStrategy;
|
|
38
|
+
authKey: string;
|
|
39
|
+
fields: ConnectorField[];
|
|
40
|
+
hints?: string[];
|
|
41
|
+
onboarding?: ConnectorOnboarding;
|
|
42
|
+
authorizationUrl?: string;
|
|
43
|
+
tokenUrl?: string;
|
|
44
|
+
scopes?: string[];
|
|
45
|
+
}
|
|
25
46
|
export interface ConnectorConfig {
|
|
26
47
|
apiKey: string;
|
|
27
48
|
enabled: boolean;
|
|
@@ -40,7 +61,9 @@ export interface ConnectorSummary {
|
|
|
40
61
|
id: string;
|
|
41
62
|
name: string;
|
|
42
63
|
category: string;
|
|
64
|
+
description: string;
|
|
43
65
|
configured: boolean;
|
|
66
|
+
enabled: boolean;
|
|
44
67
|
}
|
|
45
68
|
export interface ConnectorDetail extends ConnectorDefinition {
|
|
46
69
|
configured: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connectors/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,oBAAoB,CAAC,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connectors/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "unsplash",
|
|
3
|
+
"name": "Unsplash",
|
|
4
|
+
"category": "Image",
|
|
5
|
+
"description": "Access a vast library of free high-resolution photos. Search, browse, and download professional photography.",
|
|
6
|
+
"baseUrl": "https://api.unsplash.com",
|
|
7
|
+
"authStrategy": "header",
|
|
8
|
+
"authKey": "Authorization",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "Access Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Search photos: GET /search/photos?query={term}&per_page=10",
|
|
14
|
+
"Random photo: GET /photos/random?query={term}",
|
|
15
|
+
"Response: { results: [{ urls: { regular, small, thumb }, description, user: { name } }] }",
|
|
16
|
+
"IMPORTANT: Save your key as 'Client-ID YOUR_ACCESS_KEY' (the proxy sends raw header value).",
|
|
17
|
+
"Free tier: 50 requests/hour."
|
|
18
|
+
],
|
|
19
|
+
"onboarding": {
|
|
20
|
+
"url": "https://unsplash.com/developers",
|
|
21
|
+
"steps": [
|
|
22
|
+
"Create a developer account at unsplash.com/developers",
|
|
23
|
+
"Register a new application",
|
|
24
|
+
"Copy your Access Key from the app settings"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "wolfram-alpha",
|
|
3
|
+
"name": "Wolfram Alpha",
|
|
4
|
+
"category": "Science",
|
|
5
|
+
"description": "Computational intelligence engine. Get answers to factual queries, math, science, and data analysis.",
|
|
6
|
+
"baseUrl": "https://api.wolframalpha.com",
|
|
7
|
+
"authStrategy": "query",
|
|
8
|
+
"authKey": "appid",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "App ID", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Short answer: GET /v1/result?i={query} — returns plain text",
|
|
14
|
+
"Full results: GET /v2/query?input={query}&output=json",
|
|
15
|
+
"Response (v2): { queryresult: { pods: [{ title, subpods: [{ plaintext, img: { src } }] }] } }",
|
|
16
|
+
"Free tier: 2,000 queries/month."
|
|
17
|
+
],
|
|
18
|
+
"onboarding": {
|
|
19
|
+
"url": "https://developer.wolframalpha.com/portal/myapps/",
|
|
20
|
+
"steps": [
|
|
21
|
+
"Create a Wolfram ID at developer.wolframalpha.com",
|
|
22
|
+
"Go to My Apps and create a new app",
|
|
23
|
+
"Copy the AppID from your app settings"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "youtube-data",
|
|
3
|
+
"name": "YouTube Data",
|
|
4
|
+
"category": "Media",
|
|
5
|
+
"description": "Search YouTube videos, retrieve channel info, playlists, and video metadata via the YouTube Data API v3.",
|
|
6
|
+
"baseUrl": "https://www.googleapis.com/youtube/v3",
|
|
7
|
+
"authStrategy": "query",
|
|
8
|
+
"authKey": "key",
|
|
9
|
+
"fields": [
|
|
10
|
+
{ "name": "apiKey", "label": "API Key", "type": "password" }
|
|
11
|
+
],
|
|
12
|
+
"hints": [
|
|
13
|
+
"Search videos: GET /search?part=snippet&q={query}&type=video&maxResults=10",
|
|
14
|
+
"Get video details: GET /videos?part=snippet,statistics&id={videoId}",
|
|
15
|
+
"Get channel: GET /channels?part=snippet,statistics&id={channelId}",
|
|
16
|
+
"Get playlist items: GET /playlistItems?part=snippet&playlistId={playlistId}&maxResults=10",
|
|
17
|
+
"Response (search): { items: [{ id: { videoId }, snippet: { title, description, thumbnails, channelTitle } }] }",
|
|
18
|
+
"Embed video: <iframe src=\"https://www.youtube.com/embed/{videoId}\"></iframe>",
|
|
19
|
+
"Free quota: 10,000 units/day. Search costs 100 units, most reads cost 1-3 units."
|
|
20
|
+
],
|
|
21
|
+
"onboarding": {
|
|
22
|
+
"url": "https://console.cloud.google.com/apis/library/youtube.googleapis.com",
|
|
23
|
+
"steps": [
|
|
24
|
+
"Go to the Google Cloud Console and create or select a project",
|
|
25
|
+
"Enable the YouTube Data API v3",
|
|
26
|
+
"Go to Credentials and create an API key",
|
|
27
|
+
"Copy the API key"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
package/dist/files.d.ts
CHANGED
|
@@ -7,5 +7,6 @@ export declare function listFolders(dirPath: string): Promise<string[]>;
|
|
|
7
7
|
export declare function loadFile(path: string): Promise<string>;
|
|
8
8
|
export declare function saveFile(path: string, content: string): Promise<void>;
|
|
9
9
|
export declare function deleteFile(path: string): Promise<void>;
|
|
10
|
+
export declare function copyFolderRecursive(srcFolder: string, destFolder: string): Promise<void>;
|
|
10
11
|
export declare function deleteFolder(dirPath: string): Promise<void>;
|
|
11
12
|
//# sourceMappingURL=files.d.ts.map
|
package/dist/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjF;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE/D;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKpE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE"}
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjF;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE/D;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKpE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE"}
|
package/dist/files.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.deleteFolder = exports.deleteFile = exports.saveFile = exports.loadFile = exports.listFolders = exports.listFiles = exports.ensureFolderExists = exports.copyFiles = exports.copyFile = exports.checkIfExists = void 0;
|
|
29
|
+
exports.deleteFolder = exports.copyFolderRecursive = exports.deleteFile = exports.saveFile = exports.loadFile = exports.listFolders = exports.listFiles = exports.ensureFolderExists = exports.copyFiles = exports.copyFile = exports.checkIfExists = void 0;
|
|
30
30
|
const fs = __importStar(require("fs/promises"));
|
|
31
31
|
const path_1 = __importDefault(require("path"));
|
|
32
32
|
async function checkIfExists(path) {
|
|
@@ -83,6 +83,21 @@ async function deleteFile(path) {
|
|
|
83
83
|
await fs.unlink(path);
|
|
84
84
|
}
|
|
85
85
|
exports.deleteFile = deleteFile;
|
|
86
|
+
async function copyFolderRecursive(srcFolder, destFolder) {
|
|
87
|
+
await ensureFolderExists(destFolder);
|
|
88
|
+
const entries = await fs.readdir(srcFolder, { withFileTypes: true });
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
const srcPath = path_1.default.join(srcFolder, entry.name);
|
|
91
|
+
const destPath = path_1.default.join(destFolder, entry.name);
|
|
92
|
+
if (entry.isDirectory()) {
|
|
93
|
+
await copyFolderRecursive(srcPath, destPath);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
await fs.copyFile(srcPath, destPath);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.copyFolderRecursive = copyFolderRecursive;
|
|
86
101
|
async function deleteFolder(dirPath) {
|
|
87
102
|
await fs.rm(dirPath, { recursive: true });
|
|
88
103
|
}
|
package/dist/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,WAAW,SAAa,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,aAAa,CAW/H;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAmB,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAoDvG"}
|