@omnicross/core 0.2.0 → 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.
- package/dist/{BuiltinToolExecutor-CS2WpXhM.d.cts → BuiltinToolExecutor-BHgH-EaZ.d.cts} +25 -2
- package/dist/{BuiltinToolExecutor-BluWyeob.d.ts → BuiltinToolExecutor-Bi1LmiTP.d.ts} +25 -2
- package/dist/{CompletionService-BiJqftc-.d.cts → CompletionService-BniP7j88.d.cts} +2 -2
- package/dist/{CompletionService-NXN_Av5W.d.ts → CompletionService-BqrKPwfA.d.ts} +2 -2
- package/dist/{ProviderProxy-CgIcCVwk.d.cts → ProviderProxy-Bz_nkOwq.d.cts} +1 -1
- package/dist/{ProviderProxy-DYoY5XoT.d.ts → ProviderProxy-Ckr6oTrE.d.ts} +1 -1
- package/dist/auth/GeminiCodeAssistProjectResolver.cjs +2 -2
- package/dist/auth/GeminiCodeAssistProjectResolver.js +1 -1
- package/dist/{chunk-FJNKXOWE.js → chunk-2C3TTBS7.js} +4 -4
- package/dist/{chunk-NZYN7C3P.cjs → chunk-2RCCLQYV.cjs} +53 -53
- package/dist/{chunk-CDHS2QDC.js → chunk-4PFWFODB.js} +53 -53
- package/dist/{chunk-OST5RJOJ.cjs → chunk-4Z3ZLLC2.cjs} +13 -7
- package/dist/chunk-7RJI3NDI.cjs +236 -0
- package/dist/chunk-BTBEJRGL.cjs +781 -0
- package/dist/chunk-DBBR6RHF.js +236 -0
- package/dist/chunk-DXWFBBSK.js +781 -0
- package/dist/chunk-E4QHVXV5.cjs +118 -0
- package/dist/chunk-L7O2YQ5O.js +386 -0
- package/dist/{chunk-WSJE42SG.js → chunk-LKDAN4D7.js} +3684 -2462
- package/dist/{chunk-DEIUR2TH.js → chunk-LQYS2N47.js} +12 -8
- package/dist/chunk-MZEGQSKQ.js +118 -0
- package/dist/chunk-PTU7SXM3.cjs +386 -0
- package/dist/{chunk-CTKM773J.cjs → chunk-UPQIWJIE.cjs} +12 -8
- package/dist/{chunk-CFSGYFOZ.js → chunk-VL5TUDTM.js} +7 -1
- package/dist/{chunk-7B56AJBB.cjs → chunk-VSYQ6XYN.cjs} +2233 -1011
- package/dist/{chunk-TVYA5JSQ.cjs → chunk-ZAPN7XA6.cjs} +5 -5
- package/dist/completion/BuiltinToolExecutor.cjs +2 -2
- package/dist/completion/BuiltinToolExecutor.d.cts +3 -1
- package/dist/completion/BuiltinToolExecutor.d.ts +3 -1
- package/dist/completion/BuiltinToolExecutor.js +1 -1
- package/dist/completion/CompletionService.cjs +11 -10
- package/dist/completion/CompletionService.d.cts +6 -3
- package/dist/completion/CompletionService.d.ts +6 -3
- package/dist/completion/CompletionService.js +10 -9
- package/dist/completion.cjs +11 -10
- package/dist/completion.d.cts +6 -3
- package/dist/completion.d.ts +6 -3
- package/dist/completion.js +10 -9
- package/dist/egress-I46O_p5L.d.cts +126 -0
- package/dist/egress-I46O_p5L.d.ts +126 -0
- package/dist/frontends-Doz0RaWu.d.cts +97 -0
- package/dist/frontends-Doz0RaWu.d.ts +97 -0
- package/dist/image-generation.cjs +2 -2
- package/dist/image-generation.d.cts +7 -4
- package/dist/image-generation.d.ts +7 -4
- package/dist/image-generation.js +1 -1
- package/dist/index.cjs +25 -10
- package/dist/index.d.cts +12 -8
- package/dist/index.d.ts +12 -8
- package/dist/index.js +24 -9
- package/dist/openai-operation.d.cts +4 -1
- package/dist/openai-operation.d.ts +4 -1
- package/dist/outbound-api/routeResolver.d.cts +9 -5
- package/dist/outbound-api/routeResolver.d.ts +9 -5
- package/dist/outbound-api/subscriptionRegistryPort.d.cts +4 -1
- package/dist/outbound-api/subscriptionRegistryPort.d.ts +4 -1
- package/dist/outbound-api/types.d.cts +8 -4
- package/dist/outbound-api/types.d.ts +8 -4
- package/dist/outbound-api.cjs +25 -10
- package/dist/outbound-api.d.cts +117 -8
- package/dist/outbound-api.d.ts +117 -8
- package/dist/outbound-api.js +24 -9
- package/dist/pipeline/AccountAllowanceScheduling.d.cts +8 -4
- package/dist/pipeline/AccountAllowanceScheduling.d.ts +8 -4
- package/dist/pipeline/upstreamFetch.cjs +2 -2
- package/dist/pipeline/upstreamFetch.js +1 -1
- package/dist/ports.d.cts +8 -4
- package/dist/ports.d.ts +8 -4
- package/dist/provider-proxy/ProviderProxy.cjs +11 -10
- package/dist/provider-proxy/ProviderProxy.d.cts +5 -2
- package/dist/provider-proxy/ProviderProxy.d.ts +5 -2
- package/dist/provider-proxy/ProviderProxy.js +10 -9
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +13 -10
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +22 -3
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +22 -3
- package/dist/provider-proxy/ingress/providerProxyShared.js +12 -9
- package/dist/provider-proxy/types.d.cts +4 -1
- package/dist/provider-proxy/types.d.ts +4 -1
- package/dist/provider-proxy.cjs +11 -10
- package/dist/provider-proxy.d.cts +10 -6
- package/dist/provider-proxy.d.ts +10 -6
- package/dist/provider-proxy.js +10 -9
- package/dist/proxy-UZTtjPZx.d.cts +18 -0
- package/dist/proxy-UZTtjPZx.d.ts +18 -0
- package/dist/{routeResolver-rpKQLyDO.d.cts → routeResolver-Da0yvkL1.d.cts} +2 -2
- package/dist/{routeResolver-CTCcSHWu.d.ts → routeResolver-STwMz_G4.d.ts} +2 -2
- package/dist/runtime-5NCT3J3T.cjs +8 -0
- package/dist/runtime-JTHUWCBM.js +8 -0
- package/dist/runtime-t8AZacFF.d.cts +233 -0
- package/dist/runtime-t8AZacFF.d.ts +233 -0
- package/dist/search/api.cjs +766 -0
- package/dist/search/api.d.cts +385 -0
- package/dist/search/api.d.ts +385 -0
- package/dist/search/api.js +766 -0
- package/dist/search/http.cjs +37 -0
- package/dist/search/http.d.cts +323 -0
- package/dist/search/http.d.ts +323 -0
- package/dist/search/http.js +37 -0
- package/dist/search.cjs +57 -0
- package/dist/search.d.cts +113 -0
- package/dist/search.d.ts +113 -0
- package/dist/search.js +57 -0
- package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -3
- package/dist/transformer/transformers/AnthropicTransformer.js +2 -2
- package/dist/transformer/transformers.cjs +7 -7
- package/dist/transformer/transformers.js +6 -6
- package/dist/transformer.cjs +6 -6
- package/dist/transformer.js +5 -5
- package/dist/{types-DsHBBk3h.d.cts → types-BSIJdsyl.d.cts} +15 -0
- package/dist/{types-CbglB73l.d.cts → types-Be-yt_6T.d.cts} +1 -1
- package/dist/{types-CVRge76p.d.ts → types-By9Tg6-I.d.ts} +15 -0
- package/dist/types-CbCZqLGg.d.cts +127 -0
- package/dist/types-CbCZqLGg.d.ts +127 -0
- package/dist/{types-jjU24eYG.d.cts → types-D-oHYusb.d.cts} +73 -4
- package/dist/{types-Bd72H4SB.d.ts → types-Dm4_36V4.d.ts} +1 -1
- package/dist/{types-5T223WYQ.d.ts → types-Dvlpjn0d.d.ts} +73 -4
- package/package.json +6 -3
- package/dist/{chunk-6OC3ORW6.js → chunk-EUZRH544.js} +3 -3
- package/dist/{chunk-SQMAEDNE.cjs → chunk-POUTD5AM.cjs} +2 -2
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/search/egress.ts
|
|
2
|
+
var _dns = require('dns');
|
|
3
|
+
var _net = require('net');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _searchtypes = require('@omnicross/contracts/search-types');
|
|
8
|
+
var _undici = require('undici');
|
|
9
|
+
var DEFAULT_SEARCH_EGRESS_POLICY = Object.freeze({});
|
|
10
|
+
var ALLOWED_SCHEMES = /* @__PURE__ */ new Set(["http:", "https:"]);
|
|
11
|
+
var METADATA_HOSTNAMES = /* @__PURE__ */ new Set(["metadata.google.internal"]);
|
|
12
|
+
var DENIAL_TEXT = Object.freeze({
|
|
13
|
+
scheme: "only http and https are permitted",
|
|
14
|
+
malformed: "the request target is not a valid absolute URL",
|
|
15
|
+
loopback: "loopback addresses are not permitted",
|
|
16
|
+
unspecified: "unspecified addresses are not permitted",
|
|
17
|
+
"link-local": "link-local addresses are not permitted",
|
|
18
|
+
private: "private addresses are not permitted",
|
|
19
|
+
"unique-local": "unique-local addresses are not permitted",
|
|
20
|
+
metadata: "cloud metadata endpoints are not permitted"
|
|
21
|
+
});
|
|
22
|
+
function validateEgressUrl(url, policy = DEFAULT_SEARCH_EGRESS_POLICY, providerId) {
|
|
23
|
+
let parsed;
|
|
24
|
+
try {
|
|
25
|
+
parsed = url instanceof URL ? url : new URL(url);
|
|
26
|
+
} catch (e) {
|
|
27
|
+
throw egressDenied("unknown-host", "malformed", providerId);
|
|
28
|
+
}
|
|
29
|
+
if (!ALLOWED_SCHEMES.has(parsed.protocol)) {
|
|
30
|
+
throw egressDenied(parsed.hostname || "unknown-host", "scheme", providerId, parsed.protocol);
|
|
31
|
+
}
|
|
32
|
+
const hostname = parsed.hostname;
|
|
33
|
+
if (isAllowlisted(hostname, policy)) return parsed;
|
|
34
|
+
const denial = classifyHostname(hostname);
|
|
35
|
+
if (denial) throw egressDenied(hostname, denial, providerId);
|
|
36
|
+
return parsed;
|
|
37
|
+
}
|
|
38
|
+
function assertEgressAddressAllowed(address, hostname, policy = DEFAULT_SEARCH_EGRESS_POLICY, providerId) {
|
|
39
|
+
if (isAllowlisted(hostname, policy)) return;
|
|
40
|
+
const denial = classifyAddress(address);
|
|
41
|
+
if (denial) throw egressDenied(hostname, denial, providerId, void 0, address);
|
|
42
|
+
}
|
|
43
|
+
function isAllowlisted(hostname, policy) {
|
|
44
|
+
const allowed = policy.allowedPrivateHosts;
|
|
45
|
+
if (!allowed || allowed.length === 0) return false;
|
|
46
|
+
const normalized = normalizeHostname(hostname);
|
|
47
|
+
return allowed.some((entry) => normalizeHostname(entry) === normalized);
|
|
48
|
+
}
|
|
49
|
+
function normalizeHostname(hostname) {
|
|
50
|
+
const trimmed = hostname.trim().toLowerCase().replace(/\.+$/, "");
|
|
51
|
+
return trimmed.startsWith("[") && trimmed.endsWith("]") ? trimmed.slice(1, -1) : trimmed;
|
|
52
|
+
}
|
|
53
|
+
function classifyHostname(hostname) {
|
|
54
|
+
const candidate = normalizeHostname(hostname);
|
|
55
|
+
if (candidate === "") return "malformed";
|
|
56
|
+
const version = _net.isIP.call(void 0, candidate);
|
|
57
|
+
if (version !== 0) return classifyAddress(candidate);
|
|
58
|
+
if (candidate === "localhost" || candidate.endsWith(".localhost")) return "loopback";
|
|
59
|
+
if (METADATA_HOSTNAMES.has(candidate)) return "metadata";
|
|
60
|
+
return void 0;
|
|
61
|
+
}
|
|
62
|
+
function classifyAddress(address) {
|
|
63
|
+
const candidate = normalizeHostname(address);
|
|
64
|
+
const version = _net.isIP.call(void 0, candidate);
|
|
65
|
+
if (version === 4) return classifyIPv4(candidate);
|
|
66
|
+
if (version === 6) return classifyIPv6(candidate);
|
|
67
|
+
return "malformed";
|
|
68
|
+
}
|
|
69
|
+
function classifyIPv4(address) {
|
|
70
|
+
const octets = address.split(".").map((part) => Number.parseInt(part, 10));
|
|
71
|
+
if (octets.length !== 4 || octets.some((octet) => !Number.isInteger(octet))) return "malformed";
|
|
72
|
+
const [a, b, c, d] = octets;
|
|
73
|
+
if (a === 127) return "loopback";
|
|
74
|
+
if (a === 0) return "unspecified";
|
|
75
|
+
if (a === 10) return "private";
|
|
76
|
+
if (a === 172 && b >= 16 && b <= 31) return "private";
|
|
77
|
+
if (a === 192 && b === 168) return "private";
|
|
78
|
+
if (a === 169 && b === 254 && c === 169 && d === 254) return "metadata";
|
|
79
|
+
if (a === 169 && b === 254) return "link-local";
|
|
80
|
+
return void 0;
|
|
81
|
+
}
|
|
82
|
+
function classifyIPv6(address) {
|
|
83
|
+
const pieces = parseIPv6Pieces(address);
|
|
84
|
+
if (!pieces) return "malformed";
|
|
85
|
+
const topIsZero = pieces.slice(0, 5).every((piece) => piece === 0);
|
|
86
|
+
if (topIsZero && (pieces[5] === 65535 || pieces[5] === 0)) {
|
|
87
|
+
const embedded = [pieces[6] >> 8, pieces[6] & 255, pieces[7] >> 8, pieces[7] & 255];
|
|
88
|
+
const isLoopbackOrUnspecified = pieces[5] === 0 && pieces[6] === 0 && pieces[7] <= 1;
|
|
89
|
+
if (isLoopbackOrUnspecified) return pieces[7] === 1 ? "loopback" : "unspecified";
|
|
90
|
+
return classifyIPv4(embedded.join("."));
|
|
91
|
+
}
|
|
92
|
+
if ((pieces[0] & 65472) === 65152) return "link-local";
|
|
93
|
+
if ((pieces[0] & 65024) === 64512) return "unique-local";
|
|
94
|
+
return void 0;
|
|
95
|
+
}
|
|
96
|
+
function parseIPv6Pieces(address) {
|
|
97
|
+
let text = address.split("%")[0];
|
|
98
|
+
const lastColon = text.lastIndexOf(":");
|
|
99
|
+
const tail = text.slice(lastColon + 1);
|
|
100
|
+
if (tail.includes(".")) {
|
|
101
|
+
if (_net.isIP.call(void 0, tail) !== 4) return void 0;
|
|
102
|
+
const octets = tail.split(".").map((part) => Number.parseInt(part, 10));
|
|
103
|
+
const high = (octets[0] << 8 | octets[1]).toString(16);
|
|
104
|
+
const low = (octets[2] << 8 | octets[3]).toString(16);
|
|
105
|
+
text = `${text.slice(0, lastColon + 1)}${high}:${low}`;
|
|
106
|
+
}
|
|
107
|
+
const halves = text.split("::");
|
|
108
|
+
if (halves.length > 2) return void 0;
|
|
109
|
+
const head = halves[0] === "" ? [] : halves[0].split(":");
|
|
110
|
+
const rest = halves.length === 2 ? halves[1] === "" ? [] : halves[1].split(":") : [];
|
|
111
|
+
let groups;
|
|
112
|
+
if (halves.length === 1) {
|
|
113
|
+
if (head.length !== 8) return void 0;
|
|
114
|
+
groups = head;
|
|
115
|
+
} else {
|
|
116
|
+
const zeros = 8 - head.length - rest.length;
|
|
117
|
+
if (zeros < 1) return void 0;
|
|
118
|
+
groups = [...head, ...Array.from({ length: zeros }, () => "0"), ...rest];
|
|
119
|
+
}
|
|
120
|
+
const pieces = [];
|
|
121
|
+
for (const group of groups) {
|
|
122
|
+
if (!/^[0-9a-f]{1,4}$/i.test(group)) return void 0;
|
|
123
|
+
pieces.push(Number.parseInt(group, 16));
|
|
124
|
+
}
|
|
125
|
+
return pieces;
|
|
126
|
+
}
|
|
127
|
+
function egressDenied(hostname, reason, providerId, scheme, resolvedAddress) {
|
|
128
|
+
const subject = scheme ? `scheme "${scheme}"` : `host "${hostname}"`;
|
|
129
|
+
const via = resolvedAddress ? ` (resolved to a ${reason} address)` : "";
|
|
130
|
+
const details = { host: hostname, egressClass: reason };
|
|
131
|
+
if (resolvedAddress) details.egressStage = "dns";
|
|
132
|
+
return new (0, _searchtypes.SearchProviderError)(
|
|
133
|
+
"policy_denied",
|
|
134
|
+
`egress policy denied ${subject}${via}: ${DENIAL_TEXT[reason]}`,
|
|
135
|
+
{
|
|
136
|
+
providerId,
|
|
137
|
+
retryable: false,
|
|
138
|
+
details
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
function findEgressDenial(error) {
|
|
143
|
+
let current = error;
|
|
144
|
+
for (let depth = 0; depth < 6 && current !== void 0 && current !== null; depth += 1) {
|
|
145
|
+
if (_searchtypes.isSearchProviderError.call(void 0, current) && current.code === "policy_denied") {
|
|
146
|
+
return current;
|
|
147
|
+
}
|
|
148
|
+
current = current instanceof Error ? current.cause : void 0;
|
|
149
|
+
}
|
|
150
|
+
return void 0;
|
|
151
|
+
}
|
|
152
|
+
function createEgressGuardedLookup(policy = DEFAULT_SEARCH_EGRESS_POLICY, lookupImpl = _dns.lookup) {
|
|
153
|
+
const guarded = (hostname, options, callback) => {
|
|
154
|
+
const requestedAll = Boolean(_optionalChain([options, 'optionalAccess', _ => _.all]));
|
|
155
|
+
const lookupOptions = { ...options, all: true };
|
|
156
|
+
lookupImpl(hostname, lookupOptions, (error, addresses) => {
|
|
157
|
+
if (error) {
|
|
158
|
+
callback(error);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const entries = Array.isArray(addresses) ? addresses : [];
|
|
162
|
+
if (entries.length === 0) {
|
|
163
|
+
callback(new Error(`no addresses resolved for ${hostname}`));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
for (const entry of entries) assertEgressAddressAllowed(entry.address, hostname, policy);
|
|
168
|
+
} catch (denial) {
|
|
169
|
+
callback(denial);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (requestedAll) callback(null, entries);
|
|
173
|
+
else callback(null, entries[0].address, entries[0].family);
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
return guarded;
|
|
177
|
+
}
|
|
178
|
+
var guardedDispatchers = /* @__PURE__ */ new Map();
|
|
179
|
+
function createEgressGuardedDispatcher(policy = DEFAULT_SEARCH_EGRESS_POLICY, lookupImpl) {
|
|
180
|
+
if (lookupImpl) {
|
|
181
|
+
return new (0, _undici.Agent)({ connect: { lookup: createEgressGuardedLookup(policy, lookupImpl) } });
|
|
182
|
+
}
|
|
183
|
+
const signature = JSON.stringify(normalizePolicy(policy));
|
|
184
|
+
const cached = guardedDispatchers.get(signature);
|
|
185
|
+
if (cached) return cached;
|
|
186
|
+
const dispatcher = new (0, _undici.Agent)({ connect: { lookup: createEgressGuardedLookup(policy) } });
|
|
187
|
+
guardedDispatchers.set(signature, dispatcher);
|
|
188
|
+
return dispatcher;
|
|
189
|
+
}
|
|
190
|
+
function normalizePolicy(policy) {
|
|
191
|
+
return {
|
|
192
|
+
allowedPrivateHosts: [..._nullishCoalesce(policy.allowedPrivateHosts, () => ( []))].map(normalizeHostname).sort((left, right) => left < right ? -1 : left > right ? 1 : 0)
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// src/search/http/proxy.ts
|
|
197
|
+
|
|
198
|
+
var cachedProxySignature = "";
|
|
199
|
+
var cachedProxyDispatcher;
|
|
200
|
+
function resolveSearchProxySettings(env = process.env) {
|
|
201
|
+
const allProxy = firstNonEmpty(env.all_proxy, env.ALL_PROXY);
|
|
202
|
+
const httpProxy = firstNonEmpty(env.http_proxy, env.HTTP_PROXY, allProxy);
|
|
203
|
+
const httpsProxy = firstNonEmpty(env.https_proxy, env.HTTPS_PROXY, allProxy);
|
|
204
|
+
if (!httpProxy && !httpsProxy) return void 0;
|
|
205
|
+
const noProxy = firstNonEmpty(env.no_proxy, env.NO_PROXY);
|
|
206
|
+
return {
|
|
207
|
+
...httpProxy ? { httpProxy } : {},
|
|
208
|
+
...httpsProxy ? { httpsProxy } : {},
|
|
209
|
+
...noProxy ? { noProxy } : {}
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function getSearchProxyDispatcher(proxy) {
|
|
213
|
+
const signature = JSON.stringify(proxy);
|
|
214
|
+
if (cachedProxyDispatcher && cachedProxySignature === signature) return cachedProxyDispatcher;
|
|
215
|
+
cachedProxySignature = signature;
|
|
216
|
+
cachedProxyDispatcher = new (0, _undici.EnvHttpProxyAgent)(proxy);
|
|
217
|
+
return cachedProxyDispatcher;
|
|
218
|
+
}
|
|
219
|
+
function firstNonEmpty(...values) {
|
|
220
|
+
for (const value of values) {
|
|
221
|
+
const trimmed = _optionalChain([value, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3()]);
|
|
222
|
+
if (trimmed) return trimmed;
|
|
223
|
+
}
|
|
224
|
+
return void 0;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
exports.DEFAULT_SEARCH_EGRESS_POLICY = DEFAULT_SEARCH_EGRESS_POLICY; exports.validateEgressUrl = validateEgressUrl; exports.assertEgressAddressAllowed = assertEgressAddressAllowed; exports.findEgressDenial = findEgressDenial; exports.createEgressGuardedLookup = createEgressGuardedLookup; exports.createEgressGuardedDispatcher = createEgressGuardedDispatcher; exports.resolveSearchProxySettings = resolveSearchProxySettings; exports.getSearchProxyDispatcher = getSearchProxyDispatcher;
|