@forgecart/cli 2.202610130038.0 → 2.202610130322.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.
Files changed (61) hide show
  1. package/dist/src/admin-api/admin-api-refusal.error.d.ts +2 -2
  2. package/dist/src/admin-api/admin-api-refusal.error.js +2 -2
  3. package/dist/src/admin-api/admin-api.client.d.ts +8 -4
  4. package/dist/src/admin-api/admin-api.client.js +11 -9
  5. package/dist/src/admin-api/admin-api.client.js.map +1 -1
  6. package/dist/src/admin-api/admin-api.result.d.ts +4 -0
  7. package/dist/src/admin-api/admin-api.result.js +17 -0
  8. package/dist/src/admin-api/admin-api.result.js.map +1 -1
  9. package/dist/src/authorization/cli-authorization-flow.d.ts +21 -14
  10. package/dist/src/authorization/cli-authorization-flow.js +40 -31
  11. package/dist/src/authorization/cli-authorization-flow.js.map +1 -1
  12. package/dist/src/authorization/cli-credential-check.d.ts +6 -13
  13. package/dist/src/authorization/cli-credential-check.js +6 -23
  14. package/dist/src/authorization/cli-credential-check.js.map +1 -1
  15. package/dist/src/authorization/cli-credential-step.d.ts +74 -0
  16. package/dist/src/authorization/cli-credential-step.js +154 -0
  17. package/dist/src/authorization/cli-credential-step.js.map +1 -0
  18. package/dist/src/authorization/cli-unauthorized-refusal.d.ts +18 -8
  19. package/dist/src/authorization/cli-unauthorized-refusal.js +26 -11
  20. package/dist/src/authorization/cli-unauthorized-refusal.js.map +1 -1
  21. package/dist/src/authorization/type/cli-authorization.types.d.ts +36 -4
  22. package/dist/src/authorization/type/cli-authorization.types.js +16 -3
  23. package/dist/src/authorization/type/cli-authorization.types.js.map +1 -1
  24. package/dist/src/commands/init.d.ts +0 -10
  25. package/dist/src/commands/init.js +17 -42
  26. package/dist/src/commands/init.js.map +1 -1
  27. package/dist/src/commands/sync.js +2 -2
  28. package/dist/src/commands/sync.js.map +1 -1
  29. package/dist/src/deploy/deploy.runner.d.ts +15 -8
  30. package/dist/src/deploy/deploy.runner.js +19 -10
  31. package/dist/src/deploy/deploy.runner.js.map +1 -1
  32. package/dist/src/sync/sync-dotenv.file.d.ts +30 -22
  33. package/dist/src/sync/sync-dotenv.file.js +49 -54
  34. package/dist/src/sync/sync-dotenv.file.js.map +1 -1
  35. package/dist/src/sync/sync-env-channel.d.ts +47 -0
  36. package/dist/src/sync/sync-env-channel.js +106 -0
  37. package/dist/src/sync/sync-env-channel.js.map +1 -0
  38. package/dist/src/sync/sync-env.runner.d.ts +26 -10
  39. package/dist/src/sync/sync-env.runner.js +73 -40
  40. package/dist/src/sync/sync-env.runner.js.map +1 -1
  41. package/dist/src/sync/sync-record.file.d.ts +8 -6
  42. package/dist/src/sync/sync-record.file.js +18 -5
  43. package/dist/src/sync/sync-record.file.js.map +1 -1
  44. package/dist/src/sync/sync-round.d.ts +23 -13
  45. package/dist/src/sync/sync-round.js +73 -37
  46. package/dist/src/sync/sync-round.js.map +1 -1
  47. package/dist/src/sync/sync-watch.d.ts +2 -1
  48. package/dist/src/sync/sync-watch.js +2 -1
  49. package/dist/src/sync/sync-watch.js.map +1 -1
  50. package/dist/src/sync/sync.runner.d.ts +16 -6
  51. package/dist/src/sync/sync.runner.js +29 -19
  52. package/dist/src/sync/sync.runner.js.map +1 -1
  53. package/dist/src/sync/type/sync.types.d.ts +49 -16
  54. package/dist/src/sync/type/sync.types.js.map +1 -1
  55. package/dist/src/sync/workspace-sync.client.d.ts +14 -8
  56. package/dist/src/sync/workspace-sync.client.js +40 -17
  57. package/dist/src/sync/workspace-sync.client.js.map +1 -1
  58. package/dist/src/util/dotenv.util.d.ts +19 -5
  59. package/dist/src/util/dotenv.util.js +42 -5
  60. package/dist/src/util/dotenv.util.js.map +1 -1
  61. 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 end the
