@ankhorage/deploy 0.6.0 → 0.8.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 +4 -1
- package/dist/domain/monetization/MonetizationBasePrice.d.ts +6 -0
- package/dist/domain/monetization/MonetizationBasePrice.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationBasePrice.js +2 -0
- package/dist/domain/monetization/MonetizationBasePrice.js.map +1 -0
- package/dist/domain/monetization/MonetizationDesiredState.d.ts +6 -0
- package/dist/domain/monetization/MonetizationDesiredState.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationDesiredState.js +2 -0
- package/dist/domain/monetization/MonetizationDesiredState.js.map +1 -0
- package/dist/domain/monetization/MonetizationDiagnostic.d.ts +9 -0
- package/dist/domain/monetization/MonetizationDiagnostic.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationDiagnostic.js +2 -0
- package/dist/domain/monetization/MonetizationDiagnostic.js.map +1 -0
- package/dist/domain/monetization/MonetizationLocalization.d.ts +6 -0
- package/dist/domain/monetization/MonetizationLocalization.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationLocalization.js +2 -0
- package/dist/domain/monetization/MonetizationLocalization.js.map +1 -0
- package/dist/domain/monetization/MonetizationObservedProduct.d.ts +12 -0
- package/dist/domain/monetization/MonetizationObservedProduct.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationObservedProduct.js +2 -0
- package/dist/domain/monetization/MonetizationObservedProduct.js.map +1 -0
- package/dist/domain/monetization/MonetizationPlan.d.ts +10 -0
- package/dist/domain/monetization/MonetizationPlan.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationPlan.js +2 -0
- package/dist/domain/monetization/MonetizationPlan.js.map +1 -0
- package/dist/domain/monetization/MonetizationPlanStep.d.ts +7 -0
- package/dist/domain/monetization/MonetizationPlanStep.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationPlanStep.js +2 -0
- package/dist/domain/monetization/MonetizationPlanStep.js.map +1 -0
- package/dist/domain/monetization/MonetizationProduct.d.ts +12 -0
- package/dist/domain/monetization/MonetizationProduct.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationProduct.js +2 -0
- package/dist/domain/monetization/MonetizationProduct.js.map +1 -0
- package/dist/domain/monetization/MonetizationSubscription.d.ts +7 -0
- package/dist/domain/monetization/MonetizationSubscription.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationSubscription.js +2 -0
- package/dist/domain/monetization/MonetizationSubscription.js.map +1 -0
- package/dist/domain/monetization/MonetizationTargetState.d.ts +9 -0
- package/dist/domain/monetization/MonetizationTargetState.d.ts.map +1 -0
- package/dist/domain/monetization/MonetizationTargetState.js +2 -0
- package/dist/domain/monetization/MonetizationTargetState.js.map +1 -0
- package/dist/domain/monetization/createMonetizationCurrentRevision.d.ts +3 -0
- package/dist/domain/monetization/createMonetizationCurrentRevision.d.ts.map +1 -0
- package/dist/domain/monetization/createMonetizationCurrentRevision.js +13 -0
- package/dist/domain/monetization/createMonetizationCurrentRevision.js.map +1 -0
- package/dist/domain/monetization/createMonetizationPlan.d.ts +9 -0
- package/dist/domain/monetization/createMonetizationPlan.d.ts.map +1 -0
- package/dist/domain/monetization/createMonetizationPlan.js +94 -0
- package/dist/domain/monetization/createMonetizationPlan.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 +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/project/index.d.ts +13 -0
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +4 -0
- package/dist/project/index.js.map +1 -1
- package/dist/project/io/assertContainedPath.d.ts.map +1 -1
- package/dist/project/io/assertContainedPath.js +4 -3
- package/dist/project/io/assertContainedPath.js.map +1 -1
- package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.d.ts +8 -0
- package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.d.ts.map +1 -0
- package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.js +2 -0
- package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.js.map +1 -0
- package/dist/project/monetization/InspectProjectMonetizationOptions.d.ts +5 -0
- package/dist/project/monetization/InspectProjectMonetizationOptions.d.ts.map +1 -0
- package/dist/project/monetization/InspectProjectMonetizationOptions.js +2 -0
- package/dist/project/monetization/InspectProjectMonetizationOptions.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationAccess.d.ts +7 -0
- package/dist/project/monetization/ProjectMonetizationAccess.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationAccess.js +2 -0
- package/dist/project/monetization/ProjectMonetizationAccess.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationExecutionResult.d.ts +16 -0
- package/dist/project/monetization/ProjectMonetizationExecutionResult.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationExecutionResult.js +2 -0
- package/dist/project/monetization/ProjectMonetizationExecutionResult.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationInspection.d.ts +13 -0
- package/dist/project/monetization/ProjectMonetizationInspection.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationInspection.js +2 -0
- package/dist/project/monetization/ProjectMonetizationInspection.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationInspectionResult.d.ts +10 -0
- package/dist/project/monetization/ProjectMonetizationInspectionResult.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationInspectionResult.js +2 -0
- package/dist/project/monetization/ProjectMonetizationInspectionResult.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationPlan.d.ts +6 -0
- package/dist/project/monetization/ProjectMonetizationPlan.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationPlan.js +2 -0
- package/dist/project/monetization/ProjectMonetizationPlan.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationRuntime.d.ts +12 -0
- package/dist/project/monetization/ProjectMonetizationRuntime.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationRuntime.js +2 -0
- package/dist/project/monetization/ProjectMonetizationRuntime.js.map +1 -0
- package/dist/project/monetization/ProjectMonetizationTargets.d.ts +5 -0
- package/dist/project/monetization/ProjectMonetizationTargets.d.ts.map +1 -0
- package/dist/project/monetization/ProjectMonetizationTargets.js +2 -0
- package/dist/project/monetization/ProjectMonetizationTargets.js.map +1 -0
- package/dist/project/monetization/ResolvedProjectMonetizationAccess.d.ts +7 -0
- package/dist/project/monetization/ResolvedProjectMonetizationAccess.d.ts.map +1 -0
- package/dist/project/monetization/ResolvedProjectMonetizationAccess.js +2 -0
- package/dist/project/monetization/ResolvedProjectMonetizationAccess.js.map +1 -0
- package/dist/project/monetization/areProjectMonetizationPlansEqual.d.ts +3 -0
- package/dist/project/monetization/areProjectMonetizationPlansEqual.d.ts.map +1 -0
- package/dist/project/monetization/areProjectMonetizationPlansEqual.js +4 -0
- package/dist/project/monetization/areProjectMonetizationPlansEqual.js.map +1 -0
- package/dist/project/monetization/createProjectMonetizationPlan.d.ts +4 -0
- package/dist/project/monetization/createProjectMonetizationPlan.d.ts.map +1 -0
- package/dist/project/monetization/createProjectMonetizationPlan.js +14 -0
- package/dist/project/monetization/createProjectMonetizationPlan.js.map +1 -0
- package/dist/project/monetization/createProjectMonetizationRevision.d.ts +3 -0
- package/dist/project/monetization/createProjectMonetizationRevision.d.ts.map +1 -0
- package/dist/project/monetization/createProjectMonetizationRevision.js +5 -0
- package/dist/project/monetization/createProjectMonetizationRevision.js.map +1 -0
- package/dist/project/monetization/defaultProjectMonetizationRuntime.d.ts +3 -0
- package/dist/project/monetization/defaultProjectMonetizationRuntime.d.ts.map +1 -0
- package/dist/project/monetization/defaultProjectMonetizationRuntime.js +12 -0
- package/dist/project/monetization/defaultProjectMonetizationRuntime.js.map +1 -0
- package/dist/project/monetization/executeProjectMonetizationSync.d.ts +4 -0
- package/dist/project/monetization/executeProjectMonetizationSync.d.ts.map +1 -0
- package/dist/project/monetization/executeProjectMonetizationSync.js +6 -0
- package/dist/project/monetization/executeProjectMonetizationSync.js.map +1 -0
- package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.d.ts +5 -0
- package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.d.ts.map +1 -0
- package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.js +63 -0
- package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.js.map +1 -0
- package/dist/project/monetization/executeProjectMonetizationTargets.d.ts +23 -0
- package/dist/project/monetization/executeProjectMonetizationTargets.d.ts.map +1 -0
- package/dist/project/monetization/executeProjectMonetizationTargets.js +66 -0
- package/dist/project/monetization/executeProjectMonetizationTargets.js.map +1 -0
- package/dist/project/monetization/inspectProjectMonetization.d.ts +4 -0
- package/dist/project/monetization/inspectProjectMonetization.d.ts.map +1 -0
- package/dist/project/monetization/inspectProjectMonetization.js +6 -0
- package/dist/project/monetization/inspectProjectMonetization.js.map +1 -0
- package/dist/project/monetization/inspectProjectMonetizationWithRuntime.d.ts +5 -0
- package/dist/project/monetization/inspectProjectMonetizationWithRuntime.d.ts.map +1 -0
- package/dist/project/monetization/inspectProjectMonetizationWithRuntime.js +78 -0
- package/dist/project/monetization/inspectProjectMonetizationWithRuntime.js.map +1 -0
- package/dist/project/monetization/parseProjectMonetization.d.ts +3 -0
- package/dist/project/monetization/parseProjectMonetization.d.ts.map +1 -0
- package/dist/project/monetization/parseProjectMonetization.js +127 -0
- package/dist/project/monetization/parseProjectMonetization.js.map +1 -0
- package/dist/project/monetization/readProjectMonetization.d.ts +5 -0
- package/dist/project/monetization/readProjectMonetization.d.ts.map +1 -0
- package/dist/project/monetization/readProjectMonetization.js +19 -0
- package/dist/project/monetization/readProjectMonetization.js.map +1 -0
- package/dist/project/monetization/resolveProjectMonetizationAccess.d.ts +4 -0
- package/dist/project/monetization/resolveProjectMonetizationAccess.d.ts.map +1 -0
- package/dist/project/monetization/resolveProjectMonetizationAccess.js +7 -0
- package/dist/project/monetization/resolveProjectMonetizationAccess.js.map +1 -0
- package/dist/project/monetization/resolveProjectMonetizationTargets.d.ts +13 -0
- package/dist/project/monetization/resolveProjectMonetizationTargets.d.ts.map +1 -0
- package/dist/project/monetization/resolveProjectMonetizationTargets.js +27 -0
- package/dist/project/monetization/resolveProjectMonetizationTargets.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/AppStoreConnectTransport.d.ts +1 -1
- package/dist/providers/appStoreConnect/AppStoreConnectTransport.d.ts.map +1 -1
- package/dist/providers/appStoreConnect/AppStoreConnectTransport.js.map +1 -1
- 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/AppStoreMonetizationExecutionResult.d.ts +14 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationResult.d.ts +14 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationResult.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationResult.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationResult.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.d.ts +32 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreProductVersion.d.ts +7 -0
- package/dist/providers/appStoreConnect/AppStoreProductVersion.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreProductVersion.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreProductVersion.js.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.d.ts +5 -0
- package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.js +2 -0
- package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.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/appStoreMonetizationUrls.d.ts +25 -0
- package/dist/providers/appStoreConnect/appStoreMonetizationUrls.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/appStoreMonetizationUrls.js +67 -0
- package/dist/providers/appStoreConnect/appStoreMonetizationUrls.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/createAppStoreMonetizationProduct.d.ts +10 -0
- package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.js +67 -0
- package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.js.map +1 -0
- package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.d.ts +8 -0
- package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.js +67 -0
- package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.js.map +1 -0
- package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.d.ts +10 -0
- package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.js +78 -0
- package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.js.map +1 -0
- package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.d.ts +19 -0
- package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.js +117 -0
- package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.js.map +1 -0
- package/dist/providers/appStoreConnect/inspectAppStoreMonetization.d.ts +16 -0
- package/dist/providers/appStoreConnect/inspectAppStoreMonetization.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/inspectAppStoreMonetization.js +53 -0
- package/dist/providers/appStoreConnect/inspectAppStoreMonetization.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/mapAppStoreSubscriptionPeriod.d.ts +3 -0
- package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.js +14 -0
- package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.js.map +1 -0
- package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.d.ts +5 -0
- package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.js +65 -0
- package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.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/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/readAppStoreCollection.d.ts +11 -0
- package/dist/providers/appStoreConnect/readAppStoreCollection.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreCollection.js +43 -0
- package/dist/providers/appStoreConnect/readAppStoreCollection.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/readAppStoreMonetizationPrice.d.ts +17 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.js +114 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.js.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.d.ts +11 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.js +210 -0
- package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.js.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreProductVersion.d.ts +9 -0
- package/dist/providers/appStoreConnect/readAppStoreProductVersion.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreProductVersion.js +56 -0
- package/dist/providers/appStoreConnect/readAppStoreProductVersion.js.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.d.ts +9 -0
- package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.js +44 -0
- package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.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/resolveAppStorePricePoint.d.ts +11 -0
- package/dist/providers/appStoreConnect/resolveAppStorePricePoint.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/resolveAppStorePricePoint.js +46 -0
- package/dist/providers/appStoreConnect/resolveAppStorePricePoint.js.map +1 -0
- package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.d.ts +10 -0
- package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.js +80 -0
- package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.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/toAppStoreSubscriptionPeriod.d.ts +3 -0
- package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.js +15 -0
- package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.js.map +1 -0
- package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.d.ts +2 -0
- package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.js +255 -0
- package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.js.map +1 -0
- package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.d.ts +11 -0
- package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.js +83 -0
- package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.js.map +1 -0
- package/dist/providers/appStoreConnect/updateAppStoreSubscription.d.ts +9 -0
- package/dist/providers/appStoreConnect/updateAppStoreSubscription.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/updateAppStoreSubscription.js +24 -0
- package/dist/providers/appStoreConnect/updateAppStoreSubscription.js.map +1 -0
- package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.d.ts +13 -0
- package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.d.ts.map +1 -0
- package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.js +94 -0
- package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayMonetizationResult.d.ts +24 -0
- package/dist/providers/googlePlay/GooglePlayMonetizationResult.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayMonetizationResult.js +2 -0
- package/dist/providers/googlePlay/GooglePlayMonetizationResult.js.map +1 -0
- package/dist/providers/googlePlay/GooglePlayPriceConversion.d.ts +4 -0
- package/dist/providers/googlePlay/GooglePlayPriceConversion.d.ts.map +1 -0
- package/dist/providers/googlePlay/GooglePlayPriceConversion.js +2 -0
- package/dist/providers/googlePlay/GooglePlayPriceConversion.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/convertGooglePlayRegionPrices.d.ts +10 -0
- package/dist/providers/googlePlay/convertGooglePlayRegionPrices.d.ts.map +1 -0
- package/dist/providers/googlePlay/convertGooglePlayRegionPrices.js +32 -0
- package/dist/providers/googlePlay/convertGooglePlayRegionPrices.js.map +1 -0
- 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/executeGooglePlayMonetizationPlan.d.ts +18 -0
- package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.d.ts.map +1 -0
- package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.js +97 -0
- package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.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/googlePlayMonetizationUrls.d.ts +11 -0
- package/dist/providers/googlePlay/googlePlayMonetizationUrls.d.ts.map +1 -0
- package/dist/providers/googlePlay/googlePlayMonetizationUrls.js +36 -0
- package/dist/providers/googlePlay/googlePlayMonetizationUrls.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/inspectGooglePlayMonetization.d.ts +15 -0
- package/dist/providers/googlePlay/inspectGooglePlayMonetization.d.ts.map +1 -0
- package/dist/providers/googlePlay/inspectGooglePlayMonetization.js +49 -0
- package/dist/providers/googlePlay/inspectGooglePlayMonetization.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/normalizeGooglePlayMonetization.d.ts +8 -0
- package/dist/providers/googlePlay/normalizeGooglePlayMonetization.d.ts.map +1 -0
- package/dist/providers/googlePlay/normalizeGooglePlayMonetization.js +169 -0
- package/dist/providers/googlePlay/normalizeGooglePlayMonetization.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/readGooglePlayMonetizationResources.d.ts +12 -0
- package/dist/providers/googlePlay/readGooglePlayMonetizationResources.d.ts.map +1 -0
- package/dist/providers/googlePlay/readGooglePlayMonetizationResources.js +62 -0
- package/dist/providers/googlePlay/readGooglePlayMonetizationResources.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/toGooglePlayMoney.d.ts +3 -0
- package/dist/providers/googlePlay/toGooglePlayMoney.d.ts.map +1 -0
- package/dist/providers/googlePlay/toGooglePlayMoney.js +11 -0
- package/dist/providers/googlePlay/toGooglePlayMoney.js.map +1 -0
- package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.d.ts +10 -0
- package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.d.ts.map +1 -0
- package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.js +121 -0
- package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.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/providers/googlePlay/writeGooglePlayMonetizationProduct.d.ts +13 -0
- package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.d.ts.map +1 -0
- package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.js +127 -0
- package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { mapAppStoreLocale } from './mapAppStoreLocale';
|
|
2
|
+
export function parseAppStoreListingLocalizations(options) {
|
|
3
|
+
const appInfo = parseLayer(options.appInfo, 'appInfoLocalizations');
|
|
4
|
+
const version = parseLayer(options.version, 'appStoreVersionLocalizations');
|
|
5
|
+
if (appInfo === null || version === null)
|
|
6
|
+
return null;
|
|
7
|
+
return options.desired.locales.map((locale) => mergeLocale(locale.locale, appInfo, version));
|
|
8
|
+
}
|
|
9
|
+
function mergeLocale(canonicalLocale, appInfo, version) {
|
|
10
|
+
const providerLocale = mapAppStoreLocale(canonicalLocale) ?? canonicalLocale;
|
|
11
|
+
const info = appInfo.find((item) => item.locale === providerLocale);
|
|
12
|
+
const ver = version.find((item) => item.locale === providerLocale);
|
|
13
|
+
return {
|
|
14
|
+
canonicalLocale,
|
|
15
|
+
providerLocale,
|
|
16
|
+
...(info === undefined ? {} : appInfoProperties(info)),
|
|
17
|
+
...(ver === undefined ? {} : versionProperties(ver)),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function parseLayer(value, type) {
|
|
21
|
+
if (!isRecord(value) || !Array.isArray(value.data))
|
|
22
|
+
return null;
|
|
23
|
+
const result = [];
|
|
24
|
+
for (const item of value.data) {
|
|
25
|
+
if (!isRecord(item) || item.type !== type || !isNonEmptyString(item.id))
|
|
26
|
+
return null;
|
|
27
|
+
if (!isRecord(item.attributes) || !isNonEmptyString(item.attributes.locale))
|
|
28
|
+
return null;
|
|
29
|
+
result.push({ id: item.id, locale: item.attributes.locale, attributes: item.attributes });
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
function appInfoProperties(item) {
|
|
34
|
+
const name = readString(item.attributes.name);
|
|
35
|
+
const summary = readString(item.attributes.subtitle);
|
|
36
|
+
const privacyPolicyUrl = readString(item.attributes.privacyPolicyUrl);
|
|
37
|
+
return {
|
|
38
|
+
appInfoLocalizationId: item.id,
|
|
39
|
+
...(name === undefined ? {} : { name }),
|
|
40
|
+
...(summary === undefined ? {} : { summary }),
|
|
41
|
+
...(privacyPolicyUrl === undefined ? {} : { privacyPolicyUrl }),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function versionProperties(item) {
|
|
45
|
+
const description = readString(item.attributes.description);
|
|
46
|
+
const keywords = readString(item.attributes.keywords);
|
|
47
|
+
const promotionalText = readString(item.attributes.promotionalText);
|
|
48
|
+
const supportUrl = readString(item.attributes.supportUrl);
|
|
49
|
+
const marketingUrl = readString(item.attributes.marketingUrl);
|
|
50
|
+
return {
|
|
51
|
+
versionLocalizationId: item.id,
|
|
52
|
+
...(description === undefined ? {} : { description }),
|
|
53
|
+
...(keywords === undefined ? {} : { keywords }),
|
|
54
|
+
...(promotionalText === undefined ? {} : { promotionalText }),
|
|
55
|
+
...(supportUrl === undefined ? {} : { supportUrl }),
|
|
56
|
+
...(marketingUrl === undefined ? {} : { marketingUrl }),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function readString(value) {
|
|
60
|
+
return typeof value === 'string' ? value : undefined;
|
|
61
|
+
}
|
|
62
|
+
function isRecord(value) {
|
|
63
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
64
|
+
}
|
|
65
|
+
function isNonEmptyString(value) {
|
|
66
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=parseAppStoreListingLocalizations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAppStoreListingLocalizations.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/parseAppStoreListingLocalizations.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StoreListingDesiredState } from '../../domain/storeListing/StoreListingDesiredState';\nimport type { AppStoreListingLocaleResource } from './AppStoreListingContext';\nimport { mapAppStoreLocale } from './mapAppStoreLocale';\n\ninterface LayerLocalization {\n readonly id: string;\n readonly locale: string;\n readonly attributes: Record<string, unknown>;\n}\n\nexport function parseAppStoreListingLocalizations(options: {\n readonly appInfo: unknown;\n readonly version: unknown;\n readonly desired: StoreListingDesiredState;\n}): readonly AppStoreListingLocaleResource[] | null {\n const appInfo = parseLayer(options.appInfo, 'appInfoLocalizations');\n const version = parseLayer(options.version, 'appStoreVersionLocalizations');\n if (appInfo === null || version === null) return null;\n return options.desired.locales.map((locale) => mergeLocale(locale.locale, appInfo, version));\n}\n\nfunction mergeLocale(\n canonicalLocale: string,\n appInfo: readonly LayerLocalization[],\n version: readonly LayerLocalization[],\n): AppStoreListingLocaleResource {\n const providerLocale = mapAppStoreLocale(canonicalLocale) ?? canonicalLocale;\n const info = appInfo.find((item) => item.locale === providerLocale);\n const ver = version.find((item) => item.locale === providerLocale);\n return {\n canonicalLocale,\n providerLocale,\n ...(info === undefined ? {} : appInfoProperties(info)),\n ...(ver === undefined ? {} : versionProperties(ver)),\n };\n}\n\nfunction parseLayer(value: unknown, type: string): readonly LayerLocalization[] | null {\n if (!isRecord(value) || !Array.isArray(value.data)) return null;\n const result: LayerLocalization[] = [];\n for (const item of value.data as unknown[]) {\n if (!isRecord(item) || item.type !== type || !isNonEmptyString(item.id)) return null;\n if (!isRecord(item.attributes) || !isNonEmptyString(item.attributes.locale)) return null;\n result.push({ id: item.id, locale: item.attributes.locale, attributes: item.attributes });\n }\n return result;\n}\n\nfunction appInfoProperties(item: LayerLocalization): Partial<AppStoreListingLocaleResource> {\n const name = readString(item.attributes.name);\n const summary = readString(item.attributes.subtitle);\n const privacyPolicyUrl = readString(item.attributes.privacyPolicyUrl);\n return {\n appInfoLocalizationId: item.id,\n ...(name === undefined ? {} : { name }),\n ...(summary === undefined ? {} : { summary }),\n ...(privacyPolicyUrl === undefined ? {} : { privacyPolicyUrl }),\n };\n}\n\nfunction versionProperties(item: LayerLocalization): Partial<AppStoreListingLocaleResource> {\n const description = readString(item.attributes.description);\n const keywords = readString(item.attributes.keywords);\n const promotionalText = readString(item.attributes.promotionalText);\n const supportUrl = readString(item.attributes.supportUrl);\n const marketingUrl = readString(item.attributes.marketingUrl);\n return {\n versionLocalizationId: item.id,\n ...(description === undefined ? {} : { description }),\n ...(keywords === undefined ? {} : { keywords }),\n ...(promotionalText === undefined ? {} : { promotionalText }),\n ...(supportUrl === undefined ? {} : { supportUrl }),\n ...(marketingUrl === undefined ? {} : { marketingUrl }),\n };\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\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":"parseEditableAppStoreResourceId.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/parseEditableAppStoreResourceId.ts"],"names":[],"mappings":"AAEA,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,UAAU,GAAG,kBAAkB,GACpC,MAAM,GAAG,IAAI,GAAG,SAAS,CAe3B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { isEditableAppStoreListingState } from './isEditableAppStoreListingState';
|
|
2
|
+
export function parseEditableAppStoreResourceId(value, type) {
|
|
3
|
+
if (!isRecord(value) || !Array.isArray(value.data))
|
|
4
|
+
return undefined;
|
|
5
|
+
let match = null;
|
|
6
|
+
for (const item of value.data) {
|
|
7
|
+
if (!isRecord(item) || item.type !== type || !isNonEmptyString(item.id))
|
|
8
|
+
continue;
|
|
9
|
+
if (!isRecord(item.attributes))
|
|
10
|
+
return undefined;
|
|
11
|
+
const state = type === 'appInfos'
|
|
12
|
+
? (item.attributes.state ?? item.attributes.appStoreState)
|
|
13
|
+
: (item.attributes.appVersionState ?? item.attributes.appStoreState);
|
|
14
|
+
if (!isEditableAppStoreListingState(state))
|
|
15
|
+
continue;
|
|
16
|
+
if (match !== null)
|
|
17
|
+
return undefined;
|
|
18
|
+
match = item.id;
|
|
19
|
+
}
|
|
20
|
+
return match;
|
|
21
|
+
}
|
|
22
|
+
function isRecord(value) {
|
|
23
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
24
|
+
}
|
|
25
|
+
function isNonEmptyString(value) {
|
|
26
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=parseEditableAppStoreResourceId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEditableAppStoreResourceId.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/parseEditableAppStoreResourceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,MAAM,UAAU,+BAA+B,CAC7C,KAAc,EACd,IAAqC;IAErC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,SAAS,CAAC;QACjD,MAAM,KAAK,GACT,IAAI,KAAK,UAAU;YACjB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAC1D,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;YAAE,SAAS;QACrD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACrC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,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 { isEditableAppStoreListingState } from './isEditableAppStoreListingState';\n\nexport function parseEditableAppStoreResourceId(\n value: unknown,\n type: 'appInfos' | 'appStoreVersions',\n): string | null | undefined {\n if (!isRecord(value) || !Array.isArray(value.data)) return undefined;\n let match: string | null = null;\n for (const item of value.data as unknown[]) {\n if (!isRecord(item) || item.type !== type || !isNonEmptyString(item.id)) continue;\n if (!isRecord(item.attributes)) return undefined;\n const state =\n type === 'appInfos'\n ? (item.attributes.state ?? item.attributes.appStoreState)\n : (item.attributes.appVersionState ?? item.attributes.appStoreState);\n if (!isEditableAppStoreListingState(state)) continue;\n if (match !== null) return undefined;\n match = item.id;\n }\n return match;\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,11 @@
|
|
|
1
|
+
import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
|
|
2
|
+
export interface AppStoreCollectionPage {
|
|
3
|
+
readonly data: readonly unknown[];
|
|
4
|
+
readonly included: readonly unknown[];
|
|
5
|
+
}
|
|
6
|
+
export declare function readAppStoreCollection(options: {
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly token: string;
|
|
9
|
+
readonly request: AppStoreConnectTransport;
|
|
10
|
+
}): Promise<AppStoreCollectionPage | null>;
|
|
11
|
+
//# sourceMappingURL=readAppStoreCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreCollection.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAiBzC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export async function readAppStoreCollection(options) {
|
|
2
|
+
const data = [];
|
|
3
|
+
const included = [];
|
|
4
|
+
let url = options.url;
|
|
5
|
+
let pages = 0;
|
|
6
|
+
while (url !== undefined) {
|
|
7
|
+
if (pages >= 100)
|
|
8
|
+
return null;
|
|
9
|
+
const response = await options.request({ method: 'GET', url, token: options.token });
|
|
10
|
+
if (response.status < 200 || response.status >= 300)
|
|
11
|
+
return null;
|
|
12
|
+
const page = parsePage(response.body);
|
|
13
|
+
if (page === null)
|
|
14
|
+
return null;
|
|
15
|
+
data.push(...page.data);
|
|
16
|
+
included.push(...page.included);
|
|
17
|
+
url = page.next;
|
|
18
|
+
pages += 1;
|
|
19
|
+
}
|
|
20
|
+
return { data, included };
|
|
21
|
+
}
|
|
22
|
+
function parsePage(body) {
|
|
23
|
+
try {
|
|
24
|
+
const value = JSON.parse(body);
|
|
25
|
+
if (!isRecord(value) || !Array.isArray(value.data))
|
|
26
|
+
return null;
|
|
27
|
+
const included = Array.isArray(value.included) ? value.included : [];
|
|
28
|
+
const next = readNext(value.links);
|
|
29
|
+
return { data: value.data, included, ...(next === undefined ? {} : { next }) };
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function readNext(value) {
|
|
36
|
+
if (!isRecord(value))
|
|
37
|
+
return undefined;
|
|
38
|
+
return typeof value.next === 'string' && value.next.length > 0 ? value.next : undefined;
|
|
39
|
+
}
|
|
40
|
+
function isRecord(value) {
|
|
41
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=readAppStoreCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreCollection.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreCollection.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAI5C;IACC,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAuB,OAAO,CAAC,GAAG,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACrF,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QAChB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAChB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,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';\n\nexport interface AppStoreCollectionPage {\n readonly data: readonly unknown[];\n readonly included: readonly unknown[];\n}\n\nexport async function readAppStoreCollection(options: {\n readonly url: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<AppStoreCollectionPage | null> {\n const data: unknown[] = [];\n const included: unknown[] = [];\n let url: string | undefined = options.url;\n let pages = 0;\n while (url !== undefined) {\n if (pages >= 100) return null;\n const response = await options.request({ method: 'GET', url, token: options.token });\n if (response.status < 200 || response.status >= 300) return null;\n const page = parsePage(response.body);\n if (page === null) return null;\n data.push(...page.data);\n included.push(...page.included);\n url = page.next;\n pages += 1;\n }\n return { data, included };\n}\n\nfunction parsePage(\n body: string,\n): { data: readonly unknown[]; included: readonly unknown[]; next?: string } | null {\n try {\n const value: unknown = JSON.parse(body);\n if (!isRecord(value) || !Array.isArray(value.data)) return null;\n const included = Array.isArray(value.included) ? value.included : [];\n const next = readNext(value.links);\n return { data: value.data, included, ...(next === undefined ? {} : { next }) };\n } catch {\n return null;\n }\n}\n\nfunction readNext(value: unknown): string | undefined {\n if (!isRecord(value)) return undefined;\n return typeof value.next === 'string' && value.next.length > 0 ? value.next : undefined;\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,7 @@
|
|
|
1
|
+
import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
|
|
2
|
+
export declare function readAppStoreJson(options: {
|
|
3
|
+
readonly url: string;
|
|
4
|
+
readonly token: string;
|
|
5
|
+
readonly request: AppStoreConnectTransport;
|
|
6
|
+
}): Promise<unknown>;
|
|
7
|
+
//# sourceMappingURL=readAppStoreJson.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreJson.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreJson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export async function readAppStoreJson(options) {
|
|
2
|
+
const response = await options.request({ method: 'GET', ...options });
|
|
3
|
+
if (response.status < 200 || response.status >= 300)
|
|
4
|
+
return null;
|
|
5
|
+
try {
|
|
6
|
+
return JSON.parse(response.body);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=readAppStoreJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreJson.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreJson.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAItC;IACC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAY,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import type { AppStoreConnectTransport } from './AppStoreConnectTransport';\n\nexport async function readAppStoreJson(options: {\n readonly url: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<unknown> {\n const response = await options.request({ method: 'GET', ...options });\n if (response.status < 200 || response.status >= 300) return null;\n try {\n return JSON.parse(response.body) as unknown;\n } catch {\n return null;\n }\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MonetizationBasePrice } from '../../domain/monetization/MonetizationBasePrice';
|
|
2
|
+
import type { MonetizationDiagnostic } from '../../domain/monetization/MonetizationDiagnostic';
|
|
3
|
+
import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
|
|
4
|
+
export interface AppStorePriceInspection {
|
|
5
|
+
readonly matches: boolean;
|
|
6
|
+
readonly diagnostics: readonly MonetizationDiagnostic[];
|
|
7
|
+
}
|
|
8
|
+
export declare function readAppStoreMonetizationPrice(options: {
|
|
9
|
+
readonly kind: 'iap' | 'subscription';
|
|
10
|
+
readonly resourceId: string;
|
|
11
|
+
readonly productId: string;
|
|
12
|
+
readonly price: MonetizationBasePrice;
|
|
13
|
+
readonly token: string;
|
|
14
|
+
readonly request: AppStoreConnectTransport;
|
|
15
|
+
readonly now: Date;
|
|
16
|
+
}): Promise<AppStorePriceInspection>;
|
|
17
|
+
//# sourceMappingURL=readAppStoreMonetizationPrice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreMonetizationPrice.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreMonetizationPrice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAK3E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACzD;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAQnC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { appStoreMonetizationUrls } from './appStoreMonetizationUrls';
|
|
2
|
+
import { readAppStoreJson } from './readAppStoreJson';
|
|
3
|
+
import { toAppStoreTerritoryCode } from './toAppStoreTerritoryCode';
|
|
4
|
+
export async function readAppStoreMonetizationPrice(options) {
|
|
5
|
+
const territory = toAppStoreTerritoryCode(options.price.country);
|
|
6
|
+
if (territory === null)
|
|
7
|
+
return diagnostic(options.productId, 'APP_STORE_TERRITORY_UNSUPPORTED');
|
|
8
|
+
const pricePoint = await resolvePricePoint({ ...options, territory });
|
|
9
|
+
if (pricePoint === null)
|
|
10
|
+
return diagnostic(options.productId, 'APP_STORE_PRICE_POINT_NOT_FOUND');
|
|
11
|
+
const current = await readCurrentPricePoint({ ...options, territory });
|
|
12
|
+
if (current === undefined)
|
|
13
|
+
return diagnostic(options.productId, 'APP_STORE_PRICE_STATE_INVALID');
|
|
14
|
+
return { matches: current === pricePoint, diagnostics: [] };
|
|
15
|
+
}
|
|
16
|
+
async function resolvePricePoint(options) {
|
|
17
|
+
const url = options.kind === 'iap'
|
|
18
|
+
? appStoreMonetizationUrls.iapPricePoints(options.resourceId, options.territory)
|
|
19
|
+
: appStoreMonetizationUrls.subscriptionPricePoints(options.resourceId, options.territory);
|
|
20
|
+
const value = await readAppStoreJson({ ...options, url });
|
|
21
|
+
if (!isRecord(value) || !Array.isArray(value.data))
|
|
22
|
+
return null;
|
|
23
|
+
if (!currencyMatches(value.included, options.territory, options.price.currency))
|
|
24
|
+
return null;
|
|
25
|
+
const matches = value.data.filter((item) => pricePointMatches(item, options.price.amount));
|
|
26
|
+
return matches.length === 1 && isRecord(matches[0]) && isString(matches[0].id)
|
|
27
|
+
? matches[0].id
|
|
28
|
+
: null;
|
|
29
|
+
}
|
|
30
|
+
async function readCurrentPricePoint(options) {
|
|
31
|
+
const url = options.kind === 'iap'
|
|
32
|
+
? appStoreMonetizationUrls.iapPriceSchedule(options.resourceId)
|
|
33
|
+
: appStoreMonetizationUrls.subscriptionPrices(options.resourceId, options.territory);
|
|
34
|
+
const value = await readAppStoreJson({ ...options, url });
|
|
35
|
+
if (!isRecord(value))
|
|
36
|
+
return undefined;
|
|
37
|
+
return options.kind === 'iap'
|
|
38
|
+
? currentIapPricePoint(value, options.territory, options.now)
|
|
39
|
+
: currentSubscriptionPricePoint(value, options.now);
|
|
40
|
+
}
|
|
41
|
+
function currentIapPricePoint(value, territory, now) {
|
|
42
|
+
if (!isRecord(value.data) || !isRecord(value.data.relationships))
|
|
43
|
+
return undefined;
|
|
44
|
+
if (!relationshipHasId(value.data.relationships.baseTerritory, territory))
|
|
45
|
+
return null;
|
|
46
|
+
if (!Array.isArray(value.included))
|
|
47
|
+
return undefined;
|
|
48
|
+
const prices = value.included.filter((item) => isResourceType(item, 'inAppPurchasePrices'));
|
|
49
|
+
return currentPointFromPrices(prices, now, 'inAppPurchasePricePoint');
|
|
50
|
+
}
|
|
51
|
+
function currentSubscriptionPricePoint(value, now) {
|
|
52
|
+
if (!Array.isArray(value.data))
|
|
53
|
+
return undefined;
|
|
54
|
+
return currentPointFromPrices(value.data, now, 'subscriptionPricePoint');
|
|
55
|
+
}
|
|
56
|
+
function currentPointFromPrices(values, now, relationship) {
|
|
57
|
+
const active = values.filter((item) => isActivePrice(item, now));
|
|
58
|
+
if (active.length !== 1 || !isRecord(active[0]) || !isRecord(active[0].relationships))
|
|
59
|
+
return null;
|
|
60
|
+
return relationship === 'inAppPurchasePricePoint'
|
|
61
|
+
? relationshipId(active[0].relationships.inAppPurchasePricePoint)
|
|
62
|
+
: relationshipId(active[0].relationships.subscriptionPricePoint);
|
|
63
|
+
}
|
|
64
|
+
function isActivePrice(value, now) {
|
|
65
|
+
if (!isRecord(value) || !isRecord(value.attributes))
|
|
66
|
+
return false;
|
|
67
|
+
const today = now.toISOString().slice(0, 10);
|
|
68
|
+
const start = value.attributes.startDate;
|
|
69
|
+
const end = value.attributes.endDate;
|
|
70
|
+
const startOk = start === null || start === undefined || (isString(start) && start <= today);
|
|
71
|
+
const endOk = end === null || end === undefined || (isString(end) && end > today);
|
|
72
|
+
return startOk && endOk;
|
|
73
|
+
}
|
|
74
|
+
function pricePointMatches(value, amount) {
|
|
75
|
+
if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes))
|
|
76
|
+
return false;
|
|
77
|
+
return value.attributes.customerPrice === amount;
|
|
78
|
+
}
|
|
79
|
+
function currencyMatches(value, territory, currency) {
|
|
80
|
+
if (!Array.isArray(value))
|
|
81
|
+
return false;
|
|
82
|
+
return value.some((item) => isResourceType(item, 'territories') &&
|
|
83
|
+
item.id === territory &&
|
|
84
|
+
isRecord(item.attributes) &&
|
|
85
|
+
item.attributes.currency === currency);
|
|
86
|
+
}
|
|
87
|
+
function relationshipHasId(value, id) {
|
|
88
|
+
return relationshipId(value) === id;
|
|
89
|
+
}
|
|
90
|
+
function relationshipId(value) {
|
|
91
|
+
if (!isRecord(value) || !isRecord(value.data) || !isString(value.data.id))
|
|
92
|
+
return null;
|
|
93
|
+
return value.data.id;
|
|
94
|
+
}
|
|
95
|
+
function isResourceType(value, type) {
|
|
96
|
+
return isRecord(value) && value.type === type && isString(value.id);
|
|
97
|
+
}
|
|
98
|
+
function diagnostic(productId, code) {
|
|
99
|
+
const item = {
|
|
100
|
+
severity: 'error',
|
|
101
|
+
code,
|
|
102
|
+
message: `App Store price for ${productId} cannot be resolved safely.`,
|
|
103
|
+
target: 'ios',
|
|
104
|
+
productId,
|
|
105
|
+
};
|
|
106
|
+
return { matches: false, diagnostics: [item] };
|
|
107
|
+
}
|
|
108
|
+
function isRecord(value) {
|
|
109
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
110
|
+
}
|
|
111
|
+
function isString(value) {
|
|
112
|
+
return typeof value === 'string';
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=readAppStoreMonetizationPrice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreMonetizationPrice.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreMonetizationPrice.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MonetizationBasePrice } from '../../domain/monetization/MonetizationBasePrice';\nimport type { MonetizationDiagnostic } from '../../domain/monetization/MonetizationDiagnostic';\nimport type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { appStoreMonetizationUrls } from './appStoreMonetizationUrls';\nimport { readAppStoreJson } from './readAppStoreJson';\nimport { toAppStoreTerritoryCode } from './toAppStoreTerritoryCode';\n\nexport interface AppStorePriceInspection {\n readonly matches: boolean;\n readonly diagnostics: readonly MonetizationDiagnostic[];\n}\n\nexport async function readAppStoreMonetizationPrice(options: {\n readonly kind: 'iap' | 'subscription';\n readonly resourceId: string;\n readonly productId: string;\n readonly price: MonetizationBasePrice;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n readonly now: Date;\n}): Promise<AppStorePriceInspection> {\n const territory = toAppStoreTerritoryCode(options.price.country);\n if (territory === null) return diagnostic(options.productId, 'APP_STORE_TERRITORY_UNSUPPORTED');\n const pricePoint = await resolvePricePoint({ ...options, territory });\n if (pricePoint === null) return diagnostic(options.productId, 'APP_STORE_PRICE_POINT_NOT_FOUND');\n const current = await readCurrentPricePoint({ ...options, territory });\n if (current === undefined) return diagnostic(options.productId, 'APP_STORE_PRICE_STATE_INVALID');\n return { matches: current === pricePoint, diagnostics: [] };\n}\n\nasync function resolvePricePoint(options: {\n readonly kind: 'iap' | 'subscription';\n readonly resourceId: string;\n readonly price: MonetizationBasePrice;\n readonly territory: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<string | null> {\n const url =\n options.kind === 'iap'\n ? appStoreMonetizationUrls.iapPricePoints(options.resourceId, options.territory)\n : appStoreMonetizationUrls.subscriptionPricePoints(options.resourceId, options.territory);\n const value = await readAppStoreJson({ ...options, url });\n if (!isRecord(value) || !Array.isArray(value.data)) return null;\n if (!currencyMatches(value.included, options.territory, options.price.currency)) return null;\n const matches = value.data.filter((item) => pricePointMatches(item, options.price.amount));\n return matches.length === 1 && isRecord(matches[0]) && isString(matches[0].id)\n ? matches[0].id\n : null;\n}\n\nasync function readCurrentPricePoint(options: {\n readonly kind: 'iap' | 'subscription';\n readonly resourceId: string;\n readonly territory: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n readonly now: Date;\n}): Promise<string | null | undefined> {\n const url =\n options.kind === 'iap'\n ? appStoreMonetizationUrls.iapPriceSchedule(options.resourceId)\n : appStoreMonetizationUrls.subscriptionPrices(options.resourceId, options.territory);\n const value = await readAppStoreJson({ ...options, url });\n if (!isRecord(value)) return undefined;\n return options.kind === 'iap'\n ? currentIapPricePoint(value, options.territory, options.now)\n : currentSubscriptionPricePoint(value, options.now);\n}\n\nfunction currentIapPricePoint(\n value: Record<string, unknown>,\n territory: string,\n now: Date,\n): string | null | undefined {\n if (!isRecord(value.data) || !isRecord(value.data.relationships)) return undefined;\n if (!relationshipHasId(value.data.relationships.baseTerritory, territory)) return null;\n if (!Array.isArray(value.included)) return undefined;\n const prices = value.included.filter((item) => isResourceType(item, 'inAppPurchasePrices'));\n return currentPointFromPrices(prices, now, 'inAppPurchasePricePoint');\n}\n\nfunction currentSubscriptionPricePoint(\n value: Record<string, unknown>,\n now: Date,\n): string | null | undefined {\n if (!Array.isArray(value.data)) return undefined;\n return currentPointFromPrices(value.data, now, 'subscriptionPricePoint');\n}\n\nfunction currentPointFromPrices(\n values: readonly unknown[],\n now: Date,\n relationship: 'inAppPurchasePricePoint' | 'subscriptionPricePoint',\n): string | null {\n const active = values.filter((item) => isActivePrice(item, now));\n if (active.length !== 1 || !isRecord(active[0]) || !isRecord(active[0].relationships))\n return null;\n return relationship === 'inAppPurchasePricePoint'\n ? relationshipId(active[0].relationships.inAppPurchasePricePoint)\n : relationshipId(active[0].relationships.subscriptionPricePoint);\n}\n\nfunction isActivePrice(value: unknown, now: Date): boolean {\n if (!isRecord(value) || !isRecord(value.attributes)) return false;\n const today = now.toISOString().slice(0, 10);\n const start = value.attributes.startDate;\n const end = value.attributes.endDate;\n const startOk = start === null || start === undefined || (isString(start) && start <= today);\n const endOk = end === null || end === undefined || (isString(end) && end > today);\n return startOk && endOk;\n}\n\nfunction pricePointMatches(value: unknown, amount: string): boolean {\n if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes)) return false;\n return value.attributes.customerPrice === amount;\n}\n\nfunction currencyMatches(value: unknown, territory: string, currency: string): boolean {\n if (!Array.isArray(value)) return false;\n return value.some(\n (item) =>\n isResourceType(item, 'territories') &&\n item.id === territory &&\n isRecord(item.attributes) &&\n item.attributes.currency === currency,\n );\n}\n\nfunction relationshipHasId(value: unknown, id: string): boolean {\n return relationshipId(value) === id;\n}\n\nfunction relationshipId(value: unknown): string | null {\n if (!isRecord(value) || !isRecord(value.data) || !isString(value.data.id)) return null;\n return value.data.id;\n}\n\nfunction isResourceType(\n value: unknown,\n type: string,\n): value is Record<string, unknown> & { readonly id: string } {\n return isRecord(value) && value.type === type && isString(value.id);\n}\n\nfunction diagnostic(productId: string, code: string): AppStorePriceInspection {\n const item: MonetizationDiagnostic = {\n severity: 'error',\n code,\n message: `App Store price for ${productId} cannot be resolved safely.`,\n target: 'ios',\n productId,\n };\n return { matches: false, diagnostics: [item] };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MonetizationDesiredState } from '../../domain/monetization/MonetizationDesiredState';
|
|
2
|
+
import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
|
|
3
|
+
import type { AppStoreMonetizationSnapshot } from './AppStoreMonetizationSnapshot';
|
|
4
|
+
export declare function readAppStoreMonetizationSnapshot(options: {
|
|
5
|
+
readonly bundleIdentifier: string;
|
|
6
|
+
readonly desired: MonetizationDesiredState;
|
|
7
|
+
readonly token: string;
|
|
8
|
+
readonly request: AppStoreConnectTransport;
|
|
9
|
+
readonly now: Date;
|
|
10
|
+
}): Promise<AppStoreMonetizationSnapshot | null | 'app-required'>;
|
|
11
|
+
//# sourceMappingURL=readAppStoreMonetizationSnapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readAppStoreMonetizationSnapshot.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/readAppStoreMonetizationSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAGnG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,KAAK,EAGV,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AAcxC,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAC9D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,GAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,GAAG,cAAc,CAAC,CAgBhE"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { appStoreConnectAppsUrl } from './appStoreConnectUrls';
|
|
2
|
+
import { appStoreMonetizationUrls } from './appStoreMonetizationUrls';
|
|
3
|
+
import { fromAppStoreSubscriptionPeriod } from './mapAppStoreSubscriptionPeriod';
|
|
4
|
+
import { parseAppStoreAppId } from './parseAppStoreAppId';
|
|
5
|
+
import { readAppStoreCollection } from './readAppStoreCollection';
|
|
6
|
+
import { readAppStoreJson } from './readAppStoreJson';
|
|
7
|
+
import { readAppStoreMonetizationPrice } from './readAppStoreMonetizationPrice';
|
|
8
|
+
import { readAppStoreProductVersion } from './readAppStoreProductVersion';
|
|
9
|
+
export async function readAppStoreMonetizationSnapshot(options) {
|
|
10
|
+
const appId = await resolveAppId(options);
|
|
11
|
+
if (appId === undefined)
|
|
12
|
+
return null;
|
|
13
|
+
if (appId === null)
|
|
14
|
+
return 'app-required';
|
|
15
|
+
const catalog = await readCatalog({ ...options, appId });
|
|
16
|
+
if (catalog === null)
|
|
17
|
+
return null;
|
|
18
|
+
const families = parseFamilies(catalog.groups.data);
|
|
19
|
+
if (families === null)
|
|
20
|
+
return null;
|
|
21
|
+
const products = [];
|
|
22
|
+
const diagnostics = [];
|
|
23
|
+
for (const desired of options.desired.products) {
|
|
24
|
+
const result = await readDesiredProduct({ ...options, desired, families, catalog });
|
|
25
|
+
products.push(...result.products);
|
|
26
|
+
diagnostics.push(...result.diagnostics);
|
|
27
|
+
}
|
|
28
|
+
return { appId, products, families, diagnostics };
|
|
29
|
+
}
|
|
30
|
+
async function resolveAppId(options) {
|
|
31
|
+
const value = await readAppStoreJson({
|
|
32
|
+
url: appStoreConnectAppsUrl(options.bundleIdentifier),
|
|
33
|
+
token: options.token,
|
|
34
|
+
request: options.request,
|
|
35
|
+
});
|
|
36
|
+
return value === null ? undefined : parseAppStoreAppId(value, options.bundleIdentifier);
|
|
37
|
+
}
|
|
38
|
+
async function readCatalog(options) {
|
|
39
|
+
const [iaps, groups] = await Promise.all([
|
|
40
|
+
readAppStoreCollection({
|
|
41
|
+
url: appStoreMonetizationUrls.inAppPurchases(options.appId),
|
|
42
|
+
token: options.token,
|
|
43
|
+
request: options.request,
|
|
44
|
+
}),
|
|
45
|
+
readAppStoreCollection({
|
|
46
|
+
url: appStoreMonetizationUrls.subscriptionGroups(options.appId),
|
|
47
|
+
token: options.token,
|
|
48
|
+
request: options.request,
|
|
49
|
+
}),
|
|
50
|
+
]);
|
|
51
|
+
return iaps === null || groups === null ? null : { iaps, groups };
|
|
52
|
+
}
|
|
53
|
+
async function readDesiredProduct(options) {
|
|
54
|
+
const iap = findProduct(options.catalog.iaps.data, options.desired.id);
|
|
55
|
+
const subscription = findProduct(options.catalog.groups.included, options.desired.id);
|
|
56
|
+
if (iap !== undefined && subscription !== undefined) {
|
|
57
|
+
return {
|
|
58
|
+
products: [],
|
|
59
|
+
diagnostics: [diagnostic(options.desired.id, 'APP_STORE_PRODUCT_ID_CONFLICT')],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (options.desired.kind === 'subscription') {
|
|
63
|
+
if (iap !== undefined)
|
|
64
|
+
return readIap(options, iap);
|
|
65
|
+
return subscription === undefined ? empty() : readSubscription(options, subscription);
|
|
66
|
+
}
|
|
67
|
+
if (subscription !== undefined)
|
|
68
|
+
return readSubscription(options, subscription);
|
|
69
|
+
return iap === undefined ? empty() : readIap(options, iap);
|
|
70
|
+
}
|
|
71
|
+
async function readIap(options, value) {
|
|
72
|
+
const base = parseIap(value);
|
|
73
|
+
if (base === null)
|
|
74
|
+
return invalid(options.desired.id);
|
|
75
|
+
const version = await readAppStoreProductVersion({
|
|
76
|
+
kind: 'iap',
|
|
77
|
+
productId: base.resourceId,
|
|
78
|
+
token: options.token,
|
|
79
|
+
request: options.request,
|
|
80
|
+
});
|
|
81
|
+
if (version === null)
|
|
82
|
+
return invalid(options.desired.id);
|
|
83
|
+
return withPrice(options, base, version, 'iap');
|
|
84
|
+
}
|
|
85
|
+
async function readSubscription(options, value) {
|
|
86
|
+
const base = parseSubscription(value, options.families);
|
|
87
|
+
if (base === null)
|
|
88
|
+
return invalid(options.desired.id);
|
|
89
|
+
const version = await readAppStoreProductVersion({
|
|
90
|
+
kind: 'subscription',
|
|
91
|
+
productId: base.resourceId,
|
|
92
|
+
token: options.token,
|
|
93
|
+
request: options.request,
|
|
94
|
+
});
|
|
95
|
+
if (version === null)
|
|
96
|
+
return invalid(options.desired.id);
|
|
97
|
+
return withPrice(options, base, version, 'subscription');
|
|
98
|
+
}
|
|
99
|
+
async function withPrice(options, base, version, kind) {
|
|
100
|
+
const price = await readAppStoreMonetizationPrice({
|
|
101
|
+
kind,
|
|
102
|
+
resourceId: base.resourceId,
|
|
103
|
+
productId: options.desired.id,
|
|
104
|
+
price: options.desired.basePrice,
|
|
105
|
+
token: options.token,
|
|
106
|
+
request: options.request,
|
|
107
|
+
now: options.now,
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
products: [
|
|
111
|
+
{
|
|
112
|
+
...base,
|
|
113
|
+
localizations: version?.localizations ?? [],
|
|
114
|
+
basePriceMatches: price.matches,
|
|
115
|
+
...(version === undefined
|
|
116
|
+
? {}
|
|
117
|
+
: { versionId: version.resourceId, versionState: version.state }),
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
diagnostics: price.diagnostics,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function parseIap(value) {
|
|
124
|
+
if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes))
|
|
125
|
+
return null;
|
|
126
|
+
const { productId } = value.attributes;
|
|
127
|
+
const kind = mapIapKind(value.attributes.inAppPurchaseType);
|
|
128
|
+
if (!isString(productId) || kind === null)
|
|
129
|
+
return null;
|
|
130
|
+
const state = isString(value.attributes.state) ? value.attributes.state : undefined;
|
|
131
|
+
return { resourceId: value.id, productId, kind, ...(state === undefined ? {} : { state }) };
|
|
132
|
+
}
|
|
133
|
+
function parseSubscription(value, families) {
|
|
134
|
+
if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes))
|
|
135
|
+
return null;
|
|
136
|
+
const { productId } = value.attributes;
|
|
137
|
+
const period = fromAppStoreSubscriptionPeriod(value.attributes.subscriptionPeriod);
|
|
138
|
+
const familyId = relationshipId(isRecord(value.relationships) ? value.relationships.group : undefined);
|
|
139
|
+
const family = families.find((item) => item.resourceId === familyId);
|
|
140
|
+
if (!isString(productId) || period === null || family === undefined)
|
|
141
|
+
return null;
|
|
142
|
+
const level = isPositiveInteger(value.attributes.groupLevel)
|
|
143
|
+
? value.attributes.groupLevel
|
|
144
|
+
: undefined;
|
|
145
|
+
const state = isString(value.attributes.state) ? value.attributes.state : undefined;
|
|
146
|
+
return {
|
|
147
|
+
resourceId: value.id,
|
|
148
|
+
productId,
|
|
149
|
+
kind: 'subscription',
|
|
150
|
+
family: family.referenceName,
|
|
151
|
+
familyId: family.resourceId,
|
|
152
|
+
period,
|
|
153
|
+
...(level === undefined ? {} : { level }),
|
|
154
|
+
...(state === undefined ? {} : { state }),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function parseFamilies(values) {
|
|
158
|
+
const result = [];
|
|
159
|
+
for (const value of values) {
|
|
160
|
+
if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes))
|
|
161
|
+
return null;
|
|
162
|
+
if (!isString(value.attributes.referenceName))
|
|
163
|
+
return null;
|
|
164
|
+
result.push({ resourceId: value.id, referenceName: value.attributes.referenceName });
|
|
165
|
+
}
|
|
166
|
+
return result.sort((a, b) => a.referenceName.localeCompare(b.referenceName));
|
|
167
|
+
}
|
|
168
|
+
function findProduct(values, productId) {
|
|
169
|
+
return values.find((value) => isRecord(value) && isRecord(value.attributes) && value.attributes.productId === productId);
|
|
170
|
+
}
|
|
171
|
+
function mapIapKind(value) {
|
|
172
|
+
if (value === 'CONSUMABLE')
|
|
173
|
+
return 'consumable';
|
|
174
|
+
if (value === 'NON_CONSUMABLE')
|
|
175
|
+
return 'non-consumable';
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
function relationshipId(value) {
|
|
179
|
+
if (!isRecord(value) || !isRecord(value.data) || !isString(value.data.id))
|
|
180
|
+
return null;
|
|
181
|
+
return value.data.id;
|
|
182
|
+
}
|
|
183
|
+
function empty() {
|
|
184
|
+
return { products: [], diagnostics: [] };
|
|
185
|
+
}
|
|
186
|
+
function invalid(productId) {
|
|
187
|
+
return {
|
|
188
|
+
products: [],
|
|
189
|
+
diagnostics: [diagnostic(productId, 'APP_STORE_PRODUCT_STATE_INVALID')],
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function diagnostic(productId, code) {
|
|
193
|
+
return {
|
|
194
|
+
severity: 'error',
|
|
195
|
+
code,
|
|
196
|
+
message: `App Store monetization product ${productId} cannot be normalized safely.`,
|
|
197
|
+
target: 'ios',
|
|
198
|
+
productId,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function isPositiveInteger(value) {
|
|
202
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 1;
|
|
203
|
+
}
|
|
204
|
+
function isRecord(value) {
|
|
205
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
206
|
+
}
|
|
207
|
+
function isString(value) {
|
|
208
|
+
return typeof value === 'string';
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=readAppStoreMonetizationSnapshot.js.map
|