n8n-nodes-openrouter-selector 0.3.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.
Files changed (70) hide show
  1. package/README.md +307 -0
  2. package/dist/credentials/OpenRouterApi.credentials.d.ts +10 -0
  3. package/dist/credentials/OpenRouterApi.credentials.d.ts.map +1 -0
  4. package/dist/credentials/OpenRouterApi.credentials.js +38 -0
  5. package/dist/credentials/OpenRouterApi.credentials.js.map +1 -0
  6. package/dist/credentials/SupabaseModelCatalogApi.credentials.d.ts +10 -0
  7. package/dist/credentials/SupabaseModelCatalogApi.credentials.d.ts.map +1 -0
  8. package/dist/credentials/SupabaseModelCatalogApi.credentials.js +51 -0
  9. package/dist/credentials/SupabaseModelCatalogApi.credentials.js.map +1 -0
  10. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.d.ts +11 -0
  11. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.d.ts.map +1 -0
  12. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.js +300 -0
  13. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.js.map +1 -0
  14. package/dist/nodes/OpenRouterChatCompletion/openrouter-chat.svg +13 -0
  15. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.d.ts +14 -0
  16. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.d.ts.map +1 -0
  17. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.js +412 -0
  18. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.js.map +1 -0
  19. package/dist/nodes/OpenRouterModelSelector/modelScoring.d.ts +28 -0
  20. package/dist/nodes/OpenRouterModelSelector/modelScoring.d.ts.map +1 -0
  21. package/dist/nodes/OpenRouterModelSelector/modelScoring.js +384 -0
  22. package/dist/nodes/OpenRouterModelSelector/modelScoring.js.map +1 -0
  23. package/dist/nodes/OpenRouterModelSelector/openrouter-selector.svg +37 -0
  24. package/dist/nodes/OpenRouterModelSelector/taskProfiles.d.ts +39 -0
  25. package/dist/nodes/OpenRouterModelSelector/taskProfiles.d.ts.map +1 -0
  26. package/dist/nodes/OpenRouterModelSelector/taskProfiles.js +271 -0
  27. package/dist/nodes/OpenRouterModelSelector/taskProfiles.js.map +1 -0
  28. package/dist/nodes/OpenRouterModelSelector/types.d.ts +217 -0
  29. package/dist/nodes/OpenRouterModelSelector/types.d.ts.map +1 -0
  30. package/dist/nodes/OpenRouterModelSelector/types.js +44 -0
  31. package/dist/nodes/OpenRouterModelSelector/types.js.map +1 -0
  32. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.d.ts +11 -0
  33. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.d.ts.map +1 -0
  34. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.js +657 -0
  35. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.js.map +1 -0
  36. package/dist/nodes/OpenRouterSmartChat/modelScoring.d.ts +28 -0
  37. package/dist/nodes/OpenRouterSmartChat/modelScoring.d.ts.map +1 -0
  38. package/dist/nodes/OpenRouterSmartChat/modelScoring.js +384 -0
  39. package/dist/nodes/OpenRouterSmartChat/modelScoring.js.map +1 -0
  40. package/dist/nodes/OpenRouterSmartChat/openrouter-smart.svg +11 -0
  41. package/dist/nodes/OpenRouterSmartChat/taskProfiles.d.ts +39 -0
  42. package/dist/nodes/OpenRouterSmartChat/taskProfiles.d.ts.map +1 -0
  43. package/dist/nodes/OpenRouterSmartChat/taskProfiles.js +271 -0
  44. package/dist/nodes/OpenRouterSmartChat/taskProfiles.js.map +1 -0
  45. package/dist/nodes/OpenRouterSmartChat/types.d.ts +217 -0
  46. package/dist/nodes/OpenRouterSmartChat/types.d.ts.map +1 -0
  47. package/dist/nodes/OpenRouterSmartChat/types.js +44 -0
  48. package/dist/nodes/OpenRouterSmartChat/types.js.map +1 -0
  49. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.d.ts +48 -0
  50. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.d.ts.map +1 -0
  51. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.js +265 -0
  52. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.js.map +1 -0
  53. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.d.ts +16 -0
  54. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.d.ts.map +1 -0
  55. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.js +177 -0
  56. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.js.map +1 -0
  57. package/dist/nodes/OpenRouterSmartEmbedding/openrouter-embed.svg +22 -0
  58. package/dist/nodes/shared/contentAnalyzer.d.ts +16 -0
  59. package/dist/nodes/shared/contentAnalyzer.d.ts.map +1 -0
  60. package/dist/nodes/shared/contentAnalyzer.js +256 -0
  61. package/dist/nodes/shared/contentAnalyzer.js.map +1 -0
  62. package/dist/nodes/shared/embeddingScoring.d.ts +12 -0
  63. package/dist/nodes/shared/embeddingScoring.d.ts.map +1 -0
  64. package/dist/nodes/shared/embeddingScoring.js +329 -0
  65. package/dist/nodes/shared/embeddingScoring.js.map +1 -0
  66. package/dist/nodes/shared/types.d.ts +131 -0
  67. package/dist/nodes/shared/types.d.ts.map +1 -0
  68. package/dist/nodes/shared/types.js +24 -0
  69. package/dist/nodes/shared/types.js.map +1 -0
  70. package/package.json +67 -0
