@capgo/cli 8.48.2 → 8.49.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/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capgo/cli",
3
3
  "type": "module",
4
- "version": "8.48.2",
4
+ "version": "8.49.0",
5
5
  "description": "A CLI to upload to capgo servers",
6
6
  "author": "Martin martin@capgo.app",
7
7
  "license": "Apache 2.0",
@@ -177,7 +177,7 @@
177
177
  "test:android-version": "bun test/test-android-version.mjs",
178
178
  "test:platform-flow-contract": "bun test/test-platform-flow-contract.mjs",
179
179
  "test:tail-engine-shared": "bun test/test-tail-engine-shared.mjs",
180
- "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-cache-payload && 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-gcp && 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",
180
+ "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:ios-provisioning-map && bun run test:ios-provisioning-command && 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-cache-payload && 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-gcp && 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",
181
181
  "test:build-platform-selection": "bun test/test-build-platform-selection.mjs",
182
182
  "test:builder-project-discovery": "bun test/test-builder-project-discovery.mjs",
183
183
  "test:ai-log-capture": "bun test/test-ai-log-capture.mjs",
@@ -226,7 +226,9 @@
226
226
  "test:trial-warning": "bun test/test-trial-warning.mjs",
227
227
  "test:plan-validation": "bun test/test-plan-validation.mjs",
228
228
  "test:auto-bump-version": "bun test/test-auto-bump-version.mjs",
229
- "test:auto-bump-ai-diff": "bun test/test-auto-bump-ai-diff.mjs"
229
+ "test:auto-bump-ai-diff": "bun test/test-auto-bump-ai-diff.mjs",
230
+ "test:ios-provisioning-map": "bun test/test-ios-provisioning-map.mjs",
231
+ "test:ios-provisioning-command": "bun test/test-ios-provisioning-command.mjs"
230
232
  },
