@capgo/cli 8.48.1 → 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.1",
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",
@@ -83,6 +83,7 @@
83
83
  "test:build-zip-filter": "bun test/test-build-zip-filter.mjs",
84
84
  "test:checksum": "bun test/test-checksum-algorithm.mjs",
85
85
  "test:build-needed": "bun test/test-build-needed.mjs",
86
+ "test:build-cache-payload": "bun test/test-build-cache-payload.mjs",
86
87
  "test:build-cancellation": "bun test/test-build-cancellation.mjs",
87
88
  "test:ci-prompts": "bun test/test-ci-prompts.mjs",
88
89
  "test:ci-secrets": "bun test/test-ci-secrets.mjs",
@@ -176,7 +177,7 @@
176
177
  "test:android-version": "bun test/test-android-version.mjs",
177
178
  "test:platform-flow-contract": "bun test/test-platform-flow-contract.mjs",
178
179
  "test:tail-engine-shared": "bun test/test-tail-engine-shared.mjs",
179
- "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-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",
180
181
  "test:build-platform-selection": "bun test/test-build-platform-selection.mjs",
181
182
  "test:builder-project-discovery": "bun test/test-builder-project-discovery.mjs",
182
183
  "test:ai-log-capture": "bun test/test-ai-log-capture.mjs",
@@ -225,7 +226,9 @@
225
226
  "test:trial-warning": "bun test/test-trial-warning.mjs",
226
227
  "test:plan-validation": "bun test/test-plan-validation.mjs",
227
228
  "test:auto-bump-version": "bun test/test-auto-bump-version.mjs",
228
- "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"
229
232
  },
230
233
  "dependencies": {
231
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;
@@ -51,6 +51,10 @@ interface ResolveBuildPlatformOptions {
51
51
  }
52
52
  export declare function resolveBuildPlatform(platform: string | undefined, { silent, interactive, promptPlatform, }?: ResolveBuildPlatformOptions): Promise<BuildPlatform>;
53
53
  export type { BuildCredentials, BuildRequestOptions, BuildRequestResult } from '../schemas/build';
54
+ /** Builder job API cache flag: omit when enabled (default), send false when opted out. */
55
+ export declare function buildJobCachePayload(cache?: boolean): {
56
+ cache_enabled?: false;
57
+ };
54
58
  /**
55
59
  * Extract native node_modules roots that contain platform folders.
56
60
  */
@@ -156,6 +156,7 @@ export declare const mcpRequestBuildInputSchema: z.ZodObject<{
156
156
  }>;
157
157
  path: z.ZodOptional<z.ZodString>;
158
158
  nodeModules: z.ZodOptional<z.ZodString>;
159
+ cache: z.ZodOptional<z.ZodBoolean>;
159
160
  }, z.core.$strip>;
160
161
  export declare const mcpGenerateEncryptionKeysInputSchema: z.ZodObject<{
161
162
  force: z.ZodOptional<z.ZodBoolean>;
@@ -27,6 +27,7 @@ export declare const buildCredentialsSchema: z.ZodObject<{
27
27
  PLAY_STORE_IN_APP_UPDATE_PRIORITY: z.ZodOptional<z.ZodString>;
28
28
  }, z.core.$catchall<z.ZodOptional<z.ZodString>>>;
29
29
  export type BuildCredentials = z.infer<typeof buildCredentialsSchema>;
30
+ export declare const buildCacheOptionSchema: z.ZodOptional<z.ZodBoolean>;
30
31
  export declare const buildRequestOptionsSchema: z.ZodObject<{
31
32
  apikey: z.ZodString;
32
33
  supaHost: z.ZodOptional<z.ZodString>;
@@ -108,6 +109,7 @@ export declare const buildRequestOptionsSchema: z.ZodObject<{
108
109
  prescanWarn: z.ZodOptional<z.ZodArray<z.ZodString>>;
109
110
  failOnWarnings: z.ZodOptional<z.ZodBoolean>;
110
111
  builderJourneyId: z.ZodOptional<z.ZodString>;
112
+ cache: z.ZodOptional<z.ZodBoolean>;
111
113
  }, z.core.$strip>;
112
114
  export type BuildRequestOptions = z.infer<typeof buildRequestOptionsSchema>;
113
115
  export declare const buildNeededOptionsSchema: z.ZodObject<{
@@ -407,6 +407,7 @@ export declare const requestBuildOptionsSchema: z.ZodObject<{
407
407
  prescanIgnoreFatal: z.ZodOptional<z.ZodBoolean>;
408
408
  prescanSkip: z.ZodOptional<z.ZodArray<z.ZodString>>;
409
409
  prescanWarn: z.ZodOptional<z.ZodArray<z.ZodString>>;
410
+ cache: z.ZodOptional<z.ZodBoolean>;
410
411
  }, z.core.$strip>;
411
412
  export type RequestBuildOptions = z.infer<typeof requestBuildOptionsSchema>;
412
413
  export declare const currentBundleOptionsSchema: z.ZodObject<{