@forgecart/cli 2.202610130131.0 → 2.202610130431.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/admin-api/admin-api-refusal.error.d.ts +2 -2
- package/dist/src/admin-api/admin-api-refusal.error.js +2 -2
- package/dist/src/admin-api/admin-api.client.d.ts +8 -4
- package/dist/src/admin-api/admin-api.client.js +11 -9
- package/dist/src/admin-api/admin-api.client.js.map +1 -1
- package/dist/src/admin-api/admin-api.result.d.ts +7 -0
- package/dist/src/admin-api/admin-api.result.js +31 -2
- package/dist/src/admin-api/admin-api.result.js.map +1 -1
- package/dist/src/authorization/cli-authorization-flow.d.ts +21 -14
- package/dist/src/authorization/cli-authorization-flow.js +40 -31
- package/dist/src/authorization/cli-authorization-flow.js.map +1 -1
- package/dist/src/authorization/cli-credential-check.d.ts +6 -13
- package/dist/src/authorization/cli-credential-check.js +6 -23
- package/dist/src/authorization/cli-credential-check.js.map +1 -1
- package/dist/src/authorization/cli-credential-step.d.ts +74 -0
- package/dist/src/authorization/cli-credential-step.js +154 -0
- package/dist/src/authorization/cli-credential-step.js.map +1 -0
- package/dist/src/authorization/cli-unauthorized-refusal.d.ts +18 -8
- package/dist/src/authorization/cli-unauthorized-refusal.js +26 -11
- package/dist/src/authorization/cli-unauthorized-refusal.js.map +1 -1
- package/dist/src/authorization/type/cli-authorization.types.d.ts +36 -4
- package/dist/src/authorization/type/cli-authorization.types.js +16 -3
- package/dist/src/authorization/type/cli-authorization.types.js.map +1 -1
- package/dist/src/commands/init.d.ts +0 -10
- package/dist/src/commands/init.js +17 -42
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/sync.js +2 -2
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/deploy/deploy.runner.d.ts +15 -8
- package/dist/src/deploy/deploy.runner.js +19 -10
- package/dist/src/deploy/deploy.runner.js.map +1 -1
- package/dist/src/sync/sync-bundle-push.d.ts +34 -0
- package/dist/src/sync/sync-bundle-push.js +97 -0
- package/dist/src/sync/sync-bundle-push.js.map +1 -0
- package/dist/src/sync/sync-dotenv.file.d.ts +30 -22
- package/dist/src/sync/sync-dotenv.file.js +49 -54
- package/dist/src/sync/sync-dotenv.file.js.map +1 -1
- package/dist/src/sync/sync-env-channel.d.ts +47 -0
- package/dist/src/sync/sync-env-channel.js +106 -0
- package/dist/src/sync/sync-env-channel.js.map +1 -0
- package/dist/src/sync/sync-env.runner.d.ts +26 -10
- package/dist/src/sync/sync-env.runner.js +73 -40
- package/dist/src/sync/sync-env.runner.js.map +1 -1
- package/dist/src/sync/sync-record.file.d.ts +18 -10
- package/dist/src/sync/sync-record.file.js +30 -10
- package/dist/src/sync/sync-record.file.js.map +1 -1
- package/dist/src/sync/sync-repository.d.ts +7 -2
- package/dist/src/sync/sync-repository.js +26 -5
- package/dist/src/sync/sync-repository.js.map +1 -1
- package/dist/src/sync/sync-round.d.ts +28 -15
- package/dist/src/sync/sync-round.js +78 -39
- package/dist/src/sync/sync-round.js.map +1 -1
- package/dist/src/sync/sync-watch.d.ts +2 -1
- package/dist/src/sync/sync-watch.js +2 -1
- package/dist/src/sync/sync-watch.js.map +1 -1
- package/dist/src/sync/sync.runner.d.ts +16 -8
- package/dist/src/sync/sync.runner.js +30 -26
- package/dist/src/sync/sync.runner.js.map +1 -1
- package/dist/src/sync/type/sync.types.d.ts +78 -16
- package/dist/src/sync/type/sync.types.js.map +1 -1
- package/dist/src/sync/workspace-sync.client.d.ts +43 -16
- package/dist/src/sync/workspace-sync.client.js +125 -31
- package/dist/src/sync/workspace-sync.client.js.map +1 -1
- package/dist/src/util/dotenv.util.d.ts +19 -5
- package/dist/src/util/dotenv.util.js +42 -5
- package/dist/src/util/dotenv.util.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A typed refusal the admin API answered an operation with (#2781, #411): the
|
|
3
3
|
* `ErrorCode` its GraphQL error carries and the variables beside it — what a
|
|
4
|
-
* caller routes on. Credentials the API refuses are no such error: they
|
|
5
|
-
*
|
|
4
|
+
* caller routes on. Credentials the API refuses are no such error: they are a
|
|
5
|
+
* `CliCredentialsRefusal`, which the credential step answers by authorizing.
|
|
6
6
|
*/
|
|
7
7
|
export declare class AdminApiRefusal extends Error {
|
|
8
8
|
readonly endpoint: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A typed refusal the admin API answered an operation with (#2781, #411): the
|
|
3
3
|
* `ErrorCode` its GraphQL error carries and the variables beside it — what a
|
|
4
|
-
* caller routes on. Credentials the API refuses are no such error: they
|
|
5
|
-
*
|
|
4
|
+
* caller routes on. Credentials the API refuses are no such error: they are a
|
|
5
|
+
* `CliCredentialsRefusal`, which the credential step answers by authorizing.
|
|
6
6
|
*/
|
|
7
7
|
export class AdminApiRefusal extends Error {
|
|
8
8
|
endpoint;
|
|
@@ -7,8 +7,9 @@ import type { AdminApiRequest } from './type/admin-api.types.js';
|
|
|
7
7
|
* the one surface `forgecart sync` and `forgecart deploy` reach the shop
|
|
8
8
|
* through. Every request goes to FORGECART_ADMIN_API_URL as given; every
|
|
9
9
|
* exchange is bounded by `--timeout` and ends when the interrupt it is given
|
|
10
|
-
* fires. Credentials the API refuses
|
|
11
|
-
*
|
|
10
|
+
* fires. Credentials the API refuses are a {@link CliCredentialsRefusal}, which
|
|
11
|
+
* the credential step answers by authorizing. Any other refusal is an
|
|
12
|
+
* {@link AdminApiRefusal} carrying its code.
|
|
12
13
|
*/
|
|
13
14
|
export declare class AdminApiClient {
|
|
14
15
|
private readonly credentials;
|
|
@@ -37,8 +38,11 @@ export declare class AdminApiClient {
|
|
|
37
38
|
/** The root field, once the body carries no error. */
|
|
38
39
|
private rootField;
|
|
39
40
|
/**
|
|
40
|
-
* A GraphQL error ends the call
|
|
41
|
-
*
|
|
41
|
+
* A GraphQL error ends the call. Refused credentials end it as a
|
|
42
|
+
* {@link CliCredentialsRefusal}: UNAUTHORIZED, FORBIDDEN, or the
|
|
43
|
+
* INVALID_ADMIN_SECRET and CHANNEL_NOT_FOUND that the shop's middleware
|
|
44
|
+
* answers outside Apollo. Any other code ends it as the typed
|
|
45
|
+
* {@link AdminApiRefusal}.
|
|
42
46
|
*/
|
|
43
47
|
private assertNoErrors;
|
|
44
48
|
private extensionsOf;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CliCredentialsRefusal } from '../authorization/cli-unauthorized-refusal.js';
|
|
2
2
|
import { isJsonObject } from '../json.js';
|
|
3
3
|
import { AdminApiInterruption } from './admin-api-interruption.error.js';
|
|
4
4
|
import { AdminApiRefusal } from './admin-api-refusal.error.js';
|
|
5
5
|
import { AdminApiResult } from './admin-api.result.js';
|
|
6
|
-
/** The codes the admin API refuses an admin operation's credentials with. */
|
|
7
|
-
const CREDENTIAL_REFUSALS = new Set(['UNAUTHORIZED', 'FORBIDDEN']);
|
|
8
6
|
/** Milliseconds in a second — `--timeout` is given in seconds. */
|
|
9
7
|
const MS_PER_SECOND = 1000;
|
|
10
8
|
/**
|
|
@@ -13,8 +11,9 @@ const MS_PER_SECOND = 1000;
|
|
|
13
11
|
* the one surface `forgecart sync` and `forgecart deploy` reach the shop
|
|
14
12
|
* through. Every request goes to FORGECART_ADMIN_API_URL as given; every
|
|
15
13
|
* exchange is bounded by `--timeout` and ends when the interrupt it is given
|
|
16
|
-
* fires. Credentials the API refuses
|
|
17
|
-
*
|
|
14
|
+
* fires. Credentials the API refuses are a {@link CliCredentialsRefusal}, which
|
|
15
|
+
* the credential step answers by authorizing. Any other refusal is an
|
|
16
|
+
* {@link AdminApiRefusal} carrying its code.
|
|
18
17
|
*/
|
|
19
18
|
export class AdminApiClient {
|
|
20
19
|
credentials;
|
|
@@ -114,8 +113,11 @@ export class AdminApiClient {
|
|
|
114
113
|
return AdminApiResult.of(this.endpoint, field, isJsonObject(data) ? data[field] : undefined);
|
|
115
114
|
}
|
|
116
115
|
/**
|
|
117
|
-
* A GraphQL error ends the call
|
|
118
|
-
*
|
|
116
|
+
* A GraphQL error ends the call. Refused credentials end it as a
|
|
117
|
+
* {@link CliCredentialsRefusal}: UNAUTHORIZED, FORBIDDEN, or the
|
|
118
|
+
* INVALID_ADMIN_SECRET and CHANNEL_NOT_FOUND that the shop's middleware
|
|
119
|
+
* answers outside Apollo. Any other code ends it as the typed
|
|
120
|
+
* {@link AdminApiRefusal}.
|
|
119
121
|
*/
|
|
120
122
|
assertNoErrors(errors, field) {
|
|
121
123
|
if (!Array.isArray(errors) || errors.length === 0)
|
|
@@ -123,8 +125,8 @@ export class AdminApiClient {
|
|
|
123
125
|
const first = errors[0];
|
|
124
126
|
const extensions = this.extensionsOf(first);
|
|
125
127
|
const code = typeof extensions.code === 'string' ? extensions.code : undefined;
|
|
126
|
-
if (code !== undefined &&
|
|
127
|
-
throw new
|
|
128
|
+
if (code !== undefined && CliCredentialsRefusal.isRefusalCode(code)) {
|
|
129
|
+
throw new CliCredentialsRefusal(code);
|
|
128
130
|
}
|
|
129
131
|
throw new AdminApiRefusal(this.endpoint, field, code ?? this.messageOf(first), this.errorVariables(extensions.variables));
|
|
130
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-api.client.js","sourceRoot":"","sources":["../../../src/admin-api/admin-api.client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"admin-api.client.js","sourceRoot":"","sources":["../../../src/admin-api/admin-api.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,14 @@ export declare class AdminApiResult {
|
|
|
18
18
|
readText(key: string): string;
|
|
19
19
|
readNullableString(key: string): string | null;
|
|
20
20
|
readStringList(key: string): string[];
|
|
21
|
+
/** A string field that must carry one of the values `accepts` admits. */
|
|
22
|
+
readMember<T extends string>(key: string, accepts: (value: string) => value is T): T;
|
|
23
|
+
/** A list of objects, each read field by field as a result of the same operation. */
|
|
24
|
+
readObjectList(key: string): AdminApiResult[];
|
|
21
25
|
readCount(key: string): number;
|
|
26
|
+
readCountList(key: string): number[];
|
|
22
27
|
readBoolean(key: string): boolean;
|
|
28
|
+
/** A whole number of zero or more. */
|
|
29
|
+
private isCount;
|
|
23
30
|
private unreadable;
|
|
24
31
|
}
|
|
@@ -55,19 +55,48 @@ export class AdminApiResult {
|
|
|
55
55
|
}
|
|
56
56
|
return items;
|
|
57
57
|
}
|
|
58
|
+
/** A string field that must carry one of the values `accepts` admits. */
|
|
59
|
+
readMember(key, accepts) {
|
|
60
|
+
const value = this.readString(key);
|
|
61
|
+
if (!accepts(value))
|
|
62
|
+
throw this.unreadable();
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
/** A list of objects, each read field by field as a result of the same operation. */
|
|
66
|
+
readObjectList(key) {
|
|
67
|
+
const value = this.record[key];
|
|
68
|
+
if (!Array.isArray(value))
|
|
69
|
+
throw this.unreadable();
|
|
70
|
+
const items = value;
|
|
71
|
+
if (!items.every(isJsonObject))
|
|
72
|
+
throw this.unreadable();
|
|
73
|
+
return items.map((item) => new AdminApiResult(this.endpoint, this.field, item));
|
|
74
|
+
}
|
|
58
75
|
readCount(key) {
|
|
59
76
|
const value = this.record[key];
|
|
60
|
-
if (
|
|
77
|
+
if (!this.isCount(value))
|
|
61
78
|
throw this.unreadable();
|
|
62
|
-
}
|
|
63
79
|
return value;
|
|
64
80
|
}
|
|
81
|
+
readCountList(key) {
|
|
82
|
+
const value = this.record[key];
|
|
83
|
+
if (!Array.isArray(value))
|
|
84
|
+
throw this.unreadable();
|
|
85
|
+
const items = value;
|
|
86
|
+
if (!items.every((item) => this.isCount(item)))
|
|
87
|
+
throw this.unreadable();
|
|
88
|
+
return items;
|
|
89
|
+
}
|
|
65
90
|
readBoolean(key) {
|
|
66
91
|
const value = this.record[key];
|
|
67
92
|
if (typeof value !== 'boolean')
|
|
68
93
|
throw this.unreadable();
|
|
69
94
|
return value;
|
|
70
95
|
}
|
|
96
|
+
/** A whole number of zero or more. */
|
|
97
|
+
isCount(value) {
|
|
98
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
99
|
+
}
|
|
71
100
|
unreadable() {
|
|
72
101
|
return AdminApiResult.unreadable(this.endpoint, this.field);
|
|
73
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-api.result.js","sourceRoot":"","sources":["../../../src/admin-api/admin-api.result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAEN;IACA;IACA;IAHnB,YACmB,QAAgB,EAChB,KAAa,EACb,MAA+B;QAF/B,aAAQ,GAAR,QAAQ,CAAQ;QAChB,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAyB;IAC/C,CAAC;IAEJ,8DAA8D;IAC9D,MAAM,CAAC,EAAE,CAAC,QAAgB,EAAE,KAAa,EAAE,KAAc;QACvD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,MAAM,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,iEAAiE;IACzD,MAAM,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAa;QACvD,OAAO,IAAI,KAAK,CACd,oBAAoB,QAAQ,eAAe,KAAK,8BAA8B,CAC/E,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,UAAU,CAAC,GAAW;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE;YAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wCAAwC;IACxC,QAAQ,CAAC,GAAW;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACnD,MAAM,KAAK,GAAc,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"admin-api.result.js","sourceRoot":"","sources":["../../../src/admin-api/admin-api.result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
import type { CliAuthorizationClient } from './cli-authorization.client.js';
|
|
2
2
|
import { type CliCredentials } from './type/cli-authorization.types.js';
|
|
3
3
|
/**
|
|
4
|
-
* The browser authorization
|
|
5
|
-
*
|
|
4
|
+
* The browser authorization the credential step runs when a key is in no
|
|
5
|
+
* source or the admin API refuses the credentials (#2772, launch#62 N3;
|
|
6
|
+
* record `refs/design/cli-improvements`, screen `init`).
|
|
6
7
|
*
|
|
7
|
-
* It opens an authorization on the admin API
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* the
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
8
|
+
* It opens an authorization on the admin API that names the project's store,
|
|
9
|
+
* then prints the dashboard URL and the user code. Both come BEFORE any
|
|
10
|
+
* browser is attempted, for the reader whose browser never opens. It then
|
|
11
|
+
* opens the browser when a person is at a terminal, and polls at the cadence
|
|
12
|
+
* the request named until the authorization settles or the wait ends: at the
|
|
13
|
+
* window's close, or at `timeoutSec` when that comes first. The wait is quiet
|
|
14
|
+
* (no countdown, no interval, no attempt count), so an approval on the third
|
|
15
|
+
* poll reads exactly as one on the first. The device code is the poll's secret
|
|
16
|
+
* and is never printed.
|
|
15
17
|
*/
|
|
16
18
|
export declare class CliAuthorizationFlow {
|
|
17
19
|
private readonly client;
|
|
18
|
-
|
|
20
|
+
private readonly timeoutSec;
|
|
21
|
+
/**
|
|
22
|
+
* @param client the admin API's authorization operations.
|
|
23
|
+
* @param timeoutSec the longest the wait may last. When absent, the authorization's window bounds it.
|
|
24
|
+
*/
|
|
25
|
+
constructor(client: CliAuthorizationClient, timeoutSec: number | undefined);
|
|
19
26
|
/**
|
|
20
27
|
* Authorize this machine and answer the four credentials the approval
|
|
21
28
|
* delivers. A denial, an expiry or an elapsed wait ends the run on exit 3.
|
|
22
29
|
*
|
|
23
|
-
* @param report the
|
|
24
|
-
* @param
|
|
30
|
+
* @param report why the run authorizes, printed first.
|
|
31
|
+
* @param channelToken the channel token the project's sources name: the store `/authorize` preselects.
|
|
25
32
|
*/
|
|
26
|
-
authorize(report: readonly string[],
|
|
33
|
+
authorize(report: readonly string[], channelToken: string | undefined): Promise<CliCredentials>;
|
|
27
34
|
/** Poll until the authorization settles or the deadline passes. */
|
|
28
35
|
private awaitApproval;
|
|
29
36
|
/** The credentials an APPROVED answer delivers; null while PENDING. DENIED and EXPIRED end the run. */
|
|
@@ -6,50 +6,59 @@ import { readPackageVersion } from '../version.js';
|
|
|
6
6
|
import { CliUnauthorizedReason, CliUnauthorizedRefusal } from './cli-unauthorized-refusal.js';
|
|
7
7
|
import { CliAuthorizationState, } from './type/cli-authorization.types.js';
|
|
8
8
|
/**
|
|
9
|
-
* The browser authorization
|
|
10
|
-
*
|
|
9
|
+
* The browser authorization the credential step runs when a key is in no
|
|
10
|
+
* source or the admin API refuses the credentials (#2772, launch#62 N3;
|
|
11
|
+
* record `refs/design/cli-improvements`, screen `init`).
|
|
11
12
|
*
|
|
12
|
-
* It opens an authorization on the admin API
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* the
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* It opens an authorization on the admin API that names the project's store,
|
|
14
|
+
* then prints the dashboard URL and the user code. Both come BEFORE any
|
|
15
|
+
* browser is attempted, for the reader whose browser never opens. It then
|
|
16
|
+
* opens the browser when a person is at a terminal, and polls at the cadence
|
|
17
|
+
* the request named until the authorization settles or the wait ends: at the
|
|
18
|
+
* window's close, or at `timeoutSec` when that comes first. The wait is quiet
|
|
19
|
+
* (no countdown, no interval, no attempt count), so an approval on the third
|
|
20
|
+
* poll reads exactly as one on the first. The device code is the poll's secret
|
|
21
|
+
* and is never printed.
|
|
20
22
|
*/
|
|
21
23
|
export class CliAuthorizationFlow {
|
|
22
24
|
client;
|
|
23
|
-
|
|
25
|
+
timeoutSec;
|
|
26
|
+
/**
|
|
27
|
+
* @param client the admin API's authorization operations.
|
|
28
|
+
* @param timeoutSec the longest the wait may last. When absent, the authorization's window bounds it.
|
|
29
|
+
*/
|
|
30
|
+
constructor(client, timeoutSec) {
|
|
24
31
|
this.client = client;
|
|
32
|
+
this.timeoutSec = timeoutSec;
|
|
25
33
|
}
|
|
26
34
|
/**
|
|
27
35
|
* Authorize this machine and answer the four credentials the approval
|
|
28
36
|
* delivers. A denial, an expiry or an elapsed wait ends the run on exit 3.
|
|
29
37
|
*
|
|
30
|
-
* @param report the
|
|
31
|
-
* @param
|
|
38
|
+
* @param report why the run authorizes, printed first.
|
|
39
|
+
* @param channelToken the channel token the project's sources name: the store `/authorize` preselects.
|
|
32
40
|
*/
|
|
33
|
-
async authorize(report,
|
|
41
|
+
async authorize(report, channelToken) {
|
|
34
42
|
for (const line of report)
|
|
35
43
|
print(line);
|
|
36
44
|
const authorization = await this.client.request({
|
|
37
45
|
deviceName: hostname(),
|
|
38
46
|
cliVersion: readPackageVersion(),
|
|
47
|
+
channelToken,
|
|
39
48
|
});
|
|
40
49
|
const interactive = this.isTerminal();
|
|
41
|
-
for (const line of this.handOff(authorization,
|
|
50
|
+
for (const line of this.handOff(authorization, interactive))
|
|
42
51
|
print(line);
|
|
43
52
|
if (interactive)
|
|
44
53
|
this.openBrowser(authorization.verificationUrl);
|
|
45
|
-
const credentials = await this.awaitApproval(authorization
|
|
54
|
+
const credentials = await this.awaitApproval(authorization);
|
|
46
55
|
print('');
|
|
47
56
|
print(' ✓ Authorized');
|
|
48
57
|
return credentials;
|
|
49
58
|
}
|
|
50
59
|
/** Poll until the authorization settles or the deadline passes. */
|
|
51
|
-
async awaitApproval(authorization
|
|
52
|
-
const deadline = this.deadlineOf(authorization
|
|
60
|
+
async awaitApproval(authorization) {
|
|
61
|
+
const deadline = this.deadlineOf(authorization);
|
|
53
62
|
const intervalMs = authorization.pollIntervalSec * 1000;
|
|
54
63
|
for (;;) {
|
|
55
64
|
const remainingMs = deadline.at - Date.now();
|
|
@@ -77,26 +86,26 @@ export class CliAuthorizationFlow {
|
|
|
77
86
|
return status.credentials;
|
|
78
87
|
}
|
|
79
88
|
/** The window's close — or `--timeout` from now, when that comes first. */
|
|
80
|
-
deadlineOf(authorization
|
|
89
|
+
deadlineOf(authorization) {
|
|
81
90
|
const window = {
|
|
82
91
|
at: Date.parse(authorization.expiresAt),
|
|
83
92
|
reason: CliUnauthorizedReason.EXPIRED,
|
|
84
93
|
};
|
|
85
|
-
if (timeoutSec === undefined)
|
|
94
|
+
if (this.timeoutSec === undefined)
|
|
86
95
|
return window;
|
|
87
|
-
const timeoutAt = Date.now() + timeoutSec * 1000;
|
|
96
|
+
const timeoutAt = Date.now() + this.timeoutSec * 1000;
|
|
88
97
|
if (timeoutAt >= window.at)
|
|
89
98
|
return window;
|
|
90
99
|
return { at: timeoutAt, reason: CliUnauthorizedReason.TIMED_OUT };
|
|
91
100
|
}
|
|
92
101
|
/** What the run prints once the authorization is open, for a terminal or for a log. */
|
|
93
|
-
handOff(authorization,
|
|
102
|
+
handOff(authorization, interactive) {
|
|
94
103
|
if (interactive)
|
|
95
|
-
return this.interactiveHandOff(authorization
|
|
96
|
-
return this.headlessHandOff(authorization
|
|
104
|
+
return this.interactiveHandOff(authorization);
|
|
105
|
+
return this.headlessHandOff(authorization);
|
|
97
106
|
}
|
|
98
107
|
/** A person at a terminal: the browser opens, and the comparison is asked for where they stand. */
|
|
99
|
-
interactiveHandOff(authorization
|
|
108
|
+
interactiveHandOff(authorization) {
|
|
100
109
|
return [
|
|
101
110
|
'',
|
|
102
111
|
' This machine is not authorized for any store yet.',
|
|
@@ -109,14 +118,14 @@ export class CliAuthorizationFlow {
|
|
|
109
118
|
'',
|
|
110
119
|
` ${authorization.userCode}`,
|
|
111
120
|
'',
|
|
112
|
-
` ${this.waitingLine(
|
|
121
|
+
` ${this.waitingLine()} · press Ctrl-C to abort`,
|
|
113
122
|
'',
|
|
114
123
|
' Not you? The code is shown in the browser — approve only if it matches',
|
|
115
124
|
` ${authorization.userCode}. Ctrl-C aborts and nothing is written.`,
|
|
116
125
|
];
|
|
117
126
|
}
|
|
118
127
|
/** No terminal: no browser, the URL and the code for whoever reads the log, and the bounded wait. */
|
|
119
|
-
headlessHandOff(authorization
|
|
128
|
+
headlessHandOff(authorization) {
|
|
120
129
|
return [
|
|
121
130
|
'',
|
|
122
131
|
' No TTY — not opening a browser.',
|
|
@@ -131,14 +140,14 @@ export class CliAuthorizationFlow {
|
|
|
131
140
|
'',
|
|
132
141
|
' — or supply the four keys in the environment and re-run.',
|
|
133
142
|
'',
|
|
134
|
-
` ${this.waitingLine(
|
|
143
|
+
` ${this.waitingLine()}`,
|
|
135
144
|
];
|
|
136
145
|
}
|
|
137
146
|
/** The wait, quiet: `--timeout` is the one number it echoes, because the caller passed it. */
|
|
138
|
-
waitingLine(
|
|
139
|
-
if (timeoutSec === undefined)
|
|
147
|
+
waitingLine() {
|
|
148
|
+
if (this.timeoutSec === undefined)
|
|
140
149
|
return 'Waiting for approval…';
|
|
141
|
-
return `Waiting for approval… (--timeout ${String(timeoutSec)}s)`;
|
|
150
|
+
return `Waiting for approval… (--timeout ${String(this.timeoutSec)}s)`;
|
|
142
151
|
}
|
|
143
152
|
/**
|
|
144
153
|
* Best effort by design: over ssh, in a container or on a locked-down laptop
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-authorization-flow.js","sourceRoot":"","sources":["../../../src/authorization/cli-authorization-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC9F,OAAO,EACL,qBAAqB,GAItB,MAAM,mCAAmC,CAAC;AAc3C
|
|
1
|
+
{"version":3,"file":"cli-authorization-flow.js","sourceRoot":"","sources":["../../../src/authorization/cli-authorization-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { CliCredentialKey, type CliCredentials } from './type/cli-authorization.types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* environment, then the target's `.env`, then its
|
|
5
|
-
* (`channelToken`, `apiUrl`)
|
|
6
|
-
* found,
|
|
7
|
-
*
|
|
8
|
-
*
|
|
3
|
+
* The credential step's check (#2772, launch#62 N3). It reads each of the four
|
|
4
|
+
* keys from the environment, then the target's `.env`, then its
|
|
5
|
+
* `.forgecart/config.json` (`channelToken`, `apiUrl`), and the first non-empty
|
|
6
|
+
* value wins. With all four found, the step asks nothing. With any absent, it
|
|
7
|
+
* authorizes in the browser, and that run prints the check's {@link report}
|
|
8
|
+
* first.
|
|
9
9
|
*/
|
|
10
10
|
export declare class CliCredentialCheck {
|
|
11
11
|
private readonly environment;
|
|
@@ -14,13 +14,6 @@ export declare class CliCredentialCheck {
|
|
|
14
14
|
private constructor();
|
|
15
15
|
/** Look for the four keys for the storefront at `targetDir`. */
|
|
16
16
|
static read(targetDir: string, env?: NodeJS.ProcessEnv): Promise<CliCredentialCheck>;
|
|
17
|
-
/**
|
|
18
|
-
* The four credentials for the storefront at `targetDir`, for a command that
|
|
19
|
-
* never authorizes (`forgecart sync`, `forgecart deploy`): with one in no
|
|
20
|
-
* source, the check's {@link report} is printed — key names, never values —
|
|
21
|
-
* and the run exits 3 before any request.
|
|
22
|
-
*/
|
|
23
|
-
static settle(targetDir: string): Promise<CliCredentials>;
|
|
24
17
|
/** The value the check found for `key`: the environment's, then `.env`'s, then `config.json`'s. */
|
|
25
18
|
value(key: CliCredentialKey): string | undefined;
|
|
26
19
|
/** All four credentials — undefined while any one is absent. */
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { isJsonObject } from '../json.js';
|
|
4
|
-
import { print } from '../output.js';
|
|
5
|
-
import { CliUnauthorizedReason, CliUnauthorizedRefusal } from './cli-unauthorized-refusal.js';
|
|
6
4
|
import { CliCredentialKey } from './type/cli-authorization.types.js';
|
|
7
5
|
/** The report's source column: `.forgecart/config.json`, and the gutter after it. */
|
|
8
6
|
const SOURCE_COLUMN_WIDTH = 26;
|
|
@@ -16,12 +14,12 @@ const CONFIG_FIELDS = [
|
|
|
16
14
|
[CliCredentialKey.SHOP_API_URL, 'apiUrl'],
|
|
17
15
|
];
|
|
18
16
|
/**
|
|
19
|
-
*
|
|
20
|
-
* environment, then the target's `.env`, then its
|
|
21
|
-
* (`channelToken`, `apiUrl`)
|
|
22
|
-
* found,
|
|
23
|
-
*
|
|
24
|
-
*
|
|
17
|
+
* The credential step's check (#2772, launch#62 N3). It reads each of the four
|
|
18
|
+
* keys from the environment, then the target's `.env`, then its
|
|
19
|
+
* `.forgecart/config.json` (`channelToken`, `apiUrl`), and the first non-empty
|
|
20
|
+
* value wins. With all four found, the step asks nothing. With any absent, it
|
|
21
|
+
* authorizes in the browser, and that run prints the check's {@link report}
|
|
22
|
+
* first.
|
|
25
23
|
*/
|
|
26
24
|
export class CliCredentialCheck {
|
|
27
25
|
environment;
|
|
@@ -42,21 +40,6 @@ export class CliCredentialCheck {
|
|
|
42
40
|
}
|
|
43
41
|
return new CliCredentialCheck(environment, await CliCredentialCheck.readDotenv(join(targetDir, '.env')), await CliCredentialCheck.readConfig(join(targetDir, '.forgecart', 'config.json')));
|
|
44
42
|
}
|
|
45
|
-
/**
|
|
46
|
-
* The four credentials for the storefront at `targetDir`, for a command that
|
|
47
|
-
* never authorizes (`forgecart sync`, `forgecart deploy`): with one in no
|
|
48
|
-
* source, the check's {@link report} is printed — key names, never values —
|
|
49
|
-
* and the run exits 3 before any request.
|
|
50
|
-
*/
|
|
51
|
-
static async settle(targetDir) {
|
|
52
|
-
const check = await CliCredentialCheck.read(targetDir);
|
|
53
|
-
const credentials = check.credentials();
|
|
54
|
-
if (credentials !== undefined)
|
|
55
|
-
return credentials;
|
|
56
|
-
for (const line of check.report())
|
|
57
|
-
print(line);
|
|
58
|
-
throw new CliUnauthorizedRefusal(CliUnauthorizedReason.MISSING);
|
|
59
|
-
}
|
|
60
43
|
/** The value the check found for `key`: the environment's, then `.env`'s, then `config.json`'s. */
|
|
61
44
|
value(key) {
|
|
62
45
|
return this.environment.get(key) ?? this.dotenv?.get(key) ?? this.config?.get(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-credential-check.js","sourceRoot":"","sources":["../../../src/authorization/cli-credential-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-credential-check.js","sourceRoot":"","sources":["../../../src/authorization/cli-credential-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAuB,MAAM,mCAAmC,CAAC;AAE1F,qFAAqF;AACrF,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD,oFAAoF;AACpF,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,kFAAkF;AAClF,MAAM,aAAa,GAAqD;IACtE,CAAC,gBAAgB,CAAC,aAAa,EAAE,cAAc,CAAC;IAChD,CAAC,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC;CAC1C,CAAC;AAKF;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAEV;IACA;IACA;IAHnB,YACmB,WAAkD,EAClD,MAAwB,EACxB,MAAwB;QAFxB,gBAAW,GAAX,WAAW,CAAuC;QAClD,WAAM,GAAN,MAAM,CAAkB;QACxB,WAAM,GAAN,MAAM,CAAkB;IACxC,CAAC;IAEJ,gEAAgE;IAChE,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,SAAiB,EACjB,MAAyB,OAAO,CAAC,GAAG;QAEpC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;YAC/B,IAAI,KAAK;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,kBAAkB,CAC3B,WAAW,EACX,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAC5D,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAClF,CAAC;IACJ,CAAC;IAED,mGAAmG;IACnG,KAAK,CAAC,GAAqB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,gEAAgE;IAChE,WAAW;QACT,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QACnF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO;YACL,EAAE;YACF,yBAAyB;YACzB,EAAE;YACF,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAChC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;YAC5C,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC;SACnD,CAAC;IACJ,CAAC;IAEO,GAAG,CAAC,KAAa,EAAE,MAAwB;QACjD,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC1D,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,GAAG,MAAM,cAAc,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAC/B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,wEAAwE;IAChE,UAAU,CAAC,IAAiC;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC/B,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAC5D,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAY;QAC1C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,UAAU,KAAK,IAAI;gBAAE,SAAS;YAClC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC;YACrC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,KAAK;gBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2EAA2E;IACnE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAY;QAC1C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,GAAW,EAAE,IAAY;QAClD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,IAAY;QACjD,OAAO,GAAG,IAAI,sEAAsE,CAAC;IACvF,CAAC;IAED,4EAA4E;IACpE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAY;QAC7C,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,KAAa;QAClC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,GAAW;QACxC,OAAO,MAAM,CAAC,MAAM,CAAS,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF"}
|