231
233
  "dependencies": {
232
234
  "@inkjs/ui": "^2.0.0",
@@ -1,7 +1,5 @@
1
- import type { SavedCredentials } from '../schemas/build';
1
+ import type { CredentialsPlatform, CredentialsStoreName, CredentialsStores } from './credentials-store-selection';
2
2
  import { link, mkdtemp, open, rmdir, unlink } from 'node:fs/promises';
3
- type Platform = 'ios' | 'android';
4
- type Store = 'local' | 'global';
5
3
  type CredentialsExportOptions = {
6
4
  appId?: string;
7
5
  platform?: string;
@@ -11,11 +9,10 @@ type CredentialsExportOptions = {
11
9
  raw?: boolean;
12
10
  decodeBase64?: boolean;
13
11
  };
14
- type CredentialsExportStores = Record<Store, SavedCredentials | null>;
15
12
  type ResolvedCredentialsExport = {
16
13
  value: string;
17
- source: Store;
18
- platforms: Platform[];
14
+ source: CredentialsStoreName;
15
+ platforms: CredentialsPlatform[];
19
16
  };
20
17
  type FileValue = {
21
18
  data: string | Buffer;
@@ -30,7 +27,7 @@ type FileWriterDependencies = {
30
27
  rmdir?: typeof rmdir;
31
28
  };
32
29
  export declare function isCredentialsExportInvocation(argv: readonly string[]): boolean;
33
- export declare function resolveCredentialsExport(variable: string, options: CredentialsExportOptions, savedStores: CredentialsExportStores): ResolvedCredentialsExport;
30
+ export declare function resolveCredentialsExport(variable: string, options: CredentialsExportOptions, savedStores: CredentialsStores): ResolvedCredentialsExport;
34
31
  export declare function resolveCredentialsFileValue(variable: string, value: string, { decodeBase64, interactive, promptDecode }: {
35
32
  decodeBase64?: boolean;
36
33
  interactive: boolean;
@@ -0,0 +1,16 @@
1
+ import type { SavedCredentials } from '../schemas/build';
2
+ export type CredentialsStoreName = 'local' | 'global';
3
+ export type CredentialsPlatform = 'ios' | 'android';
4
+ export interface CredentialsStoreOptions {
5
+ appId?: string;
6
+ local?: boolean;
7
+ global?: boolean;
8
+ }
9
+ export type CredentialsStores = Record<CredentialsStoreName, SavedCredentials | null>;
10
+ export interface ResolvedCredentialsStore {
11
+ source: CredentialsStoreName;
12
+ saved: SavedCredentials;
13
+ }
14
+ export declare function credentialsPlatformFields(saved: SavedCredentials | null, platform: CredentialsPlatform): Record<string, unknown> | undefined;
15
+ export declare function hasConfiguredCredentials(saved: SavedCredentials | null, platform?: CredentialsPlatform): boolean;
16
+ export declare function resolveCredentialsStore(options: CredentialsStoreOptions, savedStores: CredentialsStores): ResolvedCredentialsStore;
@@ -0,0 +1,32 @@
1
+ import type { CredentialsStoreName, CredentialsStores } from './credentials-store-selection';
2
+ import type { ProvisioningMap } from './ios-provisioning-map';
3
+ import type { PbxTarget } from './pbxproj-parser';
4
+ import { DuplicateProfileError, createProfile, deleteProfile, ensureBundleId, findCertBySha1, generateJwt, verifyApiKey } from './onboarding/apple-api';
5
+ import { openP12 } from './prescan/checks/ios-certs';
6
+ export interface IosProvisioningOptions {
7
+ local?: boolean;
8
+ global?: boolean;
9
+ }
10
+ export interface IosProvisioningProject {
11
+ appId: string;
12
+ targets: PbxTarget[];
13
+ }
14
+ export interface IosProvisioningCommandDeps {
15
+ loadProject: () => Promise<IosProvisioningProject>;
16
+ loadStores: (appId: string, options: IosProvisioningOptions) => Promise<CredentialsStores>;
17
+ persistMap: (appId: string, source: CredentialsStoreName, map: ProvisioningMap) => Promise<void>;
18
+ canPrompt: () => boolean;
19
+ confirm: (message: string) => Promise<boolean>;
20
+ logInfo: (message: string) => void;
21
+ generateJwt: typeof generateJwt;
22
+ verifyApiKey: typeof verifyApiKey;
23
+ openP12: typeof openP12;
24
+ findCertBySha1: typeof findCertBySha1;
25
+ ensureBundleId: typeof ensureBundleId;
26
+ createProfile: typeof createProfile;
27
+ deleteProfile: typeof deleteProfile;
28
+ }
29
+ export declare function runIosProvisioningCommand(options: IosProvisioningOptions, deps: IosProvisioningCommandDeps): Promise<void>;
30
+ export declare function defaultIosProvisioningCommandDeps(): IosProvisioningCommandDeps;
31
+ export declare function iosProvisioningCommand(options: IosProvisioningOptions): Promise<void>;
32
+ export { DuplicateProfileError };
@@ -0,0 +1,35 @@
1
+ import type { PbxTarget } from './pbxproj-parser';
2
+ export type ProvisioningMapErrorCode = 'missing' | 'empty' | 'malformed' | 'invalid';
3
+ export declare class ProvisioningMapError extends Error {
4
+ readonly code: ProvisioningMapErrorCode;
5
+ constructor(code: ProvisioningMapErrorCode, message: string);
6
+ }
7
+ export interface ProvisioningMapEntry {
8
+ profile: string;
9
+ name: string;
10
+ readonly bundleId: string;
11
+ }
12
+ export type ProvisioningMap = Record<string, ProvisioningMapEntry>;
13
+ export interface ProvisioningTargetGroup {
14
+ bundleId: string;
15
+ targetNames: string[];
16
+ }
17
+ export interface WildcardReuse {
18
+ entry: ProvisioningMapEntry;
19
+ sourceKeys: string[];
20
+ targets: ProvisioningTargetGroup[];
21
+ }
22
+ export interface ProvisioningCoverage {
23
+ exact: ProvisioningTargetGroup[];
24
+ missing: ProvisioningTargetGroup[];
25
+ unresolved: PbxTarget[];
26
+ wildcardReuse: WildcardReuse | null;
27
+ wildcardConflict: ProvisioningTargetGroup[];
28
+ generation: ProvisioningTargetGroup[];
29
+ }
30
+ /** Cache the parsed bundle ID without changing the persisted { profile, name } contract. */
31
+ export declare function createProvisioningMapEntry(profile: string, name: string, bundleId: string): ProvisioningMapEntry;
32
+ export declare function parseProvisioningMap(raw: unknown): ProvisioningMap;
33
+ export declare function isConcreteBundleId(bundleId: string): boolean;
34
+ export declare function wildcardBundleMatches(wildcardBundleId: string, targetBundleId: string): boolean;
35
+ export declare function analyzeProvisioningCoverage(targets: PbxTarget[], map: ProvisioningMap): ProvisioningCoverage;
@@ -19,3 +19,4 @@ export declare const profileBundleMatch: PrescanCheck;
19
19
  export declare const profileTypeVsMode: PrescanCheck;
20
20
  export declare const certProfilePairing: PrescanCheck;
21
21
  export declare const targetsCovered: PrescanCheck;
22
+ export declare const wildcardProfileTargets: PrescanCheck;