shipthis 0.1.41 → 0.1.43

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 (93) hide show
  1. package/README.md +9 -7
  2. package/assets/markdown/confirm-change-android-build-method.md.ejs +13 -0
  3. package/dist/{AppleBundleIdDetails-BJC7GCx_.js → AppleBundleIdDetails-bMqPqmP0.js} +9 -7
  4. package/dist/{Command-Cj6F5B5a.js → Command-cqn3WLlP.js} +4 -3
  5. package/dist/{CommandGame-CuvuH-z6.js → CommandGame-DMQT0sL_.js} +2 -2
  6. package/dist/{Create-pfGYcKu4.js → Create-Cs9HG9xO.js} +5 -3
  7. package/dist/{GameStatus-ZSe-qG3y.js → GameStatus-lv2SW-6H.js} +4 -3
  8. package/dist/{Import-D046HBaF.js → Import-DOQrR8wW.js} +6 -4
  9. package/dist/{JobLogTail-Da8GuReK.js → JobLogTail-CWYxQTq4.js} +31 -17
  10. package/dist/JobProgress-B07Y2FLb.js +253 -0
  11. package/dist/{JobStatusTable-DVJjHw97.js → JobStatusTable-B0A1z1zq.js} +3 -4
  12. package/dist/{ProjectCredentialsTable-BJJz7W1P.js → ProjectCredentialsTable-CyJ7o8yD.js} +4 -3
  13. package/dist/{UserCredentialsTable-CSynIVHU.js → UserCredentialsTable-C8_skPFY.js} +4 -3
  14. package/dist/{baseAppleCommand-Aq-Eaw_K.js → baseAppleCommand-Cfoy8Tx_.js} +1 -1
  15. package/dist/{baseCommand-CTn3KGH3.js → baseCommand-B23l0hCp.js} +82 -111
  16. package/dist/{baseGameAndroidCommand-DRzVMKuG.js → baseGameAndroidCommand-Dh4xXVW1.js} +4 -3
  17. package/dist/{baseGameCommand-8VL7xe-O.js → baseGameCommand-P7Vyz2vZ.js} +5 -3
  18. package/dist/commands/apiKey/create.js +6 -6
  19. package/dist/commands/apiKey/list.js +6 -6
  20. package/dist/commands/apiKey/revoke.js +6 -6
  21. package/dist/commands/apple/apiKey/create.js +9 -9
  22. package/dist/commands/apple/apiKey/delete.js +7 -7
  23. package/dist/commands/apple/apiKey/export.js +8 -8
  24. package/dist/commands/apple/apiKey/import.js +8 -8
  25. package/dist/commands/apple/apiKey/status.js +7 -7
  26. package/dist/commands/apple/certificate/create.js +9 -9
  27. package/dist/commands/apple/certificate/delete.js +7 -7
  28. package/dist/commands/apple/certificate/export.js +8 -8
  29. package/dist/commands/apple/certificate/import.js +8 -8
  30. package/dist/commands/apple/certificate/status.js +7 -7
  31. package/dist/commands/apple/login.js +5 -5
  32. package/dist/commands/apple/status.js +6 -6
  33. package/dist/commands/dashboard.js +5 -5
  34. package/dist/commands/game/android/apiKey/connect.js +11 -11
  35. package/dist/commands/game/android/apiKey/create.js +13 -13
  36. package/dist/commands/game/android/apiKey/delete.js +7 -7
  37. package/dist/commands/game/android/apiKey/export.js +9 -9
  38. package/dist/commands/game/android/apiKey/import.js +9 -9
  39. package/dist/commands/game/android/apiKey/invite.js +6 -6
  40. package/dist/commands/game/android/apiKey/policy.js +6 -6
  41. package/dist/commands/game/android/apiKey/status.js +9 -9
  42. package/dist/commands/game/android/keyStore/create.js +10 -10
  43. package/dist/commands/game/android/keyStore/delete.js +7 -7
  44. package/dist/commands/game/android/keyStore/export.js +8 -8
  45. package/dist/commands/game/android/keyStore/import.js +11 -11
  46. package/dist/commands/game/android/keyStore/status.js +8 -8
  47. package/dist/commands/game/android/status.js +5 -5
  48. package/dist/commands/game/build/download.js +6 -6
  49. package/dist/commands/game/build/list.js +7 -7
  50. package/dist/commands/game/create.js +5 -5
  51. package/dist/commands/game/details.js +6 -6
  52. package/dist/commands/game/export.js +5 -5
  53. package/dist/commands/game/ios/app/addTester.js +7 -7
  54. package/dist/commands/game/ios/app/create.js +8 -7
  55. package/dist/commands/game/ios/app/status.js +9 -9
  56. package/dist/commands/game/ios/app/sync.js +7 -7
  57. package/dist/commands/game/ios/profile/create.js +9 -9
  58. package/dist/commands/game/ios/profile/delete.js +7 -7
  59. package/dist/commands/game/ios/profile/export.js +8 -8
  60. package/dist/commands/game/ios/profile/import.js +8 -8
  61. package/dist/commands/game/ios/profile/status.js +9 -9
  62. package/dist/commands/game/ios/status.js +11 -11
  63. package/dist/commands/game/ios/wizard.js +6 -6
  64. package/dist/commands/game/job/list.js +6 -6
  65. package/dist/commands/game/job/status.js +11 -11
  66. package/dist/commands/game/list.js +6 -6
  67. package/dist/commands/game/ship.js +32 -15
  68. package/dist/commands/game/status.js +8 -8
  69. package/dist/commands/game/wizard.js +80 -30
  70. package/dist/commands/internal/fastlane.js +5 -5
  71. package/dist/commands/internal/readme.js +5 -5
  72. package/dist/commands/login.js +5 -5
  73. package/dist/commands/status.js +6 -6
  74. package/dist/commands/util/android-build-method.js +67 -0
  75. package/dist/commands/util/glass.js +4 -4
  76. package/dist/{export-DtATljiz.js → export-BOuZFMT3.js} +1 -1
  77. package/dist/{import-Dk2ywOVU.js → import-P4KcAuAO.js} +1 -1
  78. package/dist/{index-cRnjcGxV.js → index-AUjBYrSG.js} +8 -6
  79. package/dist/{index-CuyVBHWc.js → index-BmRSqi8U.js} +7 -5
  80. package/dist/{index-BW7z-5sB.js → index-DMosmqi2.js} +1 -1
  81. package/dist/{upload-CHaDSvvi.js → upload-BvNeNQXc.js} +1 -1
  82. package/dist/{useAppleApp-CR847GWc.js → useAppleApp-fD92orhh.js} +1 -1
  83. package/dist/{useAppleBundleId-BnwPmVEu.js → useAppleBundleId-oONHtYgg.js} +2 -2
  84. package/dist/{useAppleProfiles-DY-H0420.js → useAppleProfiles-aMy844nZ.js} +3 -2
  85. package/dist/{useGoogleStatus-WqPgHteE.js → useGoogleStatus-rBDZt9tw.js} +2 -2
  86. package/dist/{useProjectCredentials-TvlolkId.js → useProjectCredentials-DLYLMlJh.js} +2 -2
  87. package/dist/{useWebSocket-MXDbQHcu.js → useWebSocket-Bvq2Wf7I.js} +1 -1
  88. package/docs/util/android-build-method.md +26 -0
  89. package/docs/util.md +2 -1
  90. package/npm-shrinkwrap.json +14182 -0
  91. package/oclif.manifest.json +2966 -0
  92. package/package.json +9 -6
  93. package/dist/JobProgress-DltCQpzA.js +0 -127
