primitive-admin 1.1.0-alpha.67 → 1.1.0-alpha.69
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/assets/skill/skills/primitive-platform/SKILL.md +21 -3
- package/dist/src/commands/cron-triggers.js +64 -0
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-types.js +313 -13
- package/dist/src/commands/database-types.js.map +1 -1
- package/dist/src/commands/init.js +43 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +69 -14
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.js +6 -9
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/prompts.js +61 -0
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/sync.d.ts +29 -4
- package/dist/src/commands/sync.js +138 -22
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/webhooks.js +63 -0
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.js +60 -0
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +22 -5
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.js +9 -1
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.js +31 -11
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/init-ios-links.d.ts +50 -0
- package/dist/src/lib/init-ios-links.js +153 -0
- package/dist/src/lib/init-ios-links.js.map +1 -0
- package/dist/src/lib/test-case-variables.d.ts +15 -0
- package/dist/src/lib/test-case-variables.js +29 -0
- package/dist/src/lib/test-case-variables.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/commands/settings.d.ts +0 -18
- package/dist/src/commands/settings.js +0 -54
- package/dist/src/commands/settings.js.map +0 -1
- package/dist/src/lib/generated-workflow-model-fields.d.ts +0 -20
- package/dist/src/lib/generated-workflow-model-fields.js +0 -53
- package/dist/src/lib/generated-workflow-model-fields.js.map +0 -1
- package/dist/src/lib/google-client-secret-status.d.ts +0 -35
- package/dist/src/lib/google-client-secret-status.js +0 -56
- package/dist/src/lib/google-client-secret-status.js.map +0 -1
- package/dist/src/lib/workflow-field-descriptor.d.ts +0 -91
- package/dist/src/lib/workflow-field-descriptor.js +0 -153
- package/dist/src/lib/workflow-field-descriptor.js.map +0 -1
|
@@ -281,6 +281,13 @@ primitive prompts disable <key>
|
|
|
281
281
|
primitive users disable <user-id> # a person, not an object — reversible
|
|
282
282
|
primitive feature-flags disable <key> # super-admin platform toggle
|
|
283
283
|
|
|
284
|
+
# Retiring an object (soft delete; NOT the same as disable)
|
|
285
|
+
primitive workflows archive <key> # same verb on the five types that carry
|
|
286
|
+
primitive cron-triggers archive <id> # `archived`; confirms first, -y skips
|
|
287
|
+
primitive webhooks archive <id>
|
|
288
|
+
primitive integrations archive <id> # the ID column of `integrations list`
|
|
289
|
+
primitive prompts archive <id> # the ID column of `prompts list`
|
|
290
|
+
|
|
284
291
|
# Common operations
|
|
285
292
|
primitive apps list # List apps on the active env's server
|
|
286
293
|
primitive apps create "Name" # Create an app (does NOT auto-bind to an env;
|
|
@@ -290,13 +297,24 @@ primitive apps create "Name" # Create an app (does NOT auto-bind to an env
|
|
|
290
297
|
**Availability is not configuration.** Whether a workflow, cron trigger,
|
|
291
298
|
webhook, integration or prompt is in service is one server-owned `status`
|
|
292
299
|
field, changed only by `<noun> enable|disable` (or the matching console
|
|
293
|
-
action)
|
|
294
|
-
|
|
295
|
-
|
|
300
|
+
action) and by the delete flow, whose CLI spelling is `<noun> archive` on those
|
|
301
|
+
same five types. It is not a TOML key: `config pull` does not emit it,
|
|
302
|
+
`config push` never sends it, and a file that still carries a `status` line
|
|
303
|
+
fails the push with a message naming the verbs. So a push cannot put something back in service
|
|
296
304
|
that an operator took out of it, and a fresh environment stood up from config
|
|
297
305
|
has everything active. Anything newly created or pushed is active; there is no
|
|
298
306
|
`draft` state on any object.
|
|
299
307
|
|
|
308
|
+
**`archive` retires, `--prune` destroys.** `<noun> archive <id>` writes the
|
|
309
|
+
third value, `archived`: the delete lifecycle rather than availability. The row
|
|
310
|
+
is kept so its history still resolves, it goes on holding its key — and, for
|
|
311
|
+
webhooks and cron triggers, its slot against the per-app cap — `enable` refuses
|
|
312
|
+
it, and there is no un-archive. Reclaiming the key means a hard delete: remove
|
|
313
|
+
the object's TOML file and run a confirmed `primitive config push --prune`, then
|
|
314
|
+
re-add the file and push. There is no `--hard` flag and no per-type `delete`
|
|
315
|
+
verb; prune-by-push is the CLI's only hard delete. `users` and `admins` carry
|
|
316
|
+
`enable`/`disable` but no `archive` — people are not configuration objects.
|
|
317
|
+
|
|
300
318
|
Per-VERSION status is a different thing and stays in TOML: a prompt, workflow
|
|
301
319
|
or script config retires a named version with `status = "archived"` inside its
|
|
302
320
|
`[[configs]]` entry, which says which version is live, not whether the object
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { resolveAppId } from "../lib/config.js";
|
|
3
|
+
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
3
4
|
import { success, error, info, keyValue, result as printResult, formatTable, formatDate, formatStatus, json, divider, } from "../lib/output.js";
|
|
4
5
|
export function registerCronTriggersCommands(program) {
|
|
5
6
|
const cron = program
|
|
@@ -13,6 +14,7 @@ Examples:
|
|
|
13
14
|
$ primitive cron-triggers get 01HXY...
|
|
14
15
|
$ primitive cron-triggers disable 01HXY...
|
|
15
16
|
$ primitive cron-triggers enable 01HXY...
|
|
17
|
+
$ primitive cron-triggers archive 01HXY... # retire it (soft delete)
|
|
16
18
|
$ primitive cron-triggers test 01HXY...
|
|
17
19
|
`);
|
|
18
20
|
// Server-side configuration is authored in TOML and applied with `config push`
|
|
@@ -164,6 +166,68 @@ Configuration lives in cron-triggers/<key>.toml:
|
|
|
164
166
|
process.exit(1);
|
|
165
167
|
}
|
|
166
168
|
});
|
|
169
|
+
// ─── archive ───
|
|
170
|
+
// #2907 — the delete flow's CLI spelling. Not a second writer of `status`:
|
|
171
|
+
// this is the plain `DELETE` the server has always answered by writing the
|
|
172
|
+
// tombstone, which until now only the admin API and the console could reach.
|
|
173
|
+
// Named `archive`, not `delete`, because a configuration noun gets no
|
|
174
|
+
// `delete` verb (docs/cli-design.md) and prune-by-push stays the only CLI
|
|
175
|
+
// hard-delete path.
|
|
176
|
+
cron
|
|
177
|
+
.command("archive")
|
|
178
|
+
.description("Retire a cron trigger (soft delete). Delete-lifecycle, not `disable`: the row is kept, keeps its key and its capped slot, and there is no un-archive.")
|
|
179
|
+
.argument("<trigger-id>", "Trigger ID")
|
|
180
|
+
.option("--app <app-id>", "App ID")
|
|
181
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
182
|
+
.option("--json", "Output as JSON")
|
|
183
|
+
.addHelpText("after", `
|
|
184
|
+
What archiving a cron trigger costs:
|
|
185
|
+
The schedule is cancelled and no further fire happens.
|
|
186
|
+
The archived row still holds its triggerKey AND its slot under the per-app
|
|
187
|
+
cron-trigger cap (50) — archiving frees neither.
|
|
188
|
+
\`primitive cron-triggers enable\` refuses an archived trigger; there is no
|
|
189
|
+
un-archive.
|
|
190
|
+
|
|
191
|
+
Reclaiming the key and the slot means hard-deleting the row:
|
|
192
|
+
$ rm cron-triggers/<key>.toml
|
|
193
|
+
$ primitive config push --prune # confirmed; hard-deletes the row
|
|
194
|
+
# or hard-delete it in the console, then re-add the file and push.
|
|
195
|
+
`)
|
|
196
|
+
.action(async (triggerId, options) => {
|
|
197
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
198
|
+
if (!options.yes) {
|
|
199
|
+
let confirmed;
|
|
200
|
+
try {
|
|
201
|
+
confirmed = await confirmPrompt(`Archive cron trigger ${triggerId}? The schedule stops, the row keeps ` +
|
|
202
|
+
`its key and its capped slot, and there is no un-archive.`);
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
error(err.message);
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
if (!confirmed) {
|
|
209
|
+
info("Cancelled.");
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const client = new ApiClient();
|
|
214
|
+
try {
|
|
215
|
+
// The soft delete: no `hard`, so the server writes the tombstone and
|
|
216
|
+
// cancels the alarm. Its envelope is `{ archived: true }` — no key to
|
|
217
|
+
// report back, so the id the operator passed is what is echoed.
|
|
218
|
+
const result = await client.deleteCronTrigger(resolvedAppId, triggerId);
|
|
219
|
+
if (options.json) {
|
|
220
|
+
json(result);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
success(`Cron trigger archived: ${triggerId}`);
|
|
224
|
+
info("The schedule is cancelled. The row still holds its key and its capped slot — reclaim both by removing its file and running a confirmed `primitive config push --prune`.");
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
error(err.message);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
167
231
|
// ─── test ───
|
|
168
232
|
cron
|
|
169
233
|
.command("test")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-triggers.js","sourceRoot":"","sources":["../../../src/commands/cron-triggers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cron-triggers.js","sourceRoot":"","sources":["../../../src/commands/cron-triggers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { getCurrentAppId } from "../lib/config.js";
|
|
3
|
-
import { error, info, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
|
|
3
|
+
import { success, error, info, keyValue, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
|
|
4
|
+
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
4
5
|
function resolveAppId(appId, options) {
|
|
5
6
|
const resolved = appId || options.app || getCurrentAppId();
|
|
6
7
|
if (!resolved) {
|
|
@@ -17,19 +18,11 @@ export function registerDatabaseTypesCommands(program) {
|
|
|
17
18
|
Examples:
|
|
18
19
|
$ primitive database-types list
|
|
19
20
|
$ primitive database-types get <database-type>
|
|
20
|
-
$ primitive
|
|
21
|
-
$ primitive
|
|
21
|
+
$ primitive database-types create <database-type>
|
|
22
|
+
$ primitive database-types update <database-type> --rule-set-id <id>
|
|
23
|
+
$ primitive database-types delete <database-type>
|
|
22
24
|
$ primitive database-types operations list <database-type>
|
|
23
|
-
|
|
24
|
-
`);
|
|
25
|
-
// Server-side configuration is authored in TOML and applied with `config push`
|
|
26
|
-
// (issue #2645) — this group no longer carries config-setting flags.
|
|
27
|
-
dbTypes.addHelpText("after", `
|
|
28
|
-
Configuration lives in database-types/<type>.toml:
|
|
29
|
-
$ primitive config fields database-type # the file's keys, types and defaults
|
|
30
|
-
$ primitive config create database-type <key> # scaffold one locally
|
|
31
|
-
$ primitive config set database-type/<key> <path>=<value>
|
|
32
|
-
$ primitive config push --only database-type/<key>
|
|
25
|
+
$ primitive database-types operations create <database-type> <name> --type query --model Task --access true --definition '{"filter":{}}'
|
|
33
26
|
`);
|
|
34
27
|
// List type configs
|
|
35
28
|
dbTypes
|
|
@@ -92,10 +85,162 @@ Configuration lives in database-types/<type>.toml:
|
|
|
92
85
|
process.exit(1);
|
|
93
86
|
}
|
|
94
87
|
});
|
|
88
|
+
// Create type config
|
|
89
|
+
dbTypes
|
|
90
|
+
.command("create")
|
|
91
|
+
.description("Create a database type configuration")
|
|
92
|
+
.argument("<database-type>", "Database type name")
|
|
93
|
+
.option("--rule-set-id <id>", "Access rule set ID")
|
|
94
|
+
.option("--triggers <json>", "Trigger definitions as JSON string")
|
|
95
|
+
.option("--cel-context-access <cel>", "CEL expression gating who can update the database's CEL context")
|
|
96
|
+
.option("--metadata-access <cel>", "Legacy alias for --cel-context-access")
|
|
97
|
+
.option("--app <app-id>", "App ID")
|
|
98
|
+
.option("--json", "Output as JSON")
|
|
99
|
+
.action(async (databaseType, options) => {
|
|
100
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
101
|
+
const client = new ApiClient();
|
|
102
|
+
try {
|
|
103
|
+
const data = { databaseType };
|
|
104
|
+
if (options.ruleSetId)
|
|
105
|
+
data.ruleSetId = options.ruleSetId;
|
|
106
|
+
if (options.triggers) {
|
|
107
|
+
try {
|
|
108
|
+
data.triggers = JSON.parse(options.triggers);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
error("Invalid JSON in --triggers.");
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// `--cel-context-access` is the new name; `--metadata-access` remains
|
|
116
|
+
// supported. Both write to the same wire field (`metadataAccess`).
|
|
117
|
+
const accessExpr = options.celContextAccess ?? options.metadataAccess;
|
|
118
|
+
if (accessExpr)
|
|
119
|
+
data.metadataAccess = accessExpr;
|
|
120
|
+
const result = await client.createDatabaseTypeConfig(resolvedAppId, data);
|
|
121
|
+
if (options.json) {
|
|
122
|
+
json(result);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
success("Database type configuration created.");
|
|
126
|
+
keyValue("Database Type", result.databaseType);
|
|
127
|
+
if (result.ruleSetId)
|
|
128
|
+
keyValue("Rule Set ID", result.ruleSetId);
|
|
129
|
+
if (result.triggers)
|
|
130
|
+
keyValue("Triggers", "Yes");
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
error(err.message);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
// Update type config
|
|
138
|
+
dbTypes
|
|
139
|
+
.command("update")
|
|
140
|
+
.description("Update a database type configuration")
|
|
141
|
+
.argument("<database-type>", "Database type name")
|
|
142
|
+
.option("--rule-set-id <id>", "Access rule set ID (use 'none' to clear)")
|
|
143
|
+
.option("--triggers <json>", "Trigger definitions as JSON string (use 'none' to clear)")
|
|
144
|
+
.option("--cel-context-access <cel>", "CEL expression gating CEL context updates (use 'none' to clear)")
|
|
145
|
+
.option("--metadata-access <cel>", "Legacy alias for --cel-context-access (use 'none' to clear)")
|
|
146
|
+
.option("--app <app-id>", "App ID")
|
|
147
|
+
.option("--json", "Output as JSON")
|
|
148
|
+
.action(async (databaseType, options) => {
|
|
149
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
150
|
+
const client = new ApiClient();
|
|
151
|
+
const data = {};
|
|
152
|
+
if (options.ruleSetId !== undefined) {
|
|
153
|
+
data.ruleSetId = options.ruleSetId === "none" ? null : options.ruleSetId;
|
|
154
|
+
}
|
|
155
|
+
if (options.triggers !== undefined) {
|
|
156
|
+
if (options.triggers === "none") {
|
|
157
|
+
data.triggers = null;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
try {
|
|
161
|
+
data.triggers = JSON.parse(options.triggers);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
error("Invalid JSON in --triggers.");
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Honour either flag; --cel-context-access wins if both are given.
|
|
170
|
+
const accessArg = options.celContextAccess !== undefined
|
|
171
|
+
? options.celContextAccess
|
|
172
|
+
: options.metadataAccess;
|
|
173
|
+
if (accessArg !== undefined) {
|
|
174
|
+
data.metadataAccess = accessArg === "none" ? null : accessArg;
|
|
175
|
+
}
|
|
176
|
+
if (Object.keys(data).length === 0) {
|
|
177
|
+
error("Provide at least one of --rule-set-id, --triggers, --cel-context-access, or --metadata-access.");
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
const result = await client.updateDatabaseTypeConfig(resolvedAppId, databaseType, data);
|
|
182
|
+
if (options.json) {
|
|
183
|
+
json(result);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
success("Database type configuration updated.");
|
|
187
|
+
keyValue("Database Type", result.databaseType);
|
|
188
|
+
keyValue("Rule Set ID", result.ruleSetId || "—");
|
|
189
|
+
keyValue("Triggers", result.triggers ? "Yes" : "—");
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
error(err.message);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
// Delete type config
|
|
197
|
+
dbTypes
|
|
198
|
+
.command("delete")
|
|
199
|
+
.description("Delete a database type configuration")
|
|
200
|
+
.argument("<database-type>", "Database type name")
|
|
201
|
+
.option("--app <app-id>", "App ID")
|
|
202
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
203
|
+
.option("--force", "Delete even if live database instances of this type still exist (orphans them)")
|
|
204
|
+
.action(async (databaseType, options) => {
|
|
205
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
206
|
+
// `-y/--yes` only skips the interactive confirm; it does NOT bypass the
|
|
207
|
+
// server's instance-orphaning guard. Only `--force` (→ ?force=true) does.
|
|
208
|
+
if (!options.yes) {
|
|
209
|
+
let confirm;
|
|
210
|
+
try {
|
|
211
|
+
confirm = await confirmPrompt(`Delete database type "${databaseType}"? This cannot be undone.`);
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
error(err.message);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
if (!confirm) {
|
|
218
|
+
info("Cancelled.");
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const client = new ApiClient();
|
|
223
|
+
try {
|
|
224
|
+
await client.deleteDatabaseTypeConfig(resolvedAppId, databaseType, {
|
|
225
|
+
force: Boolean(options.force),
|
|
226
|
+
});
|
|
227
|
+
success(`Database type "${databaseType}" deleted.`);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
error(err.message);
|
|
231
|
+
// The server refuses (409) when live instances exist and --force was
|
|
232
|
+
// not passed. Point the user at the escape hatch.
|
|
233
|
+
if (/instance/i.test(err.message) && !options.force) {
|
|
234
|
+
info("Delete the instances first (primitive databases delete <id>), or re-run with --force to delete the type anyway (this orphans the instances).");
|
|
235
|
+
}
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
95
239
|
// ---- Operations subcommand group ----
|
|
96
240
|
const operations = dbTypes
|
|
97
241
|
.command("operations")
|
|
98
242
|
.description("Manage operations (queries and mutations) for a database type");
|
|
243
|
+
// List operations
|
|
99
244
|
operations
|
|
100
245
|
.command("list")
|
|
101
246
|
.description("List operations for a database type")
|
|
@@ -167,5 +312,160 @@ Configuration lives in database-types/<type>.toml:
|
|
|
167
312
|
process.exit(1);
|
|
168
313
|
}
|
|
169
314
|
});
|
|
315
|
+
// Create operation
|
|
316
|
+
operations
|
|
317
|
+
.command("create")
|
|
318
|
+
.description("Create a new operation (query or mutation)")
|
|
319
|
+
.argument("<database-type>", "Database type name")
|
|
320
|
+
.argument("<name>", "Operation name")
|
|
321
|
+
.requiredOption("--type <type>", "Operation type: query, mutation, count, aggregate, or pipeline")
|
|
322
|
+
.requiredOption("--model <model-name>", "Model name")
|
|
323
|
+
.requiredOption("--access <cel>", "Access CEL expression")
|
|
324
|
+
.requiredOption("--definition <json>", "Definition as JSON string")
|
|
325
|
+
.option("--params <json>", "Parameters schema as JSON string")
|
|
326
|
+
.option("--app <app-id>", "App ID")
|
|
327
|
+
.option("--json", "Output as JSON")
|
|
328
|
+
.action(async (databaseType, name, options) => {
|
|
329
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
330
|
+
const client = new ApiClient();
|
|
331
|
+
let definition;
|
|
332
|
+
try {
|
|
333
|
+
definition = JSON.parse(options.definition);
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
error("Invalid JSON in --definition.");
|
|
337
|
+
process.exit(1);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
let params;
|
|
341
|
+
if (options.params) {
|
|
342
|
+
try {
|
|
343
|
+
params = JSON.parse(options.params);
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
error("Invalid JSON in --params.");
|
|
347
|
+
process.exit(1);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
try {
|
|
352
|
+
const data = {
|
|
353
|
+
name,
|
|
354
|
+
type: options.type,
|
|
355
|
+
modelName: options.model,
|
|
356
|
+
access: options.access,
|
|
357
|
+
definition,
|
|
358
|
+
};
|
|
359
|
+
if (params)
|
|
360
|
+
data.params = params;
|
|
361
|
+
const result = await client.createDatabaseTypeOperation(resolvedAppId, databaseType, data);
|
|
362
|
+
if (options.json) {
|
|
363
|
+
json(result);
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
success("Operation created.");
|
|
367
|
+
keyValue("Name", result.name);
|
|
368
|
+
keyValue("Type", result.type);
|
|
369
|
+
keyValue("Model Name", result.modelName);
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
error(err.message);
|
|
373
|
+
process.exit(1);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
// Update operation
|
|
377
|
+
operations
|
|
378
|
+
.command("update")
|
|
379
|
+
.description("Update an operation")
|
|
380
|
+
.argument("<database-type>", "Database type name")
|
|
381
|
+
.argument("<name>", "Operation name")
|
|
382
|
+
.option("--model <model-name>", "New model name")
|
|
383
|
+
.option("--access <cel>", "New access CEL expression")
|
|
384
|
+
.option("--definition <json>", "New definition as JSON string")
|
|
385
|
+
.option("--params <json>", "New parameters schema as JSON string")
|
|
386
|
+
.option("--app <app-id>", "App ID")
|
|
387
|
+
.option("--json", "Output as JSON")
|
|
388
|
+
.action(async (databaseType, name, options) => {
|
|
389
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
390
|
+
const client = new ApiClient();
|
|
391
|
+
const data = {};
|
|
392
|
+
if (options.model)
|
|
393
|
+
data.modelName = options.model;
|
|
394
|
+
if (options.access)
|
|
395
|
+
data.access = options.access;
|
|
396
|
+
if (options.definition) {
|
|
397
|
+
try {
|
|
398
|
+
data.definition = JSON.parse(options.definition);
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
error("Invalid JSON in --definition.");
|
|
402
|
+
process.exit(1);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (options.params) {
|
|
407
|
+
try {
|
|
408
|
+
data.params = JSON.parse(options.params);
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
error("Invalid JSON in --params.");
|
|
412
|
+
process.exit(1);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (Object.keys(data).length === 0) {
|
|
417
|
+
error("Provide at least one of --model, --access, --definition, or --params.");
|
|
418
|
+
process.exit(1);
|
|
419
|
+
}
|
|
420
|
+
try {
|
|
421
|
+
const result = await client.updateDatabaseTypeOperation(resolvedAppId, databaseType, name, data);
|
|
422
|
+
if (options.json) {
|
|
423
|
+
json(result);
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
success("Operation updated.");
|
|
427
|
+
keyValue("Name", result.name);
|
|
428
|
+
keyValue("Type", result.type);
|
|
429
|
+
keyValue("Model Name", result.modelName);
|
|
430
|
+
}
|
|
431
|
+
catch (err) {
|
|
432
|
+
error(err.message);
|
|
433
|
+
process.exit(1);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
// Delete operation
|
|
437
|
+
operations
|
|
438
|
+
.command("delete")
|
|
439
|
+
.description("Delete an operation")
|
|
440
|
+
.argument("<database-type>", "Database type name")
|
|
441
|
+
.argument("<name>", "Operation name")
|
|
442
|
+
.option("--app <app-id>", "App ID")
|
|
443
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
444
|
+
.action(async (databaseType, name, options) => {
|
|
445
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
446
|
+
if (!options.yes) {
|
|
447
|
+
let confirm;
|
|
448
|
+
try {
|
|
449
|
+
confirm = await confirmPrompt(`Delete operation "${name}" from type "${databaseType}"?`);
|
|
450
|
+
}
|
|
451
|
+
catch (err) {
|
|
452
|
+
error(err.message);
|
|
453
|
+
process.exit(1);
|
|
454
|
+
}
|
|
455
|
+
if (!confirm) {
|
|
456
|
+
info("Cancelled.");
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
const client = new ApiClient();
|
|
461
|
+
try {
|
|
462
|
+
await client.deleteDatabaseTypeOperation(resolvedAppId, databaseType, name);
|
|
463
|
+
success(`Operation "${name}" deleted.`);
|
|
464
|
+
}
|
|
465
|
+
catch (err) {
|
|
466
|
+
error(err.message);
|
|
467
|
+
process.exit(1);
|
|
468
|
+
}
|
|
469
|
+
});
|
|
170
470
|
}
|
|
171
471
|
//# sourceMappingURL=database-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-types.js","sourceRoot":"","sources":["../../../src/commands/database-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"database-types.js","sourceRoot":"","sources":["../../../src/commands/database-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { checkInitGuards, planInit } from "../lib/init-plan.js";
|
|
|
8
8
|
import { resolveProductionRuntime } from "../lib/init-production-env.js";
|
|
9
9
|
import { checkClientWiring, composeSchemaContent, declaredModelNames, findClientSchema, wireClientToSchema, writeCanonicalSchema, } from "../lib/init-schema.js";
|
|
10
10
|
import { declareSharedProjectConfig } from "../lib/init-xcode.js";
|
|
11
|
+
import { deriveCallbackScheme, linkOptInGuidance, missingUrlTypeGuidance, stampCallbackScheme, } from "../lib/init-ios-links.js";
|
|
11
12
|
import { getExplicitEnvName } from "../lib/env-resolver.js";
|
|
12
13
|
import { ApiClient } from "../lib/api-client.js";
|
|
13
14
|
import { browserLogin } from "../lib/auth-flow.js";
|
|
@@ -1109,6 +1110,13 @@ async function handleInit(projectDirArg, options) {
|
|
|
1109
1110
|
selectedAppName: appName,
|
|
1110
1111
|
productionServerUrl: PRODUCTION_SERVER_URL,
|
|
1111
1112
|
});
|
|
1113
|
+
/**
|
|
1114
|
+
* The URL scheme derived for each Apple client, for the final summary.
|
|
1115
|
+
* `registered` is false when the client's plist had no `PrimitiveAuth` URL
|
|
1116
|
+
* type to stamp it into, so the summary and the opt-in guidance describe a
|
|
1117
|
+
* candidate scheme rather than a registered one.
|
|
1118
|
+
*/
|
|
1119
|
+
const iosCallbackSchemes = [];
|
|
1112
1120
|
for (const client of plan.clients) {
|
|
1113
1121
|
if (client.platform === "ios") {
|
|
1114
1122
|
// ── Apple (SwiftUI) path ────────────────────────────────────────
|
|
@@ -1164,6 +1172,31 @@ async function handleInit(projectDirArg, options) {
|
|
|
1164
1172
|
warn(`Could not configure primitive.json: ${err.message}`);
|
|
1165
1173
|
warn("Run 'bash scripts/resolve-primitive-config.sh' in the project to retry.");
|
|
1166
1174
|
}
|
|
1175
|
+
// Step 5b: Give this client its own URL scheme (#2969).
|
|
1176
|
+
//
|
|
1177
|
+
// The template ships `primitiveapp` registered, which every app
|
|
1178
|
+
// scaffolded from it would otherwise share — iOS then picks arbitrarily
|
|
1179
|
+
// between two of them for an incoming link. The stamped scheme carries
|
|
1180
|
+
// the app id, so no two apps collide.
|
|
1181
|
+
//
|
|
1182
|
+
// Nothing is written to the app's `emailRedirectUris`, here or on the
|
|
1183
|
+
// server: the manager sends no redirect target by default, so this app's
|
|
1184
|
+
// email sign-in works immediately and code-only. The link is the
|
|
1185
|
+
// developer's opt-in, and this run only prints what it takes.
|
|
1186
|
+
const callbackScheme = deriveCallbackScheme(appName, appId, basename(client.dir));
|
|
1187
|
+
const stamped = stampCallbackScheme(client.dir, callbackScheme);
|
|
1188
|
+
iosCallbackSchemes.push({
|
|
1189
|
+
dir: client.dir,
|
|
1190
|
+
scheme: callbackScheme,
|
|
1191
|
+
registered: stamped.outcome !== "not-found",
|
|
1192
|
+
});
|
|
1193
|
+
if (stamped.outcome === "not-found") {
|
|
1194
|
+
for (const line of missingUrlTypeGuidance(callbackScheme))
|
|
1195
|
+
warn(line);
|
|
1196
|
+
}
|
|
1197
|
+
else {
|
|
1198
|
+
success(`Callback URL scheme registered: ${callbackScheme}`);
|
|
1199
|
+
}
|
|
1167
1200
|
// Step 6-7: Skip port selection and pnpm (not applicable to Apple)
|
|
1168
1201
|
// Step 8: Resolve Swift packages
|
|
1169
1202
|
if (!skipInstall) {
|
|
@@ -1467,7 +1500,17 @@ async function handleInit(projectDirArg, options) {
|
|
|
1467
1500
|
if (plan.canonicalSchemaPath) {
|
|
1468
1501
|
keyValue("Model schema", plan.canonicalSchemaPath);
|
|
1469
1502
|
}
|
|
1503
|
+
for (const { scheme, registered } of iosCallbackSchemes) {
|
|
1504
|
+
keyValue("Callback URL scheme", registered ? scheme : `${scheme} (not registered — see the warning above)`);
|
|
1505
|
+
}
|
|
1470
1506
|
divider();
|
|
1507
|
+
// Email sign-in already works for the scaffolded app — code-only, no app
|
|
1508
|
+
// settings — so this is an opt-in, not a step (#2969).
|
|
1509
|
+
for (const { scheme, registered } of iosCallbackSchemes) {
|
|
1510
|
+
for (const line of linkOptInGuidance(scheme, { registered }))
|
|
1511
|
+
info(line);
|
|
1512
|
+
divider();
|
|
1513
|
+
}
|
|
1471
1514
|
if (plan.mode === "add-client") {
|
|
1472
1515
|
info(`No .primitive/ and no .git/ were created inside the new client — this app has one of each, at ${plan.projectRoot}.`);
|
|
1473
1516
|
info(`The new files are uncommitted: review them with \`git status\` in ${plan.projectRoot} and commit when you are happy.`);
|