@ankhorage/deploy 0.7.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.
Files changed (297) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -1
  3. package/dist/domain/monetization/MonetizationBasePrice.d.ts +6 -0
  4. package/dist/domain/monetization/MonetizationBasePrice.d.ts.map +1 -0
  5. package/dist/domain/monetization/MonetizationBasePrice.js +2 -0
  6. package/dist/domain/monetization/MonetizationBasePrice.js.map +1 -0
  7. package/dist/domain/monetization/MonetizationDesiredState.d.ts +6 -0
  8. package/dist/domain/monetization/MonetizationDesiredState.d.ts.map +1 -0
  9. package/dist/domain/monetization/MonetizationDesiredState.js +2 -0
  10. package/dist/domain/monetization/MonetizationDesiredState.js.map +1 -0
  11. package/dist/domain/monetization/MonetizationDiagnostic.d.ts +9 -0
  12. package/dist/domain/monetization/MonetizationDiagnostic.d.ts.map +1 -0
  13. package/dist/domain/monetization/MonetizationDiagnostic.js +2 -0
  14. package/dist/domain/monetization/MonetizationDiagnostic.js.map +1 -0
  15. package/dist/domain/monetization/MonetizationLocalization.d.ts +6 -0
  16. package/dist/domain/monetization/MonetizationLocalization.d.ts.map +1 -0
  17. package/dist/domain/monetization/MonetizationLocalization.js +2 -0
  18. package/dist/domain/monetization/MonetizationLocalization.js.map +1 -0
  19. package/dist/domain/monetization/MonetizationObservedProduct.d.ts +12 -0
  20. package/dist/domain/monetization/MonetizationObservedProduct.d.ts.map +1 -0
  21. package/dist/domain/monetization/MonetizationObservedProduct.js +2 -0
  22. package/dist/domain/monetization/MonetizationObservedProduct.js.map +1 -0
  23. package/dist/domain/monetization/MonetizationPlan.d.ts +10 -0
  24. package/dist/domain/monetization/MonetizationPlan.d.ts.map +1 -0
  25. package/dist/domain/monetization/MonetizationPlan.js +2 -0
  26. package/dist/domain/monetization/MonetizationPlan.js.map +1 -0
  27. package/dist/domain/monetization/MonetizationPlanStep.d.ts +7 -0
  28. package/dist/domain/monetization/MonetizationPlanStep.d.ts.map +1 -0
  29. package/dist/domain/monetization/MonetizationPlanStep.js +2 -0
  30. package/dist/domain/monetization/MonetizationPlanStep.js.map +1 -0
  31. package/dist/domain/monetization/MonetizationProduct.d.ts +12 -0
  32. package/dist/domain/monetization/MonetizationProduct.d.ts.map +1 -0
  33. package/dist/domain/monetization/MonetizationProduct.js +2 -0
  34. package/dist/domain/monetization/MonetizationProduct.js.map +1 -0
  35. package/dist/domain/monetization/MonetizationSubscription.d.ts +7 -0
  36. package/dist/domain/monetization/MonetizationSubscription.d.ts.map +1 -0
  37. package/dist/domain/monetization/MonetizationSubscription.js +2 -0
  38. package/dist/domain/monetization/MonetizationSubscription.js.map +1 -0
  39. package/dist/domain/monetization/MonetizationTargetState.d.ts +9 -0
  40. package/dist/domain/monetization/MonetizationTargetState.d.ts.map +1 -0
  41. package/dist/domain/monetization/MonetizationTargetState.js +2 -0
  42. package/dist/domain/monetization/MonetizationTargetState.js.map +1 -0
  43. package/dist/domain/monetization/createMonetizationCurrentRevision.d.ts +3 -0
  44. package/dist/domain/monetization/createMonetizationCurrentRevision.d.ts.map +1 -0
  45. package/dist/domain/monetization/createMonetizationCurrentRevision.js +13 -0
  46. package/dist/domain/monetization/createMonetizationCurrentRevision.js.map +1 -0
  47. package/dist/domain/monetization/createMonetizationPlan.d.ts +9 -0
  48. package/dist/domain/monetization/createMonetizationPlan.d.ts.map +1 -0
  49. package/dist/domain/monetization/createMonetizationPlan.js +94 -0
  50. package/dist/domain/monetization/createMonetizationPlan.js.map +1 -0
  51. package/dist/index.d.ts +10 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/project/index.d.ts +13 -0
  55. package/dist/project/index.d.ts.map +1 -1
  56. package/dist/project/index.js +4 -0
  57. package/dist/project/index.js.map +1 -1
  58. package/dist/project/io/assertContainedPath.d.ts.map +1 -1
  59. package/dist/project/io/assertContainedPath.js +4 -3
  60. package/dist/project/io/assertContainedPath.js.map +1 -1
  61. package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.d.ts +8 -0
  62. package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.d.ts.map +1 -0
  63. package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.js +2 -0
  64. package/dist/project/monetization/ExecuteProjectMonetizationSyncOptions.js.map +1 -0
  65. package/dist/project/monetization/InspectProjectMonetizationOptions.d.ts +5 -0
  66. package/dist/project/monetization/InspectProjectMonetizationOptions.d.ts.map +1 -0
  67. package/dist/project/monetization/InspectProjectMonetizationOptions.js +2 -0
  68. package/dist/project/monetization/InspectProjectMonetizationOptions.js.map +1 -0
  69. package/dist/project/monetization/ProjectMonetizationAccess.d.ts +7 -0
  70. package/dist/project/monetization/ProjectMonetizationAccess.d.ts.map +1 -0
  71. package/dist/project/monetization/ProjectMonetizationAccess.js +2 -0
  72. package/dist/project/monetization/ProjectMonetizationAccess.js.map +1 -0
  73. package/dist/project/monetization/ProjectMonetizationExecutionResult.d.ts +16 -0
  74. package/dist/project/monetization/ProjectMonetizationExecutionResult.d.ts.map +1 -0
  75. package/dist/project/monetization/ProjectMonetizationExecutionResult.js +2 -0
  76. package/dist/project/monetization/ProjectMonetizationExecutionResult.js.map +1 -0
  77. package/dist/project/monetization/ProjectMonetizationInspection.d.ts +13 -0
  78. package/dist/project/monetization/ProjectMonetizationInspection.d.ts.map +1 -0
  79. package/dist/project/monetization/ProjectMonetizationInspection.js +2 -0
  80. package/dist/project/monetization/ProjectMonetizationInspection.js.map +1 -0
  81. package/dist/project/monetization/ProjectMonetizationInspectionResult.d.ts +10 -0
  82. package/dist/project/monetization/ProjectMonetizationInspectionResult.d.ts.map +1 -0
  83. package/dist/project/monetization/ProjectMonetizationInspectionResult.js +2 -0
  84. package/dist/project/monetization/ProjectMonetizationInspectionResult.js.map +1 -0
  85. package/dist/project/monetization/ProjectMonetizationPlan.d.ts +6 -0
  86. package/dist/project/monetization/ProjectMonetizationPlan.d.ts.map +1 -0
  87. package/dist/project/monetization/ProjectMonetizationPlan.js +2 -0
  88. package/dist/project/monetization/ProjectMonetizationPlan.js.map +1 -0
  89. package/dist/project/monetization/ProjectMonetizationRuntime.d.ts +12 -0
  90. package/dist/project/monetization/ProjectMonetizationRuntime.d.ts.map +1 -0
  91. package/dist/project/monetization/ProjectMonetizationRuntime.js +2 -0
  92. package/dist/project/monetization/ProjectMonetizationRuntime.js.map +1 -0
  93. package/dist/project/monetization/ProjectMonetizationTargets.d.ts +5 -0
  94. package/dist/project/monetization/ProjectMonetizationTargets.d.ts.map +1 -0
  95. package/dist/project/monetization/ProjectMonetizationTargets.js +2 -0
  96. package/dist/project/monetization/ProjectMonetizationTargets.js.map +1 -0
  97. package/dist/project/monetization/ResolvedProjectMonetizationAccess.d.ts +7 -0
  98. package/dist/project/monetization/ResolvedProjectMonetizationAccess.d.ts.map +1 -0
  99. package/dist/project/monetization/ResolvedProjectMonetizationAccess.js +2 -0
  100. package/dist/project/monetization/ResolvedProjectMonetizationAccess.js.map +1 -0
  101. package/dist/project/monetization/areProjectMonetizationPlansEqual.d.ts +3 -0
  102. package/dist/project/monetization/areProjectMonetizationPlansEqual.d.ts.map +1 -0
  103. package/dist/project/monetization/areProjectMonetizationPlansEqual.js +4 -0
  104. package/dist/project/monetization/areProjectMonetizationPlansEqual.js.map +1 -0
  105. package/dist/project/monetization/createProjectMonetizationPlan.d.ts +4 -0
  106. package/dist/project/monetization/createProjectMonetizationPlan.d.ts.map +1 -0
  107. package/dist/project/monetization/createProjectMonetizationPlan.js +14 -0
  108. package/dist/project/monetization/createProjectMonetizationPlan.js.map +1 -0
  109. package/dist/project/monetization/createProjectMonetizationRevision.d.ts +3 -0
  110. package/dist/project/monetization/createProjectMonetizationRevision.d.ts.map +1 -0
  111. package/dist/project/monetization/createProjectMonetizationRevision.js +5 -0
  112. package/dist/project/monetization/createProjectMonetizationRevision.js.map +1 -0
  113. package/dist/project/monetization/defaultProjectMonetizationRuntime.d.ts +3 -0
  114. package/dist/project/monetization/defaultProjectMonetizationRuntime.d.ts.map +1 -0
  115. package/dist/project/monetization/defaultProjectMonetizationRuntime.js +12 -0
  116. package/dist/project/monetization/defaultProjectMonetizationRuntime.js.map +1 -0
  117. package/dist/project/monetization/executeProjectMonetizationSync.d.ts +4 -0
  118. package/dist/project/monetization/executeProjectMonetizationSync.d.ts.map +1 -0
  119. package/dist/project/monetization/executeProjectMonetizationSync.js +6 -0
  120. package/dist/project/monetization/executeProjectMonetizationSync.js.map +1 -0
  121. package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.d.ts +5 -0
  122. package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.d.ts.map +1 -0
  123. package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.js +63 -0
  124. package/dist/project/monetization/executeProjectMonetizationSyncWithRuntime.js.map +1 -0
  125. package/dist/project/monetization/executeProjectMonetizationTargets.d.ts +23 -0
  126. package/dist/project/monetization/executeProjectMonetizationTargets.d.ts.map +1 -0
  127. package/dist/project/monetization/executeProjectMonetizationTargets.js +66 -0
  128. package/dist/project/monetization/executeProjectMonetizationTargets.js.map +1 -0
  129. package/dist/project/monetization/inspectProjectMonetization.d.ts +4 -0
  130. package/dist/project/monetization/inspectProjectMonetization.d.ts.map +1 -0
  131. package/dist/project/monetization/inspectProjectMonetization.js +6 -0
  132. package/dist/project/monetization/inspectProjectMonetization.js.map +1 -0
  133. package/dist/project/monetization/inspectProjectMonetizationWithRuntime.d.ts +5 -0
  134. package/dist/project/monetization/inspectProjectMonetizationWithRuntime.d.ts.map +1 -0
  135. package/dist/project/monetization/inspectProjectMonetizationWithRuntime.js +78 -0
  136. package/dist/project/monetization/inspectProjectMonetizationWithRuntime.js.map +1 -0
  137. package/dist/project/monetization/parseProjectMonetization.d.ts +3 -0
  138. package/dist/project/monetization/parseProjectMonetization.d.ts.map +1 -0
  139. package/dist/project/monetization/parseProjectMonetization.js +127 -0
  140. package/dist/project/monetization/parseProjectMonetization.js.map +1 -0
  141. package/dist/project/monetization/readProjectMonetization.d.ts +5 -0
  142. package/dist/project/monetization/readProjectMonetization.d.ts.map +1 -0
  143. package/dist/project/monetization/readProjectMonetization.js +19 -0
  144. package/dist/project/monetization/readProjectMonetization.js.map +1 -0
  145. package/dist/project/monetization/resolveProjectMonetizationAccess.d.ts +4 -0
  146. package/dist/project/monetization/resolveProjectMonetizationAccess.d.ts.map +1 -0
  147. package/dist/project/monetization/resolveProjectMonetizationAccess.js +7 -0
  148. package/dist/project/monetization/resolveProjectMonetizationAccess.js.map +1 -0
  149. package/dist/project/monetization/resolveProjectMonetizationTargets.d.ts +13 -0
  150. package/dist/project/monetization/resolveProjectMonetizationTargets.d.ts.map +1 -0
  151. package/dist/project/monetization/resolveProjectMonetizationTargets.js +27 -0
  152. package/dist/project/monetization/resolveProjectMonetizationTargets.js.map +1 -0
  153. package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.d.ts +14 -0
  154. package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.d.ts.map +1 -0
  155. package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.js +2 -0
  156. package/dist/providers/appStoreConnect/AppStoreMonetizationExecutionResult.js.map +1 -0
  157. package/dist/providers/appStoreConnect/AppStoreMonetizationResult.d.ts +14 -0
  158. package/dist/providers/appStoreConnect/AppStoreMonetizationResult.d.ts.map +1 -0
  159. package/dist/providers/appStoreConnect/AppStoreMonetizationResult.js +2 -0
  160. package/dist/providers/appStoreConnect/AppStoreMonetizationResult.js.map +1 -0
  161. package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.d.ts +32 -0
  162. package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.d.ts.map +1 -0
  163. package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.js +2 -0
  164. package/dist/providers/appStoreConnect/AppStoreMonetizationSnapshot.js.map +1 -0
  165. package/dist/providers/appStoreConnect/AppStoreProductVersion.d.ts +7 -0
  166. package/dist/providers/appStoreConnect/AppStoreProductVersion.d.ts.map +1 -0
  167. package/dist/providers/appStoreConnect/AppStoreProductVersion.js +2 -0
  168. package/dist/providers/appStoreConnect/AppStoreProductVersion.js.map +1 -0
  169. package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.d.ts +5 -0
  170. package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.d.ts.map +1 -0
  171. package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.js +2 -0
  172. package/dist/providers/appStoreConnect/AppStoreResolvedPricePoint.js.map +1 -0
  173. package/dist/providers/appStoreConnect/appStoreMonetizationUrls.d.ts +25 -0
  174. package/dist/providers/appStoreConnect/appStoreMonetizationUrls.d.ts.map +1 -0
  175. package/dist/providers/appStoreConnect/appStoreMonetizationUrls.js +67 -0
  176. package/dist/providers/appStoreConnect/appStoreMonetizationUrls.js.map +1 -0
  177. package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.d.ts +10 -0
  178. package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.d.ts.map +1 -0
  179. package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.js +67 -0
  180. package/dist/providers/appStoreConnect/createAppStoreMonetizationProduct.js.map +1 -0
  181. package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.d.ts +8 -0
  182. package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.d.ts.map +1 -0
  183. package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.js +67 -0
  184. package/dist/providers/appStoreConnect/ensureAppStoreProductVersion.js.map +1 -0
  185. package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.d.ts +10 -0
  186. package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.d.ts.map +1 -0
  187. package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.js +78 -0
  188. package/dist/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.js.map +1 -0
  189. package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.d.ts +19 -0
  190. package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.d.ts.map +1 -0
  191. package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.js +117 -0
  192. package/dist/providers/appStoreConnect/executeAppStoreMonetizationPlan.js.map +1 -0
  193. package/dist/providers/appStoreConnect/inspectAppStoreMonetization.d.ts +16 -0
  194. package/dist/providers/appStoreConnect/inspectAppStoreMonetization.d.ts.map +1 -0
  195. package/dist/providers/appStoreConnect/inspectAppStoreMonetization.js +53 -0
  196. package/dist/providers/appStoreConnect/inspectAppStoreMonetization.js.map +1 -0
  197. package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.d.ts +3 -0
  198. package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.d.ts.map +1 -0
  199. package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.js +14 -0
  200. package/dist/providers/appStoreConnect/mapAppStoreSubscriptionPeriod.js.map +1 -0
  201. package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.d.ts +5 -0
  202. package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.d.ts.map +1 -0
  203. package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.js +65 -0
  204. package/dist/providers/appStoreConnect/normalizeAppStoreMonetization.js.map +1 -0
  205. package/dist/providers/appStoreConnect/readAppStoreCollection.d.ts +11 -0
  206. package/dist/providers/appStoreConnect/readAppStoreCollection.d.ts.map +1 -0
  207. package/dist/providers/appStoreConnect/readAppStoreCollection.js +43 -0
  208. package/dist/providers/appStoreConnect/readAppStoreCollection.js.map +1 -0
  209. package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.d.ts +17 -0
  210. package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.d.ts.map +1 -0
  211. package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.js +114 -0
  212. package/dist/providers/appStoreConnect/readAppStoreMonetizationPrice.js.map +1 -0
  213. package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.d.ts +11 -0
  214. package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.d.ts.map +1 -0
  215. package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.js +210 -0
  216. package/dist/providers/appStoreConnect/readAppStoreMonetizationSnapshot.js.map +1 -0
  217. package/dist/providers/appStoreConnect/readAppStoreProductVersion.d.ts +9 -0
  218. package/dist/providers/appStoreConnect/readAppStoreProductVersion.d.ts.map +1 -0
  219. package/dist/providers/appStoreConnect/readAppStoreProductVersion.js +56 -0
  220. package/dist/providers/appStoreConnect/readAppStoreProductVersion.js.map +1 -0
  221. package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.d.ts +9 -0
  222. package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.d.ts.map +1 -0
  223. package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.js +44 -0
  224. package/dist/providers/appStoreConnect/readAppStoreVersionLocalizations.js.map +1 -0
  225. package/dist/providers/appStoreConnect/resolveAppStorePricePoint.d.ts +11 -0
  226. package/dist/providers/appStoreConnect/resolveAppStorePricePoint.d.ts.map +1 -0
  227. package/dist/providers/appStoreConnect/resolveAppStorePricePoint.js +46 -0
  228. package/dist/providers/appStoreConnect/resolveAppStorePricePoint.js.map +1 -0
  229. package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.d.ts +10 -0
  230. package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.d.ts.map +1 -0
  231. package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.js +80 -0
  232. package/dist/providers/appStoreConnect/syncAppStoreMonetizationLocalizations.js.map +1 -0
  233. package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.d.ts +3 -0
  234. package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.d.ts.map +1 -0
  235. package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.js +15 -0
  236. package/dist/providers/appStoreConnect/toAppStoreSubscriptionPeriod.js.map +1 -0
  237. package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.d.ts +2 -0
  238. package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.d.ts.map +1 -0
  239. package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.js +255 -0
  240. package/dist/providers/appStoreConnect/toAppStoreTerritoryCode.js.map +1 -0
  241. package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.d.ts +11 -0
  242. package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.d.ts.map +1 -0
  243. package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.js +83 -0
  244. package/dist/providers/appStoreConnect/updateAppStoreMonetizationPrice.js.map +1 -0
  245. package/dist/providers/appStoreConnect/updateAppStoreSubscription.d.ts +9 -0
  246. package/dist/providers/appStoreConnect/updateAppStoreSubscription.d.ts.map +1 -0
  247. package/dist/providers/appStoreConnect/updateAppStoreSubscription.js +24 -0
  248. package/dist/providers/appStoreConnect/updateAppStoreSubscription.js.map +1 -0
  249. package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.d.ts +13 -0
  250. package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.d.ts.map +1 -0
  251. package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.js +94 -0
  252. package/dist/providers/appStoreConnect/writeAppStoreMonetizationProduct.js.map +1 -0
  253. package/dist/providers/googlePlay/GooglePlayMonetizationResult.d.ts +24 -0
  254. package/dist/providers/googlePlay/GooglePlayMonetizationResult.d.ts.map +1 -0
  255. package/dist/providers/googlePlay/GooglePlayMonetizationResult.js +2 -0
  256. package/dist/providers/googlePlay/GooglePlayMonetizationResult.js.map +1 -0
  257. package/dist/providers/googlePlay/GooglePlayPriceConversion.d.ts +4 -0
  258. package/dist/providers/googlePlay/GooglePlayPriceConversion.d.ts.map +1 -0
  259. package/dist/providers/googlePlay/GooglePlayPriceConversion.js +2 -0
  260. package/dist/providers/googlePlay/GooglePlayPriceConversion.js.map +1 -0
  261. package/dist/providers/googlePlay/convertGooglePlayRegionPrices.d.ts +10 -0
  262. package/dist/providers/googlePlay/convertGooglePlayRegionPrices.d.ts.map +1 -0
  263. package/dist/providers/googlePlay/convertGooglePlayRegionPrices.js +32 -0
  264. package/dist/providers/googlePlay/convertGooglePlayRegionPrices.js.map +1 -0
  265. package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.d.ts +18 -0
  266. package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.d.ts.map +1 -0
  267. package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.js +97 -0
  268. package/dist/providers/googlePlay/executeGooglePlayMonetizationPlan.js.map +1 -0
  269. package/dist/providers/googlePlay/googlePlayMonetizationUrls.d.ts +11 -0
  270. package/dist/providers/googlePlay/googlePlayMonetizationUrls.d.ts.map +1 -0
  271. package/dist/providers/googlePlay/googlePlayMonetizationUrls.js +36 -0
  272. package/dist/providers/googlePlay/googlePlayMonetizationUrls.js.map +1 -0
  273. package/dist/providers/googlePlay/inspectGooglePlayMonetization.d.ts +15 -0
  274. package/dist/providers/googlePlay/inspectGooglePlayMonetization.d.ts.map +1 -0
  275. package/dist/providers/googlePlay/inspectGooglePlayMonetization.js +49 -0
  276. package/dist/providers/googlePlay/inspectGooglePlayMonetization.js.map +1 -0
  277. package/dist/providers/googlePlay/normalizeGooglePlayMonetization.d.ts +8 -0
  278. package/dist/providers/googlePlay/normalizeGooglePlayMonetization.d.ts.map +1 -0
  279. package/dist/providers/googlePlay/normalizeGooglePlayMonetization.js +169 -0
  280. package/dist/providers/googlePlay/normalizeGooglePlayMonetization.js.map +1 -0
  281. package/dist/providers/googlePlay/readGooglePlayMonetizationResources.d.ts +12 -0
  282. package/dist/providers/googlePlay/readGooglePlayMonetizationResources.d.ts.map +1 -0
  283. package/dist/providers/googlePlay/readGooglePlayMonetizationResources.js +62 -0
  284. package/dist/providers/googlePlay/readGooglePlayMonetizationResources.js.map +1 -0
  285. package/dist/providers/googlePlay/toGooglePlayMoney.d.ts +3 -0
  286. package/dist/providers/googlePlay/toGooglePlayMoney.d.ts.map +1 -0
  287. package/dist/providers/googlePlay/toGooglePlayMoney.js +11 -0
  288. package/dist/providers/googlePlay/toGooglePlayMoney.js.map +1 -0
  289. package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.d.ts +10 -0
  290. package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.d.ts.map +1 -0
  291. package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.js +121 -0
  292. package/dist/providers/googlePlay/updateGooglePlayMonetizationPrice.js.map +1 -0
  293. package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.d.ts +13 -0
  294. package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.d.ts.map +1 -0
  295. package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.js +127 -0
  296. package/dist/providers/googlePlay/writeGooglePlayMonetizationProduct.js.map +1 -0
  297. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ const V1 = 'https://api.appstoreconnect.apple.com/v1';
