@mesh-tech/mesh-cli 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -56
- package/dist/bin/mesh.js +4843 -4077
- package/dist/bin/mesh.js.map +4 -4
- package/dist/build-info.json +2 -2
- package/dist/src/commands/create-app.d.ts +28 -0
- package/dist/src/commands/create-app.d.ts.map +1 -1
- package/dist/src/commands/create-app.js +45 -1
- package/dist/src/commands/create-app.js.map +1 -1
- package/dist/src/commands/dev-doctor.js +2 -2
- package/dist/src/commands/dev-doctor.js.map +1 -1
- package/dist/src/commands/init/wizard.d.ts +216 -0
- package/dist/src/commands/init/wizard.d.ts.map +1 -0
- package/dist/src/commands/init/wizard.js +471 -0
- package/dist/src/commands/init/wizard.js.map +1 -0
- package/dist/src/commands/init.d.ts +14 -6
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +41 -15
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/local/dev-local.d.ts.map +1 -1
- package/dist/src/commands/local/dev-local.js +6 -0
- package/dist/src/commands/local/dev-local.js.map +1 -1
- package/dist/src/commands/login.d.ts +76 -5
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +161 -60
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/registry.d.ts +133 -10
- package/dist/src/commands/registry.d.ts.map +1 -1
- package/dist/src/commands/registry.js +238 -86
- package/dist/src/commands/registry.js.map +1 -1
- package/dist/src/commands/temporal.js +37 -23
- package/dist/src/commands/temporal.js.map +3 -3
- package/dist/src/docs/registry-docs.d.ts.map +1 -1
- package/dist/src/docs/registry-docs.js +8 -3
- package/dist/src/docs/registry-docs.js.map +1 -1
- package/dist/src/program.d.ts.map +1 -1
- package/dist/src/program.js +5 -1
- package/dist/src/program.js.map +1 -1
- package/dist/src/utils/auth-preflight.d.ts +51 -20
- package/dist/src/utils/auth-preflight.d.ts.map +1 -1
- package/dist/src/utils/auth-preflight.js +48 -21
- package/dist/src/utils/auth-preflight.js.map +1 -1
- package/dist/src/utils/mesh-json.d.ts +58 -0
- package/dist/src/utils/mesh-json.d.ts.map +1 -0
- package/dist/src/utils/mesh-json.js +85 -0
- package/dist/src/utils/mesh-json.js.map +1 -0
- package/dist/src/utils/registry-broker.d.ts +12 -29
- package/dist/src/utils/registry-broker.d.ts.map +1 -1
- package/dist/src/utils/registry-broker.js +12 -29
- package/dist/src/utils/registry-broker.js.map +1 -1
- package/dist/src/utils/registry-identity.d.ts +170 -0
- package/dist/src/utils/registry-identity.d.ts.map +1 -0
- package/dist/src/utils/registry-identity.js +273 -0
- package/dist/src/utils/registry-identity.js.map +1 -0
- package/package.json +3 -2
- package/skills/core/SKILL.md +13 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-docs.d.ts","sourceRoot":"","sources":["../../../src/docs/registry-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,SAAS,GAAE,MAAwB,GAAG,gBAAgB,GAAG,IAAI,CAGjG;
|
|
1
|
+
{"version":3,"file":"registry-docs.d.ts","sourceRoot":"","sources":["../../../src/docs/registry-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,SAAS,GAAE,MAAwB,GAAG,gBAAgB,GAAG,IAAI,CAGjG;AA0BD,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,gBAAgB,EACtB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAED,yEAAyE;AACzE,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAMD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAwB,EACnC,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,MAAM,CAAC,CAyDjB"}
|
|
@@ -28,11 +28,16 @@ export function readDocsRegistryAuth(npmrcPath = homeNpmrcPath()) {
|
|
|
28
28
|
function packumentUrl(endpoint, pkg) {
|
|
29
29
|
return `${endpoint.replace(/\/+$/, "")}/${pkg.replace(/\//g, "%2f")}`;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
/**
|
|
32
|
+
* An authenticated registry request. `accept` defaults to JSON for packument
|
|
33
|
+
* reads; a tarball download must ask for the octet stream instead — the
|
|
34
|
+
* registry answers 406 to a JSON accept on a `.tgz` URL.
|
|
35
|
+
*/
|
|
36
|
+
async function registryFetch(auth, url, fetchImpl, accept = "application/json") {
|
|
32
37
|
return fetchImpl(url, {
|
|
33
38
|
headers: {
|
|
34
39
|
authorization: `Bearer ${auth.token}`,
|
|
35
|
-
accept
|
|
40
|
+
accept,
|
|
36
41
|
},
|
|
37
42
|
});
|
|
38
43
|
}
|
|
@@ -108,7 +113,7 @@ export async function fetchDocsArtifact(auth, version, cacheRoot = docsCacheRoot
|
|
|
108
113
|
if (new URL(tarball).origin !== new URL(auth.endpoint).origin) {
|
|
109
114
|
throw new Error(`${DOCS_PACKAGE}@${version} points its tarball at ${new URL(tarball).origin}, not the registry (${new URL(auth.endpoint).origin}) — refusing to send the registry token off-origin`);
|
|
110
115
|
}
|
|
111
|
-
const tgzResponse = await registryFetch(auth, tarball, fetchImpl);
|
|
116
|
+
const tgzResponse = await registryFetch(auth, tarball, fetchImpl, "application/octet-stream");
|
|
112
117
|
if (!tgzResponse.ok) {
|
|
113
118
|
throw new Error(`downloading ${DOCS_PACKAGE}@${version} failed: ${tgzResponse.status}`);
|
|
114
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-docs.js","sourceRoot":"","sources":["../../../src/docs/registry-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEnF,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAO9C,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,YAAoB,aAAa,EAAE;IACtE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,sBAAsB,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY,CAAC,QAAgB,EAAE,GAAW;IACjD,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAsB,EACtB,GAAW,EACX,SAAuB;
|
|
1
|
+
{"version":3,"file":"registry-docs.js","sourceRoot":"","sources":["../../../src/docs/registry-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAqCzE"}
|
package/dist/src/program.js
CHANGED
|
@@ -47,7 +47,11 @@ export const CLI_DESCRIPTION = "CLI for Mesh Lab development utilities";
|
|
|
47
47
|
*/
|
|
48
48
|
export function createProgram(options = {}) {
|
|
49
49
|
const program = new Command();
|
|
50
|
-
|
|
50
|
+
// Positional options: an option is parsed by the command it follows, so a
|
|
51
|
+
// parent with flags of its own (`mesh init --json`) never swallows the
|
|
52
|
+
// same flag meant for its subcommand (`mesh init app-tenant --json`).
|
|
53
|
+
// Commander requires this on the root for any nested command to opt in.
|
|
54
|
+
program.name(CLI_NAME).description(CLI_DESCRIPTION).enablePositionalOptions();
|
|
51
55
|
if (options.version !== undefined)
|
|
52
56
|
program.version(options.version);
|
|
53
57
|
registerLoginCommand(program);
|
package/dist/src/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,wCAAwC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,28 +9,19 @@
|
|
|
9
9
|
* Pure parsers/classifiers are exported separately from the impure probes so
|
|
10
10
|
* the branch logic is unit-testable without network or a home directory.
|
|
11
11
|
*/
|
|
12
|
-
/**
|
|
13
|
-
* The context that owns the `@mesh-tech` registry. There is exactly one — the
|
|
14
|
-
* `mesh-platform` CodeArtifact domain every tenant pulls from — so this is the
|
|
15
|
-
* context whose broker can mint a read token for anybody, and it is what a
|
|
16
|
-
* printed remediation should name.
|
|
17
|
-
*
|
|
18
|
-
* Safe to hardcode for the same reason `--profile mesh-dev` already was: it
|
|
19
|
-
* identifies the registry, not the reader's own platform. It also resolves on a
|
|
20
|
-
* machine with no AWS at all, via the pinned first-party alias.
|
|
21
|
-
*/
|
|
22
|
-
export declare const REGISTRY_CONTEXT = "mesh.dev";
|
|
23
12
|
/**
|
|
24
13
|
* The command that fixes a stale/missing CodeArtifact token — **broker-first**,
|
|
25
14
|
* so it works for someone with no AWS account at all.
|
|
26
15
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
16
|
+
* Bare on purpose. The `@mesh-tech` registry is one global identity
|
|
17
|
+
* (`utils/registry-identity.ts`): `mesh registry login` resolves it, signs in
|
|
18
|
+
* if it must, and writes `~/.npmrc` in a single run, so no remediation ever
|
|
19
|
+
* needs to name a platform context.
|
|
29
20
|
*/
|
|
30
|
-
export declare const REGISTRY_LOGIN_FIX = "mesh registry login
|
|
21
|
+
export declare const REGISTRY_LOGIN_FIX = "mesh registry login";
|
|
31
22
|
/**
|
|
32
23
|
* The AWS-profile form. Only correct for people who **deploy**, or when the
|
|
33
|
-
*
|
|
24
|
+
* registry broker is unavailable.
|
|
34
25
|
*
|
|
35
26
|
* Kept as a separate named constant rather than the default: `--profile`
|
|
36
27
|
* deliberately skips the broker, so printing it as the generic fix sends a
|
|
@@ -38,12 +29,14 @@ export declare const REGISTRY_LOGIN_FIX = "mesh registry login mesh.dev";
|
|
|
38
29
|
*/
|
|
39
30
|
export declare const REGISTRY_LOGIN_FIX_AWS = "mesh registry login --profile mesh-dev";
|
|
40
31
|
/**
|
|
41
|
-
* Render the registry fix
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
32
|
+
* Render the registry fix. Always the bare command — the registry is global,
|
|
33
|
+
* so a remediation that has to name a context is a remediation the reader has
|
|
34
|
+
* to edit first, and one that names the wrong context does not work at all.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* registryLoginFix(); // → "mesh registry login"
|
|
45
38
|
*/
|
|
46
|
-
export declare function registryLoginFix(
|
|
39
|
+
export declare function registryLoginFix(): string;
|
|
47
40
|
/** The documented AWS SSO login form (root package.json `sso` script). */
|
|
48
41
|
export declare const SSO_LOGIN_FIX = "aws sso login --sso-session=mesh # or: pnpm sso";
|
|
49
42
|
/**
|
|
@@ -142,6 +135,44 @@ export declare function probeRegistryToken(opts?: {
|
|
|
142
135
|
timeoutMs?: number;
|
|
143
136
|
fetchFn?: typeof fetch;
|
|
144
137
|
}): Promise<RegistryProbe>;
|
|
138
|
+
/**
|
|
139
|
+
* The one-glance answer to "can this machine install `@mesh-tech` packages?"
|
|
140
|
+
* — the `~/.npmrc` token probe plus the registry session, classified for a
|
|
141
|
+
* caller that must decide before doing anything else.
|
|
142
|
+
*/
|
|
143
|
+
export interface RegistryPreflight {
|
|
144
|
+
/** `valid` = the token works; the rest mirror `RegistryTokenState`. */
|
|
145
|
+
state: "valid" | "missing" | "expired" | "unreachable";
|
|
146
|
+
/** Who holds the registry session, when one is cached. */
|
|
147
|
+
email?: string;
|
|
148
|
+
/** The command that sets this machine up. */
|
|
149
|
+
fix: string;
|
|
150
|
+
/** The probe's detail, for the warn/fail line. */
|
|
151
|
+
detail?: string;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Classify a probe + session into the preflight verdict. Pure; the network
|
|
155
|
+
* part lives in `registryPreflight`.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* classifyRegistryPreflight({ state: "fresh" }, { email: "dev@trabian.com" }).state; // → "valid"
|
|
159
|
+
*/
|
|
160
|
+
export declare function classifyRegistryPreflight(probe: RegistryProbe, session: {
|
|
161
|
+
email: string;
|
|
162
|
+
} | null): RegistryPreflight;
|
|
163
|
+
/**
|
|
164
|
+
* Registry preflight for commands that cannot proceed without package access
|
|
165
|
+
* (`mesh create-app` outside the platform monorepo). Never throws.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* const pf = await registryPreflight();
|
|
169
|
+
* if (pf.state !== "valid" && pf.state !== "unreachable") process.exit(1);
|
|
170
|
+
*/
|
|
171
|
+
export declare function registryPreflight(opts?: {
|
|
172
|
+
npmrcPath?: string;
|
|
173
|
+
timeoutMs?: number;
|
|
174
|
+
fetchFn?: typeof fetch;
|
|
175
|
+
}): Promise<RegistryPreflight>;
|
|
145
176
|
/** True when npm output/an error message is an auth failure (E401/E403). */
|
|
146
177
|
export declare function isNpmAuthErrorText(text: string): boolean;
|
|
147
178
|
/** True when an npm exec error (with stderr/message) is an auth failure. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-preflight.d.ts","sourceRoot":"","sources":["../../../src/utils/auth-preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH
|
|
1
|
+
{"version":3,"file":"auth-preflight.d.ts","sourceRoot":"","sources":["../../../src/utils/auth-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,28 +12,19 @@
|
|
|
12
12
|
import * as fs from "fs";
|
|
13
13
|
import * as os from "os";
|
|
14
14
|
import * as path from "path";
|
|
15
|
-
/**
|
|
16
|
-
* The context that owns the `@mesh-tech` registry. There is exactly one — the
|
|
17
|
-
* `mesh-platform` CodeArtifact domain every tenant pulls from — so this is the
|
|
18
|
-
* context whose broker can mint a read token for anybody, and it is what a
|
|
19
|
-
* printed remediation should name.
|
|
20
|
-
*
|
|
21
|
-
* Safe to hardcode for the same reason `--profile mesh-dev` already was: it
|
|
22
|
-
* identifies the registry, not the reader's own platform. It also resolves on a
|
|
23
|
-
* machine with no AWS at all, via the pinned first-party alias.
|
|
24
|
-
*/
|
|
25
|
-
export const REGISTRY_CONTEXT = "mesh.dev";
|
|
26
15
|
/**
|
|
27
16
|
* The command that fixes a stale/missing CodeArtifact token — **broker-first**,
|
|
28
17
|
* so it works for someone with no AWS account at all.
|
|
29
18
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
19
|
+
* Bare on purpose. The `@mesh-tech` registry is one global identity
|
|
20
|
+
* (`utils/registry-identity.ts`): `mesh registry login` resolves it, signs in
|
|
21
|
+
* if it must, and writes `~/.npmrc` in a single run, so no remediation ever
|
|
22
|
+
* needs to name a platform context.
|
|
32
23
|
*/
|
|
33
|
-
export const REGISTRY_LOGIN_FIX =
|
|
24
|
+
export const REGISTRY_LOGIN_FIX = "mesh registry login";
|
|
34
25
|
/**
|
|
35
26
|
* The AWS-profile form. Only correct for people who **deploy**, or when the
|
|
36
|
-
*
|
|
27
|
+
* registry broker is unavailable.
|
|
37
28
|
*
|
|
38
29
|
* Kept as a separate named constant rather than the default: `--profile`
|
|
39
30
|
* deliberately skips the broker, so printing it as the generic fix sends a
|
|
@@ -41,13 +32,15 @@ export const REGISTRY_LOGIN_FIX = `mesh registry login ${REGISTRY_CONTEXT}`;
|
|
|
41
32
|
*/
|
|
42
33
|
export const REGISTRY_LOGIN_FIX_AWS = "mesh registry login --profile mesh-dev";
|
|
43
34
|
/**
|
|
44
|
-
* Render the registry fix
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
35
|
+
* Render the registry fix. Always the bare command — the registry is global,
|
|
36
|
+
* so a remediation that has to name a context is a remediation the reader has
|
|
37
|
+
* to edit first, and one that names the wrong context does not work at all.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* registryLoginFix(); // → "mesh registry login"
|
|
48
41
|
*/
|
|
49
|
-
export function registryLoginFix(
|
|
50
|
-
return
|
|
42
|
+
export function registryLoginFix() {
|
|
43
|
+
return REGISTRY_LOGIN_FIX;
|
|
51
44
|
}
|
|
52
45
|
/** The documented AWS SSO login form (root package.json `sso` script). */
|
|
53
46
|
export const SSO_LOGIN_FIX = "aws sso login --sso-session=mesh # or: pnpm sso";
|
|
@@ -235,6 +228,40 @@ export async function probeRegistryToken(opts) {
|
|
|
235
228
|
};
|
|
236
229
|
}
|
|
237
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Classify a probe + session into the preflight verdict. Pure; the network
|
|
233
|
+
* part lives in `registryPreflight`.
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* classifyRegistryPreflight({ state: "fresh" }, { email: "dev@trabian.com" }).state; // → "valid"
|
|
237
|
+
*/
|
|
238
|
+
export function classifyRegistryPreflight(probe, session) {
|
|
239
|
+
const email = session?.email;
|
|
240
|
+
const fix = "mesh init";
|
|
241
|
+
if (probe.state === "fresh")
|
|
242
|
+
return { state: "valid", email, fix };
|
|
243
|
+
return { state: probe.state, email, fix, detail: probe.detail };
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Registry preflight for commands that cannot proceed without package access
|
|
247
|
+
* (`mesh create-app` outside the platform monorepo). Never throws.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* const pf = await registryPreflight();
|
|
251
|
+
* if (pf.state !== "valid" && pf.state !== "unreachable") process.exit(1);
|
|
252
|
+
*/
|
|
253
|
+
export async function registryPreflight(opts) {
|
|
254
|
+
const probe = await probeRegistryToken(opts);
|
|
255
|
+
let session = null;
|
|
256
|
+
try {
|
|
257
|
+
const { readRegistrySession } = await import("./registry-identity.js");
|
|
258
|
+
session = readRegistrySession();
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// no session store readable — the probe alone decides
|
|
262
|
+
}
|
|
263
|
+
return classifyRegistryPreflight(probe, session);
|
|
264
|
+
}
|
|
238
265
|
// ============================================================================
|
|
239
266
|
// npm / AWS error classification (pure)
|
|
240
267
|
// ============================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-preflight.js","sourceRoot":"","sources":["../../../src/utils/auth-preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"auth-preflight.js","sourceRoot":"","sources":["../../../src/utils/auth-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mesh.json` — the repo-level record of which tenant a checkout belongs to
|
|
3
|
+
* and where that tenant runs.
|
|
4
|
+
*
|
|
5
|
+
* Written by the `mesh init` wizard at the repo root, read by anything that
|
|
6
|
+
* wants a default `--tenant` (`mesh create-app`, `mesh dev`'s local mode) and
|
|
7
|
+
* by the wizard itself so a re-run pre-fills its answers. It is deliberately
|
|
8
|
+
* tiny and app-agnostic: per-app identity stays in each app's Pulumi config,
|
|
9
|
+
* which wins when both are present.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // mesh.json
|
|
13
|
+
* { "tenant": "acme", "platform": "local" }
|
|
14
|
+
*/
|
|
15
|
+
/** The file's name at the repo root. */
|
|
16
|
+
export declare const MESH_JSON = "mesh.json";
|
|
17
|
+
/** The record `mesh.json` holds. */
|
|
18
|
+
export interface MeshJson {
|
|
19
|
+
/** The app tenant this repo belongs to (`^[a-z][a-z0-9-]*$`). */
|
|
20
|
+
tenant: string;
|
|
21
|
+
/**
|
|
22
|
+
* Where the tenant runs: `local` (the `mesh start` platform, no deployed
|
|
23
|
+
* platform yet) or the environment name of a deployed platform (`dev`,
|
|
24
|
+
* `uat`, …), which with the tenant forms the `<tenant>.<env>` login context.
|
|
25
|
+
*/
|
|
26
|
+
platform: string;
|
|
27
|
+
}
|
|
28
|
+
/** True when `value` is a tenant name every Mesh command accepts. */
|
|
29
|
+
export declare function isValidTenantName(value: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Parse `mesh.json` content. Null when the document is not the expected
|
|
32
|
+
* shape — a malformed file is treated as absent, never as an error, because
|
|
33
|
+
* nothing that reads it can do better than "no default".
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* parseMeshJson('{"tenant":"acme","platform":"local"}'); // → { tenant: "acme", platform: "local" }
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseMeshJson(content: string): MeshJson | null;
|
|
39
|
+
/**
|
|
40
|
+
* Find the nearest `mesh.json` at or above `startDir`. Stops at the first
|
|
41
|
+
* match, at a `.git` directory (a repo boundary), or at the filesystem root.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* findMeshJson("/work/acme-mesh-apps/apps/billing"); // → { path: "/work/acme-mesh-apps/mesh.json", data }
|
|
45
|
+
*/
|
|
46
|
+
export declare function findMeshJson(startDir: string): {
|
|
47
|
+
path: string;
|
|
48
|
+
data: MeshJson;
|
|
49
|
+
} | null;
|
|
50
|
+
/**
|
|
51
|
+
* Write `mesh.json` under `rootDir`, replacing an existing one. Returns the
|
|
52
|
+
* path written.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* writeMeshJson("/work/acme-mesh-apps", { tenant: "acme", platform: "dev" });
|
|
56
|
+
*/
|
|
57
|
+
export declare function writeMeshJson(rootDir: string, data: MeshJson): string;
|
|
58
|
+
//# sourceMappingURL=mesh-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-json.d.ts","sourceRoot":"","sources":["../../../src/utils/mesh-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,wCAAwC;AACxC,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC,oCAAoC;AACpC,MAAM,WAAW,QAAQ;IACvB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAS9D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAmBtF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAIrE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mesh.json` — the repo-level record of which tenant a checkout belongs to
|
|
3
|
+
* and where that tenant runs.
|
|
4
|
+
*
|
|
5
|
+
* Written by the `mesh init` wizard at the repo root, read by anything that
|
|
6
|
+
* wants a default `--tenant` (`mesh create-app`, `mesh dev`'s local mode) and
|
|
7
|
+
* by the wizard itself so a re-run pre-fills its answers. It is deliberately
|
|
8
|
+
* tiny and app-agnostic: per-app identity stays in each app's Pulumi config,
|
|
9
|
+
* which wins when both are present.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // mesh.json
|
|
13
|
+
* { "tenant": "acme", "platform": "local" }
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from "fs";
|
|
16
|
+
import * as path from "path";
|
|
17
|
+
/** The file's name at the repo root. */
|
|
18
|
+
export const MESH_JSON = "mesh.json";
|
|
19
|
+
/** True when `value` is a tenant name every Mesh command accepts. */
|
|
20
|
+
export function isValidTenantName(value) {
|
|
21
|
+
return /^[a-z][a-z0-9-]*$/.test(value);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse `mesh.json` content. Null when the document is not the expected
|
|
25
|
+
* shape — a malformed file is treated as absent, never as an error, because
|
|
26
|
+
* nothing that reads it can do better than "no default".
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* parseMeshJson('{"tenant":"acme","platform":"local"}'); // → { tenant: "acme", platform: "local" }
|
|
30
|
+
*/
|
|
31
|
+
export function parseMeshJson(content) {
|
|
32
|
+
try {
|
|
33
|
+
const data = JSON.parse(content);
|
|
34
|
+
if (typeof data?.tenant !== "string" || !isValidTenantName(data.tenant))
|
|
35
|
+
return null;
|
|
36
|
+
const platform = typeof data.platform === "string" && data.platform ? data.platform : "local";
|
|
37
|
+
return { tenant: data.tenant, platform };
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find the nearest `mesh.json` at or above `startDir`. Stops at the first
|
|
45
|
+
* match, at a `.git` directory (a repo boundary), or at the filesystem root.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* findMeshJson("/work/acme-mesh-apps/apps/billing"); // → { path: "/work/acme-mesh-apps/mesh.json", data }
|
|
49
|
+
*/
|
|
50
|
+
export function findMeshJson(startDir) {
|
|
51
|
+
let dir = path.resolve(startDir);
|
|
52
|
+
while (true) {
|
|
53
|
+
const candidate = path.join(dir, MESH_JSON);
|
|
54
|
+
if (fs.existsSync(candidate)) {
|
|
55
|
+
let content = "";
|
|
56
|
+
try {
|
|
57
|
+
content = fs.readFileSync(candidate, "utf-8");
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const data = parseMeshJson(content);
|
|
63
|
+
return data ? { path: candidate, data } : null;
|
|
64
|
+
}
|
|
65
|
+
if (fs.existsSync(path.join(dir, ".git")))
|
|
66
|
+
return null;
|
|
67
|
+
const parent = path.dirname(dir);
|
|
68
|
+
if (parent === dir)
|
|
69
|
+
return null;
|
|
70
|
+
dir = parent;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Write `mesh.json` under `rootDir`, replacing an existing one. Returns the
|
|
75
|
+
* path written.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* writeMeshJson("/work/acme-mesh-apps", { tenant: "acme", platform: "dev" });
|
|
79
|
+
*/
|
|
80
|
+
export function writeMeshJson(rootDir, data) {
|
|
81
|
+
const target = path.join(rootDir, MESH_JSON);
|
|
82
|
+
fs.writeFileSync(target, `${JSON.stringify({ tenant: data.tenant, platform: data.platform }, null, 2)}\n`);
|
|
83
|
+
return target;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=mesh-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-json.js","sourceRoot":"","sources":["../../../src/utils/mesh-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,wCAAwC;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAcrC,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC5D,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACrF,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9F,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,IAAc;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3G,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This is the path that lets a brand-new Trabian developer install
|
|
5
5
|
* `@mesh-tech/*` with **no AWS account, no AWS CLI and no ~/.aws/config**: the
|
|
6
|
-
* broker verifies the Zitadel id token `mesh login`
|
|
7
|
-
* caller's role, and returns a CodeArtifact
|
|
8
|
-
* identity. No AWS credential of any kind
|
|
6
|
+
* broker verifies the Zitadel id token `mesh registry login` cached for the
|
|
7
|
+
* registry's own issuer, checks the caller's role, and returns a CodeArtifact
|
|
8
|
+
* token minted with the BROKER's AWS identity. No AWS credential of any kind
|
|
9
|
+
* reaches the laptop. Which broker to call comes from the registry's global
|
|
10
|
+
* identity (`registry-identity.ts`), never from a platform context.
|
|
9
11
|
*
|
|
10
12
|
* Everything here is pure or dependency-injected so the fallback behaviour —
|
|
11
13
|
* which is what decides whether a broker hiccup breaks an install — is
|
|
@@ -15,26 +17,6 @@ type CtxConfig = {
|
|
|
15
17
|
issuer?: string;
|
|
16
18
|
registryBroker?: string;
|
|
17
19
|
} | null;
|
|
18
|
-
/**
|
|
19
|
-
* Pick a context for a `mesh registry login` invoked with none.
|
|
20
|
-
*
|
|
21
|
-
* A context-less call used to skip the broker outright, which quietly sent
|
|
22
|
-
* anyone following a remediation that omits the context straight back to the
|
|
23
|
-
* AWS chain — the exact routing this feature removes. So: if exactly one cached
|
|
24
|
-
* context publishes a `registryBroker`, use it. Zero or several is genuinely
|
|
25
|
-
* ambiguous and the caller must say which.
|
|
26
|
-
*
|
|
27
|
-
* Deliberately narrow. Guessing among several contexts would post the user's id
|
|
28
|
-
* token to a broker they did not name.
|
|
29
|
-
*/
|
|
30
|
-
export declare function resolveDefaultBrokerContext(configs?: Record<string, {
|
|
31
|
-
registryBroker?: string;
|
|
32
|
-
}>, credentials?: Record<string, unknown>): {
|
|
33
|
-
context: string;
|
|
34
|
-
} | {
|
|
35
|
-
reason: "none" | "ambiguous";
|
|
36
|
-
candidates: string[];
|
|
37
|
-
};
|
|
38
20
|
/** A successful grant from `POST /token`. */
|
|
39
21
|
export interface RegistryGrant {
|
|
40
22
|
/** npm scope the endpoint is bound to, e.g. "@mesh-tech". */
|
|
@@ -52,7 +34,7 @@ export type RegistryBrokerFailure =
|
|
|
52
34
|
{
|
|
53
35
|
kind: "no-broker";
|
|
54
36
|
}
|
|
55
|
-
/** No cached Zitadel session
|
|
37
|
+
/** No cached Zitadel session for the registry — `mesh registry login` signs in. */
|
|
56
38
|
| {
|
|
57
39
|
kind: "no-session";
|
|
58
40
|
}
|
|
@@ -134,12 +116,13 @@ export declare function classifyBrokerResponse(res: {
|
|
|
134
116
|
json: () => Promise<unknown>;
|
|
135
117
|
}): Promise<RegistryBrokerResult>;
|
|
136
118
|
/**
|
|
137
|
-
* Exchange the cached Zitadel id token
|
|
119
|
+
* Exchange the cached Zitadel id token under `context` (the reserved registry
|
|
120
|
+
* key, or any cached context whose issuer matches the registry's) for a
|
|
121
|
+
* CodeArtifact read grant.
|
|
138
122
|
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* device-code poll.
|
|
123
|
+
* The token lookup never prompts — an expired session with no refresh token
|
|
124
|
+
* comes back as `no-session` for the caller to decide about, rather than
|
|
125
|
+
* stalling a headless run in a device-code poll.
|
|
143
126
|
*/
|
|
144
127
|
export declare function fetchRegistryGrant(context: string, brokerUrl: string, deps: FetchGrantDeps): Promise<RegistryBrokerResult>;
|
|
145
128
|
/** Convenience for production callers that use the real login.ts token source. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-broker.d.ts","sourceRoot":"","sources":["../../../src/utils/registry-broker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry-broker.d.ts","sourceRoot":"","sources":["../../../src/utils/registry-broker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,KAAK,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAErE,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mDAAmD;AACnD,MAAM,MAAM,qBAAqB;AAC/B,yEAAyE;AACvE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,mFAAmF;GACjF;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;AACxB,8DAA8D;GAC5D;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE;AAC7B,sEAAsE;GACpE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3F,oDAAoD;GAClD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,SAA4B,GAClD,MAAM,GAAG,IAAI,CAEf;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,SAA4B,GAClD;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;CAAE,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,SAA4B,GAClD,MAAM,GAAG,IAAI,CAWf;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiDhC;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAsB/B;AAED,kFAAkF;AAClF,wBAAgB,aAAa,IAAI,cAAc,CAE9C"}
|