@bitmagic/cli 0.1.48-dev.0 → 0.1.49
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
CHANGED
|
@@ -209,7 +209,9 @@ specific first:
|
|
|
209
209
|
(`dev`, `upgrade`, `forge`, `generate`, `publish`), and the one thing that outranks a project;
|
|
210
210
|
3. the `environment` field in the project's `bitmagic.json`;
|
|
211
211
|
4. the stored default, written by `bitmagic login`;
|
|
212
|
-
5. `
|
|
212
|
+
5. the environment this CLI's own release line is built for — **`prod` for `@bitmagic/cli`
|
|
213
|
+
(the `latest` tag), `dev` for `@bitmagic/cli@dev`** (any `-dev.N` version, including one run
|
|
214
|
+
from a checkout). A CLI whose version cannot be read falls back to `dev`.
|
|
213
215
|
|
|
214
216
|
Step 3 is what makes a checkout self-describing: `bitmagic init` records which api-server minted
|
|
215
217
|
the project's `gameId` and served the engine pinned beside it, so every later command in that
|
|
@@ -223,10 +225,12 @@ it at startup. A pinned project ignores the stored default, so `bitmagic login`
|
|
|
223
225
|
to the project's environment *without* changing your machine-wide default. `BITMAGIC_API_URL`
|
|
224
226
|
overrides the URL alone, keeping the environment name and its Auth0 tenant.
|
|
225
227
|
|
|
226
|
-
The two published lines are developed against different ones
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
228
|
+
The two published lines are developed against different ones, which is why step 5 asks the CLI
|
|
229
|
+
about itself. `@bitmagic/cli` (the `latest` tag) is the release, built against `prod`;
|
|
230
|
+
`@bitmagic/cli@dev` is the prerelease line, developed against `dev`, where the endpoints it depends
|
|
231
|
+
on exist first. Running a dev build against an environment that has not caught up fails on
|
|
232
|
+
endpoints that are not there yet — so the pairing each line wants is the one it now takes by
|
|
233
|
+
default, and `bitmagic login` needs no `--env` on either.
|
|
230
234
|
|
|
231
235
|
**Inside a project, the pin decides the line**, and nobody should be asked which one they want:
|
|
232
236
|
`dev` and `local` projects take `@bitmagic/cli@dev`, `prod` projects take the plain
|
|
@@ -19,8 +19,27 @@ export interface ResolveEnvironmentOptions {
|
|
|
19
19
|
projectDefault?: string;
|
|
20
20
|
/** The default recorded in the credentials file, if any. */
|
|
21
21
|
storedDefault?: string;
|
|
22
|
+
/**
|
|
23
|
+
* This CLI's own version, which decides the final fallback — see laneDefaultEnvironment.
|
|
24
|
+
* Passed in rather than read here so the precedence chain stays pure and testable; the wiring
|
|
25
|
+
* half below supplies it from `currentCliVersion()`.
|
|
26
|
+
*/
|
|
27
|
+
cliVersion?: string;
|
|
22
28
|
env?: Record<string, string | undefined>;
|
|
23
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* The environment a CLI points at when nothing else says: the one its own release line is built
|
|
32
|
+
* for. `@bitmagic/cli` from `latest` is the release a creator installs to make a real game, so it
|
|
33
|
+
* targets prod; `@bitmagic/cli@dev` carries `-dev.N` and exists to exercise endpoints that land on
|
|
34
|
+
* the dev api-server first, so it targets dev. Requiring `--env prod` on the release line made the
|
|
35
|
+
* common case the one that needed a flag.
|
|
36
|
+
*
|
|
37
|
+
* An unreadable version means dev, not prod. It is the direction whose mistakes are cheap: a dev
|
|
38
|
+
* CLI aimed at prod can publish a real game to bitmagic.ai, while a prod CLI aimed at dev fails
|
|
39
|
+
* visibly at the first authenticated call, because a token minted for one tenant's audience is not
|
|
40
|
+
* accepted by the other.
|
|
41
|
+
*/
|
|
42
|
+
export declare function laneDefaultEnvironment(cliVersion: string): EnvironmentName;
|
|
24
43
|
export interface EnvironmentSelection {
|
|
25
44
|
environment: Environment;
|
|
26
45
|
source: EnvironmentSource;
|
|
@@ -47,6 +66,8 @@ export interface CommandEnvironmentOptions {
|
|
|
47
66
|
cwd?: string;
|
|
48
67
|
/** Test-only credentials-directory override, matching the `baseDir` deps commands already thread. */
|
|
49
68
|
baseDir?: string;
|
|
69
|
+
/** Test-only override for the running CLI's version; production callers omit it. */
|
|
70
|
+
cliVersion?: string;
|
|
50
71
|
env?: Record<string, string | undefined>;
|
|
51
72
|
}
|
|
52
73
|
export declare function selectEnvironmentForCommand(options?: CommandEnvironmentOptions): EnvironmentSelection;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readProjectEnvironment } from '../project/context.js';
|
|
2
2
|
import { CliError } from '../errors.js';
|
|
3
3
|
import { readDefaultEnvironment } from './credentials.js';
|
|
4
|
+
import { currentCliVersion } from '../update/cli-version.js';
|
|
4
5
|
const DEV_AUTH0_DOMAIN = 'bitmagic-v3-staging.us.auth0.com';
|
|
5
6
|
const DEV_AUTH0_AUDIENCE = 'https://api.bitmagic.cloud';
|
|
6
7
|
// Public identifier of the "Bitmagic CLI APP" Auth0 Native application, not a secret — native
|
|
@@ -8,6 +9,10 @@ const DEV_AUTH0_AUDIENCE = 'https://api.bitmagic.cloud';
|
|
|
8
9
|
// Verified end to end against the staging tenant: the device-flow access token carries the
|
|
9
10
|
// https://bitmagic.ai/roles claim, so the api-server Admin gate accepts it.
|
|
10
11
|
const DEV_AUTH0_CLIENT_ID = 'wEp5Jsw43MyExDT1DfMCFyQSi8II0mSu';
|
|
12
|
+
// The same application in the production tenant (bitmagic-v3), public for the same reason.
|
|
13
|
+
// Its two non-default settings are the ones whose absence fails obscurely: Grant Types →
|
|
14
|
+
// Device Code on the application, and Allow Offline Access on the https://api.bitmagic.ai API.
|
|
15
|
+
const PROD_AUTH0_CLIENT_ID = 'KT5oOSeyzN0fhckhGo5CWrUOqnam31mo';
|
|
11
16
|
export const ENVIRONMENTS = {
|
|
12
17
|
dev: {
|
|
13
18
|
name: 'dev',
|
|
@@ -21,12 +26,7 @@ export const ENVIRONMENTS = {
|
|
|
21
26
|
apiUrl: 'https://bitmagic.ai',
|
|
22
27
|
auth0Domain: 'bitmagic-v3.us.auth0.com',
|
|
23
28
|
auth0Audience: 'https://api.bitmagic.ai',
|
|
24
|
-
|
|
25
|
-
// before any network call, naming BITMAGIC_AUTH0_CLIENT_ID. That is now the ONLY thing
|
|
26
|
-
// standing between this entry and a working prod pro lane: prod-v3-engine-releases is
|
|
27
|
-
// filled by promote-creator-to-prod.yml and `GET /api/cli/v1/engine/manifest` serves it —
|
|
28
|
-
// untested against a real token precisely because no prod login can be minted.
|
|
29
|
-
auth0ClientId: '',
|
|
29
|
+
auth0ClientId: PROD_AUTH0_CLIENT_ID,
|
|
30
30
|
},
|
|
31
31
|
// There is no local Auth0. Pointing local at the dev tenant is deliberate: minting a fake
|
|
32
32
|
// local identity would reintroduce the localhost-bypass hazard the CLI auth design rejected.
|
|
@@ -42,6 +42,23 @@ export const ENVIRONMENT_NAMES = Object.keys(ENVIRONMENTS);
|
|
|
42
42
|
export function isEnvironmentName(value) {
|
|
43
43
|
return Object.prototype.hasOwnProperty.call(ENVIRONMENTS, value);
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* The environment a CLI points at when nothing else says: the one its own release line is built
|
|
47
|
+
* for. `@bitmagic/cli` from `latest` is the release a creator installs to make a real game, so it
|
|
48
|
+
* targets prod; `@bitmagic/cli@dev` carries `-dev.N` and exists to exercise endpoints that land on
|
|
49
|
+
* the dev api-server first, so it targets dev. Requiring `--env prod` on the release line made the
|
|
50
|
+
* common case the one that needed a flag.
|
|
51
|
+
*
|
|
52
|
+
* An unreadable version means dev, not prod. It is the direction whose mistakes are cheap: a dev
|
|
53
|
+
* CLI aimed at prod can publish a real game to bitmagic.ai, while a prod CLI aimed at dev fails
|
|
54
|
+
* visibly at the first authenticated call, because a token minted for one tenant's audience is not
|
|
55
|
+
* accepted by the other.
|
|
56
|
+
*/
|
|
57
|
+
export function laneDefaultEnvironment(cliVersion) {
|
|
58
|
+
if (!cliVersion)
|
|
59
|
+
return 'dev';
|
|
60
|
+
return cliVersion.includes('-') ? 'dev' : 'prod';
|
|
61
|
+
}
|
|
45
62
|
/** Where the bad value came from, and therefore how to tell the user to fix it. */
|
|
46
63
|
function unknownEnvironmentMessage(candidate, source) {
|
|
47
64
|
const valid = `Valid environments: ${ENVIRONMENT_NAMES.join(', ')}.`;
|
|
@@ -80,7 +97,7 @@ export function selectEnvironment(options = {}) {
|
|
|
80
97
|
[validStoredDefault, 'stored'],
|
|
81
98
|
];
|
|
82
99
|
const chosen = candidates.find(([value]) => value !== undefined);
|
|
83
|
-
const candidate = chosen?.[0] ?? '
|
|
100
|
+
const candidate = chosen?.[0] ?? laneDefaultEnvironment(options.cliVersion ?? '');
|
|
84
101
|
const source = chosen?.[1] ?? 'default';
|
|
85
102
|
if (!isEnvironmentName(candidate)) {
|
|
86
103
|
throw new CliError(unknownEnvironmentMessage(candidate, source));
|
|
@@ -107,7 +124,10 @@ export function describeEnvironmentSource(source) {
|
|
|
107
124
|
case 'stored':
|
|
108
125
|
return 'from your last login';
|
|
109
126
|
case 'default':
|
|
110
|
-
|
|
127
|
+
// Named for the reason rather than left as "the default", because the answer now differs
|
|
128
|
+
// between two CLIs a creator may both have installed, and "prod" with no explanation reads
|
|
129
|
+
// like the CLI decided on its own.
|
|
130
|
+
return 'the default for this CLI build';
|
|
111
131
|
}
|
|
112
132
|
}
|
|
113
133
|
export function selectEnvironmentForCommand(options = {}) {
|
|
@@ -115,6 +135,9 @@ export function selectEnvironmentForCommand(options = {}) {
|
|
|
115
135
|
explicit: options.explicit,
|
|
116
136
|
projectDefault: readProjectEnvironment(options.cwd),
|
|
117
137
|
storedDefault: readDefaultEnvironment(options.baseDir),
|
|
138
|
+
// Read here rather than in selectEnvironment: this is the wiring half, and currentCliVersion
|
|
139
|
+
// touches the filesystem. `cliVersion` stays overridable so a test can pin a lane.
|
|
140
|
+
cliVersion: options.cliVersion ?? currentCliVersion(),
|
|
118
141
|
env: options.env,
|
|
119
142
|
});
|
|
120
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/config/environments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/config/environments.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitmagic/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.49",
|
|
4
4
|
"description": "Build Bitmagic games from your own agent tool",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Bitmagic Oy",
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
"fflate": "^0.8.2",
|
|
24
24
|
"playwright-core": "^1.59.1",
|
|
25
25
|
"tar": "^7.4.3",
|
|
26
|
-
"@bitmagic/
|
|
27
|
-
"@bitmagic/
|
|
28
|
-
"@bitmagic/
|
|
26
|
+
"@bitmagic/world-forger": "0.1.9",
|
|
27
|
+
"@bitmagic/animation-forger": "0.1.4",
|
|
28
|
+
"@bitmagic/asset-core": "0.2.4"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@eslint/js": "^9.38.0",
|