2
+ const V2 = 'https://api.appstoreconnect.apple.com/v2';
3
+ export const appStoreMonetizationUrls = {
4
+ inAppPurchases: (appId) => `${V1}/apps/${segment(appId)}/inAppPurchasesV2?fields[inAppPurchases]=productId,inAppPurchaseType,state&limit=200`,
5
+ subscriptionGroups: (appId) => {
6
+ const query = new URLSearchParams({
7
+ 'fields[subscriptionGroups]': 'referenceName,subscriptions',
8
+ 'fields[subscriptions]': 'productId,state,subscriptionPeriod,groupLevel,group',
9
+ include: 'subscriptions',
10
+ limit: '200',
11
+ 'limit[subscriptions]': '200',
12
+ });
13
+ return `${V1}/apps/${segment(appId)}/subscriptionGroups?${query.toString()}`;
14
+ },
15
+ iapVersions: (id) => `${V2}/inAppPurchases/${segment(id)}/versions?fields[inAppPurchaseVersions]=version,state&limit=200`,
16
+ subscriptionVersions: (id) => `${V1}/subscriptions/${segment(id)}/versions?fields[subscriptionVersions]=version,state&limit=200`,
17
+ iapVersionLocalizations: (id) => `${V1}/inAppPurchaseVersions/${segment(id)}/localizations?limit=200`,
18
+ subscriptionVersionLocalizations: (id) => `${V1}/subscriptionVersions/${segment(id)}/localizations?limit=200`,
19
+ iapPricePoints: (id, territory) => pricePointUrl(`${V2}/inAppPurchases/${segment(id)}/pricePoints`, territory, 'inAppPurchasePricePoints'),
20
+ subscriptionPricePoints: (id, territory) => pricePointUrl(`${V1}/subscriptions/${segment(id)}/pricePoints`, territory, 'subscriptionPricePoints'),
21
+ iapPriceSchedule: (id) => {
22
+ const query = new URLSearchParams({
23
+ 'fields[inAppPurchasePriceSchedules]': 'baseTerritory,manualPrices',
24
+ 'fields[inAppPurchasePrices]': 'startDate,endDate,inAppPurchasePricePoint,territory',
25
+ include: 'baseTerritory,manualPrices',
26
+ 'limit[manualPrices]': '50',
27
+ });
28
+ return `${V2}/inAppPurchases/${segment(id)}/iapPriceSchedule?${query.toString()}`;
29
+ },
30
+ subscriptionPrices: (id, territory) => {
31
+ const query = new URLSearchParams({
32
+ 'fields[subscriptionPrices]': 'startDate,preserved,planType,territory,subscriptionPricePoint',
33
+ 'fields[subscriptionPricePoints]': 'customerPrice',
34
+ 'fields[territories]': 'currency',
35
+ 'filter[territory]': territory,
36
+ include: 'territory,subscriptionPricePoint',
37
+ limit: '200',
38
+ });
39
+ return `${V1}/subscriptions/${segment(id)}/prices?${query.toString()}`;
40
+ },
41
+ createIap: () => `${V2}/inAppPurchases`,
42
+ createSubscriptionGroup: () => `${V1}/subscriptionGroups`,
43
+ createSubscription: () => `${V1}/subscriptions`,
44
+ updateSubscription: (id) => `${V1}/subscriptions/${segment(id)}`,
45
+ createIapVersion: () => `${V1}/inAppPurchaseVersions`,
46
+ createSubscriptionVersion: () => `${V1}/subscriptionVersions`,
47
+ createIapLocalization: () => `${V2}/inAppPurchaseLocalizations`,
48
+ createSubscriptionLocalization: () => `${V2}/subscriptionLocalizations`,
49
+ updateIapLocalization: (id) => `${V2}/inAppPurchaseLocalizations/${segment(id)}`,
50
+ updateSubscriptionLocalization: (id) => `${V2}/subscriptionLocalizations/${segment(id)}`,
51
+ createIapPriceSchedule: () => `${V1}/inAppPurchasePriceSchedules`,
52
+ createSubscriptionPrice: () => `${V1}/subscriptionPrices`,
53
+ };
54
+ function pricePointUrl(base, territory, fieldsKey) {
55
+ const query = new URLSearchParams({
56
+ [`fields[${fieldsKey}]`]: 'customerPrice,territory',
57
+ 'fields[territories]': 'currency',
58
+ 'filter[territory]': territory,
59
+ include: 'territory',
60
+ limit: '8000',
61
+ });
62
+ return `${base}?${query.toString()}`;
63
+ }
64
+ function segment(value) {
65
+ return encodeURIComponent(value);
66
+ }
67
+ //# sourceMappingURL=appStoreMonetizationUrls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appStoreMonetizationUrls.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/appStoreMonetizationUrls.ts"],"names":[],"mappings":"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","sourcesContent":["const V1 = 'https://api.appstoreconnect.apple.com/v1';\nconst V2 = 'https://api.appstoreconnect.apple.com/v2';\n\nexport const appStoreMonetizationUrls = {\n inAppPurchases: (appId: string) =>\n `${V1}/apps/${segment(appId)}/inAppPurchasesV2?fields[inAppPurchases]=productId,inAppPurchaseType,state&limit=200`,\n subscriptionGroups: (appId: string) => {\n const query = new URLSearchParams({\n 'fields[subscriptionGroups]': 'referenceName,subscriptions',\n 'fields[subscriptions]': 'productId,state,subscriptionPeriod,groupLevel,group',\n include: 'subscriptions',\n limit: '200',\n 'limit[subscriptions]': '200',\n });\n return `${V1}/apps/${segment(appId)}/subscriptionGroups?${query.toString()}`;\n },\n iapVersions: (id: string) =>\n `${V2}/inAppPurchases/${segment(id)}/versions?fields[inAppPurchaseVersions]=version,state&limit=200`,\n subscriptionVersions: (id: string) =>\n `${V1}/subscriptions/${segment(id)}/versions?fields[subscriptionVersions]=version,state&limit=200`,\n iapVersionLocalizations: (id: string) =>\n `${V1}/inAppPurchaseVersions/${segment(id)}/localizations?limit=200`,\n subscriptionVersionLocalizations: (id: string) =>\n `${V1}/subscriptionVersions/${segment(id)}/localizations?limit=200`,\n iapPricePoints: (id: string, territory: string) =>\n pricePointUrl(\n `${V2}/inAppPurchases/${segment(id)}/pricePoints`,\n territory,\n 'inAppPurchasePricePoints',\n ),\n subscriptionPricePoints: (id: string, territory: string) =>\n pricePointUrl(\n `${V1}/subscriptions/${segment(id)}/pricePoints`,\n territory,\n 'subscriptionPricePoints',\n ),\n iapPriceSchedule: (id: string) => {\n const query = new URLSearchParams({\n 'fields[inAppPurchasePriceSchedules]': 'baseTerritory,manualPrices',\n 'fields[inAppPurchasePrices]': 'startDate,endDate,inAppPurchasePricePoint,territory',\n include: 'baseTerritory,manualPrices',\n 'limit[manualPrices]': '50',\n });\n return `${V2}/inAppPurchases/${segment(id)}/iapPriceSchedule?${query.toString()}`;\n },\n subscriptionPrices: (id: string, territory: string) => {\n const query = new URLSearchParams({\n 'fields[subscriptionPrices]': 'startDate,preserved,planType,territory,subscriptionPricePoint',\n 'fields[subscriptionPricePoints]': 'customerPrice',\n 'fields[territories]': 'currency',\n 'filter[territory]': territory,\n include: 'territory,subscriptionPricePoint',\n limit: '200',\n });\n return `${V1}/subscriptions/${segment(id)}/prices?${query.toString()}`;\n },\n createIap: () => `${V2}/inAppPurchases`,\n createSubscriptionGroup: () => `${V1}/subscriptionGroups`,\n createSubscription: () => `${V1}/subscriptions`,\n updateSubscription: (id: string) => `${V1}/subscriptions/${segment(id)}`,\n createIapVersion: () => `${V1}/inAppPurchaseVersions`,\n createSubscriptionVersion: () => `${V1}/subscriptionVersions`,\n createIapLocalization: () => `${V2}/inAppPurchaseLocalizations`,\n createSubscriptionLocalization: () => `${V2}/subscriptionLocalizations`,\n updateIapLocalization: (id: string) => `${V2}/inAppPurchaseLocalizations/${segment(id)}`,\n updateSubscriptionLocalization: (id: string) => `${V2}/subscriptionLocalizations/${segment(id)}`,\n createIapPriceSchedule: () => `${V1}/inAppPurchasePriceSchedules`,\n createSubscriptionPrice: () => `${V1}/subscriptionPrices`,\n};\n\nfunction pricePointUrl(base: string, territory: string, fieldsKey: string): string {\n const query = new URLSearchParams({\n [`fields[${fieldsKey}]`]: 'customerPrice,territory',\n 'fields[territories]': 'currency',\n 'filter[territory]': territory,\n include: 'territory',\n limit: '8000',\n });\n return `${base}?${query.toString()}`;\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { MonetizationProduct } from '../../domain/monetization/MonetizationProduct';
2
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
3
+ export declare function createAppStoreMonetizationProduct(options: {
4
+ readonly appId: string;
5
+ readonly product: MonetizationProduct;
6
+ readonly familyId?: string;
7
+ readonly token: string;
8
+ readonly request: AppStoreConnectTransport;
9
+ }): Promise<string | null>;
10
+ //# sourceMappingURL=createAppStoreMonetizationProduct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAppStoreMonetizationProduct.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/createAppStoreMonetizationProduct.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,wBAAsB,iCAAiC,CAAC,OAAO,EAAE;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEzB"}
@@ -0,0 +1,67 @@
1
+ import { appStoreMonetizationUrls } from './appStoreMonetizationUrls';
2
+ import { toAppStoreSubscriptionPeriod } from './toAppStoreSubscriptionPeriod';
3
+ export async function createAppStoreMonetizationProduct(options) {
4
+ return options.product.kind === 'subscription' ? createSubscription(options) : createIap(options);
5
+ }
6
+ async function createIap(options) {
7
+ const response = await options.request({
8
+ method: 'POST',
9
+ url: appStoreMonetizationUrls.createIap(),
10
+ token: options.token,
11
+ body: JSON.stringify({
12
+ data: {
13
+ type: 'inAppPurchases',
14
+ attributes: {
15
+ name: options.product.id,
16
+ productId: options.product.id,
17
+ inAppPurchaseType: options.product.kind === 'consumable' ? 'CONSUMABLE' : 'NON_CONSUMABLE',
18
+ },
19
+ relationships: { app: { data: { type: 'apps', id: options.appId } } },
20
+ },
21
+ }),
22
+ });
23
+ return response.status === 201 ? parseId(response.body, 'inAppPurchases') : null;
24
+ }
25
+ async function createSubscription(options) {
26
+ const { subscription } = options.product;
27
+ if (subscription === undefined || options.familyId === undefined)
28
+ return null;
29
+ const response = await options.request({
30
+ method: 'POST',
31
+ url: appStoreMonetizationUrls.createSubscription(),
32
+ token: options.token,
33
+ body: JSON.stringify({
34
+ data: {
35
+ type: 'subscriptions',
36
+ attributes: {
37
+ name: options.product.id,
38
+ productId: options.product.id,
39
+ subscriptionPeriod: toAppStoreSubscriptionPeriod(subscription.period),
40
+ ...(subscription.level === undefined ? {} : { groupLevel: subscription.level }),
41
+ },
42
+ relationships: {
43
+ group: { data: { type: 'subscriptionGroups', id: options.familyId } },
44
+ },
45
+ },
46
+ }),
47
+ });
48
+ return response.status === 201 ? parseId(response.body, 'subscriptions') : null;
49
+ }
50
+ function parseId(body, type) {
51
+ try {
52
+ const value = JSON.parse(body);
53
+ if (!isRecord(value) || !isRecord(value.data))
54
+ return null;
55
+ return value.data.type === type && isString(value.data.id) ? value.data.id : null;
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ function isRecord(value) {
62
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
63
+ }
64
+ function isString(value) {
65
+ return typeof value === 'string';
66
+ }
67
+ //# sourceMappingURL=createAppStoreMonetizationProduct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAppStoreMonetizationProduct.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/createAppStoreMonetizationProduct.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MonetizationProduct } from '../../domain/monetization/MonetizationProduct';\nimport type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { appStoreMonetizationUrls } from './appStoreMonetizationUrls';\nimport { toAppStoreSubscriptionPeriod } from './toAppStoreSubscriptionPeriod';\n\nexport async function createAppStoreMonetizationProduct(options: {\n readonly appId: string;\n readonly product: MonetizationProduct;\n readonly familyId?: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<string | null> {\n return options.product.kind === 'subscription' ? createSubscription(options) : createIap(options);\n}\n\nasync function createIap(\n options: Parameters<typeof createAppStoreMonetizationProduct>[0],\n): Promise<string | null> {\n const response = await options.request({\n method: 'POST',\n url: appStoreMonetizationUrls.createIap(),\n token: options.token,\n body: JSON.stringify({\n data: {\n type: 'inAppPurchases',\n attributes: {\n name: options.product.id,\n productId: options.product.id,\n inAppPurchaseType:\n options.product.kind === 'consumable' ? 'CONSUMABLE' : 'NON_CONSUMABLE',\n },\n relationships: { app: { data: { type: 'apps', id: options.appId } } },\n },\n }),\n });\n return response.status === 201 ? parseId(response.body, 'inAppPurchases') : null;\n}\n\nasync function createSubscription(\n options: Parameters<typeof createAppStoreMonetizationProduct>[0],\n): Promise<string | null> {\n const { subscription } = options.product;\n if (subscription === undefined || options.familyId === undefined) return null;\n const response = await options.request({\n method: 'POST',\n url: appStoreMonetizationUrls.createSubscription(),\n token: options.token,\n body: JSON.stringify({\n data: {\n type: 'subscriptions',\n attributes: {\n name: options.product.id,\n productId: options.product.id,\n subscriptionPeriod: toAppStoreSubscriptionPeriod(subscription.period),\n ...(subscription.level === undefined ? {} : { groupLevel: subscription.level }),\n },\n relationships: {\n group: { data: { type: 'subscriptionGroups', id: options.familyId } },\n },\n },\n }),\n });\n return response.status === 201 ? parseId(response.body, 'subscriptions') : null;\n}\n\nfunction parseId(body: string, type: string): string | null {\n try {\n const value: unknown = JSON.parse(body);\n if (!isRecord(value) || !isRecord(value.data)) return null;\n return value.data.type === type && isString(value.data.id) ? value.data.id : null;\n } catch {\n return null;\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 isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
2
+ export declare function ensureAppStoreProductVersion(options: {
3
+ readonly kind: 'iap' | 'subscription';
4
+ readonly productId: string;
5
+ readonly token: string;
6
+ readonly request: AppStoreConnectTransport;
7
+ }): Promise<string | null>;
8
+ //# sourceMappingURL=ensureAppStoreProductVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureAppStoreProductVersion.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/ensureAppStoreProductVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAczB"}
@@ -0,0 +1,67 @@
1
+ import { appStoreMonetizationUrls } from './appStoreMonetizationUrls';
2
+ import { readAppStoreProductVersion } from './readAppStoreProductVersion';
3
+ export async function ensureAppStoreProductVersion(options) {
4
+ const current = await readAppStoreProductVersion(options);
5
+ if (current === null)
6
+ return null;
7
+ if (current?.state === 'PREPARE_FOR_SUBMISSION')
8
+ return current.resourceId;
9
+ const response = options.kind === 'iap'
10
+ ? await createIapVersion(options)
11
+ : await createSubscriptionVersion(options);
12
+ return response.status === 201
13
+ ? parseResourceId(response.body, options.kind === 'iap' ? 'inAppPurchaseVersions' : 'subscriptionVersions')
14
+ : null;
15
+ }
16
+ function createIapVersion(options) {
17
+ return options.request({
18
+ method: 'POST',
19
+ url: appStoreMonetizationUrls.createIapVersion(),
20
+ token: options.token,
21
+ body: JSON.stringify({
22
+ data: {
23
+ type: 'inAppPurchaseVersions',
24
+ relationships: {
25
+ inAppPurchase: {
26
+ data: { type: 'inAppPurchases', id: options.productId },
27
+ },
28
+ },
29
+ },
30
+ }),
31
+ });
32
+ }
33
+ function createSubscriptionVersion(options) {
34
+ return options.request({
35
+ method: 'POST',
36
+ url: appStoreMonetizationUrls.createSubscriptionVersion(),
37
+ token: options.token,
38
+ body: JSON.stringify({
39
+ data: {
40
+ type: 'subscriptionVersions',
41
+ relationships: {
42
+ subscription: {
43
+ data: { type: 'subscriptions', id: options.productId },
44
+ },
45
+ },
46
+ },
47
+ }),
48
+ });
49
+ }
50
+ function parseResourceId(body, type) {
51
+ try {
52
+ const value = JSON.parse(body);
53
+ if (!isRecord(value) || !isRecord(value.data))
54
+ return null;
55
+ return value.data.type === type && isString(value.data.id) ? value.data.id : null;
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ function isRecord(value) {
62
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
63
+ }
64
+ function isString(value) {
65
+ return typeof value === 'string';
66
+ }
67
+ //# sourceMappingURL=ensureAppStoreProductVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureAppStoreProductVersion.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/ensureAppStoreProductVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { appStoreMonetizationUrls } from './appStoreMonetizationUrls';\nimport { readAppStoreProductVersion } from './readAppStoreProductVersion';\n\nexport async function ensureAppStoreProductVersion(options: {\n readonly kind: 'iap' | 'subscription';\n readonly productId: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<string | null> {\n const current = await readAppStoreProductVersion(options);\n if (current === null) return null;\n if (current?.state === 'PREPARE_FOR_SUBMISSION') return current.resourceId;\n const response =\n options.kind === 'iap'\n ? await createIapVersion(options)\n : await createSubscriptionVersion(options);\n return response.status === 201\n ? parseResourceId(\n response.body,\n options.kind === 'iap' ? 'inAppPurchaseVersions' : 'subscriptionVersions',\n )\n : null;\n}\n\nfunction createIapVersion(options: Parameters<typeof ensureAppStoreProductVersion>[0]) {\n return options.request({\n method: 'POST',\n url: appStoreMonetizationUrls.createIapVersion(),\n token: options.token,\n body: JSON.stringify({\n data: {\n type: 'inAppPurchaseVersions',\n relationships: {\n inAppPurchase: {\n data: { type: 'inAppPurchases', id: options.productId },\n },\n },\n },\n }),\n });\n}\n\nfunction createSubscriptionVersion(options: Parameters<typeof ensureAppStoreProductVersion>[0]) {\n return options.request({\n method: 'POST',\n url: appStoreMonetizationUrls.createSubscriptionVersion(),\n token: options.token,\n body: JSON.stringify({\n data: {\n type: 'subscriptionVersions',\n relationships: {\n subscription: {\n data: { type: 'subscriptions', id: options.productId },\n },\n },\n },\n }),\n });\n}\n\nfunction parseResourceId(body: string, type: string): string | null {\n try {\n const value: unknown = JSON.parse(body);\n if (!isRecord(value) || !isRecord(value.data)) return null;\n return value.data.type === type && isString(value.data.id) ? value.data.id : null;\n } catch {\n return null;\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 isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
2
+ import type { AppStoreMonetizationSnapshot } from './AppStoreMonetizationSnapshot';
3
+ export declare function ensureAppStoreSubscriptionFamily(options: {
4
+ readonly appId: string;
5
+ readonly family: string;
6
+ readonly snapshot: AppStoreMonetizationSnapshot;
7
+ readonly token: string;
8
+ readonly request: AppStoreConnectTransport;
9
+ }): Promise<string | null>;
10
+ //# sourceMappingURL=ensureAppStoreSubscriptionFamily.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureAppStoreSubscriptionFamily.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAEV,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AAIxC,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUzB"}
@@ -0,0 +1,78 @@
1
+ import { appStoreMonetizationUrls } from './appStoreMonetizationUrls';
2
+ import { readAppStoreCollection } from './readAppStoreCollection';
3
+ export async function ensureAppStoreSubscriptionFamily(options) {
4
+ const cached = uniqueFamily(options.snapshot.families, options.family);
5
+ if (cached === null)
6
+ return null;
7
+ if (cached !== undefined)
8
+ return cached.resourceId;
9
+ const current = await readFamilies(options);
10
+ if (current === null)
11
+ return null;
12
+ const existing = uniqueFamily(current, options.family);
13
+ if (existing === null)
14
+ return null;
15
+ if (existing !== undefined)
16
+ return existing.resourceId;
17
+ return createFamily(options);
18
+ }
19
+ async function readFamilies(options) {
20
+ const page = await readAppStoreCollection({
21
+ url: appStoreMonetizationUrls.subscriptionGroups(options.appId),
22
+ token: options.token,
23
+ request: options.request,
24
+ });
25
+ if (page === null)
26
+ return null;
27
+ const result = [];
28
+ for (const value of page.data) {
29
+ if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes))
30
+ return null;
31
+ if (!isString(value.attributes.referenceName))
32
+ return null;
33
+ result.push({ resourceId: value.id, referenceName: value.attributes.referenceName });
34
+ }
35
+ return result;
36
+ }
37
+ function uniqueFamily(values, family) {
38
+ const matches = values.filter((item) => item.referenceName === family);
39
+ if (matches.length > 1)
40
+ return null;
41
+ const [match] = matches;
42
+ return match;
43
+ }
44
+ async function createFamily(options) {
45
+ const response = await options.request({
46
+ method: 'POST',
47
+ url: appStoreMonetizationUrls.createSubscriptionGroup(),
48
+ token: options.token,
49
+ body: JSON.stringify({
50
+ data: {
51
+ type: 'subscriptionGroups',
52
+ attributes: { referenceName: options.family },
53
+ relationships: { app: { data: { type: 'apps', id: options.appId } } },
54
+ },
55
+ }),
56
+ });
57
+ return response.status === 201 ? parseId(response.body) : null;
58
+ }
59
+ function parseId(body) {
60
+ try {
61
+ const value = JSON.parse(body);
62
+ if (!isRecord(value) || !isRecord(value.data))
63
+ return null;
64
+ return value.data.type === 'subscriptionGroups' && isString(value.data.id)
65
+ ? value.data.id
66
+ : null;
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ function isRecord(value) {
73
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
74
+ }
75
+ function isString(value) {
76
+ return typeof value === 'string';
77
+ }
78
+ //# sourceMappingURL=ensureAppStoreSubscriptionFamily.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureAppStoreSubscriptionFamily.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/ensureAppStoreSubscriptionFamily.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport type {\n AppStoreMonetizationFamilyResource,\n AppStoreMonetizationSnapshot,\n} from './AppStoreMonetizationSnapshot';\nimport { appStoreMonetizationUrls } from './appStoreMonetizationUrls';\nimport { readAppStoreCollection } from './readAppStoreCollection';\n\nexport async function ensureAppStoreSubscriptionFamily(options: {\n readonly appId: string;\n readonly family: string;\n readonly snapshot: AppStoreMonetizationSnapshot;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<string | null> {\n const cached = uniqueFamily(options.snapshot.families, options.family);\n if (cached === null) return null;\n if (cached !== undefined) return cached.resourceId;\n const current = await readFamilies(options);\n if (current === null) return null;\n const existing = uniqueFamily(current, options.family);\n if (existing === null) return null;\n if (existing !== undefined) return existing.resourceId;\n return createFamily(options);\n}\n\nasync function readFamilies(\n options: Parameters<typeof ensureAppStoreSubscriptionFamily>[0],\n): Promise<readonly AppStoreMonetizationFamilyResource[] | null> {\n const page = await readAppStoreCollection({\n url: appStoreMonetizationUrls.subscriptionGroups(options.appId),\n token: options.token,\n request: options.request,\n });\n if (page === null) return null;\n const result: AppStoreMonetizationFamilyResource[] = [];\n for (const value of page.data) {\n if (!isRecord(value) || !isString(value.id) || !isRecord(value.attributes)) return null;\n if (!isString(value.attributes.referenceName)) return null;\n result.push({ resourceId: value.id, referenceName: value.attributes.referenceName });\n }\n return result;\n}\n\nfunction uniqueFamily(\n values: readonly AppStoreMonetizationFamilyResource[],\n family: string,\n): AppStoreMonetizationFamilyResource | null | undefined {\n const matches = values.filter((item) => item.referenceName === family);\n if (matches.length > 1) return null;\n const [match] = matches;\n return match;\n}\n\nasync function createFamily(\n options: Parameters<typeof ensureAppStoreSubscriptionFamily>[0],\n): Promise<string | null> {\n const response = await options.request({\n method: 'POST',\n url: appStoreMonetizationUrls.createSubscriptionGroup(),\n token: options.token,\n body: JSON.stringify({\n data: {\n type: 'subscriptionGroups',\n attributes: { referenceName: options.family },\n relationships: { app: { data: { type: 'apps', id: options.appId } } },\n },\n }),\n });\n return response.status === 201 ? parseId(response.body) : null;\n}\n\nfunction parseId(body: string): string | null {\n try {\n const value: unknown = JSON.parse(body);\n if (!isRecord(value) || !isRecord(value.data)) return null;\n return value.data.type === 'subscriptionGroups' && isString(value.data.id)\n ? value.data.id\n : null;\n } catch {\n return null;\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 isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
2
+ import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
3
+ import type { MonetizationDesiredState } from '../../domain/monetization/MonetizationDesiredState';
4
+ import type { MonetizationPlan } from '../../domain/monetization/MonetizationPlan';
5
+ import type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';
6
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
7
+ import type { AppStoreMonetizationExecutionResult } from './AppStoreMonetizationExecutionResult';
8
+ export declare function executeAppStoreMonetizationPlan(options: {
9
+ readonly bundleIdentifier: string;
10
+ readonly desired: MonetizationDesiredState;
11
+ readonly plan: MonetizationPlan;
12
+ readonly expectedRevision: string;
13
+ readonly credentials: readonly DeploymentCredentialReference[];
14
+ readonly resolveSecret: DeploymentSecretResolver;
15
+ readonly createToken: AppStoreConnectTokenFactory;
16
+ readonly request: AppStoreConnectTransport;
17
+ readonly now: Date;
18
+ }): Promise<AppStoreMonetizationExecutionResult>;
19
+ //# sourceMappingURL=executeAppStoreMonetizationPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeAppStoreMonetizationPlan.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/executeAppStoreMonetizationPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAGtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAGnF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAOjG,wBAAsB,+BAA+B,CAAC,OAAO,EAAE;IAC7D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAe/C"}
@@ -0,0 +1,117 @@
1
+ import { createMonetizationCurrentRevision } from '../../domain/monetization/createMonetizationCurrentRevision';
2
+ import { createMonetizationPlan } from '../../domain/monetization/createMonetizationPlan';
3
+ import { trackAppStoreConnectRequests } from './AppStoreConnectRequestTracker';
4
+ import { normalizeAppStoreMonetization } from './normalizeAppStoreMonetization';
5
+ import { readAppStoreMonetizationSnapshot } from './readAppStoreMonetizationSnapshot';
6
+ import { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';
7
+ import { writeAppStoreMonetizationProduct } from './writeAppStoreMonetizationProduct';
8
+ export async function executeAppStoreMonetizationPlan(options) {
9
+ if (options.plan.status === 'blocked')
10
+ return failed('APP_STORE_MONETIZATION_PLAN_BLOCKED');
11
+ const access = await resolveAppStoreConnectToken(options);
12
+ if (!access.ok)
13
+ return { status: 'action-required', action: access.action };
14
+ const tracker = trackAppStoreConnectRequests(options.request);
15
+ const snapshot = await readSnapshot(options, access.token, tracker.request);
16
+ if (snapshot === 'app-required')
17
+ return appRequired();
18
+ if (snapshot === null)
19
+ return providerFailure(tracker.blockingStatus());
20
+ const state = normalizeAppStoreMonetization(options.desired, snapshot);
21
+ const revision = createMonetizationCurrentRevision([state]);
22
+ if (revision !== options.expectedRevision)
23
+ return failed('APP_STORE_MONETIZATION_DRIFT');
24
+ if (!(await executeSteps(options, snapshot, access.token, tracker.request))) {
25
+ return providerFailure(tracker.blockingStatus());
26
+ }
27
+ return verify(options, access.token, tracker.request);
28
+ }
29
+ async function readSnapshot(options, token, request) {
30
+ return readAppStoreMonetizationSnapshot({
31
+ bundleIdentifier: options.bundleIdentifier,
32
+ desired: options.desired,
33
+ token,
34
+ request,
35
+ now: options.now,
36
+ });
37
+ }
38
+ async function executeSteps(options, snapshot, token, request) {
39
+ const groups = groupIosSteps(options.plan.steps);
40
+ for (const [productId, steps] of groups) {
41
+ const product = options.desired.products.find((item) => item.id === productId);
42
+ if (product === undefined)
43
+ return false;
44
+ if (!(await writeAppStoreMonetizationProduct({
45
+ snapshot,
46
+ product,
47
+ operations: steps.map((step) => step.operation),
48
+ token,
49
+ request,
50
+ now: options.now,
51
+ }))) {
52
+ return false;
53
+ }
54
+ }
55
+ return true;
56
+ }
57
+ function groupIosSteps(steps) {
58
+ const groups = new Map();
59
+ for (const step of steps) {
60
+ if (step.target !== 'ios')
61
+ continue;
62
+ const current = groups.get(step.productId) ?? [];
63
+ current.push(step);
64
+ groups.set(step.productId, current);
65
+ }
66
+ return groups;
67
+ }
68
+ async function verify(options, token, request) {
69
+ const snapshot = await readSnapshot(options, token, request);
70
+ if (snapshot === 'app-required')
71
+ return appRequired();
72
+ if (snapshot === null)
73
+ return failed('APP_STORE_MONETIZATION_VERIFICATION_FAILED');
74
+ const state = normalizeAppStoreMonetization(options.desired, snapshot);
75
+ const plan = createMonetizationPlan({
76
+ desired: options.desired,
77
+ currentRevision: createMonetizationCurrentRevision([state]),
78
+ states: [state],
79
+ });
80
+ return plan.status === 'no-change'
81
+ ? { status: 'completed', state }
82
+ : failed('APP_STORE_MONETIZATION_VERIFICATION_FAILED');
83
+ }
84
+ function providerFailure(status) {
85
+ if (status === 401)
86
+ return action('authentication', 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED');
87
+ if (status === 403)
88
+ return action('manual-action', 'APP_STORE_MONETIZATION_PERMISSION_REQUIRED');
89
+ return failed('APP_STORE_MONETIZATION_SYNC_FAILED');
90
+ }
91
+ function appRequired() {
92
+ return action('manual-action', 'APP_STORE_APP_REQUIRED');
93
+ }
94
+ function action(type, code) {
95
+ return {
96
+ status: 'action-required',
97
+ action: {
98
+ type,
99
+ provider: 'app-store-connect',
100
+ target: 'ios',
101
+ code,
102
+ message: 'App Store monetization requires provider action.',
103
+ },
104
+ };
105
+ }
106
+ function failed(code) {
107
+ return {
108
+ status: 'failed',
109
+ failure: {
110
+ code,
111
+ message: 'App Store monetization synchronization failed.',
112
+ target: 'ios',
113
+ provider: 'app-store-connect',
114
+ },
115
+ };
116
+ }
117
+ //# sourceMappingURL=executeAppStoreMonetizationPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeAppStoreMonetizationPlan.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/executeAppStoreMonetizationPlan.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';\nimport type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';\nimport { createMonetizationCurrentRevision } from '../../domain/monetization/createMonetizationCurrentRevision';\nimport { createMonetizationPlan } from '../../domain/monetization/createMonetizationPlan';\nimport type { MonetizationDesiredState } from '../../domain/monetization/MonetizationDesiredState';\nimport type { MonetizationPlan } from '../../domain/monetization/MonetizationPlan';\nimport type { MonetizationPlanStep } from '../../domain/monetization/MonetizationPlanStep';\nimport { trackAppStoreConnectRequests } from './AppStoreConnectRequestTracker';\nimport type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';\nimport type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport type { AppStoreMonetizationExecutionResult } from './AppStoreMonetizationExecutionResult';\nimport type { AppStoreMonetizationSnapshot } from './AppStoreMonetizationSnapshot';\nimport { normalizeAppStoreMonetization } from './normalizeAppStoreMonetization';\nimport { readAppStoreMonetizationSnapshot } from './readAppStoreMonetizationSnapshot';\nimport { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';\nimport { writeAppStoreMonetizationProduct } from './writeAppStoreMonetizationProduct';\n\nexport async function executeAppStoreMonetizationPlan(options: {\n readonly bundleIdentifier: string;\n readonly desired: MonetizationDesiredState;\n readonly plan: MonetizationPlan;\n readonly expectedRevision: string;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly createToken: AppStoreConnectTokenFactory;\n readonly request: AppStoreConnectTransport;\n readonly now: Date;\n}): Promise<AppStoreMonetizationExecutionResult> {\n if (options.plan.status === 'blocked') return failed('APP_STORE_MONETIZATION_PLAN_BLOCKED');\n const access = await resolveAppStoreConnectToken(options);\n if (!access.ok) return { status: 'action-required', action: access.action };\n const tracker = trackAppStoreConnectRequests(options.request);\n const snapshot = await readSnapshot(options, access.token, tracker.request);\n if (snapshot === 'app-required') return appRequired();\n if (snapshot === null) return providerFailure(tracker.blockingStatus());\n const state = normalizeAppStoreMonetization(options.desired, snapshot);\n const revision = createMonetizationCurrentRevision([state]);\n if (revision !== options.expectedRevision) return failed('APP_STORE_MONETIZATION_DRIFT');\n if (!(await executeSteps(options, snapshot, access.token, tracker.request))) {\n return providerFailure(tracker.blockingStatus());\n }\n return verify(options, access.token, tracker.request);\n}\n\nasync function readSnapshot(\n options: Parameters<typeof executeAppStoreMonetizationPlan>[0],\n token: string,\n request: AppStoreConnectTransport,\n): ReturnType<typeof readAppStoreMonetizationSnapshot> {\n return readAppStoreMonetizationSnapshot({\n bundleIdentifier: options.bundleIdentifier,\n desired: options.desired,\n token,\n request,\n now: options.now,\n });\n}\n\nasync function executeSteps(\n options: Parameters<typeof executeAppStoreMonetizationPlan>[0],\n snapshot: AppStoreMonetizationSnapshot,\n token: string,\n request: AppStoreConnectTransport,\n): Promise<boolean> {\n const groups = groupIosSteps(options.plan.steps);\n for (const [productId, steps] of groups) {\n const product = options.desired.products.find((item) => item.id === productId);\n if (product === undefined) return false;\n if (\n !(await writeAppStoreMonetizationProduct({\n snapshot,\n product,\n operations: steps.map((step) => step.operation),\n token,\n request,\n now: options.now,\n }))\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction groupIosSteps(\n steps: readonly MonetizationPlanStep[],\n): ReadonlyMap<string, readonly MonetizationPlanStep[]> {\n const groups = new Map<string, MonetizationPlanStep[]>();\n for (const step of steps) {\n if (step.target !== 'ios') continue;\n const current = groups.get(step.productId) ?? [];\n current.push(step);\n groups.set(step.productId, current);\n }\n return groups;\n}\n\nasync function verify(\n options: Parameters<typeof executeAppStoreMonetizationPlan>[0],\n token: string,\n request: AppStoreConnectTransport,\n): Promise<AppStoreMonetizationExecutionResult> {\n const snapshot = await readSnapshot(options, token, request);\n if (snapshot === 'app-required') return appRequired();\n if (snapshot === null) return failed('APP_STORE_MONETIZATION_VERIFICATION_FAILED');\n const state = normalizeAppStoreMonetization(options.desired, snapshot);\n const plan = createMonetizationPlan({\n desired: options.desired,\n currentRevision: createMonetizationCurrentRevision([state]),\n states: [state],\n });\n return plan.status === 'no-change'\n ? { status: 'completed', state }\n : failed('APP_STORE_MONETIZATION_VERIFICATION_FAILED');\n}\n\nfunction providerFailure(status: 401 | 403 | null): AppStoreMonetizationExecutionResult {\n if (status === 401) return action('authentication', 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED');\n if (status === 403) return action('manual-action', 'APP_STORE_MONETIZATION_PERMISSION_REQUIRED');\n return failed('APP_STORE_MONETIZATION_SYNC_FAILED');\n}\n\nfunction appRequired(): AppStoreMonetizationExecutionResult {\n return action('manual-action', 'APP_STORE_APP_REQUIRED');\n}\n\nfunction action(\n type: 'authentication' | 'manual-action',\n code: string,\n): AppStoreMonetizationExecutionResult {\n return {\n status: 'action-required',\n action: {\n type,\n provider: 'app-store-connect',\n target: 'ios',\n code,\n message: 'App Store monetization requires provider action.',\n },\n };\n}\n\nfunction failed(code: string): AppStoreMonetizationExecutionResult {\n return {\n status: 'failed',\n failure: {\n code,\n message: 'App Store monetization synchronization failed.',\n target: 'ios',\n provider: 'app-store-connect',\n },\n };\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
2
+ import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
3
+ import type { MonetizationDesiredState } from '../../domain/monetization/MonetizationDesiredState';
4
+ import type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';
5
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
6
+ import type { AppStoreMonetizationInspectionResult } from './AppStoreMonetizationResult';
7
+ export declare function inspectAppStoreMonetization(options: {
8
+ readonly bundleIdentifier: string;
9
+ readonly desired: MonetizationDesiredState;
10
+ readonly credentials: readonly DeploymentCredentialReference[];
11
+ readonly resolveSecret: DeploymentSecretResolver;
12
+ readonly createToken: AppStoreConnectTokenFactory;
13
+ readonly request: AppStoreConnectTransport;
14
+ readonly now: Date;
15
+ }): Promise<AppStoreMonetizationInspectionResult>;
16
+ //# sourceMappingURL=inspectAppStoreMonetization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectAppStoreMonetization.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/inspectAppStoreMonetization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAEnG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AAKzF,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAchD"}
@@ -0,0 +1,53 @@
1
+ import { trackAppStoreConnectRequests } from './AppStoreConnectRequestTracker';
2
+ import { normalizeAppStoreMonetization } from './normalizeAppStoreMonetization';
3
+ import { readAppStoreMonetizationSnapshot } from './readAppStoreMonetizationSnapshot';
4
+ import { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';
5
+ export async function inspectAppStoreMonetization(options) {
6
+ const access = await resolveAppStoreConnectToken(options);
7
+ if (!access.ok)
8
+ return { status: 'action-required', action: access.action };
9
+ const tracker = trackAppStoreConnectRequests(options.request);
10
+ const snapshot = await readAppStoreMonetizationSnapshot({
11
+ bundleIdentifier: options.bundleIdentifier,
12
+ desired: options.desired,
13
+ token: access.token,
14
+ request: tracker.request,
15
+ now: options.now,
16
+ });
17
+ if (snapshot === 'app-required')
18
+ return appRequired();
19
+ if (snapshot === null)
20
+ return providerFailure(tracker.blockingStatus());
21
+ return { status: 'completed', state: normalizeAppStoreMonetization(options.desired, snapshot) };
22
+ }
23
+ function providerFailure(status) {
24
+ if (status === 401)
25
+ return action('authentication', 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED');
26
+ if (status === 403)
27
+ return action('manual-action', 'APP_STORE_MONETIZATION_PERMISSION_REQUIRED');
28
+ return {
29
+ status: 'failed',
30
+ failure: {
31
+ code: 'APP_STORE_MONETIZATION_INSPECTION_FAILED',
32
+ message: 'App Store monetization state could not be inspected.',
33
+ target: 'ios',
34
+ provider: 'app-store-connect',
35
+ },
36
+ };
37
+ }
38
+ function appRequired() {
39
+ return action('manual-action', 'APP_STORE_APP_REQUIRED');
40
+ }
41
+ function action(type, code) {
42
+ return {
43
+ status: 'action-required',
44
+ action: {
45
+ type,
46
+ provider: 'app-store-connect',
47
+ target: 'ios',
48
+ code,
49
+ message: 'App Store monetization requires provider action.',
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=inspectAppStoreMonetization.js.map