package/README.md ADDED
@@ -0,0 +1,307 @@
1
+ # n8n-nodes-openrouter-selector
2
+
3
+ n8n community node for intelligent OpenRouter model selection based on task, budget, and benchmarks.
4
+
5
+ ## Features
6
+
7
+ - **Task-Based Selection**: Optimized model recommendations for:
8
+ - Translation (Chinese ↔ English optimized)
9
+ - Coding & Development
10
+ - Data Analysis & Reasoning
11
+ - Vision & Image Analysis
12
+ - Conversational Chat
13
+ - Text Embedding
14
+ - Summarization
15
+ - Mathematical Reasoning
16
+
17
+ - **Budget Awareness**: Three budget tiers:
18
+ - **Cheap**: Lowest cost, quality secondary
19
+ - **Balanced**: Good price-performance ratio
20
+ - **Premium**: Best quality, cost no concern
21
+
22
+ - **Benchmark-Based Scoring**: Uses external benchmark data:
23
+ - Artificial Analysis (Intelligence, Coding, Math indices)
24
+ - LMSYS Chatbot Arena (Elo ratings)
25
+ - LiveBench (Coding, Math, Reasoning scores)
26
+
27
+ - **Dynamic Model Override**: Select specific models with real-time scoring preview
28
+
29
+ - **Flexible Filtering**:
30
+ - Minimum context length
31
+ - JSON mode requirement
32
+ - Vision/multimodal requirement
33
+ - Cost limits
34
+ - Provider whitelist/blacklist
35
+
36
+ ## Installation
37
+
38
+ ### In n8n
39
+
40
+ 1. Go to **Settings** → **Community Nodes**
41
+ 2. Click **Install a community node**
42
+ 3. Enter: `n8n-nodes-openrouter-selector`
43
+ 4. Click **Install**
44
+
45
+ ### Manual Installation
46
+
47
+ ```bash
48
+ # In your n8n custom nodes directory
49
+ cd ~/.n8n/custom
50
+ npm install n8n-nodes-openrouter-selector
51
+ ```
52
+
53
+ ### Development Installation
54
+
55
+ ```bash
56
+ git clone https://github.com/ecolights/n8n-nodes-openrouter-selector.git
57
+ cd n8n-nodes-openrouter-selector
58
+ pnpm install
59
+ pnpm build
60
+
61
+ # Link to n8n
62
+ cd ~/.n8n/custom
63
+ npm link /path/to/n8n-nodes-openrouter-selector
64
+ ```
65
+
66
+ ## Prerequisites
67
+
68
+ This node requires:
69
+
70
+ 1. **Supabase Database** with the benchmark schema (see [docs/BENCHMARK_SYSTEM.md](docs/BENCHMARK_SYSTEM.md)):
71
+ - `models_catalog` - OpenRouter model data (synced via separate workflow)
72
+ - `model_name_mappings` - Master mapping table (manually maintained)
73
+ - `model_benchmarks` - Benchmark scores (auto-synced weekly)
74
+ - `task_profiles` - Task-specific scoring weights
75
+ - `unmatched_models` - Review queue for new models
76
+
77
+ 2. **n8n Workflow**: `TN_benchmark_sync_artificial_analysis` for weekly benchmark sync
78
+
79
+ 3. **Credentials**: Supabase URL and API key (service role for write access)
80
+
81
+ ### Quick Schema Setup
82
+
83
+ The full schema with triggers, functions, and RLS policies is documented in [docs/BENCHMARK_SYSTEM.md](docs/BENCHMARK_SYSTEM.md).
84
+
85
+ **Core Tables Overview**:
86
+
87
+ ```sql
88
+ -- Model name mappings (Source of Truth - manually maintained)
89
+ CREATE TABLE model_name_mappings (
90
+ openrouter_id TEXT UNIQUE NOT NULL, -- e.g. "anthropic/claude-sonnet-4"
91
+ canonical_name TEXT NOT NULL, -- Display name
92
+ aa_name TEXT, -- Artificial Analysis name
93
+ aa_slug TEXT, -- AA URL slug
94
+ provider TEXT, -- anthropic, openai, google, etc.
95
+ verified BOOLEAN DEFAULT false
96
+ );
97
+
98
+ -- Benchmark scores (auto-filled by sync workflow)
99
+ CREATE TABLE model_benchmarks (
100
+ openrouter_id TEXT REFERENCES model_name_mappings(openrouter_id),
101
+ -- Artificial Analysis
102
+ aa_intelligence_index DECIMAL(5,2),
103
+ aa_coding_index DECIMAL(5,2),
104
+ aa_math_index DECIMAL(5,2),
105
+ -- LMSYS Arena
106
+ lmsys_elo INTEGER,
107
+ -- LiveBench
108
+ livebench_overall DECIMAL(5,2),
109
+ livebench_coding DECIMAL(5,2),
110
+ -- Computed composites (via trigger)
111
+ composite_general DECIMAL(5,2),
112
+ composite_code DECIMAL(5,2),
113
+ composite_math DECIMAL(5,2)
114
+ );
115
+
116
+ -- Task-specific scoring weights
117
+ CREATE TABLE task_profiles (
118
+ task_name TEXT UNIQUE NOT NULL, -- general, code, translation, etc.
119
+ weight_aa_intelligence DECIMAL(3,2),
120
+ weight_aa_coding DECIMAL(3,2),
121
+ weight_lmsys_elo DECIMAL(3,2),
122
+ weight_livebench DECIMAL(3,2),
123
+ boost_anthropic DECIMAL(3,2),
124
+ boost_openai DECIMAL(3,2),
125
+ boost_deepseek DECIMAL(3,2)
126
+ );
127
+ ```
128
+
129
+ ## Usage
130
+
131
+ ### Basic Usage
132
+
133
+ 1. Add the **OpenRouter Model Selector** node to your workflow
134
+ 2. Configure credentials (Supabase URL + API Key)
135
+ 3. Select a **Task Category** (e.g., "coding")
136
+ 4. Select a **Budget** (e.g., "balanced")
137
+ 5. Execute to get the recommended model
138
+
139
+ ### Output Format
140
+
141
+ **Full Output** (default):
142
+ ```json
143
+ {
144
+ "recommended": {
145
+ "modelId": "anthropic/claude-sonnet-4",
146
+ "provider": "anthropic",
147
+ "displayName": "Claude Sonnet 4",
148
+ "contextLength": 200000,
149
+ "supportsJson": true,
150
+ "modality": "text+image->text",
151
+ "pricing": {
152
+ "promptPer1kUsd": 0.003,
153
+ "completionPer1kUsd": 0.015,
154
+ "combinedPer1kUsd": 0.009
155
+ },
156
+ "score": 87.5,
157
+ "scoreBreakdown": {
158
+ "benchmarkFit": 38,
159
+ "taskFit": 28,
160
+ "budgetFit": 18,
161
+ "capabilityFit": 9,
162
+ "providerBonus": 1.5
163
+ },
164
+ "reasoning": "Excellent benchmark performance for Coding & Development, ideal balanced pricing, anthropic provider bonus (+15%)."
165
+ },
166
+ "alternatives": [...],
167
+ "queryMetadata": {
168
+ "task": "coding",
169
+ "budget": "balanced",
170
+ "totalModelsEvaluated": 313,
171
+ "modelsPassingFilters": 187,
172
+ "executionTimeMs": 245
173
+ }
174
+ }
175
+ ```
176
+
177
+ ### Using the Selected Model
178
+
179
+ Connect the output to an HTTP Request node or OpenRouter integration:
180
+
181
+ ```
182
+ [OpenRouter Model Selector] → [HTTP Request to OpenRouter API]
183
+ URL: https://openrouter.ai/api/v1/chat/completions
184
+ Body: { "model": "={{$json.recommended.modelId}}", ... }
185
+ ```
186
+
187
+ ## Scoring Algorithm
188
+
189
+ The scoring formula is deterministic and based on external benchmarks:
190
+
191
+ ```
192
+ score = (benchmark_fit × 0.4) + (task_fit × 0.3) + (budget_fit × 0.2) + (capability_fit × 0.1) × provider_boost
193
+ ```
194
+
195
+ ### Components
196
+
197
+ | Component | Weight | Description |
198
+ |-----------|--------|-------------|
199
+ | Benchmark Fit | 40% | Score from external benchmarks (AA, LMSYS, LiveBench) |
200
+ | Task Fit | 30% | How well the model matches task requirements |
201
+ | Budget Fit | 20% | Cost alignment with budget preference |
202
+ | Capability Fit | 10% | Context length, JSON support, verification status |
203
+ | Provider Boost | ×1.0-1.2 | Task-specific provider bonuses |
204
+
205
+ ### Provider Boosts by Task
206
+
207
+ | Task | Provider Boosts |
208
+ |------|-----------------|
209
+ | Translation | DeepSeek +20%, Qwen +15%, Anthropic +10% |
210
+ | Coding | Anthropic +15%, OpenAI +10%, DeepSeek +8% |
211
+ | Analysis | Anthropic +15%, OpenAI +10%, Google +5% |
212
+ | Vision | OpenAI +15%, Google +12%, Anthropic +8% |
213
+ | Math | DeepSeek +15%, Qwen +12%, OpenAI +10% |
214
+
215
+ ## Configuration
216
+
217
+ ### Node Parameters
218
+
219
+ | Parameter | Type | Description |
220
+ |-----------|------|-------------|
221
+ | Task Category | Dropdown | Type of task (coding, translation, etc.) |
222
+ | Budget | Dropdown | Cost preference (cheap, balanced, premium) |
223
+ | Model Override | Dynamic Dropdown | Override with specific model |
224
+ | Filters | Collection | Advanced filtering options |
225
+ | Options | Collection | Output configuration |
226
+
227
+ ### Filter Options
228
+
229
+ | Filter | Type | Default | Description |
230
+ |--------|------|---------|-------------|
231
+ | Min Context Length | Number | 8000 | Minimum tokens |
232
+ | Require JSON Mode | Boolean | false | Only JSON-capable models |
233
+ | Require Vision | Boolean | false | Only multimodal models |
234
+ | Max Cost per 1K | Number | 0 | Cost limit (0 = no limit) |
235
+ | Provider Whitelist | Multi-select | [] | Include only these providers |
236
+ | Provider Blacklist | Multi-select | [] | Exclude these providers |
237
+
238
+ ## Benchmark Sync Workflow
239
+
240
+ The node requires benchmark data to be synced weekly via n8n workflow.
241
+
242
+ ### n8n Workflow: `TN_benchmark_sync_artificial_analysis`
243
+
244
+ **Trigger**: Weekly (Sunday 03:00 UTC) + Manual + Webhook
245
+
246
+ **Data Flow**:
247
+ ```
248
+ [1. Fetch Artificial Analysis] ──────┐
249
+
250
+ [2. Fetch OpenRouter Catalog] ────────┼──► [4. Merge All Data]
251
+ │ │
252
+ [3. Fetch Existing Mappings] ────────┘ ▼
253
+ [5. Process & Match Models]
254
+
255
+ ┌──────────────┴──────────────┐
256
+ ▼ ▼
257
+ [6. Upsert Benchmarks] [7. Store Unmatched]
258
+ │ │
259
+ └──────────────┬──────────────┘
260
+
261
+ [8. Merge Results]
262
+
263
+
264
+ [9. Telegram Notification]
265
+ ```
266
+
267
+ **Detailed Documentation**: See [docs/BENCHMARK_SYSTEM.md](docs/BENCHMARK_SYSTEM.md)
268
+
269
+ ### Manual Sync Trigger
270
+
271
+ ```bash
272
+ # Via n8n Webhook
273
+ curl -X POST https://n8n.dev.ecolights.de/webhook/benchmark-sync
274
+ ```
275
+
276
+ ## Development
277
+
278
+ ```bash
279
+ # Install dependencies
280
+ pnpm install
281
+
282
+ # Build
283
+ pnpm build
284
+
285
+ # Watch mode
286
+ pnpm dev
287
+
288
+ # Lint
289
+ pnpm lint
290
+
291
+ # Format
292
+ pnpm format
293
+ ```
294
+
295
+ ## License
296
+
297
+ MIT
298
+
299
+ ## Author
300
+
301
+ EcoLights (dev@ecolights.de)
302
+
303
+ ## Links
304
+
305
+ - [OpenRouter](https://openrouter.ai)
306
+ - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)
307
+ - [Supabase](https://supabase.com)
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class OpenRouterApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ test: ICredentialTestRequest;
9
+ }
10
+ //# sourceMappingURL=OpenRouterApi.credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenRouterApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/OpenRouterApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,qBAAa,aAAc,YAAW,eAAe;IACnD,IAAI,SAAmB;IACvB,WAAW,SAAoB;IAC/B,gBAAgB,SAA+C;IAC/D,UAAU,EAAE,eAAe,EAAE,CAY3B;IAEF,YAAY,EAAE,oBAAoB,CAOhC;IAEF,IAAI,EAAE,sBAAsB,CAM1B;CACH"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenRouterApi = void 0;
4
+ class OpenRouterApi {
5
+ name = 'openRouterApi';
6
+ displayName = 'OpenRouter API';
7
+ documentationUrl = 'https://openrouter.ai/docs#authentication';
8
+ properties = [
9
+ {
10
+ displayName: 'API Key',
11
+ name: 'apiKey',
12
+ type: 'string',
13
+ typeOptions: {
14
+ password: true,
15
+ },
16
+ default: '',
17
+ required: true,
18
+ description: 'Your OpenRouter API key from openrouter.ai/keys',
19
+ },
20
+ ];
21
+ authenticate = {
22
+ type: 'generic',
23
+ properties: {
24
+ headers: {
25
+ Authorization: '=Bearer {{$credentials.apiKey}}',
26
+ },
27
+ },
28
+ };
29
+ test = {
30
+ request: {
31
+ baseURL: 'https://openrouter.ai/api/v1',
32
+ url: '/models',
33
+ method: 'GET',
34
+ },
35
+ };
36
+ }
37
+ exports.OpenRouterApi = OpenRouterApi;
38
+ //# sourceMappingURL=OpenRouterApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenRouterApi.credentials.js","sourceRoot":"","sources":["../../credentials/OpenRouterApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,aAAa;IACxB,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,gBAAgB,CAAC;IAC/B,gBAAgB,GAAG,2CAA2C,CAAC;IAC/D,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,iDAAiD;SAC/D;KACF,CAAC;IAEF,YAAY,GAAyB;QACnC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,aAAa,EAAE,iCAAiC;aACjD;SACF;KACF,CAAC;IAEF,IAAI,GAA2B;QAC7B,OAAO,EAAE;YACP,OAAO,EAAE,8BAA8B;YACvC,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,KAAK;SACd;KACF,CAAC;CACH;AAlCD,sCAkCC"}
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class SupabaseModelCatalogApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ test: ICredentialTestRequest;
9
+ }
10
+ //# sourceMappingURL=SupabaseModelCatalogApi.credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseModelCatalogApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/SupabaseModelCatalogApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,IAAI,SAA6B;IACjC,WAAW,SAAgC;IAC3C,gBAAgB,SAA0C;IAC1D,UAAU,EAAE,eAAe,EAAE,CAsB3B;IAEF,YAAY,EAAE,oBAAoB,CAQhC;IAEF,IAAI,EAAE,sBAAsB,CAS1B;CACH"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SupabaseModelCatalogApi = void 0;
4
+ class SupabaseModelCatalogApi {
5
+ name = 'supabaseModelCatalogApi';
6
+ displayName = 'Supabase Model Catalog API';
7
+ documentationUrl = 'https://supabase.com/docs/guides/api';
8
+ properties = [
9
+ {
10
+ displayName: 'Supabase URL',
11
+ name: 'url',
12
+ type: 'string',
13
+ default: '',
14
+ placeholder: 'https://your-project.supabase.co',
15
+ description: 'Your Supabase project URL',
16
+ required: true,
17
+ },
18
+ {
19
+ displayName: 'API Key',
20
+ name: 'apiKey',
21
+ type: 'string',
22
+ typeOptions: {
23
+ password: true,
24
+ },
25
+ default: '',
26
+ description: 'Your Supabase anon/public key. Found in Project Settings > API.',
27
+ required: true,
28
+ },
29
+ ];
30
+ authenticate = {
31
+ type: 'generic',
32
+ properties: {
33
+ headers: {
34
+ apikey: '={{$credentials.apiKey}}',
35
+ Authorization: '=Bearer {{$credentials.apiKey}}',
36
+ },
37
+ },
38
+ };
39
+ test = {
40
+ request: {
41
+ baseURL: '={{$credentials.url}}',
42
+ url: '/rest/v1/models_catalog?select=model&limit=1',
43
+ headers: {
44
+ apikey: '={{$credentials.apiKey}}',
45
+ Authorization: '=Bearer {{$credentials.apiKey}}',
46
+ },
47
+ },
48
+ };
49
+ }
50
+ exports.SupabaseModelCatalogApi = SupabaseModelCatalogApi;
51
+ //# sourceMappingURL=SupabaseModelCatalogApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseModelCatalogApi.credentials.js","sourceRoot":"","sources":["../../credentials/SupabaseModelCatalogApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,uBAAuB;IAClC,IAAI,GAAG,yBAAyB,CAAC;IACjC,WAAW,GAAG,4BAA4B,CAAC;IAC3C,gBAAgB,GAAG,sCAAsC,CAAC;IAC1D,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,kCAAkC;YAC/C,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,WAAW,EACT,iEAAiE;YACnE,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;IAEF,YAAY,GAAyB;QACnC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,MAAM,EAAE,0BAA0B;gBAClC,aAAa,EAAE,iCAAiC;aACjD;SACF;KACF,CAAC;IAEF,IAAI,GAA2B;QAC7B,OAAO,EAAE;YACP,OAAO,EAAE,uBAAuB;YAChC,GAAG,EAAE,8CAA8C;YACnD,OAAO,EAAE;gBACP,MAAM,EAAE,0BAA0B;gBAClC,aAAa,EAAE,iCAAiC;aACjD;SACF;KACF,CAAC;CACH;AAhDD,0DAgDC"}
@@ -0,0 +1,11 @@
1
+ import type { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class OpenRouterChatCompletion implements INodeType {
3
+ description: INodeTypeDescription;
4
+ methods: {
5
+ loadOptions: {
6
+ getModels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
7
+ };
8
+ };
9
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
10
+ }
11
+ //# sourceMappingURL=OpenRouterChatCompletion.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenRouterChatCompletion.node.d.ts","sourceRoot":"","sources":["../../../nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAyCtB,qBAAa,wBAAyB,YAAW,SAAS;IACxD,WAAW,EAAE,oBAAoB,CAgK/B;IAEF,OAAO;;4BAEmB,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;;MA0C/E;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAuHxE"}