mcp4openapi 0.3.1 → 0.3.3
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 +7 -0
- package/dist/src/core/cli-config.d.ts.map +1 -1
- package/dist/src/core/cli-config.js +2 -0
- package/dist/src/core/cli-config.js.map +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +18 -3
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/index.js +0 -0
- package/dist/src/profile/profile-allowlist.d.ts +18 -0
- package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
- package/dist/src/profile/profile-allowlist.js +68 -0
- package/dist/src/profile/profile-allowlist.js.map +1 -0
- package/dist/src/profile/profile-registry.d.ts +5 -0
- package/dist/src/profile/profile-registry.d.ts.map +1 -1
- package/dist/src/profile/profile-registry.js +38 -14
- package/dist/src/profile/profile-registry.js.map +1 -1
- package/package.json +2 -2
- package/profiles/gitlab/developer-profile-oauth.json +243 -41
- package/profiles/gitlab/developer-profile-oauth.test.json +1009 -5
- package/profiles/gitlab/openapi.yaml +1419 -164
- package/profiles/gitlab/profile-optimized-oauth.json +785 -0
- package/profiles/gitlab/profile-optimized-oauth.test.json +1566 -0
- package/profiles/grafana/openapi.json +28078 -0
- package/profiles/grafana/profile.json +1083 -0
- package/profiles/grafana/profile.test.json +235 -0
- package/profiles/mattermost/openapi.yaml +27434 -0
- package/profiles/mattermost/profile.json +463 -0
- package/profiles/mattermost/profile.test.json +607 -0
- package/profiles/n8n/profile-optimized.json +1002 -364
- package/profiles/n8n/profile-optimized.test.json +43 -43
- package/dist/src/argument-normalizer.d.ts +0 -5
- package/dist/src/argument-normalizer.d.ts.map +0 -1
- package/dist/src/argument-normalizer.js +0 -61
- package/dist/src/argument-normalizer.js.map +0 -1
- package/dist/src/cli-config.d.ts +0 -9
- package/dist/src/cli-config.d.ts.map +0 -1
- package/dist/src/cli-config.js +0 -111
- package/dist/src/cli-config.js.map +0 -1
- package/dist/src/composite-executor.d.ts +0 -77
- package/dist/src/composite-executor.d.ts.map +0 -1
- package/dist/src/composite-executor.js +0 -193
- package/dist/src/composite-executor.js.map +0 -1
- package/dist/src/constants.d.ts +0 -85
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -85
- package/dist/src/constants.js.map +0 -1
- package/dist/src/dag-executor.d.ts +0 -49
- package/dist/src/dag-executor.d.ts.map +0 -1
- package/dist/src/dag-executor.js +0 -138
- package/dist/src/dag-executor.js.map +0 -1
- package/dist/src/errors.d.ts +0 -59
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js +0 -119
- package/dist/src/errors.js.map +0 -1
- package/dist/src/filtering.d.ts +0 -19
- package/dist/src/filtering.d.ts.map +0 -1
- package/dist/src/filtering.js +0 -292
- package/dist/src/filtering.js.map +0 -1
- package/dist/src/http-client-factory.d.ts +0 -62
- package/dist/src/http-client-factory.d.ts.map +0 -1
- package/dist/src/http-client-factory.js +0 -133
- package/dist/src/http-client-factory.js.map +0 -1
- package/dist/src/http-transport-config.d.ts +0 -6
- package/dist/src/http-transport-config.d.ts.map +0 -1
- package/dist/src/http-transport-config.js +0 -47
- package/dist/src/http-transport-config.js.map +0 -1
- package/dist/src/http-transport.d.ts +0 -316
- package/dist/src/http-transport.d.ts.map +0 -1
- package/dist/src/http-transport.js +0 -2412
- package/dist/src/http-transport.js.map +0 -1
- package/dist/src/interceptors.d.ts +0 -116
- package/dist/src/interceptors.d.ts.map +0 -1
- package/dist/src/interceptors.js +0 -392
- package/dist/src/interceptors.js.map +0 -1
- package/dist/src/jsonrpc-validator.d.ts +0 -27
- package/dist/src/jsonrpc-validator.d.ts.map +0 -1
- package/dist/src/jsonrpc-validator.js +0 -58
- package/dist/src/jsonrpc-validator.js.map +0 -1
- package/dist/src/logger.d.ts +0 -59
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -177
- package/dist/src/logger.js.map +0 -1
- package/dist/src/mcp-server-manager.d.ts +0 -20
- package/dist/src/mcp-server-manager.d.ts.map +0 -1
- package/dist/src/mcp-server-manager.js +0 -38
- package/dist/src/mcp-server-manager.js.map +0 -1
- package/dist/src/mcp-server.d.ts +0 -203
- package/dist/src/mcp-server.d.ts.map +0 -1
- package/dist/src/mcp-server.js +0 -1369
- package/dist/src/mcp-server.js.map +0 -1
- package/dist/src/metrics.d.ts +0 -97
- package/dist/src/metrics.d.ts.map +0 -1
- package/dist/src/metrics.js +0 -273
- package/dist/src/metrics.js.map +0 -1
- package/dist/src/naming-warnings.d.ts +0 -23
- package/dist/src/naming-warnings.d.ts.map +0 -1
- package/dist/src/naming-warnings.js +0 -83
- package/dist/src/naming-warnings.js.map +0 -1
- package/dist/src/naming.d.ts +0 -58
- package/dist/src/naming.d.ts.map +0 -1
- package/dist/src/naming.js +0 -510
- package/dist/src/naming.js.map +0 -1
- package/dist/src/oauth-provider.d.ts +0 -131
- package/dist/src/oauth-provider.d.ts.map +0 -1
- package/dist/src/oauth-provider.js +0 -836
- package/dist/src/oauth-provider.js.map +0 -1
- package/dist/src/openapi-parser.d.ts +0 -70
- package/dist/src/openapi-parser.d.ts.map +0 -1
- package/dist/src/openapi-parser.js +0 -436
- package/dist/src/openapi-parser.js.map +0 -1
- package/dist/src/profile-loader.d.ts +0 -78
- package/dist/src/profile-loader.d.ts.map +0 -1
- package/dist/src/profile-loader.js +0 -483
- package/dist/src/profile-loader.js.map +0 -1
- package/dist/src/profile-registry.d.ts +0 -18
- package/dist/src/profile-registry.d.ts.map +0 -1
- package/dist/src/profile-registry.js +0 -26
- package/dist/src/profile-registry.js.map +0 -1
- package/dist/src/profile-resolver.d.ts +0 -19
- package/dist/src/profile-resolver.d.ts.map +0 -1
- package/dist/src/profile-resolver.js +0 -167
- package/dist/src/profile-resolver.js.map +0 -1
- package/dist/src/proxy-executor.d.ts +0 -86
- package/dist/src/proxy-executor.d.ts.map +0 -1
- package/dist/src/proxy-executor.js +0 -497
- package/dist/src/proxy-executor.js.map +0 -1
- package/dist/src/schema-validator.d.ts +0 -30
- package/dist/src/schema-validator.d.ts.map +0 -1
- package/dist/src/schema-validator.js +0 -128
- package/dist/src/schema-validator.js.map +0 -1
- package/dist/src/startup-profile.d.ts +0 -17
- package/dist/src/startup-profile.d.ts.map +0 -1
- package/dist/src/startup-profile.js +0 -30
- package/dist/src/startup-profile.js.map +0 -1
- package/dist/src/startup-validation.d.ts +0 -11
- package/dist/src/startup-validation.d.ts.map +0 -1
- package/dist/src/startup-validation.js +0 -21
- package/dist/src/startup-validation.js.map +0 -1
- package/dist/src/tool-filter.d.ts +0 -65
- package/dist/src/tool-filter.d.ts.map +0 -1
- package/dist/src/tool-filter.js +0 -471
- package/dist/src/tool-filter.js.map +0 -1
- package/dist/src/tool-generator.d.ts +0 -67
- package/dist/src/tool-generator.d.ts.map +0 -1
- package/dist/src/tool-generator.js +0 -182
- package/dist/src/tool-generator.js.map +0 -1
- package/dist/src/validation-utils.d.ts +0 -49
- package/dist/src/validation-utils.d.ts.map +0 -1
- package/dist/src/validation-utils.js +0 -138
- package/dist/src/validation-utils.js.map +0 -1
- package/profiles/gitlab/developer-profile.json +0 -1508
- package/profiles/gitlab/developer-profile.test.json +0 -3432
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Profile resolver
|
|
3
|
-
*
|
|
4
|
-
* Why: Allow selecting profiles by ID or alias without hardcoding paths.
|
|
5
|
-
*/
|
|
6
|
-
export interface ResolvedProfile {
|
|
7
|
-
profileId: string;
|
|
8
|
-
profileName: string;
|
|
9
|
-
profileAliases?: string[];
|
|
10
|
-
profilePath: string;
|
|
11
|
-
specPath: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function resolveProfileById(profileId: string, profilesDir?: string, options?: {
|
|
14
|
-
specPathOverride?: string;
|
|
15
|
-
}): Promise<ResolvedProfile>;
|
|
16
|
-
export declare function resolveProfileFromPath(profilePath: string, options?: {
|
|
17
|
-
specPathOverride?: string;
|
|
18
|
-
}): Promise<ResolvedProfile>;
|
|
19
|
-
//# sourceMappingURL=profile-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-resolver.d.ts","sourceRoot":"","sources":["../../src/profile-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuID,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,eAAe,CAAC,CA0B1B;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,eAAe,CAAC,CAiB1B"}
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Profile resolver
|
|
3
|
-
*
|
|
4
|
-
* Why: Allow selecting profiles by ID or alias without hardcoding paths.
|
|
5
|
-
*/
|
|
6
|
-
import fs from 'node:fs/promises';
|
|
7
|
-
import path from 'node:path';
|
|
8
|
-
import { ConfigurationError } from './errors.js';
|
|
9
|
-
const DEFAULT_PROFILES_DIR = 'profiles';
|
|
10
|
-
function normalizeProfilesDir(profilesDir) {
|
|
11
|
-
const base = profilesDir && profilesDir.trim().length > 0 ? profilesDir : DEFAULT_PROFILES_DIR;
|
|
12
|
-
return path.isAbsolute(base) ? base : path.resolve(process.cwd(), base);
|
|
13
|
-
}
|
|
14
|
-
function isProfileJson(data) {
|
|
15
|
-
if (!data || typeof data !== 'object')
|
|
16
|
-
return false;
|
|
17
|
-
const obj = data;
|
|
18
|
-
return typeof obj.profile_name === 'string' && Array.isArray(obj.tools);
|
|
19
|
-
}
|
|
20
|
-
function isHttpUrl(value) {
|
|
21
|
-
try {
|
|
22
|
-
const url = new URL(value);
|
|
23
|
-
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function normalizeSpecPath(value) {
|
|
30
|
-
if (typeof value !== 'string')
|
|
31
|
-
return undefined;
|
|
32
|
-
const trimmed = value.trim();
|
|
33
|
-
return trimmed.length > 0 ? trimmed : undefined;
|
|
34
|
-
}
|
|
35
|
-
function resolveSpecPath(profilePath, specPathRaw, overrideSpecPath) {
|
|
36
|
-
const trimmed = normalizeSpecPath(specPathRaw);
|
|
37
|
-
if (!trimmed) {
|
|
38
|
-
const override = normalizeSpecPath(overrideSpecPath);
|
|
39
|
-
if (override) {
|
|
40
|
-
return override;
|
|
41
|
-
}
|
|
42
|
-
throw new ConfigurationError('Profile is missing openapi_spec_path', { profilePath });
|
|
43
|
-
}
|
|
44
|
-
if (isHttpUrl(trimmed)) {
|
|
45
|
-
return trimmed;
|
|
46
|
-
}
|
|
47
|
-
return path.isAbsolute(trimmed) ? trimmed : path.resolve(path.dirname(profilePath), trimmed);
|
|
48
|
-
}
|
|
49
|
-
async function loadProfileIndexEntry(profilePath) {
|
|
50
|
-
const raw = await fs.readFile(profilePath, 'utf-8');
|
|
51
|
-
let parsed;
|
|
52
|
-
try {
|
|
53
|
-
parsed = JSON.parse(raw);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
throw new ConfigurationError('Failed to parse profile JSON', {
|
|
57
|
-
profilePath,
|
|
58
|
-
error: String(error),
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
if (!isProfileJson(parsed)) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
const profile = parsed;
|
|
65
|
-
const profileName = profile.profile_name;
|
|
66
|
-
const profileId = typeof profile.profile_id === 'string' && profile.profile_id.trim().length > 0
|
|
67
|
-
? profile.profile_id
|
|
68
|
-
: profileName;
|
|
69
|
-
const aliases = Array.isArray(profile.profile_aliases)
|
|
70
|
-
? profile.profile_aliases.filter((alias) => typeof alias === 'string')
|
|
71
|
-
: [];
|
|
72
|
-
return {
|
|
73
|
-
profileId,
|
|
74
|
-
profileName,
|
|
75
|
-
aliases,
|
|
76
|
-
profilePath,
|
|
77
|
-
specPathRaw: typeof profile.openapi_spec_path === 'string' ? profile.openapi_spec_path : undefined,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
async function collectProfileFiles(dir) {
|
|
81
|
-
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
82
|
-
const files = [];
|
|
83
|
-
for (const entry of entries) {
|
|
84
|
-
if (entry.name.startsWith('.'))
|
|
85
|
-
continue;
|
|
86
|
-
const fullPath = path.join(dir, entry.name);
|
|
87
|
-
if (entry.isDirectory()) {
|
|
88
|
-
files.push(...await collectProfileFiles(fullPath));
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (!entry.isFile())
|
|
92
|
-
continue;
|
|
93
|
-
if (!entry.name.endsWith('.json'))
|
|
94
|
-
continue;
|
|
95
|
-
if (entry.name.endsWith('.test.json'))
|
|
96
|
-
continue;
|
|
97
|
-
files.push(fullPath);
|
|
98
|
-
}
|
|
99
|
-
return files;
|
|
100
|
-
}
|
|
101
|
-
async function buildProfileIndex(profilesDir) {
|
|
102
|
-
let entries;
|
|
103
|
-
try {
|
|
104
|
-
entries = await collectProfileFiles(profilesDir);
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
throw new ConfigurationError('Profiles directory not found', {
|
|
108
|
-
profilesDir,
|
|
109
|
-
error: String(error),
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
const profiles = [];
|
|
113
|
-
for (const filePath of entries) {
|
|
114
|
-
const entry = await loadProfileIndexEntry(filePath);
|
|
115
|
-
if (entry)
|
|
116
|
-
profiles.push(entry);
|
|
117
|
-
}
|
|
118
|
-
return profiles;
|
|
119
|
-
}
|
|
120
|
-
function matchProfiles(profileId, profiles) {
|
|
121
|
-
return profiles.filter(profile => {
|
|
122
|
-
if (profile.profileId === profileId)
|
|
123
|
-
return true;
|
|
124
|
-
if (profile.profileName === profileId)
|
|
125
|
-
return true;
|
|
126
|
-
return profile.aliases.includes(profileId);
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
export async function resolveProfileById(profileId, profilesDir, options) {
|
|
130
|
-
const resolvedDir = normalizeProfilesDir(profilesDir);
|
|
131
|
-
const profiles = await buildProfileIndex(resolvedDir);
|
|
132
|
-
const matches = matchProfiles(profileId, profiles);
|
|
133
|
-
if (matches.length === 0) {
|
|
134
|
-
throw new ConfigurationError('Profile not found', { profileId, profilesDir: resolvedDir });
|
|
135
|
-
}
|
|
136
|
-
if (matches.length > 1) {
|
|
137
|
-
throw new ConfigurationError('Profile ID or alias is not unique', {
|
|
138
|
-
profileId,
|
|
139
|
-
matches: matches.map(m => ({ profileName: m.profileName, profilePath: m.profilePath })),
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
const match = matches[0];
|
|
143
|
-
const specPath = resolveSpecPath(match.profilePath, match.specPathRaw, options?.specPathOverride);
|
|
144
|
-
return {
|
|
145
|
-
profileId: match.profileId,
|
|
146
|
-
profileName: match.profileName,
|
|
147
|
-
profileAliases: match.aliases,
|
|
148
|
-
profilePath: match.profilePath,
|
|
149
|
-
specPath,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
export async function resolveProfileFromPath(profilePath, options) {
|
|
153
|
-
const resolvedPath = path.isAbsolute(profilePath) ? profilePath : path.resolve(process.cwd(), profilePath);
|
|
154
|
-
const entry = await loadProfileIndexEntry(resolvedPath);
|
|
155
|
-
if (!entry) {
|
|
156
|
-
throw new ConfigurationError('Profile file does not look like a valid profile', { profilePath: resolvedPath });
|
|
157
|
-
}
|
|
158
|
-
const specPath = resolveSpecPath(resolvedPath, entry.specPathRaw, options?.specPathOverride);
|
|
159
|
-
return {
|
|
160
|
-
profileId: entry.profileId,
|
|
161
|
-
profileName: entry.profileName,
|
|
162
|
-
profileAliases: entry.aliases,
|
|
163
|
-
profilePath: resolvedPath,
|
|
164
|
-
specPath,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
//# sourceMappingURL=profile-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-resolver.js","sourceRoot":"","sources":["../../src/profile-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proxy download executor for fetching binary content through API
|
|
3
|
-
*
|
|
4
|
-
* Why: LLM needs file content but URLs require authentication.
|
|
5
|
-
* This executor fetches metadata, extracts URL, downloads content,
|
|
6
|
-
* and returns base64-encoded result.
|
|
7
|
-
*/
|
|
8
|
-
import type { ProxyDownloadOperation } from './types/profile.js';
|
|
9
|
-
import type { ResponseContext, AuthCredentials } from './interceptors.js';
|
|
10
|
-
export interface DebugLogger {
|
|
11
|
-
debug(message: string, context?: Record<string, unknown>): void;
|
|
12
|
-
warn?(message: string, context?: Record<string, unknown>): void;
|
|
13
|
-
}
|
|
14
|
-
export interface HttpClient {
|
|
15
|
-
request(method: string, url: string, options?: {
|
|
16
|
-
headers?: Record<string, string>;
|
|
17
|
-
body?: unknown;
|
|
18
|
-
}): Promise<ResponseContext>;
|
|
19
|
-
getBaseUrl(): string;
|
|
20
|
-
}
|
|
21
|
-
export interface ProxyDownloadResult {
|
|
22
|
-
/** Original metadata from API */
|
|
23
|
-
metadata: Record<string, unknown>;
|
|
24
|
-
/** Base64-encoded file content */
|
|
25
|
-
content: string;
|
|
26
|
-
/** MIME type of the file */
|
|
27
|
-
mimeType: string;
|
|
28
|
-
/** File size in bytes */
|
|
29
|
-
size: number;
|
|
30
|
-
/** Original filename if available */
|
|
31
|
-
fileName?: string;
|
|
32
|
-
}
|
|
33
|
-
export declare class ProxyDownloadExecutor {
|
|
34
|
-
private httpClient;
|
|
35
|
-
private logger;
|
|
36
|
-
constructor(httpClient: HttpClient, logger?: DebugLogger);
|
|
37
|
-
/**
|
|
38
|
-
* Execute proxy download operation
|
|
39
|
-
*
|
|
40
|
-
* @param operation Proxy download configuration
|
|
41
|
-
* @param path API path with substituted parameters
|
|
42
|
-
* @param authCredentials Auth credentials (headers + query params) for download
|
|
43
|
-
*/
|
|
44
|
-
execute(operation: ProxyDownloadOperation, metadataRequest: {
|
|
45
|
-
path: string;
|
|
46
|
-
method: string;
|
|
47
|
-
}, authCredentials: AuthCredentials, directDownloadRequest?: {
|
|
48
|
-
path: string;
|
|
49
|
-
method: string;
|
|
50
|
-
}): Promise<ProxyDownloadResult>;
|
|
51
|
-
private resolveMaxSize;
|
|
52
|
-
/**
|
|
53
|
-
* Extract URL from metadata using dot-notation path
|
|
54
|
-
*/
|
|
55
|
-
private extractUrl;
|
|
56
|
-
private extractNestedString;
|
|
57
|
-
private extractNestedNumber;
|
|
58
|
-
private extractNestedValue;
|
|
59
|
-
private getBaseOrigin;
|
|
60
|
-
private resolveHttpUrl;
|
|
61
|
-
private enforceDownloadPolicy;
|
|
62
|
-
/**
|
|
63
|
-
* Check if MIME type matches whitelist (supports wildcards like 'image/*')
|
|
64
|
-
*/
|
|
65
|
-
private isMimeTypeAllowed;
|
|
66
|
-
/**
|
|
67
|
-
* Download binary content and return base64
|
|
68
|
-
*
|
|
69
|
-
* @param skipAuth If true, download URL is fetched without authentication headers/params
|
|
70
|
-
* Metadata endpoint still requires auth, only the final download is unauthenticated
|
|
71
|
-
*/
|
|
72
|
-
private downloadWithAuth;
|
|
73
|
-
private buildDownloadUrlWithOptionalQueryAuth;
|
|
74
|
-
private isRedirectStatus;
|
|
75
|
-
private resolveRedirectTarget;
|
|
76
|
-
private enforceAllowedDownloadTarget;
|
|
77
|
-
private lookupAllIpAddresses;
|
|
78
|
-
private isAllowedHost;
|
|
79
|
-
private isDisallowedIPv4;
|
|
80
|
-
private isDisallowedIPv6;
|
|
81
|
-
/**
|
|
82
|
-
* Handle inline data URLs (data:mime;base64,...)
|
|
83
|
-
*/
|
|
84
|
-
private downloadFromDataUrl;
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=proxy-executor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-executor.d.ts","sourceRoot":"","sources":["../../src/proxy-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAM1E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CACL,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GACA,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,UAAU,IAAI,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;gBADN,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,WAAiC;IAGnD;;;;;;OAMG;IACG,OAAO,CACX,SAAS,EAAE,sBAAsB,EACjC,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EACjD,eAAe,EAAE,eAAe,EAChC,qBAAqB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,mBAAmB,CAAC;IA6H/B,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;YA6CR,qBAAqB;IAuBnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;OAKG;YACW,gBAAgB;IAqG9B,OAAO,CAAC,qCAAqC;IAiB7C,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;YAef,4BAA4B;YAsE5B,oBAAoB;IAkClC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAa5B"}
|