@@ -1,8 +1,8 @@
1
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
- import { Box, Text, render } from 'ink';
4
- import { a2 as LogLevel, W as WEB_URL, a3 as getShortAuthRequiredUrl, z as getJob, L as downloadBuildById } from '../../baseCommand-CTn3KGH3.js';
5
- import { C as CommandContext, G as GameContext, w as useSafeInput, M as Markdown, g as getShortUUID, c as BaseGameCommand } from '../../baseGameCommand-8VL7xe-O.js';
3
+ import { useStdout, useStderr, Box, Text, render } from 'ink';
4
+ import { a2 as LogLevel, W as WEB_URL, a3 as getShortAuthRequiredUrl, F as getJob, N as downloadBuildById } from '../../baseCommand-B23l0hCp.js';
5
+ import { j as CommandContext, i as GameContext, t as useSafeInput, M as Markdown, g as getShortUUID, c as BaseGameCommand } from '../../baseGameCommand-P7Vyz2vZ.js';
6
6
  import 'ink-spinner';
7
7
  import 'node:crypto';
8
8
  import 'node:fs';
@@ -17,33 +17,33 @@ import '@tanstack/react-query';
17
17
  import { useContext, useState, useEffect } from 'react';
18
18
  import 'fast-glob';
19
19
  import 'uuid';
20
- import 'yazl';
21
20
  import 'socket.io-client';
22
21
  import 'fullscreen-ink';
22
+ import 'stream';
23
+ import 'yazl';
23
24
  import 'string-length';
24
25
  import 'strip-ansi';
25
26
  import open from 'open';
26
27
  import 'crypto-js';
27
- import { u as useJobWatching, J as JobLogTail } from '../../JobLogTail-Da8GuReK.js';
28
- import { J as JobStatusTable } from '../../JobStatusTable-DVJjHw97.js';
28
+ import { u as useJobWatching, J as JobLogTail } from '../../JobLogTail-CWYxQTq4.js';
29
+ import { J as JobStatusTable } from '../../JobStatusTable-B0A1z1zq.js';
29
30
  import '@inkjs/ui';
30
- import { u as useShip, J as JobProgress } from '../../JobProgress-DltCQpzA.js';
31
+ import { u as useShip, J as JobProgress } from '../../JobProgress-B07Y2FLb.js';
31
32
  import 'qrcode';
33
+ import 'godot-export-presets';
32
34
  import 'marked';
33
35
  import 'marked-terminal';
34
- import { C as CommandGame } from '../../CommandGame-CuvuH-z6.js';
36
+ import { C as CommandGame } from '../../CommandGame-DMQT0sL_.js';
35
37
  import 'chalk';
36
38
  import '@expo/apple-utils/build/index.js';
37
- import 'deepmerge';
38
- import 'ini';
39
39
  import 'fs';
40
40
  import 'path';
41
- import '../../useWebSocket-MXDbQHcu.js';
41
+ import '../../useWebSocket-Bvq2Wf7I.js';
42
42
  import '../../Title-BCQtayg6.js';
