primitive-admin 1.1.0-alpha.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +523 -109
- package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +372 -21
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/admins.js +136 -30
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/analytics.js +713 -55
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.d.ts +2 -0
- package/dist/src/commands/apps.js +65 -100
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +7 -0
- package/dist/src/commands/auth-sessions.js +144 -0
- package/dist/src/commands/auth-sessions.js.map +1 -0
- package/dist/src/commands/auth.d.ts +2 -0
- package/dist/src/commands/auth.js +238 -108
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.d.ts +2 -0
- package/dist/src/commands/blob-buckets.js +331 -0
- package/dist/src/commands/blob-buckets.js.map +1 -0
- package/dist/src/commands/catalog.d.ts +2 -0
- package/dist/src/commands/catalog.js +63 -48
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.d.ts +2 -0
- package/dist/src/commands/collection-type-configs.js +85 -0
- package/dist/src/commands/collection-type-configs.js.map +1 -0
- package/dist/src/commands/collections.d.ts +2 -0
- package/dist/src/commands/collections.js +1282 -0
- package/dist/src/commands/collections.js.map +1 -0
- package/dist/src/commands/comparisons.d.ts +2 -0
- package/dist/src/commands/comparisons.js +6 -6
- package/dist/src/commands/comparisons.js.map +1 -1
- package/dist/src/commands/config.d.ts +46 -0
- package/dist/src/commands/config.js +465 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/connections.d.ts +2 -0
- package/dist/src/commands/connections.js +99 -0
- package/dist/src/commands/connections.js.map +1 -0
- package/dist/src/commands/cron-triggers.d.ts +2 -0
- package/dist/src/commands/cron-triggers.js +266 -0
- package/dist/src/commands/cron-triggers.js.map +1 -0
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +164 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.d.ts +2 -0
- package/dist/src/commands/database-types.js +471 -0
- package/dist/src/commands/database-types.js.map +1 -0
- package/dist/src/commands/databases.d.ts +65 -0
- package/dist/src/commands/databases.js +1887 -243
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +60 -0
- package/dist/src/commands/documents.js +2888 -22
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.d.ts +2 -0
- package/dist/src/commands/email-templates.js +175 -0
- package/dist/src/commands/email-templates.js.map +1 -0
- package/dist/src/commands/env.d.ts +23 -0
- package/dist/src/commands/env.js +395 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/feature-flags.d.ts +14 -0
- package/dist/src/commands/feature-flags.js +117 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- package/dist/src/commands/functions.d.ts +20 -0
- package/dist/src/commands/functions.js +1630 -0
- package/dist/src/commands/functions.js.map +1 -0
- package/dist/src/commands/group-type-configs.d.ts +2 -0
- package/dist/src/commands/group-type-configs.js +87 -0
- package/dist/src/commands/group-type-configs.js.map +1 -0
- package/dist/src/commands/groups.d.ts +2 -0
- package/dist/src/commands/groups.js +65 -113
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +223 -0
- package/dist/src/commands/guides.js +627 -69
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +37 -0
- package/dist/src/commands/init.js +1693 -208
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.d.ts +2 -0
- package/dist/src/commands/integrations.js +428 -187
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.d.ts +2 -0
- package/dist/src/commands/llm.js +4 -2
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/locks.d.ts +8 -0
- package/dist/src/commands/locks.js +175 -0
- package/dist/src/commands/locks.js.map +1 -0
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +113 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +288 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +2 -0
- package/dist/src/commands/prompts.js +322 -634
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +3 -0
- package/dist/src/commands/rule-sets.js +139 -148
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +30 -0
- package/dist/src/commands/scripts.js +688 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/secrets.d.ts +2 -0
- package/dist/src/commands/secrets.js +109 -0
- package/dist/src/commands/secrets.js.map +1 -0
- package/dist/src/commands/sessions.d.ts +2 -0
- package/dist/src/commands/sessions.js +76 -0
- package/dist/src/commands/sessions.js.map +1 -0
- package/dist/src/commands/skill.d.ts +2 -0
- package/dist/src/commands/skill.js +29 -0
- package/dist/src/commands/skill.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +158 -0
- package/dist/src/commands/sync-app-settings.js +328 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +2670 -0
- package/dist/src/commands/sync.js +17144 -834
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +132 -22
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/users.js +542 -24
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +97 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/waitlist.d.ts +2 -0
- package/dist/src/commands/waitlist.js +12 -11
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +31 -0
- package/dist/src/commands/webhooks.js +633 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/workflows.d.ts +88 -0
- package/dist/src/commands/workflows.js +1568 -742
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/access-rule-display.d.ts +21 -0
- package/dist/src/lib/access-rule-display.js +34 -0
- package/dist/src/lib/access-rule-display.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +2550 -0
- package/dist/src/lib/api-client.js +2503 -160
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
- package/dist/src/lib/app-settings-descriptor.js +583 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/auth-flow.d.ts +8 -0
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/block-selector.d.ts +58 -0
- package/dist/src/lib/block-selector.js +92 -0
- package/dist/src/lib/block-selector.js.map +1 -0
- package/dist/src/lib/canonical-json.d.ts +12 -0
- package/dist/src/lib/canonical-json.js +35 -0
- package/dist/src/lib/canonical-json.js.map +1 -0
- package/dist/src/lib/channel.d.ts +30 -0
- package/dist/src/lib/channel.js +68 -0
- package/dist/src/lib/channel.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +68 -0
- package/dist/src/lib/cli-manifest.js +71 -0
- package/dist/src/lib/cli-manifest.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
- package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
- package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/collection-export.d.ts +184 -0
- package/dist/src/lib/collection-export.js +252 -0
- package/dist/src/lib/collection-export.js.map +1 -0
- package/dist/src/lib/config-json-field.d.ts +28 -0
- package/dist/src/lib/config-json-field.js +56 -0
- package/dist/src/lib/config-json-field.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.d.ts +127 -0
- package/dist/src/lib/config-object-descriptor.js +740 -0
- package/dist/src/lib/config-object-descriptor.js.map +1 -0
- package/dist/src/lib/config-payload.d.ts +92 -0
- package/dist/src/lib/config-payload.js +161 -0
- package/dist/src/lib/config-payload.js.map +1 -0
- package/dist/src/lib/config-surface.d.ts +141 -0
- package/dist/src/lib/config-surface.js +368 -0
- package/dist/src/lib/config-surface.js.map +1 -0
- package/dist/src/lib/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +71 -0
- package/dist/src/lib/config.js +71 -68
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/confirm-prompt.d.ts +83 -0
- package/dist/src/lib/confirm-prompt.js +110 -0
- package/dist/src/lib/confirm-prompt.js.map +1 -0
- package/dist/src/lib/constants.d.ts +11 -0
- package/dist/src/lib/constants.js +12 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/crash-handlers.d.ts +20 -0
- package/dist/src/lib/crash-handlers.js +49 -0
- package/dist/src/lib/crash-handlers.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +104 -0
- package/dist/src/lib/credentials-store.js +336 -0
- package/dist/src/lib/credentials-store.js.map +1 -0
- package/dist/src/lib/csv.d.ts +47 -0
- package/dist/src/lib/csv.js +172 -0
- package/dist/src/lib/csv.js.map +1 -0
- package/dist/src/lib/data-input.d.ts +23 -0
- package/dist/src/lib/data-input.js +50 -0
- package/dist/src/lib/data-input.js.map +1 -0
- package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
- package/dist/src/lib/db-codegen/dbNaming.js +180 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- package/dist/src/lib/deprecation.d.ts +22 -0
- package/dist/src/lib/deprecation.js +43 -0
- package/dist/src/lib/deprecation.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +30 -0
- package/dist/src/lib/document-export-permissions.js +54 -0
- package/dist/src/lib/document-export-permissions.js.map +1 -0
- package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
- package/dist/src/lib/document-ingest-artifact.js +505 -0
- package/dist/src/lib/document-ingest-artifact.js.map +1 -0
- package/dist/src/lib/document-ingest-input.d.ts +51 -0
- package/dist/src/lib/document-ingest-input.js +132 -0
- package/dist/src/lib/document-ingest-input.js.map +1 -0
- package/dist/src/lib/document-ingest-rows.d.ts +137 -0
- package/dist/src/lib/document-ingest-rows.js +181 -0
- package/dist/src/lib/document-ingest-rows.js.map +1 -0
- package/dist/src/lib/document-ingest.d.ts +101 -0
- package/dist/src/lib/document-ingest.js +384 -0
- package/dist/src/lib/document-ingest.js.map +1 -0
- package/dist/src/lib/env-resolver-core.d.ts +258 -0
- package/dist/src/lib/env-resolver-core.js +447 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +99 -0
- package/dist/src/lib/env-resolver.js +153 -0
- package/dist/src/lib/env-resolver.js.map +1 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- package/dist/src/lib/function-bundle.d.ts +147 -0
- package/dist/src/lib/function-bundle.js +341 -0
- package/dist/src/lib/function-bundle.js.map +1 -0
- package/dist/src/lib/function-collect.d.ts +123 -0
- package/dist/src/lib/function-collect.js +610 -0
- package/dist/src/lib/function-collect.js.map +1 -0
- package/dist/src/lib/function-db-types.d.ts +202 -0
- package/dist/src/lib/function-db-types.js +870 -0
- package/dist/src/lib/function-db-types.js.map +1 -0
- package/dist/src/lib/function-document-types.d.ts +144 -0
- package/dist/src/lib/function-document-types.js +370 -0
- package/dist/src/lib/function-document-types.js.map +1 -0
- package/dist/src/lib/function-grants-preflight.d.ts +64 -0
- package/dist/src/lib/function-grants-preflight.js +105 -0
- package/dist/src/lib/function-grants-preflight.js.map +1 -0
- package/dist/src/lib/function-log-lines.d.ts +76 -0
- package/dist/src/lib/function-log-lines.js +160 -0
- package/dist/src/lib/function-log-lines.js.map +1 -0
- package/dist/src/lib/function-log-row.d.ts +29 -0
- package/dist/src/lib/function-log-row.js +73 -0
- package/dist/src/lib/function-log-row.js.map +1 -0
- package/dist/src/lib/function-log-tail.d.ts +132 -0
- package/dist/src/lib/function-log-tail.js +262 -0
- package/dist/src/lib/function-log-tail.js.map +1 -0
- package/dist/src/lib/function-run.d.ts +289 -0
- package/dist/src/lib/function-run.js +389 -0
- package/dist/src/lib/function-run.js.map +1 -0
- package/dist/src/lib/function-schema-codegen.d.ts +143 -0
- package/dist/src/lib/function-schema-codegen.js +420 -0
- package/dist/src/lib/function-schema-codegen.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +459 -0
- package/dist/src/lib/function-sync.js +1258 -0
- package/dist/src/lib/function-sync.js.map +1 -0
- package/dist/src/lib/function-trigger-listing.d.ts +27 -0
- package/dist/src/lib/function-trigger-listing.js +70 -0
- package/dist/src/lib/function-trigger-listing.js.map +1 -0
- package/dist/src/lib/function-typecheck.d.ts +86 -0
- package/dist/src/lib/function-typecheck.js +370 -0
- package/dist/src/lib/function-typecheck.js.map +1 -0
- package/dist/src/lib/function-versions.d.ts +122 -0
- package/dist/src/lib/function-versions.js +182 -0
- package/dist/src/lib/function-versions.js.map +1 -0
- package/dist/src/lib/generated-allowlist.d.ts +28 -0
- package/dist/src/lib/generated-allowlist.js +281 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -0
- package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
- package/dist/src/lib/generated-config-surfaces.js +10569 -0
- package/dist/src/lib/generated-config-surfaces.js.map +1 -0
- package/dist/src/lib/generated-sdk-types.d.ts +12 -0
- package/dist/src/lib/generated-sdk-types.js +13 -0
- package/dist/src/lib/generated-sdk-types.js.map +1 -0
- package/dist/src/lib/generated-template-lint.d.ts +212 -0
- package/dist/src/lib/generated-template-lint.js +624 -0
- package/dist/src/lib/generated-template-lint.js.map +1 -0
- package/dist/src/lib/init-adopt.d.ts +16 -0
- package/dist/src/lib/init-adopt.js +34 -0
- package/dist/src/lib/init-adopt.js.map +1 -0
- package/dist/src/lib/init-assets.d.ts +39 -0
- package/dist/src/lib/init-assets.js +97 -0
- package/dist/src/lib/init-assets.js.map +1 -0
- package/dist/src/lib/init-client-platforms.d.ts +14 -0
- package/dist/src/lib/init-client-platforms.js +71 -0
- package/dist/src/lib/init-client-platforms.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +98 -0
- package/dist/src/lib/init-config.js +186 -0
- package/dist/src/lib/init-config.js.map +1 -0
- package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
- package/dist/src/lib/init-email-redirect-uris.js +46 -0
- package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
- package/dist/src/lib/init-ios-links.d.ts +91 -0
- package/dist/src/lib/init-ios-links.js +219 -0
- package/dist/src/lib/init-ios-links.js.map +1 -0
- package/dist/src/lib/init-plan.d.ts +80 -0
- package/dist/src/lib/init-plan.js +95 -0
- package/dist/src/lib/init-plan.js.map +1 -0
- package/dist/src/lib/init-production-env.d.ts +48 -0
- package/dist/src/lib/init-production-env.js +59 -0
- package/dist/src/lib/init-production-env.js.map +1 -0
- package/dist/src/lib/init-schema.d.ts +74 -0
- package/dist/src/lib/init-schema.js +358 -0
- package/dist/src/lib/init-schema.js.map +1 -0
- package/dist/src/lib/init-xcode.d.ts +34 -0
- package/dist/src/lib/init-xcode.js +138 -0
- package/dist/src/lib/init-xcode.js.map +1 -0
- 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/integration-selector.d.ts +42 -0
- package/dist/src/lib/integration-selector.js +46 -0
- package/dist/src/lib/integration-selector.js.map +1 -0
- package/dist/src/lib/ios-app-id.d.ts +34 -0
- package/dist/src/lib/ios-app-id.js +69 -0
- package/dist/src/lib/ios-app-id.js.map +1 -0
- package/dist/src/lib/list-options.d.ts +68 -0
- package/dist/src/lib/list-options.js +89 -0
- package/dist/src/lib/list-options.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/local-test-cases.d.ts +63 -0
- package/dist/src/lib/local-test-cases.js +136 -0
- package/dist/src/lib/local-test-cases.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +715 -0
- package/dist/src/lib/log-inspection.js +816 -0
- package/dist/src/lib/log-inspection.js.map +1 -0
- package/dist/src/lib/logout-admin-session.d.ts +33 -0
- package/dist/src/lib/logout-admin-session.js +70 -0
- package/dist/src/lib/logout-admin-session.js.map +1 -0
- package/dist/src/lib/migration-nag.d.ts +49 -0
- package/dist/src/lib/migration-nag.js +163 -0
- package/dist/src/lib/migration-nag.js.map +1 -0
- 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/output.d.ts +124 -0
- package/dist/src/lib/output.js +219 -8
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/package-manager.d.ts +140 -0
- package/dist/src/lib/package-manager.js +305 -0
- package/dist/src/lib/package-manager.js.map +1 -0
- package/dist/src/lib/paginate.d.ts +98 -0
- package/dist/src/lib/paginate.js +112 -0
- package/dist/src/lib/paginate.js.map +1 -0
- package/dist/src/lib/platform-owned.d.ts +63 -0
- package/dist/src/lib/platform-owned.js +85 -0
- package/dist/src/lib/platform-owned.js.map +1 -0
- package/dist/src/lib/project-config.d.ts +122 -0
- package/dist/src/lib/project-config.js +244 -0
- package/dist/src/lib/project-config.js.map +1 -0
- package/dist/src/lib/prompt-cost-format.d.ts +11 -0
- package/dist/src/lib/prompt-cost-format.js +41 -0
- package/dist/src/lib/prompt-cost-format.js.map +1 -0
- package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
- package/dist/src/lib/prompt-schema-codegen.js +462 -0
- package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/record-filter.d.ts +18 -0
- package/dist/src/lib/record-filter.js +55 -0
- package/dist/src/lib/record-filter.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
- package/dist/src/lib/refresh-admin-credentials.js +123 -0
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
- package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
- package/dist/src/lib/resolve-init-dev-port.js +55 -0
- package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
- package/dist/src/lib/resolve-init-server.d.ts +64 -0
- package/dist/src/lib/resolve-init-server.js +77 -0
- package/dist/src/lib/resolve-init-server.js.map +1 -0
- package/dist/src/lib/resolve-owner.d.ts +19 -0
- package/dist/src/lib/resolve-owner.js +20 -0
- package/dist/src/lib/resolve-owner.js.map +1 -0
- package/dist/src/lib/resolve-platform.d.ts +74 -0
- package/dist/src/lib/resolve-platform.js +105 -0
- package/dist/src/lib/resolve-platform.js.map +1 -0
- package/dist/src/lib/run-status.d.ts +19 -0
- package/dist/src/lib/run-status.generated.d.ts +39 -0
- package/dist/src/lib/run-status.generated.js +66 -0
- package/dist/src/lib/run-status.generated.js.map +1 -0
- package/dist/src/lib/run-status.js +19 -0
- package/dist/src/lib/run-status.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/server-url.d.ts +22 -0
- package/dist/src/lib/server-url.js +33 -0
- package/dist/src/lib/server-url.js.map +1 -0
- package/dist/src/lib/signing-secret-status.d.ts +81 -0
- package/dist/src/lib/signing-secret-status.js +116 -0
- package/dist/src/lib/signing-secret-status.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +71 -0
- package/dist/src/lib/skill-installer.js +441 -0
- package/dist/src/lib/skill-installer.js.map +1 -0
- package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
- package/dist/src/lib/snapshot-audit-source.js +58 -0
- package/dist/src/lib/snapshot-audit-source.js.map +1 -0
- package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
- package/dist/src/lib/snapshot-audit-store.js +196 -0
- package/dist/src/lib/snapshot-audit-store.js.map +1 -0
- package/dist/src/lib/snapshot-audit.d.ts +207 -0
- package/dist/src/lib/snapshot-audit.js +431 -0
- package/dist/src/lib/snapshot-audit.js.map +1 -0
- package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
- package/dist/src/lib/snapshot-build-rows.js +87 -0
- package/dist/src/lib/snapshot-build-rows.js.map +1 -0
- package/dist/src/lib/snapshot-build.d.ts +50 -0
- package/dist/src/lib/snapshot-build.js +111 -0
- package/dist/src/lib/snapshot-build.js.map +1 -0
- package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
- package/dist/src/lib/snapshot-manifest-layout.js +70 -0
- package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +98 -0
- package/dist/src/lib/snapshots.js +294 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- package/dist/src/lib/step-run-table.d.ts +43 -0
- package/dist/src/lib/step-run-table.js +129 -0
- package/dist/src/lib/step-run-table.js.map +1 -0
- package/dist/src/lib/storage-pending-retry.d.ts +26 -0
- package/dist/src/lib/storage-pending-retry.js +42 -0
- package/dist/src/lib/storage-pending-retry.js.map +1 -0
- package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
- package/dist/src/lib/swift-codegen/banners.js +25 -0
- package/dist/src/lib/swift-codegen/banners.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
- package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
- package/dist/src/lib/swift-codegen/generator.js +457 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
- package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
- package/dist/src/lib/sync-dir-selector.d.ts +21 -0
- package/dist/src/lib/sync-dir-selector.js +30 -0
- package/dist/src/lib/sync-dir-selector.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +128 -0
- package/dist/src/lib/sync-paths.js +195 -0
- package/dist/src/lib/sync-paths.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +563 -0
- package/dist/src/lib/sync-resource-types.js +1073 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/sync-selectors.d.ts +138 -0
- package/dist/src/lib/sync-selectors.js +289 -0
- package/dist/src/lib/sync-selectors.js.map +1 -0
- package/dist/src/lib/template.d.ts +170 -0
- package/dist/src/lib/template.js +484 -68
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/test-case-file-names.d.ts +40 -0
- package/dist/src/lib/test-case-file-names.js +91 -0
- package/dist/src/lib/test-case-file-names.js.map +1 -0
- package/dist/src/lib/test-case-keys.d.ts +29 -0
- package/dist/src/lib/test-case-keys.js +55 -0
- package/dist/src/lib/test-case-keys.js.map +1 -0
- package/dist/src/lib/test-case-variables.d.ts +29 -0
- package/dist/src/lib/test-case-variables.js +71 -0
- package/dist/src/lib/test-case-variables.js.map +1 -0
- package/dist/src/lib/token-inject.d.ts +56 -0
- package/dist/src/lib/token-inject.js +204 -0
- package/dist/src/lib/token-inject.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +123 -0
- package/dist/src/lib/toml-database-config.js +544 -0
- package/dist/src/lib/toml-database-config.js.map +1 -0
- package/dist/src/lib/toml-metadata-config.d.ts +151 -0
- package/dist/src/lib/toml-metadata-config.js +476 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +129 -0
- package/dist/src/lib/toml-params-validator.js +298 -0
- package/dist/src/lib/toml-params-validator.js.map +1 -0
- package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
- package/dist/src/lib/toml-scalar-edit.js +283 -0
- package/dist/src/lib/toml-scalar-edit.js.map +1 -0
- package/dist/src/lib/user-selector.d.ts +24 -0
- package/dist/src/lib/user-selector.js +33 -0
- package/dist/src/lib/user-selector.js.map +1 -0
- package/dist/src/lib/version-check.d.ts +35 -0
- package/dist/src/lib/version-check.js +241 -0
- package/dist/src/lib/version-check.js.map +1 -0
- package/dist/src/lib/watch.d.ts +121 -0
- package/dist/src/lib/watch.js +169 -0
- package/dist/src/lib/watch.js.map +1 -0
- package/dist/src/lib/web-url.d.ts +40 -0
- package/dist/src/lib/web-url.js +76 -0
- package/dist/src/lib/web-url.js.map +1 -0
- package/dist/src/lib/webhook-deliver.d.ts +209 -0
- package/dist/src/lib/webhook-deliver.js +519 -0
- package/dist/src/lib/webhook-deliver.js.map +1 -0
- package/dist/src/lib/workflow-apply.d.ts +110 -0
- package/dist/src/lib/workflow-apply.js +164 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
- package/dist/src/lib/workflow-codegen/generator.js +361 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-config-apply.d.ts +70 -0
- package/dist/src/lib/workflow-config-apply.js +137 -0
- package/dist/src/lib/workflow-config-apply.js.map +1 -0
- package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
- package/dist/src/lib/workflow-config-sidecar.js +96 -0
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
- package/dist/src/lib/workflow-defaults.d.ts +29 -0
- package/dist/src/lib/workflow-defaults.js +41 -0
- package/dist/src/lib/workflow-defaults.js.map +1 -0
- package/dist/src/lib/workflow-fragments.d.ts +64 -0
- package/dist/src/lib/workflow-fragments.js +342 -0
- package/dist/src/lib/workflow-fragments.js.map +1 -0
- package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
- package/dist/src/lib/workflow-include-preserve.js +286 -0
- package/dist/src/lib/workflow-include-preserve.js.map +1 -0
- package/dist/src/lib/workflow-payload.d.ts +98 -0
- package/dist/src/lib/workflow-payload.js +178 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
- package/dist/src/lib/workflow-toml-validator.js +770 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- package/dist/src/lib/workflow-usage.d.ts +196 -0
- package/dist/src/lib/workflow-usage.js +310 -0
- package/dist/src/lib/workflow-usage.js.map +1 -0
- package/dist/src/types/index.d.ts +591 -0
- package/dist/src/validators.d.ts +65 -0
- package/dist/src/validators.js +64 -0
- package/dist/src/validators.js.map +1 -0
- package/package.json +34 -9
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { resolveAppId } from "../lib/config.js";
|
|
3
3
|
import { success, error, info, keyValue, formatTable, formatId, formatDate, json, } from "../lib/output.js";
|
|
4
|
+
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
5
|
+
import { warnDeprecated } from "../lib/deprecation.js";
|
|
6
|
+
import { pageCursorOption, pageLimitOption, parsePageLimit, printEmptyPage, printPageHint, } from "../lib/list-options.js";
|
|
7
|
+
import { normalizeCliListEnvelope, wholeListEnvelope, } from "../lib/paginate.js";
|
|
4
8
|
export function registerUsersCommands(program) {
|
|
5
9
|
const users = program
|
|
6
10
|
.command("users")
|
|
@@ -8,27 +12,51 @@ export function registerUsersCommands(program) {
|
|
|
8
12
|
.addHelpText("after", `
|
|
9
13
|
Examples:
|
|
10
14
|
$ primitive users list
|
|
15
|
+
$ primitive users create user@example.com --role admin
|
|
11
16
|
$ primitive users invite user@example.com --role admin
|
|
12
17
|
$ primitive users set-role 01HXY... member
|
|
18
|
+
$ primitive users mint-jwt <user-id>
|
|
13
19
|
`);
|
|
14
20
|
// List users
|
|
15
21
|
users
|
|
16
22
|
.command("list")
|
|
17
|
-
.description("List users in an app")
|
|
23
|
+
.description("List users in an app, optionally filtered by --search")
|
|
18
24
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
19
25
|
.option("--app <app-id>", "App ID")
|
|
26
|
+
.option("--search <query>", "Filter users. ULID -> userId lookup; contains '@' -> email lookup; otherwise substring name search.")
|
|
27
|
+
.addOption(pageLimitOption())
|
|
28
|
+
.addOption(pageCursorOption())
|
|
20
29
|
.option("--json", "Output as JSON")
|
|
21
30
|
.action(async (appId, options) => {
|
|
31
|
+
const limit = parsePageLimit(options.limit);
|
|
22
32
|
const resolvedAppId = resolveAppId(appId, options);
|
|
23
33
|
const client = new ApiClient();
|
|
34
|
+
const params = {};
|
|
35
|
+
if (limit !== undefined)
|
|
36
|
+
params.limit = limit;
|
|
37
|
+
if (options.cursor)
|
|
38
|
+
params.cursor = options.cursor;
|
|
39
|
+
if (options.search) {
|
|
40
|
+
const q = String(options.search).trim();
|
|
41
|
+
// ULID is exactly 26 chars from Crockford's base32 alphabet (excludes I,L,O,U).
|
|
42
|
+
// Match case-insensitively because users paste IDs from various sources.
|
|
43
|
+
const isUlid = /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(q);
|
|
44
|
+
if (isUlid)
|
|
45
|
+
params.userId = q;
|
|
46
|
+
else if (q.includes("@"))
|
|
47
|
+
params.email = q;
|
|
48
|
+
else
|
|
49
|
+
params.name = q;
|
|
50
|
+
}
|
|
24
51
|
try {
|
|
25
|
-
const
|
|
52
|
+
const page = normalizeCliListEnvelope(await client.listUsers(resolvedAppId, params));
|
|
53
|
+
const usersList = page.items;
|
|
26
54
|
if (options.json) {
|
|
27
|
-
json(
|
|
55
|
+
json(page);
|
|
28
56
|
return;
|
|
29
57
|
}
|
|
30
58
|
if (!usersList || usersList.length === 0) {
|
|
31
|
-
|
|
59
|
+
printEmptyPage(page, "users");
|
|
32
60
|
return;
|
|
33
61
|
}
|
|
34
62
|
console.log(formatTable(usersList, [
|
|
@@ -36,8 +64,96 @@ Examples:
|
|
|
36
64
|
{ header: "EMAIL", key: "email" },
|
|
37
65
|
{ header: "NAME", key: "name" },
|
|
38
66
|
{ header: "ROLE", key: "role" },
|
|
67
|
+
// #2803 — a disabled user rendered exactly like an active one, so
|
|
68
|
+
// the list said nothing about the state the console could put them
|
|
69
|
+
// in. `disabled` reads plainly next to the role.
|
|
70
|
+
{
|
|
71
|
+
header: "STATUS",
|
|
72
|
+
key: "status",
|
|
73
|
+
format: (value) => String(value || "active") === "disabled" ? "disabled" : "active",
|
|
74
|
+
},
|
|
39
75
|
{ header: "ADDED", key: "addedAt", format: formatDate },
|
|
40
76
|
]));
|
|
77
|
+
printPageHint(page);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
error(err.message);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Create user (add by email)
|
|
85
|
+
users
|
|
86
|
+
.command("create")
|
|
87
|
+
.description("Create a user in an app (or add an existing user by email)")
|
|
88
|
+
.argument("<email>", "Email address")
|
|
89
|
+
.option("--role <role>", "Role: admin or member", "member")
|
|
90
|
+
.option("--app <app-id>", "App ID")
|
|
91
|
+
.option("--json", "Output as JSON")
|
|
92
|
+
.action(async (email, options) => {
|
|
93
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
94
|
+
const client = new ApiClient();
|
|
95
|
+
try {
|
|
96
|
+
const result = await client.addUserByEmail(resolvedAppId, {
|
|
97
|
+
email,
|
|
98
|
+
role: options.role,
|
|
99
|
+
});
|
|
100
|
+
if (options.json) {
|
|
101
|
+
json(result);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
success(result.message || `User ${email} added.`);
|
|
105
|
+
if (result.userId)
|
|
106
|
+
keyValue("User ID", result.userId);
|
|
107
|
+
if (result.email)
|
|
108
|
+
keyValue("Email", result.email);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
error(err.message);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// Mint test JWT
|
|
116
|
+
users
|
|
117
|
+
.command("mint-jwt")
|
|
118
|
+
.description("Mint a test JWT for a user (dev/test environments only)")
|
|
119
|
+
.argument("<user-id>", "User ID")
|
|
120
|
+
.option("--role <role>", "Role override for the JWT")
|
|
121
|
+
.option("--app <app-id>", "App ID")
|
|
122
|
+
.option("--json", "Output as JSON")
|
|
123
|
+
.action(async (userId, options) => {
|
|
124
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
125
|
+
const client = new ApiClient();
|
|
126
|
+
try {
|
|
127
|
+
const result = await client.mintTestJwt(resolvedAppId, userId, options.role);
|
|
128
|
+
if (options.json) {
|
|
129
|
+
json(result);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
success("JWT minted.");
|
|
133
|
+
console.log(result.token);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
error(err.message);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// Rebuild User._searchText (super-admin only)
|
|
141
|
+
users
|
|
142
|
+
.command("rebuild-search-text")
|
|
143
|
+
.description("Re-save every user in an app to repopulate User._searchText")
|
|
144
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
145
|
+
.option("--app <app-id>", "App ID")
|
|
146
|
+
.option("--json", "Output as JSON")
|
|
147
|
+
.action(async (appId, options) => {
|
|
148
|
+
const resolvedAppId = resolveAppId(appId, options);
|
|
149
|
+
const client = new ApiClient();
|
|
150
|
+
try {
|
|
151
|
+
const result = await client.rebuildUserSearchText(resolvedAppId);
|
|
152
|
+
if (options.json) {
|
|
153
|
+
json(result);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
success(`Reindexed ${result.count} user(s) in ${resolvedAppId}.`);
|
|
41
157
|
}
|
|
42
158
|
catch (err) {
|
|
43
159
|
error(err.message);
|
|
@@ -54,6 +170,7 @@ Examples:
|
|
|
54
170
|
.option("--role <role>", "Role: admin or member", "member")
|
|
55
171
|
.option("--send-email", "Send invitation email")
|
|
56
172
|
.option("--expires-days <days>", "Days until invitation expires", "7")
|
|
173
|
+
.option("--note <note>", "Personal note to include in the invitation email")
|
|
57
174
|
.option("--json", "Output as JSON")
|
|
58
175
|
.action(async (appIdOrEmail, emailOrUndefined, options) => {
|
|
59
176
|
// Handle argument flexibility
|
|
@@ -79,11 +196,17 @@ Examples:
|
|
|
79
196
|
}
|
|
80
197
|
const client = new ApiClient();
|
|
81
198
|
try {
|
|
199
|
+
// When inviting as admin, create the console admin first — the backend
|
|
200
|
+
// enforces the 3-admin limit (single source of truth)
|
|
201
|
+
if (options.role === "admin") {
|
|
202
|
+
await client.addAppAdmin(resolvedAppId, { adminEmail: email });
|
|
203
|
+
}
|
|
82
204
|
const result = await client.createInvitation(resolvedAppId, {
|
|
83
205
|
email,
|
|
84
206
|
role: options.role,
|
|
85
207
|
expiresInDays: parseInt(options.expiresDays),
|
|
86
208
|
sendEmail: options.sendEmail || false,
|
|
209
|
+
...(options.note ? { note: options.note } : {}),
|
|
87
210
|
});
|
|
88
211
|
if (options.json) {
|
|
89
212
|
json(result);
|
|
@@ -101,12 +224,13 @@ Examples:
|
|
|
101
224
|
// Remove user
|
|
102
225
|
users
|
|
103
226
|
.command("remove")
|
|
104
|
-
.description("Remove a user
|
|
227
|
+
.description("(deprecated: use users disable) Remove a user's membership of an app. To block sign-in without removing them, use `users disable`.")
|
|
105
228
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
106
229
|
.argument("<user-id>", "User ID to remove")
|
|
107
230
|
.option("--app <app-id>", "App ID")
|
|
108
231
|
.option("-y, --yes", "Skip confirmation prompt")
|
|
109
232
|
.action(async (appIdOrUserId, userIdOrUndefined, options) => {
|
|
233
|
+
warnDeprecated("primitive users remove", "`primitive users disable`", 518);
|
|
110
234
|
// Handle argument flexibility
|
|
111
235
|
let resolvedAppId;
|
|
112
236
|
let userId;
|
|
@@ -123,15 +247,14 @@ Examples:
|
|
|
123
247
|
process.exit(1);
|
|
124
248
|
}
|
|
125
249
|
if (!options.yes) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
]);
|
|
250
|
+
let confirm;
|
|
251
|
+
try {
|
|
252
|
+
confirm = await confirmPrompt(`Remove user ${userId} from app?`);
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
error(err.message);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
135
258
|
if (!confirm) {
|
|
136
259
|
info("Cancelled.");
|
|
137
260
|
return;
|
|
@@ -147,6 +270,89 @@ Examples:
|
|
|
147
270
|
process.exit(1);
|
|
148
271
|
}
|
|
149
272
|
});
|
|
273
|
+
// #2803 — an app user could be disabled from the console but not from the
|
|
274
|
+
// CLI, and the console could not undo it. Both routes already existed; the
|
|
275
|
+
// operational control just was not reachable. Deliberately distinct from
|
|
276
|
+
// `users remove`, which detaches the membership: disabling blocks the
|
|
277
|
+
// person's auth in this app and is reversible.
|
|
278
|
+
users
|
|
279
|
+
.command("disable")
|
|
280
|
+
.description("Block a user from signing in to an app. Revokes their sessions and API tokens; reversible with `users enable`.")
|
|
281
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
282
|
+
.argument("<user-id>", "User ID to disable")
|
|
283
|
+
.option("--app <app-id>", "App ID")
|
|
284
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
285
|
+
.action(async (appIdOrUserId, userIdOrUndefined, options) => {
|
|
286
|
+
let resolvedAppId;
|
|
287
|
+
let userId;
|
|
288
|
+
if (userIdOrUndefined) {
|
|
289
|
+
resolvedAppId = resolveAppId(appIdOrUserId, options);
|
|
290
|
+
userId = userIdOrUndefined;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
294
|
+
userId = appIdOrUserId;
|
|
295
|
+
}
|
|
296
|
+
if (!userId) {
|
|
297
|
+
error("User ID is required.");
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
if (!options.yes) {
|
|
301
|
+
let confirm;
|
|
302
|
+
try {
|
|
303
|
+
confirm = await confirmPrompt(`Disable user ${userId}? They will be signed out and unable to sign in.`);
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
error(err.message);
|
|
307
|
+
process.exit(1);
|
|
308
|
+
}
|
|
309
|
+
if (!confirm) {
|
|
310
|
+
info("Cancelled.");
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const client = new ApiClient();
|
|
315
|
+
try {
|
|
316
|
+
await client.setUserAvailability(resolvedAppId, userId, "disable");
|
|
317
|
+
success(`User ${userId} disabled.`);
|
|
318
|
+
info("Their membership is unchanged — `primitive users enable` restores access.");
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
error(err.message);
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
users
|
|
326
|
+
.command("enable")
|
|
327
|
+
.description("Restore a disabled user's access to an app.")
|
|
328
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
329
|
+
.argument("<user-id>", "User ID to enable")
|
|
330
|
+
.option("--app <app-id>", "App ID")
|
|
331
|
+
.action(async (appIdOrUserId, userIdOrUndefined, options) => {
|
|
332
|
+
let resolvedAppId;
|
|
333
|
+
let userId;
|
|
334
|
+
if (userIdOrUndefined) {
|
|
335
|
+
resolvedAppId = resolveAppId(appIdOrUserId, options);
|
|
336
|
+
userId = userIdOrUndefined;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
340
|
+
userId = appIdOrUserId;
|
|
341
|
+
}
|
|
342
|
+
if (!userId) {
|
|
343
|
+
error("User ID is required.");
|
|
344
|
+
process.exit(1);
|
|
345
|
+
}
|
|
346
|
+
const client = new ApiClient();
|
|
347
|
+
try {
|
|
348
|
+
await client.setUserAvailability(resolvedAppId, userId, "enable");
|
|
349
|
+
success(`User ${userId} enabled.`);
|
|
350
|
+
}
|
|
351
|
+
catch (err) {
|
|
352
|
+
error(err.message);
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
150
356
|
// Set user role
|
|
151
357
|
users
|
|
152
358
|
.command("set-role")
|
|
@@ -218,15 +424,14 @@ Examples:
|
|
|
218
424
|
process.exit(1);
|
|
219
425
|
}
|
|
220
426
|
if (!options.yes) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
{
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
]);
|
|
427
|
+
let confirm;
|
|
428
|
+
try {
|
|
429
|
+
confirm = await confirmPrompt(`Transfer ownership of app to ${target}? This cannot be undone.`);
|
|
430
|
+
}
|
|
431
|
+
catch (err) {
|
|
432
|
+
error(err.message);
|
|
433
|
+
process.exit(1);
|
|
434
|
+
}
|
|
230
435
|
if (!confirm) {
|
|
231
436
|
info("Cancelled.");
|
|
232
437
|
return;
|
|
@@ -260,7 +465,8 @@ Examples:
|
|
|
260
465
|
const resolvedAppId = resolveAppId(appId, options);
|
|
261
466
|
const client = new ApiClient();
|
|
262
467
|
try {
|
|
263
|
-
const
|
|
468
|
+
const result = await client.listInvitations(resolvedAppId);
|
|
469
|
+
const invitations = result.items;
|
|
264
470
|
if (options.json) {
|
|
265
471
|
json(invitations);
|
|
266
472
|
return;
|
|
@@ -281,5 +487,317 @@ Examples:
|
|
|
281
487
|
process.exit(1);
|
|
282
488
|
}
|
|
283
489
|
});
|
|
490
|
+
// --- Console admins subcommands ---
|
|
491
|
+
const admins = users
|
|
492
|
+
.command("admins")
|
|
493
|
+
.description("Manage console admins for an app");
|
|
494
|
+
// List console admins
|
|
495
|
+
admins
|
|
496
|
+
.command("list")
|
|
497
|
+
.description("List console admins for an app")
|
|
498
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
499
|
+
.option("--app <app-id>", "App ID")
|
|
500
|
+
.option("--json", "Output as JSON")
|
|
501
|
+
.action(async (appId, options) => {
|
|
502
|
+
const resolvedAppId = resolveAppId(appId, options);
|
|
503
|
+
const client = new ApiClient();
|
|
504
|
+
try {
|
|
505
|
+
const adminsList = await client.listAppAdmins(resolvedAppId);
|
|
506
|
+
if (options.json) {
|
|
507
|
+
json(wholeListEnvelope(adminsList));
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
if (!adminsList || adminsList.length === 0) {
|
|
511
|
+
info("No console admins found.");
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
console.log(formatTable(adminsList, [
|
|
515
|
+
{ header: "ADMIN ID", key: "adminId", format: formatId },
|
|
516
|
+
{ header: "EMAIL", key: "email" },
|
|
517
|
+
{ header: "NAME", key: "name" },
|
|
518
|
+
{ header: "ROLE", key: "role" },
|
|
519
|
+
{ header: "ASSIGNED", key: "assignedAt", format: formatDate },
|
|
520
|
+
]));
|
|
521
|
+
}
|
|
522
|
+
catch (err) {
|
|
523
|
+
error(err.message);
|
|
524
|
+
process.exit(1);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
// Add console admin
|
|
528
|
+
admins
|
|
529
|
+
.command("add")
|
|
530
|
+
.description("Add a console admin to an app (creates invitation if admin account doesn't exist)")
|
|
531
|
+
.argument("[app-id-or-email]", "App ID or admin email")
|
|
532
|
+
.argument("[email]", "Admin email address (if first arg is app ID)")
|
|
533
|
+
.option("--app <app-id>", "App ID")
|
|
534
|
+
.option("--json", "Output as JSON")
|
|
535
|
+
.action(async (appIdOrEmail, emailOrUndefined, options) => {
|
|
536
|
+
let resolvedAppId;
|
|
537
|
+
let email;
|
|
538
|
+
if (emailOrUndefined && !emailOrUndefined.startsWith("-")) {
|
|
539
|
+
resolvedAppId = resolveAppId(appIdOrEmail, options);
|
|
540
|
+
email = emailOrUndefined;
|
|
541
|
+
}
|
|
542
|
+
else if (appIdOrEmail?.includes("@")) {
|
|
543
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
544
|
+
email = appIdOrEmail;
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
resolvedAppId = resolveAppId(appIdOrEmail, options);
|
|
548
|
+
email = emailOrUndefined;
|
|
549
|
+
}
|
|
550
|
+
if (!email) {
|
|
551
|
+
error("Email is required.");
|
|
552
|
+
process.exit(1);
|
|
553
|
+
}
|
|
554
|
+
const client = new ApiClient();
|
|
555
|
+
try {
|
|
556
|
+
const result = await client.addAppAdmin(resolvedAppId, {
|
|
557
|
+
adminEmail: email,
|
|
558
|
+
});
|
|
559
|
+
// Also create an app-level invitation with role "admin"
|
|
560
|
+
try {
|
|
561
|
+
await client.createInvitation(resolvedAppId, {
|
|
562
|
+
email,
|
|
563
|
+
role: "admin",
|
|
564
|
+
expiresInDays: 7,
|
|
565
|
+
sendEmail: false,
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
catch {
|
|
569
|
+
// Non-fatal: console admin was created, app invitation may already exist
|
|
570
|
+
}
|
|
571
|
+
if (options.json) {
|
|
572
|
+
json(result);
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
if (result.status === "invited") {
|
|
576
|
+
success(`Invitation sent to ${email}`);
|
|
577
|
+
if (result.invitation) {
|
|
578
|
+
keyValue("Invitation ID", result.invitation.invitationId);
|
|
579
|
+
if (result.invitation.expiresAt) {
|
|
580
|
+
keyValue("Expires", formatDate(result.invitation.expiresAt));
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
else {
|
|
585
|
+
success(result.message || `Admin ${email} added.`);
|
|
586
|
+
if (result.admin) {
|
|
587
|
+
keyValue("Admin ID", result.admin.adminId);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
catch (err) {
|
|
592
|
+
error(err.message);
|
|
593
|
+
process.exit(1);
|
|
594
|
+
}
|
|
595
|
+
});
|
|
596
|
+
// Remove console admin
|
|
597
|
+
admins
|
|
598
|
+
.command("remove")
|
|
599
|
+
.description("Remove a console admin from an app")
|
|
600
|
+
.argument("[app-id-or-admin-id]", "App ID or admin ID")
|
|
601
|
+
.argument("[admin-id]", "Admin ID (if first arg is app ID)")
|
|
602
|
+
.option("--app <app-id>", "App ID")
|
|
603
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
604
|
+
.action(async (appIdOrAdminId, adminIdOrUndefined, options) => {
|
|
605
|
+
let resolvedAppId;
|
|
606
|
+
let adminId;
|
|
607
|
+
if (adminIdOrUndefined && !adminIdOrUndefined.startsWith("-")) {
|
|
608
|
+
resolvedAppId = resolveAppId(appIdOrAdminId, options);
|
|
609
|
+
adminId = adminIdOrUndefined;
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
613
|
+
adminId = appIdOrAdminId;
|
|
614
|
+
}
|
|
615
|
+
if (!adminId) {
|
|
616
|
+
error("Admin ID is required.");
|
|
617
|
+
process.exit(1);
|
|
618
|
+
}
|
|
619
|
+
if (!options.yes) {
|
|
620
|
+
let confirm;
|
|
621
|
+
try {
|
|
622
|
+
confirm = await confirmPrompt(`Remove admin ${adminId} from app?`);
|
|
623
|
+
}
|
|
624
|
+
catch (err) {
|
|
625
|
+
error(err.message);
|
|
626
|
+
process.exit(1);
|
|
627
|
+
}
|
|
628
|
+
if (!confirm) {
|
|
629
|
+
info("Cancelled.");
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
const client = new ApiClient();
|
|
634
|
+
try {
|
|
635
|
+
await client.removeAppAdmin(resolvedAppId, adminId);
|
|
636
|
+
success(`Admin ${adminId} removed.`);
|
|
637
|
+
}
|
|
638
|
+
catch (err) {
|
|
639
|
+
error(err.message);
|
|
640
|
+
process.exit(1);
|
|
641
|
+
}
|
|
642
|
+
});
|
|
643
|
+
// Transfer ownership
|
|
644
|
+
admins
|
|
645
|
+
.command("transfer-owner")
|
|
646
|
+
.description("Transfer app ownership to another admin")
|
|
647
|
+
.argument("[app-id-or-target]", "App ID or new owner's email/admin ID")
|
|
648
|
+
.argument("[email-or-admin-id]", "New owner's email or admin ID (if first arg is app ID)")
|
|
649
|
+
.option("--app <app-id>", "App ID")
|
|
650
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
651
|
+
.action(async (appIdOrTarget, targetOrUndefined, options) => {
|
|
652
|
+
let resolvedAppId;
|
|
653
|
+
let target;
|
|
654
|
+
if (targetOrUndefined && !targetOrUndefined.startsWith("-")) {
|
|
655
|
+
resolvedAppId = resolveAppId(appIdOrTarget, options);
|
|
656
|
+
target = targetOrUndefined;
|
|
657
|
+
}
|
|
658
|
+
else {
|
|
659
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
660
|
+
target = appIdOrTarget;
|
|
661
|
+
}
|
|
662
|
+
if (!target) {
|
|
663
|
+
error("New owner email or admin ID is required.");
|
|
664
|
+
process.exit(1);
|
|
665
|
+
}
|
|
666
|
+
if (!options.yes) {
|
|
667
|
+
let confirm;
|
|
668
|
+
try {
|
|
669
|
+
confirm = await confirmPrompt(`Transfer ownership of app to ${target}? This cannot be undone.`);
|
|
670
|
+
}
|
|
671
|
+
catch (err) {
|
|
672
|
+
error(err.message);
|
|
673
|
+
process.exit(1);
|
|
674
|
+
}
|
|
675
|
+
if (!confirm) {
|
|
676
|
+
info("Cancelled.");
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
const client = new ApiClient();
|
|
681
|
+
try {
|
|
682
|
+
if (target.includes("@")) {
|
|
683
|
+
await client.transferOwnership(resolvedAppId, target);
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
await client.transferAdminOwnership(resolvedAppId, target);
|
|
687
|
+
}
|
|
688
|
+
success(`Ownership transferred to ${target}`);
|
|
689
|
+
}
|
|
690
|
+
catch (err) {
|
|
691
|
+
error(err.message);
|
|
692
|
+
process.exit(1);
|
|
693
|
+
}
|
|
694
|
+
});
|
|
695
|
+
// --- Admin invitations subcommands ---
|
|
696
|
+
const adminInvitations = users
|
|
697
|
+
.command("admin-invitations")
|
|
698
|
+
.description("Manage console admin invitations for an app");
|
|
699
|
+
// List admin invitations
|
|
700
|
+
adminInvitations
|
|
701
|
+
.command("list")
|
|
702
|
+
.description("List pending console admin invitations")
|
|
703
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
704
|
+
.option("--app <app-id>", "App ID")
|
|
705
|
+
.option("--json", "Output as JSON")
|
|
706
|
+
.action(async (appId, options) => {
|
|
707
|
+
const resolvedAppId = resolveAppId(appId, options);
|
|
708
|
+
const client = new ApiClient();
|
|
709
|
+
try {
|
|
710
|
+
const invitationsList = await client.listAppAdminInvitations(resolvedAppId);
|
|
711
|
+
if (options.json) {
|
|
712
|
+
json(wholeListEnvelope(invitationsList));
|
|
713
|
+
return;
|
|
714
|
+
}
|
|
715
|
+
if (!invitationsList || invitationsList.length === 0) {
|
|
716
|
+
info("No pending admin invitations.");
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
console.log(formatTable(invitationsList, [
|
|
720
|
+
{ header: "ID", key: "invitationId", format: formatId },
|
|
721
|
+
{ header: "EMAIL", key: "email" },
|
|
722
|
+
{ header: "ROLE", key: "role" },
|
|
723
|
+
{ header: "INVITED", key: "invitedAt", format: formatDate },
|
|
724
|
+
{ header: "EXPIRES", key: "expiresAt", format: formatDate },
|
|
725
|
+
]));
|
|
726
|
+
}
|
|
727
|
+
catch (err) {
|
|
728
|
+
error(err.message);
|
|
729
|
+
process.exit(1);
|
|
730
|
+
}
|
|
731
|
+
});
|
|
732
|
+
// Delete admin invitation
|
|
733
|
+
adminInvitations
|
|
734
|
+
.command("delete")
|
|
735
|
+
.description("Delete a pending console admin invitation")
|
|
736
|
+
.argument("[app-id-or-inv-id]", "App ID or invitation ID")
|
|
737
|
+
.argument("[invitation-id]", "Invitation ID (if first arg is app ID)")
|
|
738
|
+
.option("--app <app-id>", "App ID")
|
|
739
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
740
|
+
.action(async (appIdOrInvId, invIdOrUndefined, options) => {
|
|
741
|
+
let resolvedAppId;
|
|
742
|
+
let invitationId;
|
|
743
|
+
if (invIdOrUndefined && !invIdOrUndefined.startsWith("-")) {
|
|
744
|
+
resolvedAppId = resolveAppId(appIdOrInvId, options);
|
|
745
|
+
invitationId = invIdOrUndefined;
|
|
746
|
+
}
|
|
747
|
+
else {
|
|
748
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
749
|
+
invitationId = appIdOrInvId;
|
|
750
|
+
}
|
|
751
|
+
if (!invitationId) {
|
|
752
|
+
error("Invitation ID is required.");
|
|
753
|
+
process.exit(1);
|
|
754
|
+
}
|
|
755
|
+
if (!options.yes) {
|
|
756
|
+
let confirm;
|
|
757
|
+
try {
|
|
758
|
+
confirm = await confirmPrompt(`Delete admin invitation ${invitationId}?`);
|
|
759
|
+
}
|
|
760
|
+
catch (err) {
|
|
761
|
+
error(err.message);
|
|
762
|
+
process.exit(1);
|
|
763
|
+
}
|
|
764
|
+
if (!confirm) {
|
|
765
|
+
info("Cancelled.");
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
const client = new ApiClient();
|
|
770
|
+
try {
|
|
771
|
+
// Look up the admin invitation's email before deleting, so we can cross-delete
|
|
772
|
+
let invEmail;
|
|
773
|
+
try {
|
|
774
|
+
const adminInvitations = await client.listAppAdminInvitations(resolvedAppId);
|
|
775
|
+
const match = adminInvitations.find((inv) => inv.invitationId === invitationId);
|
|
776
|
+
invEmail = match?.email;
|
|
777
|
+
}
|
|
778
|
+
catch {
|
|
779
|
+
// Non-fatal
|
|
780
|
+
}
|
|
781
|
+
await client.deleteAppAdminInvitation(resolvedAppId, invitationId);
|
|
782
|
+
// Cross-delete matching app-level invitations by email
|
|
783
|
+
if (invEmail) {
|
|
784
|
+
try {
|
|
785
|
+
const appInvitations = await client.listInvitations(resolvedAppId);
|
|
786
|
+
const matching = appInvitations.items.filter((inv) => inv.email === invEmail && !inv.accepted);
|
|
787
|
+
for (const inv of matching) {
|
|
788
|
+
await client.deleteInvitation(resolvedAppId, inv.invitationId);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
catch {
|
|
792
|
+
// Non-fatal
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
success(`Invitation ${invitationId} deleted.`);
|
|
796
|
+
}
|
|
797
|
+
catch (err) {
|
|
798
|
+
error(err.message);
|
|
799
|
+
process.exit(1);
|
|
800
|
+
}
|
|
801
|
+
});
|
|
284
802
|
}
|
|
285
803
|
//# sourceMappingURL=users.js.map
|