@tradejs/node 1.0.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 +72 -0
- package/dist/ai-NNJ3RLLL.mjs +19 -0
- package/dist/backtest.d.mts +9 -0
- package/dist/backtest.d.ts +9 -0
- package/dist/backtest.js +6561 -0
- package/dist/backtest.mjs +487 -0
- package/dist/chunk-4ZPGZWO7.mjs +13 -0
- package/dist/chunk-5YNMSWL3.mjs +0 -0
- package/dist/chunk-6DZX6EAA.mjs +37 -0
- package/dist/chunk-CVTV6S2V.mjs +94 -0
- package/dist/chunk-DE7ADBIR.mjs +204 -0
- package/dist/chunk-E2QNOA5M.mjs +227 -0
- package/dist/chunk-GKDBAF3A.mjs +5500 -0
- package/dist/chunk-MHCXPD2B.mjs +201 -0
- package/dist/chunk-PXJJPAQT.mjs +49 -0
- package/dist/chunk-ZIMX3JX2.mjs +294 -0
- package/dist/cli.d.mts +12 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +6385 -0
- package/dist/cli.mjs +548 -0
- package/dist/connectors.d.mts +20 -0
- package/dist/connectors.d.ts +20 -0
- package/dist/connectors.js +468 -0
- package/dist/connectors.mjs +28 -0
- package/dist/constants.d.mts +6 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.js +40 -0
- package/dist/constants.mjs +13 -0
- package/dist/pine.d.mts +8 -0
- package/dist/pine.d.ts +8 -0
- package/dist/pine.js +128 -0
- package/dist/pine.mjs +11 -0
- package/dist/registry.d.mts +15 -0
- package/dist/registry.d.ts +15 -0
- package/dist/registry.js +439 -0
- package/dist/registry.mjs +29 -0
- package/dist/strategies.d.mts +71 -0
- package/dist/strategies.d.ts +71 -0
- package/dist/strategies.js +7210 -0
- package/dist/strategies.mjs +847 -0
- package/package.json +69 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// src/tradejsConfig.ts
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { createRequire } from "module";
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from "url";
|
|
6
|
+
import { logger } from "@tradejs/infra/logger";
|
|
7
|
+
var CONFIG_FILE_NAMES = [
|
|
8
|
+
"tradejs.config.ts",
|
|
9
|
+
"tradejs.config.mts",
|
|
10
|
+
"tradejs.config.js",
|
|
11
|
+
"tradejs.config.mjs",
|
|
12
|
+
"tradejs.config.cjs"
|
|
13
|
+
];
|
|
14
|
+
var TS_MODULE_RE = /\.(cts|mts|ts)$/i;
|
|
15
|
+
var cachedByCwd = /* @__PURE__ */ new Map();
|
|
16
|
+
var announcedConfigFile = /* @__PURE__ */ new Set();
|
|
17
|
+
var tsNodeRegistered = false;
|
|
18
|
+
var getTradejsProjectCwd = (cwd) => {
|
|
19
|
+
const explicit = String(cwd ?? "").trim();
|
|
20
|
+
if (explicit) {
|
|
21
|
+
return path.resolve(explicit);
|
|
22
|
+
}
|
|
23
|
+
const fromEnv = String(process.env.PROJECT_CWD || "").trim();
|
|
24
|
+
if (fromEnv) {
|
|
25
|
+
return path.resolve(fromEnv);
|
|
26
|
+
}
|
|
27
|
+
return process.cwd();
|
|
28
|
+
};
|
|
29
|
+
var normalizeConfig = (rawConfig) => {
|
|
30
|
+
if (!rawConfig || typeof rawConfig !== "object") {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
const config = rawConfig;
|
|
34
|
+
const strategies = Array.isArray(config.strategies) ? config.strategies.map((value) => String(value || "").trim()).filter(Boolean) : [];
|
|
35
|
+
const indicators = Array.isArray(config.indicators) ? config.indicators.map((value) => String(value || "").trim()).filter(Boolean) : [];
|
|
36
|
+
const connectors = Array.isArray(config.connectors) ? config.connectors.map((value) => String(value || "").trim()).filter(Boolean) : [];
|
|
37
|
+
return {
|
|
38
|
+
strategies,
|
|
39
|
+
indicators,
|
|
40
|
+
connectors
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
var getRequireFn = (cwd = getTradejsProjectCwd()) => createRequire(path.join(path.resolve(cwd), "__tradejs_loader__.js"));
|
|
44
|
+
var ensureTsNodeRegistered = async () => {
|
|
45
|
+
if (tsNodeRegistered) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const tsNodeModule = await import("ts-node");
|
|
49
|
+
const tsNode = tsNodeModule.default ?? tsNodeModule;
|
|
50
|
+
tsNode.register?.({
|
|
51
|
+
transpileOnly: true,
|
|
52
|
+
compilerOptions: {
|
|
53
|
+
module: "commonjs",
|
|
54
|
+
moduleResolution: "node"
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
tsNodeRegistered = true;
|
|
58
|
+
};
|
|
59
|
+
var toImportSpecifier = (moduleName) => {
|
|
60
|
+
if (moduleName.startsWith("file://")) {
|
|
61
|
+
return moduleName;
|
|
62
|
+
}
|
|
63
|
+
if (path.isAbsolute(moduleName)) {
|
|
64
|
+
return pathToFileURL(moduleName).href;
|
|
65
|
+
}
|
|
66
|
+
return moduleName;
|
|
67
|
+
};
|
|
68
|
+
var isTsModulePath = (moduleName) => TS_MODULE_RE.test(moduleName.split("?")[0]);
|
|
69
|
+
var isRelativeModulePath = (moduleName) => moduleName.startsWith("./") || moduleName.startsWith("../");
|
|
70
|
+
var isBareModuleSpecifier = (moduleName) => {
|
|
71
|
+
const normalized = String(moduleName ?? "").trim();
|
|
72
|
+
if (!normalized) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (normalized.startsWith("file://") || path.isAbsolute(normalized) || isRelativeModulePath(normalized)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
};
|
|
80
|
+
var importConfigFile = async (configFilePath) => {
|
|
81
|
+
const ext = path.extname(configFilePath).toLowerCase();
|
|
82
|
+
const configFileUrl = `${toImportSpecifier(configFilePath)}?t=${Date.now()}`;
|
|
83
|
+
if (ext === ".ts" || ext === ".mts") {
|
|
84
|
+
const requireFn = getRequireFn(path.dirname(configFilePath));
|
|
85
|
+
await ensureTsNodeRegistered();
|
|
86
|
+
return requireFn(configFilePath);
|
|
87
|
+
}
|
|
88
|
+
return import(
|
|
89
|
+
/* webpackIgnore: true */
|
|
90
|
+
configFileUrl
|
|
91
|
+
);
|
|
92
|
+
};
|
|
93
|
+
var importTradejsModule = async (moduleName) => {
|
|
94
|
+
const normalized = String(moduleName ?? "").trim();
|
|
95
|
+
if (!normalized) {
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
let modulePath = normalized;
|
|
99
|
+
if (normalized.startsWith("file://")) {
|
|
100
|
+
try {
|
|
101
|
+
modulePath = fileURLToPath(normalized);
|
|
102
|
+
} catch {
|
|
103
|
+
modulePath = normalized;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const requireFn = getRequireFn(
|
|
107
|
+
path.isAbsolute(modulePath) ? path.dirname(modulePath) : getTradejsProjectCwd()
|
|
108
|
+
);
|
|
109
|
+
if (isTsModulePath(modulePath)) {
|
|
110
|
+
await ensureTsNodeRegistered();
|
|
111
|
+
return requireFn(modulePath);
|
|
112
|
+
}
|
|
113
|
+
if (isBareModuleSpecifier(normalized)) {
|
|
114
|
+
return requireFn(normalized);
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
return await import(
|
|
118
|
+
/* webpackIgnore: true */
|
|
119
|
+
toImportSpecifier(normalized)
|
|
120
|
+
);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
if (isTsModulePath(modulePath)) {
|
|
123
|
+
await ensureTsNodeRegistered();
|
|
124
|
+
return requireFn(modulePath);
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
var resolveExportedConfig = (moduleExports) => {
|
|
130
|
+
const candidate = moduleExports && typeof moduleExports === "object" && "default" in moduleExports ? moduleExports.default : moduleExports;
|
|
131
|
+
return normalizeConfig(candidate);
|
|
132
|
+
};
|
|
133
|
+
var findConfigFilePath = (cwd) => {
|
|
134
|
+
let currentDir = path.resolve(cwd);
|
|
135
|
+
while (true) {
|
|
136
|
+
for (const fileName of CONFIG_FILE_NAMES) {
|
|
137
|
+
const fullPath = path.join(currentDir, fileName);
|
|
138
|
+
if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {
|
|
139
|
+
return fullPath;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const parentDir = path.dirname(currentDir);
|
|
143
|
+
if (parentDir === currentDir) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
currentDir = parentDir;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
var resolvePluginModuleSpecifier = (moduleName, cwd = getTradejsProjectCwd()) => {
|
|
150
|
+
const normalized = String(moduleName ?? "").trim();
|
|
151
|
+
if (!normalized) {
|
|
152
|
+
return "";
|
|
153
|
+
}
|
|
154
|
+
if (normalized.startsWith("file://")) {
|
|
155
|
+
try {
|
|
156
|
+
return fileURLToPath(normalized);
|
|
157
|
+
} catch {
|
|
158
|
+
return normalized;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (path.isAbsolute(normalized)) {
|
|
162
|
+
return normalized;
|
|
163
|
+
}
|
|
164
|
+
if (isRelativeModulePath(normalized)) {
|
|
165
|
+
return path.resolve(cwd, normalized);
|
|
166
|
+
}
|
|
167
|
+
return normalized;
|
|
168
|
+
};
|
|
169
|
+
var loadTradejsConfig = async (cwd = getTradejsProjectCwd()) => {
|
|
170
|
+
const cached = cachedByCwd.get(cwd);
|
|
171
|
+
if (cached) {
|
|
172
|
+
return cached;
|
|
173
|
+
}
|
|
174
|
+
const configFilePath = findConfigFilePath(cwd);
|
|
175
|
+
if (!configFilePath) {
|
|
176
|
+
cachedByCwd.set(cwd, {});
|
|
177
|
+
return {};
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const moduleExports = await importConfigFile(configFilePath);
|
|
181
|
+
const config = resolveExportedConfig(moduleExports);
|
|
182
|
+
cachedByCwd.set(cwd, config);
|
|
183
|
+
if (!announcedConfigFile.has(configFilePath)) {
|
|
184
|
+
announcedConfigFile.add(configFilePath);
|
|
185
|
+
logger.log("info", "Loaded TradeJS config: %s", configFilePath);
|
|
186
|
+
}
|
|
187
|
+
return config;
|
|
188
|
+
} catch (error) {
|
|
189
|
+
logger.log(
|
|
190
|
+
"warn",
|
|
191
|
+
"Failed to load TradeJS config from %s: %s",
|
|
192
|
+
configFilePath,
|
|
193
|
+
String(error)
|
|
194
|
+
);
|
|
195
|
+
cachedByCwd.set(cwd, {});
|
|
196
|
+
return {};
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
export {
|
|
201
|
+
importTradejsModule,
|
|
202
|
+
resolvePluginModuleSpecifier,
|
|
203
|
+
loadTradejsConfig
|
|
204
|
+
};
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import {
|
|
2
|
+
importTradejsModule,
|
|
3
|
+
loadTradejsConfig,
|
|
4
|
+
resolvePluginModuleSpecifier
|
|
5
|
+
} from "./chunk-DE7ADBIR.mjs";
|
|
6
|
+
|
|
7
|
+
// src/connectorsRegistry.ts
|
|
8
|
+
import { logger } from "@tradejs/infra/logger";
|
|
9
|
+
var connectorCreators = /* @__PURE__ */ new Map();
|
|
10
|
+
var providerToConnectorName = /* @__PURE__ */ new Map();
|
|
11
|
+
var pluginsLoadPromise = null;
|
|
12
|
+
var BUILTIN_CONNECTOR_NAMES = {
|
|
13
|
+
ByBit: "ByBit",
|
|
14
|
+
Binance: "Binance",
|
|
15
|
+
Coinbase: "Coinbase",
|
|
16
|
+
Test: "Test"
|
|
17
|
+
};
|
|
18
|
+
var normalizeProvider = (value) => String(value ?? "").trim().toLowerCase();
|
|
19
|
+
var toUniqueModules = (modules = []) => [
|
|
20
|
+
...new Set(modules.map((moduleName) => moduleName.trim()).filter(Boolean))
|
|
21
|
+
];
|
|
22
|
+
var findConnectorNameInsensitive = (name) => {
|
|
23
|
+
const normalized = name.trim().toLowerCase();
|
|
24
|
+
if (!normalized) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
for (const existingName of connectorCreators.keys()) {
|
|
28
|
+
if (existingName.toLowerCase() === normalized) {
|
|
29
|
+
return existingName;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
34
|
+
var normalizeProviders = (providers, connectorName) => {
|
|
35
|
+
const list = Array.isArray(providers) ? providers.map((item) => normalizeProvider(item)).filter(Boolean) : [];
|
|
36
|
+
const deduped = [...new Set(list)];
|
|
37
|
+
if (deduped.length) {
|
|
38
|
+
return deduped;
|
|
39
|
+
}
|
|
40
|
+
return [normalizeProvider(connectorName)];
|
|
41
|
+
};
|
|
42
|
+
var registerProvider = (provider, connectorName, source) => {
|
|
43
|
+
const existing = providerToConnectorName.get(provider);
|
|
44
|
+
if (existing && existing !== connectorName) {
|
|
45
|
+
logger.warn(
|
|
46
|
+
'Skip duplicate connector provider "%s" from %s: already mapped to %s',
|
|
47
|
+
provider,
|
|
48
|
+
source,
|
|
49
|
+
existing
|
|
50
|
+
);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
providerToConnectorName.set(provider, connectorName);
|
|
54
|
+
};
|
|
55
|
+
var registerEntry = (entry, source) => {
|
|
56
|
+
const connectorName = String(entry?.name ?? "").trim();
|
|
57
|
+
if (!connectorName) {
|
|
58
|
+
logger.warn("Skip connector entry without name from %s", source);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (typeof entry.creator !== "function") {
|
|
62
|
+
logger.warn(
|
|
63
|
+
'Skip connector entry "%s" from %s: creator must be a function',
|
|
64
|
+
connectorName,
|
|
65
|
+
source
|
|
66
|
+
);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const existingByName = findConnectorNameInsensitive(connectorName);
|
|
70
|
+
if (existingByName) {
|
|
71
|
+
logger.warn(
|
|
72
|
+
'Skip duplicate connector "%s" from %s: already registered as %s',
|
|
73
|
+
connectorName,
|
|
74
|
+
source,
|
|
75
|
+
existingByName
|
|
76
|
+
);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
connectorCreators.set(connectorName, entry.creator);
|
|
80
|
+
const providers = normalizeProviders(entry.providers, connectorName);
|
|
81
|
+
for (const provider of providers) {
|
|
82
|
+
registerProvider(provider, connectorName, source);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var registerEntries = (entries, source) => {
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
registerEntry(entry, source);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var extractConnectorPluginDefinition = (moduleExport) => {
|
|
91
|
+
if (!moduleExport || typeof moduleExport !== "object") {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const candidate = moduleExport;
|
|
95
|
+
if (Array.isArray(candidate.connectorEntries)) {
|
|
96
|
+
return {
|
|
97
|
+
connectorEntries: candidate.connectorEntries
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const defaultExport = candidate.default;
|
|
101
|
+
if (defaultExport && Array.isArray(defaultExport.connectorEntries)) {
|
|
102
|
+
return {
|
|
103
|
+
connectorEntries: defaultExport.connectorEntries
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
};
|
|
108
|
+
var importConnectorPluginModule = async (moduleName) => {
|
|
109
|
+
if (typeof importTradejsModule === "function") {
|
|
110
|
+
return importTradejsModule(moduleName);
|
|
111
|
+
}
|
|
112
|
+
return import(
|
|
113
|
+
/* webpackIgnore: true */
|
|
114
|
+
moduleName
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
var ensureConnectorPluginsLoaded = async () => {
|
|
118
|
+
if (pluginsLoadPromise) {
|
|
119
|
+
return pluginsLoadPromise;
|
|
120
|
+
}
|
|
121
|
+
pluginsLoadPromise = (async () => {
|
|
122
|
+
const config = await loadTradejsConfig();
|
|
123
|
+
const connectorModules = toUniqueModules(config.connectors);
|
|
124
|
+
if (!connectorModules.length) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
for (const moduleName of connectorModules) {
|
|
128
|
+
try {
|
|
129
|
+
const resolvedModuleName = resolvePluginModuleSpecifier(moduleName);
|
|
130
|
+
const moduleExport = await importConnectorPluginModule(resolvedModuleName);
|
|
131
|
+
const pluginDefinition = extractConnectorPluginDefinition(moduleExport);
|
|
132
|
+
if (!pluginDefinition) {
|
|
133
|
+
logger.warn(
|
|
134
|
+
'Skip connector plugin "%s": export { connectorEntries } is missing',
|
|
135
|
+
moduleName
|
|
136
|
+
);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
registerEntries(pluginDefinition.connectorEntries, moduleName);
|
|
140
|
+
} catch (error) {
|
|
141
|
+
logger.warn(
|
|
142
|
+
'Failed to load connector plugin "%s": %s',
|
|
143
|
+
moduleName,
|
|
144
|
+
String(error)
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
})();
|
|
149
|
+
return pluginsLoadPromise;
|
|
150
|
+
};
|
|
151
|
+
var getConnectorCreatorByName = async (connectorName) => {
|
|
152
|
+
await ensureConnectorPluginsLoaded();
|
|
153
|
+
const raw = String(connectorName ?? "").trim();
|
|
154
|
+
if (!raw) {
|
|
155
|
+
return void 0;
|
|
156
|
+
}
|
|
157
|
+
const direct = connectorCreators.get(raw);
|
|
158
|
+
if (direct) {
|
|
159
|
+
return direct;
|
|
160
|
+
}
|
|
161
|
+
const existing = findConnectorNameInsensitive(raw);
|
|
162
|
+
if (!existing) {
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
return connectorCreators.get(existing);
|
|
166
|
+
};
|
|
167
|
+
var getConnectorNameByProvider = async (provider) => {
|
|
168
|
+
await ensureConnectorPluginsLoaded();
|
|
169
|
+
const normalized = normalizeProvider(provider);
|
|
170
|
+
if (!normalized) {
|
|
171
|
+
return void 0;
|
|
172
|
+
}
|
|
173
|
+
return providerToConnectorName.get(normalized);
|
|
174
|
+
};
|
|
175
|
+
var getConnectorCreatorByProvider = async (provider) => {
|
|
176
|
+
const connectorName = await getConnectorNameByProvider(provider);
|
|
177
|
+
if (!connectorName) {
|
|
178
|
+
return void 0;
|
|
179
|
+
}
|
|
180
|
+
return connectorCreators.get(connectorName);
|
|
181
|
+
};
|
|
182
|
+
var resolveConnectorName = async (providerOrName) => {
|
|
183
|
+
const raw = String(providerOrName ?? "").trim();
|
|
184
|
+
if (!raw) {
|
|
185
|
+
return void 0;
|
|
186
|
+
}
|
|
187
|
+
const byProvider = await getConnectorNameByProvider(raw);
|
|
188
|
+
if (byProvider) {
|
|
189
|
+
return byProvider;
|
|
190
|
+
}
|
|
191
|
+
const byName = await getConnectorCreatorByName(raw);
|
|
192
|
+
if (!byName) {
|
|
193
|
+
return void 0;
|
|
194
|
+
}
|
|
195
|
+
return findConnectorNameInsensitive(raw) ?? void 0;
|
|
196
|
+
};
|
|
197
|
+
var getAvailableConnectorNames = async () => {
|
|
198
|
+
await ensureConnectorPluginsLoaded();
|
|
199
|
+
return [...connectorCreators.keys()].sort((a, b) => a.localeCompare(b));
|
|
200
|
+
};
|
|
201
|
+
var getAvailableConnectorProviders = async () => {
|
|
202
|
+
await ensureConnectorPluginsLoaded();
|
|
203
|
+
return [...providerToConnectorName.keys()].sort((a, b) => a.localeCompare(b));
|
|
204
|
+
};
|
|
205
|
+
var registerConnectorEntries = (entries) => {
|
|
206
|
+
registerEntries(entries, "runtime");
|
|
207
|
+
};
|
|
208
|
+
var resetConnectorRegistryCache = () => {
|
|
209
|
+
connectorCreators.clear();
|
|
210
|
+
providerToConnectorName.clear();
|
|
211
|
+
pluginsLoadPromise = null;
|
|
212
|
+
};
|
|
213
|
+
var DEFAULT_CONNECTOR_NAME = BUILTIN_CONNECTOR_NAMES.ByBit;
|
|
214
|
+
|
|
215
|
+
export {
|
|
216
|
+
BUILTIN_CONNECTOR_NAMES,
|
|
217
|
+
ensureConnectorPluginsLoaded,
|
|
218
|
+
getConnectorCreatorByName,
|
|
219
|
+
getConnectorNameByProvider,
|
|
220
|
+
getConnectorCreatorByProvider,
|
|
221
|
+
resolveConnectorName,
|
|
222
|
+
getAvailableConnectorNames,
|
|
223
|
+
getAvailableConnectorProviders,
|
|
224
|
+
registerConnectorEntries,
|
|
225
|
+
resetConnectorRegistryCache,
|
|
226
|
+
DEFAULT_CONNECTOR_NAME
|
|
227
|
+
};
|