43
43
  import '../../StatusTable-DzRWcMr4.js';
44
44
  import '../../git-BpsfNFZ_.js';
45
45
  import '../../ProgressSpinner-Um6ARKlk.js';
46
- import '../../Command-Cj6F5B5a.js';
46
+ import '../../Command-cqn3WLlP.js';
47
47
 
48
48
  function isNetworkError(exception) {
49
49
  if (!axios.isAxiosError(exception)) return false;
@@ -67,15 +67,32 @@ function getErrorMessage(error) {
67
67
  }
68
68
  }
69
69
 
70
- const JobFollow = ({ jobId, onComplete, onFailure, projectId }) => {
70
+ const JobFollow = ({
71
+ jobId,
72
+ onComplete,
73
+ onFailure,
74
+ projectId
75
+ }) => {
76
+ const { stdout, write: writeOut } = useStdout();
77
+ const { stderr, write: writeErr } = useStderr();
78
+ const useAnsi = Boolean(stderr.isTTY ?? stdout.isTTY);
79
+ const yellow = useAnsi ? "\x1B[33m" : "";
80
+ const red = useAnsi ? "\x1B[31m" : "";
81
+ const reset = useAnsi ? "\x1B[0m" : "";
71
82
  useJobWatching({
72
83
  isWatching: true,
73
84
  jobId,
74
85
  onComplete,
75
86
  onFailure,
76
87
  onNewLogEntry(logEntry) {
77
- if (logEntry.level === LogLevel.ERROR) console.error(logEntry.message);
78
- else console.log(logEntry.message);
88
+ const msg = logEntry.message + "\n";
89
+ if (logEntry.level === LogLevel.ERROR) {
90
+ writeErr(`${red}${msg}${reset}`);
91
+ } else if (logEntry.level === LogLevel.WARN) {
92
+ writeErr(`${yellow}${msg}${reset}`);
93
+ } else {
94
+ writeOut(msg);
95
+ }
79
96
  },
80
97
  projectId
81
98
  });
@@ -1,14 +1,14 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { B as BaseAuthenticatedCommand } from '../../baseGameCommand-8VL7xe-O.js';
4
+ import { B as BaseAuthenticatedCommand } from '../../baseGameCommand-P7Vyz2vZ.js';
5
5
  import 'node:fs';
6
6
  import 'node:path';
7
7
  import 'chalk';
8
8
  import 'axios';
9
9
  import 'crypto-js';
10
10
  import 'uuid';
11
- import '../../baseCommand-CTn3KGH3.js';
11
+ import '../../baseCommand-B23l0hCp.js';
12
12
  import 'luxon';
13
13
  import 'node:crypto';
14
14
  import 'node:readline';
@@ -18,11 +18,12 @@ import 'isomorphic-git';
18
18
  import '@tanstack/react-query';
19
19
  import 'react';
20
20
  import 'fast-glob';
21
- import 'yazl';
22
21
  import 'socket.io-client';
23
22
  import 'fullscreen-ink';
23
+ import 'stream';
24
+ import 'yazl';
24
25
  import 'ink-spinner';
25
- import { a as GameStatus$1 } from '../../GameStatus-ZSe-qG3y.js';
26
+ import { a as GameStatus$1 } from '../../GameStatus-lv2SW-6H.js';
26
27
  import 'string-length';
27
28
  import 'strip-ansi';
28
29
  import 'open';
@@ -30,16 +31,15 @@ import '@inkjs/ui';
30
31
  import 'marked';
31
32
  import 'marked-terminal';
32
33
  import 'qrcode';
33
- import { C as CommandGame } from '../../CommandGame-CuvuH-z6.js';
34
+ import 'godot-export-presets';
35
+ import { C as CommandGame } from '../../CommandGame-DMQT0sL_.js';
34
36
  import 'fs';
35
37
  import 'path';
36
38
  import '@expo/apple-utils/build/index.js';
37
- import 'deepmerge';
38
- import 'ini';
39
39
  import '../../StatusTable-DzRWcMr4.js';
40
40
  import '../../Title-BCQtayg6.js';
41
41
  import '../../NextSteps-DbJHmscQ.js';
42
- import '../../Command-Cj6F5B5a.js';
42
+ import '../../Command-cqn3WLlP.js';
43
43
 
44
44
  class GameStatus extends BaseAuthenticatedCommand {
45
45
  static args = {};
@@ -1,14 +1,14 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { Args } from '@oclif/core';
3
3
  import { useScreenSize, withFullScreen } from 'fullscreen-ink';
4
- import { k as cacheKeys, C as CommandContext, G as GameContext, u as useBuilds, M as Markdown, g as getShortUUID, w as useSafeInput, z as queryBuilds, n as fetchKeyTestResult, K as KeyTestStatus, p as KeyTestError, j as GameProvider, A as CreateGooglePlayGame, B as BaseAuthenticatedCommand } from '../../baseGameCommand-8VL7xe-O.js';
4
+ import { k as cacheKeys, j as CommandContext, i as GameContext, u as useBuilds, M as Markdown, g as getShortUUID, t as useSafeInput, z as queryBuilds, n as fetchKeyTestResult, K as KeyTestStatus, p as KeyTestError, G as GameProvider, A as CreateGooglePlayGame, B as BaseAuthenticatedCommand } from '../../baseGameCommand-P7Vyz2vZ.js';
5
5
  import fs__default from 'node:fs';
6
6
  import 'node:path';
7
7
  import 'chalk';
8
8
  import axios from 'axios';
9
9
  import 'crypto-js';
10
10
  import 'uuid';
11
- import { H as queryClient, p as getAuthedHeaders, o as API_URL, F as castArrayObjectDates, k as getProject, a8 as updateProject, t as getGodotVersion, s as GameEngine, u as createProject, v as DEFAULT_SHIPPED_FILES_GLOBS, w as DEFAULT_IGNORED_FILES_GLOBS, P as Platform, J as JobStatus, W as WEB_URL, C as CredentialsType, M as getGoogleStatus, j as isCWDGodotGame } from '../../baseCommand-CTn3KGH3.js';
11
+ import { I as queryClient, q as getAuthedHeaders, p as API_URL, H as castArrayObjectDates, l as getProject, aa as updateProject, v as getGodotVersion, u as GameEngine, w as createProject, x as DEFAULT_SHIPPED_FILES_GLOBS, y as DEFAULT_IGNORED_FILES_GLOBS, P as Platform, ab as BuildType, J as JobStatus, W as WEB_URL, ac as getGradleBuildOptionKey, i as isGradleBuildEnabled, s as setGradleBuildEnabled, C as CredentialsType, O as getGoogleStatus, k as isCWDGodotGame } from '../../baseCommand-B23l0hCp.js';
12
12
  import 'luxon';
13
13
  import 'node:crypto';
14
14
  import 'node:readline';
@@ -18,38 +18,38 @@ import 'isomorphic-git';
18
18
  import { useMutation, useQuery } from '@tanstack/react-query';
19
19
  import React, { useState, useContext, useEffect, useRef } from 'react';
20
20
  import 'fast-glob';
21
- import 'yazl';
22
21
  import 'socket.io-client';
23
22
  import { Box, Text } from 'ink';
23
+ import 'stream';
24
+ import 'yazl';
24
25
  import Spinner from 'ink-spinner';
25
26
  import 'string-length';
26
27
  import 'strip-ansi';
27
28
  import 'open';
28
- import { C as ConnectGoogle } from '../../index-CuyVBHWc.js';
29
+ import { C as ConnectGoogle } from '../../index-BmRSqi8U.js';
29
30
  import { TextInput, Alert } from '@inkjs/ui';
30
31
  import 'marked';
31
32
  import 'marked-terminal';
32
33
  import 'qrcode';
33
- import { J as JobLogTail } from '../../JobLogTail-Da8GuReK.js';
34
- import { u as useShip, J as JobProgress } from '../../JobProgress-DltCQpzA.js';
35
- import { C as CreateServiceAccountKey } from '../../index-cRnjcGxV.js';
36
- import { C as CreateKeystore } from '../../Create-pfGYcKu4.js';
37
- import { I as ImportKeystore } from '../../Import-D046HBaF.js';
38
- import { a as getProjectCredentials } from '../../index-BW7z-5sB.js';
34
+ import { getMajorVersion } from 'godot-export-presets';
35
+ import { J as JobLogTail } from '../../JobLogTail-CWYxQTq4.js';
36
+ import { u as useShip, J as JobProgress } from '../../JobProgress-B07Y2FLb.js';
37
+ import { C as CreateServiceAccountKey } from '../../index-AUjBYrSG.js';
38
+ import { C as CreateKeystore } from '../../Create-Cs9HG9xO.js';
39
+ import { I as ImportKeystore } from '../../Import-DOQrR8wW.js';
40
+ import { a as getProjectCredentials } from '../../index-DMosmqi2.js';
39
41
  import { T as Title } from '../../Title-BCQtayg6.js';
40
- import { C as Command } from '../../Command-Cj6F5B5a.js';
42
+ import { C as Command } from '../../Command-cqn3WLlP.js';
41
43
  import 'fs';
42
44
  import 'path';
43
45
  import '@expo/apple-utils/build/index.js';
44
- import 'deepmerge';
45
- import 'ini';
46
- import '../../useGoogleStatus-WqPgHteE.js';
47
- import '../../useWebSocket-MXDbQHcu.js';
46
+ import '../../useGoogleStatus-rBDZt9tw.js';
47
+ import '../../useWebSocket-Bvq2Wf7I.js';
48
48
  import '../../git-BpsfNFZ_.js';
49
49
  import '../../ProgressSpinner-Um6ARKlk.js';
50
- import '../../useProjectCredentials-TvlolkId.js';
50
+ import '../../useProjectCredentials-DLYLMlJh.js';
51
51
  import '../../RunWithSpinner-DucRnFp6.js';
52
- import '../../import-Dk2ywOVU.js';
52
+ import '../../import-P4KcAuAO.js';
53
53
 
54
54
  const useInviteServiceAccount = () => useMutation({
55
55
  async mutationFn({ developerId, projectId }) {
@@ -248,11 +248,7 @@ const CreateGame = (props) => {
248
248
  ] });
249
249
  };
250
250
 
251
- const CreateInitialBuild = (props) => {
252
- const { gameId } = useContext(GameContext);
253
- return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(CreateForGame, { gameId, ...props }) });
254
- };
255
- const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
251
+ const InitialAndroidBuild = ({ gameId, onComplete, onError, ...boxProps }) => {
256
252
  const { command } = useContext(CommandContext);
257
253
  const { data: buildData, isLoading: isLoadingBuilds } = useBuilds({ pageNumber: 0, projectId: gameId });
258
254
  const { data: jobData, isLoading: isLoadingJobs } = useJobs({
@@ -268,7 +264,9 @@ const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
268
264
  if (!buildData) return;
269
265
  if (!jobData) return;
270
266
  if (!command) return;
271
- const hasAndroidBuild = buildData.data.some((build) => build.platform === Platform.ANDROID);
267
+ const hasAndroidBuild = buildData.data.some(
268
+ (build) => build.platform === Platform.ANDROID && build.buildType == BuildType.AAB
269
+ );
272
270
  if (!prevHasBuild.current && hasAndroidBuild) return onComplete();
273
271
  prevHasBuild.current = hasAndroidBuild;
274
272
  const hasRunningAndroidJob = jobData.data.some(
@@ -294,12 +292,19 @@ const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
294
292
  (isLoadingBuilds || isLoadingJobs || shipMutation.isPending) && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
295
293
  ] }),
296
294
  androidJob === null && /* @__PURE__ */ jsx(Text, { children: shipLog }),
297
- androidJob && /* @__PURE__ */ jsx(JobProgress, { job: androidJob, onComplete, onFailure: (j) => {
298
- setFailedJob(j);
299
- setTimeout(() => {
300
- onError(new Error(`Job ${j.id} failed`));
301
- }, 1e3);
302
- } }),
295
+ androidJob && /* @__PURE__ */ jsx(
296
+ JobProgress,
297
+ {
298
+ job: androidJob,
299
+ onComplete,
300
+ onFailure: (j) => {
301
+ setFailedJob(j);
302
+ setTimeout(() => {
303
+ onError(new Error(`Job ${j.id} failed`));
304
+ }, 1e3);
305
+ }
306
+ }
307
+ ),
303
308
  failedJob && /* @__PURE__ */ jsxs(Fragment, { children: [
304
309
  /* @__PURE__ */ jsx(
305
310
  Markdown,
@@ -315,6 +320,49 @@ const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
315
320
  ] }) });
316
321
  };
