@ankhorage/deploy 0.5.0 → 0.6.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 (214) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/dist/domain/IosDeploymentIntent.d.ts +5 -0
  4. package/dist/domain/IosDeploymentIntent.d.ts.map +1 -0
  5. package/dist/domain/IosDeploymentIntent.js +2 -0
  6. package/dist/domain/IosDeploymentIntent.js.map +1 -0
  7. package/dist/domain/IosDeploymentPublication.d.ts +10 -0
  8. package/dist/domain/IosDeploymentPublication.d.ts.map +1 -0
  9. package/dist/domain/IosDeploymentPublication.js +2 -0
  10. package/dist/domain/IosDeploymentPublication.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/project/index.d.ts +6 -0
  15. package/dist/project/index.d.ts.map +1 -1
  16. package/dist/project/index.js +3 -0
  17. package/dist/project/index.js.map +1 -1
  18. package/dist/project/ios/ProjectIosDeploymentAccess.d.ts +7 -0
  19. package/dist/project/ios/ProjectIosDeploymentAccess.d.ts.map +1 -0
  20. package/dist/project/ios/ProjectIosDeploymentAccess.js +2 -0
  21. package/dist/project/ios/ProjectIosDeploymentAccess.js.map +1 -0
  22. package/dist/project/ios/ProjectIosDeploymentExecution.d.ts +12 -0
  23. package/dist/project/ios/ProjectIosDeploymentExecution.d.ts.map +1 -0
  24. package/dist/project/ios/ProjectIosDeploymentExecution.js +2 -0
  25. package/dist/project/ios/ProjectIosDeploymentExecution.js.map +1 -0
  26. package/dist/project/ios/ProjectIosDeploymentInspection.d.ts +21 -0
  27. package/dist/project/ios/ProjectIosDeploymentInspection.d.ts.map +1 -0
  28. package/dist/project/ios/ProjectIosDeploymentInspection.js +2 -0
  29. package/dist/project/ios/ProjectIosDeploymentInspection.js.map +1 -0
  30. package/dist/project/ios/ProjectIosDeploymentRuntime.d.ts +19 -0
  31. package/dist/project/ios/ProjectIosDeploymentRuntime.d.ts.map +1 -0
  32. package/dist/project/ios/ProjectIosDeploymentRuntime.js +22 -0
  33. package/dist/project/ios/ProjectIosDeploymentRuntime.js.map +1 -0
  34. package/dist/project/ios/ProjectIosExecutionState.d.ts +12 -0
  35. package/dist/project/ios/ProjectIosExecutionState.d.ts.map +1 -0
  36. package/dist/project/ios/ProjectIosExecutionState.js +2 -0
  37. package/dist/project/ios/ProjectIosExecutionState.js.map +1 -0
  38. package/dist/project/ios/createProjectIosDeploymentPlan.d.ts +4 -0
  39. package/dist/project/ios/createProjectIosDeploymentPlan.d.ts.map +1 -0
  40. package/dist/project/ios/createProjectIosDeploymentPlan.js +13 -0
  41. package/dist/project/ios/createProjectIosDeploymentPlan.js.map +1 -0
  42. package/dist/project/ios/executeProjectIosDeployment.d.ts +12 -0
  43. package/dist/project/ios/executeProjectIosDeployment.d.ts.map +1 -0
  44. package/dist/project/ios/executeProjectIosDeployment.js +160 -0
  45. package/dist/project/ios/executeProjectIosDeployment.js.map +1 -0
  46. package/dist/project/ios/executeProjectIosStep.d.ts +15 -0
  47. package/dist/project/ios/executeProjectIosStep.d.ts.map +1 -0
  48. package/dist/project/ios/executeProjectIosStep.js +171 -0
  49. package/dist/project/ios/executeProjectIosStep.js.map +1 -0
  50. package/dist/project/ios/inspectProjectIosAppStoreConnect.d.ts +15 -0
  51. package/dist/project/ios/inspectProjectIosAppStoreConnect.d.ts.map +1 -0
  52. package/dist/project/ios/inspectProjectIosAppStoreConnect.js +55 -0
  53. package/dist/project/ios/inspectProjectIosAppStoreConnect.js.map +1 -0
  54. package/dist/project/ios/inspectProjectIosDeployment.d.ts +11 -0
  55. package/dist/project/ios/inspectProjectIosDeployment.d.ts.map +1 -0
  56. package/dist/project/ios/inspectProjectIosDeployment.js +96 -0
  57. package/dist/project/ios/inspectProjectIosDeployment.js.map +1 -0
  58. package/dist/project/ios/inspectProjectIosEasSetup.d.ts +5 -0
  59. package/dist/project/ios/inspectProjectIosEasSetup.d.ts.map +1 -0
  60. package/dist/project/ios/inspectProjectIosEasSetup.js +18 -0
  61. package/dist/project/ios/inspectProjectIosEasSetup.js.map +1 -0
  62. package/dist/project/ios/normalizeProjectIosDesired.d.ts +13 -0
  63. package/dist/project/ios/normalizeProjectIosDesired.d.ts.map +1 -0
  64. package/dist/project/ios/normalizeProjectIosDesired.js +25 -0
  65. package/dist/project/ios/normalizeProjectIosDesired.js.map +1 -0
  66. package/dist/project/ios/readCurrentProjectIosDeployment.d.ts +8 -0
  67. package/dist/project/ios/readCurrentProjectIosDeployment.d.ts.map +1 -0
  68. package/dist/project/ios/readCurrentProjectIosDeployment.js +52 -0
  69. package/dist/project/ios/readCurrentProjectIosDeployment.js.map +1 -0
  70. package/dist/project/ios/recordProjectIosDeployment.d.ts +21 -0
  71. package/dist/project/ios/recordProjectIosDeployment.d.ts.map +1 -0
  72. package/dist/project/ios/recordProjectIosDeployment.js +36 -0
  73. package/dist/project/ios/recordProjectIosDeployment.js.map +1 -0
  74. package/dist/project/ios/resolveProjectIosDeploymentAccess.d.ts +9 -0
  75. package/dist/project/ios/resolveProjectIosDeploymentAccess.d.ts.map +1 -0
  76. package/dist/project/ios/resolveProjectIosDeploymentAccess.js +7 -0
  77. package/dist/project/ios/resolveProjectIosDeploymentAccess.js.map +1 -0
  78. package/dist/project/ios/scopeProjectIosDeploymentAccess.d.ts +3 -0
  79. package/dist/project/ios/scopeProjectIosDeploymentAccess.d.ts.map +1 -0
  80. package/dist/project/ios/scopeProjectIosDeploymentAccess.js +7 -0
  81. package/dist/project/ios/scopeProjectIosDeploymentAccess.js.map +1 -0
  82. package/dist/providers/appStoreConnect/AppStoreConnectIosState.d.ts +17 -0
  83. package/dist/providers/appStoreConnect/AppStoreConnectIosState.d.ts.map +1 -0
  84. package/dist/providers/appStoreConnect/AppStoreConnectIosState.js +2 -0
  85. package/dist/providers/appStoreConnect/AppStoreConnectIosState.js.map +1 -0
  86. package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.d.ts +19 -0
  87. package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.d.ts.map +1 -0
  88. package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.js +2 -0
  89. package/dist/providers/appStoreConnect/AppStoreConnectPublicationResult.js.map +1 -0
  90. package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.d.ts +9 -0
  91. package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.d.ts.map +1 -0
  92. package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.js +13 -0
  93. package/dist/providers/appStoreConnect/AppStoreConnectRequestTracker.js.map +1 -0
  94. package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.d.ts +8 -0
  95. package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.d.ts.map +1 -0
  96. package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.js +21 -0
  97. package/dist/providers/appStoreConnect/AppStoreConnectTokenFactory.js.map +1 -0
  98. package/dist/providers/appStoreConnect/AppStoreConnectTransport.d.ts +13 -0
  99. package/dist/providers/appStoreConnect/AppStoreConnectTransport.d.ts.map +1 -0
  100. package/dist/providers/appStoreConnect/AppStoreConnectTransport.js +15 -0
  101. package/dist/providers/appStoreConnect/AppStoreConnectTransport.js.map +1 -0
  102. package/dist/providers/appStoreConnect/AppStoreUploadTransport.d.ts +17 -0
  103. package/dist/providers/appStoreConnect/AppStoreUploadTransport.d.ts.map +1 -0
  104. package/dist/providers/appStoreConnect/AppStoreUploadTransport.js +12 -0
  105. package/dist/providers/appStoreConnect/AppStoreUploadTransport.js.map +1 -0
  106. package/dist/providers/appStoreConnect/BuildUploadOperation.d.ts +13 -0
  107. package/dist/providers/appStoreConnect/BuildUploadOperation.d.ts.map +1 -0
  108. package/dist/providers/appStoreConnect/BuildUploadOperation.js +2 -0
  109. package/dist/providers/appStoreConnect/BuildUploadOperation.js.map +1 -0
  110. package/dist/providers/appStoreConnect/appStoreConnectUrls.d.ts +10 -0
  111. package/dist/providers/appStoreConnect/appStoreConnectUrls.d.ts.map +1 -0
  112. package/dist/providers/appStoreConnect/appStoreConnectUrls.js +42 -0
  113. package/dist/providers/appStoreConnect/appStoreConnectUrls.js.map +1 -0
  114. package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.d.ts +8 -0
  115. package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.d.ts.map +1 -0
  116. package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.js +12 -0
  117. package/dist/providers/appStoreConnect/attachAppStoreVersionBuild.js.map +1 -0
  118. package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.d.ts +7 -0
  119. package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.d.ts.map +1 -0
  120. package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.js +18 -0
  121. package/dist/providers/appStoreConnect/commitAppStoreBuildUploadFile.js.map +1 -0
  122. package/dist/providers/appStoreConnect/createAppStoreBuildUpload.d.ts +9 -0
  123. package/dist/providers/appStoreConnect/createAppStoreBuildUpload.d.ts.map +1 -0
  124. package/dist/providers/appStoreConnect/createAppStoreBuildUpload.js +41 -0
  125. package/dist/providers/appStoreConnect/createAppStoreBuildUpload.js.map +1 -0
  126. package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.d.ts +7 -0
  127. package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.d.ts.map +1 -0
  128. package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.js +33 -0
  129. package/dist/providers/appStoreConnect/createAppStoreConnectSetupAdapter.js.map +1 -0
  130. package/dist/providers/appStoreConnect/downloadIosArchive.d.ts +9 -0
  131. package/dist/providers/appStoreConnect/downloadIosArchive.d.ts.map +1 -0
  132. package/dist/providers/appStoreConnect/downloadIosArchive.js +28 -0
  133. package/dist/providers/appStoreConnect/downloadIosArchive.js.map +1 -0
  134. package/dist/providers/appStoreConnect/executeBuildUploadOperations.d.ts +8 -0
  135. package/dist/providers/appStoreConnect/executeBuildUploadOperations.d.ts.map +1 -0
  136. package/dist/providers/appStoreConnect/executeBuildUploadOperations.js +15 -0
  137. package/dist/providers/appStoreConnect/executeBuildUploadOperations.js.map +1 -0
  138. package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.d.ts +27 -0
  139. package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.d.ts.map +1 -0
  140. package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.js +177 -0
  141. package/dist/providers/appStoreConnect/inspectAppStoreConnectIos.js.map +1 -0
  142. package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.d.ts +3 -0
  143. package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.d.ts.map +1 -0
  144. package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.js +81 -0
  145. package/dist/providers/appStoreConnect/parseBuildUploadFileReservation.js.map +1 -0
  146. package/dist/providers/appStoreConnect/prepareAppStoreVersion.d.ts +8 -0
  147. package/dist/providers/appStoreConnect/prepareAppStoreVersion.d.ts.map +1 -0
  148. package/dist/providers/appStoreConnect/prepareAppStoreVersion.js +66 -0
  149. package/dist/providers/appStoreConnect/prepareAppStoreVersion.js.map +1 -0
  150. package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.d.ts +21 -0
  151. package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.d.ts.map +1 -0
  152. package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.js +124 -0
  153. package/dist/providers/appStoreConnect/publishIosToAppStoreConnect.js.map +1 -0
  154. package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.d.ts +9 -0
  155. package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.d.ts.map +1 -0
  156. package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.js +32 -0
  157. package/dist/providers/appStoreConnect/reserveAppStoreBuildUploadFile.js.map +1 -0
  158. package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.d.ts +18 -0
  159. package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.d.ts.map +1 -0
  160. package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.js +64 -0
  161. package/dist/providers/appStoreConnect/resolveAppStoreConnectToken.js.map +1 -0
  162. package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.d.ts +23 -0
  163. package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.d.ts.map +1 -0
  164. package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.js +60 -0
  165. package/dist/providers/appStoreConnect/verifyAppStoreConnectPublication.js.map +1 -0
  166. package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.d.ts +9 -0
  167. package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.d.ts.map +1 -0
  168. package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.js +26 -0
  169. package/dist/providers/appStoreConnect/verifyAppStoreVersionBuild.js.map +1 -0
  170. package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.d.ts +14 -0
  171. package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.d.ts.map +1 -0
  172. package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.js +69 -0
  173. package/dist/providers/appStoreConnect/waitForAppStoreBuildUpload.js.map +1 -0
  174. package/dist/providers/eas/ios/EasIosBuildArtifact.d.ts +9 -0
  175. package/dist/providers/eas/ios/EasIosBuildArtifact.d.ts.map +1 -0
  176. package/dist/providers/eas/ios/EasIosBuildArtifact.js +2 -0
  177. package/dist/providers/eas/ios/EasIosBuildArtifact.js.map +1 -0
  178. package/dist/providers/eas/ios/buildIosWithEas.d.ts +26 -0
  179. package/dist/providers/eas/ios/buildIosWithEas.d.ts.map +1 -0
  180. package/dist/providers/eas/ios/buildIosWithEas.js +60 -0
  181. package/dist/providers/eas/ios/buildIosWithEas.js.map +1 -0
  182. package/dist/providers/eas/ios/generateLocalIosFingerprint.d.ts +15 -0
  183. package/dist/providers/eas/ios/generateLocalIosFingerprint.d.ts.map +1 -0
  184. package/dist/providers/eas/ios/generateLocalIosFingerprint.js +48 -0
  185. package/dist/providers/eas/ios/generateLocalIosFingerprint.js.map +1 -0
  186. package/dist/providers/eas/ios/inspectEasIosConfig.d.ts +28 -0
  187. package/dist/providers/eas/ios/inspectEasIosConfig.d.ts.map +1 -0
  188. package/dist/providers/eas/ios/inspectEasIosConfig.js +40 -0
  189. package/dist/providers/eas/ios/inspectEasIosConfig.js.map +1 -0
  190. package/dist/providers/eas/ios/parseEasIosBuild.d.ts +3 -0
  191. package/dist/providers/eas/ios/parseEasIosBuild.d.ts.map +1 -0
  192. package/dist/providers/eas/ios/parseEasIosBuild.js +41 -0
  193. package/dist/providers/eas/ios/parseEasIosBuild.js.map +1 -0
  194. package/dist/providers/eas/ios/parseEasIosConfig.d.ts +3 -0
  195. package/dist/providers/eas/ios/parseEasIosConfig.d.ts.map +1 -0
  196. package/dist/providers/eas/ios/parseEasIosConfig.js +56 -0
  197. package/dist/providers/eas/ios/parseEasIosConfig.js.map +1 -0
  198. package/dist/targets/ios/createIosDeploymentRevision.d.ts +3 -0
  199. package/dist/targets/ios/createIosDeploymentRevision.d.ts.map +1 -0
  200. package/dist/targets/ios/createIosDeploymentRevision.js +10 -0
  201. package/dist/targets/ios/createIosDeploymentRevision.js.map +1 -0
  202. package/dist/targets/ios/createIosTargetPlanContributor.d.ts +3 -0
  203. package/dist/targets/ios/createIosTargetPlanContributor.d.ts.map +1 -0
  204. package/dist/targets/ios/createIosTargetPlanContributor.js +26 -0
  205. package/dist/targets/ios/createIosTargetPlanContributor.js.map +1 -0
  206. package/dist/targets/ios/isIosDeploymentIntentValid.d.ts +3 -0
  207. package/dist/targets/ios/isIosDeploymentIntentValid.d.ts.map +1 -0
  208. package/dist/targets/ios/isIosDeploymentIntentValid.js +4 -0
  209. package/dist/targets/ios/isIosDeploymentIntentValid.js.map +1 -0
  210. package/dist/targets/ios/normalizeIosProviders.d.ts +16 -0
  211. package/dist/targets/ios/normalizeIosProviders.d.ts.map +1 -0
  212. package/dist/targets/ios/normalizeIosProviders.js +16 -0
  213. package/dist/targets/ios/normalizeIosProviders.js.map +1 -0
  214. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ import { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';
2
+ export function createAppStoreConnectSetupAdapter(options) {
3
+ return {
4
+ provider: 'app-store-connect',
5
+ inspectSetup: async (context) => {
6
+ const access = await resolveAppStoreConnectToken({
7
+ ...context,
8
+ createToken: options.createToken,
9
+ now: options.now(),
10
+ });
11
+ return access.ok ? ready() : required(access.action);
12
+ },
13
+ };
14
+ }
15
+ function ready() {
16
+ return {
17
+ provider: 'app-store-connect',
18
+ authentication: { status: 'authenticated' },
19
+ capabilities: [{ capability: 'publish', status: 'available' }],
20
+ provisioning: [],
21
+ };
22
+ }
23
+ function required(action) {
24
+ return {
25
+ provider: 'app-store-connect',
26
+ authentication: { status: 'required', action },
27
+ capabilities: [
28
+ { capability: 'publish', status: 'unavailable', reason: 'Authentication required.' },
29
+ ],
30
+ provisioning: [{ type: 'authentication', action }],
31
+ };
32
+ }
33
+ //# sourceMappingURL=createAppStoreConnectSetupAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAppStoreConnectSetupAdapter.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/createAppStoreConnectSetupAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,UAAU,iCAAiC,CAAC,OAGjD;IACC,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC;gBAC/C,GAAG,OAAO;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;aACnB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,cAAc,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;QAC3C,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC9D,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,MAGW;IAEX,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,cAAc,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;QAC9C,YAAY,EAAE;YACZ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,0BAA0B,EAAE;SACrF;QACD,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC","sourcesContent":["import type { DeploymentProviderSetupAdapter } from '../../domain/DeploymentProviderSetupAdapter';\nimport type { DeploymentProviderSetupInspection } from '../../domain/DeploymentProviderSetupInspection';\nimport type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';\nimport { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';\n\nexport function createAppStoreConnectSetupAdapter(options: {\n readonly createToken: AppStoreConnectTokenFactory;\n readonly now: () => Date;\n}): DeploymentProviderSetupAdapter {\n return {\n provider: 'app-store-connect',\n inspectSetup: async (context) => {\n const access = await resolveAppStoreConnectToken({\n ...context,\n createToken: options.createToken,\n now: options.now(),\n });\n return access.ok ? ready() : required(access.action);\n },\n };\n}\n\nfunction ready(): DeploymentProviderSetupInspection {\n return {\n provider: 'app-store-connect',\n authentication: { status: 'authenticated' },\n capabilities: [{ capability: 'publish', status: 'available' }],\n provisioning: [],\n };\n}\n\nfunction required(\n action: Extract<\n Awaited<ReturnType<typeof resolveAppStoreConnectToken>>,\n { readonly ok: false }\n >['action'],\n): DeploymentProviderSetupInspection {\n return {\n provider: 'app-store-connect',\n authentication: { status: 'required', action },\n capabilities: [\n { capability: 'publish', status: 'unavailable', reason: 'Authentication required.' },\n ],\n provisioning: [{ type: 'authentication', action }],\n };\n}\n"]}
@@ -0,0 +1,9 @@
1
+ interface DownloadedIosArchive {
2
+ readonly directory: string;
3
+ readonly filePath: string;
4
+ }
5
+ export type IosArchiveDownloader = (url: string) => Promise<DownloadedIosArchive | null>;
6
+ export declare const downloadIosArchive: IosArchiveDownloader;
7
+ export declare function cleanupIosArchive(directory: string): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=downloadIosArchive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadIosArchive.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/downloadIosArchive.ts"],"names":[],"mappings":"AAIA,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;AAEzF,eAAO,MAAM,kBAAkB,EAAE,oBAiBhC,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE"}
@@ -0,0 +1,28 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import path from 'node:path';
4
+ export const downloadIosArchive = async (url) => {
5
+ let response;
6
+ try {
7
+ response = await fetch(url);
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ if (!response.ok)
13
+ return null;
14
+ const directory = await fs.mkdtemp(path.join(tmpdir(), 'ankh-ios-'));
15
+ const filePath = path.join(directory, 'application.ipa');
16
+ try {
17
+ await Bun.write(filePath, response);
18
+ return { directory, filePath };
19
+ }
20
+ catch {
21
+ await fs.rm(directory, { recursive: true, force: true });
22
+ return null;
23
+ }
24
+ };
25
+ export async function cleanupIosArchive(directory) {
26
+ await fs.rm(directory, { recursive: true, force: true });
27
+ }
28
+ //# sourceMappingURL=downloadIosArchive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadIosArchive.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/downloadIosArchive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,MAAM,CAAC,MAAM,kBAAkB,GAAyB,KAAK,EAAE,GAAG,EAAE,EAAE;IACpE,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC","sourcesContent":["import { promises as fs } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport path from 'node:path';\n\ninterface DownloadedIosArchive {\n readonly directory: string;\n readonly filePath: string;\n}\n\nexport type IosArchiveDownloader = (url: string) => Promise<DownloadedIosArchive | null>;\n\nexport const downloadIosArchive: IosArchiveDownloader = async (url) => {\n let response: Response;\n try {\n response = await fetch(url);\n } catch {\n return null;\n }\n if (!response.ok) return null;\n const directory = await fs.mkdtemp(path.join(tmpdir(), 'ankh-ios-'));\n const filePath = path.join(directory, 'application.ipa');\n try {\n await Bun.write(filePath, response);\n return { directory, filePath };\n } catch {\n await fs.rm(directory, { recursive: true, force: true });\n return null;\n }\n};\n\nexport async function cleanupIosArchive(directory: string): Promise<void> {\n await fs.rm(directory, { recursive: true, force: true });\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { AppStoreUploadTransport } from './AppStoreUploadTransport';
2
+ import type { BuildUploadOperation } from './BuildUploadOperation';
3
+ export declare function executeBuildUploadOperations(options: {
4
+ readonly file: Buffer;
5
+ readonly operations: readonly BuildUploadOperation[];
6
+ readonly upload: AppStoreUploadTransport;
7
+ }): Promise<boolean>;
8
+ //# sourceMappingURL=executeBuildUploadOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeBuildUploadOperations.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/executeBuildUploadOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C,GAAG,OAAO,CAAC,OAAO,CAAC,CAYnB"}
@@ -0,0 +1,15 @@
1
+ export async function executeBuildUploadOperations(options) {
2
+ for (const operation of options.operations) {
3
+ const body = options.file.subarray(operation.offset, operation.offset + operation.length);
4
+ const response = await options.upload({
5
+ method: operation.method,
6
+ url: operation.url,
7
+ headers: operation.headers,
8
+ body,
9
+ });
10
+ if (response.status < 200 || response.status >= 300)
11
+ return false;
12
+ }
13
+ return true;
14
+ }
15
+ //# sourceMappingURL=executeBuildUploadOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeBuildUploadOperations.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/executeBuildUploadOperations.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAIlD;IACC,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI;SACL,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type { AppStoreUploadTransport } from './AppStoreUploadTransport';\nimport type { BuildUploadOperation } from './BuildUploadOperation';\n\nexport async function executeBuildUploadOperations(options: {\n readonly file: Buffer;\n readonly operations: readonly BuildUploadOperation[];\n readonly upload: AppStoreUploadTransport;\n}): Promise<boolean> {\n for (const operation of options.operations) {\n const body = options.file.subarray(operation.offset, operation.offset + operation.length);\n const response = await options.upload({\n method: operation.method,\n url: operation.url,\n headers: operation.headers,\n body,\n });\n if (response.status < 200 || response.status >= 300) return false;\n }\n return true;\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
2
+ import type { DeploymentFailure } from '../../domain/DeploymentFailure';
3
+ import type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';
4
+ import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
5
+ import type { AppStoreConnectIosState } from './AppStoreConnectIosState';
6
+ import type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';
7
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
8
+ export type InspectAppStoreConnectIosResult = {
9
+ readonly status: 'completed';
10
+ readonly state: AppStoreConnectIosState;
11
+ } | {
12
+ readonly status: 'action-required';
13
+ readonly action: DeploymentRequiredAction;
14
+ } | {
15
+ readonly status: 'failed';
16
+ readonly failure: DeploymentFailure;
17
+ };
18
+ export declare function inspectAppStoreConnectIos(options: {
19
+ readonly bundleIdentifier: string;
20
+ readonly version: string;
21
+ readonly credentials: readonly DeploymentCredentialReference[];
22
+ readonly resolveSecret: DeploymentSecretResolver;
23
+ readonly createToken: AppStoreConnectTokenFactory;
24
+ readonly request: AppStoreConnectTransport;
25
+ readonly now: Date;
26
+ }): Promise<InspectAppStoreConnectIosResult>;
27
+ //# sourceMappingURL=inspectAppStoreConnectIos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectAppStoreConnectIos.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/inspectAppStoreConnectIos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEvE,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,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,+BAA+B,CAAC,CAuB3C"}
@@ -0,0 +1,177 @@
1
+ import { appStoreConnectAppsUrl, appStoreConnectVersionsUrl } from './appStoreConnectUrls';
2
+ import { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';
3
+ export async function inspectAppStoreConnectIos(options) {
4
+ const access = await resolveAppStoreConnectToken(options);
5
+ if (!access.ok)
6
+ return { status: 'action-required', action: access.action };
7
+ const app = await requestJson(options.request, appStoreConnectAppsUrl(options.bundleIdentifier), access.token);
8
+ if (!app.ok)
9
+ return app.result;
10
+ const appId = parseAppId(app.value, options.bundleIdentifier);
11
+ if (appId === null)
12
+ return appRequired();
13
+ const versions = await requestJson(options.request, appStoreConnectVersionsUrl(appId), access.token);
14
+ if (!versions.ok)
15
+ return versions.result;
16
+ const version = parseVersionState(versions.value, options.version);
17
+ if (version === undefined)
18
+ return failure('APP_STORE_CONNECT_RESPONSE_INVALID');
19
+ return {
20
+ status: 'completed',
21
+ state: { appId, bundleIdentifier: options.bundleIdentifier, version },
22
+ };
23
+ }
24
+ async function requestJson(request, url, token) {
25
+ const response = await request({ method: 'GET', url, token });
26
+ if (response.status === 401)
27
+ return { ok: false, result: authenticationRequired() };
28
+ if (response.status === 403)
29
+ return { ok: false, result: permissionRequired() };
30
+ if (response.status < 200 || response.status >= 300) {
31
+ return { ok: false, result: failure('APP_STORE_CONNECT_INSPECTION_FAILED') };
32
+ }
33
+ try {
34
+ return { ok: true, value: JSON.parse(response.body) };
35
+ }
36
+ catch {
37
+ return { ok: false, result: failure('APP_STORE_CONNECT_RESPONSE_INVALID') };
38
+ }
39
+ }
40
+ function parseAppId(value, expectedBundleIdentifier) {
41
+ if (!isRecord(value) || !Array.isArray(value.data))
42
+ return null;
43
+ let match = null;
44
+ for (const candidate of value.data) {
45
+ const id = matchingAppId(candidate, expectedBundleIdentifier);
46
+ if (id === null)
47
+ continue;
48
+ if (match !== null)
49
+ return null;
50
+ match = id;
51
+ }
52
+ return match;
53
+ }
54
+ function matchingAppId(value, expectedBundleIdentifier) {
55
+ if (!isRecord(value) || value.type !== 'apps' || !isNonEmptyString(value.id))
56
+ return null;
57
+ if (!isRecord(value.attributes) || value.attributes.bundleId !== expectedBundleIdentifier)
58
+ return null;
59
+ return value.id;
60
+ }
61
+ function parseVersionState(value, expectedVersion) {
62
+ if (!isRecord(value) || !Array.isArray(value.data))
63
+ return undefined;
64
+ let match = null;
65
+ for (const candidate of value.data) {
66
+ if (!isMatchingVersion(candidate, expectedVersion))
67
+ continue;
68
+ if (match !== null || !isRecord(candidate))
69
+ return undefined;
70
+ match = candidate;
71
+ }
72
+ if (match === null)
73
+ return null;
74
+ return createVersionState(match, value.included, expectedVersion);
75
+ }
76
+ function createVersionState(item, included, expectedVersion) {
77
+ if (!isNonEmptyString(item.id))
78
+ return undefined;
79
+ const buildId = relationshipBuildId(item);
80
+ const build = buildId === null ? null : findIncludedBuild(included, buildId);
81
+ if (buildId !== null && build === null)
82
+ return undefined;
83
+ return { versionId: item.id, version: expectedVersion, build };
84
+ }
85
+ function isMatchingVersion(value, expectedVersion) {
86
+ if (!isRecord(value) || value.type !== 'appStoreVersions' || !isRecord(value.attributes)) {
87
+ return false;
88
+ }
89
+ return value.attributes.platform === 'IOS' && value.attributes.versionString === expectedVersion;
90
+ }
91
+ function relationshipBuildId(value) {
92
+ if (!isRecord(value.relationships) || !isRecord(value.relationships.build))
93
+ return null;
94
+ const { data } = value.relationships.build;
95
+ if (data === null || data === undefined)
96
+ return null;
97
+ if (!isRecord(data) || data.type !== 'builds' || !isNonEmptyString(data.id))
98
+ return null;
99
+ return data.id;
100
+ }
101
+ function findIncludedBuild(included, buildId) {
102
+ if (!Array.isArray(included))
103
+ return null;
104
+ for (const candidate of included) {
105
+ const build = parseIncludedBuild(candidate, buildId);
106
+ if (build !== null)
107
+ return build;
108
+ }
109
+ return null;
110
+ }
111
+ function parseIncludedBuild(value, buildId) {
112
+ if (!isRecord(value) || value.type !== 'builds' || value.id !== buildId)
113
+ return null;
114
+ if (!isRecord(value.attributes) || !isNonEmptyString(value.attributes.version))
115
+ return null;
116
+ return {
117
+ buildId,
118
+ buildNumber: value.attributes.version,
119
+ ...(typeof value.attributes.processingState === 'string'
120
+ ? { processingState: value.attributes.processingState }
121
+ : {}),
122
+ };
123
+ }
124
+ function authenticationRequired() {
125
+ return {
126
+ status: 'action-required',
127
+ action: {
128
+ type: 'authentication',
129
+ provider: 'app-store-connect',
130
+ target: 'ios',
131
+ code: 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED',
132
+ message: 'App Store Connect API-key authentication is required for iOS deployment.',
133
+ },
134
+ };
135
+ }
136
+ function permissionRequired() {
137
+ return {
138
+ status: 'action-required',
139
+ action: {
140
+ type: 'manual-action',
141
+ target: 'ios',
142
+ provider: 'app-store-connect',
143
+ code: 'APP_STORE_CONNECT_PERMISSION_REQUIRED',
144
+ message: 'The App Store Connect team API key needs permission for iOS deployment.',
145
+ },
146
+ };
147
+ }
148
+ function appRequired() {
149
+ return {
150
+ status: 'action-required',
151
+ action: {
152
+ type: 'manual-action',
153
+ target: 'ios',
154
+ provider: 'app-store-connect',
155
+ code: 'APP_STORE_APP_REQUIRED',
156
+ message: 'Create the matching app in App Store Connect before iOS deployment.',
157
+ },
158
+ };
159
+ }
160
+ function failure(code) {
161
+ return {
162
+ status: 'failed',
163
+ failure: {
164
+ code,
165
+ message: 'App Store Connect iOS state could not be inspected.',
166
+ target: 'ios',
167
+ provider: 'app-store-connect',
168
+ },
169
+ };
170
+ }
171
+ function isRecord(value) {
172
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
173
+ }
174
+ function isNonEmptyString(value) {
175
+ return typeof value === 'string' && value.trim().length > 0;
176
+ }
177
+ //# sourceMappingURL=inspectAppStoreConnectIos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectAppStoreConnectIos.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/inspectAppStoreConnectIos.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';\nimport type { DeploymentFailure } from '../../domain/DeploymentFailure';\nimport type { DeploymentRequiredAction } from '../../domain/DeploymentRequiredAction';\nimport type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';\nimport type { AppStoreConnectIosState } from './AppStoreConnectIosState';\nimport type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';\nimport type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport { appStoreConnectAppsUrl, appStoreConnectVersionsUrl } from './appStoreConnectUrls';\nimport { resolveAppStoreConnectToken } from './resolveAppStoreConnectToken';\n\nexport type InspectAppStoreConnectIosResult =\n | { readonly status: 'completed'; readonly state: AppStoreConnectIosState }\n | { readonly status: 'action-required'; readonly action: DeploymentRequiredAction }\n | { readonly status: 'failed'; readonly failure: DeploymentFailure };\n\nexport async function inspectAppStoreConnectIos(options: {\n readonly bundleIdentifier: string;\n readonly version: string;\n readonly credentials: readonly DeploymentCredentialReference[];\n readonly resolveSecret: DeploymentSecretResolver;\n readonly createToken: AppStoreConnectTokenFactory;\n readonly request: AppStoreConnectTransport;\n readonly now: Date;\n}): Promise<InspectAppStoreConnectIosResult> {\n const access = await resolveAppStoreConnectToken(options);\n if (!access.ok) return { status: 'action-required', action: access.action };\n const app = await requestJson(\n options.request,\n appStoreConnectAppsUrl(options.bundleIdentifier),\n access.token,\n );\n if (!app.ok) return app.result;\n const appId = parseAppId(app.value, options.bundleIdentifier);\n if (appId === null) return appRequired();\n const versions = await requestJson(\n options.request,\n appStoreConnectVersionsUrl(appId),\n access.token,\n );\n if (!versions.ok) return versions.result;\n const version = parseVersionState(versions.value, options.version);\n if (version === undefined) return failure('APP_STORE_CONNECT_RESPONSE_INVALID');\n return {\n status: 'completed',\n state: { appId, bundleIdentifier: options.bundleIdentifier, version },\n };\n}\n\ntype JsonRequestResult =\n | { readonly ok: true; readonly value: unknown }\n | { readonly ok: false; readonly result: InspectAppStoreConnectIosResult };\n\nasync function requestJson(\n request: AppStoreConnectTransport,\n url: string,\n token: string,\n): Promise<JsonRequestResult> {\n const response = await request({ method: 'GET', url, token });\n if (response.status === 401) return { ok: false, result: authenticationRequired() };\n if (response.status === 403) return { ok: false, result: permissionRequired() };\n if (response.status < 200 || response.status >= 300) {\n return { ok: false, result: failure('APP_STORE_CONNECT_INSPECTION_FAILED') };\n }\n try {\n return { ok: true, value: JSON.parse(response.body) as unknown };\n } catch {\n return { ok: false, result: failure('APP_STORE_CONNECT_RESPONSE_INVALID') };\n }\n}\n\nfunction parseAppId(value: unknown, expectedBundleIdentifier: string): string | null {\n if (!isRecord(value) || !Array.isArray(value.data)) return null;\n let match: string | null = null;\n for (const candidate of value.data as unknown[]) {\n const id = matchingAppId(candidate, expectedBundleIdentifier);\n if (id === null) continue;\n if (match !== null) return null;\n match = id;\n }\n return match;\n}\n\nfunction matchingAppId(value: unknown, expectedBundleIdentifier: string): string | null {\n if (!isRecord(value) || value.type !== 'apps' || !isNonEmptyString(value.id)) return null;\n if (!isRecord(value.attributes) || value.attributes.bundleId !== expectedBundleIdentifier)\n return null;\n return value.id;\n}\n\nfunction parseVersionState(\n value: unknown,\n expectedVersion: string,\n): AppStoreConnectIosState['version'] | undefined {\n if (!isRecord(value) || !Array.isArray(value.data)) return undefined;\n let match: Record<string, unknown> | null = null;\n for (const candidate of value.data as unknown[]) {\n if (!isMatchingVersion(candidate, expectedVersion)) continue;\n if (match !== null || !isRecord(candidate)) return undefined;\n match = candidate;\n }\n if (match === null) return null;\n return createVersionState(match, value.included, expectedVersion);\n}\n\nfunction createVersionState(\n item: Record<string, unknown>,\n included: unknown,\n expectedVersion: string,\n): AppStoreConnectIosState['version'] | undefined {\n if (!isNonEmptyString(item.id)) return undefined;\n const buildId = relationshipBuildId(item);\n const build = buildId === null ? null : findIncludedBuild(included, buildId);\n if (buildId !== null && build === null) return undefined;\n return { versionId: item.id, version: expectedVersion, build };\n}\n\nfunction isMatchingVersion(value: unknown, expectedVersion: string): boolean {\n if (!isRecord(value) || value.type !== 'appStoreVersions' || !isRecord(value.attributes)) {\n return false;\n }\n return value.attributes.platform === 'IOS' && value.attributes.versionString === expectedVersion;\n}\n\nfunction relationshipBuildId(value: Record<string, unknown>): string | null {\n if (!isRecord(value.relationships) || !isRecord(value.relationships.build)) return null;\n const { data } = value.relationships.build;\n if (data === null || data === undefined) return null;\n if (!isRecord(data) || data.type !== 'builds' || !isNonEmptyString(data.id)) return null;\n return data.id;\n}\n\nfunction findIncludedBuild(\n included: unknown,\n buildId: string,\n): NonNullable<AppStoreConnectIosState['version']>['build'] {\n if (!Array.isArray(included)) return null;\n for (const candidate of included as unknown[]) {\n const build = parseIncludedBuild(candidate, buildId);\n if (build !== null) return build;\n }\n return null;\n}\n\nfunction parseIncludedBuild(\n value: unknown,\n buildId: string,\n): NonNullable<AppStoreConnectIosState['version']>['build'] {\n if (!isRecord(value) || value.type !== 'builds' || value.id !== buildId) return null;\n if (!isRecord(value.attributes) || !isNonEmptyString(value.attributes.version)) return null;\n return {\n buildId,\n buildNumber: value.attributes.version,\n ...(typeof value.attributes.processingState === 'string'\n ? { processingState: value.attributes.processingState }\n : {}),\n };\n}\n\nfunction authenticationRequired(): InspectAppStoreConnectIosResult {\n return {\n status: 'action-required',\n action: {\n type: 'authentication',\n provider: 'app-store-connect',\n target: 'ios',\n code: 'APP_STORE_CONNECT_AUTHENTICATION_REQUIRED',\n message: 'App Store Connect API-key authentication is required for iOS deployment.',\n },\n };\n}\n\nfunction permissionRequired(): InspectAppStoreConnectIosResult {\n return {\n status: 'action-required',\n action: {\n type: 'manual-action',\n target: 'ios',\n provider: 'app-store-connect',\n code: 'APP_STORE_CONNECT_PERMISSION_REQUIRED',\n message: 'The App Store Connect team API key needs permission for iOS deployment.',\n },\n };\n}\n\nfunction appRequired(): InspectAppStoreConnectIosResult {\n return {\n status: 'action-required',\n action: {\n type: 'manual-action',\n target: 'ios',\n provider: 'app-store-connect',\n code: 'APP_STORE_APP_REQUIRED',\n message: 'Create the matching app in App Store Connect before iOS deployment.',\n },\n };\n}\n\nfunction failure(code: string): InspectAppStoreConnectIosResult {\n return {\n status: 'failed',\n failure: {\n code,\n message: 'App Store Connect iOS state could not be inspected.',\n target: 'ios',\n provider: 'app-store-connect',\n },\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { BuildUploadFileReservation } from './BuildUploadOperation';
2
+ export declare function parseBuildUploadFileReservation(value: unknown, fileSize: number): BuildUploadFileReservation | null;
3
+ //# sourceMappingURL=parseBuildUploadFileReservation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseBuildUploadFileReservation.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/parseBuildUploadFileReservation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAwB,MAAM,wBAAwB,CAAC;AAE/F,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,0BAA0B,GAAG,IAAI,CAWnC"}
@@ -0,0 +1,81 @@
1
+ export function parseBuildUploadFileReservation(value, fileSize) {
2
+ if (!isRecord(value) || !isRecord(value.data))
3
+ return null;
4
+ const { data } = value;
5
+ if (data.type !== 'buildUploadFiles' || !isNonEmptyString(data.id))
6
+ return null;
7
+ if (!isRecord(data.attributes) || data.attributes.uti !== 'com.apple.ipa')
8
+ return null;
9
+ if (!Array.isArray(data.attributes.uploadOperations))
10
+ return null;
11
+ const operations = data.attributes.uploadOperations.map(parseOperation);
12
+ if (operations.some((operation) => operation === null))
13
+ return null;
14
+ const valid = operations;
15
+ if (!rangesAreValid(valid, fileSize))
16
+ return null;
17
+ return { fileId: data.id, operations: valid };
18
+ }
19
+ function parseOperation(value) {
20
+ if (!isRecord(value))
21
+ return null;
22
+ if (!isSafeOffset(value.offset) || !isPositiveLength(value.length))
23
+ return null;
24
+ if (!isNonEmptyString(value.method) || !isHttpsUrl(value.url))
25
+ return null;
26
+ if (!Array.isArray(value.requestHeaders))
27
+ return null;
28
+ const headers = value.requestHeaders.map(parseHeader);
29
+ if (headers.some((header) => header === null))
30
+ return null;
31
+ return {
32
+ offset: value.offset,
33
+ length: value.length,
34
+ method: value.method,
35
+ url: value.url,
36
+ headers: headers,
37
+ };
38
+ }
39
+ function rangesAreValid(operations, fileSize) {
40
+ if (!Number.isSafeInteger(fileSize) || fileSize <= 0 || operations.length === 0)
41
+ return false;
42
+ const ranges = [...operations].sort((left, right) => left.offset - right.offset);
43
+ let expectedOffset = 0;
44
+ for (const operation of ranges) {
45
+ const end = operation.offset + operation.length;
46
+ if (!Number.isSafeInteger(end) || operation.offset !== expectedOffset || end > fileSize) {
47
+ return false;
48
+ }
49
+ expectedOffset = end;
50
+ }
51
+ return expectedOffset === fileSize;
52
+ }
53
+ function parseHeader(value) {
54
+ if (!isRecord(value) || !isNonEmptyString(value.name) || typeof value.value !== 'string') {
55
+ return null;
56
+ }
57
+ return { name: value.name, value: value.value };
58
+ }
59
+ function isSafeOffset(value) {
60
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
61
+ }
62
+ function isPositiveLength(value) {
63
+ return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
64
+ }
65
+ function isHttpsUrl(value) {
66
+ if (!isNonEmptyString(value))
67
+ return false;
68
+ try {
69
+ return new URL(value).protocol === 'https:';
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ function isRecord(value) {
76
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
77
+ }
78
+ function isNonEmptyString(value) {
79
+ return typeof value === 'string' && value.trim().length > 0;
80
+ }
81
+ //# sourceMappingURL=parseBuildUploadFileReservation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseBuildUploadFileReservation.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/parseBuildUploadFileReservation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BuildUploadFileReservation, BuildUploadOperation } from './BuildUploadOperation';\n\nexport function parseBuildUploadFileReservation(\n value: unknown,\n fileSize: number,\n): BuildUploadFileReservation | null {\n if (!isRecord(value) || !isRecord(value.data)) return null;\n const { data } = value;\n if (data.type !== 'buildUploadFiles' || !isNonEmptyString(data.id)) return null;\n if (!isRecord(data.attributes) || data.attributes.uti !== 'com.apple.ipa') return null;\n if (!Array.isArray(data.attributes.uploadOperations)) return null;\n const operations = data.attributes.uploadOperations.map(parseOperation);\n if (operations.some((operation) => operation === null)) return null;\n const valid = operations as BuildUploadOperation[];\n if (!rangesAreValid(valid, fileSize)) return null;\n return { fileId: data.id, operations: valid };\n}\n\nfunction parseOperation(value: unknown): BuildUploadOperation | null {\n if (!isRecord(value)) return null;\n if (!isSafeOffset(value.offset) || !isPositiveLength(value.length)) return null;\n if (!isNonEmptyString(value.method) || !isHttpsUrl(value.url)) return null;\n if (!Array.isArray(value.requestHeaders)) return null;\n const headers = value.requestHeaders.map(parseHeader);\n if (headers.some((header) => header === null)) return null;\n return {\n offset: value.offset,\n length: value.length,\n method: value.method,\n url: value.url,\n headers: headers as { readonly name: string; readonly value: string }[],\n };\n}\n\nfunction rangesAreValid(operations: readonly BuildUploadOperation[], fileSize: number): boolean {\n if (!Number.isSafeInteger(fileSize) || fileSize <= 0 || operations.length === 0) return false;\n const ranges = [...operations].sort((left, right) => left.offset - right.offset);\n let expectedOffset = 0;\n for (const operation of ranges) {\n const end = operation.offset + operation.length;\n if (!Number.isSafeInteger(end) || operation.offset !== expectedOffset || end > fileSize) {\n return false;\n }\n expectedOffset = end;\n }\n return expectedOffset === fileSize;\n}\n\nfunction parseHeader(value: unknown): { readonly name: string; readonly value: string } | null {\n if (!isRecord(value) || !isNonEmptyString(value.name) || typeof value.value !== 'string') {\n return null;\n }\n return { name: value.name, value: value.value };\n}\n\nfunction isSafeOffset(value: unknown): value is number {\n return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction isPositiveLength(value: unknown): value is number {\n return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction isHttpsUrl(value: unknown): value is string {\n if (!isNonEmptyString(value)) return false;\n try {\n return new URL(value).protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
2
+ export declare function prepareAppStoreVersion(options: {
3
+ readonly appId: string;
4
+ readonly version: string;
5
+ readonly token: string;
6
+ readonly request: AppStoreConnectTransport;
7
+ }): Promise<string | null>;
8
+ //# sourceMappingURL=prepareAppStoreVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareAppStoreVersion.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/prepareAppStoreVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAM3E,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBzB"}
@@ -0,0 +1,66 @@
1
+ import { appStoreConnectAppStoreVersionsUrl, appStoreConnectVersionsUrl, } from './appStoreConnectUrls';
2
+ export async function prepareAppStoreVersion(options) {
3
+ const existing = await findVersion(options);
4
+ if (existing !== undefined)
5
+ return existing;
6
+ const body = JSON.stringify({
7
+ data: {
8
+ type: 'appStoreVersions',
9
+ attributes: { platform: 'IOS', versionString: options.version, releaseType: 'MANUAL' },
10
+ relationships: { app: { data: { type: 'apps', id: options.appId } } },
11
+ },
12
+ });
13
+ const response = await options.request({
14
+ method: 'POST',
15
+ url: appStoreConnectAppStoreVersionsUrl(),
16
+ token: options.token,
17
+ body,
18
+ });
19
+ return response.status === 201 ? parseCreatedVersion(response.body, options.version) : null;
20
+ }
21
+ async function findVersion(options) {
22
+ const response = await options.request({
23
+ method: 'GET',
24
+ url: appStoreConnectVersionsUrl(options.appId),
25
+ token: options.token,
26
+ });
27
+ if (response.status < 200 || response.status >= 300)
28
+ return null;
29
+ try {
30
+ const value = JSON.parse(response.body);
31
+ if (!isRecord(value) || !Array.isArray(value.data))
32
+ return null;
33
+ const matches = value.data.filter((item) => isVersion(item, options.version));
34
+ if (matches.length === 0)
35
+ return undefined;
36
+ if (matches.length !== 1 || !isRecord(matches[0]) || !isNonEmptyString(matches[0].id))
37
+ return null;
38
+ return matches[0].id;
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ function parseCreatedVersion(body, expectedVersion) {
45
+ try {
46
+ const value = JSON.parse(body);
47
+ if (!isRecord(value) || !isRecord(value.data) || !isVersion(value.data, expectedVersion))
48
+ return null;
49
+ return isNonEmptyString(value.data.id) ? value.data.id : null;
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ function isVersion(value, expectedVersion) {
56
+ if (!isRecord(value) || value.type !== 'appStoreVersions' || !isRecord(value.attributes))
57
+ return false;
58
+ return value.attributes.platform === 'IOS' && value.attributes.versionString === expectedVersion;
59
+ }
60
+ function isRecord(value) {
61
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
62
+ }
63
+ function isNonEmptyString(value) {
64
+ return typeof value === 'string' && value.trim().length > 0;
65
+ }
66
+ //# sourceMappingURL=prepareAppStoreVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareAppStoreVersion.js","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/prepareAppStoreVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AppStoreConnectTransport } from './AppStoreConnectTransport';\nimport {\n appStoreConnectAppStoreVersionsUrl,\n appStoreConnectVersionsUrl,\n} from './appStoreConnectUrls';\n\nexport async function prepareAppStoreVersion(options: {\n readonly appId: string;\n readonly version: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<string | null> {\n const existing = await findVersion(options);\n if (existing !== undefined) return existing;\n const body = JSON.stringify({\n data: {\n type: 'appStoreVersions',\n attributes: { platform: 'IOS', versionString: options.version, releaseType: 'MANUAL' },\n relationships: { app: { data: { type: 'apps', id: options.appId } } },\n },\n });\n const response = await options.request({\n method: 'POST',\n url: appStoreConnectAppStoreVersionsUrl(),\n token: options.token,\n body,\n });\n return response.status === 201 ? parseCreatedVersion(response.body, options.version) : null;\n}\n\nasync function findVersion(options: {\n readonly appId: string;\n readonly version: string;\n readonly token: string;\n readonly request: AppStoreConnectTransport;\n}): Promise<string | null | undefined> {\n const response = await options.request({\n method: 'GET',\n url: appStoreConnectVersionsUrl(options.appId),\n token: options.token,\n });\n if (response.status < 200 || response.status >= 300) return null;\n try {\n const value = JSON.parse(response.body) as unknown;\n if (!isRecord(value) || !Array.isArray(value.data)) return null;\n const matches = value.data.filter((item) => isVersion(item, options.version));\n if (matches.length === 0) return undefined;\n if (matches.length !== 1 || !isRecord(matches[0]) || !isNonEmptyString(matches[0].id))\n return null;\n return matches[0].id;\n } catch {\n return null;\n }\n}\n\nfunction parseCreatedVersion(body: string, expectedVersion: string): string | null {\n try {\n const value = JSON.parse(body) as unknown;\n if (!isRecord(value) || !isRecord(value.data) || !isVersion(value.data, expectedVersion))\n return null;\n return isNonEmptyString(value.data.id) ? value.data.id : null;\n } catch {\n return null;\n }\n}\n\nfunction isVersion(value: unknown, expectedVersion: string): boolean {\n if (!isRecord(value) || value.type !== 'appStoreVersions' || !isRecord(value.attributes))\n return false;\n return value.attributes.platform === 'IOS' && value.attributes.versionString === expectedVersion;\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,21 @@
1
+ import type { DeploymentCredentialReference } from '../../domain/DeploymentCredentialReference';
2
+ import type { DeploymentSecretResolver } from '../../domain/DeploymentSecretResolver';
3
+ import type { AppStoreConnectPublicationResult } from './AppStoreConnectPublicationResult';
4
+ import type { AppStoreConnectTokenFactory } from './AppStoreConnectTokenFactory';
5
+ import type { AppStoreConnectTransport } from './AppStoreConnectTransport';
6
+ import type { AppStoreUploadTransport } from './AppStoreUploadTransport';
7
+ export declare function publishIosToAppStoreConnect(options: {
8
+ readonly appId: string;
9
+ readonly version: string;
10
+ readonly buildNumber: string;
11
+ readonly file: Buffer;
12
+ readonly credentials: readonly DeploymentCredentialReference[];
13
+ readonly resolveSecret: DeploymentSecretResolver;
14
+ readonly createToken: AppStoreConnectTokenFactory;
15
+ readonly request: AppStoreConnectTransport;
16
+ readonly upload: AppStoreUploadTransport;
17
+ readonly wait: () => Promise<void>;
18
+ readonly maxAttempts: number;
19
+ readonly now: Date;
20
+ }): Promise<AppStoreConnectPublicationResult>;
21
+ //# sourceMappingURL=publishIosToAppStoreConnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishIosToAppStoreConnect.d.ts","sourceRoot":"","sources":["../../../src/providers/appStoreConnect/publishIosToAppStoreConnect.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,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAE3F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAUzE,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,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,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAiC5C"}