arc-1 1.0.2 → 1.1.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/bin/arc1-cli.js +3 -7
- package/bin/arc1.js +4 -9
- package/dist/adt/abapgit.d.ts +10 -5
- package/dist/adt/abapgit.d.ts.map +1 -1
- package/dist/adt/abapgit.js +357 -76
- package/dist/adt/abapgit.js.map +1 -1
- package/dist/adt/atc.d.ts +49 -0
- package/dist/adt/atc.d.ts.map +1 -0
- package/dist/adt/atc.js +294 -0
- package/dist/adt/atc.js.map +1 -0
- package/dist/adt/aunit-package.d.ts +22 -0
- package/dist/adt/aunit-package.d.ts.map +1 -0
- package/dist/adt/aunit-package.js +78 -0
- package/dist/adt/aunit-package.js.map +1 -0
- package/dist/adt/aunit.d.ts +143 -0
- package/dist/adt/aunit.d.ts.map +1 -0
- package/dist/adt/aunit.js +987 -0
- package/dist/adt/aunit.js.map +1 -0
- package/dist/adt/client.d.ts +9 -7
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +55 -64
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/config.d.ts +2 -0
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js +1 -0
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/devtools.d.ts +8 -30
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +41 -218
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.d.ts +1 -1
- package/dist/adt/diagnostics.d.ts.map +1 -1
- package/dist/adt/diagnostics.js +12 -12
- package/dist/adt/diagnostics.js.map +1 -1
- package/dist/adt/errors.d.ts +7 -0
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +7 -0
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/features.d.ts +9 -3
- package/dist/adt/features.d.ts.map +1 -1
- package/dist/adt/features.js +40 -8
- package/dist/adt/features.js.map +1 -1
- package/dist/adt/gcts.d.ts +12 -45
- package/dist/adt/gcts.d.ts.map +1 -1
- package/dist/adt/gcts.js +299 -171
- package/dist/adt/gcts.js.map +1 -1
- package/dist/adt/http-deadline.d.ts +23 -0
- package/dist/adt/http-deadline.d.ts.map +1 -0
- package/dist/adt/http-deadline.js +106 -0
- package/dist/adt/http-deadline.js.map +1 -0
- package/dist/adt/http-wire-body.d.ts +2 -0
- package/dist/adt/http-wire-body.d.ts.map +1 -0
- package/dist/adt/http-wire-body.js +14 -0
- package/dist/adt/http-wire-body.js.map +1 -0
- package/dist/adt/http.d.ts +10 -24
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +89 -53
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/path-safety.d.ts +16 -0
- package/dist/adt/path-safety.d.ts.map +1 -0
- package/dist/adt/path-safety.js +101 -0
- package/dist/adt/path-safety.js.map +1 -0
- package/dist/adt/semaphore.d.ts +2 -2
- package/dist/adt/semaphore.d.ts.map +1 -1
- package/dist/adt/semaphore.js +26 -9
- package/dist/adt/semaphore.js.map +1 -1
- package/dist/adt/source-diff.d.ts +10 -1
- package/dist/adt/source-diff.d.ts.map +1 -1
- package/dist/adt/source-diff.js +33 -7
- package/dist/adt/source-diff.js.map +1 -1
- package/dist/adt/text-search.d.ts +25 -0
- package/dist/adt/text-search.d.ts.map +1 -0
- package/dist/adt/text-search.js +152 -0
- package/dist/adt/text-search.js.map +1 -0
- package/dist/adt/transport-diff.d.ts +128 -0
- package/dist/adt/transport-diff.d.ts.map +1 -0
- package/dist/adt/transport-diff.js +524 -0
- package/dist/adt/transport-diff.js.map +1 -0
- package/dist/adt/transport.d.ts +78 -13
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js +443 -41
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +23 -12
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/xml-parser.d.ts +1 -8
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +54 -60
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/authz/policy.d.ts.map +1 -1
- package/dist/authz/policy.js +5 -2
- package/dist/authz/policy.js.map +1 -1
- package/dist/cli-args.d.ts +2 -2
- package/dist/cli-args.js +2 -2
- package/dist/cli-checks.d.ts +56 -0
- package/dist/cli-checks.d.ts.map +1 -0
- package/dist/cli-checks.js +368 -0
- package/dist/cli-checks.js.map +1 -0
- package/dist/cli.d.ts +68 -15
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +677 -297
- package/dist/cli.js.map +1 -1
- package/dist/handlers/cds-hints.d.ts.map +1 -1
- package/dist/handlers/cds-hints.js +1 -10
- package/dist/handlers/cds-hints.js.map +1 -1
- package/dist/handlers/diagnose.d.ts +4 -0
- package/dist/handlers/diagnose.d.ts.map +1 -1
- package/dist/handlers/diagnose.js +616 -9
- package/dist/handlers/diagnose.js.map +1 -1
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +40 -1
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/git.d.ts.map +1 -1
- package/dist/handlers/git.js +165 -84
- package/dist/handlers/git.js.map +1 -1
- package/dist/handlers/read.d.ts.map +1 -1
- package/dist/handlers/read.js +15 -0
- package/dist/handlers/read.js.map +1 -1
- package/dist/handlers/schemas.d.ts +15 -2
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +75 -6
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/search.js +1 -1
- package/dist/handlers/search.js.map +1 -1
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +51 -42
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts +2 -1
- package/dist/handlers/transport.d.ts.map +1 -1
- package/dist/handlers/transport.js +128 -27
- package/dist/handlers/transport.js.map +1 -1
- package/dist/handlers/write/create.d.ts.map +1 -1
- package/dist/handlers/write/create.js +11 -0
- package/dist/handlers/write/create.js.map +1 -1
- package/dist/handlers/write/update-delete.d.ts.map +1 -1
- package/dist/handlers/write/update-delete.js +33 -10
- package/dist/handlers/write/update-delete.js.map +1 -1
- package/dist/handlers/write-helpers.d.ts.map +1 -1
- package/dist/handlers/write-helpers.js +3 -2
- package/dist/handlers/write-helpers.js.map +1 -1
- package/dist/server/audit.d.ts +1 -1
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js +228 -21
- package/dist/server/audit.js.map +1 -1
- package/dist/server/config.d.ts +16 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +145 -17
- package/dist/server/config.js.map +1 -1
- package/dist/server/effective-policy-log.d.ts +2 -1
- package/dist/server/effective-policy-log.d.ts.map +1 -1
- package/dist/server/effective-policy-log.js +8 -2
- package/dist/server/effective-policy-log.js.map +1 -1
- package/dist/server/multi-target-runtime.d.ts.map +1 -1
- package/dist/server/multi-target-runtime.js +3 -0
- package/dist/server/multi-target-runtime.js.map +1 -1
- package/dist/server/multi-target-tools.d.ts.map +1 -1
- package/dist/server/multi-target-tools.js +5 -0
- package/dist/server/multi-target-tools.js.map +1 -1
- package/dist/server/server.d.ts +15 -13
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +36 -26
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +2 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -0
- package/dist/server/types.js.map +1 -1
- package/package.json +13 -13
package/dist/adt/gcts.js
CHANGED
|
@@ -4,14 +4,260 @@
|
|
|
4
4
|
* gCTS uses JSON payloads under /sap/bc/cts_abapvcs/*.
|
|
5
5
|
*/
|
|
6
6
|
import { AdtApiError, AdtSafetyError, classifyGctsError } from './errors.js';
|
|
7
|
-
import { checkGit, checkOperation,
|
|
7
|
+
import { checkGit, checkOperation, OperationType } from './safety.js';
|
|
8
8
|
const GCTS_BASE = '/sap/bc/cts_abapvcs';
|
|
9
9
|
const JSON_HEADERS = { Accept: 'application/json' };
|
|
10
|
-
const
|
|
10
|
+
const GCTS_MUTATION_QUARANTINE = 'gCTS mutations are unavailable until ARC-1 implements staged VCS_NO_IMPORT fetch, affected-object inventory, authorization preflight, explicit deploy, terminal confirmation, and rollback. No gCTS mutation was sent.';
|
|
11
|
+
const GCTS_REDACTION_LIMIT_MARKER = '[TRUNCATED: redaction budget exceeded]';
|
|
12
|
+
const GCTS_REDACTION_MAX_DEPTH = 16;
|
|
13
|
+
// gCTS list/config payloads are legitimately wide. Keep the defensive traversal cap well above
|
|
14
|
+
// ordinary API responses so redaction never turns a successful list into partial data.
|
|
15
|
+
const GCTS_REDACTION_MAX_ENTRIES = 10_000;
|
|
16
|
+
const GCTS_REDACTION_MAX_STRING_LENGTH = 4_096;
|
|
17
|
+
const GCTS_REDACTION_STRING_PREFIX_LENGTH = 2_000;
|
|
18
|
+
const GIT_SECRET_FRAGMENTS = [
|
|
19
|
+
'password',
|
|
20
|
+
'passwd',
|
|
21
|
+
'passphrase',
|
|
22
|
+
'pwd',
|
|
23
|
+
'token',
|
|
24
|
+
'secret',
|
|
25
|
+
'auth_pwd',
|
|
26
|
+
'auth_user',
|
|
27
|
+
'auth_token',
|
|
28
|
+
'authpwd',
|
|
29
|
+
'authuser',
|
|
30
|
+
'authtoken',
|
|
31
|
+
'authorization',
|
|
32
|
+
'apikey',
|
|
33
|
+
'api_key',
|
|
34
|
+
'credential',
|
|
35
|
+
'accesskey',
|
|
36
|
+
'access_key',
|
|
37
|
+
'privatekey',
|
|
38
|
+
'private_key',
|
|
39
|
+
'sshkey',
|
|
40
|
+
'ssh_key',
|
|
41
|
+
'signature',
|
|
42
|
+
'cookie',
|
|
43
|
+
'session',
|
|
44
|
+
'sessionid',
|
|
45
|
+
'jsessionid',
|
|
46
|
+
'sapsessionid',
|
|
47
|
+
];
|
|
11
48
|
function parseJson(body) {
|
|
12
|
-
if (!body)
|
|
13
|
-
|
|
14
|
-
|
|
49
|
+
if (!body.trim())
|
|
50
|
+
throw new Error('gCTS returned an empty response where JSON was required.');
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(body);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// JSON.parse includes a prefix of the response in its SyntaxError on current Node releases.
|
|
56
|
+
// Never let response-derived credentials escape through MCP/CLI error formatting.
|
|
57
|
+
throw new Error('gCTS returned invalid JSON. Check the endpoint and installed gCTS version.');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function isRecord(value) {
|
|
61
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
62
|
+
}
|
|
63
|
+
function normalizeSafeUnicodeEscapes(value) {
|
|
64
|
+
return value.replace(/\\{1,8}u([0-9a-f]{4})/gi, (encoded, hex) => {
|
|
65
|
+
const decoded = String.fromCharCode(Number.parseInt(hex, 16));
|
|
66
|
+
return /^[a-z0-9_.-]$/i.test(decoded) ? decoded : encoded;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function isGitSecretKey(key) {
|
|
70
|
+
const normalized = normalizeSafeUnicodeEscapes(key)
|
|
71
|
+
.toLowerCase()
|
|
72
|
+
.replace(/[^a-z0-9]/g, '');
|
|
73
|
+
return GIT_SECRET_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
74
|
+
}
|
|
75
|
+
function isCredentialQueryKey(key) {
|
|
76
|
+
const normalized = normalizeSafeUnicodeEscapes(key).toLowerCase();
|
|
77
|
+
return normalized === 'auth' || normalized.includes('authorization') || isGitSecretKey(normalized);
|
|
78
|
+
}
|
|
79
|
+
function redactCredentialAssignments(value) {
|
|
80
|
+
return value
|
|
81
|
+
.replace(/\bauthorization\s*([:=])\s*(?:bearer|basic)\s+(?:\\{1,64}"[^"]*\\{1,64}"|\\{1,64}'[^']*\\{1,64}'|"[^"]*"|'[^']*'|[^\s,;&<>"']+)/gi, 'authorization$1[REDACTED]')
|
|
82
|
+
.replace(/\b(bearer|basic)\s+(?:\\{1,64}"[^"]*\\{1,64}"|\\{1,64}'[^']*\\{1,64}'|"[^"]*"|'[^']*'|[^\s,;&<>"']+)/gi, '$1 [REDACTED]')
|
|
83
|
+
.replace(/\b(password|passwd|passphrase|pwd|token|secret|api[_-]?key|authorization|credential|access[_-]?key|private[_-]?key|ssh[_-]?key|signature|cookie|jsessionid|sap[_-]?sessionid|sessionid|session|(?:client[_-]?vcs[_-]?)?auth[_-]?(?:pwd|user|token)|remote[_-]?(?:password|user|token))(?:(?:\\{1,64})?["'])?\s*([:=])\s*(?:(?:bearer|basic)\s+)?(?:\\{1,64}"[^"]*\\{1,64}"|\\{1,64}'[^']*\\{1,64}'|"[^"]*"|'[^']*'|[^\s,;&<>"']+)/gi, '$1$2[REDACTED]');
|
|
84
|
+
}
|
|
85
|
+
function normalizeEscapedUrlSlashes(value) {
|
|
86
|
+
return normalizeSafeUnicodeEscapes(value.replace(/\\{1,8}\//g, '/'));
|
|
87
|
+
}
|
|
88
|
+
function boundGctsString(value, originalLength = value.length) {
|
|
89
|
+
if (value.length <= GCTS_REDACTION_MAX_STRING_LENGTH && originalLength <= GCTS_REDACTION_MAX_STRING_LENGTH) {
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
return `${value.slice(0, GCTS_REDACTION_STRING_PREFIX_LENGTH)}... [truncated ${originalLength} chars]`;
|
|
93
|
+
}
|
|
94
|
+
function gctsStringInput(value) {
|
|
95
|
+
return value.length <= GCTS_REDACTION_MAX_STRING_LENGTH ? value : value.slice(0, GCTS_REDACTION_MAX_STRING_LENGTH);
|
|
96
|
+
}
|
|
97
|
+
function redactUrlAssignments(value) {
|
|
98
|
+
return redactCredentialAssignments(value).replace(/(^|[&;])([^=&;]+)(?:=([^&;]*))?/g, (part, separator, rawKey) => {
|
|
99
|
+
let decodedKey = rawKey;
|
|
100
|
+
try {
|
|
101
|
+
decodedKey = decodeURIComponent(rawKey.replace(/\+/g, ' '));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Keep the raw key for the sensitivity check.
|
|
105
|
+
}
|
|
106
|
+
return isCredentialQueryKey(decodedKey) ? `${separator}[REDACTED]=[REDACTED]` : part;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function redactUrl(value) {
|
|
110
|
+
const normalizedValue = normalizeEscapedUrlSlashes(gctsStringInput(value));
|
|
111
|
+
try {
|
|
112
|
+
const parsed = new URL(normalizedValue);
|
|
113
|
+
parsed.username = '';
|
|
114
|
+
parsed.password = '';
|
|
115
|
+
parsed.pathname = redactCredentialAssignments(parsed.pathname);
|
|
116
|
+
if (parsed.search)
|
|
117
|
+
parsed.search = `?${redactUrlAssignments(parsed.search.slice(1))}`;
|
|
118
|
+
if (parsed.hash)
|
|
119
|
+
parsed.hash = `#${redactUrlAssignments(parsed.hash.slice(1))}`;
|
|
120
|
+
return parsed.toString();
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
const withoutUserinfo = normalizedValue.replace(/^([a-z][a-z\d+.-]*:\/\/)[^/@\s]+@/i, '$1[REDACTED]@');
|
|
124
|
+
const fragmentStart = withoutUserinfo.indexOf('#');
|
|
125
|
+
const beforeFragment = fragmentStart >= 0 ? withoutUserinfo.slice(0, fragmentStart) : withoutUserinfo;
|
|
126
|
+
const fragment = fragmentStart >= 0 ? withoutUserinfo.slice(fragmentStart + 1) : undefined;
|
|
127
|
+
const queryStart = beforeFragment.indexOf('?');
|
|
128
|
+
const path = queryStart >= 0 ? beforeFragment.slice(0, queryStart) : beforeFragment;
|
|
129
|
+
const query = queryStart >= 0 ? beforeFragment.slice(queryStart + 1) : undefined;
|
|
130
|
+
return `${redactCredentialAssignments(path)}${query === undefined ? '' : `?${redactUrlAssignments(query)}`}${fragment === undefined ? '' : `#${redactUrlAssignments(fragment)}`}`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function redactUrlsInText(value) {
|
|
134
|
+
const redacted = redactCredentialAssignments(normalizeEscapedUrlSlashes(gctsStringInput(value))).replace(/https?:\/\/[^\s<>"']+/gi, (candidate) => {
|
|
135
|
+
const trailing = candidate.match(/[),.;]+$/)?.[0] ?? '';
|
|
136
|
+
const core = trailing ? candidate.slice(0, -trailing.length) : candidate;
|
|
137
|
+
return `${redactUrl(core)}${trailing}`;
|
|
138
|
+
});
|
|
139
|
+
return boundGctsString(redacted, value.length);
|
|
140
|
+
}
|
|
141
|
+
function redactedOutputKey(entryKey, target) {
|
|
142
|
+
const boundedInput = gctsStringInput(entryKey);
|
|
143
|
+
const sanitized = isCredentialQueryKey(boundedInput)
|
|
144
|
+
? '[REDACTED sensitive key]'
|
|
145
|
+
: boundGctsString(redactUrlsInText(boundedInput), entryKey.length);
|
|
146
|
+
if (!Object.hasOwn(target, sanitized))
|
|
147
|
+
return sanitized;
|
|
148
|
+
// Different attacker-controlled names can collapse to the same redacted key. Preserve every
|
|
149
|
+
// value without reintroducing either original key or an unbounded suffix.
|
|
150
|
+
let collision = 2;
|
|
151
|
+
while (Object.hasOwn(target, `[REDACTED duplicate key ${collision}]`))
|
|
152
|
+
collision += 1;
|
|
153
|
+
return `[REDACTED duplicate key ${collision}]`;
|
|
154
|
+
}
|
|
155
|
+
function setRedactedEntry(target, entryKey, value) {
|
|
156
|
+
Object.defineProperty(target, redactedOutputKey(entryKey, target), {
|
|
157
|
+
value,
|
|
158
|
+
enumerable: true,
|
|
159
|
+
configurable: true,
|
|
160
|
+
writable: true,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/** Remove credential-bearing gCTS config and URL values before they can reach tool output. */
|
|
164
|
+
function redactGctsValueWithinBudget(value, key, state, depth) {
|
|
165
|
+
if (depth > GCTS_REDACTION_MAX_DEPTH || state.remainingEntries <= 0)
|
|
166
|
+
return GCTS_REDACTION_LIMIT_MARKER;
|
|
167
|
+
state.remainingEntries -= 1;
|
|
168
|
+
if (isGitSecretKey(key))
|
|
169
|
+
return '[REDACTED]';
|
|
170
|
+
if (typeof value === 'string') {
|
|
171
|
+
const redacted = key.toLowerCase().includes('url') || key.toLowerCase().includes('uri')
|
|
172
|
+
? redactUrl(value)
|
|
173
|
+
: redactUrlsInText(value);
|
|
174
|
+
return boundGctsString(redacted, value.length);
|
|
175
|
+
}
|
|
176
|
+
if (Array.isArray(value)) {
|
|
177
|
+
if (state.seen.has(value))
|
|
178
|
+
return GCTS_REDACTION_LIMIT_MARKER;
|
|
179
|
+
state.seen.add(value);
|
|
180
|
+
const result = [];
|
|
181
|
+
for (const entry of value) {
|
|
182
|
+
if (state.remainingEntries <= 0) {
|
|
183
|
+
result.push(GCTS_REDACTION_LIMIT_MARKER);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
result.push(redactGctsValueWithinBudget(entry, key, state, depth + 1));
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
if (!isRecord(value))
|
|
191
|
+
return value;
|
|
192
|
+
if (state.seen.has(value))
|
|
193
|
+
return GCTS_REDACTION_LIMIT_MARKER;
|
|
194
|
+
state.seen.add(value);
|
|
195
|
+
const configKey = String(value.ckey ?? value.key ?? '').trim();
|
|
196
|
+
const sensitiveConfigEntry = isGitSecretKey(configKey);
|
|
197
|
+
const redacted = {};
|
|
198
|
+
for (const [entryKey, entryValue] of Object.entries(value)) {
|
|
199
|
+
if (state.remainingEntries <= 0) {
|
|
200
|
+
setRedactedEntry(redacted, '__truncated__', GCTS_REDACTION_LIMIT_MARKER);
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
let redactedValue;
|
|
204
|
+
if (sensitiveConfigEntry && ['value', 'defaultvalue', 'currentvalue', 'example'].includes(entryKey.toLowerCase())) {
|
|
205
|
+
redactedValue = '[REDACTED]';
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
redactedValue = redactGctsValueWithinBudget(entryValue, entryKey, state, depth + 1);
|
|
209
|
+
}
|
|
210
|
+
setRedactedEntry(redacted, entryKey, redactedValue);
|
|
211
|
+
}
|
|
212
|
+
return redacted;
|
|
213
|
+
}
|
|
214
|
+
export function redactGctsValue(value, key = '') {
|
|
215
|
+
return redactGctsValueWithinBudget(value, key, { remainingEntries: GCTS_REDACTION_MAX_ENTRIES, seen: new WeakSet() }, 0);
|
|
216
|
+
}
|
|
217
|
+
function redactGctsText(value) {
|
|
218
|
+
try {
|
|
219
|
+
return JSON.stringify(redactGctsValue(JSON.parse(value)));
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return redactUrlsInText(value);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function redactGctsResponseBody(value) {
|
|
226
|
+
if (!value)
|
|
227
|
+
return '';
|
|
228
|
+
try {
|
|
229
|
+
return JSON.stringify(redactGctsValue(JSON.parse(value)));
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return `[REDACTED invalid/non-JSON gCTS response ${value.length} chars]`;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function requireArrayWrapper(payload, wrapper, operation) {
|
|
236
|
+
if (isRecord(payload) && Array.isArray(payload[wrapper]))
|
|
237
|
+
return payload[wrapper];
|
|
238
|
+
throw new Error(`gCTS ${operation} returned an unexpected response shape; expected {${wrapper}:[...]}.`);
|
|
239
|
+
}
|
|
240
|
+
function requireObjectWrapper(payload, wrapper, operation) {
|
|
241
|
+
if (isRecord(payload) && isRecord(payload[wrapper]))
|
|
242
|
+
return payload;
|
|
243
|
+
throw new Error(`gCTS ${operation} returned an unexpected response shape; expected {${wrapper}:{...}}.`);
|
|
244
|
+
}
|
|
245
|
+
export const GCTS_QUARANTINED_MUTATIONS = {
|
|
246
|
+
clone: [OperationType.Create, 'GctsCloneRepo'],
|
|
247
|
+
pull: [OperationType.Update, 'GctsPullRepo'],
|
|
248
|
+
create_branch: [OperationType.Create, 'GctsCreateBranch'],
|
|
249
|
+
switch_branch: [OperationType.Update, 'GctsSwitchBranch'],
|
|
250
|
+
unlink: [OperationType.Delete, 'GctsDeleteRepo'],
|
|
251
|
+
};
|
|
252
|
+
/** Fail closed before dispatch while gCTS mutations lack transactional postconditions. */
|
|
253
|
+
export function enforceGctsMutationQuarantine(safety, action) {
|
|
254
|
+
const mutation = GCTS_QUARANTINED_MUTATIONS[action];
|
|
255
|
+
if (!mutation)
|
|
256
|
+
return;
|
|
257
|
+
const [opType, operation] = mutation;
|
|
258
|
+
checkOperation(safety, opType, operation);
|
|
259
|
+
checkGit(safety, action);
|
|
260
|
+
throw new AdtSafetyError(`${operation}: ${GCTS_MUTATION_QUARANTINE}`);
|
|
15
261
|
}
|
|
16
262
|
function errorMessageFromPayload(payload) {
|
|
17
263
|
if (typeof payload !== 'object' || payload === null)
|
|
@@ -20,66 +266,56 @@ function errorMessageFromPayload(payload) {
|
|
|
20
266
|
const log = Array.isArray(record.log) ? record.log : [];
|
|
21
267
|
const errorLog = log.find((entry) => typeof entry === 'object' &&
|
|
22
268
|
entry !== null &&
|
|
23
|
-
String(entry.severity ?? '')
|
|
269
|
+
String(entry.severity ?? '')
|
|
270
|
+
.trim()
|
|
271
|
+
.toUpperCase() === 'ERROR');
|
|
24
272
|
return typeof errorLog?.message === 'string' ? errorLog.message : undefined;
|
|
25
273
|
}
|
|
26
274
|
async function requestGcts(path, run) {
|
|
27
275
|
try {
|
|
28
|
-
|
|
276
|
+
const response = await run();
|
|
277
|
+
if (response.body) {
|
|
278
|
+
try {
|
|
279
|
+
const payload = JSON.parse(response.body);
|
|
280
|
+
const logMessage = errorMessageFromPayload(payload);
|
|
281
|
+
if (logMessage) {
|
|
282
|
+
throw new AdtApiError(redactGctsText(logMessage), 500, path, JSON.stringify(redactGctsValue(payload)));
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
if (err instanceof AdtApiError)
|
|
287
|
+
throw err;
|
|
288
|
+
// The endpoint-specific parser below owns non-JSON/invalid-JSON diagnostics.
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return response;
|
|
29
292
|
}
|
|
30
293
|
catch (err) {
|
|
31
294
|
if (err instanceof AdtApiError) {
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
295
|
+
const rawBody = err.responseBody ?? '';
|
|
296
|
+
const classified = classifyGctsError(rawBody);
|
|
297
|
+
const safeBody = redactGctsResponseBody(rawBody);
|
|
298
|
+
const detail = classified.exception ??
|
|
299
|
+
classified.logMessage ??
|
|
300
|
+
(rawBody ? 'gCTS request failed with an invalid or unclassified response.' : err.message);
|
|
301
|
+
throw new AdtApiError(redactGctsText(detail), err.statusCode, redactUrlsInText(err.path || path), safeBody);
|
|
37
302
|
}
|
|
38
303
|
throw err;
|
|
39
304
|
}
|
|
40
305
|
}
|
|
41
|
-
function withRepoCredentials(payload, user, password, token) {
|
|
42
|
-
const config = Array.isArray(payload.config) ? [...payload.config] : [];
|
|
43
|
-
if (user)
|
|
44
|
-
config.push({ key: 'CLIENT_VCS_AUTH_USER', value: user });
|
|
45
|
-
if (password)
|
|
46
|
-
config.push({ key: 'CLIENT_VCS_AUTH_PWD', value: password });
|
|
47
|
-
if (token)
|
|
48
|
-
config.push({ key: 'CLIENT_VCS_AUTH_TOKEN', value: token });
|
|
49
|
-
return {
|
|
50
|
-
...payload,
|
|
51
|
-
...(config.length > 0 ? { config } : {}),
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
function repoPackage(repo) {
|
|
55
|
-
return typeof repo.package === 'string' && repo.package.trim() ? repo.package.trim() : undefined;
|
|
56
|
-
}
|
|
57
|
-
function findRepoById(repos, repoId) {
|
|
58
|
-
return repos.find((repo) => repo.rid === repoId || repo.name === repoId);
|
|
59
|
-
}
|
|
60
|
-
async function enforceExistingRepoPackage(http, safety, repoId, operation, resolver) {
|
|
61
|
-
if (safety.allowedPackages.length === 0)
|
|
62
|
-
return;
|
|
63
|
-
const repo = findRepoById(await listRepos(http, safety), repoId);
|
|
64
|
-
const pkg = repo ? repoPackage(repo) : undefined;
|
|
65
|
-
if (!pkg) {
|
|
66
|
-
throw new AdtSafetyError(`${operation} could not resolve package for gCTS repository '${repoId}'; refusing to mutate because allowedPackages is configured.`);
|
|
67
|
-
}
|
|
68
|
-
await checkPackage(safety, pkg, resolver);
|
|
69
|
-
}
|
|
70
306
|
/** gCTS system status (/system). */
|
|
71
307
|
export async function getSystemInfo(http, safety) {
|
|
72
308
|
checkOperation(safety, OperationType.Read, 'GctsGetSystemInfo');
|
|
73
309
|
const path = `${GCTS_BASE}/system`;
|
|
74
310
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
75
|
-
return parseJson(resp.body);
|
|
311
|
+
return redactGctsValue(requireObjectWrapper(parseJson(resp.body), 'result', 'system info'));
|
|
76
312
|
}
|
|
77
313
|
/** gCTS user scopes (/user). */
|
|
78
314
|
export async function getUserInfo(http, safety) {
|
|
79
315
|
checkOperation(safety, OperationType.Read, 'GctsGetUserInfo');
|
|
80
316
|
const path = `${GCTS_BASE}/user`;
|
|
81
317
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
82
|
-
return parseJson(resp.body);
|
|
318
|
+
return redactGctsValue(requireObjectWrapper(parseJson(resp.body), 'user', 'user info'));
|
|
83
319
|
}
|
|
84
320
|
/** gCTS configuration schema (/config or /repository/{rid}/config). */
|
|
85
321
|
export async function getConfig(http, safety, repoId) {
|
|
@@ -87,12 +323,7 @@ export async function getConfig(http, safety, repoId) {
|
|
|
87
323
|
const path = repoId ? `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/config` : `${GCTS_BASE}/config`;
|
|
88
324
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
89
325
|
const parsed = parseJson(resp.body);
|
|
90
|
-
|
|
91
|
-
return parsed;
|
|
92
|
-
if (typeof parsed === 'object' && parsed !== null && Array.isArray(parsed.result)) {
|
|
93
|
-
return parsed.result;
|
|
94
|
-
}
|
|
95
|
-
return [];
|
|
326
|
+
return redactGctsValue(requireArrayWrapper(parsed, 'config', 'config'));
|
|
96
327
|
}
|
|
97
328
|
/** List gCTS repositories. Returns [] for empty-object response shape. */
|
|
98
329
|
export async function listRepos(http, safety) {
|
|
@@ -105,76 +336,13 @@ export async function listRepos(http, safety) {
|
|
|
105
336
|
return [];
|
|
106
337
|
}
|
|
107
338
|
if (Array.isArray(parsed))
|
|
108
|
-
return parsed;
|
|
109
|
-
if (
|
|
110
|
-
return parsed.result;
|
|
339
|
+
return redactGctsValue(parsed);
|
|
340
|
+
if (isRecord(parsed) && Array.isArray(parsed.result))
|
|
341
|
+
return redactGctsValue(parsed.result);
|
|
342
|
+
if (isRecord(parsed) && Array.isArray(parsed.repositories)) {
|
|
343
|
+
return redactGctsValue(parsed.repositories);
|
|
111
344
|
}
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
/** Clone/link a repository in gCTS. */
|
|
115
|
-
export async function cloneRepo(http, safety, params, resolver) {
|
|
116
|
-
checkOperation(safety, OperationType.Create, 'GctsCloneRepo');
|
|
117
|
-
checkGit(safety, 'clone');
|
|
118
|
-
// When an allowlist is configured, the package is not optional: gCTS would
|
|
119
|
-
// otherwise bind the repo to a server-derived default (possibly outside the
|
|
120
|
-
// allowlist). Force the caller to declare the target package up-front.
|
|
121
|
-
if (safety.allowedPackages.length > 0 && !params.package) {
|
|
122
|
-
throw new AdtSafetyError(`GctsCloneRepo requires an explicit 'package' when allowedPackages is configured (allowed: ${JSON.stringify(safety.allowedPackages)})`);
|
|
123
|
-
}
|
|
124
|
-
if (params.package)
|
|
125
|
-
await checkPackage(safety, params.package, resolver);
|
|
126
|
-
const path = `${GCTS_BASE}/repository`;
|
|
127
|
-
const payload = withRepoCredentials({
|
|
128
|
-
rid: params.rid,
|
|
129
|
-
name: params.name,
|
|
130
|
-
role: params.role,
|
|
131
|
-
type: params.type,
|
|
132
|
-
vSID: params.vSID,
|
|
133
|
-
url: params.url,
|
|
134
|
-
package: params.package,
|
|
135
|
-
privateFlag: params.privateFlag,
|
|
136
|
-
config: params.config,
|
|
137
|
-
}, params.user, params.password, params.token);
|
|
138
|
-
const resp = await requestGcts(path, () => http.post(path, JSON.stringify(payload), JSON_CONTENT_TYPE, JSON_HEADERS));
|
|
139
|
-
const parsed = parseJson(resp.body);
|
|
140
|
-
const logMessage = errorMessageFromPayload(parsed);
|
|
141
|
-
if (logMessage) {
|
|
142
|
-
throw new AdtApiError(logMessage, 500, path, resp.body);
|
|
143
|
-
}
|
|
144
|
-
return parsed;
|
|
145
|
-
}
|
|
146
|
-
/** Pull latest changes or a specific commit. */
|
|
147
|
-
export async function pullRepo(http, safety, repoId, commit, resolver) {
|
|
148
|
-
checkOperation(safety, OperationType.Update, 'GctsPullRepo');
|
|
149
|
-
checkGit(safety, 'pull');
|
|
150
|
-
await enforceExistingRepoPackage(http, safety, repoId, 'GctsPullRepo', resolver);
|
|
151
|
-
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/pullByCommit`;
|
|
152
|
-
const resp = await requestGcts(path, () => http.post(path, JSON.stringify(commit ? { commit } : {}), JSON_CONTENT_TYPE, JSON_HEADERS));
|
|
153
|
-
const parsed = parseJson(resp.body);
|
|
154
|
-
const logMessage = errorMessageFromPayload(parsed);
|
|
155
|
-
if (logMessage) {
|
|
156
|
-
throw new AdtApiError(logMessage, 500, path, resp.body);
|
|
157
|
-
}
|
|
158
|
-
return parsed;
|
|
159
|
-
}
|
|
160
|
-
/** Commit staged gCTS changes. */
|
|
161
|
-
export async function commitRepo(http, safety, repoId, params, resolver) {
|
|
162
|
-
checkOperation(safety, OperationType.Update, 'GctsCommitRepo');
|
|
163
|
-
checkGit(safety, 'commit');
|
|
164
|
-
await enforceExistingRepoPackage(http, safety, repoId, 'GctsCommitRepo', resolver);
|
|
165
|
-
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/commit`;
|
|
166
|
-
const body = JSON.stringify({
|
|
167
|
-
...(params.message ? { message: params.message } : {}),
|
|
168
|
-
...(params.description ? { description: params.description } : {}),
|
|
169
|
-
...(params.objects ? { objects: params.objects } : {}),
|
|
170
|
-
});
|
|
171
|
-
const resp = await requestGcts(path, () => http.post(path, body, JSON_CONTENT_TYPE, JSON_HEADERS));
|
|
172
|
-
const parsed = parseJson(resp.body);
|
|
173
|
-
const logMessage = errorMessageFromPayload(parsed);
|
|
174
|
-
if (logMessage) {
|
|
175
|
-
throw new AdtApiError(logMessage, 500, path, resp.body);
|
|
176
|
-
}
|
|
177
|
-
return parsed;
|
|
345
|
+
throw new Error('gCTS repository list returned an unexpected response shape.');
|
|
178
346
|
}
|
|
179
347
|
/** List branches for a repository. */
|
|
180
348
|
export async function listBranches(http, safety, repoId) {
|
|
@@ -182,39 +350,7 @@ export async function listBranches(http, safety, repoId) {
|
|
|
182
350
|
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/branches`;
|
|
183
351
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
184
352
|
const parsed = parseJson(resp.body);
|
|
185
|
-
|
|
186
|
-
return parsed;
|
|
187
|
-
if (typeof parsed === 'object' && parsed !== null && Array.isArray(parsed.result)) {
|
|
188
|
-
return parsed.result;
|
|
189
|
-
}
|
|
190
|
-
return [];
|
|
191
|
-
}
|
|
192
|
-
/** Create a branch in gCTS. */
|
|
193
|
-
export async function createBranch(http, safety, repoId, params, resolver) {
|
|
194
|
-
checkOperation(safety, OperationType.Update, 'GctsCreateBranch');
|
|
195
|
-
checkGit(safety, 'create_branch');
|
|
196
|
-
if (params.package)
|
|
197
|
-
await checkPackage(safety, params.package, resolver);
|
|
198
|
-
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/branches`;
|
|
199
|
-
const body = JSON.stringify({
|
|
200
|
-
branch: params.branch,
|
|
201
|
-
isSymbolic: params.isSymbolic ?? false,
|
|
202
|
-
isPeeled: params.isPeeled ?? false,
|
|
203
|
-
type: params.type ?? 'head',
|
|
204
|
-
});
|
|
205
|
-
const resp = await requestGcts(path, () => http.post(path, body, JSON_CONTENT_TYPE, JSON_HEADERS));
|
|
206
|
-
return parseJson(resp.body);
|
|
207
|
-
}
|
|
208
|
-
/** Switch branch in gCTS. */
|
|
209
|
-
export async function switchBranch(http, safety, repoId, branch, resolver) {
|
|
210
|
-
checkOperation(safety, OperationType.Update, 'GctsSwitchBranch');
|
|
211
|
-
checkGit(safety, 'switch_branch');
|
|
212
|
-
// A checkout deserializes the branch's objects into the repo's server-bound package, just like a
|
|
213
|
-
// pull — gate it against the same allowlist so it cannot mutate a package outside the ceiling.
|
|
214
|
-
await enforceExistingRepoPackage(http, safety, repoId, 'GctsSwitchBranch', resolver);
|
|
215
|
-
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/checkout/${encodeURIComponent(branch)}`;
|
|
216
|
-
const resp = await requestGcts(path, () => http.post(path, JSON.stringify({}), JSON_CONTENT_TYPE, JSON_HEADERS));
|
|
217
|
-
return parseJson(resp.body);
|
|
353
|
+
return redactGctsValue(requireArrayWrapper(parsed, 'branches', 'branches'));
|
|
218
354
|
}
|
|
219
355
|
/** Commit history for a repository. */
|
|
220
356
|
export async function getCommitHistory(http, safety, repoId, limit = 20) {
|
|
@@ -223,12 +359,12 @@ export async function getCommitHistory(http, safety, repoId, limit = 20) {
|
|
|
223
359
|
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/getCommit?limit=${encodeURIComponent(String(safeLimit))}`;
|
|
224
360
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
225
361
|
const parsed = parseJson(resp.body);
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
362
|
+
const commits = requireArrayWrapper(parsed, 'commits', 'commit history');
|
|
363
|
+
return redactGctsValue(commits.map((commit) => ({
|
|
364
|
+
...commit,
|
|
365
|
+
...(commit.id && !commit.commit ? { commit: commit.id } : {}),
|
|
366
|
+
...(commit.authorMail && !commit.email ? { email: commit.authorMail } : {}),
|
|
367
|
+
})));
|
|
232
368
|
}
|
|
233
369
|
/** List repository objects tracked by gCTS. */
|
|
234
370
|
export async function listRepoObjects(http, safety, repoId) {
|
|
@@ -236,25 +372,17 @@ export async function listRepoObjects(http, safety, repoId) {
|
|
|
236
372
|
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}/objects`;
|
|
237
373
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
238
374
|
const parsed = parseJson(resp.body);
|
|
239
|
-
if (Array.isArray(parsed))
|
|
240
|
-
return parsed;
|
|
241
|
-
if (
|
|
242
|
-
return parsed.result;
|
|
243
|
-
|
|
244
|
-
return [];
|
|
375
|
+
if (isRecord(parsed) && Array.isArray(parsed.objects))
|
|
376
|
+
return redactGctsValue(parsed.objects);
|
|
377
|
+
if (isRecord(parsed) && Array.isArray(parsed.result))
|
|
378
|
+
return redactGctsValue(parsed.result);
|
|
379
|
+
throw new Error('gCTS repository objects returned an unexpected response shape.');
|
|
245
380
|
}
|
|
246
381
|
/** Read transport history for repository linkage diagnostics. */
|
|
247
382
|
export async function getTransportHistory(http, safety, repoId) {
|
|
248
383
|
checkOperation(safety, OperationType.Read, 'GctsGetTransportHistory');
|
|
249
384
|
const path = `${GCTS_BASE}/repository/history/${encodeURIComponent(repoId)}`;
|
|
250
385
|
const resp = await requestGcts(path, () => http.get(path, JSON_HEADERS));
|
|
251
|
-
return parseJson(resp.body);
|
|
252
|
-
}
|
|
253
|
-
/** Unlink/delete a gCTS repository. */
|
|
254
|
-
export async function deleteRepo(http, safety, repoId) {
|
|
255
|
-
checkOperation(safety, OperationType.Delete, 'GctsDeleteRepo');
|
|
256
|
-
checkGit(safety, 'unlink');
|
|
257
|
-
const path = `${GCTS_BASE}/repository/${encodeURIComponent(repoId)}`;
|
|
258
|
-
await requestGcts(path, () => http.delete(path, JSON_HEADERS));
|
|
386
|
+
return redactGctsValue(parseJson(resp.body));
|
|
259
387
|
}
|
|
260
388
|
//# sourceMappingURL=gcts.js.map
|
package/dist/adt/gcts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcts.js","sourceRoot":"","sources":["../../src/adt/gcts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gcts.js","sourceRoot":"","sources":["../../src/adt/gcts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface RequestDeadlineOptions {
|
|
2
|
+
signal?: AbortSignal;
|
|
3
|
+
deadline?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface AdtRequestOptions extends RequestDeadlineOptions {
|
|
6
|
+
/** Override the 120-second per-fetch cap for a known long-running ADT operation. */
|
|
7
|
+
fetchTimeoutMs?: number;
|
|
8
|
+
/** Optional ADT subresource: handled 404s may be logged at debug level. */
|
|
9
|
+
suppressNotFoundLog?: boolean;
|
|
10
|
+
/** Capability probe: all non-2xx responses are expected evidence, not warning noise. */
|
|
11
|
+
probe?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function throwIfRequestCancelled(options?: RequestDeadlineOptions): void;
|
|
14
|
+
/** Caller-owned cancellation only (no built-in fetch timeout). */
|
|
15
|
+
export declare function requestBudgetSignal(options?: RequestDeadlineOptions): AbortSignal | undefined;
|
|
16
|
+
/** Await a non-fetch dependency without leaving an unhandled rejection after cancellation. */
|
|
17
|
+
export declare function awaitWithRequestSignal<T>(operation: Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
18
|
+
export declare function awaitWithinRequestBudget<T>(operation: Promise<T>, options?: RequestDeadlineOptions): Promise<T>;
|
|
19
|
+
/** Compose the built-in per-fetch timeout with the caller's signal/deadline. */
|
|
20
|
+
export declare function requestSignal(options?: RequestDeadlineOptions): AbortSignal;
|
|
21
|
+
/** Retry delays consume the same caller budget as their surrounding HTTP request. */
|
|
22
|
+
export declare function sleepWithinRequestBudget(delayMs: number, options?: RequestDeadlineOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=http-deadline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-deadline.d.ts","sourceRoot":"","sources":["../../src/adt/http-deadline.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA+BD,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAS9E;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,WAAW,GAAG,SAAS,CAQ7F;AAED,8FAA8F;AAC9F,wBAAsB,sBAAsB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAoBvG;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC,CAS/G;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,WAAW,CAK3E;AAED,qFAAqF;AACrF,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/G"}
|