317
322
 
323
+ const EnableGradle = ({ onConfirm, onCancel, ...boxProps }) => {
324
+ const godotVersion = getGodotVersion();
325
+ const majorVersion = getMajorVersion(godotVersion);
326
+ useSafeInput(async (input) => {
327
+ if (input == "y") return onConfirm && onConfirm();
328
+ if (input == "n") return onCancel && onCancel();
329
+ });
330
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", gap: 1, ...boxProps, children: /* @__PURE__ */ jsx(Box, { flexDirection: "row", gap: 1, children: /* @__PURE__ */ jsx(
331
+ Markdown,
332
+ {
333
+ filename: "confirm-change-android-build-method.md.ejs",
334
+ templateVars: {
335
+ docsURL: `${WEB_URL}docs/guides/android-build-methods`,
336
+ godotVersion,
337
+ optionKey: getGradleBuildOptionKey(majorVersion)
338
+ }
339
+ }
340
+ ) }) });
341
+ };
342
+
343
+ const CreateInitialBuild = ({ onComplete, onError, ...boxProps }) => {
344
+ const { gameId } = useContext(GameContext);
345
+ const [canBuildAAB, setCanBuildAAB] = useState(null);
346
+ useEffect(() => {
347
+ async function fetchBuildMethod() {
348
+ const isGradle = await isGradleBuildEnabled();
349
+ setCanBuildAAB(isGradle);
350
+ }
351
+ fetchBuildMethod();
352
+ }, []);
353
+ const updateBuildMethod = async () => {
354
+ await setGradleBuildEnabled(true);
355
+ setCanBuildAAB(true);
356
+ };
357
+ if (canBuildAAB === null) {
358
+ return /* @__PURE__ */ jsx(Text, { children: "Loading..." });
359
+ }
360
+ if (canBuildAAB === false) {
361
+ return /* @__PURE__ */ jsx(EnableGradle, { ...boxProps, onConfirm: () => updateBuildMethod(), onCancel: () => process.exit() });
362
+ }
363
+ return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(InitialAndroidBuild, { gameId, onComplete, onError, ...boxProps }) });
364
+ };
365
+
318
366
  const InviteForm = ({ onSubmit }) => {
319
367
  const [error, setError] = useState(null);
320
368
  const [accountId, setAccountId] = useState("");
@@ -521,7 +569,9 @@ const getStatusFlags = async (cmd) => {
521
569
  (cred) => cred.isActive && cred.platform === Platform.ANDROID && cred.type === CredentialsType.KEY
522
570
  );
523
571
  const buildsResponse = projectId && hasShipThisProject ? await queryBuilds({ pageNumber: 0, projectId: `${projectId}` }) : null;
524
- const hasInitialBuild = Boolean(buildsResponse?.data?.some((build) => build.platform === Platform.ANDROID));
572
+ const hasInitialBuild = Boolean(
573
+ buildsResponse?.data?.some((build) => build.platform === Platform.ANDROID && build.buildType === BuildType.AAB)
574
+ );
525
575
  const testResult = projectId ? await fetchKeyTestResult({ projectId }) : null;
526
576
  const hasGooglePlayGame = testResult && testResult?.status === KeyTestStatus.SUCCESS || testResult?.status === KeyTestStatus.ERROR && testResult?.error === KeyTestError.NOT_INVITED;
527
577
  const hasInvitedServiceAccount = testResult ? testResult?.status === KeyTestStatus.SUCCESS : false;
@@ -4,7 +4,7 @@ import { Args, Flags } from '@oclif/core';
4
4
  import 'axios';
5
5
  import 'crypto-js';
6
6
  import 'uuid';
7
- import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
7
+ import { B as BaseCommand } from '../../baseCommand-B23l0hCp.js';
8
8
  import 'luxon';
9
9
  import 'react/jsx-runtime';
10
10
  import 'ink';
@@ -17,21 +17,21 @@ import 'isomorphic-git';
17
17
  import '@tanstack/react-query';
18
18
  import 'react';
19
19
  import 'fast-glob';
20
- import 'yazl';
21
20
  import 'socket.io-client';
22
21
  import 'fullscreen-ink';
22
+ import 'stream';
23
+ import 'yazl';
23
24
  import 'string-length';
24
25
  import 'strip-ansi';
25
26
  import 'open';
26
27
  import '@inkjs/ui';
27
- import '../../baseGameCommand-8VL7xe-O.js';
28
+ import '../../baseGameCommand-P7Vyz2vZ.js';
28
29
  import 'marked';
29
30
  import 'marked-terminal';
30
31
  import 'qrcode';
32
+ import 'godot-export-presets';
31
33
  import 'chalk';
32
34
  import '@expo/apple-utils/build/index.js';
33
- import 'deepmerge';
34
- import 'ini';
35
35
  import 'fs';
36
36
  import 'path';
37
37
 
@@ -1,11 +1,11 @@
1
1
  import fs__default from 'node:fs';
2
2
  import path__default from 'node:path';
3
3
  import { Args, Flags } from '@oclif/core';
4
- import { q as ejs } from '../../baseGameCommand-8VL7xe-O.js';
4
+ import { q as ejs } from '../../baseGameCommand-P7Vyz2vZ.js';
5
5
  import 'axios';
6
6
  import 'crypto-js';
7
7
  import 'uuid';
8
- import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
8
+ import { B as BaseCommand } from '../../baseCommand-B23l0hCp.js';
9
9
  import 'luxon';
10
10
  import 'react/jsx-runtime';
11
11
  import 'ink';
@@ -19,9 +19,10 @@ import CustomHelp from '../../utils/help.js';
19
19
  import '@tanstack/react-query';
20
20
  import 'react';
21
21
  import 'fast-glob';
22
- import 'yazl';
23
22
  import 'socket.io-client';
24
23
  import 'fullscreen-ink';
24
+ import 'stream';
25
+ import 'yazl';
25
26
  import 'string-length';
26
27
  import 'strip-ansi';
27
28
  import 'open';
@@ -29,12 +30,11 @@ import '@inkjs/ui';
29
30
  import 'marked';
30
31
  import 'marked-terminal';
31
32
  import 'qrcode';
33
+ import 'godot-export-presets';
32
34
  import 'fs';
33
35
  import 'path';
34
36
  import 'chalk';
35
37
  import '@expo/apple-utils/build/index.js';
36
- import 'deepmerge';
37
- import 'ini';
38
38
 
39
39
  const ROOT_TOPIC_NAME = "shipthis";
40
40
  const ROOT_TOPIC_DESCRIPTION = "Root topic";
@@ -1,17 +1,16 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import axios from 'axios';
3
- import { W as WEB_URL, B as BaseCommand, Z as acceptTerms, o as API_URL, _ as setAuthToken } from '../baseCommand-CTn3KGH3.js';
3
+ import { W as WEB_URL, B as BaseCommand, $ as acceptTerms, p as API_URL, a0 as setAuthToken } from '../baseCommand-B23l0hCp.js';
4
4
  import 'react/jsx-runtime';
5
5
  import 'ink';
6
6
  import 'ink-spinner';
7
- import { b as getInput } from '../baseGameCommand-8VL7xe-O.js';
7
+ import { b as getInput } from '../baseGameCommand-P7Vyz2vZ.js';
8
8
  import 'react';
9
9
  import '@tanstack/react-query';
10
10
  import 'luxon';
11
11
  import 'node:fs';
12
12
  import 'fast-glob';
13
13
  import 'uuid';
14
- import 'yazl';
15
14
  import 'socket.io-client';
16
15
  import 'fullscreen-ink';
17
16
  import 'string-length';
@@ -22,6 +21,8 @@ import 'node:path';
22
21
  import 'marked';
23
22
  import 'marked-terminal';
24
23
  import 'qrcode';
24
+ import 'godot-export-presets';
25
+ import 'yazl';
25
26
  import 'chalk';
26
27
  import 'crypto-js';
27
28
  import '@expo/apple-utils/build/index.js';
@@ -30,8 +31,7 @@ import 'node:readline';
30
31
  import 'node:url';
31
32
  import 'readline-sync';
32
33
  import 'isomorphic-git';
33
- import 'deepmerge';
34
- import 'ini';
34
+ import 'stream';
35
35
  import 'fs';
36
36
  import 'path';
37
37
 
@@ -4,7 +4,7 @@ import 'node:fs';
4
4
  import 'axios';
5
5
  import 'crypto-js';
6
6
  import 'uuid';
7
- import { B as BaseCommand, j as isCWDGodotGame } from '../baseCommand-CTn3KGH3.js';
7
+ import { B as BaseCommand, k as isCWDGodotGame } from '../baseCommand-B23l0hCp.js';
8
8
  import 'luxon';
9
9
  import 'ink-spinner';
10
10
  import 'node:crypto';
@@ -17,25 +17,25 @@ import '@oclif/core';
17
17
  import '@tanstack/react-query';
18
18
  import 'react';
19
19
  import 'fast-glob';
20
- import 'yazl';
21
20
  import 'socket.io-client';
22
21
  import 'fullscreen-ink';
22
+ import 'stream';
23
+ import 'yazl';
23
24
  import 'string-length';
24
25
  import 'strip-ansi';
25
26
  import { S as StatusTable } from '../StatusTable-DzRWcMr4.js';
26
27
  import 'open';
27
28
  import '@inkjs/ui';
28
- import '../baseGameCommand-8VL7xe-O.js';
29
+ import '../baseGameCommand-P7Vyz2vZ.js';
29
30
  import 'marked';
30
31
  import 'marked-terminal';
31
32
  import { N as NextSteps } from '../NextSteps-DbJHmscQ.js';
32
33
  import 'qrcode';
33
- import { C as Command } from '../Command-Cj6F5B5a.js';
34
+ import 'godot-export-presets';
35
+ import { C as Command } from '../Command-cqn3WLlP.js';
34
36
  import chalk from 'chalk';
35
37
  import '@expo/apple-utils/build/index.js';
36
38
  import 'isomorphic-git';
37
- import 'deepmerge';
38
- import 'ini';
39
39
  import '../Title-BCQtayg6.js';
40
40
  import 'fs';
41
41
  import 'path';
@@ -0,0 +1,67 @@
1
+ import { Flags } from '@oclif/core';
2
+ import 'node:fs';
3
+ import 'axios';
4
+ import 'crypto-js';
5
+ import 'uuid';
6
+ import { B as BaseCommand, i as isGradleBuildEnabled, s as setGradleBuildEnabled } from '../../baseCommand-B23l0hCp.js';
7
+ import 'luxon';
8
+ import 'react/jsx-runtime';
9
+ import 'ink';
10
+ import 'ink-spinner';
11
+ import 'node:crypto';
12
+ import 'node:path';
13
+ import 'node:readline';
14
+ import 'node:url';
15
+ import 'readline-sync';
16
+ import 'isomorphic-git';
17
+ import '@tanstack/react-query';
18
+ import 'react';
19
+ import 'fast-glob';
20
+ import 'socket.io-client';
21
+ import 'fullscreen-ink';
22
+ import 'stream';
23
+ import 'yazl';
24
+ import 'string-length';
25
+ import 'strip-ansi';
26
+ import 'open';
27
+ import '@inkjs/ui';
28
+ import '../../baseGameCommand-P7Vyz2vZ.js';
29
+ import 'marked';
30
+ import 'marked-terminal';
31
+ import 'qrcode';
32
+ import 'godot-export-presets';
33
+ import 'chalk';
34
+ import '@expo/apple-utils/build/index.js';
35
+ import 'fs';
36
+ import 'path';
37
+
38
+ class UtilAndroidBuildMethod extends BaseCommand {
39
+ static args = {};
40
+ static description = "Gets and sets the Android build method in export_presets.cfg";
41
+ static examples = [
42
+ "<%= config.bin %> <%= command.id %>",
43
+ "<%= config.bin %> <%= command.id %> --legacy",
44
+ "<%= config.bin %> <%= command.id %> --gradle"
45
+ ];
46
+ static flags = {
47
+ legacy: Flags.boolean({ char: "l", description: "use legacy build method" }),
48
+ gradle: Flags.boolean({ char: "g", description: "use gradle build method" })
49
+ };
50
+ async run() {
51
+ const { flags } = await this.parse(UtilAndroidBuildMethod);
52
+ if (flags.legacy && flags.gradle) {
53
+ this.error("Cannot use both --legacy and --gradle flags together");
54
+ }
55
+ if (!flags.legacy && !flags.gradle) {
56
+ const buildMethod2 = await isGradleBuildEnabled() ? "gradle" : "legacy";
57
+ this.log(`Current Android build method: ${buildMethod2}`);
58
+ return;
59
+ }
60
+ const isGradle = flags.gradle ? true : false;
61
+ const buildMethod = flags.legacy ? "legacy" : "gradle";
62
+ this.log(`Setting Android build method to: ${buildMethod}`);
63
+ await setGradleBuildEnabled(isGradle);
64
+ }
65
+ }
66
+
67
+ export { UtilAndroidBuildMethod as default };
@@ -1,4 +1,4 @@
1
- import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
1
+ import { B as BaseCommand } from '../../baseCommand-B23l0hCp.js';
2
2
  import { Flags, Args } from '@oclif/core';
3
3
  import * as fs from 'node:fs';
4
4
  import * as path from 'node:path';
@@ -14,15 +14,15 @@ import 'node:readline';
14
14
  import 'node:url';
15
15
  import 'readline-sync';
16
16
  import 'isomorphic-git';
17
- import 'deepmerge';
18
- import 'ini';
17
+ import 'godot-export-presets';
19
18
  import '@tanstack/react-query';
20
19
  import 'react';
21
20
  import 'fast-glob';
22
- import 'yazl';
23
21
  import 'socket.io-client';
24
22
  import 'fullscreen-ink';
25
23
  import 'ink';
24
+ import 'stream';
25
+ import 'yazl';
26
26
 
27
27
  async function applyLiquidGlassIcon(opts) {
28
28
  const { projectDir, iconDir, verbose } = opts;
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'node:fs';
2
2
  import axios from 'axios';
3
- import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.js';
3
+ import { p as API_URL, q as getAuthedHeaders } from './baseCommand-B23l0hCp.js';
4
4
 
5
5
  async function exportCredential({ credentialId, projectId, zipPath }) {
6
6
  const headers = getAuthedHeaders();
@@ -1,6 +1,6 @@
1
1
  import { promises } from 'node:fs';
2
2
  import axios from 'axios';
3
- import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.js';
3
+ import { p as API_URL, q as getAuthedHeaders } from './baseCommand-B23l0hCp.js';
4
4
 
5
5
  async function getNewImportTicket(projectId) {
6
6
  const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
@@ -8,21 +8,22 @@ import 'node:path';
8
8
  import 'node:readline';
9
9
  import 'node:url';
10
10
  import 'readline-sync';
11
- import { p as getAuthedHeaders, o as API_URL, a4 as castObjectDates, H as queryClient, Q as revokePolicy, O as enforcePolicy, P as Platform, C as CredentialsType, M as getGoogleStatus, c as getShortDate } from './baseCommand-CTn3KGH3.js';
11
+ import { q as getAuthedHeaders, p as API_URL, a6 as castObjectDates, I as queryClient, S as revokePolicy, R as enforcePolicy, P as Platform, C as CredentialsType, O as getGoogleStatus, c as getShortDate } from './baseCommand-B23l0hCp.js';
12
12
  import axios from 'axios';
13
13
  import 'isomorphic-git';
14
14
  import '@oclif/core';
15
15
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
16
16
  import 'luxon';
17
- import { k as cacheKeys, G as GameContext, w as useSafeInput, M as Markdown } from './baseGameCommand-8VL7xe-O.js';
17
+ import { k as cacheKeys, i as GameContext, t as useSafeInput, M as Markdown } from './baseGameCommand-P7Vyz2vZ.js';
18
18
  import 'fast-glob';
19
19
  import 'uuid';
20
- import 'yazl';
21
20
  import 'socket.io-client';
22
21
  import 'fullscreen-ink';
23
- import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
24
- import { u as useProjectCredentials } from './useProjectCredentials-TvlolkId.js';
25
- import { u as useGoogleStatus } from './useGoogleStatus-WqPgHteE.js';
22
+ import 'stream';
23
+ import 'yazl';
24
+ import { u as useWebSocket } from './useWebSocket-Bvq2Wf7I.js';
25
+ import { u as useProjectCredentials } from './useProjectCredentials-DLYLMlJh.js';
26
+ import { u as useGoogleStatus } from './useGoogleStatus-rBDZt9tw.js';
26
27
  import 'crypto-js';
27
28
  import 'string-length';
28
29
  import 'strip-ansi';
@@ -30,6 +31,7 @@ import 'open';
30
31
  import '@inkjs/ui';
31
32
  import { P as ProgressSpinner } from './ProgressSpinner-Um6ARKlk.js';
32
33
  import 'qrcode';
34
+ import 'godot-export-presets';
33
35
 
34
36
  async function fetchStatus({ projectId }) {
35
37
  try {
@@ -12,21 +12,23 @@ import 'readline-sync';
12
12
  import 'luxon';
13
13
  import 'axios';
14
14
  import 'isomorphic-git';
15
- import { a3 as getShortAuthRequiredUrl, a5 as getGoogleAuthUrl, W as WEB_URL } from './baseCommand-CTn3KGH3.js';
15
+ import { a3 as getShortAuthRequiredUrl, a7 as getGoogleAuthUrl, W as WEB_URL } from './baseCommand-B23l0hCp.js';
16
16
  import '@oclif/core';
17
17
  import '@tanstack/react-query';
18
18
  import 'crypto-js';
19
19
  import 'uuid';
20
20
  import 'fast-glob';
21
- import 'yazl';
22
21
  import 'socket.io-client';
23
- import { u as useGoogleStatus } from './useGoogleStatus-WqPgHteE.js';
24
- import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
22
+ import { u as useGoogleStatus } from './useGoogleStatus-rBDZt9tw.js';
23
+ import { u as useWebSocket } from './useWebSocket-Bvq2Wf7I.js';
25
24
  import 'fullscreen-ink';
26
- import { G as GameContext, w as useSafeInput, M as Markdown } from './baseGameCommand-8VL7xe-O.js';
25
+ import { i as GameContext, t as useSafeInput, M as Markdown } from './baseGameCommand-P7Vyz2vZ.js';
26
+ import 'stream';
27
+ import 'yazl';
27
28
  import 'string-length';
28
29
  import 'strip-ansi';
29
30
  import '@inkjs/ui';
31
+ import 'godot-export-presets';
30
32
  import 'marked';
31
33
  import 'marked-terminal';
32
34
  import qrcode from 'qrcode';