@nuvlore/extension-access-jira 0.1.1 → 0.1.2
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/package.json +4 -19
- package/vendor/extension-sso/LICENSE +0 -202
- package/vendor/extension-sso/README.md +0 -35
- package/vendor/extension-sso/commands/okta-login.md +0 -10
- package/vendor/extension-sso/package.json +0 -52
- package/vendor/extension-sso/skills/workday-okta-auth/SKILL.md +0 -20
- package/vendor/extension-sso/src/autoAuth.mjs +0 -25
- package/vendor/extension-sso/src/browserLogin.mjs +0 -1
- package/vendor/extension-sso/src/chromeCookies.mjs +0 -1
- package/vendor/extension-sso/src/cookieJar.mjs +0 -1
- package/vendor/extension-sso/src/extensionAccess.mjs +0 -173
- package/vendor/extension-sso/src/htmlSessionExtract.mjs +0 -1
- package/vendor/extension-sso/src/oktaAppAccess.mjs +0 -133
- package/vendor/extension-sso/src/oktaAppCatalog.mjs +0 -118
- package/vendor/extension-sso/src/oktaAppRead.mjs +0 -119
- package/vendor/extension-sso/src/oktaConfig.mjs +0 -12
- package/vendor/extension-sso/src/oktaSession.mjs +0 -32
- package/vendor/extension-sso/src/serviceOperations.mjs +0 -407
- package/vendor/extension-sso/src/serviceReadSearch.mjs +0 -395
- package/vendor/extension-sso/src/serviceReads.mjs +0 -109
- package/vendor/extension-sso/src/serviceRegistry.mjs +0 -497
- package/vendor/extension-sso/src/sessionAuth.mjs +0 -339
- package/vendor/extension-sso/src/sessionManager.mjs +0 -212
- package/vendor/extension-sso/src/sessionValidate.mjs +0 -74
- package/vendor/extension-sso/src/ssoConfig.mjs +0 -31
- package/vendor/extension-sso/src/ssoHttpRead.mjs +0 -292
- package/vendor/extension-sso/tools/extension-access-tools.shared.mjs +0 -16
- package/vendor/extension-sso/tools/okta-app-tools.shared.mjs +0 -5
- package/vendor/extension-sso/tools/okta-tools.shared.mjs +0 -18
- package/vendor/extension-sso/tools/workday_extension_read.mjs +0 -51
- package/vendor/extension-sso/tools/workday_extension_read_access.mjs +0 -65
- package/vendor/extension-sso/tools/workday_list_extension_access.mjs +0 -39
- package/vendor/extension-sso/tools/workday_list_okta_apps.mjs +0 -18
- package/vendor/extension-sso/tools/workday_list_service_operations.mjs +0 -41
- package/vendor/extension-sso/tools/workday_list_service_read_search_capabilities.mjs +0 -34
- package/vendor/extension-sso/tools/workday_list_services.mjs +0 -31
- package/vendor/extension-sso/tools/workday_okta_app_probe_all.mjs +0 -24
- package/vendor/extension-sso/tools/workday_okta_app_read.mjs +0 -30
- package/vendor/extension-sso/tools/workday_okta_app_read_access.mjs +0 -25
- package/vendor/extension-sso/tools/workday_okta_auth_header.mjs +0 -58
- package/vendor/extension-sso/tools/workday_okta_login.mjs +0 -65
- package/vendor/extension-sso/tools/workday_okta_open_app.mjs +0 -63
- package/vendor/extension-sso/tools/workday_okta_open_service.mjs +0 -63
- package/vendor/extension-sso/tools/workday_okta_status.mjs +0 -35
- package/vendor/extension-sso/tools/workday_service_auth.mjs +0 -65
- package/vendor/extension-sso/tools/workday_service_operation_read.mjs +0 -51
- package/vendor/extension-sso/tools/workday_service_read.mjs +0 -56
- package/vendor/extension-sso/tools/workday_service_search.mjs +0 -62
- package/vendor/extension-sso/tools/workday_sso_cookie_header.mjs +0 -59
- package/vendor/extension-sso/vendor/extension-browser-sso/LICENSE +0 -202
- package/vendor/extension-sso/vendor/extension-browser-sso/README.md +0 -16
- package/vendor/extension-sso/vendor/extension-browser-sso/package.json +0 -47
- package/vendor/extension-sso/vendor/extension-browser-sso/src/autoAuth.mjs +0 -47
- package/vendor/extension-sso/vendor/extension-browser-sso/src/browserHttpRead.mjs +0 -76
- package/vendor/extension-sso/vendor/extension-browser-sso/src/browserLogin.mjs +0 -24
- package/vendor/extension-sso/vendor/extension-browser-sso/src/chromeCookies.mjs +0 -192
- package/vendor/extension-sso/vendor/extension-browser-sso/src/cookieJar.mjs +0 -132
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/devops-data-paths.mjs +0 -222
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/devops-diagnostics.mjs +0 -440
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/enterprise-api-read.mjs +0 -180
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/read-only-command-pack.mjs +0 -1
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/read-only-plan.mjs +0 -45
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/read-only-shell-policy.d.mts +0 -26
- package/vendor/extension-sso/vendor/extension-browser-sso/src/extensions/toolkit/read-only-shell-policy.mjs +0 -170
- package/vendor/extension-sso/vendor/extension-browser-sso/src/htmlSessionExtract.mjs +0 -64
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/LICENSE +0 -202
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/README.md +0 -29
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/package.json +0 -43
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/devops-data-paths.mjs +0 -222
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/devops-diagnostics.mjs +0 -440
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/enterprise-api-read.mjs +0 -180
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/read-only-command-pack.mjs +0 -1
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/read-only-plan.mjs +0 -45
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/read-only-shell-policy.d.mts +0 -26
- package/vendor/extension-sso/vendor/extension-read-only-toolkit/src/read-only-shell-policy.mjs +0 -170
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile, chmod } from "node:fs/promises";
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
|
|
4
|
-
export async function loadCookieJar(path) {
|
|
5
|
-
try {
|
|
6
|
-
const raw = await readFile(path, "utf8");
|
|
7
|
-
return JSON.parse(raw);
|
|
8
|
-
} catch (error) {
|
|
9
|
-
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") {
|
|
10
|
-
return null;
|
|
11
|
-
}
|
|
12
|
-
throw error;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export async function saveCookieJar(path, jar) {
|
|
17
|
-
await mkdir(dirname(path), { recursive: true });
|
|
18
|
-
const payload = {
|
|
19
|
-
...jar,
|
|
20
|
-
version: 1,
|
|
21
|
-
updatedAt: new Date().toISOString()
|
|
22
|
-
};
|
|
23
|
-
await writeFile(path, `${JSON.stringify(payload, null, 2)}\n`, { mode: 0o600 });
|
|
24
|
-
await chmod(path, 0o600);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function mergeCookies(existing = [], incoming = []) {
|
|
28
|
-
const map = new Map();
|
|
29
|
-
for (const cookie of [...existing, ...incoming]) {
|
|
30
|
-
const key = `${cookie.domain}\0${cookie.name}\0${cookie.path || "/"}`;
|
|
31
|
-
map.set(key, cookie);
|
|
32
|
-
}
|
|
33
|
-
return [...map.values()];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function cookiesForHost(cookies, host) {
|
|
37
|
-
const normalized = host.toLowerCase().replace(/^\./, "");
|
|
38
|
-
return cookies.filter((cookie) => {
|
|
39
|
-
const domain = String(cookie.domain || "").toLowerCase().replace(/^\./, "");
|
|
40
|
-
return normalized === domain || normalized.endsWith(`.${domain}`) || domain.endsWith(`.${normalized}`);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function toHeaderByteString(value) {
|
|
45
|
-
const text = String(value ?? "");
|
|
46
|
-
return /[^\u0000-\u00ff]/u.test(text) ? encodeURIComponent(text) : text;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function buildCookieHeader(cookies, host) {
|
|
50
|
-
return cookiesForHost(cookies, host)
|
|
51
|
-
.filter((cookie) => cookie.name)
|
|
52
|
-
.map((cookie) => `${toHeaderByteString(cookie.name)}=${toHeaderByteString(cookie.value)}`)
|
|
53
|
-
.join("; ");
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const SESSION_COOKIE_PATTERN =
|
|
57
|
-
/^(JSESSIONID|sid|SID|connect\.sid|session|_session|auth|oauth|PDSESSION|atlassian|bitbucket|crowd\.|seraph\.|luf_|DT|ln|idx|__Host-|__Secure-)/i;
|
|
58
|
-
|
|
59
|
-
export function hasMeaningfulSessionCookies(cookies, host) {
|
|
60
|
-
return cookiesForHost(cookies, host).some(
|
|
61
|
-
(cookie) => cookie.httpOnly || SESSION_COOKIE_PATTERN.test(cookie.name) || cookie.name.includes("SESSION")
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function listCookieHostCandidates(jar, domains = []) {
|
|
66
|
-
const candidates = [];
|
|
67
|
-
const seen = new Set();
|
|
68
|
-
const add = (host) => {
|
|
69
|
-
const bare = String(host || "").replace(/^\./, "").toLowerCase();
|
|
70
|
-
if (!bare || seen.has(bare)) return;
|
|
71
|
-
seen.add(bare);
|
|
72
|
-
candidates.push(bare);
|
|
73
|
-
};
|
|
74
|
-
for (const domain of domains) add(domain);
|
|
75
|
-
if (jar?.cookies?.length) {
|
|
76
|
-
for (const cookie of jar.cookies) {
|
|
77
|
-
const cookieDomain = String(cookie.domain || "").replace(/^\./, "").toLowerCase();
|
|
78
|
-
for (const domain of domains) {
|
|
79
|
-
const bare = domain.replace(/^\./, "").toLowerCase();
|
|
80
|
-
if (cookieDomain === bare || cookieDomain.endsWith(`.${bare}`) || bare.endsWith(`.${cookieDomain}`)) {
|
|
81
|
-
add(cookieDomain);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return candidates;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function resolveBestCookieHost(jar, domains = [], { requireSession = false } = {}) {
|
|
90
|
-
if (!jar?.cookies?.length) {
|
|
91
|
-
return { host: domains[0] ?? "", cookie: "", hasCookies: false, hasSession: false };
|
|
92
|
-
}
|
|
93
|
-
for (const host of listCookieHostCandidates(jar, domains)) {
|
|
94
|
-
const cookie = buildCookieHeader(jar.cookies, host);
|
|
95
|
-
if (!cookie) continue;
|
|
96
|
-
const hasSession = hasMeaningfulSessionCookies(jar.cookies, host);
|
|
97
|
-
if (!requireSession || hasSession) {
|
|
98
|
-
return { host, cookie, hasCookies: true, hasSession };
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return { host: domains[0] ?? "", cookie: "", hasCookies: false, hasSession: false };
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export function jarSummary(jar, config) {
|
|
105
|
-
if (!jar?.cookies?.length) {
|
|
106
|
-
return {
|
|
107
|
-
authenticated: false,
|
|
108
|
-
mode: "browser-session",
|
|
109
|
-
domain: config.domain,
|
|
110
|
-
message: "No SSO cookie jar. Sign in through your SSO provider in Chrome, or enable browser auto-auth."
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
const oktaCookies = cookiesForHost(jar.cookies, config.domain);
|
|
114
|
-
const valid = jar.authenticated === true && oktaCookies.length > 0;
|
|
115
|
-
return {
|
|
116
|
-
authenticated: valid,
|
|
117
|
-
mode: "browser-session",
|
|
118
|
-
domain: config.domain,
|
|
119
|
-
cookieCount: jar.cookies.length,
|
|
120
|
-
oktaCookieCount: oktaCookies.length,
|
|
121
|
-
validatedAt: jar.validatedAt ?? null,
|
|
122
|
-
updatedAt: jar.updatedAt ?? null,
|
|
123
|
-
domains: [...new Set(jar.cookies.map((cookie) => cookie.domain))].sort()
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function isValidationFresh(jar, ttlMs, now = Date.now()) {
|
|
128
|
-
if (!jar?.validatedAt) return false;
|
|
129
|
-
const validatedAt = Date.parse(jar.validatedAt);
|
|
130
|
-
if (Number.isNaN(validatedAt)) return false;
|
|
131
|
-
return now - validatedAt < ttlMs;
|
|
132
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
|
-
import { isAbsolute, resolve } from "node:path";
|
|
4
|
-
import { parse as parseYaml } from "yaml";
|
|
5
|
-
|
|
6
|
-
export class PathText {
|
|
7
|
-
static normalize(value) {
|
|
8
|
-
return typeof value === "string" ? value.trim() : "";
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
static resolve(path, cwd = process.cwd()) {
|
|
12
|
-
const normalized = PathText.normalize(path);
|
|
13
|
-
if (!normalized) {
|
|
14
|
-
return "";
|
|
15
|
-
}
|
|
16
|
-
return isAbsolute(normalized) ? normalized : resolve(cwd, normalized);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export class EnvTokenExpander {
|
|
21
|
-
constructor(env = process.env) {
|
|
22
|
-
this.env = env;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
expand(value) {
|
|
26
|
-
if (typeof value !== "string") {
|
|
27
|
-
return "";
|
|
28
|
-
}
|
|
29
|
-
return value.replace(
|
|
30
|
-
/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g,
|
|
31
|
-
(_match, name, fallback = "") => this.env[name] ?? fallback,
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export class DevopsDataConfigLoader {
|
|
37
|
-
constructor(env = process.env) {
|
|
38
|
-
this.env = env;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
configPath() {
|
|
42
|
-
return PathText.resolve(this.env.DEVOPS_DATA_CONFIG ?? "config/devops-data.yaml");
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
load() {
|
|
46
|
-
const path = this.configPath();
|
|
47
|
-
if (!existsSync(path)) {
|
|
48
|
-
return {};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const parsed = parseYaml(readFileSync(path, "utf8")) ?? {};
|
|
52
|
-
return parsed.spec?.groups
|
|
53
|
-
? { dataRoot: parsed.spec.dataRoot, ...parsed.spec.groups }
|
|
54
|
-
: parsed;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export class DevopsDataLayout {
|
|
59
|
-
constructor(config = {}, env = process.env) {
|
|
60
|
-
this.config = config;
|
|
61
|
-
this.env = env;
|
|
62
|
-
this.expander = new EnvTokenExpander(env);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
dataRoot() {
|
|
66
|
-
return PathText.resolve(
|
|
67
|
-
this.env.DEVOPS_DATA_ROOT ??
|
|
68
|
-
(this.env.DEVOPS_HOME ? `${this.env.DEVOPS_HOME}/data` : undefined) ??
|
|
69
|
-
(this.expander.expand(this.config.dataRoot) || undefined) ??
|
|
70
|
-
`${homedir()}/.devops-tool/data`,
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
value(path) {
|
|
75
|
-
return path.split(".").reduce((current, segment) => {
|
|
76
|
-
if (!current || typeof current !== "object") {
|
|
77
|
-
return undefined;
|
|
78
|
-
}
|
|
79
|
-
return current[segment];
|
|
80
|
-
}, this.config);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
configuredPath(configKey, fallback) {
|
|
84
|
-
const configured = this.expander.expand(this.value(configKey));
|
|
85
|
-
if (!configured) {
|
|
86
|
-
return fallback;
|
|
87
|
-
}
|
|
88
|
-
return isAbsolute(configured) ? configured : resolve(this.dataRoot(), configured);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export class DevopsDataPathResolver {
|
|
93
|
-
constructor(env = process.env, config = new DevopsDataConfigLoader(env).load()) {
|
|
94
|
-
this.env = env;
|
|
95
|
-
this.layout = new DevopsDataLayout(config, env);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
root() {
|
|
99
|
-
return this.layout.dataRoot();
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
dataPath(...segments) {
|
|
103
|
-
return resolve(this.root(), ...segments);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
cachePath(...segments) {
|
|
107
|
-
return this.dataPath("cache", ...segments);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
projectPath(...segments) {
|
|
111
|
-
return this.dataPath("project", ...segments);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
runtimePath(...segments) {
|
|
115
|
-
return this.dataPath("runtime", ...segments);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
configuredDataPath(envName, configKey, fallback) {
|
|
119
|
-
const envPath = PathText.resolve(this.env[envName]);
|
|
120
|
-
if (envPath) {
|
|
121
|
-
return envPath;
|
|
122
|
-
}
|
|
123
|
-
return this.layout.configuredPath(configKey, fallback);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
codexSessionRoot() {
|
|
127
|
-
return this.configuredDataPath(
|
|
128
|
-
"DEVOPS_CODEX_SESSION_ROOT",
|
|
129
|
-
"project.sessions",
|
|
130
|
-
this.projectPath("sessions", "codex"),
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
codexMemoryRoot() {
|
|
135
|
-
return this.configuredDataPath(
|
|
136
|
-
"DEVOPS_CODEX_MEMORY_ROOT",
|
|
137
|
-
"project.codexMemory",
|
|
138
|
-
this.projectPath("memory", "codex"),
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
generatedOutputRoot() {
|
|
143
|
-
return this.configuredDataPath(
|
|
144
|
-
"DEVOPS_GENERATED_ROOT",
|
|
145
|
-
"project.generated",
|
|
146
|
-
this.projectPath("generated"),
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
tempDataRoot() {
|
|
151
|
-
return this.configuredDataPath("DEVOPS_TMP_ROOT", "tmp", this.dataPath("tmp"));
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
summary() {
|
|
155
|
-
return {
|
|
156
|
-
dataRoot: this.root(),
|
|
157
|
-
runtime: {
|
|
158
|
-
claude: this.runtimePath("claude"),
|
|
159
|
-
npm: this.runtimePath("npm"),
|
|
160
|
-
cache: this.runtimePath("cache"),
|
|
161
|
-
config: this.runtimePath("config"),
|
|
162
|
-
},
|
|
163
|
-
project: {
|
|
164
|
-
agentMemory: this.projectPath("agent-memory-local"),
|
|
165
|
-
memory: this.projectPath("memory"),
|
|
166
|
-
codexMemory: this.codexMemoryRoot(),
|
|
167
|
-
sessions: this.codexSessionRoot(),
|
|
168
|
-
generated: this.generatedOutputRoot(),
|
|
169
|
-
},
|
|
170
|
-
cache: {},
|
|
171
|
-
tmp: this.tempDataRoot(),
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function resolver(env = process.env) {
|
|
177
|
-
return new DevopsDataPathResolver(env);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export function devopsDataRoot(env = process.env) {
|
|
181
|
-
return resolver(env).root();
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export function devopsDataPath(...segments) {
|
|
185
|
-
return resolver().dataPath(...segments);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export function devopsCachePath(...segments) {
|
|
189
|
-
return resolver().cachePath(...segments);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
export function devopsProjectDataPath(...segments) {
|
|
193
|
-
return resolver().projectPath(...segments);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export function devopsRuntimeDataPath(...segments) {
|
|
197
|
-
return resolver().runtimePath(...segments);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
export function configuredDataPath(envName, configKey, fallback) {
|
|
201
|
-
return resolver().configuredDataPath(envName, configKey, fallback);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
export function codexSessionRoot() {
|
|
205
|
-
return resolver().codexSessionRoot();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
export function codexMemoryRoot() {
|
|
209
|
-
return resolver().codexMemoryRoot();
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
export function generatedOutputRoot() {
|
|
213
|
-
return resolver().generatedOutputRoot();
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
export function tempDataRoot() {
|
|
217
|
-
return resolver().tempDataRoot();
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
export function dataPathSummary() {
|
|
221
|
-
return resolver().summary();
|
|
222
|
-
}
|