@ankhorage/deploy 0.5.0 → 0.7.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/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/dist/domain/IosDeploymentIntent.d.ts +5 -0
- package/dist/domain/IosDeploymentIntent.d.ts.map +1 -0
- package/dist/domain/IosDeploymentIntent.js +2 -0
- package/dist/domain/IosDeploymentIntent.js.map +1 -0
- package/dist/domain/IosDeploymentPublication.d.ts +10 -0
- package/dist/domain/IosDeploymentPublication.d.ts.map +1 -0
- package/dist/domain/IosDeploymentPublication.js +2 -0
- package/dist/domain/IosDeploymentPublication.js.map +1 -0
- package/dist/domain/storeListing/StoreListingAsset.d.ts +9 -0
- package/dist/domain/storeListing/StoreListingAsset.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingAsset.js +2 -0
- package/dist/domain/storeListing/StoreListingAsset.js.map +1 -0
- package/dist/domain/storeListing/StoreListingAssetSet.d.ts +9 -0
- package/dist/domain/storeListing/StoreListingAssetSet.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingAssetSet.js +2 -0
- package/dist/domain/storeListing/StoreListingAssetSet.js.map +1 -0
- package/dist/domain/storeListing/StoreListingDesiredState.d.ts +8 -0
- package/dist/domain/storeListing/StoreListingDesiredState.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingDesiredState.js +2 -0
- package/dist/domain/storeListing/StoreListingDesiredState.js.map +1 -0
- package/dist/domain/storeListing/StoreListingDiagnostic.d.ts +12 -0
- package/dist/domain/storeListing/StoreListingDiagnostic.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingDiagnostic.js +2 -0
- package/dist/domain/storeListing/StoreListingDiagnostic.js.map +1 -0
- package/dist/domain/storeListing/StoreListingField.d.ts +2 -0
- package/dist/domain/storeListing/StoreListingField.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingField.js +2 -0
- package/dist/domain/storeListing/StoreListingField.js.map +1 -0
- package/dist/domain/storeListing/StoreListingLocale.d.ts +13 -0
- package/dist/domain/storeListing/StoreListingLocale.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingLocale.js +2 -0
- package/dist/domain/storeListing/StoreListingLocale.js.map +1 -0
- package/dist/domain/storeListing/StoreListingPlan.d.ts +10 -0
- package/dist/domain/storeListing/StoreListingPlan.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingPlan.js +2 -0
- package/dist/domain/storeListing/StoreListingPlan.js.map +1 -0
- package/dist/domain/storeListing/StoreListingPlanStep.d.ts +10 -0
- package/dist/domain/storeListing/StoreListingPlanStep.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingPlanStep.js +2 -0
- package/dist/domain/storeListing/StoreListingPlanStep.js.map +1 -0
- package/dist/domain/storeListing/StoreListingRemoteAssetSet.d.ts +9 -0
- package/dist/domain/storeListing/StoreListingRemoteAssetSet.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingRemoteAssetSet.js +2 -0
- package/dist/domain/storeListing/StoreListingRemoteAssetSet.js.map +1 -0
- package/dist/domain/storeListing/StoreListingTarget.d.ts +2 -0
- package/dist/domain/storeListing/StoreListingTarget.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingTarget.js +2 -0
- package/dist/domain/storeListing/StoreListingTarget.js.map +1 -0
- package/dist/domain/storeListing/StoreListingTargetState.d.ts +13 -0
- package/dist/domain/storeListing/StoreListingTargetState.d.ts.map +1 -0
- package/dist/domain/storeListing/StoreListingTargetState.js +2 -0
- package/dist/domain/storeListing/StoreListingTargetState.js.map +1 -0
- package/dist/domain/storeListing/createStoreListingCurrentRevision.d.ts +3 -0
- package/dist/domain/storeListing/createStoreListingCurrentRevision.d.ts.map +1 -0
- package/dist/domain/storeListing/createStoreListingCurrentRevision.js +16 -0
- package/dist/domain/storeListing/createStoreListingCurrentRevision.js.map +1 -0
- package/dist/domain/storeListing/createStoreListingPlan.d.ts +9 -0
- package/dist/domain/storeListing/createStoreListingPlan.d.ts.map +1 -0
- package/dist/domain/storeListing/createStoreListingPlan.js +85 -0
- package/dist/domain/storeListing/createStoreListingPlan.js.map +1 -0
- package/dist/domain/storeListing/normalizeStoreListingLocale.d.ts +2 -0
- package/dist/domain/storeListing/normalizeStoreListingLocale.d.ts.map +1 -0
- package/dist/domain/storeListing/normalizeStoreListingLocale.js +18 -0
- package/dist/domain/storeListing/normalizeStoreListingLocale.js.map +1 -0
- package/dist/domain/storeListing/storeListingLocaleFieldValue.d.ts +4 -0
- package/dist/domain/storeListing/storeListingLocaleFieldValue.d.ts.map +1 -0
- package/dist/domain/storeListing/storeListingLocaleFieldValue.js +23 -0
- package/dist/domain/storeListing/storeListingLocaleFieldValue.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/project/index.d.ts +6 -0
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +3 -0
- package/dist/project/index.js.map +1 -1
- package/dist/project/ios/ProjectIosDeploymentAccess.d.ts +7 -0
- package/dist/project/ios/ProjectIosDeploymentAccess.d.ts.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentAccess.js +2 -0
- package/dist/project/ios/ProjectIosDeploymentAccess.js.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentExecution.d.ts +12 -0
- package/dist/project/ios/ProjectIosDeploymentExecution.d.ts.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentExecution.js +2 -0
- package/dist/project/ios/ProjectIosDeploymentExecution.js.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentInspection.d.ts +21 -0
- package/dist/project/ios/ProjectIosDeploymentInspection.d.ts.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentInspection.js +2 -0
- package/dist/project/ios/ProjectIosDeploymentInspection.js.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentRuntime.d.ts +19 -0
- package/dist/project/ios/ProjectIosDeploymentRuntime.d.ts.map +1 -0
- package/dist/project/ios/ProjectIosDeploymentRuntime.js +22 -0
- package/dist/project/ios/ProjectIosDeploymentRuntime.js.map +1 -0
- package/dist/project/ios/ProjectIosExecutionState.d.ts +12 -0
- package/dist/project/ios/ProjectIosExecutionState.d.ts.map +1 -0
- package/dist/project/ios/ProjectIosExecutionState.js +2 -0
- package/dist/project/ios/ProjectIosExecutionState.js.map +1 -0
- package/dist/project/ios/createProjectIosDeploymentPlan.d.ts +4 -0
- package/dist/project/ios/createProjectIosDeploymentPlan.d.ts.map +1 -0
- package/dist/project/ios/createProjectIosDeploymentPlan.js +13 -0
- package/dist/project/ios/createProjectIosDeploymentPlan.js.map +1 -0
- package/dist/project/ios/executeProjectIosDeployment.d.ts +12 -0
- package/dist/project/ios/executeProjectIosDeployment.d.ts.map +1 -0
- package/dist/project/ios/executeProjectIosDeployment.js +160 -0
- package/dist/project/ios/executeProjectIosDeployment.js.map +1 -0
- package/dist/project/ios/executeProjectIosStep.d.ts +15 -0
- package/dist/project/ios/executeProjectIosStep.d.ts.map +1 -0
- package/dist/project/ios/executeProjectIosStep.js +171 -0
- package/dist/project/ios/executeProjectIosStep.js.map +1 -0
- package/dist/project/ios/inspectProjectIosAppStoreConnect.d.ts +15 -0
- package/dist/project/ios/inspectProjectIosAppStoreConnect.d.ts.map +1 -0
- package/dist/project/ios/inspectProjectIosAppStoreConnect.js +55 -0
- package/dist/project/ios/inspectProjectIosAppStoreConnect.js.map +1 -0
- package/dist/project/ios/inspectProjectIosDeployment.d.ts +11 -0
- package/dist/project/ios/inspectProjectIosDeployment.d.ts.map +1 -0
- package/dist/project/ios/inspectProjectIosDeployment.js +96 -0
- package/dist/project/ios/inspectProjectIosDeployment.js.map +1 -0
- package/dist/project/ios/inspectProjectIosEasSetup.d.ts +5 -0
- package/dist/project/ios/inspectProjectIosEasSetup.d.ts.map +1 -0
- package/dist/project/ios/inspectProjectIosEasSetup.js +18 -0
- package/dist/project/ios/inspectProjectIosEasSetup.js.map +1 -0
- package/dist/project/ios/normalizeProjectIosDesired.d.ts +13 -0
- package/dist/project/ios/normalizeProjectIosDesired.d.ts.map +1 -0
- package/dist/project/ios/normalizeProjectIosDesired.js +25 -0
- package/dist/project/ios/normalizeProjectIosDesired.js.map +1 -0
- package/dist/project/ios/readCurrentProjectIosDeployment.d.ts +8 -0
- package/dist/project/ios/readCurrentProjectIosDeployment.d.ts.map +1 -0
- package/dist/project/ios/readCurrentProjectIosDeployment.js +52 -0
- package/dist/project/ios/readCurrentProjectIosDeployment.js.map +1 -0
- package/dist/project/ios/recordProjectIosDeployment.d.ts +21 -0
- package/dist/project/ios/recordProjectIosDeployment.d.ts.map +1 -0
- package/dist/project/ios/recordProjectIosDeployment.js +36 -0
- package/dist/project/ios/recordProjectIosDeployment.js.map +1 -0
- package/dist/project/ios/resolveProjectIosDeploymentAccess.d.ts +9 -0
- package/dist/project/ios/resolveProjectIosDeploymentAccess.d.ts.map +1 -0
- package/dist/project/ios/resolveProjectIosDeploymentAccess.js +7 -0
- package/dist/project/ios/resolveProjectIosDeploymentAccess.js.map +1 -0
- package/dist/project/ios/scopeProjectIosDeploymentAccess.d.ts +3 -0
- package/dist/project/ios/scopeProjectIosDeploymentAccess.d.ts.map +1 -0
- package/dist/project/ios/scopeProjectIosDeploymentAccess.js +7 -0
- package/dist/project/ios/scopeProjectIosDeploymentAccess.js.map +1 -0
- package/dist/project/storeListing/ProjectStoreListing.d.ts +8 -0
- package/dist/project/storeListing/ProjectStoreListing.d.ts.map +1 -0
- package/dist/project/storeListing/ProjectStoreListing.js +2 -0
- package/dist/project/storeListing/ProjectStoreListing.js.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingAccess.d.ts +7 -0
- package/dist/project/storeListing/ProjectStoreListingAccess.d.ts.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingAccess.js +2 -0
- package/dist/project/storeListing/ProjectStoreListingAccess.js.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingAsset.d.ts +5 -0
- package/dist/project/storeListing/ProjectStoreListingAsset.d.ts.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingAsset.js +2 -0
- package/dist/project/storeListing/ProjectStoreListingAsset.js.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingAssetSet.d.ts +9 -0
- package/dist/project/storeListing/ProjectStoreListingAssetSet.d.ts.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingAssetSet.js +2 -0
- package/dist/project/storeListing/ProjectStoreListingAssetSet.js.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingRuntime.d.ts +17 -0
- package/dist/project/storeListing/ProjectStoreListingRuntime.d.ts.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingRuntime.js +19 -0
- package/dist/project/storeListing/ProjectStoreListingRuntime.js.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingTargetIdentity.d.ts +5 -0
- package/dist/project/storeListing/ProjectStoreListingTargetIdentity.d.ts.map +1 -0
- package/dist/project/storeListing/ProjectStoreListingTargetIdentity.js +2 -0
- package/dist/project/storeListing/ProjectStoreListingTargetIdentity.js.map +1 -0
- package/dist/project/storeListing/createProjectStoreListingRevision.d.ts +4 -0
- package/dist/project/storeListing/createProjectStoreListingRevision.d.ts.map +1 -0
- package/dist/project/storeListing/createProjectStoreListingRevision.js +24 -0
- package/dist/project/storeListing/createProjectStoreListingRevision.js.map +1 -0
- package/dist/project/storeListing/parseStoreListingLocale.d.ts +3 -0
- package/dist/project/storeListing/parseStoreListingLocale.d.ts.map +1 -0
- package/dist/project/storeListing/parseStoreListingLocale.js +76 -0
- package/dist/project/storeListing/parseStoreListingLocale.js.map +1 -0
- package/dist/project/storeListing/readProjectStoreListing.d.ts +5 -0
- package/dist/project/storeListing/readProjectStoreListing.d.ts.map +1 -0
- package/dist/project/storeListing/readProjectStoreListing.js +24 -0
- package/dist/project/storeListing/readProjectStoreListing.js.map +1 -0
- package/dist/project/storeListing/readStoreListingAssets.d.ts +8 -0
- package/dist/project/storeListing/readStoreListingAssets.d.ts.map +1 -0
- package/dist/project/storeListing/readStoreListingAssets.js +110 -0
- package/dist/project/storeListing/readStoreListingAssets.js.map +1 -0
- package/dist/project/storeListing/readStoreListingLocales.d.ts +3 -0
- package/dist/project/storeListing/readStoreListingLocales.d.ts.map +1 -0
- package/dist/project/storeListing/readStoreListingLocales.js +43 -0
- package/dist/project/storeListing/readStoreListingLocales.js.map +1 -0
- package/dist/project/storeListing/resolveProjectStoreListingAccess.d.ts +9 -0
- package/dist/project/storeListing/resolveProjectStoreListingAccess.d.ts.map +1 -0
- package/dist/project/storeListing/resolveProjectStoreListingAccess.js +7 -0
- package/dist/project/storeListing/resolveProjectStoreListingAccess.js.map +1 -0
- package/dist/project/storeListing/resolveProjectStoreListingTargets.d.ts +20 -0
- package/dist/project/storeListing/resolveProjectStoreListingTargets.d.ts.map +1 -0
- package/dist/project/storeListing/resolveProjectStoreListingTargets.js +16 -0
- package/dist/project/storeListing/resolveProjectStoreListingTargets.js.map +1 -0
- package/dist/project/storeListing/toStoreListingDesiredState.d.ts +4 -0
- package/dist/project/storeListing/toStoreListingDesiredState.d.ts.map +1 -0
- package/dist/project/storeListing/toStoreListingDesiredState.js +15 -0
- package/dist/project/storeListing/toStoreListingDesiredState.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectIosState.d.ts +17 -0
- package/dist/providers/appStoreConnect/AppStoreConnectIosState.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectIosState.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreConnectIosState.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.d.ts +19 -0
- package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.d.ts +9 -0
- package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.js +13 -0
- package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.d.ts +8 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.js +21 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTransport.d.ts +13 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTransport.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTransport.js +15 -0
- package/dist/providers/appStoreConnect/AppStoreConnectTransport.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreListingContext.d.ts +21 -0
- package/dist/providers/appStoreConnect/AppStoreListingContext.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreListingContext.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreListingContext.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreListingContextResult.d.ts +14 -0
- package/dist/providers/appStoreConnect/AppStoreListingContextResult.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreListingContextResult.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreListingContextResult.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreUploadTransport.d.ts +17 -0
- package/dist/providers/appStoreConnect/AppStoreUploadTransport.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreUploadTransport.js +12 -0
- package/dist/providers/appStoreConnect/AppStoreUploadTransport.js.map +1 -0
- package/dist/providers/appStoreConnect/BuildUploadOperation.d.ts +13 -0
- package/dist/providers/appStoreConnect/BuildUploadOperation.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/BuildUploadOperation.js +2 -0
- package/dist/providers/appStoreConnect/BuildUploadOperation.js.map +1 -0
- package/dist/providers/appStoreConnect/appStoreConnectUrls.d.ts +10 -0
- package/dist/providers/appStoreConnect/appStoreConnectUrls.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/appStoreConnectUrls.js +42 -0
- package/dist/providers/appStoreConnect/appStoreConnectUrls.js.map +1 -0
- package/dist/providers/appStoreConnect/appStoreListingFields.d.ts +2 -0
- package/dist/providers/appStoreConnect/appStoreListingFields.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/appStoreListingFields.js +11 -0
- package/dist/providers/appStoreConnect/appStoreListingFields.js.map +1 -0
- package/dist/providers/appStoreConnect/appStoreListingUrls.d.ts +5 -0
- package/dist/providers/appStoreConnect/appStoreListingUrls.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/appStoreListingUrls.js +22 -0
- package/dist/providers/appStoreConnect/appStoreListingUrls.js.map +1 -0
- package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.d.ts +8 -0
- package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.js +12 -0
- package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.js.map +1 -0
- package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.d.ts +7 -0
- package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.js +18 -0
- package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.js.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreBuildUpload.d.ts +9 -0
- package/dist/providers/appStoreConnect/createAppStoreBuildUpload.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreBuildUpload.js +41 -0
- package/dist/providers/appStoreConnect/createAppStoreBuildUpload.js.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.d.ts +7 -0
- package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.js +33 -0
- package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.js.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreListingDiagnostics.d.ts +4 -0
- package/dist/providers/appStoreConnect/createAppStoreListingDiagnostics.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreListingDiagnostics.js +85 -0
- package/dist/providers/appStoreConnect/createAppStoreListingDiagnostics.js.map +1 -0
- package/dist/providers/appStoreConnect/downloadIosArchive.d.ts +9 -0
- package/dist/providers/appStoreConnect/downloadIosArchive.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/downloadIosArchive.js +28 -0
- package/dist/providers/appStoreConnect/downloadIosArchive.js.map +1 -0
- package/dist/providers/appStoreConnect/executeBuildUploadOperations.d.ts +8 -0
- package/dist/providers/appStoreConnect/executeBuildUploadOperations.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/executeBuildUploadOperations.js +15 -0
- package/dist/providers/appStoreConnect/executeBuildUploadOperations.js.map +1 -0
- package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.d.ts +27 -0
- package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.js +177 -0
- package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.js.map +1 -0
- package/dist/providers/appStoreConnect/isAppStoreScreenshotVariant.d.ts +2 -0
- package/dist/providers/appStoreConnect/isAppStoreScreenshotVariant.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/isAppStoreScreenshotVariant.js +39 -0
- package/dist/providers/appStoreConnect/isAppStoreScreenshotVariant.js.map +1 -0
- package/dist/providers/appStoreConnect/isEditableAppStoreListingState.d.ts +2 -0
- package/dist/providers/appStoreConnect/isEditableAppStoreListingState.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/isEditableAppStoreListingState.js +12 -0
- package/dist/providers/appStoreConnect/isEditableAppStoreListingState.js.map +1 -0
- package/dist/providers/appStoreConnect/mapAppStoreLocale.d.ts +2 -0
- package/dist/providers/appStoreConnect/mapAppStoreLocale.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/mapAppStoreLocale.js +112 -0
- package/dist/providers/appStoreConnect/mapAppStoreLocale.js.map +1 -0
- package/dist/providers/appStoreConnect/parseAppStoreAppId.d.ts +2 -0
- package/dist/providers/appStoreConnect/parseAppStoreAppId.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/parseAppStoreAppId.js +22 -0
- package/dist/providers/appStoreConnect/parseAppStoreAppId.js.map +1 -0
- package/dist/providers/appStoreConnect/parseAppStoreListingLocalizations.d.ts +8 -0
- package/dist/providers/appStoreConnect/parseAppStoreListingLocalizations.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/parseAppStoreListingLocalizations.js +68 -0
- package/dist/providers/appStoreConnect/parseAppStoreListingLocalizations.js.map +1 -0
- package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.d.ts +3 -0
- package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.js +81 -0
- package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.js.map +1 -0
- package/dist/providers/appStoreConnect/parseEditableAppStoreResourceId.d.ts +2 -0
- package/dist/providers/appStoreConnect/parseEditableAppStoreResourceId.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/parseEditableAppStoreResourceId.js +28 -0
- package/dist/providers/appStoreConnect/parseEditableAppStoreResourceId.js.map +1 -0
- package/dist/providers/appStoreConnect/prepareAppStoreVersion.d.ts +8 -0
- package/dist/providers/appStoreConnect/prepareAppStoreVersion.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/prepareAppStoreVersion.js +66 -0
- package/dist/providers/appStoreConnect/prepareAppStoreVersion.js.map +1 -0
- package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.d.ts +21 -0
- package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.js +124 -0
- package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.js.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreJson.d.ts +7 -0
- package/dist/providers/appStoreConnect/readAppStoreJson.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreJson.js +12 -0
- package/dist/providers/appStoreConnect/readAppStoreJson.js.map +1 -0
- package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.d.ts +9 -0
- package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.js +32 -0
- package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.js.map +1 -0
- package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.d.ts +18 -0
- package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.js +64 -0
- package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.js.map +1 -0
- package/dist/providers/appStoreConnect/resolveAppStoreListingContext.d.ts +10 -0
- package/dist/providers/appStoreConnect/resolveAppStoreListingContext.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/resolveAppStoreListingContext.js +103 -0
- package/dist/providers/appStoreConnect/resolveAppStoreListingContext.js.map +1 -0
- package/dist/providers/appStoreConnect/toAppStoreCurrentLocales.d.ts +4 -0
- package/dist/providers/appStoreConnect/toAppStoreCurrentLocales.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/toAppStoreCurrentLocales.js +27 -0
- package/dist/providers/appStoreConnect/toAppStoreCurrentLocales.js.map +1 -0
- package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.d.ts +23 -0
- package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.js +60 -0
- package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.js.map +1 -0
- package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.d.ts +9 -0
- package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.js +26 -0
- package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.js.map +1 -0
- package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.d.ts +14 -0
- package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.js +69 -0
- package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.js.map +1 -0
- package/dist/providers/eas/ios/EasIosBuildArtifact.d.ts +9 -0
- package/dist/providers/eas/ios/EasIosBuildArtifact.d.ts.map +1 -0
- package/dist/providers/eas/ios/EasIosBuildArtifact.js +2 -0
- package/dist/providers/eas/ios/EasIosBuildArtifact.js.map +1 -0
- package/dist/providers/eas/ios/buildIosWithEas.d.ts +26 -0
- package/dist/providers/eas/ios/buildIosWithEas.d.ts.map +1 -0
- package/dist/providers/eas/ios/buildIosWithEas.js +60 -0
- package/dist/providers/eas/ios/buildIosWithEas.js.map +1 -0
- package/dist/providers/eas/ios/generateLocalIosFingerprint.d.ts +15 -0
- package/dist/providers/eas/ios/generateLocalIosFingerprint.d.ts.map +1 -0
- package/dist/providers/eas/ios/generateLocalIosFingerprint.js +48 -0
- package/dist/providers/eas/ios/generateLocalIosFingerprint.js.map +1 -0
- package/dist/providers/eas/ios/inspectEasIosConfig.d.ts +28 -0
- package/dist/providers/eas/ios/inspectEasIosConfig.d.ts.map +1 -0
- package/dist/providers/eas/ios/inspectEasIosConfig.js +40 -0
- package/dist/providers/eas/ios/inspectEasIosConfig.js.map +1 -0
- package/dist/providers/eas/ios/parseEasIosBuild.d.ts +3 -0
- package/dist/providers/eas/ios/parseEasIosBuild.d.ts.map +1 -0
- package/dist/providers/eas/ios/parseEasIosBuild.js +41 -0
- package/dist/providers/eas/ios/parseEasIosBuild.js.map +1 -0
- package/dist/providers/eas/ios/parseEasIosConfig.d.ts +3 -0
- package/dist/providers/eas/ios/parseEasIosConfig.d.ts.map +1 -0
- package/dist/providers/eas/ios/parseEasIosConfig.js +56 -0
- package/dist/providers/eas/ios/parseEasIosConfig.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayRequestTracker.d.ts +9 -0
- package/dist/providers/googlePlay/GooglePlayRequestTracker.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayRequestTracker.js +13 -0
- package/dist/providers/googlePlay/GooglePlayRequestTracker.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayStoreListingResult.d.ts +14 -0
- package/dist/providers/googlePlay/GooglePlayStoreListingResult.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayStoreListingResult.js +2 -0
- package/dist/providers/googlePlay/GooglePlayStoreListingResult.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayTransport.d.ts +1 -1
- package/dist/providers/googlePlay/GooglePlayTransport.d.ts.map +1 -1
- package/dist/providers/googlePlay/GooglePlayTransport.js.map +1 -1
- package/dist/providers/googlePlay/createGooglePlayListingDiagnostics.d.ts +4 -0
- package/dist/providers/googlePlay/createGooglePlayListingDiagnostics.d.ts.map +1 -0
- package/dist/providers/googlePlay/createGooglePlayListingDiagnostics.js +52 -0
- package/dist/providers/googlePlay/createGooglePlayListingDiagnostics.js.map +1 -0
- package/dist/providers/googlePlay/googlePlayListingUrls.d.ts +5 -0
- package/dist/providers/googlePlay/googlePlayListingUrls.d.ts.map +1 -0
- package/dist/providers/googlePlay/googlePlayListingUrls.js +21 -0
- package/dist/providers/googlePlay/googlePlayListingUrls.js.map +1 -0
- package/dist/providers/googlePlay/googlePlayStoreListingFields.d.ts +2 -0
- package/dist/providers/googlePlay/googlePlayStoreListingFields.d.ts.map +1 -0
- package/dist/providers/googlePlay/googlePlayStoreListingFields.js +7 -0
- package/dist/providers/googlePlay/googlePlayStoreListingFields.js.map +1 -0
- package/dist/providers/googlePlay/inspectGooglePlayStoreListing.d.ts +15 -0
- package/dist/providers/googlePlay/inspectGooglePlayStoreListing.d.ts.map +1 -0
- package/dist/providers/googlePlay/inspectGooglePlayStoreListing.js +105 -0
- package/dist/providers/googlePlay/inspectGooglePlayStoreListing.js.map +1 -0
- package/dist/providers/googlePlay/listGooglePlayImageHashes.d.ts +2 -0
- package/dist/providers/googlePlay/listGooglePlayImageHashes.d.ts.map +1 -0
- package/dist/providers/googlePlay/listGooglePlayImageHashes.js +2 -0
- package/dist/providers/googlePlay/listGooglePlayImageHashes.js.map +1 -0
- package/dist/providers/googlePlay/mapGooglePlayImageType.d.ts +2 -0
- package/dist/providers/googlePlay/mapGooglePlayImageType.d.ts.map +1 -0
- package/dist/providers/googlePlay/mapGooglePlayImageType.js +21 -0
- package/dist/providers/googlePlay/mapGooglePlayImageType.js.map +1 -0
- package/dist/providers/googlePlay/parseGooglePlayListings.d.ts +3 -0
- package/dist/providers/googlePlay/parseGooglePlayListings.d.ts.map +1 -0
- package/dist/providers/googlePlay/parseGooglePlayListings.js +47 -0
- package/dist/providers/googlePlay/parseGooglePlayListings.js.map +1 -0
- package/dist/providers/googlePlay/readGooglePlayAssetSets.d.ts +11 -0
- package/dist/providers/googlePlay/readGooglePlayAssetSets.d.ts.map +1 -0
- package/dist/providers/googlePlay/readGooglePlayAssetSets.js +32 -0
- package/dist/providers/googlePlay/readGooglePlayAssetSets.js.map +1 -0
- package/dist/providers/googlePlay/readGooglePlayImages.d.ts +10 -0
- package/dist/providers/googlePlay/readGooglePlayImages.d.ts.map +1 -0
- package/dist/providers/googlePlay/readGooglePlayImages.js +31 -0
- package/dist/providers/googlePlay/readGooglePlayImages.js.map +1 -0
- package/dist/providers/googlePlay/replaceGooglePlayImages.d.ts +12 -0
- package/dist/providers/googlePlay/replaceGooglePlayImages.d.ts.map +1 -0
- package/dist/providers/googlePlay/replaceGooglePlayImages.js +35 -0
- package/dist/providers/googlePlay/replaceGooglePlayImages.js.map +1 -0
- package/dist/providers/googlePlay/writeGooglePlayListing.d.ts +12 -0
- package/dist/providers/googlePlay/writeGooglePlayListing.d.ts.map +1 -0
- package/dist/providers/googlePlay/writeGooglePlayListing.js +21 -0
- package/dist/providers/googlePlay/writeGooglePlayListing.js.map +1 -0
- package/dist/targets/ios/createIosDeploymentRevision.d.ts +3 -0
- package/dist/targets/ios/createIosDeploymentRevision.d.ts.map +1 -0
- package/dist/targets/ios/createIosDeploymentRevision.js +10 -0
- package/dist/targets/ios/createIosDeploymentRevision.js.map +1 -0
- package/dist/targets/ios/createIosTargetPlanContributor.d.ts +3 -0
- package/dist/targets/ios/createIosTargetPlanContributor.d.ts.map +1 -0
- package/dist/targets/ios/createIosTargetPlanContributor.js +26 -0
- package/dist/targets/ios/createIosTargetPlanContributor.js.map +1 -0
- package/dist/targets/ios/isIosDeploymentIntentValid.d.ts +3 -0
- package/dist/targets/ios/isIosDeploymentIntentValid.d.ts.map +1 -0
- package/dist/targets/ios/isIosDeploymentIntentValid.js +4 -0
- package/dist/targets/ios/isIosDeploymentIntentValid.js.map +1 -0
- package/dist/targets/ios/normalizeIosProviders.d.ts +16 -0
- package/dist/targets/ios/normalizeIosProviders.d.ts.map +1 -0
- package/dist/targets/ios/normalizeIosProviders.js +16 -0
- package/dist/targets/ios/normalizeIosProviders.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { trackAppStoreConnectRequests } from './AppStoreConnectRequestTracker';
|
|
2
|
+
import { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';
|
|
3
|
+
import { verifyAppStoreVersionBuild } from './verifyAppStoreVersionBuild';
|
|
4
|
+
export async function verifyAppStoreConnectPublication(options) {
|
|
5
|
+
const access = await resolveAppStoreConnectToken(options);
|
|
6
|
+
if (!access.ok)
|
|
7
|
+
return { status: 'action-required', action: access.action };
|
|
8
|
+
const tracked = trackAppStoreConnectRequests(options.request);
|
|
9
|
+
const verified = await verifyAppStoreVersionBuild({
|
|
10
|
+
versionId: options.publication.versionId,
|
|
11
|
+
buildId: options.publication.buildId,
|
|
12
|
+
buildNumber: options.publication.buildNumber,
|
|
13
|
+
token: access.token,
|
|
14
|
+
request: tracked.request,
|
|
15
|
+
});
|
|
16
|
+
const status = tracked.blockingStatus();
|
|
17
|
+
if (status === 401)
|
|
18
|
+
return authenticationRequired();
|
|
19
|
+
if (status === 403)
|
|
20
|
+
return permissionRequired();
|
|
21
|
+
return { status: 'completed', verification: verified ? { ok: true } : failed() };
|
|
22
|
+
}
|
|
23
|
+
function authenticationRequired() {
|
|
24
|
+
return {
|
|
25
|
+
status: 'action-required',
|
|
26
|
+
action: {
|
|
27
|
+
type: 'authentication',
|
|
28
|
+
provider: 'app-store-connect',
|
|
29
|
+
target: 'ios',
|
|
30
|
+
code: 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED',
|
|
31
|
+
message: 'App Store Connect API-key authentication is required for iOS deployment.',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function permissionRequired() {
|
|
36
|
+
return {
|
|
37
|
+
status: 'action-required',
|
|
38
|
+
action: {
|
|
39
|
+
type: 'manual-action',
|
|
40
|
+
target: 'ios',
|
|
41
|
+
provider: 'app-store-connect',
|
|
42
|
+
code: 'APP_STORE_CONNECT_PERMISSION_REQUIRED',
|
|
43
|
+
message: 'The App Store Connect team API key needs permission for iOS deployment.',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function failed() {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
issues: [
|
|
51
|
+
{
|
|
52
|
+
code: 'APP_STORE_VERSION_BUILD_NOT_ATTACHED',
|
|
53
|
+
message: 'The processed iOS build is not attached to the expected App Store version.',
|
|
54
|
+
target: 'ios',
|
|
55
|
+
provider: 'app-store-connect',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=verifyAppStoreConnectPublication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAppStoreConnectPublication.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/verifyAppStoreConnectPublication.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAG/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAM1E,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAOtD;IACC,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5E,MAAM,OAAO,GAAG,4BAA4B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;QAChD,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS;QACxC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW;QAC5C,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACxC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,sBAAsB,EAAE,CAAC;IACpD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,kBAAkB,EAAE,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;AACnF,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE;YACN,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,mBAAmB;YAC7B,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,2CAA2C;YACjD,OAAO,EAAE,0EAA0E;SACpF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE;YACN,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE,uCAAuC;YAC7C,OAAO,EAAE,yEAAyE;SACnF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM;IACb,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,sCAAsC;gBAC5C,OAAO,EAAE,4EAA4E;gBACrF,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,mBAAmB;aAC9B;SACF;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';\nimport type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';\nimport type { DeploymentVerificationResult } from '../../domain/DeploymentVerificationResult';\nimport type { AppStoreConnectPublication } from './AppStoreConnectPublicationResult';\nimport { trackAppStoreConnectRequests } from './AppStoreConnectRequestTracker';\nimport type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';\nimport type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';\nimport { verifyAppStoreVersionBuild } from './verifyAppStoreVersionBuild';\n\nexport type AppStoreConnectVerificationResult =\n | { readonly status: 'completed'; readonly verification: DeploymentVerificationResult }\n | { readonly status: 'action-required'; readonly action: DeploymentRequiredAction };\n\nexport async function verifyAppStoreConnectPublication(options: {\n readonly publication: AppStoreConnectPublication;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly createToken: AppStoreConnectTokenFactory;\n readonly request: AppStoreConnectTransport;\n readonly now: Date;\n}): Promise<AppStoreConnectVerificationResult> {\n const access = await resolveAppStoreConnectToken(options);\n if (!access.ok) return { status: 'action-required', action: access.action };\n const tracked = trackAppStoreConnectRequests(options.request);\n const verified = await verifyAppStoreVersionBuild({\n versionId: options.publication.versionId,\n buildId: options.publication.buildId,\n buildNumber: options.publication.buildNumber,\n token: access.token,\n request: tracked.request,\n });\n const status = tracked.blockingStatus();\n if (status === 401) return authenticationRequired();\n if (status === 403) return permissionRequired();\n return { status: 'completed', verification: verified ? { ok: true } : failed() };\n}\n\nfunction authenticationRequired(): AppStoreConnectVerificationResult {\n return {\n status: 'action-required',\n action: {\n type: 'authentication',\n provider: 'app-store-connect',\n target: 'ios',\n code: 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED',\n message: 'App Store Connect API-key authentication is required for iOS deployment.',\n },\n };\n}\n\nfunction permissionRequired(): AppStoreConnectVerificationResult {\n return {\n status: 'action-required',\n action: {\n type: 'manual-action',\n target: 'ios',\n provider: 'app-store-connect',\n code: 'APP_STORE_CONNECT_PERMISSION_REQUIRED',\n message: 'The App Store Connect team API key needs permission for iOS deployment.',\n },\n };\n}\n\nfunction failed(): DeploymentVerificationResult {\n return {\n ok: false,\n issues: [\n {\n code: 'APP_STORE_VERSION_BUILD_NOT_ATTACHED',\n message: 'The processed iOS build is not attached to the expected App Store version.',\n target: 'ios',\n provider: 'app-store-connect',\n },\n ],\n };\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
|
|
2
|
+
export declare function verifyAppStoreVersionBuild(options: {
|
|
3
|
+
readonly versionId: string;
|
|
4
|
+
readonly buildId: string;
|
|
5
|
+
readonly buildNumber: string;
|
|
6
|
+
readonly token: string;
|
|
7
|
+
readonly request: AppStoreConnectTransport;
|
|
8
|
+
}): Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=verifyAppStoreVersionBuild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAppStoreVersionBuild.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/verifyAppStoreVersionBuild.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBnB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { appStoreConnectVersionBuildUrl } from './appStoreConnectUrls';
|
|
2
|
+
export async function verifyAppStoreVersionBuild(options) {
|
|
3
|
+
const response = await options.request({
|
|
4
|
+
method: 'GET',
|
|
5
|
+
url: appStoreConnectVersionBuildUrl(options.versionId),
|
|
6
|
+
token: options.token,
|
|
7
|
+
});
|
|
8
|
+
if (response.status < 200 || response.status >= 300)
|
|
9
|
+
return false;
|
|
10
|
+
try {
|
|
11
|
+
const value = JSON.parse(response.body);
|
|
12
|
+
if (!isRecord(value) || !isRecord(value.data) || !isRecord(value.data.attributes))
|
|
13
|
+
return false;
|
|
14
|
+
return (value.data.type === 'builds' &&
|
|
15
|
+
value.data.id === options.buildId &&
|
|
16
|
+
value.data.attributes.version === options.buildNumber &&
|
|
17
|
+
value.data.attributes.processingState === 'VALID');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function isRecord(value) {
|
|
24
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=verifyAppStoreVersionBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAppStoreVersionBuild.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/verifyAppStoreVersionBuild.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAMhD;IACC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACrC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,8BAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;QACtD,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAY,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAChG,OAAO,CACL,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO;YACjC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW;YACrD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,OAAO,CAClD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["import type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { appStoreConnectVersionBuildUrl } from './appStoreConnectUrls';\n\nexport async function verifyAppStoreVersionBuild(options: {\n readonly versionId: string;\n readonly buildId: string;\n readonly buildNumber: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<boolean> {\n const response = await options.request({\n method: 'GET',\n url: appStoreConnectVersionBuildUrl(options.versionId),\n token: options.token,\n });\n if (response.status < 200 || response.status >= 300) return false;\n try {\n const value = JSON.parse(response.body) as unknown;\n if (!isRecord(value) || !isRecord(value.data) || !isRecord(value.data.attributes)) return false;\n return (\n value.data.type === 'builds' &&\n value.data.id === options.buildId &&\n value.data.attributes.version === options.buildNumber &&\n value.data.attributes.processingState === 'VALID'\n );\n } catch {\n return false;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
|
|
2
|
+
export interface ProcessedAppStoreBuild {
|
|
3
|
+
readonly buildId: string;
|
|
4
|
+
readonly buildNumber: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function waitForAppStoreBuildUpload(options: {
|
|
7
|
+
readonly buildUploadId: string;
|
|
8
|
+
readonly expectedBuildNumber: string;
|
|
9
|
+
readonly token: string;
|
|
10
|
+
readonly request: AppStoreConnectTransport;
|
|
11
|
+
readonly wait: () => Promise<void>;
|
|
12
|
+
readonly maxAttempts: number;
|
|
13
|
+
}): Promise<ProcessedAppStoreBuild | null>;
|
|
14
|
+
//# sourceMappingURL=waitForAppStoreBuildUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitForAppStoreBuildUpload.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/waitForAppStoreBuildUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAQzC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { appStoreConnectBuildUploadUrl } from './appStoreConnectUrls';
|
|
2
|
+
export async function waitForAppStoreBuildUpload(options) {
|
|
3
|
+
for (let attempt = 0; attempt < options.maxAttempts; attempt += 1) {
|
|
4
|
+
const result = await readBuildUpload(options);
|
|
5
|
+
if (result.status === 'complete')
|
|
6
|
+
return result.build;
|
|
7
|
+
if (result.status === 'failed')
|
|
8
|
+
return null;
|
|
9
|
+
if (attempt + 1 < options.maxAttempts)
|
|
10
|
+
await options.wait();
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
async function readBuildUpload(options) {
|
|
15
|
+
const response = await options.request({
|
|
16
|
+
method: 'GET',
|
|
17
|
+
url: appStoreConnectBuildUploadUrl(options.buildUploadId),
|
|
18
|
+
token: options.token,
|
|
19
|
+
});
|
|
20
|
+
if (response.status < 200 || response.status >= 300)
|
|
21
|
+
return { status: 'failed' };
|
|
22
|
+
try {
|
|
23
|
+
return parseBuildUpload(JSON.parse(response.body), options.expectedBuildNumber);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { status: 'failed' };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function parseBuildUpload(value, expectedBuildNumber) {
|
|
30
|
+
if (!isRecord(value) || !isRecord(value.data) || !isRecord(value.data.attributes)) {
|
|
31
|
+
return { status: 'failed' };
|
|
32
|
+
}
|
|
33
|
+
const state = parseState(value.data.attributes.state);
|
|
34
|
+
if (state === 'FAILED')
|
|
35
|
+
return { status: 'failed' };
|
|
36
|
+
if (state !== 'COMPLETE')
|
|
37
|
+
return { status: 'pending' };
|
|
38
|
+
const build = findBuild(value.included, expectedBuildNumber);
|
|
39
|
+
return build === null ? { status: 'failed' } : { status: 'complete', build };
|
|
40
|
+
}
|
|
41
|
+
function parseState(value) {
|
|
42
|
+
if (typeof value === 'string')
|
|
43
|
+
return value;
|
|
44
|
+
return isRecord(value) && typeof value.state === 'string' ? value.state : null;
|
|
45
|
+
}
|
|
46
|
+
function findBuild(value, expectedBuildNumber) {
|
|
47
|
+
if (!Array.isArray(value))
|
|
48
|
+
return null;
|
|
49
|
+
for (const candidate of value) {
|
|
50
|
+
const build = parseBuild(candidate, expectedBuildNumber);
|
|
51
|
+
if (build !== null)
|
|
52
|
+
return build;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
function parseBuild(value, expectedBuildNumber) {
|
|
57
|
+
if (!isRecord(value) || value.type !== 'builds' || !isRecord(value.attributes))
|
|
58
|
+
return null;
|
|
59
|
+
if (value.attributes.version !== expectedBuildNumber || !isNonEmptyString(value.id))
|
|
60
|
+
return null;
|
|
61
|
+
return { buildId: value.id, buildNumber: expectedBuildNumber };
|
|
62
|
+
}
|
|
63
|
+
function isRecord(value) {
|
|
64
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
65
|
+
}
|
|
66
|
+
function isNonEmptyString(value) {
|
|
67
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=waitForAppStoreBuildUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitForAppStoreBuildUpload.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/waitForAppStoreBuildUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAOtE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAOhD;IACC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW;YAAE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,KAAK,UAAU,eAAe,CAAC,OAK9B;IACC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACrC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,6BAA6B,CAAC,OAAO,CAAC,aAAa,CAAC;QACzD,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACjF,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,mBAA2B;IACnE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC7D,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,mBAA2B;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,KAAK,MAAM,SAAS,IAAI,KAAkB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,mBAA2B;IAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5F,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,KAAK,mBAAmB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { appStoreConnectBuildUploadUrl } from './appStoreConnectUrls';\n\nexport interface ProcessedAppStoreBuild {\n readonly buildId: string;\n readonly buildNumber: string;\n}\n\nexport async function waitForAppStoreBuildUpload(options: {\n readonly buildUploadId: string;\n readonly expectedBuildNumber: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n readonly wait: () => Promise<void>;\n readonly maxAttempts: number;\n}): Promise<ProcessedAppStoreBuild | null> {\n for (let attempt = 0; attempt < options.maxAttempts; attempt += 1) {\n const result = await readBuildUpload(options);\n if (result.status === 'complete') return result.build;\n if (result.status === 'failed') return null;\n if (attempt + 1 < options.maxAttempts) await options.wait();\n }\n return null;\n}\n\ntype BuildUploadRead =\n | { readonly status: 'pending' }\n | { readonly status: 'failed' }\n | { readonly status: 'complete'; readonly build: ProcessedAppStoreBuild };\n\nasync function readBuildUpload(options: {\n readonly buildUploadId: string;\n readonly expectedBuildNumber: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<BuildUploadRead> {\n const response = await options.request({\n method: 'GET',\n url: appStoreConnectBuildUploadUrl(options.buildUploadId),\n token: options.token,\n });\n if (response.status < 200 || response.status >= 300) return { status: 'failed' };\n try {\n return parseBuildUpload(JSON.parse(response.body) as unknown, options.expectedBuildNumber);\n } catch {\n return { status: 'failed' };\n }\n}\n\nfunction parseBuildUpload(value: unknown, expectedBuildNumber: string): BuildUploadRead {\n if (!isRecord(value) || !isRecord(value.data) || !isRecord(value.data.attributes)) {\n return { status: 'failed' };\n }\n const state = parseState(value.data.attributes.state);\n if (state === 'FAILED') return { status: 'failed' };\n if (state !== 'COMPLETE') return { status: 'pending' };\n const build = findBuild(value.included, expectedBuildNumber);\n return build === null ? { status: 'failed' } : { status: 'complete', build };\n}\n\nfunction parseState(value: unknown): string | null {\n if (typeof value === 'string') return value;\n return isRecord(value) && typeof value.state === 'string' ? value.state : null;\n}\n\nfunction findBuild(value: unknown, expectedBuildNumber: string): ProcessedAppStoreBuild | null {\n if (!Array.isArray(value)) return null;\n for (const candidate of value as unknown[]) {\n const build = parseBuild(candidate, expectedBuildNumber);\n if (build !== null) return build;\n }\n return null;\n}\n\nfunction parseBuild(value: unknown, expectedBuildNumber: string): ProcessedAppStoreBuild | null {\n if (!isRecord(value) || value.type !== 'builds' || !isRecord(value.attributes)) return null;\n if (value.attributes.version !== expectedBuildNumber || !isNonEmptyString(value.id)) return null;\n return { buildId: value.id, buildNumber: expectedBuildNumber };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface EasIosBuildArtifact {
|
|
2
|
+
readonly buildId: string;
|
|
3
|
+
readonly buildProfile: string;
|
|
4
|
+
readonly fingerprint: string;
|
|
5
|
+
readonly version: string;
|
|
6
|
+
readonly buildNumber: string;
|
|
7
|
+
readonly archiveUrl: string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=EasIosBuildArtifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EasIosBuildArtifact.d.ts","sourceRoot":"","sources":["../../../../src/providers/eas/ios/EasIosBuildArtifact.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EasIosBuildArtifact.js","sourceRoot":"","sources":["../../../../src/providers/eas/ios/EasIosBuildArtifact.ts"],"names":[],"mappings":"","sourcesContent":["export interface EasIosBuildArtifact {\n readonly buildId: string;\n readonly buildProfile: string;\n readonly fingerprint: string;\n readonly version: string;\n readonly buildNumber: string;\n readonly archiveUrl: string;\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DeploymentCredentialReference } from '../../../domain/DeploymentCredentialReference';
|
|
2
|
+
import type { DeploymentFailure } from '../../../domain/DeploymentFailure';
|
|
3
|
+
import type { DeploymentRequiredAction } from '../../../domain/DeploymentRequiredAction';
|
|
4
|
+
import type { DeploymentSecretResolver } from '../../../domain/DeploymentSecretResolver';
|
|
5
|
+
import type { DeploymentProcessRunner } from '../../../runtime/process/DeploymentProcessRunner';
|
|
6
|
+
import type { EasIosBuildArtifact } from './EasIosBuildArtifact';
|
|
7
|
+
export type EasIosBuildResult = {
|
|
8
|
+
readonly status: 'completed';
|
|
9
|
+
readonly artifact: EasIosBuildArtifact;
|
|
10
|
+
} | {
|
|
11
|
+
readonly status: 'action-required';
|
|
12
|
+
readonly action: DeploymentRequiredAction;
|
|
13
|
+
} | {
|
|
14
|
+
readonly status: 'failed';
|
|
15
|
+
readonly failure: DeploymentFailure;
|
|
16
|
+
};
|
|
17
|
+
export declare function buildIosWithEas(options: {
|
|
18
|
+
readonly projectRoot: string;
|
|
19
|
+
readonly buildProfile: string;
|
|
20
|
+
readonly expectedFingerprint: string;
|
|
21
|
+
readonly expectedVersion: string;
|
|
22
|
+
readonly credentials: readonly DeploymentCredentialReference[];
|
|
23
|
+
readonly resolveSecret: DeploymentSecretResolver;
|
|
24
|
+
readonly runProcess: DeploymentProcessRunner;
|
|
25
|
+
}): Promise<EasIosBuildResult>;
|
|
26
|
+
//# sourceMappingURL=buildIosWithEas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildIosWithEas.d.ts","sourceRoot":"","sources":["../../../../src/providers/eas/ios/buildIosWithEas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAEhG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEvE,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;CAC9C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyB7B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { resolveEasProcessEnvironment } from '../resolveEasProcessEnvironment';
|
|
2
|
+
import { parseEasIosBuild } from './parseEasIosBuild';
|
|
3
|
+
export async function buildIosWithEas(options) {
|
|
4
|
+
const environment = await resolveEasProcessEnvironment({ ...options, target: 'ios' });
|
|
5
|
+
if (!environment.ok)
|
|
6
|
+
return { status: 'action-required', action: environment.action };
|
|
7
|
+
const result = await options.runProcess({
|
|
8
|
+
command: 'eas',
|
|
9
|
+
args: buildArgs(options.buildProfile),
|
|
10
|
+
cwd: options.projectRoot,
|
|
11
|
+
...(environment.env === undefined ? {} : { env: environment.env }),
|
|
12
|
+
});
|
|
13
|
+
if (result.exitCode !== 0)
|
|
14
|
+
return failedBuild(result.stderr);
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(result.stdout);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return failure('EAS_IOS_BUILD_INVALID', 'EAS iOS build returned an invalid result.');
|
|
21
|
+
}
|
|
22
|
+
const artifact = parseEasIosBuild(parsed, options.expectedFingerprint, options.buildProfile, options.expectedVersion);
|
|
23
|
+
return artifact === null
|
|
24
|
+
? failure('EAS_IOS_BUILD_INVALID', 'EAS iOS build returned an invalid result.')
|
|
25
|
+
: { status: 'completed', artifact };
|
|
26
|
+
}
|
|
27
|
+
function buildArgs(buildProfile) {
|
|
28
|
+
return [
|
|
29
|
+
'build',
|
|
30
|
+
'--platform',
|
|
31
|
+
'ios',
|
|
32
|
+
'--profile',
|
|
33
|
+
buildProfile,
|
|
34
|
+
'--json',
|
|
35
|
+
'--non-interactive',
|
|
36
|
+
'--wait',
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
function failedBuild(stderr) {
|
|
40
|
+
const lower = stderr.toLowerCase();
|
|
41
|
+
if (lower.includes('provisioning profile') ||
|
|
42
|
+
lower.includes('distribution certificate') ||
|
|
43
|
+
lower.includes('credential')) {
|
|
44
|
+
return {
|
|
45
|
+
status: 'action-required',
|
|
46
|
+
action: {
|
|
47
|
+
type: 'manual-action',
|
|
48
|
+
target: 'ios',
|
|
49
|
+
provider: 'eas',
|
|
50
|
+
code: 'EAS_IOS_SIGNING_SETUP_REQUIRED',
|
|
51
|
+
message: 'iOS signing credentials require EAS account or project setup.',
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return failure('EAS_IOS_BUILD_FAILED', 'EAS iOS build failed.');
|
|
56
|
+
}
|
|
57
|
+
function failure(code, message) {
|
|
58
|
+
return { status: 'failed', failure: { code, message, target: 'ios', provider: 'eas' } };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=buildIosWithEas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildIosWithEas.js","sourceRoot":"","sources":["../../../../src/providers/eas/ios/buildIosWithEas.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOtD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAQrC;IACC,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACtC,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QACrC,GAAG,EAAE,OAAO,CAAC,WAAW;QACxB,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC;KACnE,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,uBAAuB,EAAE,2CAA2C,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,MAAM,EACN,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,eAAe,CACxB,CAAC;IACF,OAAO,QAAQ,KAAK,IAAI;QACtB,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,2CAA2C,CAAC;QAC/E,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,YAAoB;IACrC,OAAO;QACL,OAAO;QACP,YAAY;QACZ,KAAK;QACL,WAAW;QACX,YAAY;QACZ,QAAQ;QACR,mBAAmB;QACnB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IACE,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACtC,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC1C,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC5B,CAAC;QACD,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE;gBACN,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,gCAAgC;gBACtC,OAAO,EAAE,+DAA+D;aACzE;SACF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,OAAe;IAC5C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;AAC1F,CAAC","sourcesContent":["import type { DeploymentCredentialReference } from '../../../domain/DeploymentCredentialReference';\nimport type { DeploymentFailure } from '../../../domain/DeploymentFailure';\nimport type { DeploymentRequiredAction } from '../../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../../domain/DeploymentSecretResolver';\nimport type { DeploymentProcessRunner } from '../../../runtime/process/DeploymentProcessRunner';\nimport { resolveEasProcessEnvironment } from '../resolveEasProcessEnvironment';\nimport type { EasIosBuildArtifact } from './EasIosBuildArtifact';\nimport { parseEasIosBuild } from './parseEasIosBuild';\n\nexport type EasIosBuildResult =\n | { readonly status: 'completed'; readonly artifact: EasIosBuildArtifact }\n | { readonly status: 'action-required'; readonly action: DeploymentRequiredAction }\n | { readonly status: 'failed'; readonly failure: DeploymentFailure };\n\nexport async function buildIosWithEas(options: {\n readonly projectRoot: string;\n readonly buildProfile: string;\n readonly expectedFingerprint: string;\n readonly expectedVersion: string;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly runProcess: DeploymentProcessRunner;\n}): Promise<EasIosBuildResult> {\n const environment = await resolveEasProcessEnvironment({ ...options, target: 'ios' });\n if (!environment.ok) return { status: 'action-required', action: environment.action };\n const result = await options.runProcess({\n command: 'eas',\n args: buildArgs(options.buildProfile),\n cwd: options.projectRoot,\n ...(environment.env === undefined ? {} : { env: environment.env }),\n });\n if (result.exitCode !== 0) return failedBuild(result.stderr);\n let parsed: unknown;\n try {\n parsed = JSON.parse(result.stdout);\n } catch {\n return failure('EAS_IOS_BUILD_INVALID', 'EAS iOS build returned an invalid result.');\n }\n const artifact = parseEasIosBuild(\n parsed,\n options.expectedFingerprint,\n options.buildProfile,\n options.expectedVersion,\n );\n return artifact === null\n ? failure('EAS_IOS_BUILD_INVALID', 'EAS iOS build returned an invalid result.')\n : { status: 'completed', artifact };\n}\n\nfunction buildArgs(buildProfile: string): readonly string[] {\n return [\n 'build',\n '--platform',\n 'ios',\n '--profile',\n buildProfile,\n '--json',\n '--non-interactive',\n '--wait',\n ];\n}\n\nfunction failedBuild(stderr: string): EasIosBuildResult {\n const lower = stderr.toLowerCase();\n if (\n lower.includes('provisioning profile') ||\n lower.includes('distribution certificate') ||\n lower.includes('credential')\n ) {\n return {\n status: 'action-required',\n action: {\n type: 'manual-action',\n target: 'ios',\n provider: 'eas',\n code: 'EAS_IOS_SIGNING_SETUP_REQUIRED',\n message: 'iOS signing credentials require EAS account or project setup.',\n },\n };\n }\n return failure('EAS_IOS_BUILD_FAILED', 'EAS iOS build failed.');\n}\n\nfunction failure(code: string, message: string): EasIosBuildResult {\n return { status: 'failed', failure: { code, message, target: 'ios', provider: 'eas' } };\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DeploymentFailure } from '../../../domain/DeploymentFailure';
|
|
2
|
+
import type { DeploymentProcessRunner } from '../../../runtime/process/DeploymentProcessRunner';
|
|
3
|
+
export type LocalIosFingerprintResult = {
|
|
4
|
+
readonly status: 'completed';
|
|
5
|
+
readonly fingerprint: string;
|
|
6
|
+
} | {
|
|
7
|
+
readonly status: 'failed';
|
|
8
|
+
readonly failure: DeploymentFailure;
|
|
9
|
+
};
|
|
10
|
+
export declare function generateLocalIosFingerprint(options: {
|
|
11
|
+
readonly projectRoot: string;
|
|
12
|
+
readonly profileEnvironment: Readonly<Record<string, string>>;
|
|
13
|
+
readonly runProcess: DeploymentProcessRunner;
|
|
14
|
+
}): Promise<LocalIosFingerprintResult>;
|
|
15
|
+
//# sourceMappingURL=generateLocalIosFingerprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateLocalIosFingerprint.d.ts","sourceRoot":"","sources":["../../../../src/providers/eas/ios/generateLocalIosFingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAEhG,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAavE,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;CAC9C,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAgBrC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const FINGERPRINT_SCRIPT = `
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
import * as Fingerprint from 'expo/fingerprint';
|
|
5
|
+
const marker = 'ios/Podfile';
|
|
6
|
+
const generic = existsSync(marker) && spawnSync('git', ['check-ignore', '--quiet', marker], { cwd: process.cwd() }).status !== 0;
|
|
7
|
+
const options = { platforms: ['ios'], silent: true, ...(generic ? {} : { ignorePaths: ['android/**/*', 'ios/**/*'] }) };
|
|
8
|
+
const result = await Fingerprint.createFingerprintAsync(process.cwd(), options);
|
|
9
|
+
process.stdout.write(JSON.stringify({ hash: result.hash }));
|
|
10
|
+
`;
|
|
11
|
+
export async function generateLocalIosFingerprint(options) {
|
|
12
|
+
const result = await options.runProcess({
|
|
13
|
+
command: 'node',
|
|
14
|
+
args: ['--input-type=module', '--eval', FINGERPRINT_SCRIPT],
|
|
15
|
+
cwd: options.projectRoot,
|
|
16
|
+
env: options.profileEnvironment,
|
|
17
|
+
});
|
|
18
|
+
if (result.exitCode !== 0)
|
|
19
|
+
return failure();
|
|
20
|
+
let parsed;
|
|
21
|
+
try {
|
|
22
|
+
parsed = JSON.parse(result.stdout);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return failure();
|
|
26
|
+
}
|
|
27
|
+
if (!isFingerprintResult(parsed))
|
|
28
|
+
return failure();
|
|
29
|
+
return { status: 'completed', fingerprint: parsed.hash };
|
|
30
|
+
}
|
|
31
|
+
function isFingerprintResult(value) {
|
|
32
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
33
|
+
return false;
|
|
34
|
+
const hash = value.hash;
|
|
35
|
+
return typeof hash === 'string' && /^[a-f\d]{32,128}$/i.test(hash);
|
|
36
|
+
}
|
|
37
|
+
function failure() {
|
|
38
|
+
return {
|
|
39
|
+
status: 'failed',
|
|
40
|
+
failure: {
|
|
41
|
+
code: 'IOS_FINGERPRINT_FAILED',
|
|
42
|
+
message: 'iOS project fingerprint could not be generated.',
|
|
43
|
+
target: 'ios',
|
|
44
|
+
provider: 'eas',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=generateLocalIosFingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateLocalIosFingerprint.js","sourceRoot":"","sources":["../../../../src/providers/eas/ios/generateLocalIosFingerprint.ts"],"names":[],"mappings":"AAOA,MAAM,kBAAkB,GAAG;;;;;;;;;CAS1B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAIjD;IACC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACtC,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,CAAC;QAC3D,GAAG,EAAE,OAAO,CAAC,WAAW;QACxB,GAAG,EAAE,OAAO,CAAC,kBAAkB;KAChC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAC5C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;IACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,OAAO;IACd,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,iDAAiD;YAC1D,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { DeploymentFailure } from '../../../domain/DeploymentFailure';\nimport type { DeploymentProcessRunner } from '../../../runtime/process/DeploymentProcessRunner';\n\nexport type LocalIosFingerprintResult =\n | { readonly status: 'completed'; readonly fingerprint: string }\n | { readonly status: 'failed'; readonly failure: DeploymentFailure };\n\nconst FINGERPRINT_SCRIPT = `\nimport { existsSync } from 'node:fs';\nimport { spawnSync } from 'node:child_process';\nimport * as Fingerprint from 'expo/fingerprint';\nconst marker = 'ios/Podfile';\nconst generic = existsSync(marker) && spawnSync('git', ['check-ignore', '--quiet', marker], { cwd: process.cwd() }).status !== 0;\nconst options = { platforms: ['ios'], silent: true, ...(generic ? {} : { ignorePaths: ['android/**/*', 'ios/**/*'] }) };\nconst result = await Fingerprint.createFingerprintAsync(process.cwd(), options);\nprocess.stdout.write(JSON.stringify({ hash: result.hash }));\n`;\n\nexport async function generateLocalIosFingerprint(options: {\n readonly projectRoot: string;\n readonly profileEnvironment: Readonly<Record<string, string>>;\n readonly runProcess: DeploymentProcessRunner;\n}): Promise<LocalIosFingerprintResult> {\n const result = await options.runProcess({\n command: 'node',\n args: ['--input-type=module', '--eval', FINGERPRINT_SCRIPT],\n cwd: options.projectRoot,\n env: options.profileEnvironment,\n });\n if (result.exitCode !== 0) return failure();\n let parsed: unknown;\n try {\n parsed = JSON.parse(result.stdout);\n } catch {\n return failure();\n }\n if (!isFingerprintResult(parsed)) return failure();\n return { status: 'completed', fingerprint: parsed.hash };\n}\n\nfunction isFingerprintResult(value: unknown): value is { readonly hash: string } {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const hash = (value as Record<string, unknown>).hash;\n return typeof hash === 'string' && /^[a-f\\d]{32,128}$/i.test(hash);\n}\n\nfunction failure(): LocalIosFingerprintResult {\n return {\n status: 'failed',\n failure: {\n code: 'IOS_FINGERPRINT_FAILED',\n message: 'iOS project fingerprint could not be generated.',\n target: 'ios',\n provider: 'eas',\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DeploymentCredentialReference } from '../../../domain/DeploymentCredentialReference';
|
|
2
|
+
import type { DeploymentFailure } from '../../../domain/DeploymentFailure';
|
|
3
|
+
import type { DeploymentRequiredAction } from '../../../domain/DeploymentRequiredAction';
|
|
4
|
+
import type { DeploymentSecretResolver } from '../../../domain/DeploymentSecretResolver';
|
|
5
|
+
import type { DeploymentProcessRunner } from '../../../runtime/process/DeploymentProcessRunner';
|
|
6
|
+
export interface EasIosConfigSnapshot {
|
|
7
|
+
readonly bundleIdentifier: string;
|
|
8
|
+
readonly profileEnvironment: Readonly<Record<string, string>>;
|
|
9
|
+
}
|
|
10
|
+
export type EasIosConfigResult = {
|
|
11
|
+
readonly status: 'completed';
|
|
12
|
+
readonly config: EasIosConfigSnapshot;
|
|
13
|
+
} | {
|
|
14
|
+
readonly status: 'action-required';
|
|
15
|
+
readonly action: DeploymentRequiredAction;
|
|
16
|
+
} | {
|
|
17
|
+
readonly status: 'failed';
|
|
18
|
+
readonly failure: DeploymentFailure;
|
|
19
|
+
};
|
|
20
|
+
export declare function inspectEasIosConfig(options: {
|
|
21
|
+
readonly projectRoot: string;
|
|
22
|
+
readonly bundleIdentifier: string;
|
|
23
|
+
readonly buildProfile: string;
|
|
24
|
+
readonly credentials: readonly DeploymentCredentialReference[];
|
|
25
|
+
readonly resolveSecret: DeploymentSecretResolver;
|
|
26
|
+
readonly runProcess: DeploymentProcessRunner;
|
|
27
|
+
}): Promise<EasIosConfigResult>;
|
|
28
|
+
//# sourceMappingURL=inspectEasIosConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectEasIosConfig.d.ts","sourceRoot":"","sources":["../../../../src/providers/eas/ios/inspectEasIosConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAIhG,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC/D;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEvE,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;CAC9C,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0B9B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { resolveEasProcessEnvironment } from '../resolveEasProcessEnvironment';
|
|
2
|
+
import { parseEasIosConfig } from './parseEasIosConfig';
|
|
3
|
+
export async function inspectEasIosConfig(options) {
|
|
4
|
+
if (options.buildProfile.trim().length === 0)
|
|
5
|
+
return invalidProfile();
|
|
6
|
+
const environment = await resolveEasProcessEnvironment({ ...options, target: 'ios' });
|
|
7
|
+
if (!environment.ok)
|
|
8
|
+
return { status: 'action-required', action: environment.action };
|
|
9
|
+
const result = await options.runProcess({
|
|
10
|
+
command: 'eas',
|
|
11
|
+
args: [
|
|
12
|
+
'config',
|
|
13
|
+
'--platform',
|
|
14
|
+
'ios',
|
|
15
|
+
'--profile',
|
|
16
|
+
options.buildProfile,
|
|
17
|
+
'--json',
|
|
18
|
+
'--non-interactive',
|
|
19
|
+
],
|
|
20
|
+
cwd: options.projectRoot,
|
|
21
|
+
...(environment.env === undefined ? {} : { env: environment.env }),
|
|
22
|
+
});
|
|
23
|
+
if (result.exitCode !== 0)
|
|
24
|
+
return failure('EAS_IOS_CONFIG_FAILED');
|
|
25
|
+
let parsed;
|
|
26
|
+
try {
|
|
27
|
+
parsed = JSON.parse(result.stdout);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return failure('EAS_IOS_CONFIG_INVALID');
|
|
31
|
+
}
|
|
32
|
+
return parseEasIosConfig(parsed, options.bundleIdentifier);
|
|
33
|
+
}
|
|
34
|
+
function invalidProfile() {
|
|
35
|
+
return failure('INVALID_IOS_BUILD_PROFILE', 'iOS build profile is invalid.');
|
|
36
|
+
}
|
|
37
|
+
function failure(code, message = 'EAS iOS project configuration could not be inspected.') {
|
|
38
|
+
return { status: 'failed', failure: { code, message, target: 'ios', provider: 'eas' } };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=inspectEasIosConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectEasIosConfig.js","sourceRoot":"","sources":["../../../../src/providers/eas/ios/inspectEasIosConfig.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAYxD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAOzC;IACC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,EAAE,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACtC,OAAO,EAAE,KAAK;QACd,IAAI,EAAE;YACJ,QAAQ;YACR,YAAY;YACZ,KAAK;YACL,WAAW;YACX,OAAO,CAAC,YAAY;YACpB,QAAQ;YACR,mBAAmB;SACpB;QACD,GAAG,EAAE,OAAO,CAAC,WAAW;QACxB,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC;KACnE,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACnE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,2BAA2B,EAAE,+BAA+B,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,OAAO,CACd,IAAY,EACZ,OAAO,GAAG,uDAAuD;IAEjE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;AAC1F,CAAC","sourcesContent":["import type { DeploymentCredentialReference } from '../../../domain/DeploymentCredentialReference';\nimport type { DeploymentFailure } from '../../../domain/DeploymentFailure';\nimport type { DeploymentRequiredAction } from '../../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../../domain/DeploymentSecretResolver';\nimport type { DeploymentProcessRunner } from '../../../runtime/process/DeploymentProcessRunner';\nimport { resolveEasProcessEnvironment } from '../resolveEasProcessEnvironment';\nimport { parseEasIosConfig } from './parseEasIosConfig';\n\nexport interface EasIosConfigSnapshot {\n readonly bundleIdentifier: string;\n readonly profileEnvironment: Readonly<Record<string, string>>;\n}\n\nexport type EasIosConfigResult =\n | { readonly status: 'completed'; readonly config: EasIosConfigSnapshot }\n | { readonly status: 'action-required'; readonly action: DeploymentRequiredAction }\n | { readonly status: 'failed'; readonly failure: DeploymentFailure };\n\nexport async function inspectEasIosConfig(options: {\n readonly projectRoot: string;\n readonly bundleIdentifier: string;\n readonly buildProfile: string;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly runProcess: DeploymentProcessRunner;\n}): Promise<EasIosConfigResult> {\n if (options.buildProfile.trim().length === 0) return invalidProfile();\n const environment = await resolveEasProcessEnvironment({ ...options, target: 'ios' });\n if (!environment.ok) return { status: 'action-required', action: environment.action };\n const result = await options.runProcess({\n command: 'eas',\n args: [\n 'config',\n '--platform',\n 'ios',\n '--profile',\n options.buildProfile,\n '--json',\n '--non-interactive',\n ],\n cwd: options.projectRoot,\n ...(environment.env === undefined ? {} : { env: environment.env }),\n });\n if (result.exitCode !== 0) return failure('EAS_IOS_CONFIG_FAILED');\n let parsed: unknown;\n try {\n parsed = JSON.parse(result.stdout);\n } catch {\n return failure('EAS_IOS_CONFIG_INVALID');\n }\n return parseEasIosConfig(parsed, options.bundleIdentifier);\n}\n\nfunction invalidProfile(): EasIosConfigResult {\n return failure('INVALID_IOS_BUILD_PROFILE', 'iOS build profile is invalid.');\n}\n\nfunction failure(\n code: string,\n message = 'EAS iOS project configuration could not be inspected.',\n): EasIosConfigResult {\n return { status: 'failed', failure: { code, message, target: 'ios', provider: 'eas' } };\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { EasIosBuildArtifact } from './EasIosBuildArtifact';
|
|
2
|
+
export declare function parseEasIosBuild(value: unknown, expectedFingerprint: string, expectedProfile: string, expectedVersion: string): EasIosBuildArtifact | null;
|
|
3
|
+
//# sourceMappingURL=parseEasIosBuild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEasIosBuild.d.ts","sourceRoot":"","sources":["../../../../src/providers/eas/ios/parseEasIosBuild.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,mBAAmB,EAAE,MAAM,EAC3B,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,mBAAmB,GAAG,IAAI,CAgB5B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function parseEasIosBuild(value, expectedFingerprint, expectedProfile, expectedVersion) {
|
|
2
|
+
if (!Array.isArray(value) || value.length !== 1 || !isRecord(value[0]))
|
|
3
|
+
return null;
|
|
4
|
+
const build = value[0];
|
|
5
|
+
if (build.status !== 'FINISHED' || build.platform !== 'IOS')
|
|
6
|
+
return null;
|
|
7
|
+
if (!isNonEmptyString(build.id) || build.buildProfile !== expectedProfile)
|
|
8
|
+
return null;
|
|
9
|
+
if (!isRecord(build.fingerprint) || build.fingerprint.hash !== expectedFingerprint)
|
|
10
|
+
return null;
|
|
11
|
+
if (!isRecord(build.artifacts) || !isHttpUrl(build.artifacts.applicationArchiveUrl))
|
|
12
|
+
return null;
|
|
13
|
+
if (build.appVersion !== expectedVersion || !isNonEmptyString(build.appBuildVersion))
|
|
14
|
+
return null;
|
|
15
|
+
return {
|
|
16
|
+
buildId: build.id,
|
|
17
|
+
buildProfile: expectedProfile,
|
|
18
|
+
fingerprint: expectedFingerprint,
|
|
19
|
+
version: expectedVersion,
|
|
20
|
+
buildNumber: build.appBuildVersion,
|
|
21
|
+
archiveUrl: build.artifacts.applicationArchiveUrl,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function isHttpUrl(value) {
|
|
25
|
+
if (!isNonEmptyString(value))
|
|
26
|
+
return false;
|
|
27
|
+
try {
|
|
28
|
+
const parsed = new URL(value);
|
|
29
|
+
return parsed.protocol === 'https:' || parsed.protocol === 'http:';
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function isRecord(value) {
|
|
36
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
37
|
+
}
|
|
38
|
+
function isNonEmptyString(value) {
|
|
39
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=parseEasIosBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEasIosBuild.js","sourceRoot":"","sources":["../../../../src/providers/eas/ios/parseEasIosBuild.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,KAAc,EACd,mBAA2B,EAC3B,eAAuB,EACvB,eAAuB;IAEvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IACvF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAChG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,IAAI,KAAK,CAAC,UAAU,KAAK,eAAe,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IAClG,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,YAAY,EAAE,eAAe;QAC7B,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,KAAK,CAAC,eAAe;QAClC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,qBAAqB;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import type { EasIosBuildArtifact } from './EasIosBuildArtifact';\n\nexport function parseEasIosBuild(\n value: unknown,\n expectedFingerprint: string,\n expectedProfile: string,\n expectedVersion: string,\n): EasIosBuildArtifact | null {\n if (!Array.isArray(value) || value.length !== 1 || !isRecord(value[0])) return null;\n const build = value[0];\n if (build.status !== 'FINISHED' || build.platform !== 'IOS') return null;\n if (!isNonEmptyString(build.id) || build.buildProfile !== expectedProfile) return null;\n if (!isRecord(build.fingerprint) || build.fingerprint.hash !== expectedFingerprint) return null;\n if (!isRecord(build.artifacts) || !isHttpUrl(build.artifacts.applicationArchiveUrl)) return null;\n if (build.appVersion !== expectedVersion || !isNonEmptyString(build.appBuildVersion)) return null;\n return {\n buildId: build.id,\n buildProfile: expectedProfile,\n fingerprint: expectedFingerprint,\n version: expectedVersion,\n buildNumber: build.appBuildVersion,\n archiveUrl: build.artifacts.applicationArchiveUrl,\n };\n}\n\nfunction isHttpUrl(value: unknown): value is string {\n if (!isNonEmptyString(value)) return false;\n try {\n const parsed = new URL(value);\n return parsed.protocol === 'https:' || parsed.protocol === 'http:';\n } catch {\n return false;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEasIosConfig.d.ts","sourceRoot":"","sources":["../../../../src/providers/eas/ios/parseEasIosConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,uBAAuB,CAAC;AAEtF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,wBAAwB,EAAE,MAAM,GAC/B,kBAAkB,CAwBpB"}
|