shipthis 0.1.11 → 0.1.13

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 (190) hide show
  1. package/assets/markdown/ship-failure.md +13 -0
  2. package/assets/markdown/ship-success.md +12 -0
  3. package/dist/{AppleBundleIdDetails-DymjrhOZ.js → AppleBundleIdDetails-DxWVnxa5.js} +4 -4
  4. package/dist/{Command-1YAl_0zS.js → Command-zfJ7qIJI.js} +8 -8
  5. package/dist/{CommandGame--SAa3wEL.js → CommandGame-DVsNreSF.js} +1 -1
  6. package/dist/{Create-DIaSKUpl.js → Create-DdF29mIS.js} +3 -3
  7. package/dist/{Import-BIOsf8AA.js → Import-D8ik724M.js} +4 -4
  8. package/dist/{JobProgress-biiLhigg.js → JobProgress-D1Pe4YJc.js} +10 -7
  9. package/dist/JobStatusTable-D-daiV-I.js +203 -0
  10. package/dist/{ProjectCredentialsTable-Ch8022rs.js → ProjectCredentialsTable-Ch2s5qF1.js} +2 -2
  11. package/dist/{UserCredentialsTable-CeJS3_hd.js → UserCredentialsTable-DzyAHhLB.js} +3 -3
  12. package/dist/{baseAppleCommand-1isaFxCQ.js → baseAppleCommand-BGXyWK-R.js} +1 -1
  13. package/dist/{baseGameAndroidCommand-6vsMpE7a.js → baseGameAndroidCommand-mdFhxanf.js} +2 -2
  14. package/dist/commands/apple/apiKey/create.js +7 -7
  15. package/dist/commands/apple/apiKey/export.js +6 -6
  16. package/dist/commands/apple/apiKey/import.js +6 -6
  17. package/dist/commands/apple/apiKey/status.js +5 -5
  18. package/dist/commands/apple/certificate/create.js +7 -7
  19. package/dist/commands/apple/certificate/export.js +6 -6
  20. package/dist/commands/apple/certificate/import.js +6 -6
  21. package/dist/commands/apple/certificate/status.js +5 -5
  22. package/dist/commands/apple/login.js +2 -2
  23. package/dist/commands/apple/status.js +4 -4
  24. package/dist/commands/dashboard.js +1 -1
  25. package/dist/commands/game/android/apiKey/connect.js +9 -9
  26. package/dist/commands/game/android/apiKey/create.js +10 -10
  27. package/dist/commands/game/android/apiKey/export.js +7 -7
  28. package/dist/commands/game/android/apiKey/import.js +9 -9
  29. package/dist/commands/game/android/apiKey/invite.js +4 -4
  30. package/dist/commands/game/android/apiKey/status.js +7 -7
  31. package/dist/commands/game/android/keyStore/create.js +8 -8
  32. package/dist/commands/game/android/keyStore/export.js +6 -6
  33. package/dist/commands/game/android/keyStore/import.js +9 -9
  34. package/dist/commands/game/android/keyStore/status.js +6 -6
  35. package/dist/commands/game/android/status.js +4 -4
  36. package/dist/commands/game/build/download.js +4 -4
  37. package/dist/commands/game/build/list.js +5 -5
  38. package/dist/commands/game/create.js +2 -2
  39. package/dist/commands/game/details.js +4 -4
  40. package/dist/commands/game/export.js +1 -1
  41. package/dist/commands/game/ios/app/addTester.js +5 -5
  42. package/dist/commands/game/ios/app/create.js +4 -4
  43. package/dist/commands/game/ios/app/status.js +7 -7
  44. package/dist/commands/game/ios/app/sync.js +5 -5
  45. package/dist/commands/game/ios/profile/create.js +7 -7
  46. package/dist/commands/game/ios/profile/export.js +6 -6
  47. package/dist/commands/game/ios/profile/import.js +6 -6
  48. package/dist/commands/game/ios/profile/status.js +6 -6
  49. package/dist/commands/game/ios/status.js +7 -7
  50. package/dist/commands/game/ios/wizard.js +2 -2
  51. package/dist/commands/game/job/list.js +4 -4
  52. package/dist/commands/game/job/status.js +17 -131
  53. package/dist/commands/game/list.js +4 -4
  54. package/dist/commands/game/ship.js +74 -19
  55. package/dist/commands/game/status.js +4 -4
  56. package/dist/commands/game/wizard.js +14 -14
  57. package/dist/commands/internal/fastlane.js +1 -1
  58. package/dist/commands/internal/readme.js +1 -1
  59. package/dist/commands/login.js +2 -2
  60. package/dist/commands/status.js +4 -4
  61. package/dist/{export-BDxGDZdh.js → export-Cin4rLWR.js} +1 -1
  62. package/dist/{import-v54PM_Qg.js → import-CXTv9E84.js} +1 -1
  63. package/dist/{index-BDFKyTPb.js → index-B4v66AKo.js} +1 -1
  64. package/dist/{index-ByOvCs4O.js → index-BVvcTBnj.js} +4 -4
  65. package/dist/{index-m4HTrJ5J.js → index-Cx_2qTdS.js} +7 -7
  66. package/dist/{index-BB7X1Pqp.js → index-Dhx6FAHt.js} +1 -1
  67. package/dist/{index-wyPoxiTc.js → index-Dj-chiHz.js} +2 -2
  68. package/dist/{upload-2naN75Zu.js → upload-DZCIfnwf.js} +1 -1
  69. package/dist/{useAndroidServiceAccountTestResult-BDc7XpKE.js → useAndroidServiceAccountTestResult-L4oozjag.js} +1 -1
  70. package/dist/{useAppleApp-DgE0wEaq.js → useAppleApp-DcSr-q-w.js} +1 -1
  71. package/dist/{useAppleBundleId-BNI8swhC.js → useAppleBundleId-BnJVPVIz.js} +1 -1
  72. package/dist/{useJobWatching-BIG6fnTN.js → useJobWatching-DS0qHqPA.js} +3 -3
  73. package/dist/{useProjectCredentials-B5ZmpIxL.js → useProjectCredentials-CI_AoXmH.js} +3 -3
  74. package/dist/{useWebSocket-Bep1zAVG.js → useWebSocket-ZEZvtpT_.js} +1 -1
  75. package/npm-shrinkwrap.json +2 -2
  76. package/oclif.manifest.json +141 -223
  77. package/package.json +1 -1
  78. package/dist/AppleBundleIdDetails-C0XqjxKJ.js +0 -72
  79. package/dist/AppleBundleIdDetails-CjP5y0cj.js +0 -74
  80. package/dist/AppleBundleIdDetails-CztWY_mT.js +0 -73
  81. package/dist/AppleBundleIdDetails-DKeSAte9.js +0 -73
  82. package/dist/AppleBundleIdDetails-Df30MPFC.js +0 -73
  83. package/dist/AppleBundleIdDetails-Dxo99Sgu.js +0 -72
  84. package/dist/Command-BiB9MqbJ.js +0 -204
  85. package/dist/Command-Cl-JfhTy.js +0 -203
  86. package/dist/Command-D6rWEZRM.js +0 -204
  87. package/dist/Command-Dn0P_KOV.js +0 -205
  88. package/dist/Command-DxmQn3XT.js +0 -204
  89. package/dist/Command-YJJp90ru.js +0 -204
  90. package/dist/CommandGame-C1oTlfdb.js +0 -8
  91. package/dist/CommandGame-CZUx_VQu.js +0 -8
  92. package/dist/CommandGame-DspVLTPZ.js +0 -8
  93. package/dist/CommandGame-cPaTk1wh.js +0 -8
  94. package/dist/CommandGame-k04mHiDl.js +0 -8
  95. package/dist/CommandGame-pI9VXKxi.js +0 -8
  96. package/dist/CreateKeystore-BnNdeDUa.js +0 -57
  97. package/dist/CreateKeystore-BqJdpvsI.js +0 -56
  98. package/dist/CreateKeystore-Cf-nsK_M.js +0 -56
  99. package/dist/CreateKeystore-D8uTRamD.js +0 -56
  100. package/dist/CreateKeystore-Dm0KVh85.js +0 -56
  101. package/dist/CreateKeystore-g1z6DsU5.js +0 -56
  102. package/dist/JobProgress-CPkWVSlH.js +0 -108
  103. package/dist/JobProgress-Dk0UoNah.js +0 -108
  104. package/dist/JobProgress-W0QQR49T.js +0 -108
  105. package/dist/JobProgress-jmGAzvxS.js +0 -108
  106. package/dist/JobStatusTable-BA_q-kgE.js +0 -75
  107. package/dist/JobStatusTable-ByW0bN6c.js +0 -75
  108. package/dist/JobStatusTable-CgaTS7jS.js +0 -75
  109. package/dist/JobStatusTable-DqoppRro.js +0 -75
  110. package/dist/JobStatusTable-q4atKzhu.js +0 -75
  111. package/dist/ProjectCredentialsTable-8kXt7sTS.js +0 -37
  112. package/dist/ProjectCredentialsTable-BIWBAXCh.js +0 -37
  113. package/dist/ProjectCredentialsTable-DRMK_SNw.js +0 -37
  114. package/dist/ProjectCredentialsTable-DfkpvTf8.js +0 -37
  115. package/dist/UserCredentialsTable-DMh8Wpy7.js +0 -82
  116. package/dist/UserCredentialsTable-DgHZJSHG.js +0 -82
  117. package/dist/UserCredentialsTable-TflQvTEP.js +0 -82
  118. package/dist/UserCredentialsTable-ysmM5dlV.js +0 -82
  119. package/dist/baseAppleCommand-B3WQtlx-.js +0 -10
  120. package/dist/baseAppleCommand-B9wyIqdL.js +0 -10
  121. package/dist/baseAppleCommand-D-G4h8zQ.js +0 -10
  122. package/dist/baseAppleCommand-DpasCbje.js +0 -10
  123. package/dist/baseGameAndroidCommand-B-CFhPnE.js +0 -43
  124. package/dist/baseGameAndroidCommand-B3LRG701.js +0 -43
  125. package/dist/baseGameAndroidCommand-C9BuS2Sr.js +0 -43
  126. package/dist/baseGameAndroidCommand-DD0H8iy-.js +0 -43
  127. package/dist/commands/game/android/wizard.js +0 -509
  128. package/dist/export-B_F6vXIK.js +0 -36
  129. package/dist/export-BiLHgSJ9.js +0 -36
  130. package/dist/export-C_lu1FD9.js +0 -36
  131. package/dist/export-rS9o87LD.js +0 -36
  132. package/dist/import-7T3J63j2.js +0 -38
  133. package/dist/import-Brg3zYmT.js +0 -38
  134. package/dist/import-BrlJuE2Z.js +0 -38
  135. package/dist/import-CxNikF1c.js +0 -38
  136. package/dist/import-DPbg8WvS.js +0 -38
  137. package/dist/index-B5XHQfs2.js +0 -122
  138. package/dist/index-B6V7vGOj.js +0 -136
  139. package/dist/index-BL-1G60K.js +0 -135
  140. package/dist/index-BQRxiyqn.js +0 -693
  141. package/dist/index-BQnkBr1Q.js +0 -136
  142. package/dist/index-BX9h2vPV.js +0 -123
  143. package/dist/index-BjGSEqP5.js +0 -135
  144. package/dist/index-BuZmCvZh.js +0 -24
  145. package/dist/index-Bv3x8c78.js +0 -693
  146. package/dist/index-BzffuqPa.js +0 -24
  147. package/dist/index-C9734Cj2.js +0 -693
  148. package/dist/index-CKYExssR.js +0 -136
  149. package/dist/index-CgBgZUkL.js +0 -144
  150. package/dist/index-Cz_KLwWf.js +0 -136
  151. package/dist/index-D6BH5UAM.js +0 -135
  152. package/dist/index-DBrQda8r.js +0 -122
  153. package/dist/index-DE2Hvx2o.js +0 -122
  154. package/dist/index-DOgF4dFK.js +0 -24
  155. package/dist/index-DdABTtYO.js +0 -693
  156. package/dist/index-DgbQBx6x.js +0 -122
  157. package/dist/index-DxHPjZav.js +0 -136
  158. package/dist/index-X__XH_Fd.js +0 -144
  159. package/dist/index-o9Y-84Rj.js +0 -122
  160. package/dist/upload-CMo3hUhl.js +0 -60
  161. package/dist/upload-Cx71802W.js +0 -60
  162. package/dist/upload-DvAE1vDq.js +0 -60
  163. package/dist/upload-LXRr4pMa.js +0 -60
  164. package/dist/useAndroidServiceAccountTestResult-B_ekRewZ.js +0 -52
  165. package/dist/useAndroidServiceAccountTestResult-Ce1x0Eh8.js +0 -52
  166. package/dist/useAndroidServiceAccountTestResult-D_30xIJA.js +0 -52
  167. package/dist/useAndroidServiceAccountTestResult-InDf5WSl.js +0 -52
  168. package/dist/useAppleApp-BEtLQa7n.js +0 -32
  169. package/dist/useAppleApp-CApC0-4Q.js +0 -32
  170. package/dist/useAppleApp-CETIcsJS.js +0 -32
  171. package/dist/useAppleApp-DnSjUfSs.js +0 -32
  172. package/dist/useAppleBundleId-DXbMDRLd.js +0 -64
  173. package/dist/useAppleBundleId-DtLODy3p.js +0 -64
  174. package/dist/useAppleBundleId-SmzY6rkm.js +0 -64
  175. package/dist/useAppleBundleId-gPBzJwQg.js +0 -64
  176. package/dist/useJobWatching-BcBJ5dy1.js +0 -43
  177. package/dist/useJobWatching-Bz1e6xOv.js +0 -43
  178. package/dist/useJobWatching-Cp-CYd90.js +0 -45
  179. package/dist/useJobWatching-D-YzSlK8.js +0 -45
  180. package/dist/useJobWatching-I_A3b36f.js +0 -45
  181. package/dist/useJobWatching-P5oC7mNB.js +0 -45
  182. package/dist/useProjectCredentials-BRffcsO3.js +0 -54
  183. package/dist/useProjectCredentials-CKngz2rd.js +0 -54
  184. package/dist/useProjectCredentials-EapDge1I.js +0 -54
  185. package/dist/useProjectCredentials-vjedBbKl.js +0 -54
  186. package/dist/useWebSocket-CBqsjHbt.js +0 -36
  187. package/dist/useWebSocket-D8PojLtx.js +0 -36
  188. package/dist/useWebSocket-DoImIdTy.js +0 -36
  189. package/dist/useWebSocket-rBLiZsKb.js +0 -36
  190. package/dist/wizard-ChPegnMW.js +0 -133