5
- * run as `CliUnauthorizedRefusal`.
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 end the
5
- * run as `CliUnauthorizedRefusal`.
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 end the run on exit 3; any other refusal
11
- * is an {@link AdminApiRefusal} carrying its code.
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: credentials refused as UNAUTHORIZED or
41
- * FORBIDDEN on exit 3, any other code as the typed {@link AdminApiRefusal}.
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 { CliUnauthorizedReason, CliUnauthorizedRefusal, } from '../authorization/cli-unauthorized-refusal.js';
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 end the run on exit 3; any other refusal
17
- * is an {@link AdminApiRefusal} carrying its code.
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: credentials refused as UNAUTHORIZED or
118
- * FORBIDDEN on exit 3, any other code as the typed {@link AdminApiRefusal}.
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 && CREDENTIAL_REFUSALS.has(code)) {
127
- throw new CliUnauthorizedRefusal(CliUnauthorizedReason.REFUSED);
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":"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"}
1
+ {"version":3,"file":"admin-api.client.js","sourceRoot":"","sources":["../../../src/admin-api/admin-api.client.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,10 @@ 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;
22
26
  readBoolean(key: string): boolean;
23
27
  private unreadable;
@@ -55,6 +55,23 @@ 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
77
  if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"admin-api.result.js","sourceRoot":"","sources":["../../../src/admin-api/admin-api.result.ts"],"names":[],"mappings":"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"}
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 `forgecart init` runs when its credential check
5
- * comes up short (#2772; record `refs/design/cli-improvements`, screen `init`).
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, prints the dashboard URL and the
8
- * user code — BEFORE any browser is attempted, for the reader whose browser
9
- * never opens — then opens the browser when a person is at a terminal, and
10
- * polls at the cadence the request named until the authorization settles or
11
- * the wait ends: the window, or `--timeout` when that comes first. The wait is
12
- * quiet — no countdown, no interval, no attempt count — so an approval on the
13
- * third poll reads exactly as one on the first. The device code is the poll's
14
- * secret and is never printed.
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
- constructor(client: CliAuthorizationClient);
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 credential check's report, printed first.
24
- * @param timeoutSec `--timeout`: the most the wait may last — absent, the authorization's window.
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[], timeoutSec: number | undefined): Promise<CliCredentials>;
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 `forgecart init` runs when its credential check
10
- * comes up short (#2772; record `refs/design/cli-improvements`, screen `init`).
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, prints the dashboard URL and the
13
- * user code — BEFORE any browser is attempted, for the reader whose browser
14
- * never opens — then opens the browser when a person is at a terminal, and
15
- * polls at the cadence the request named until the authorization settles or
16
- * the wait ends: the window, or `--timeout` when that comes first. The wait is
17
- * quiet — no countdown, no interval, no attempt count — so an approval on the
18
- * third poll reads exactly as one on the first. The device code is the poll's
19
- * secret and is never printed.
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
- constructor(client) {
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 credential check's report, printed first.
31
- * @param timeoutSec `--timeout`: the most the wait may last — absent, the authorization's window.
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, timeoutSec) {
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, timeoutSec, interactive))
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, timeoutSec);
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, timeoutSec) {
52
- const deadline = this.deadlineOf(authorization, timeoutSec);
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, timeoutSec) {
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, timeoutSec, interactive) {
102
+ handOff(authorization, interactive) {
94
103
  if (interactive)
95
- return this.interactiveHandOff(authorization, timeoutSec);
96
- return this.headlessHandOff(authorization, timeoutSec);
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, timeoutSec) {
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(timeoutSec)} · press Ctrl-C to abort`,
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, timeoutSec) {
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(timeoutSec)}`,
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(timeoutSec) {
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;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;IAAG,CAAC;IAE/D;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACb,MAAyB,EACzB,UAA8B;QAE9B,KAAK,MAAM,IAAI,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9C,UAAU,EAAE,QAAQ,EAAE;YACtB,UAAU,EAAE,kBAAkB,EAAE;SACjC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,WAAW;YAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACxE,KAAK,CAAC,EAAE,CAAC,CAAC;QACV,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mEAAmE;IAC3D,KAAK,CAAC,aAAa,CACzB,aAA4C,EAC5C,UAA8B;QAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;QACxD,SAAS,CAAC;YACR,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7C,IAAI,WAAW,IAAI,CAAC;gBAAE,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;YACpF,IAAI,WAAW,KAAK,IAAI;gBAAE,OAAO,WAAW,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,uGAAuG;IAC/F,MAAM,CAAC,MAAoC;QACjD,IAAI,MAAM,CAAC,KAAK,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,IAAI,sBAAsB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,qBAAqB,CAAC,OAAO,EAAE,CAAC;YACnD,MAAM,IAAI,sBAAsB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,qBAAqB,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAChE,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,2EAA2E;IACnE,UAAU,CAChB,aAA4C,EAC5C,UAA8B;QAE9B,MAAM,MAAM,GAA6B;YACvC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;YACvC,MAAM,EAAE,qBAAqB,CAAC,OAAO;SACtC,CAAC;QACF,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;QACjD,IAAI,SAAS,IAAI,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,CAAC,SAAS,EAAE,CAAC;IACpE,CAAC;IAED,uFAAuF;IAC/E,OAAO,CACb,aAA4C,EAC5C,UAA8B,EAC9B,WAAoB;QAEpB,IAAI,WAAW;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,mGAAmG;IAC3F,kBAAkB,CACxB,aAA4C,EAC5C,UAA8B;QAE9B,OAAO;YACL,EAAE;YACF,qDAAqD;YACrD,EAAE;YACF,yCAAyC;YACzC,EAAE;YACF,OAAO,aAAa,CAAC,eAAe,EAAE;YACtC,EAAE;YACF,wEAAwE;YACxE,EAAE;YACF,SAAS,aAAa,CAAC,QAAQ,EAAE;YACjC,EAAE;YACF,KAAK,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,0BAA0B;YAC3D,EAAE;YACF,0EAA0E;YAC1E,KAAK,aAAa,CAAC,QAAQ,yCAAyC;SACrE,CAAC;IACJ,CAAC;IAED,qGAAqG;IAC7F,eAAe,CACrB,aAA4C,EAC5C,UAA8B;QAE9B,OAAO;YACL,EAAE;YACF,mCAAmC;YACnC,EAAE;YACF,6BAA6B;YAC7B,EAAE;YACF,OAAO,aAAa,CAAC,eAAe,EAAE;YACtC,EAAE;YACF,4BAA4B;YAC5B,EAAE;YACF,SAAS,aAAa,CAAC,QAAQ,EAAE;YACjC,EAAE;YACF,4DAA4D;YAC5D,EAAE;YACF,KAAK,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,8FAA8F;IACtF,WAAW,CAAC,UAA8B;QAChD,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,uBAAuB,CAAC;QAC7D,OAAO,oCAAoC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,GAAW;QAC7B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAS,EAAE;YAChC,+EAA+E;QACjF,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAEO,eAAe,CAAC,GAAW;QACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACK,UAAU;QAChB,MAAM,QAAQ,GAAqB,OAAO,CAAC,KAAK,CAAC;QACjD,MAAM,OAAO,GAAoB,OAAO,CAAC,MAAM,CAAC;QAChD,OAAO,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;IAC3D,CAAC;CACF"}
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
- * `forgecart init`'s credential check (#2772): each of the four keys from the
4
- * environment, then the target's `.env`, then its `.forgecart/config.json`
5
- * (`channelToken`, `apiUrl`) — the first non-empty value wins. With all four
6
- * found, init asks nothing; with any absent, it authorizes in the browser, and
7
- * the check's {@link report} is the first thing that run prints. The commands
8
- * that never authorize read the same four keys through {@link settle}.
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
- * `forgecart init`'s credential check (#2772): each of the four keys from the
20
- * environment, then the target's `.env`, then its `.forgecart/config.json`
21
- * (`channelToken`, `apiUrl`) — the first non-empty value wins. With all four
22
- * found, init asks nothing; with any absent, it authorizes in the browser, and
23
- * the check's {@link report} is the first thing that run prints. The commands
24
- * that never authorize read the same four keys through {@link settle}.
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":"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"}
1
+ {"version":3,"file":"cli-credential-check.js","sourceRoot":"","sources":["../../../src/authorization/cli-credential-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { type CliCredentials, type CliCredentialStepInput, type CliSettledCredentials } from './type/cli-authorization.types.js';
2
+ /**
3
+ * Default shop API base, INCLUDING the mounted path. The API serves the shop
4
+ * GraphQL endpoint at `/shop-api` (`app/forgecart/src/main.ts`), and the SDK
5
+ * takes this value verbatim as its endpoint. The SDK swaps the scheme for the
6
+ * websocket and appends nothing to the path, so a pathless origin scaffolds a
7
+ * storefront whose every read dials a socket nothing answers (#2102): the
8
+ * operation rides graphql-ws's whole retry ladder and the page hangs with
9
+ * nothing logged. `init`'s `--api-url` defaults to it, and the credential step
10
+ * authorizes against its admin API when no source names an API.
11
+ */
12
+ export declare const DEFAULT_SHOP_API_URL = "https://api.forgecart.com/shop-api";
13
+ /**
14
+ * The ONE credential step (launch#62 N3). Every command that needs the four
15
+ * `FORGECART_*` keys reads them through this step. It looks for each key in
16
+ * the environment, then the storefront's `.env`, then its
17
+ * `.forgecart/config.json`.
18
+ *
19
+ * When a key is in no source, or the admin API refuses the credentials as one
20
+ * of the {@link CliCredentialRefusalCode} codes, the step authorizes this
21
+ * machine at `/authorize` with the project's store preselected. The four keys
22
+ * the approval delivers land in the storefront's `.env` the moment the poll
23
+ * delivers them, so a run that is interrupted afterwards keeps them and its
24
+ * re-run opens no browser. The command then continues on the delivered keys.
25
+ * A denial, an expiry or an elapsed wait exits 3 with
26
+ * FORGECART_CLI_UNAUTHORIZED and writes nothing. The step authorizes at most
27
+ * once per run: if the admin API refuses the credentials an approval has just
28
+ * delivered, the run exits 3 and never 1.
29
+ */
30
+ export declare class CliCredentialStep {
31
+ private readonly input;
32
+ constructor(input: CliCredentialStepInput);
33
+ /**
34
+ * The four credentials the sources carry. When a key is in no source, the
35
+ * step returns the four an authorization delivers. Use this for a command
36
+ * that sends nothing to the admin API before its own work ends, as `init`
37
+ * does.
38
+ */
39
+ settle(): Promise<CliSettledCredentials>;
40
+ /**
41
+ * Run `command` on the settled credentials. If the admin API refuses the
42
+ * credentials the sources carried, the step authorizes this machine and runs
43
+ * `command` once more on the delivered keys. A refusal of keys an
44
+ * authorization delivered ends the run on exit 3.
45
+ */
46
+ run<T>(command: (credentials: CliCredentials) => Promise<T>): Promise<T>;
47
+ private settleFrom;
48
+ /**
49
+ * The command's run on the credentials the sources carry. The admin API
50
+ * refusing those credentials is the one failure that does not end the run:
51
+ * the step answers it by authorizing. Every other error propagates as
52
+ * thrown.
53
+ */
54
+ private runOnSourced;
55
+ /** Authorize this machine for the project's store, and keep what the approval delivers in `.env` at once. */
56
+ private authorize;
57
+ /** Why a run whose credentials were all found authorizes: the code the admin API refused them with. */
58
+ private refusalReport;
59
+ /**
60
+ * The admin API that answers the authorization. The step uses
61
+ * FORGECART_ADMIN_API_URL when a source names it. Otherwise it uses
62
+ * {@link ADMIN_API_PATH} on the origin of the caller's shop API, else the
63
+ * shop API the sources name, else the platform's.
64
+ */
65
+ private adminApiUrlOf;
66
+ /**
67
+ * Merge the four delivered keys into the storefront's `.env`. Each key is
68
+ * refreshed in place, and every other line is kept verbatim. The step
69
+ * creates the storefront directory if it does not exist yet.
70
+ */
71
+ private writeDotenv;
72
+ /** Read a file that may legitimately not exist yet. Any other failure propagates. */
73
+ private readIfPresent;
74
+ }