Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
"test:android-version": "bun test/test-android-version.mjs",
"test:platform-flow-contract": "bun test/test-platform-flow-contract.mjs",
"test:tail-engine-shared": "bun test/test-tail-engine-shared.mjs",
"test": "bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:bundle-validation && bun run test:functional && bun run test:semver && bun run test:auto-bump-version && bun run test:auto-bump-ai-diff && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:fail-on-incompatible && bun run test:native-dependencies && bun run test:package-json-guard && bun run test:credentials && bun run test:credentials-export && bun run test:credentials-validation && bun run test:android-service-account-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:build-needed && bun run test:build-cancellation && bun run test:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && bun run test:cli-headers && bun run test:min-cli-version && bun run test:authenticated-command-invocation && bun run test:analytics-error-category && bun run test:analytics-org-resolver && bun run test:supabase-perf && bun run test:preview-qr && bun run test:app-set-options && bun run test:mcp-analytics && bun run test:mcp-instructions && bun run test:mcp-live-update-onboarding && bun run test:mcp-stdout-guard && bun run test:mcp-platform-select && bun run test:mcp-explain-scopes && bun run test:mcp-oauth-reopen && bun run test:mcp-broker-oauth && bun run test:mcp-broker-session && bun run test:mcp-credentials-manage && bun run test:mcp-resume-prompt && bun run test:mcp-build-job && bun run test:mcp-build-tools && bun run test:app-created-source && bun run test:app-add-exists && bun run test:app-list-output-text && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:cli-recovery && bun run test:create-supabase-client && bun run test:build-platform-selection && bun run test:builder-project-discovery && bun run test:onboarding-recovery && bun run test:onboarding-progress && bun run test:onboarding-run-targets && bun run test:run-device-command && bun run test:init-monorepo-targeting && bun run test:init-app-conflict && bun run test:channel-add-exists && bun run test:wait-log && bun run test:init-guardrails && bun run test:init-replay && bun run test:init-telemetry && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:mcp-no-key-handshake && bun run test:auth-session && bun run test:version-detection && bun run test:platform-paths && bun run test:project-type-detection && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:asc-key-protocol && bun run test:apple-api-import-helpers && bun run test:apple-api-verify-key && bun run test:bundle-id-detector && bun run test:apple-api-app-list && bun run test:app-verification && bun run test:pbxproj-parser && bun run test:ai-log-capture && bun run test:ai-analyze-flow && bun run test:cicd-failure-help && bun run test:ai-sse-parser && bun run test:ai-render-markdown && bun run test:ai-stream-markdown && bun run test:ai-onboarding-mode && bun run test:ai-fit && bun run test:platform-layout && bun run test:frame-fit && bun run test:onboarding-min-size && bun run test:min-size-gate && bun run test:shell-size-gate && bun run test:build-log-sanitize && bun run test:build-output-viewport && bun run test:diff-viewer-viewport && bun run test:build-complete-exit && bun run test:ai-analyze-stream && bun run test:support-mailto && bun run test:support-redact && bun run test:support-internal-log && bun run test:support-help-menu && bun run test:support-contact && bun run test:support-upload-prompt && bun run test:support-bundle-files && bun run test:self-update && bun run test:update-prompt && bun run test:apple-api-cert-create && bun run test:android-tail-engine && bun run test:android-tail-render && bun run test:android-tail-routing && bun run test:dev-gate-stripped && bun run test:frame-fit-ios-shared && bun run test:ios-confirm-app-id && bun run test:ios-create-new && bun run test:ios-e2e && bun run test:ios-flow-contract && bun run test:ios-import-discovery && bun run test:ios-import-export && bun run test:ios-import-pickers && bun run test:ios-import-recovery && bun run test:ios-recovery && bun run test:ios-resume && bun run test:ios-tail-handoff && bun run test:ios-tui-render && bun run test:p8-error && bun run test:ios-tui-routing && bun run test:ios-updater-sync-validation && bun run test:ios-verify-app && bun run test:ios-marketing-version && bun run test:android-version && bun run test:platform-flow-contract && bun run test:tail-engine-shared && bun run test:prescan && bun run test:android-reporting-api && bun run test:android-app-verification && bun run test:android-rename && bun run test:appflow-auth && bun run test:appflow-api-map && bun run test:appflow-validate && bun run test:appflow-flow && bun run test:appflow-gapfill && bun run test:appflow-engine && bun run test:appflow-tail && bun run test:appflow-fetch && bun run test:appflow-sa-decode && bun run test:app-permission-helper && bun run test:2fa-compliance-network && bun run test:organization-set-api-host && bun run test:trial-warning && bun run test:plan-validation",
"test": "bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:bundle-validation && bun run test:functional && bun run test:semver && bun run test:auto-bump-version && bun run test:auto-bump-ai-diff && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:fail-on-incompatible && bun run test:native-dependencies && bun run test:package-json-guard && bun run test:credentials && bun run test:credentials-export && bun run test:credentials-validation && bun run test:android-service-account-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:build-needed && bun run test:build-cancellation && bun run test:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && bun run test:cli-headers && bun run test:min-cli-version && bun run test:authenticated-command-invocation && bun run test:analytics-error-category && bun run test:analytics-org-resolver && bun run test:supabase-perf && bun run test:preview-qr && bun run test:app-set-options && bun run test:mcp-analytics && bun run test:mcp-instructions && bun run test:mcp-live-update-onboarding && bun run test:mcp-stdout-guard && bun run test:mcp-platform-select && bun run test:mcp-explain-scopes && bun run test:mcp-oauth-reopen && bun run test:mcp-broker-oauth && bun run test:mcp-broker-session && bun run test:mcp-credentials-manage && bun run test:mcp-resume-prompt && bun run test:mcp-build-job && bun run test:mcp-build-tools && bun run test:app-created-source && bun run test:app-add-exists && bun run test:app-list-output-text && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:cli-recovery && bun run test:create-supabase-client && bun run test:cli-user-error-config && bun run test:build-platform-selection && bun run test:builder-project-discovery && bun run test:onboarding-recovery && bun run test:onboarding-progress && bun run test:onboarding-run-targets && bun run test:run-device-command && bun run test:init-monorepo-targeting && bun run test:init-app-conflict && bun run test:channel-add-exists && bun run test:wait-log && bun run test:init-guardrails && bun run test:init-replay && bun run test:init-telemetry && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:mcp-no-key-handshake && bun run test:auth-session && bun run test:version-detection && bun run test:platform-paths && bun run test:project-type-detection && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:asc-key-protocol && bun run test:apple-api-import-helpers && bun run test:apple-api-verify-key && bun run test:bundle-id-detector && bun run test:apple-api-app-list && bun run test:app-verification && bun run test:pbxproj-parser && bun run test:ai-log-capture && bun run test:ai-analyze-flow && bun run test:cicd-failure-help && bun run test:ai-sse-parser && bun run test:ai-render-markdown && bun run test:ai-stream-markdown && bun run test:ai-onboarding-mode && bun run test:ai-fit && bun run test:platform-layout && bun run test:frame-fit && bun run test:onboarding-min-size && bun run test:min-size-gate && bun run test:shell-size-gate && bun run test:build-log-sanitize && bun run test:build-output-viewport && bun run test:diff-viewer-viewport && bun run test:build-complete-exit && bun run test:ai-analyze-stream && bun run test:support-mailto && bun run test:support-redact && bun run test:support-internal-log && bun run test:support-help-menu && bun run test:support-contact && bun run test:support-upload-prompt && bun run test:support-bundle-files && bun run test:self-update && bun run test:update-prompt && bun run test:apple-api-cert-create && bun run test:android-tail-engine && bun run test:android-tail-render && bun run test:android-tail-routing && bun run test:dev-gate-stripped && bun run test:frame-fit-ios-shared && bun run test:ios-confirm-app-id && bun run test:ios-create-new && bun run test:ios-e2e && bun run test:ios-flow-contract && bun run test:ios-import-discovery && bun run test:ios-import-export && bun run test:ios-import-pickers && bun run test:ios-import-recovery && bun run test:ios-recovery && bun run test:ios-resume && bun run test:ios-tail-handoff && bun run test:ios-tui-render && bun run test:p8-error && bun run test:ios-tui-routing && bun run test:ios-updater-sync-validation && bun run test:ios-verify-app && bun run test:ios-marketing-version && bun run test:android-version && bun run test:platform-flow-contract && bun run test:tail-engine-shared && bun run test:prescan && bun run test:android-reporting-api && bun run test:android-app-verification && bun run test:android-rename && bun run test:appflow-auth && bun run test:appflow-api-map && bun run test:appflow-validate && bun run test:appflow-flow && bun run test:appflow-gapfill && bun run test:appflow-engine && bun run test:appflow-tail && bun run test:appflow-fetch && bun run test:appflow-sa-decode && bun run test:app-permission-helper && bun run test:2fa-compliance-network && bun run test:organization-set-api-host && bun run test:trial-warning && bun run test:plan-validation",
Comment thread
cursor[bot] marked this conversation as resolved.
Resolved
"test:build-platform-selection": "bun test/test-build-platform-selection.mjs",
"test:builder-project-discovery": "bun test/test-builder-project-discovery.mjs",
"test:ai-log-capture": "bun test/test-ai-log-capture.mjs",
Expand Down
2 changes: 1 addition & 1 deletion cli/src/app/debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ export async function debugApp(appId: string, options: AppDebugOptions) {
}
if (!appId) {
log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

const orgId = await getOrganizationId(options.apikey!, appId, { supaHost: options.supaHost, supaAnon: options.supaAnon })
Expand Down
2 changes: 1 addition & 1 deletion cli/src/app/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export async function deleteAppInternal(
if (!appId) {
if (!silent)
log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

const supabase = await createSupabaseClient(options.apikey, options.supaHost, options.supaAnon)
Expand Down
3 changes: 2 additions & 1 deletion cli/src/app/set.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { intro, log, outro } from '@clack/prompts'
import { checkAppExistsAndHasPermissionOrgErr, getAppIconStoragePath, resolveAppSetIconPath } from '../api/app'
import { assertChannelExists, disableDownloadChannels as disableAllDownloadChannels, setDefaultDownloadChannel } from './default-channels'
import { normalizeStoreUrl } from './store-url'
import { CliUserError } from '../shared/cli-user-error'
import {
createSupabaseClient,
findSavedKey,
Expand Down Expand Up @@ -39,7 +40,7 @@ export async function setAppInternal(appId: string, options: Options, silent = f
if (!appId) {
if (!silent)
log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

const supabase = await createSupabaseClient(options.apikey, options.supaHost, options.supaAnon)
Expand Down
3 changes: 2 additions & 1 deletion cli/src/build/needed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { difference, parse } from '@std/semver'
import { trackEvent } from '../analytics/track'
import { check2FAComplianceForApp, checkAppExistsAndHasPermissionOrgErr } from '../api/app'
import { formatTable } from '../terminal-table'
import { CliUserError } from '../shared/cli-user-error'
import {
checkCompatibilityCloud,
createSupabaseClient,
Expand Down Expand Up @@ -263,7 +264,7 @@ export async function getBuildNeeded(
if (!resolvedAppId) {
if (configError instanceof Error)
throw configError
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

if (!enrichedOptions.apikey)
Expand Down
3 changes: 2 additions & 1 deletion cli/src/build/prescan/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { SupabaseClient } from '@supabase/supabase-js'
import type { Database } from '../../types/supabase.types'
import type { Platform, ScanContext } from './types'
import { getConfig } from '../../utils'
import { CliUserError } from '../../shared/cli-user-error'
import { mergeCredentials } from '../credentials'
import { withCwd } from '../cwd'

Expand All @@ -28,7 +29,7 @@ export async function buildScanContext(args: BuildScanContextArgs): Promise<Scan
try { config = (await withCwd(args.projectDir, () => getConfig(true))).config }
catch { config = undefined } // no capacitor project — checks degrade individually
const appId = args.appId ?? config?.appId
if (!appId) throw new Error('Missing appId: pass it explicitly or run inside a Capacitor project')
if (!appId) throw new CliUserError('Missing appId: pass it explicitly or run inside a Capacitor project')
const credentials = args.credentials
?? (await mergeCredentials(appId, args.platform) as Record<string, string> | undefined)
return {
Expand Down
2 changes: 1 addition & 1 deletion cli/src/bundle/cleanup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export async function cleanupBundleInternal(appId: string, options: BundleCleanu
if (!appId) {
if (!silent)
log.error('Missing argument, you need to provide a appid, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

const supabase = await createSupabaseClient(options.apikey, options.supaHost, options.supaAnon)
Expand Down
3 changes: 2 additions & 1 deletion cli/src/bundle/compatibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { intro, log } from '@clack/prompts'
import { trackEvent } from '../analytics/track'
import { check2FAComplianceForApp, checkAppExistsAndHasPermissionOrgErr } from '../api/app'
import { formatTable } from '../terminal-table'
import { CliUserError } from '../shared/cli-user-error'
import {
checkCompatibilityCloud,
createSupabaseClient,
Expand Down Expand Up @@ -54,7 +55,7 @@ export async function checkCompatibilityInternal(
if (!resolvedAppId) {
if (!silent)
log.error('Missing argument, you need to provide an appId, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

const supabase = await createSupabaseClient(
Expand Down
3 changes: 2 additions & 1 deletion cli/src/bundle/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { BundleDeleteOptions } from '../schemas/bundle'
import { intro, log, outro } from '@clack/prompts'
import { check2FAComplianceForApp, checkAppExistsAndHasPermissionOrgErr } from '../api/app'
import { deleteSpecificVersion } from '../api/versions'
import { CliUserError } from '../shared/cli-user-error'
import { createSupabaseClient, findSavedKey, getAppId, getConfig, getOrganizationId, resolveUserIdFromApiKey, sendEvent } from '../utils'

export async function deleteBundleInternal(bundleId: string, appId: string, options: BundleDeleteOptions, silent = false) {
Expand All @@ -21,7 +22,7 @@ export async function deleteBundleInternal(bundleId: string, appId: string, opti
if (!appId) {
if (!silent)
log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

if (!bundleId) {
Expand Down
11 changes: 9 additions & 2 deletions cli/src/bundle/encrypt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,14 @@ export async function encryptZipInternal(
await ensurePublicKeyFromPrivateKey(privateKey, { silent: silent || json, json })
}
else if (!userSuppliedPrivateKey) {
await ensurePublicKeyInConfig({ interactive, silent: silent || json, json })
try {
await ensurePublicKeyInConfig({ interactive, silent: silent || json, json })
}
catch (error) {
if (!interactive && error instanceof Error)
throw new CliUserError(error.message)
throw error
Comment thread
cursor[bot] marked this conversation as resolved.
Resolved
}
}
extConfig = await getConfigForWrite()
}
Expand All @@ -85,7 +92,7 @@ export async function encryptZipInternal(
else
log.warning('Warning: Missing Public Key in config')
}
throw new Error('Missing public key in config')
throw new CliUserError('Missing public key in config')
}

if (!privateKey) {
Expand Down
3 changes: 2 additions & 1 deletion cli/src/bundle/list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { trackEvent } from '../analytics/track'
import { check2FAComplianceForApp, checkAppExistsAndHasPermissionOrgErr } from '../api/app'
import { checkAlerts } from '../api/update'
import { displayBundles, getActiveAppVersions } from '../api/versions'
import { CliUserError } from '../shared/cli-user-error'
import { createSupabaseClient, findSavedKey, getAppId, getConfig, resolveUserIdFromApiKey } from '../utils'

export async function listBundle(appId: string, options: OptionsBase, silent = false) {
Expand All @@ -24,7 +25,7 @@ export async function listBundle(appId: string, options: OptionsBase, silent = f
if (!appId) {
if (!silent)
log.error('Missing argument, you need to provide a appid, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

const supabase = await createSupabaseClient(options.apikey, options.supaHost, options.supaAnon)
Expand Down
3 changes: 2 additions & 1 deletion cli/src/bundle/unlink.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { intro, log, outro } from '@clack/prompts'
import { check2FAComplianceForApp, checkAppExistsAndHasPermissionOrgErr } from '../api/app'
import { checkVersionNotUsedInChannel } from '../api/channels'
import { getVersionData } from '../api/versions'
import { CliUserError } from '../shared/cli-user-error'
import {
checkPlanValid,
createSupabaseClient,
Expand Down Expand Up @@ -54,7 +55,7 @@ export async function unlinkDeviceInternal(
if (!resolvedAppId) {
if (!silent)
log.error('Missing argument, you need to provide an appId, or be in a capacitor project')
throw new Error('Missing appId')
throw new CliUserError('Missing appId')
}

if (!bundle) {
Expand Down
Loading
Loading