@@ -1,204 +0,0 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import { Text, useInput, Box } from 'ink';
3
- import React, { useState, useEffect, useContext, useRef } from 'react';
4
- import Spinner from 'ink-spinner';
5
- import open from 'open';
6
- import { g as getShortUUID, h as getPlatformName, s as scriptDir } from './index-wyPoxiTc.js';
7
- import { c as cacheKeys, u as useAndroidServiceAccountTestResult, K as KeyTestStatus, a as KeyTestError } from './useAndroidServiceAccountTestResult-InDf5WSl.js';
8
- import { P as Platform, a6 as getShortDateTime, p as getAuthedHeaders, q as API_URL, H as castArrayObjectDates, J as JobStatus, a7 as getShortTimeDelta, a5 as getJob, E as getProject, a2 as getShortAuthRequiredUrl, $ as queryClient, X as WEB_URL } from './index-DdABTtYO.js';
9
- import '@inkjs/ui';
10
- import axios from 'axios';
11
- import { useQuery, QueryClientProvider } from '@tanstack/react-query';
12
- import { setOptions, parse } from 'marked';
13
- import fs__default from 'fs';
14
- import TerminalRenderer from 'marked-terminal';
15
- import path from 'path';
16
- import 'qrcode';
17
- import 'string-length';
18
- import 'strip-ansi';
19
- import 'luxon';
20
- import 'uuid';
21
- import 'fast-glob';
22
- import 'yazl';
23
- import 'socket.io-client';
24
- import 'crypto';
25
- import 'readline-sync';
26
- import 'node:readline';
27
- import 'node:path';
28
- import 'node:url';
29
- import 'crypto-js';
30
- import 'isomorphic-git';
31
- import '@oclif/core';
32
-
33
- async function queryBuilds({ projectId, ...pageAndSortParams }) {
34
- try {
35
- const headers = getAuthedHeaders();
36
- const url = `${API_URL}/projects/${projectId}/builds`;
37
- const response = await axios.get(url, { headers, params: pageAndSortParams });
38
- return {
39
- ...response.data,
40
- data: castArrayObjectDates(response.data.data)
41
- };
42
- } catch (error) {
43
- console.warn("queryBuilds Error", error);
44
- throw error;
45
- }
46
- }
47
- function getBuildSummary(build) {
48
- const filename = build.platform == Platform.IOS ? "output.ipa" : "output.aab";
49
- return {
50
- id: getShortUUID(build.id),
51
- ...getJobDetailsSummary(build.jobDetails),
52
- platform: getPlatformName(build.platform),
53
- jobId: getShortUUID(build.jobId),
54
- createdAt: getShortDateTime(build.createdAt),
55
- cmd: `shipthis game build download ${getShortUUID(build.id)} ${filename}`
56
- };
57
- }
58
- const useBuilds = (props) => {
59
- const queryResult = useQuery({
60
- queryKey: cacheKeys.builds(props),
61
- queryFn: async () => queryBuilds(props)
62
- });
63
- return queryResult;
64
- };
65
-
66
- function getJobDetailsSummary(jobDetails) {
67
- const semanticVersion = jobDetails?.semanticVersion || "N/A";
68
- const buildNumber = jobDetails?.buildNumber || "N/A";
69
- const gitCommit = jobDetails?.gitCommitHash ? getShortUUID(jobDetails?.gitCommitHash) : "N/A";
70
- const gitBranch = jobDetails?.gitBranch || "N/A";
71
- return {
72
- version: `${semanticVersion} (${buildNumber})`,
73
- gitInfo: `${gitCommit} (${gitBranch})`
74
- };
75
- }
76
- function getJobSummary(job, timeNow) {
77
- const inProgress = ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
78
- return {
79
- id: getShortUUID(job.id),
80
- ...getJobDetailsSummary(job.details),
81
- platform: getPlatformName(job.type),
82
- status: job.status,
83
- createdAt: getShortDateTime(job.createdAt),
84
- runtime: getShortTimeDelta(job.createdAt, inProgress ? timeNow : job.updatedAt)
85
- };
86
- }
87
- const useJob = (props) => {
88
- return useQuery({
89
- queryKey: cacheKeys.job(props),
90
- queryFn: () => getJob(props.jobId, props.projectId)
91
- });
92
- };
93
-
94
- const CommandContext = React.createContext({
95
- command: null,
96
- setCommand: (command) => {
97
- }
98
- });
99
- const CommandProvider = (props) => {
100
- const [command, setCommand] = useState(props.command || null);
101
- return /* @__PURE__ */ jsx(CommandContext.Provider, { value: { command, setCommand }, children: props.children });
102
- };
103
-
104
- const GameContext = React.createContext({
105
- gameId: null,
106
- game: null,
107
- setGameId: (gameId) => {
108
- }
109
- });
110
- const GameProvider = ({ children }) => {
111
- const [gameId, setGameId] = useState(null);
112
- const [game, setGame] = useState(null);
113
- const { command } = React.useContext(CommandContext);
114
- const handleLoad = async () => {
115
- if (command) {
116
- const commandGameId = await command.getGameId();
117
- if (commandGameId) setGameId(commandGameId);
118
- }
119
- };
120
- const handleGameIdChange = async () => {
121
- if (!gameId) {
122
- setGame(null);
123
- return;
124
- }
125
- const game2 = await getProject(gameId);
126
- setGame(game2);
127
- };
128
- useEffect(() => {
129
- handleGameIdChange();
130
- }, [gameId]);
131
- useEffect(() => {
132
- handleLoad();
133
- }, [command]);
134
- return /* @__PURE__ */ jsx(GameContext.Provider, { value: { gameId, game, setGameId }, children });
135
- };
136
-
137
- const entrypointPath = fs__default.realpathSync(process.argv[1]);
138
- const root = path.dirname(entrypointPath);
139
- const Markdown = ({ filename, templateVars, ...options }) => {
140
- setOptions({ renderer: new TerminalRenderer(options) });
141
- const mdPath = path.join(root, "..", "assets", "markdown", filename);
142
- const mdTemplate = fs__default.readFileSync(mdPath, "utf8").trim();
143
- const markdown = !templateVars ? mdTemplate : mdTemplate.replace(/\${(.*?)}/g, (_, key) => templateVars[key.trim()] || "");
144
- return /* @__PURE__ */ jsx(Text, { children: parse(markdown).trim() });
145
- };
146
-
147
- scriptDir(import.meta);
148
- const getIsAppFound = (result) => {
149
- const isFound = result?.status === KeyTestStatus.SUCCESS || result?.status === KeyTestStatus.ERROR && result?.error === KeyTestError.NOT_INVITED;
150
- return isFound;
151
- };
152
- const CreateGooglePlayGame = (props) => {
153
- const { gameId } = useContext(GameContext);
154
- return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(Create, { gameId, ...props }) });
155
- };
156
- const Create = ({ onComplete, onError, gameId, ...boxProps }) => {
157
- const { data: result, isFetching } = useAndroidServiceAccountTestResult({ projectId: gameId });
158
- const { data: builds } = useBuilds({ projectId: gameId, pageNumber: 0 });
159
- const previousIsFound = useRef(false);
160
- useEffect(() => {
161
- const isFound = getIsAppFound(result);
162
- if (previousIsFound.current === false && isFound) {
163
- onComplete();
164
- }
165
- previousIsFound.current = isFound;
166
- }, [result]);
167
- useInput(async (input) => {
168
- if (!gameId) return;
169
- switch (input) {
170
- case "r":
171
- queryClient.invalidateQueries({
172
- queryKey: cacheKeys.androidKeyTestResult({ projectId: gameId })
173
- });
174
- break;
175
- case "d":
176
- const dashUrl = await getShortAuthRequiredUrl(`/games/${getShortUUID(gameId)}/builds`);
177
- await open(dashUrl);
178
- }
179
- if (input !== "r") return;
180
- queryClient.invalidateQueries({
181
- queryKey: cacheKeys.androidKeyTestResult({ projectId: gameId })
182
- });
183
- });
184
- const initialBuild = builds?.data.find((build) => build.platform === Platform.ANDROID);
185
- const downloadCmd = initialBuild ? `${getBuildSummary(initialBuild).cmd}` : "";
186
- const templateVars = {
187
- downloadCmd,
188
- dashboardURL: new URL(`/games/${getShortUUID(gameId)}/builds`, WEB_URL).toString()
189
- };
190
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 1, ...boxProps, children: [
191
- /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
192
- /* @__PURE__ */ jsx(Text, { bold: true, children: isFetching ? "Checking..." : "ShipThis has not detected your game in Google Play. Press R to test again." }),
193
- isFetching && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
194
- ] }),
195
- /* @__PURE__ */ jsx(Markdown, { filename: "create-google-play-game.md", templateVars })
196
- ] }) });
197
- };
198
-
199
- const Command = ({ children, command }) => {
200
- const width = Math.min(160, process.stdout.columns || 80);
201
- return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(CommandProvider, { command, children: /* @__PURE__ */ jsx(Box, { width, flexDirection: "column", children }) }) });
202
- };
203
-
204
- export { Command as C, GameProvider as G, Markdown as M, getBuildSummary as a, GameContext as b, CommandContext as c, useBuilds as d, CreateGooglePlayGame as e, getJobSummary as g, queryBuilds as q, useJob as u };
@@ -1,204 +0,0 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import { Text, useInput, Box } from 'ink';
3
- import React, { useState, useEffect, useContext, useRef } from 'react';
4
- import Spinner from 'ink-spinner';
5
- import open from 'open';
6
- import { g as getShortUUID, h as getPlatformName, s as scriptDir } from './index-BQnkBr1Q.js';
7
- import { c as cacheKeys, u as useAndroidServiceAccountTestResult, K as KeyTestStatus, a as KeyTestError } from './useAndroidServiceAccountTestResult-BDc7XpKE.js';
8
- import { p as getAuthedHeaders, q as API_URL, K as castArrayObjectDates, P as Platform, a6 as getShortDateTime, a5 as getJob, J as JobStatus, a7 as getShortTimeDelta, H as getProject, a2 as getShortAuthRequiredUrl, $ as queryClient, X as WEB_URL } from './index-Bv3x8c78.js';
9
- import '@inkjs/ui';
10
- import axios from 'axios';
11
- import { useQuery, QueryClientProvider } from '@tanstack/react-query';
12
- import { setOptions, parse } from 'marked';
13
- import fs__default from 'fs';
14
- import TerminalRenderer from 'marked-terminal';
15
- import path from 'path';
16
- import 'qrcode';
17
- import 'string-length';
18
- import 'strip-ansi';
19
- import 'luxon';
20
- import 'uuid';
21
- import 'fast-glob';
22
- import 'yazl';
23
- import 'socket.io-client';
24
- import 'crypto';
25
- import 'readline-sync';
26
- import 'node:readline';
27
- import 'node:path';
28
- import 'node:url';
29
- import 'crypto-js';
30
- import 'isomorphic-git';
31
- import '@oclif/core';
32
-
33
- async function queryBuilds({ projectId, ...pageAndSortParams }) {
34
- try {
35
- const headers = getAuthedHeaders();
36
- const url = `${API_URL}/projects/${projectId}/builds`;
37
- const response = await axios.get(url, { headers, params: pageAndSortParams });
38
- return {
39
- ...response.data,
40
- data: castArrayObjectDates(response.data.data)
41
- };
42
- } catch (error) {
43
- console.warn("queryBuilds Error", error);
44
- throw error;
45
- }
46
- }
47
- function getBuildSummary(build) {
48
- const filename = build.platform == Platform.IOS ? "output.ipa" : "output.aab";
49
- return {
50
- id: getShortUUID(build.id),
51
- ...getJobDetailsSummary(build.jobDetails),
52
- platform: getPlatformName(build.platform),
53
- jobId: getShortUUID(build.jobId),
54
- createdAt: getShortDateTime(build.createdAt),
55
- cmd: `shipthis game build download ${getShortUUID(build.id)} ${filename}`
56
- };
57
- }
58
- const useBuilds = (props) => {
59
- const queryResult = useQuery({
60
- queryKey: cacheKeys.builds(props),
61
- queryFn: async () => queryBuilds(props)
62
- });
63
- return queryResult;
64
- };
65
-
66
- function getJobDetailsSummary(jobDetails) {
67
- const semanticVersion = jobDetails?.semanticVersion || "N/A";
68
- const buildNumber = jobDetails?.buildNumber || "N/A";
69
- const gitCommit = jobDetails?.gitCommitHash ? getShortUUID(jobDetails?.gitCommitHash) : "N/A";
70
- const gitBranch = jobDetails?.gitBranch || "N/A";
71
- return {
72
- version: `${semanticVersion} (${buildNumber})`,
73
- gitInfo: `${gitCommit} (${gitBranch})`
74
- };
75
- }
76
- function getJobSummary(job, timeNow) {
77
- const inProgress = ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
78
- return {
79
- id: getShortUUID(job.id),
80
- ...getJobDetailsSummary(job.details),
81
- platform: getPlatformName(job.type),
82
- status: job.status,
83
- createdAt: getShortDateTime(job.createdAt),
84
- runtime: getShortTimeDelta(job.createdAt, inProgress ? timeNow : job.updatedAt)
85
- };
86
- }
87
- const useJob = (props) => {
88
- return useQuery({
89
- queryKey: cacheKeys.job(props),
90
- queryFn: () => getJob(props.jobId, props.projectId)
91
- });
92
- };
93
-
94
- const CommandContext = React.createContext({
95
- command: null,
96
- setCommand: (command) => {
97
- }
98
- });
99
- const CommandProvider = (props) => {
100
- const [command, setCommand] = useState(props.command || null);
101
- return /* @__PURE__ */ jsx(CommandContext.Provider, { value: { command, setCommand }, children: props.children });
102
- };
103
-
104
- const GameContext = React.createContext({
105
- gameId: null,
106
- game: null,
107
- setGameId: (gameId) => {
108
- }
109
- });
110
- const GameProvider = ({ children }) => {
111
- const [gameId, setGameId] = useState(null);
112
- const [game, setGame] = useState(null);
113
- const { command } = React.useContext(CommandContext);
114
- const handleLoad = async () => {
115
- if (command) {
116
- const commandGameId = await command.getGameId();
117
- if (commandGameId) setGameId(commandGameId);
118
- }
119
- };
120
- const handleGameIdChange = async () => {
121
- if (!gameId) {
122
- setGame(null);
123
- return;
124
- }
125
- const game2 = await getProject(gameId);
126
- setGame(game2);
127
- };
128
- useEffect(() => {
129
- handleGameIdChange();
130
- }, [gameId]);
131
- useEffect(() => {
132
- handleLoad();
133
- }, [command]);
134
- return /* @__PURE__ */ jsx(GameContext.Provider, { value: { gameId, game, setGameId }, children });
135
- };
136
-
137
- const entrypointPath = fs__default.realpathSync(process.argv[1]);
138
- const root = path.dirname(entrypointPath);
139
- const Markdown = ({ filename, templateVars, ...options }) => {
140
- setOptions({ renderer: new TerminalRenderer(options) });
141
- const mdPath = path.join(root, "..", "assets", "markdown", filename);
142
- const mdTemplate = fs__default.readFileSync(mdPath, "utf8").trim();
143
- const markdown = !templateVars ? mdTemplate : mdTemplate.replace(/\${(.*?)}/g, (_, key) => templateVars[key.trim()] || "");
144
- return /* @__PURE__ */ jsx(Text, { children: parse(markdown).trim() });
145
- };
146
-
147
- scriptDir(import.meta);
148
- const getIsAppFound = (result) => {
149
- const isFound = result?.status === KeyTestStatus.SUCCESS || result?.status === KeyTestStatus.ERROR && result?.error === KeyTestError.NOT_INVITED;
150
- return isFound;
151
- };
152
- const CreateGooglePlayGame = (props) => {
153
- const { gameId } = useContext(GameContext);
154
- return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(Create, { gameId, ...props }) });
155
- };
156
- const Create = ({ onComplete, onError, gameId, ...boxProps }) => {
157
- const { data: result, isFetching } = useAndroidServiceAccountTestResult({ projectId: gameId });
158
- const { data: builds } = useBuilds({ projectId: gameId, pageNumber: 0 });
159
- const previousIsFound = useRef(false);
160
- useEffect(() => {
161
- const isFound = getIsAppFound(result);
162
- if (previousIsFound.current === false && isFound) {
163
- onComplete();
164
- }
165
- previousIsFound.current = isFound;
166
- }, [result]);
167
- useInput(async (input) => {
168
- if (!gameId) return;
169
- switch (input) {
170
- case "r":
171
- queryClient.invalidateQueries({
172
- queryKey: cacheKeys.androidKeyTestResult({ projectId: gameId })
173
- });
174
- break;
175
- case "d":
176
- const dashUrl = await getShortAuthRequiredUrl(`/games/${getShortUUID(gameId)}/builds`);
177
- await open(dashUrl);
178
- }
179
- if (input !== "r") return;
180
- queryClient.invalidateQueries({
181
- queryKey: cacheKeys.androidKeyTestResult({ projectId: gameId })
182
- });
183
- });
184
- const initialBuild = builds?.data.find((build) => build.platform === Platform.ANDROID);
185
- const downloadCmd = initialBuild ? `${getBuildSummary(initialBuild).cmd}` : "";
186
- const templateVars = {
187
- downloadCmd,
188
- dashboardURL: new URL(`/games/${getShortUUID(gameId)}/builds`, WEB_URL).toString()
189
- };
190
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 1, ...boxProps, children: [
191
- /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
192
- /* @__PURE__ */ jsx(Text, { bold: true, children: isFetching ? "Checking..." : "ShipThis has not detected your game in Google Play. Press R to test again." }),
193
- isFetching && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
194
- ] }),
195
- /* @__PURE__ */ jsx(Markdown, { filename: "create-google-play-game.md", templateVars })
196
- ] }) });
197
- };
198
-
199
- const Command = ({ children, command }) => {
200
- const width = Math.min(160, process.stdout.columns || 80);
201
- return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(CommandProvider, { command, children: /* @__PURE__ */ jsx(Box, { width, flexDirection: "column", children }) }) });
202
- };
203
-
204
- export { Command as C, GameProvider as G, Markdown as M, getBuildSummary as a, GameContext as b, CommandContext as c, useBuilds as d, CreateGooglePlayGame as e, getJobSummary as g, queryBuilds as q, useJob as u };
@@ -1,8 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { C as Command, G as GameProvider } from './Command-BiB9MqbJ.js';
3
-
4
- const CommandGame = ({ children, command }) => {
5
- return /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
- };
7
-
8
- export { CommandGame as C };
@@ -1,8 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { C as Command, G as GameProvider } from './Command-1YAl_0zS.js';
3
-
4
- const CommandGame = ({ children, command }) => {
5
- return /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
- };
7
-
8
- export { CommandGame as C };
@@ -1,8 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { C as Command, G as GameProvider } from './Command-DxmQn3XT.js';
3
-
4
- const CommandGame = ({ children, command }) => {
5
- return /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
- };
7
-
8
- export { CommandGame as C };
@@ -1,8 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { C as Command, G as GameProvider } from './Command-D6rWEZRM.js';
3
-
4
- const CommandGame = ({ children, command }) => {
5
- return /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
- };
7
-
8
- export { CommandGame as C };
@@ -1,8 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { C as Command, G as GameProvider } from './Command-Dn0P_KOV.js';
3
-
4
- const CommandGame = ({ children, command }) => {
5
- return /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
- };
7
-
8
- export { CommandGame as C };
@@ -1,8 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { C as Command, G as GameProvider } from './Command-YJJp90ru.js';
3
-
4
- const CommandGame = ({ children, command }) => {
5
- return /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
- };
7
-
8
- export { CommandGame as C };
@@ -1,57 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { Box } from 'ink';
3
- import axios from 'axios';
4
- import { useContext } from 'react';
5
- import { useQueryClient } from '@tanstack/react-query';
6
- import { o as getAuthedHeaders, p as API_URL } from './index-C9734Cj2.js';
7
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-B_ekRewZ.js';
8
- import { b as GameContext } from './Command-Dn0P_KOV.js';
9
- import 'ink-spinner';
10
- import '@inkjs/ui';
11
- import 'open';
12
- import 'crypto';
13
- import 'fs';
14
- import 'readline-sync';
15
- import 'node:readline';
16
- import 'node:path';
17
- import 'node:url';
18
- import 'luxon';
19
- import 'uuid';
20
- import 'fast-glob';
21
- import 'yazl';
22
- import 'socket.io-client';
23
- import 'isomorphic-git';
24
- import '@oclif/core';
25
- import 'qrcode';
26
- import { R as RunWithSpinner } from './RunWithSpinner-BVXNWGD3.js';
27
- import 'string-length';
28
- import 'strip-ansi';
29
- import './wizard-ChPegnMW.js';
30
-
31
- const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
32
- const { gameId } = useContext(GameContext);
33
- const queryClient = useQueryClient();
34
- const handleCreate = async () => {
35
- try {
36
- if (!gameId) throw new Error("No game");
37
- const headers = await getAuthedHeaders();
38
- await axios.post(`${API_URL}/projects/${gameId}/credentials/android/certificate`, null, {
39
- headers
40
- });
41
- queryClient.invalidateQueries({ queryKey: cacheKeys.projectCredentials({ projectId: gameId, pageNumber: 0 }) });
42
- } catch (err) {
43
- onError(err);
44
- }
45
- };
46
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", gap: 1, ...boxProps, children: /* @__PURE__ */ jsx(
47
- RunWithSpinner,
48
- {
49
- executeMethod: handleCreate,
50
- msgInProgress: "Creating Keystore...",
51
- msgComplete: "Keystore created",
52
- onComplete
53
- }
54
- ) });
55
- };
56
-
57
- export { CreateKeystore as C };
@@ -1,56 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { Box } from 'ink';
3
- import axios from 'axios';
4
- import { useContext } from 'react';
5
- import { useQueryClient } from '@tanstack/react-query';
6
- import { p as getAuthedHeaders, q as API_URL } from './index-BQRxiyqn.js';
7
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-D_30xIJA.js';
8
- import { a as GameContext } from './Command-1YAl_0zS.js';
9
- import 'ink-spinner';
10
- import '@inkjs/ui';
11
- import 'open';
12
- import 'crypto';
13
- import 'fs';
14
- import 'readline-sync';
15
- import 'node:readline';
16
- import 'node:path';
17
- import 'node:url';
18
- import 'luxon';
19
- import 'uuid';
20
- import 'fast-glob';
21
- import 'yazl';
22
- import 'socket.io-client';
23
- import 'isomorphic-git';
24
- import '@oclif/core';
25
- import 'qrcode';
26
- import { R as RunWithSpinner } from './RunWithSpinner-BVXNWGD3.js';
27
- import 'string-length';
28
- import 'strip-ansi';
29
-
30
- const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
31
- const { gameId } = useContext(GameContext);
32
- const queryClient = useQueryClient();
33
- const handleCreate = async () => {
34
- try {
35
- if (!gameId) throw new Error("No game");
36
- const headers = await getAuthedHeaders();
37
- await axios.post(`${API_URL}/projects/${gameId}/credentials/android/certificate`, null, {
38
- headers
39
- });
40
- queryClient.invalidateQueries({ queryKey: cacheKeys.projectCredentials({ projectId: gameId, pageNumber: 0 }) });
41
- } catch (err) {
42
- onError(err);
43
- }
44
- };
45
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", gap: 1, ...boxProps, children: /* @__PURE__ */ jsx(
46
- RunWithSpinner,
47
- {
48
- executeMethod: handleCreate,
49
- msgInProgress: "Creating Keystore...",
50
- msgComplete: "Keystore created",
51
- onComplete
52
- }
53
- ) });
54
- };
55
-
56
- export { CreateKeystore as C };
@@ -1,56 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { Box } from 'ink';
3
- import axios from 'axios';
4
- import { useContext } from 'react';
5
- import { useQueryClient } from '@tanstack/react-query';
6
- import { p as getAuthedHeaders, q as API_URL } from './index-Bv3x8c78.js';
7
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-BDc7XpKE.js';
8
- import { b as GameContext } from './Command-YJJp90ru.js';
9
- import 'ink-spinner';
10
- import '@inkjs/ui';
11
- import 'open';
12
- import 'crypto';
13
- import 'fs';
14
- import 'readline-sync';
15
- import 'node:readline';
16
- import 'node:path';
17
- import 'node:url';
18
- import 'luxon';
19
- import 'uuid';
20
- import 'fast-glob';
21
- import 'yazl';
22
- import 'socket.io-client';
23
- import 'isomorphic-git';
24
- import '@oclif/core';
25
- import 'qrcode';
26
- import { R as RunWithSpinner } from './RunWithSpinner-BVXNWGD3.js';
27
- import 'string-length';
28
- import 'strip-ansi';
29
-
30
- const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
31
- const { gameId } = useContext(GameContext);
32
- const queryClient = useQueryClient();
33
- const handleCreate = async () => {
34
- try {
35
- if (!gameId) throw new Error("No game");
36
- const headers = await getAuthedHeaders();
37
- await axios.post(`${API_URL}/projects/${gameId}/credentials/android/certificate`, null, {
38
- headers
39
- });
40
- queryClient.invalidateQueries({ queryKey: cacheKeys.projectCredentials({ projectId: gameId, pageNumber: 0 }) });
41
- } catch (err) {
42
- onError(err);
43
- }
44
- };
45
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", gap: 1, ...boxProps, children: /* @__PURE__ */ jsx(
46
- RunWithSpinner,
47
- {
48
- executeMethod: handleCreate,
49
- msgInProgress: "Creating Keystore...",
50
- msgComplete: "Keystore created",
51
- onComplete
52
- }
53
- ) });
54
- };
55
-
56
- export { CreateKeystore as C };