hedgequantx 2.4.43 → 2.5.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 +1 -1
- package/package.json +1 -1
- package/src/app.js +44 -6
- package/src/menus/ai-agent.js +406 -0
- package/src/menus/dashboard.js +17 -5
- package/src/services/ai/index.js +371 -0
- package/src/services/ai/providers/index.js +490 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Providers Configuration
|
|
3
|
+
* Each provider has connection options (API Key, Plans, etc.)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const PROVIDERS = {
|
|
7
|
+
// ========== UNIFIED PROVIDERS (RECOMMENDED) ==========
|
|
8
|
+
openrouter: {
|
|
9
|
+
id: 'openrouter',
|
|
10
|
+
name: 'OPENROUTER (RECOMMENDED)',
|
|
11
|
+
description: '1 API key for 100+ models',
|
|
12
|
+
category: 'unified',
|
|
13
|
+
models: [
|
|
14
|
+
'anthropic/claude-sonnet-4',
|
|
15
|
+
'anthropic/claude-3-opus',
|
|
16
|
+
'openai/gpt-4o',
|
|
17
|
+
'openai/gpt-4-turbo',
|
|
18
|
+
'google/gemini-pro-1.5',
|
|
19
|
+
'meta-llama/llama-3-70b',
|
|
20
|
+
'mistralai/mistral-large',
|
|
21
|
+
'deepseek/deepseek-chat'
|
|
22
|
+
],
|
|
23
|
+
defaultModel: 'anthropic/claude-sonnet-4',
|
|
24
|
+
options: [
|
|
25
|
+
{
|
|
26
|
+
id: 'api_key',
|
|
27
|
+
label: 'API KEY',
|
|
28
|
+
description: [
|
|
29
|
+
'Get key at openrouter.ai/keys',
|
|
30
|
+
'Access to Claude, GPT-4, Gemini, Llama & more',
|
|
31
|
+
'Pay-per-use, no subscriptions'
|
|
32
|
+
],
|
|
33
|
+
fields: ['apiKey'],
|
|
34
|
+
url: 'https://openrouter.ai/keys'
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
endpoint: 'https://openrouter.ai/api/v1'
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
// ========== DIRECT PROVIDERS ==========
|
|
41
|
+
anthropic: {
|
|
42
|
+
id: 'anthropic',
|
|
43
|
+
name: 'CLAUDE (ANTHROPIC)',
|
|
44
|
+
description: 'Direct connection to Claude',
|
|
45
|
+
category: 'direct',
|
|
46
|
+
models: ['claude-sonnet-4-5-20250929', 'claude-3-opus-20240229', 'claude-3-haiku-20240307'],
|
|
47
|
+
defaultModel: 'claude-sonnet-4-5-20250929',
|
|
48
|
+
options: [
|
|
49
|
+
{
|
|
50
|
+
id: 'api_key',
|
|
51
|
+
label: 'API KEY (PAY-PER-USE)',
|
|
52
|
+
description: [
|
|
53
|
+
'Get key at console.anthropic.com',
|
|
54
|
+
'~$0.10 per trading session'
|
|
55
|
+
],
|
|
56
|
+
fields: ['apiKey'],
|
|
57
|
+
url: 'https://console.anthropic.com'
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'max_plan',
|
|
61
|
+
label: 'MAX PLAN ($100/MONTH)',
|
|
62
|
+
description: [
|
|
63
|
+
'Subscribe at claude.ai',
|
|
64
|
+
'Unlimited usage'
|
|
65
|
+
],
|
|
66
|
+
fields: ['sessionKey'],
|
|
67
|
+
url: 'https://claude.ai'
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
endpoint: 'https://api.anthropic.com/v1'
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
openai: {
|
|
74
|
+
id: 'openai',
|
|
75
|
+
name: 'OPENAI (GPT-4)',
|
|
76
|
+
description: 'Direct connection to GPT-4',
|
|
77
|
+
category: 'direct',
|
|
78
|
+
models: ['gpt-4o', 'gpt-4-turbo', 'gpt-4o-mini', 'gpt-3.5-turbo'],
|
|
79
|
+
defaultModel: 'gpt-4o',
|
|
80
|
+
options: [
|
|
81
|
+
{
|
|
82
|
+
id: 'api_key',
|
|
83
|
+
label: 'API KEY (PAY-PER-USE)',
|
|
84
|
+
description: [
|
|
85
|
+
'Get key at platform.openai.com',
|
|
86
|
+
'~$0.15 per trading session'
|
|
87
|
+
],
|
|
88
|
+
fields: ['apiKey'],
|
|
89
|
+
url: 'https://platform.openai.com/api-keys'
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'plus_plan',
|
|
93
|
+
label: 'PLUS PLAN ($20/MONTH)',
|
|
94
|
+
description: [
|
|
95
|
+
'Subscribe at chat.openai.com',
|
|
96
|
+
'GPT-4 access included'
|
|
97
|
+
],
|
|
98
|
+
fields: ['accessToken'],
|
|
99
|
+
url: 'https://chat.openai.com'
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
endpoint: 'https://api.openai.com/v1'
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
gemini: {
|
|
106
|
+
id: 'gemini',
|
|
107
|
+
name: 'GEMINI (GOOGLE)',
|
|
108
|
+
description: 'Direct connection to Gemini',
|
|
109
|
+
category: 'direct',
|
|
110
|
+
models: ['gemini-1.5-pro', 'gemini-1.5-flash', 'gemini-pro'],
|
|
111
|
+
defaultModel: 'gemini-1.5-flash',
|
|
112
|
+
options: [
|
|
113
|
+
{
|
|
114
|
+
id: 'api_key',
|
|
115
|
+
label: 'API KEY (FREE TIER)',
|
|
116
|
+
description: [
|
|
117
|
+
'Get key at aistudio.google.com',
|
|
118
|
+
'Free tier: 60 requests/min'
|
|
119
|
+
],
|
|
120
|
+
fields: ['apiKey'],
|
|
121
|
+
url: 'https://aistudio.google.com/apikey'
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
endpoint: 'https://generativelanguage.googleapis.com/v1'
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
deepseek: {
|
|
128
|
+
id: 'deepseek',
|
|
129
|
+
name: 'DEEPSEEK',
|
|
130
|
+
description: 'Very cheap & capable',
|
|
131
|
+
category: 'direct',
|
|
132
|
+
models: ['deepseek-chat', 'deepseek-coder'],
|
|
133
|
+
defaultModel: 'deepseek-chat',
|
|
134
|
+
options: [
|
|
135
|
+
{
|
|
136
|
+
id: 'api_key',
|
|
137
|
+
label: 'API KEY (VERY CHEAP)',
|
|
138
|
+
description: [
|
|
139
|
+
'Get key at platform.deepseek.com',
|
|
140
|
+
'~$0.02 per trading session'
|
|
141
|
+
],
|
|
142
|
+
fields: ['apiKey'],
|
|
143
|
+
url: 'https://platform.deepseek.com'
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
endpoint: 'https://api.deepseek.com/v1'
|
|
147
|
+
},
|
|
148
|
+
|
|
149
|
+
groq: {
|
|
150
|
+
id: 'groq',
|
|
151
|
+
name: 'GROQ',
|
|
152
|
+
description: 'Ultra fast inference',
|
|
153
|
+
category: 'direct',
|
|
154
|
+
models: ['llama-3.3-70b-versatile', 'llama-3.1-8b-instant', 'mixtral-8x7b-32768'],
|
|
155
|
+
defaultModel: 'llama-3.3-70b-versatile',
|
|
156
|
+
options: [
|
|
157
|
+
{
|
|
158
|
+
id: 'api_key',
|
|
159
|
+
label: 'API KEY (FREE TIER)',
|
|
160
|
+
description: [
|
|
161
|
+
'Get key at console.groq.com',
|
|
162
|
+
'Generous free tier',
|
|
163
|
+
'Ultra low latency'
|
|
164
|
+
],
|
|
165
|
+
fields: ['apiKey'],
|
|
166
|
+
url: 'https://console.groq.com/keys'
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
endpoint: 'https://api.groq.com/openai/v1'
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
xai: {
|
|
173
|
+
id: 'xai',
|
|
174
|
+
name: 'GROK (XAI)',
|
|
175
|
+
description: 'Elon Musk\'s Grok AI',
|
|
176
|
+
category: 'direct',
|
|
177
|
+
models: ['grok-beta', 'grok-2'],
|
|
178
|
+
defaultModel: 'grok-beta',
|
|
179
|
+
options: [
|
|
180
|
+
{
|
|
181
|
+
id: 'api_key',
|
|
182
|
+
label: 'API KEY',
|
|
183
|
+
description: [
|
|
184
|
+
'Get key at console.x.ai',
|
|
185
|
+
'Grok models from xAI'
|
|
186
|
+
],
|
|
187
|
+
fields: ['apiKey'],
|
|
188
|
+
url: 'https://console.x.ai'
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
endpoint: 'https://api.x.ai/v1'
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
mistral: {
|
|
195
|
+
id: 'mistral',
|
|
196
|
+
name: 'MISTRAL',
|
|
197
|
+
description: 'European AI leader',
|
|
198
|
+
category: 'direct',
|
|
199
|
+
models: ['mistral-large-latest', 'mistral-medium', 'mistral-small'],
|
|
200
|
+
defaultModel: 'mistral-large-latest',
|
|
201
|
+
options: [
|
|
202
|
+
{
|
|
203
|
+
id: 'api_key',
|
|
204
|
+
label: 'API KEY',
|
|
205
|
+
description: [
|
|
206
|
+
'Get key at console.mistral.ai',
|
|
207
|
+
'Fast European models'
|
|
208
|
+
],
|
|
209
|
+
fields: ['apiKey'],
|
|
210
|
+
url: 'https://console.mistral.ai'
|
|
211
|
+
}
|
|
212
|
+
],
|
|
213
|
+
endpoint: 'https://api.mistral.ai/v1'
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
perplexity: {
|
|
217
|
+
id: 'perplexity',
|
|
218
|
+
name: 'PERPLEXITY',
|
|
219
|
+
description: 'Real-time web search AI',
|
|
220
|
+
category: 'direct',
|
|
221
|
+
models: ['llama-3.1-sonar-large-128k-online', 'llama-3.1-sonar-small-128k-online', 'llama-3.1-sonar-huge-128k-online'],
|
|
222
|
+
defaultModel: 'llama-3.1-sonar-large-128k-online',
|
|
223
|
+
options: [
|
|
224
|
+
{
|
|
225
|
+
id: 'api_key',
|
|
226
|
+
label: 'API KEY',
|
|
227
|
+
description: [
|
|
228
|
+
'Get key at perplexity.ai/settings/api',
|
|
229
|
+
'Real-time market news & data',
|
|
230
|
+
'Web search integrated'
|
|
231
|
+
],
|
|
232
|
+
fields: ['apiKey'],
|
|
233
|
+
url: 'https://www.perplexity.ai/settings/api'
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
endpoint: 'https://api.perplexity.ai'
|
|
237
|
+
},
|
|
238
|
+
|
|
239
|
+
together: {
|
|
240
|
+
id: 'together',
|
|
241
|
+
name: 'TOGETHER AI',
|
|
242
|
+
description: 'Open source models, fast & cheap',
|
|
243
|
+
category: 'direct',
|
|
244
|
+
models: ['meta-llama/Llama-3.3-70B-Instruct-Turbo', 'mistralai/Mixtral-8x22B-Instruct-v0.1', 'Qwen/Qwen2.5-72B-Instruct-Turbo'],
|
|
245
|
+
defaultModel: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
|
|
246
|
+
options: [
|
|
247
|
+
{
|
|
248
|
+
id: 'api_key',
|
|
249
|
+
label: 'API KEY',
|
|
250
|
+
description: [
|
|
251
|
+
'Get key at api.together.xyz',
|
|
252
|
+
'100+ open source models',
|
|
253
|
+
'Fast inference, good pricing'
|
|
254
|
+
],
|
|
255
|
+
fields: ['apiKey'],
|
|
256
|
+
url: 'https://api.together.xyz/settings/api-keys'
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
endpoint: 'https://api.together.xyz/v1'
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
// ========== CHINESE PROVIDERS ==========
|
|
263
|
+
qwen: {
|
|
264
|
+
id: 'qwen',
|
|
265
|
+
name: 'QWEN (ALIBABA)',
|
|
266
|
+
description: 'Alibaba\'s top AI model',
|
|
267
|
+
category: 'direct',
|
|
268
|
+
models: ['qwen-turbo', 'qwen-plus', 'qwen-max'],
|
|
269
|
+
defaultModel: 'qwen-plus',
|
|
270
|
+
options: [
|
|
271
|
+
{
|
|
272
|
+
id: 'api_key',
|
|
273
|
+
label: 'API KEY (DASHSCOPE)',
|
|
274
|
+
description: [
|
|
275
|
+
'Get key at dashscope.aliyun.com',
|
|
276
|
+
'Qwen2.5 models',
|
|
277
|
+
'Very competitive pricing'
|
|
278
|
+
],
|
|
279
|
+
fields: ['apiKey'],
|
|
280
|
+
url: 'https://dashscope.console.aliyun.com/apiKey'
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
endpoint: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
|
|
284
|
+
},
|
|
285
|
+
|
|
286
|
+
moonshot: {
|
|
287
|
+
id: 'moonshot',
|
|
288
|
+
name: 'MOONSHOT (KIMI)',
|
|
289
|
+
description: '200K context window',
|
|
290
|
+
category: 'direct',
|
|
291
|
+
models: ['moonshot-v1-8k', 'moonshot-v1-32k', 'moonshot-v1-128k'],
|
|
292
|
+
defaultModel: 'moonshot-v1-32k',
|
|
293
|
+
options: [
|
|
294
|
+
{
|
|
295
|
+
id: 'api_key',
|
|
296
|
+
label: 'API KEY',
|
|
297
|
+
description: [
|
|
298
|
+
'Get key at platform.moonshot.cn',
|
|
299
|
+
'Up to 200K context',
|
|
300
|
+
'Good for long documents'
|
|
301
|
+
],
|
|
302
|
+
fields: ['apiKey'],
|
|
303
|
+
url: 'https://platform.moonshot.cn/console/api-keys'
|
|
304
|
+
}
|
|
305
|
+
],
|
|
306
|
+
endpoint: 'https://api.moonshot.cn/v1'
|
|
307
|
+
},
|
|
308
|
+
|
|
309
|
+
yi: {
|
|
310
|
+
id: 'yi',
|
|
311
|
+
name: '01.AI (YI)',
|
|
312
|
+
description: 'Yi models by Kai-Fu Lee',
|
|
313
|
+
category: 'direct',
|
|
314
|
+
models: ['yi-large', 'yi-medium', 'yi-spark'],
|
|
315
|
+
defaultModel: 'yi-large',
|
|
316
|
+
options: [
|
|
317
|
+
{
|
|
318
|
+
id: 'api_key',
|
|
319
|
+
label: 'API KEY',
|
|
320
|
+
description: [
|
|
321
|
+
'Get key at platform.01.ai',
|
|
322
|
+
'Yi-Large: GPT-4 level',
|
|
323
|
+
'Affordable pricing'
|
|
324
|
+
],
|
|
325
|
+
fields: ['apiKey'],
|
|
326
|
+
url: 'https://platform.01.ai'
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
endpoint: 'https://api.01.ai/v1'
|
|
330
|
+
},
|
|
331
|
+
|
|
332
|
+
zhipu: {
|
|
333
|
+
id: 'zhipu',
|
|
334
|
+
name: 'ZHIPU AI (GLM)',
|
|
335
|
+
description: 'ChatGLM models',
|
|
336
|
+
category: 'direct',
|
|
337
|
+
models: ['glm-4-plus', 'glm-4', 'glm-4-flash'],
|
|
338
|
+
defaultModel: 'glm-4',
|
|
339
|
+
options: [
|
|
340
|
+
{
|
|
341
|
+
id: 'api_key',
|
|
342
|
+
label: 'API KEY',
|
|
343
|
+
description: [
|
|
344
|
+
'Get key at open.bigmodel.cn',
|
|
345
|
+
'ChatGLM-4 models',
|
|
346
|
+
'Strong multilingual'
|
|
347
|
+
],
|
|
348
|
+
fields: ['apiKey'],
|
|
349
|
+
url: 'https://open.bigmodel.cn/usercenter/apikeys'
|
|
350
|
+
}
|
|
351
|
+
],
|
|
352
|
+
endpoint: 'https://open.bigmodel.cn/api/paas/v4'
|
|
353
|
+
},
|
|
354
|
+
|
|
355
|
+
baichuan: {
|
|
356
|
+
id: 'baichuan',
|
|
357
|
+
name: 'BAICHUAN',
|
|
358
|
+
description: 'Chinese language specialist',
|
|
359
|
+
category: 'direct',
|
|
360
|
+
models: ['Baichuan4', 'Baichuan3-Turbo', 'Baichuan2-Turbo'],
|
|
361
|
+
defaultModel: 'Baichuan4',
|
|
362
|
+
options: [
|
|
363
|
+
{
|
|
364
|
+
id: 'api_key',
|
|
365
|
+
label: 'API KEY',
|
|
366
|
+
description: [
|
|
367
|
+
'Get key at platform.baichuan-ai.com',
|
|
368
|
+
'Best for Chinese content',
|
|
369
|
+
'Competitive pricing'
|
|
370
|
+
],
|
|
371
|
+
fields: ['apiKey'],
|
|
372
|
+
url: 'https://platform.baichuan-ai.com/console/apikey'
|
|
373
|
+
}
|
|
374
|
+
],
|
|
375
|
+
endpoint: 'https://api.baichuan-ai.com/v1'
|
|
376
|
+
},
|
|
377
|
+
|
|
378
|
+
// ========== LOCAL / FREE ==========
|
|
379
|
+
ollama: {
|
|
380
|
+
id: 'ollama',
|
|
381
|
+
name: 'OLLAMA (LOCAL - FREE)',
|
|
382
|
+
description: '100% free, runs locally',
|
|
383
|
+
category: 'local',
|
|
384
|
+
models: ['llama3', 'llama3.1', 'mistral', 'codellama', 'phi3', 'gemma2'],
|
|
385
|
+
defaultModel: 'llama3.1',
|
|
386
|
+
options: [
|
|
387
|
+
{
|
|
388
|
+
id: 'local',
|
|
389
|
+
label: 'LOCAL INSTALLATION (FREE)',
|
|
390
|
+
description: [
|
|
391
|
+
'Download at ollama.ai',
|
|
392
|
+
'100% free, no API key needed',
|
|
393
|
+
'Run: ollama pull llama3.1'
|
|
394
|
+
],
|
|
395
|
+
fields: ['endpoint'],
|
|
396
|
+
url: 'https://ollama.ai',
|
|
397
|
+
defaultEndpoint: 'http://localhost:11434'
|
|
398
|
+
}
|
|
399
|
+
]
|
|
400
|
+
},
|
|
401
|
+
|
|
402
|
+
lmstudio: {
|
|
403
|
+
id: 'lmstudio',
|
|
404
|
+
name: 'LM STUDIO (LOCAL - FREE)',
|
|
405
|
+
description: 'Local with GUI',
|
|
406
|
+
category: 'local',
|
|
407
|
+
models: [],
|
|
408
|
+
defaultModel: '',
|
|
409
|
+
options: [
|
|
410
|
+
{
|
|
411
|
+
id: 'local',
|
|
412
|
+
label: 'LOCAL SERVER (FREE)',
|
|
413
|
+
description: [
|
|
414
|
+
'Download at lmstudio.ai',
|
|
415
|
+
'GUI for local models',
|
|
416
|
+
'OpenAI-compatible API'
|
|
417
|
+
],
|
|
418
|
+
fields: ['endpoint'],
|
|
419
|
+
url: 'https://lmstudio.ai',
|
|
420
|
+
defaultEndpoint: 'http://localhost:1234/v1'
|
|
421
|
+
}
|
|
422
|
+
]
|
|
423
|
+
},
|
|
424
|
+
|
|
425
|
+
// ========== CUSTOM ==========
|
|
426
|
+
custom: {
|
|
427
|
+
id: 'custom',
|
|
428
|
+
name: 'CUSTOM ENDPOINT',
|
|
429
|
+
description: 'Any OpenAI-compatible API',
|
|
430
|
+
category: 'custom',
|
|
431
|
+
models: [],
|
|
432
|
+
defaultModel: '',
|
|
433
|
+
options: [
|
|
434
|
+
{
|
|
435
|
+
id: 'custom',
|
|
436
|
+
label: 'CUSTOM OPENAI-COMPATIBLE API',
|
|
437
|
+
description: [
|
|
438
|
+
'Self-hosted models',
|
|
439
|
+
'vLLM, TGI, etc.',
|
|
440
|
+
'Any OpenAI-compatible endpoint'
|
|
441
|
+
],
|
|
442
|
+
fields: ['endpoint', 'apiKey', 'model']
|
|
443
|
+
}
|
|
444
|
+
]
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Get all providers
|
|
450
|
+
*/
|
|
451
|
+
const getProviders = () => Object.values(PROVIDERS);
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Get providers by category
|
|
455
|
+
*/
|
|
456
|
+
const getProvidersByCategory = (category) => {
|
|
457
|
+
return Object.values(PROVIDERS).filter(p => p.category === category);
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Get provider by ID
|
|
462
|
+
*/
|
|
463
|
+
const getProvider = (id) => PROVIDERS[id] || null;
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Get provider options
|
|
467
|
+
*/
|
|
468
|
+
const getProviderOptions = (id) => {
|
|
469
|
+
const provider = PROVIDERS[id];
|
|
470
|
+
return provider ? provider.options : [];
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Get categories
|
|
475
|
+
*/
|
|
476
|
+
const getCategories = () => [
|
|
477
|
+
{ id: 'unified', name: 'UNIFIED (RECOMMENDED)', description: '1 API key for multiple models' },
|
|
478
|
+
{ id: 'direct', name: 'DIRECT PROVIDERS', description: 'Connect directly to each provider' },
|
|
479
|
+
{ id: 'local', name: 'LOCAL (FREE)', description: 'Run models on your machine' },
|
|
480
|
+
{ id: 'custom', name: 'CUSTOM', description: 'Self-hosted solutions' }
|
|
481
|
+
];
|
|
482
|
+
|
|
483
|
+
module.exports = {
|
|
484
|
+
PROVIDERS,
|
|
485
|
+
getProviders,
|
|
486
|
+
getProvidersByCategory,
|
|
487
|
+
getProvider,
|
|
488
|
+
getProviderOptions,
|
|
489
|
+
getCategories
|
|
490
|
+
};
|