primitive-admin 1.1.0-alpha.64 → 1.1.0-alpha.66
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 +4 -4
- package/assets/skill/skills/primitive-platform/SKILL.md +83 -13
- package/dist/bin/primitive.js +6 -3
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/apps.js +14 -5
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/config.js +11 -4
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +25 -28
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/env.d.ts +12 -1
- package/dist/src/commands/env.js +96 -21
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/feature-flags.d.ts +14 -0
- package/dist/src/commands/feature-flags.js +116 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- package/dist/src/commands/init.d.ts +1 -1
- package/dist/src/commands/init.js +78 -25
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +55 -2
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/prompts.js +58 -3
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -1
- package/dist/src/commands/rule-sets.js +1 -0
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +83 -55
- package/dist/src/commands/sync-app-settings.js +131 -200
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +309 -40
- package/dist/src/commands/sync.js +2493 -397
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/users.js +92 -1
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/webhooks.js +59 -2
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.js +32 -22
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +51 -4
- package/dist/src/lib/api-client.js +71 -7
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +143 -15
- package/dist/src/lib/app-settings-descriptor.js +315 -28
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.js +6 -14
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.js +14 -3
- package/dist/src/lib/config-payload.js.map +1 -1
- package/dist/src/lib/config-surface.d.ts +38 -1
- package/dist/src/lib/config-surface.js +123 -1
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/env-resolver-core.d.ts +147 -0
- package/dist/src/lib/env-resolver-core.js +265 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +28 -6
- package/dist/src/lib/env-resolver.js +44 -32
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +66 -0
- package/dist/src/lib/generated-config-surfaces.js +391 -104
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/integration-request-config.d.ts +30 -0
- package/dist/src/lib/integration-request-config.js +145 -0
- package/dist/src/lib/integration-request-config.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +55 -0
- package/dist/src/lib/local-state.js +167 -0
- package/dist/src/lib/local-state.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +2 -2
- package/dist/src/lib/log-inspection.js +3 -3
- package/dist/src/lib/log-inspection.js.map +1 -1
- package/dist/src/lib/object-status-filter.d.ts +22 -0
- package/dist/src/lib/object-status-filter.js +45 -0
- package/dist/src/lib/object-status-filter.js.map +1 -0
- package/dist/src/lib/server-text-normalization.d.ts +51 -0
- package/dist/src/lib/server-text-normalization.js +90 -0
- package/dist/src/lib/server-text-normalization.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.js +2 -4
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +8 -0
- package/dist/src/lib/sync-resource-types.js +21 -2
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/template.d.ts +27 -0
- package/dist/src/lib/template.js +46 -20
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/workflow-defaults.d.ts +1 -2
- package/dist/src/lib/workflow-defaults.js +3 -3
- package/dist/src/lib/workflow-defaults.js.map +1 -1
- package/dist/src/lib/workflow-payload.js +0 -6
- package/dist/src/lib/workflow-payload.js.map +1 -1
- package/dist/src/types/index.d.ts +32 -7
- package/package.json +2 -2
package/dist/src/commands/env.js
CHANGED
|
@@ -5,14 +5,29 @@
|
|
|
5
5
|
* env list — show all environments
|
|
6
6
|
* env add <name> — add a new environment
|
|
7
7
|
* env remove <name> — delete an environment
|
|
8
|
-
* env use <name> —
|
|
8
|
+
* env use <name> — select the environment THIS machine uses
|
|
9
9
|
* env show [name] — show details for an environment (default: current)
|
|
10
|
+
*
|
|
11
|
+
* Two different things live here, and #2873 stopped them sharing one field:
|
|
12
|
+
* - `defaultEnvironment` in the committed config is the TEAM default — what
|
|
13
|
+
* a fresh clone resolves.
|
|
14
|
+
* - `.primitive/local.json` is THIS machine's selection, written by
|
|
15
|
+
* `env use`. It is gitignored, so switching backends never dirties a
|
|
16
|
+
* tracked file.
|
|
17
|
+
*
|
|
18
|
+
* `list` and `show` therefore refuse to paper over a broken selection: corrupt
|
|
19
|
+
* local state, or a selection naming an environment that no longer exists, is
|
|
20
|
+
* a different situation from "nothing is selected" and has a different remedy.
|
|
10
21
|
*/
|
|
11
22
|
import { join, dirname } from "path";
|
|
12
23
|
import { CURRENT_CONFIG_VERSION, PROJECT_CONFIG_DIR, PROJECT_CONFIG_FILENAME, PROJECT_CONFIG_DISPLAY_NAME, ProjectConfigError, findProjectConfigPath, loadProjectConfig, saveProjectConfig, } from "../lib/project-config.js";
|
|
13
|
-
import {
|
|
24
|
+
import { getCurrentEnvironment, resetEnvResolver, } from "../lib/env-resolver.js";
|
|
25
|
+
import { PrimitiveEnvError, localStatePathForConfigPath, readLocalSelection, } from "../lib/env-resolver-core.js";
|
|
26
|
+
import { clearLocalSelection, ensureLocalStateIgnored, writeLocalSelection, } from "../lib/local-state.js";
|
|
14
27
|
import { clearCredentialsForEnvInProject } from "../lib/credentials-store.js";
|
|
15
28
|
import { error, info, keyValue, result as printResult, success, warn, json, formatTable, divider, } from "../lib/output.js";
|
|
29
|
+
/** How the per-machine selection file is named in user-facing messages. */
|
|
30
|
+
const LOCAL_STATE_LABEL = ".primitive/local.json";
|
|
16
31
|
function requireProjectConfig() {
|
|
17
32
|
const path = findProjectConfigPath();
|
|
18
33
|
if (!path) {
|
|
@@ -43,6 +58,28 @@ function validateEnvName(name) {
|
|
|
43
58
|
}
|
|
44
59
|
return null;
|
|
45
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The environment display commands resolve for real rather than through the
|
|
63
|
+
* error-swallowing `getCurrentEnvNameSafe()`. A selection that cannot resolve
|
|
64
|
+
* is the whole point of these commands: hiding it behind "(none)" is how a
|
|
65
|
+
* user ends up staring at a table that disagrees with every other command.
|
|
66
|
+
*/
|
|
67
|
+
function resolveForDisplay() {
|
|
68
|
+
try {
|
|
69
|
+
const configPath = findProjectConfigPath();
|
|
70
|
+
const selected = configPath ? readLocalSelection(configPath) : null;
|
|
71
|
+
return { name: getCurrentEnvironment()?.name ?? null, selected };
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (err instanceof PrimitiveEnvError && err.kind === "no-selection") {
|
|
75
|
+
// Nothing selected among several environments is a legitimate state to
|
|
76
|
+
// display — the table shows them all and marks no current one.
|
|
77
|
+
return { name: null, selected: null };
|
|
78
|
+
}
|
|
79
|
+
error(err.message || String(err));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
46
83
|
export function registerEnvCommands(program) {
|
|
47
84
|
const env = program
|
|
48
85
|
.command("env")
|
|
@@ -51,7 +88,7 @@ export function registerEnvCommands(program) {
|
|
|
51
88
|
Examples:
|
|
52
89
|
$ primitive env list # list environments
|
|
53
90
|
$ primitive env add prod --api-url https://... # add an environment
|
|
54
|
-
$ primitive env use prod #
|
|
91
|
+
$ primitive env use prod # select it on this machine
|
|
55
92
|
$ primitive env show dev # show env details
|
|
56
93
|
$ primitive env remove staging # remove an environment
|
|
57
94
|
`);
|
|
@@ -62,14 +99,18 @@ Examples:
|
|
|
62
99
|
.option("--json", "Output as JSON")
|
|
63
100
|
.action((options) => {
|
|
64
101
|
const { config } = requireProjectConfig();
|
|
102
|
+
const { name: current, selected } = resolveForDisplay();
|
|
65
103
|
const rows = Object.entries(config.environments).map(([name, e]) => ({
|
|
66
104
|
name,
|
|
67
105
|
apiUrl: e.apiUrl,
|
|
68
106
|
appId: e.appId || "(unset)",
|
|
107
|
+
current: name === current ? "*" : "",
|
|
69
108
|
default: name === config.defaultEnvironment ? "*" : "",
|
|
70
109
|
}));
|
|
71
110
|
if (options.json) {
|
|
72
111
|
json({
|
|
112
|
+
currentEnvironment: current,
|
|
113
|
+
selectedEnvironment: selected,
|
|
73
114
|
defaultEnvironment: config.defaultEnvironment || null,
|
|
74
115
|
environments: config.environments,
|
|
75
116
|
});
|
|
@@ -80,11 +121,18 @@ Examples:
|
|
|
80
121
|
return;
|
|
81
122
|
}
|
|
82
123
|
console.log(formatTable(rows, [
|
|
83
|
-
{ key: "
|
|
124
|
+
{ key: "current", header: "CURRENT" },
|
|
84
125
|
{ key: "name", header: "Name" },
|
|
85
126
|
{ key: "apiUrl", header: "API URL" },
|
|
86
127
|
{ key: "appId", header: "App ID" },
|
|
128
|
+
{ key: "default", header: "TEAM DEFAULT" },
|
|
87
129
|
]));
|
|
130
|
+
if (selected) {
|
|
131
|
+
info(`"${selected}" is selected on this machine (${LOCAL_STATE_LABEL}).`);
|
|
132
|
+
}
|
|
133
|
+
else if (config.defaultEnvironment) {
|
|
134
|
+
info(`No local selection; falling back to the committed default "${config.defaultEnvironment}". Run 'primitive env use <name>' to choose one.`);
|
|
135
|
+
}
|
|
88
136
|
});
|
|
89
137
|
// env add
|
|
90
138
|
env
|
|
@@ -137,7 +185,7 @@ Examples:
|
|
|
137
185
|
info(`"${name}" is now the default environment.`);
|
|
138
186
|
}
|
|
139
187
|
else {
|
|
140
|
-
info(`Run 'primitive env use ${name}' to
|
|
188
|
+
info(`Run 'primitive env use ${name}' to point this machine at it.`);
|
|
141
189
|
}
|
|
142
190
|
});
|
|
143
191
|
// env remove
|
|
@@ -158,6 +206,12 @@ Examples:
|
|
|
158
206
|
warn(`"${name}" was the default environment. Set a new default with 'primitive env use <name>'.`);
|
|
159
207
|
}
|
|
160
208
|
writeProjectConfig(path, config);
|
|
209
|
+
// A selection naming an environment that no longer exists would make
|
|
210
|
+
// every later command fail on an unknown-environment error, so drop it
|
|
211
|
+
// with the environment it names.
|
|
212
|
+
if (clearLocalSelection(path, name)) {
|
|
213
|
+
info(`Cleared the local selection of "${name}" (${LOCAL_STATE_LABEL}).`);
|
|
214
|
+
}
|
|
161
215
|
// Also drop the credentials slot for this env so a subsequent `env add`
|
|
162
216
|
// with the same name can't silently re-use stale tokens from the old
|
|
163
217
|
// instance. The project root is two levels up from .primitive/config.json.
|
|
@@ -167,7 +221,7 @@ Examples:
|
|
|
167
221
|
// env use
|
|
168
222
|
env
|
|
169
223
|
.command("use")
|
|
170
|
-
.description("
|
|
224
|
+
.description("Select the environment this machine uses (local, not committed)")
|
|
171
225
|
.argument("<name>", "Environment name")
|
|
172
226
|
.action((name) => {
|
|
173
227
|
const { path, config } = requireProjectConfig();
|
|
@@ -175,9 +229,35 @@ Examples:
|
|
|
175
229
|
error(`Environment "${name}" does not exist. Run 'primitive env list' to see available environments.`);
|
|
176
230
|
process.exit(1);
|
|
177
231
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
232
|
+
// Ignore coverage BEFORE the write: a selection that shows up in
|
|
233
|
+
// `git status` is the tracked-file problem this replaced, just moved to
|
|
234
|
+
// an untracked file.
|
|
235
|
+
const localPath = localStatePathForConfigPath(path);
|
|
236
|
+
const coverage = ensureLocalStateIgnored(localPath);
|
|
237
|
+
if (coverage.status === "excluded") {
|
|
238
|
+
info(`Added "${coverage.pattern}" to ${coverage.excludePath} so the selection stays out of git.`);
|
|
239
|
+
info(`Consider committing "${LOCAL_STATE_LABEL}" to .gitignore so the whole team is covered.`);
|
|
240
|
+
}
|
|
241
|
+
else if (coverage.status === "failed") {
|
|
242
|
+
// Stop rather than write: an unignored local.json is committable state,
|
|
243
|
+
// which is the whole problem `env use` moved off the tracked config.
|
|
244
|
+
// The remedy is one line in .gitignore, after which this succeeds.
|
|
245
|
+
error(`Could not confirm ${LOCAL_STATE_LABEL} is git-ignored: ${coverage.detail}`);
|
|
246
|
+
error(`Add "${LOCAL_STATE_LABEL}" to your .gitignore and run 'primitive env use ${name}' again — ` +
|
|
247
|
+
`the selection is per-machine state and must never be committable.`);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
writeLocalSelection(path, name);
|
|
251
|
+
resetEnvResolver();
|
|
252
|
+
success(`Now using environment "${name}" on this machine.`);
|
|
253
|
+
keyValue("API URL", config.environments[name].apiUrl);
|
|
254
|
+
if (config.environments[name].appId) {
|
|
255
|
+
keyValue("App ID", config.environments[name].appId);
|
|
256
|
+
}
|
|
257
|
+
info(`Selection stored in ${localPath} (local state — never committed).`);
|
|
258
|
+
info(config.defaultEnvironment
|
|
259
|
+
? `The committed team default ("defaultEnvironment") is still "${config.defaultEnvironment}".`
|
|
260
|
+
: `No committed team default ("defaultEnvironment") is set for a fresh clone.`);
|
|
181
261
|
});
|
|
182
262
|
// env show
|
|
183
263
|
env
|
|
@@ -187,17 +267,12 @@ Examples:
|
|
|
187
267
|
.option("--json", "Output as JSON")
|
|
188
268
|
.action((name, options) => {
|
|
189
269
|
const { config } = requireProjectConfig();
|
|
190
|
-
// "Current" means the resolved env (honoring --env / PRIMITIVE_ENV /
|
|
191
|
-
// defaultEnvironment). We intentionally read this
|
|
192
|
-
// requireProjectConfig() so errors surface in a consistent order
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
})();
|
|
270
|
+
// "Current" means the resolved env (honoring --env / PRIMITIVE_ENV / the
|
|
271
|
+
// local selection / defaultEnvironment). We intentionally read this
|
|
272
|
+
// AFTER requireProjectConfig() so errors surface in a consistent order —
|
|
273
|
+
// and we do NOT swallow a broken selection, which would show the default
|
|
274
|
+
// as though it were current.
|
|
275
|
+
const resolvedName = name ? null : resolveForDisplay().name;
|
|
201
276
|
const envName = name || resolvedName || config.defaultEnvironment;
|
|
202
277
|
if (!envName) {
|
|
203
278
|
error(`No environment specified and no defaultEnvironment set. Usage: primitive env show <name>`);
|
|
@@ -222,7 +297,7 @@ Examples:
|
|
|
222
297
|
if (e.description)
|
|
223
298
|
printResult("Description", e.description);
|
|
224
299
|
if (config.defaultEnvironment === envName) {
|
|
225
|
-
info(
|
|
300
|
+
info(`(committed team default — "defaultEnvironment")`);
|
|
226
301
|
}
|
|
227
302
|
divider();
|
|
228
303
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* The platform's feature flags (issue #2803, phase 6).
|
|
4
|
+
*
|
|
5
|
+
* A feature flag is already what the rest of this issue is arguing for: one
|
|
6
|
+
* server-owned toggle with one writer. What it did not have was both surfaces —
|
|
7
|
+
* the console could flip a flag and the CLI could not read one, so an operator
|
|
8
|
+
* without a browser had no way to see or change platform behaviour.
|
|
9
|
+
*
|
|
10
|
+
* The model is unchanged (`enabled`, a boolean; not the five carrying types'
|
|
11
|
+
* `status`), and the routes already existed. This is the missing half of
|
|
12
|
+
* "every operational control is reachable from the CLI and from web-admin".
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerFeatureFlagsCommands(program: Command): void;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { ApiClient } from "../lib/api-client.js";
|
|
2
|
+
import { success, error, info, formatTable, formatBoolean, result as printResult, json, } from "../lib/output.js";
|
|
3
|
+
/**
|
|
4
|
+
* The platform's feature flags (issue #2803, phase 6).
|
|
5
|
+
*
|
|
6
|
+
* A feature flag is already what the rest of this issue is arguing for: one
|
|
7
|
+
* server-owned toggle with one writer. What it did not have was both surfaces —
|
|
8
|
+
* the console could flip a flag and the CLI could not read one, so an operator
|
|
9
|
+
* without a browser had no way to see or change platform behaviour.
|
|
10
|
+
*
|
|
11
|
+
* The model is unchanged (`enabled`, a boolean; not the five carrying types'
|
|
12
|
+
* `status`), and the routes already existed. This is the missing half of
|
|
13
|
+
* "every operational control is reachable from the CLI and from web-admin".
|
|
14
|
+
*/
|
|
15
|
+
export function registerFeatureFlagsCommands(program) {
|
|
16
|
+
const flags = program
|
|
17
|
+
.command("feature-flags")
|
|
18
|
+
.description("Read and toggle platform feature flags (super-admin only)")
|
|
19
|
+
.addHelpText("after", `
|
|
20
|
+
Examples:
|
|
21
|
+
$ primitive feature-flags list
|
|
22
|
+
$ primitive feature-flags get unified-block-canonical-storage
|
|
23
|
+
$ primitive feature-flags enable unified-block-canonical-storage
|
|
24
|
+
$ primitive feature-flags disable unified-block-canonical-storage
|
|
25
|
+
|
|
26
|
+
A flag is platform state, not app configuration: it is not in the TOML tree and
|
|
27
|
+
'config push' neither reads nor writes it.
|
|
28
|
+
`);
|
|
29
|
+
flags
|
|
30
|
+
.command("list")
|
|
31
|
+
.description("List every feature flag and whether it is enabled")
|
|
32
|
+
.option("--json", "Output as JSON")
|
|
33
|
+
.action(async (options) => {
|
|
34
|
+
const client = new ApiClient();
|
|
35
|
+
try {
|
|
36
|
+
const result = await client.listFeatureFlags();
|
|
37
|
+
const items = result?.items ?? result?.flags ?? result ?? [];
|
|
38
|
+
if (options.json) {
|
|
39
|
+
json(items);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!Array.isArray(items) || items.length === 0) {
|
|
43
|
+
info("No feature flags found.");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(formatTable(items, [
|
|
47
|
+
{ header: "KEY", key: "flagKey" },
|
|
48
|
+
{ header: "ENABLED", key: "enabled", format: formatBoolean },
|
|
49
|
+
{ header: "DESCRIPTION", key: "description" },
|
|
50
|
+
]));
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
error(err.message);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
flags
|
|
58
|
+
.command("get")
|
|
59
|
+
.description("Show one feature flag, including its per-app overrides")
|
|
60
|
+
.argument("<flag-key>", "Feature flag key")
|
|
61
|
+
.option("--json", "Output as JSON")
|
|
62
|
+
.action(async (flagKey, options) => {
|
|
63
|
+
const client = new ApiClient();
|
|
64
|
+
try {
|
|
65
|
+
const flag = await client.getFeatureFlag(flagKey);
|
|
66
|
+
if (options.json) {
|
|
67
|
+
json(flag);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
printResult("Key", flag.flagKey);
|
|
71
|
+
printResult("Enabled", formatBoolean(flag.enabled));
|
|
72
|
+
printResult("Description", flag.description || "-");
|
|
73
|
+
// The per-app overrides are what make a flag's effective value differ
|
|
74
|
+
// from the global one, so `get` shows them rather than only the global.
|
|
75
|
+
printResult("Enabled for apps", Array.isArray(flag.enabledAppIds) && flag.enabledAppIds.length > 0
|
|
76
|
+
? flag.enabledAppIds.join(", ")
|
|
77
|
+
: "-");
|
|
78
|
+
printResult("Disabled for apps", Array.isArray(flag.disabledAppIds) && flag.disabledAppIds.length > 0
|
|
79
|
+
? flag.disabledAppIds.join(", ")
|
|
80
|
+
: "-");
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
error(err.message);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
for (const [verb, enabled] of [
|
|
88
|
+
["enable", true],
|
|
89
|
+
["disable", false],
|
|
90
|
+
]) {
|
|
91
|
+
flags
|
|
92
|
+
.command(verb)
|
|
93
|
+
.description(enabled
|
|
94
|
+
? "Turn a feature flag on globally"
|
|
95
|
+
: "Turn a feature flag off globally")
|
|
96
|
+
.argument("<flag-key>", "Feature flag key")
|
|
97
|
+
.option("--json", "Output as JSON")
|
|
98
|
+
.action(async (flagKey, options) => {
|
|
99
|
+
const client = new ApiClient();
|
|
100
|
+
try {
|
|
101
|
+
const flag = await client.setFeatureFlagEnabled(flagKey, enabled);
|
|
102
|
+
if (options.json) {
|
|
103
|
+
json(flag);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
success(`Feature flag ${enabled ? "enabled" : "disabled"}: ${flagKey}`);
|
|
107
|
+
info("Per-app overrides still apply — `primitive feature-flags get` shows them.");
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
error(err.message);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=feature-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../../../src/commands/feature-flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,5 +13,5 @@ import { Command } from "commander";
|
|
|
13
13
|
* the restored `.primitive-sync.json` baseline — can never surface as untracked
|
|
14
14
|
* files in a tracked custom config dir.
|
|
15
15
|
*/
|
|
16
|
-
export declare const GITIGNORE_LOCAL_STATE_ENTRIES: readonly [".primitive/credentials.json", ".primitive/sync/**/.primitive-sync.json", ".primitive/sync-backups/", ".snapshots/", "config-snapshots/"];
|
|
16
|
+
export declare const GITIGNORE_LOCAL_STATE_ENTRIES: readonly [".primitive/credentials.json", ".primitive/local.json", ".primitive/sync/**/.primitive-sync.json", ".primitive/sync-backups/", ".snapshots/", "config-snapshots/"];
|
|
17
17
|
export declare function registerInitCommand(program: Command): void;
|
|
@@ -15,7 +15,7 @@ import { DEFAULT_DEV_PORT, resolveDevPort, validateDevPort, } from "../lib/resol
|
|
|
15
15
|
import { DEFAULT_SERVER_URL } from "../lib/constants.js";
|
|
16
16
|
import { divider, error, info, keyValue, success, warn, } from "../lib/output.js";
|
|
17
17
|
import { installCommand, PRIMITIVE_CLI_PACKAGE } from "../lib/package-manager.js";
|
|
18
|
-
import { gitInitialCommit, gitInitRepo, installPnpmGlobally, installPrimitiveCli, isDirectoryEmpty, isPnpmInstalled, isPortFree, isPrimitiveCliInstalled, isXcodeInstalled, iosTemplateUrl, vueTemplateUrl, resolveTemplateBranch, prepareTemplate, runPnpmInstall, runSwiftPackageResolve, updateEnvFile, updateEnvPort,
|
|
18
|
+
import { gitInitialCommit, gitInitRepo, installPnpmGlobally, installPrimitiveCli, isDirectoryEmpty, isPnpmInstalled, isPortFree, isPrimitiveCliInstalled, isXcodeInstalled, iosTemplateUrl, vueTemplateUrl, resolveTemplateBranch, prepareTemplate, runPnpmInstall, runSwiftPackageResolve, updateEnvFile, updateEnvPort, configurePrimitiveJson, updateViteConfig, } from "../lib/template.js";
|
|
19
19
|
/**
|
|
20
20
|
* The .gitignore lines `init` writes for Primitive CLI local state.
|
|
21
21
|
*
|
|
@@ -32,6 +32,10 @@ import { gitInitialCommit, gitInitRepo, installPnpmGlobally, installPrimitiveCli
|
|
|
32
32
|
*/
|
|
33
33
|
export const GITIGNORE_LOCAL_STATE_ENTRIES = [
|
|
34
34
|
".primitive/credentials.json",
|
|
35
|
+
// This machine's Primitive environment selection (`primitive env use`).
|
|
36
|
+
// The committed `defaultEnvironment` is the team default; the selection is
|
|
37
|
+
// per-machine and must never be committable (#2873).
|
|
38
|
+
".primitive/local.json",
|
|
35
39
|
".primitive/sync/**/.primitive-sync.json",
|
|
36
40
|
".primitive/sync-backups/",
|
|
37
41
|
".snapshots/",
|
|
@@ -835,21 +839,38 @@ async function handleInit(projectDirArg, options) {
|
|
|
835
839
|
// Steps 5-8: Platform-specific configuration and dependency installation
|
|
836
840
|
if (isApple) {
|
|
837
841
|
// ── Apple (SwiftUI) path ──────────────────────────────────────────
|
|
838
|
-
// Step 5:
|
|
842
|
+
// Step 5: Generate primitive.json from the environment we just scaffolded.
|
|
843
|
+
//
|
|
844
|
+
// In a current template the file is a build product, written by
|
|
845
|
+
// `scripts/resolve-primitive-config.sh` from `.primitive/config.json`
|
|
846
|
+
// (#2873) — so the scaffold gets one immediately rather than on first
|
|
847
|
+
// build. A template that predates the change has no such script and a
|
|
848
|
+
// tracked primitive.json instead; fill that in the old way.
|
|
839
849
|
info("Configuring primitive.json...");
|
|
840
850
|
try {
|
|
841
|
-
const
|
|
842
|
-
if (
|
|
843
|
-
|
|
844
|
-
warn(`Please manually set appId to "${appId}" in your primitive.json.`);
|
|
851
|
+
const result = configurePrimitiveJson(targetDir, appId, serverUrl, appName);
|
|
852
|
+
if (result.outcome === "generated") {
|
|
853
|
+
success("primitive.json generated from .primitive/config.json.");
|
|
845
854
|
}
|
|
846
|
-
else {
|
|
855
|
+
else if (result.outcome === "filled") {
|
|
847
856
|
success("primitive.json configured.");
|
|
848
857
|
}
|
|
858
|
+
else if (result.outcome === "failed") {
|
|
859
|
+
warn(`Could not generate primitive.json: ${result.detail}`);
|
|
860
|
+
warn("Run 'bash scripts/resolve-primitive-config.sh' in the project to retry.");
|
|
861
|
+
}
|
|
862
|
+
else {
|
|
863
|
+
// Neither the resolve script nor a template primitive.json — an
|
|
864
|
+
// unexpectedly old or trimmed template. The remedy is still never
|
|
865
|
+
// "type the app ID somewhere else": it is already in
|
|
866
|
+
// .primitive/config.json, which is where every reader looks.
|
|
867
|
+
warn("This template has neither scripts/resolve-primitive-config.sh nor a primitive.json.");
|
|
868
|
+
warn(`Environment "dev" in .primitive/config.json holds the app ID; update the template to generate primitive.json from it.`);
|
|
869
|
+
}
|
|
849
870
|
}
|
|
850
871
|
catch (err) {
|
|
851
|
-
warn(`Could not
|
|
852
|
-
warn(
|
|
872
|
+
warn(`Could not configure primitive.json: ${err.message}`);
|
|
873
|
+
warn("Run 'bash scripts/resolve-primitive-config.sh' in the project to retry.");
|
|
853
874
|
}
|
|
854
875
|
// Step 6-7: Skip port selection and pnpm (not applicable to Apple)
|
|
855
876
|
// Step 8: Resolve Swift packages
|
|
@@ -870,24 +891,25 @@ async function handleInit(projectDirArg, options) {
|
|
|
870
891
|
}
|
|
871
892
|
else {
|
|
872
893
|
// ── Web path ──────────────────────────────────────────────────────
|
|
873
|
-
// Step 5:
|
|
894
|
+
// Step 5: Fill in an OLD template's .env identity keys.
|
|
895
|
+
//
|
|
896
|
+
// A current template does not author them at all — `primitiveEnv()` reads
|
|
897
|
+
// `.primitive/config.json`, which we just scaffolded — so "no keys to
|
|
898
|
+
// replace" is the expected outcome, not a problem (#2873). The fill-in
|
|
899
|
+
// survives only so a new CLI still produces a working scaffold from a
|
|
900
|
+
// template that predates the change.
|
|
874
901
|
info("Configuring environment...");
|
|
875
902
|
try {
|
|
876
903
|
const envResult = updateEnvFile(targetDir, appId, serverUrl, appName);
|
|
877
904
|
if (!envResult.envUpdated) {
|
|
878
|
-
|
|
879
|
-
warn(`Please manually set VITE_APP_ID=${appId} in your .env file.`);
|
|
880
|
-
}
|
|
881
|
-
else if (!envResult.envProductionUpdated) {
|
|
882
|
-
info(".env configured. No .env.production file found (this is optional).");
|
|
905
|
+
info("No .env file in this template — identity comes from .primitive/config.json.");
|
|
883
906
|
}
|
|
884
907
|
else {
|
|
885
|
-
success("Environment configured
|
|
908
|
+
success("Environment configured.");
|
|
886
909
|
}
|
|
887
910
|
}
|
|
888
911
|
catch (err) {
|
|
889
912
|
warn(`Could not update .env file: ${err.message}`);
|
|
890
|
-
warn(`Please manually set VITE_APP_ID=${appId} in your .env file.`);
|
|
891
913
|
}
|
|
892
914
|
// Step 6: Determine the dev port. Default to 5173; warn about taken ports
|
|
893
915
|
// when prompting. The init config's `dev_port` decides it non-interactively
|
|
@@ -945,15 +967,19 @@ async function handleInit(projectDirArg, options) {
|
|
|
945
967
|
try {
|
|
946
968
|
const client = new ApiClient();
|
|
947
969
|
let existingOrigins = [];
|
|
948
|
-
let
|
|
970
|
+
let existingEmailRedirectUris = [];
|
|
971
|
+
let existingGoogleClients = null;
|
|
949
972
|
try {
|
|
950
973
|
const currentSettings = await client.getAppSettings(appId);
|
|
951
974
|
if (currentSettings.corsMode === "custom" &&
|
|
952
975
|
Array.isArray(currentSettings.corsAllowedOrigins)) {
|
|
953
976
|
existingOrigins = currentSettings.corsAllowedOrigins;
|
|
954
977
|
}
|
|
955
|
-
if (Array.isArray(currentSettings.
|
|
956
|
-
|
|
978
|
+
if (Array.isArray(currentSettings.emailRedirectUris)) {
|
|
979
|
+
existingEmailRedirectUris = currentSettings.emailRedirectUris;
|
|
980
|
+
}
|
|
981
|
+
if (currentSettings.googleClients) {
|
|
982
|
+
existingGoogleClients = currentSettings.googleClients;
|
|
957
983
|
}
|
|
958
984
|
}
|
|
959
985
|
catch {
|
|
@@ -961,18 +987,45 @@ async function handleInit(projectDirArg, options) {
|
|
|
961
987
|
}
|
|
962
988
|
// Always include 5173 since it's the universal localhost default
|
|
963
989
|
const corsOrigins = Array.from(new Set([...existingOrigins, defaultOrigin, devOrigin]));
|
|
964
|
-
|
|
965
|
-
|
|
990
|
+
// MERGED into the creation-time seed, never replacing it (#2891):
|
|
991
|
+
// `emailRedirectUris` matching is fail-closed, so blindly writing
|
|
992
|
+
// only this port's callback would break every other environment the
|
|
993
|
+
// app already serves.
|
|
994
|
+
const emailRedirectUris = Array.from(new Set([
|
|
995
|
+
...existingEmailRedirectUris,
|
|
966
996
|
`${defaultOrigin}/oauth/callback`,
|
|
967
997
|
`${devOrigin}/oauth/callback`,
|
|
968
998
|
]));
|
|
969
|
-
|
|
999
|
+
const settingsUpdate = {
|
|
970
1000
|
corsMode: "custom",
|
|
971
1001
|
corsAllowedOrigins: corsOrigins,
|
|
972
1002
|
corsAllowCredentials: true,
|
|
973
|
-
|
|
1003
|
+
emailRedirectUris,
|
|
974
1004
|
baseUrl: devOrigin,
|
|
975
|
-
}
|
|
1005
|
+
};
|
|
1006
|
+
// A Google web client redirects to this dev origin too, so its own
|
|
1007
|
+
// `redirectUris` needs the callback. A PUT replaces the WHOLE map,
|
|
1008
|
+
// so the complete map is sent back — an entry for a platform this
|
|
1009
|
+
// scaffold does not touch (ios, desktop, …) would otherwise be
|
|
1010
|
+
// deleted as a side effect of choosing a dev port.
|
|
1011
|
+
const webEntry = existingGoogleClients?.clients?.web;
|
|
1012
|
+
if (webEntry) {
|
|
1013
|
+
settingsUpdate.googleClients = {
|
|
1014
|
+
...existingGoogleClients,
|
|
1015
|
+
clients: {
|
|
1016
|
+
...existingGoogleClients.clients,
|
|
1017
|
+
web: {
|
|
1018
|
+
...webEntry,
|
|
1019
|
+
redirectUris: Array.from(new Set([
|
|
1020
|
+
...(webEntry.redirectUris ?? []),
|
|
1021
|
+
`${defaultOrigin}/oauth/callback`,
|
|
1022
|
+
`${devOrigin}/oauth/callback`,
|
|
1023
|
+
])),
|
|
1024
|
+
},
|
|
1025
|
+
},
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
1028
|
+
await client.updateAppSettings(appId, settingsUpdate);
|
|
976
1029
|
success(`Dev port set to ${chosenPort}: ${viteUpdated ? "vite.config.ts, " : ""}.env, CORS, redirect URIs, and base URL updated.`);
|
|
977
1030
|
}
|
|
978
1031
|
catch (err) {
|