shipthis 0.1.36 → 0.1.37

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 (98) hide show
  1. package/README.md +17 -9
  2. package/assets/markdown/confirm-delete-android-keystore.md.ejs +22 -0
  3. package/assets/markdown/confirm-delete-android-serviceaccountkey.md.ejs +24 -0
  4. package/assets/markdown/confirm-delete-apple-credential.md.ejs +29 -0
  5. package/dist/{AppleBundleIdDetails-pEVOUXTQ.js → AppleBundleIdDetails-KMzyex1H.js} +3 -3
  6. package/dist/{Command-DhAVAdiI.js → Command-CHh8RDXK.js} +1 -1
  7. package/dist/{CommandGame-C-oV-hb4.js → CommandGame-Rvmsa7b0.js} +2 -2
  8. package/dist/{Create-Dg9ZlwEd.js → Create-DInZ_pw-.js} +1 -1
  9. package/dist/{GameStatus-Dm9TqFfW.js → GameStatus-D7ID10tS.js} +1 -1
  10. package/dist/{Import-BFNNkN-I.js → Import-BmO8EYKj.js} +2 -2
  11. package/dist/{JobLogTail-RTNIiAUk.js → JobLogTail-CYdceTKL.js} +2 -2
  12. package/dist/{JobProgress-dFWcT0CQ.js → JobProgress-DBCYbWrO.js} +2 -2
  13. package/dist/{JobStatusTable-BlvMuWF7.js → JobStatusTable-DhnhY1_i.js} +2 -2
  14. package/dist/{ProjectCredentialsTable-CMBnYLou.js → ProjectCredentialsTable-BDYVYqAq.js} +5 -3
  15. package/dist/{UserCredentialsTable-oxE3mDmE.js → UserCredentialsTable-cDPvjF-F.js} +4 -2
  16. package/dist/{baseAppleCommand-cnLvBz95.js → baseAppleCommand-CQ5dOna7.js} +1 -1
  17. package/dist/{baseGameAndroidCommand-DUDYisYm.js → baseGameAndroidCommand-D4ryZS6A.js} +1 -1
  18. package/dist/commands/apiKey/create.js +3 -2
  19. package/dist/commands/apiKey/list.js +3 -2
  20. package/dist/commands/apiKey/revoke.js +3 -2
  21. package/dist/commands/apple/apiKey/create.js +7 -6
  22. package/dist/commands/apple/apiKey/delete.js +118 -0
  23. package/dist/commands/apple/apiKey/export.js +6 -5
  24. package/dist/commands/apple/apiKey/import.js +6 -5
  25. package/dist/commands/apple/apiKey/status.js +4 -3
  26. package/dist/commands/apple/certificate/create.js +7 -6
  27. package/dist/commands/apple/certificate/delete.js +127 -0
  28. package/dist/commands/apple/certificate/export.js +6 -5
  29. package/dist/commands/apple/certificate/import.js +6 -5
  30. package/dist/commands/apple/certificate/status.js +4 -3
  31. package/dist/commands/apple/login.js +12 -3
  32. package/dist/commands/apple/status.js +3 -2
  33. package/dist/commands/dashboard.js +2 -1
  34. package/dist/commands/game/android/apiKey/connect.js +8 -7
  35. package/dist/commands/game/android/apiKey/create.js +10 -9
  36. package/dist/commands/game/android/apiKey/delete.js +100 -0
  37. package/dist/commands/game/android/apiKey/export.js +6 -5
  38. package/dist/commands/game/android/apiKey/import.js +6 -5
  39. package/dist/commands/game/android/apiKey/invite.js +3 -2
  40. package/dist/commands/game/android/apiKey/policy.js +3 -2
  41. package/dist/commands/game/android/apiKey/status.js +6 -5
  42. package/dist/commands/game/android/keyStore/create.js +7 -6
  43. package/dist/commands/game/android/keyStore/delete.js +100 -0
  44. package/dist/commands/game/android/keyStore/export.js +5 -4
  45. package/dist/commands/game/android/keyStore/import.js +8 -7
  46. package/dist/commands/game/android/keyStore/status.js +5 -4
  47. package/dist/commands/game/android/status.js +2 -1
  48. package/dist/commands/game/build/download.js +3 -2
  49. package/dist/commands/game/build/list.js +4 -3
  50. package/dist/commands/game/create.js +2 -1
  51. package/dist/commands/game/details.js +3 -2
  52. package/dist/commands/game/export.js +2 -1
  53. package/dist/commands/game/ios/app/addTester.js +4 -3
  54. package/dist/commands/game/ios/app/create.js +3 -2
  55. package/dist/commands/game/ios/app/status.js +6 -5
  56. package/dist/commands/game/ios/app/sync.js +4 -3
  57. package/dist/commands/game/ios/profile/create.js +6 -5
  58. package/dist/commands/game/ios/profile/delete.js +123 -0
  59. package/dist/commands/game/ios/profile/export.js +5 -4
  60. package/dist/commands/game/ios/profile/import.js +5 -4
  61. package/dist/commands/game/ios/profile/status.js +8 -47
  62. package/dist/commands/game/ios/status.js +8 -7
  63. package/dist/commands/game/ios/wizard.js +2 -2
  64. package/dist/commands/game/job/list.js +3 -2
  65. package/dist/commands/game/job/status.js +6 -5
  66. package/dist/commands/game/list.js +3 -2
  67. package/dist/commands/game/ship.js +8 -7
  68. package/dist/commands/game/status.js +5 -4
  69. package/dist/commands/game/wizard.js +14 -13
  70. package/dist/commands/internal/fastlane.js +2 -1
  71. package/dist/commands/internal/readme.js +2 -1
  72. package/dist/commands/login.js +2 -1
  73. package/dist/commands/status.js +2 -2
  74. package/dist/{export-Bd552LBe.js → export-DujIwhJw.js} +1 -1
  75. package/dist/{import-D-EL9sQJ.js → import-DGCqCAcC.js} +1 -1
  76. package/dist/{index-DCN43FhY.js → index-9LxGafAo.js} +3 -3
  77. package/dist/{index-DwATmUTQ.js → index-BPh_qt7t.js} +4 -4
  78. package/dist/index-CNsmEDXi.js +48 -0
  79. package/dist/{index-BtPf4vzY.js → index-CmuXyPed.js} +4 -2
  80. package/dist/{upload-Dm38PqhN.js → upload-D4x4yCia.js} +1 -1
  81. package/dist/{useAppleApp-BKPntZPm.js → useAppleApp-taaewPSf.js} +1 -1
  82. package/dist/{useAppleBundleId-DvQKEEy4.js → useAppleBundleId-BeGViMe7.js} +1 -1
  83. package/dist/useAppleProfiles-1TtO0aO6.js +63 -0
  84. package/dist/{useGoogleStatus-D9jjGa--.js → useGoogleStatus-CSsxEvX7.js} +1 -1
  85. package/dist/{useProjectCredentials-BjsS28hP.js → useProjectCredentials-Cm50WMZU.js} +1 -1
  86. package/dist/{useWebSocket-CIeyHqxG.js → useWebSocket-BVfn36be.js} +1 -1
  87. package/docs/apple/apiKey/delete.md +25 -0
  88. package/docs/apple/apiKey.md +26 -0
  89. package/docs/apple/certificate/delete.md +25 -0
  90. package/docs/apple/certificate.md +26 -0
  91. package/docs/game/android/apiKey/delete.md +25 -0
  92. package/docs/game/android/apiKey.md +26 -0
  93. package/docs/game/android/keyStore/delete.md +25 -0
  94. package/docs/game/android/keyStore.md +26 -0
  95. package/docs/game/ios/profile/delete.md +26 -0
  96. package/docs/game/ios/profile.md +27 -0
  97. package/package.json +6 -1
  98. package/dist/index-1H48f5j2.js +0 -24
package/README.md CHANGED
@@ -104,17 +104,19 @@ ShipThis handles iOS builds on managed macOS cloud servers. The CLI connects to
104
104
 
105
105
  We support **all stable Godot versions since 3.6**, including:
106
106
 
107
- | 3.6 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 |
108
- |---------|----------|----------|--------|-----|--------|
109
- | 3.6.1 | 4.0.1 | 4.1.1 | 4.2.1 | | 4.4.1 |
110
- | | 4.0.2 | 4.1.2 | 4.2.2 | | |
111
- | | 4.0.3 | 4.1.3 | | | |
112
- | | 4.0.4 | 4.1.4 | | | |
107
+ | [3.6](https://github.com/godotengine/godot/releases/tag/3.6-stable) | [4.0](https://github.com/godotengine/godot/releases/tag/4.0-stable) | [4.1](https://github.com/godotengine/godot/releases/tag/4.1-stable) | [4.2](https://github.com/godotengine/godot/releases/tag/4.2-stable) | [4.3](https://github.com/godotengine/godot/releases/tag/4.3-stable) | [4.4](https://github.com/godotengine/godot/releases/tag/4.4-stable) | [4.5](https://github.com/godotengine/godot/releases/tag/4.5-stable) |
108
+ |---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|
109
+ | [3.6.1](https://github.com/godotengine/godot/releases/tag/3.6.1-stable) | [4.0.1](https://github.com/godotengine/godot/releases/tag/4.0.1-stable) | [4.1.1](https://github.com/godotengine/godot/releases/tag/4.1.1-stable) | [4.2.1](https://github.com/godotengine/godot/releases/tag/4.2.1-stable) | [4.3.1 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.3.1) | [4.4.1](https://github.com/godotengine/godot/releases/tag/4.4.1-stable) | |
110
+ | [3.7-dev *](https://github.com/shipth-is/godot-3.x-builds/releases/tag/godot-3.x-8c10cd6) | [4.0.2](https://github.com/godotengine/godot/releases/tag/4.0.2-stable) | [4.1.2](https://github.com/godotengine/godot/releases/tag/4.1.2-stable) | [4.2.2](https://github.com/godotengine/godot/releases/tag/4.2.2-stable) | | [4.4.2 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.4.2) | |
111
+ | | [4.0.3](https://github.com/godotengine/godot/releases/tag/4.0.3-stable) | [4.1.3](https://github.com/godotengine/godot/releases/tag/4.1.3-stable) | [4.2.3 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.2.3) | | | |
112
+ | | [4.0.4](https://github.com/godotengine/godot/releases/tag/4.0.4-stable) | [4.1.4](https://github.com/godotengine/godot/releases/tag/4.1.4-stable) | | | | |
113
+ | | [4.0.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.0.5) | [4.1.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.1.5) | | | | |
113
114
 
114
- You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning?ref=github_readme).
115
+ **\* Custom builds** - [maintained by us](https://github.com/shipth-is/godot-android-sdk-upgrade/) to support **Android SDK 35**.
115
116
 
117
+ You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning?ref=github_readme).
116
118
 
117
- ### Can I build my game as APK without a Google Play account?
119
+ ### Can I build my game as APK/AAB without a Google Play account?
118
120
 
119
121
  Yes.
120
122
 
@@ -292,7 +294,13 @@ If a build fails, rerun it for only the failing platform with the `--follow` fla
292
294
  shipthis game ship --platform android --follow
293
295
  ```
294
296
 
295
- You can also review logs at any time in the [dashboard](https://shipth.is/dashboard?ref=github_readme).
297
+ For additional debugging, you can include the `--verbose` flag - this enables detailed logging locally and on the build server, including running the Godot export with verbose output:
298
+
299
+ ```bash
300
+ shipthis game ship --platform ios --follow --verbose
301
+ ```
302
+
303
+ You can review logs at any time in the [dashboard](https://shipth.is/dashboard?ref=github_readme) under the "Jobs" tab.
296
304
 
297
305
  See the [Troubleshooting Guide](https://shipth.is/docs/troubleshooting?ref=github_readme) for common checks.
298
306
 
@@ -0,0 +1,22 @@
1
+ # Please confirm deletion
2
+
3
+ ## Are you sure you want to delete this Android KeyStore?
4
+
5
+ <% if (immediate) { %>
6
+ - This action **will delete the credential from ShipThis immediately and cannot be undone**.
7
+ <% } else { %>
8
+ - This action **will delete the credential from ShipThis in the next 24 hours and cannot be undone**.
9
+ - To delete the credential immediately, rerun the command with the `--immediate` flag.
10
+ <% } %>
11
+
12
+ ## Export your credential (optional but recommended)
13
+
14
+ If you haven't already done so, you can export your credential to a local file for safekeeping before deleting it. You can do this by running the following command:
15
+
16
+ ```bash
17
+ <%= exportCommand %>
18
+ ```
19
+
20
+ ## Confirm deletion
21
+
22
+ Please type **<%= confirmString %>** to confirm, or rerun the command with the `--iAmSure` flag.
@@ -0,0 +1,24 @@
1
+ # Please confirm deletion
2
+
3
+ ## Are you sure you want to delete this Android Service Account API Key?
4
+
5
+ <% if (immediate) { %>
6
+ - This action **will delete the credential from ShipThis immediately and cannot be undone**.
7
+ <% } else { %>
8
+ - This action **will delete the credential from ShipThis in the next 24 hours and cannot be undone**.
9
+ - To delete the credential immediately, rerun the command with the `--immediate` flag.
10
+ <% } %>
11
+
12
+ **Note: this will NOT delete the Service Account in Google Cloud Console. You will need to do that manually if you wish to fully delete the Service Account.**
13
+
14
+ ## Export your credential (optional but recommended)
15
+
16
+ If you haven't already done so, you can export your credential to a local file for safekeeping before deleting it. You can do this by running the following command:
17
+
18
+ ```bash
19
+ <%= exportCommand %>
20
+ ```
21
+
22
+ ## Confirm deletion
23
+
24
+ Please type **<%= confirmString %>** to confirm, or rerun the command with the `--iAmSure` flag.
@@ -0,0 +1,29 @@
1
+ # Please confirm deletion
2
+
3
+ ## Are you sure you want to delete this <%= credentialType %>?
4
+
5
+ <% if (immediate) { %>
6
+ - This action **will delete the credential from ShipThis immediately and cannot be undone**.
7
+ <% } else { %>
8
+ - This action **will delete the credential from ShipThis in the next 24 hours and cannot be undone**.
9
+ - To delete the credential immediately, rerun the command with the `--immediate` flag.
10
+ <% } %>
11
+ <% if (revokeInApple) { %>
12
+ - This action **will also revoke the credential in Apple and cannot be undone**.
13
+ <% } else { %>
14
+ - This action will **NOT** revoke the credential in Apple.
15
+ - To also revoke the credential in Apple, rerun the command with the `--revokeInApple` flag.
16
+ <% } %>
17
+
18
+ ## Export your credential (optional but recommended)
19
+
20
+ If you haven't already done so, you can export your credential to a local file for safekeeping before deleting it. You can do this by running the following command:
21
+
22
+ ```bash
23
+ <%= exportCommand %>
24
+ ```
25
+
26
+ ## Confirm deletion
27
+
28
+ Please type **<%= confirmString %>** to confirm, or rerun the command with the `--iAmSure` flag.
29
+
@@ -11,13 +11,13 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import './index-BtPf4vzY.js';
14
+ import './index-CmuXyPed.js';
15
15
  import '@oclif/core';
16
16
  import '@tanstack/react-query';
17
17
  import 'react';
18
18
  import 'crypto-js';
19
19
  import 'uuid';
20
- import { u as useAppleApp } from './useAppleApp-BKPntZPm.js';
20
+ import { u as useAppleApp } from './useAppleApp-taaewPSf.js';
21
21
  import 'fast-glob';
22
22
  import 'yazl';
23
23
  import 'socket.io-client';
@@ -30,7 +30,7 @@ import 'open';
30
30
  import 'marked';
31
31
  import 'marked-terminal';
32
32
  import 'qrcode';
33
- import { u as useAppleBundleId } from './useAppleBundleId-DvQKEEy4.js';
33
+ import { u as useAppleBundleId } from './useAppleBundleId-BeGViMe7.js';
34
34
 
35
35
  const AppleAppDetails = (props) => {
36
36
  const { data, isLoading } = useAppleApp(props);
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { QueryClientProvider } from '@tanstack/react-query';
3
3
  import { useScreenSize } from 'fullscreen-ink';
4
4
  import { Box } from 'ink';
5
- import { Y as queryClient, Z as CommandProvider } from './index-BtPf4vzY.js';
5
+ import { X as queryClient, Y as CommandProvider } from './index-CmuXyPed.js';
6
6
  import 'axios';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { _ as GameProvider } from './index-BtPf4vzY.js';
3
- import { C as Command } from './Command-DhAVAdiI.js';
2
+ import { Z as GameProvider } from './index-CmuXyPed.js';
3
+ import { C as Command } from './Command-CHh8RDXK.js';
4
4
 
5
5
  const CommandGame = ({ children, command }) => /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
6
 
@@ -3,7 +3,7 @@ import { useQueryClient } from '@tanstack/react-query';
3
3
  import axios from 'axios';
4
4
  import { Box } from 'ink';
5
5
  import { useContext } from 'react';
6
- import { R as GameContext, t as getAuthedHeaders, s as API_URL, a1 as cacheKeys } from './index-BtPf4vzY.js';
6
+ import { R as GameContext, t as getAuthedHeaders, s as API_URL, a0 as cacheKeys } from './index-CmuXyPed.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:fs';
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Text, Box } from 'ink';
3
3
  import { useState, useEffect, useContext } from 'react';
4
- import { b as getShortUUID, c as getShortDate, P as Platform, N as makeHumanReadable, O as getProject, Q as getProjectPlatformProgress, R as GameContext, S as CommandContext } from './index-BtPf4vzY.js';
4
+ import { g as getShortUUID, f as getShortDate, P as Platform, N as makeHumanReadable, O as getProject, Q as getProjectPlatformProgress, R as GameContext, S as CommandContext } from './index-CmuXyPed.js';
5
5
  import 'ink-spinner';
6
6
  import '@tanstack/react-query';
7
7
  import 'axios';
@@ -11,7 +11,7 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import { Y as queryClient, a1 as cacheKeys, P as Platform, C as CredentialsType, R as GameContext } from './index-BtPf4vzY.js';
14
+ import { X as queryClient, a0 as cacheKeys, P as Platform, C as CredentialsType, R as GameContext } from './index-CmuXyPed.js';
15
15
  import '@oclif/core';
16
16
  import { useMutation } from '@tanstack/react-query';
17
17
  import 'crypto-js';
@@ -27,7 +27,7 @@ import '@inkjs/ui';
27
27
  import 'marked';
28
28
  import 'marked-terminal';
29
29
  import 'qrcode';
30
- import { i as importCredential } from './import-D-EL9sQJ.js';
30
+ import { i as importCredential } from './import-DGCqCAcC.js';
31
31
 
32
32
  async function importKeystore({ log = () => {
33
33
  }, ...opt }) {
@@ -7,7 +7,7 @@ import { useState, useRef, useEffect } from 'react';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
9
9
  import 'uuid';
10
- import { a1 as cacheKeys, t as getAuthedHeaders, s as API_URL, X as castArrayObjectDates, L as JobStatus, ay as useJob, az as castJobDates, aw as castObjectDates, M as getStageColor, aA as getMessageColor, aB as getShortTime } from './index-BtPf4vzY.js';
10
+ import { a0 as cacheKeys, t as getAuthedHeaders, s as API_URL, V as castArrayObjectDates, L as JobStatus, ay as useJob, az as castJobDates, aw as castObjectDates, M as getStageColor, aA as getMessageColor, aB as getShortTime } from './index-CmuXyPed.js';
11
11
  import 'luxon';
12
12
  import 'fast-glob';
13
13
  import 'yazl';
@@ -20,7 +20,7 @@ import 'readline-sync';
20
20
  import 'isomorphic-git';
21
21
  import '@oclif/core';
22
22
  import 'fullscreen-ink';
23
- import { u as useWebSocket } from './useWebSocket-CIeyHqxG.js';
23
+ import { u as useWebSocket } from './useWebSocket-BVfn36be.js';
24
24
  import { T as Title } from './Title-BCQtayg6.js';
25
25
  import stringLength from 'string-length';
26
26
  import stripAnsi from 'strip-ansi';
@@ -4,7 +4,7 @@ import axios from 'axios';
4
4
  import fg from 'fast-glob';
5
5
  import { v4 } from 'uuid';
6
6
  import { ZipFile } from 'yazl';
7
- import { Y as queryClient, a1 as cacheKeys, z as DEFAULT_SHIPPED_FILES_GLOBS, E as DEFAULT_IGNORED_FILES_GLOBS, ao as getNewUploadTicket, ap as getFileHash, aq as startJobsFromUpload, ar as getPlatformName } from './index-BtPf4vzY.js';
7
+ import { X as queryClient, a0 as cacheKeys, z as DEFAULT_SHIPPED_FILES_GLOBS, E as DEFAULT_IGNORED_FILES_GLOBS, am as getNewUploadTicket, an as getFileHash, ao as startJobsFromUpload, ap as getPlatformName } from './index-CmuXyPed.js';
8
8
  import { g as getCWDGitInfo } from './git-BpsfNFZ_.js';
9
9
  import { jsx, Fragment } from 'react/jsx-runtime';
10
10
  import 'ink';
@@ -13,7 +13,7 @@ import 'react';
13
13
  import 'crypto-js';
14
14
  import 'luxon';
15
15
  import 'socket.io-client';
16
- import { u as useJobWatching } from './JobLogTail-RTNIiAUk.js';
16
+ import { u as useJobWatching } from './JobLogTail-CYdceTKL.js';
17
17
  import 'fullscreen-ink';
18
18
  import 'string-length';
19
19
  import 'strip-ansi';
@@ -3,7 +3,7 @@ import { Box, Text } from 'ink';
3
3
  import Spinner from 'ink-spinner';
4
4
  import { DateTime } from 'luxon';
5
5
  import { useState, useEffect } from 'react';
6
- import { L as JobStatus, I as getJobSummary, M as getStageColor, J as getJobStatusColor } from './index-BtPf4vzY.js';
6
+ import { L as JobStatus, I as getJobSummary, M as getStageColor, J as getJobStatusColor } from './index-CmuXyPed.js';
7
7
  import '@tanstack/react-query';
8
8
  import 'axios';
9
9
  import 'node:fs';
@@ -12,7 +12,7 @@ import 'uuid';
12
12
  import 'fast-glob';
13
13
  import 'yazl';
14
14
  import 'socket.io-client';
15
- import { u as useJobWatching } from './JobLogTail-RTNIiAUk.js';
15
+ import { u as useJobWatching } from './JobLogTail-CYdceTKL.js';
16
16
  import 'fullscreen-ink';
17
17
  import { a as StatusRow, b as StatusRowLabel } from './StatusTable-DzRWcMr4.js';
18
18
  import { T as Title } from './Title-BCQtayg6.js';
@@ -10,13 +10,13 @@ import 'readline-sync';
10
10
  import 'luxon';
11
11
  import 'axios';
12
12
  import 'isomorphic-git';
13
- import './index-BtPf4vzY.js';
13
+ import './index-CmuXyPed.js';
14
14
  import '@oclif/core';
15
15
  import '@tanstack/react-query';
16
16
  import 'react';
17
17
  import 'crypto-js';
18
18
  import 'uuid';
19
- import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-BjsS28hP.js';
19
+ import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-Cm50WMZU.js';
20
20
  import 'fast-glob';
21
21
  import 'yazl';
22
22
  import 'socket.io-client';
@@ -27,11 +27,13 @@ import { T as Title } from './Title-BCQtayg6.js';
27
27
  const ProjectCredentialsTable = ({ credentialTypeName, queryProps, ...boxProps }) => {
28
28
  const { data, isLoading } = useProjectCredentials(queryProps);
29
29
  const hasActive = data?.data.some((credential) => credential.isActive);
30
+ const hasInactive = data?.data.some((credential) => !credential.isActive);
30
31
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, ...boxProps, children: [
31
32
  /* @__PURE__ */ jsx(Title, { children: `${credentialTypeName}s in your ShipThis account` }),
32
33
  /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginBottom: 1, marginLeft: 2, children: /* @__PURE__ */ jsx(Text, { children: hasActive ? `You have an active ${credentialTypeName} in your ShipThis account.` : `You DO NOT have an active ${credentialTypeName} which ShipThis can use.` }) }),
33
34
  isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
34
- data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getProjectCredentialSummary) })
35
+ data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getProjectCredentialSummary) }),
36
+ hasInactive && /* @__PURE__ */ jsx(Text, { children: "Inactive credentials are automatically removed from storage after 24 hours." })
35
37
  ] });
36
38
  };
37
39
 
@@ -10,7 +10,7 @@ import 'readline-sync';
10
10
  import 'luxon';
11
11
  import axios from 'axios';
12
12
  import 'isomorphic-git';
13
- import { a1 as cacheKeys, b as getShortUUID, c as getShortDate, t as getAuthedHeaders, s as API_URL, X as castArrayObjectDates } from './index-BtPf4vzY.js';
13
+ import { a0 as cacheKeys, g as getShortUUID, f as getShortDate, t as getAuthedHeaders, s as API_URL, V as castArrayObjectDates } from './index-CmuXyPed.js';
14
14
  import '@oclif/core';
15
15
  import { useQuery } from '@tanstack/react-query';
16
16
  import 'react';
@@ -68,11 +68,13 @@ const useUserCredentials = ({
68
68
  const UserCredentialsTable = ({ credentialTypeName, queryProps, ...boxProps }) => {
69
69
  const { data, isLoading } = useUserCredentials(queryProps);
70
70
  const hasActive = data?.data.some((credential) => credential.isActive);
71
+ const hasInactive = data?.data.some((credential) => !credential.isActive);
71
72
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, ...boxProps, children: [
72
73
  /* @__PURE__ */ jsx(Title, { children: `${credentialTypeName}s in your ShipThis account` }),
73
74
  /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginBottom: 1, marginLeft: 2, children: /* @__PURE__ */ jsx(Text, { children: hasActive ? `You have an active ${credentialTypeName} in your ShipThis account.` : `You DO NOT have an active ${credentialTypeName} which ShipThis can use.` }) }),
74
75
  isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
75
- data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getUserCredentialSummary) })
76
+ data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getUserCredentialSummary) }),
77
+ hasInactive && /* @__PURE__ */ jsx(Text, { children: "Inactive credentials are automatically removed from storage after 24 hours." })
76
78
  ] });
77
79
  };
78
80
 
@@ -1,4 +1,4 @@
1
- import { B as BaseAuthenticatedCommand } from './index-BtPf4vzY.js';
1
+ import { B as BaseAuthenticatedCommand } from './index-CmuXyPed.js';
2
2
 
3
3
  class BaseAppleCommand extends BaseAuthenticatedCommand {
4
4
  async init() {
@@ -1,4 +1,4 @@
1
- import { d as BaseGameCommand, a2 as getGoogleStatus, f as generatePackageName, a3 as getGodotAndroidPackageName, e as getInput } from './index-BtPf4vzY.js';
1
+ import { h as BaseGameCommand, a2 as getGoogleStatus, i as generatePackageName, a3 as getGodotAndroidPackageName, c as getInput } from './index-CmuXyPed.js';
2
2
 
3
3
  class BaseGameAndroidCommand extends BaseGameCommand {
4
4
  async checkGoogleAuth(waitForAuth = false) {
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
4
  import { v4 } from 'uuid';
5
- import { B as BaseAuthenticatedCommand, b as getShortUUID, af as createAPIKey, n as getRenderedMarkdown, c as getShortDate } from '../../index-BtPf4vzY.js';
5
+ import { B as BaseAuthenticatedCommand, g as getShortUUID, af as createAPIKey, b as getRenderedMarkdown, f as getShortDate } from '../../index-CmuXyPed.js';
6
6
  import 'ink-spinner';
7
7
  import 'react';
8
8
  import '@tanstack/react-query';
@@ -19,9 +19,10 @@ import 'open';
19
19
  import '@inkjs/ui';
20
20
  import 'qrcode';
21
21
  import { R as RunWithSpinner } from '../../RunWithSpinner-DucRnFp6.js';
22
- import { C as Command } from '../../Command-DhAVAdiI.js';
22
+ import { C as Command } from '../../Command-CHh8RDXK.js';
23
23
  import 'crypto-js';
24
24
  import 'node:path';
25
+ import 'chalk';
25
26
  import '@expo/apple-utils/build/index.js';
26
27
  import 'node:crypto';
27
28
  import 'node:readline';
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render, Box, Text } from 'ink';
4
- import { B as BaseAuthenticatedCommand, ae as getAPIKeys, c as getShortDate, b as getShortUUID } from '../../index-BtPf4vzY.js';
4
+ import { B as BaseAuthenticatedCommand, ae as getAPIKeys, f as getShortDate, g as getShortUUID } from '../../index-CmuXyPed.js';
5
5
  import 'ink-spinner';
6
6
  import { T as Table } from '../../Table-FaNgpyeq.js';
7
7
  import 'react';
@@ -22,8 +22,9 @@ import 'node:path';
22
22
  import 'marked';
23
23
  import 'marked-terminal';
24
24
  import 'qrcode';
25
- import { C as Command } from '../../Command-DhAVAdiI.js';
25
+ import { C as Command } from '../../Command-CHh8RDXK.js';
26
26
  import 'crypto-js';
27
+ import 'chalk';
27
28
  import '@expo/apple-utils/build/index.js';
28
29
  import 'node:crypto';
29
30
  import 'node:readline';
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Args, Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { B as BaseAuthenticatedCommand, ag as revokeAPIKey, b as getShortUUID } from '../../index-BtPf4vzY.js';
4
+ import { B as BaseAuthenticatedCommand, ag as revokeAPIKey, g as getShortUUID } from '../../index-CmuXyPed.js';
5
5
  import 'ink-spinner';
6
6
  import 'react';
7
7
  import '@tanstack/react-query';
@@ -22,8 +22,9 @@ import 'marked';
22
22
  import 'marked-terminal';
23
23
  import 'qrcode';
24
24
  import { R as RunWithSpinner } from '../../RunWithSpinner-DucRnFp6.js';
25
- import { C as Command } from '../../Command-DhAVAdiI.js';
25
+ import { C as Command } from '../../Command-CHh8RDXK.js';
26
26
  import 'crypto-js';
27
+ import 'chalk';
27
28
  import '@expo/apple-utils/build/index.js';
28
29
  import 'node:crypto';
29
30
  import 'node:readline';
@@ -1,8 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { g as getUserCredentials } from '../../../index-1H48f5j2.js';
5
- import { P as Platform, C as CredentialsType, A as ApiKey, U as UserRole, a as ApiKeyType } from '../../../index-BtPf4vzY.js';
4
+ import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
5
+ import { P as Platform, C as CredentialsType, A as ApiKey, U as UserRole, a as ApiKeyType } from '../../../index-CmuXyPed.js';
6
6
  import 'ink-spinner';
7
7
  import 'node:crypto';
8
8
  import 'node:fs';
@@ -29,9 +29,10 @@ import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
32
- import { C as Command } from '../../../Command-DhAVAdiI.js';
33
- import { B as BaseAppleCommand } from '../../../baseAppleCommand-cnLvBz95.js';
34
- import { u as uploadUserCredentials } from '../../../upload-Dm38PqhN.js';
32
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
33
+ import { B as BaseAppleCommand } from '../../../baseAppleCommand-CQ5dOna7.js';
34
+ import { u as uploadUserCredentials } from '../../../upload-D4x4yCia.js';
35
+ import 'chalk';
35
36
  import '@expo/apple-utils/build/index.js';
36
37
  import 'deepmerge';
37
38
  import 'ini';
@@ -51,7 +52,7 @@ class AppleApiKeyCreate extends BaseAppleCommand {
51
52
  const { force } = flags;
52
53
  const userCredentials = await getUserCredentials();
53
54
  const userAppleApiKeyCredentials = userCredentials.filter(
54
- (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY
55
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY && cred.isActive
55
56
  );
56
57
  if (userAppleApiKeyCredentials.length > 0 && !force) {
57
58
  this.error("An App Store Connect API already exists. Use --force to overwrite it.");
@@ -0,0 +1,118 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { P as Platform, C as CredentialsType, A as ApiKey, g as getShortUUID, b as getRenderedMarkdown, c as getInput } from '../../../index-CmuXyPed.js';
3
+ import 'node:fs';
4
+ import 'axios';
5
+ import 'crypto-js';
6
+ import 'uuid';
7
+ import 'luxon';
8
+ import { g as getUserCredentials, d as deleteUserCredential } from '../../../index-CNsmEDXi.js';
9
+ import 'react/jsx-runtime';
10
+ import '@inkjs/ui';
11
+ import 'ink';
12
+ import 'ink-spinner';
13
+ import 'react';
14
+ import '@tanstack/react-query';
15
+ import 'fast-glob';
16
+ import 'yazl';
17
+ import 'socket.io-client';
18
+ import 'fullscreen-ink';
19
+ import 'string-length';
20
+ import 'strip-ansi';
21
+ import 'open';
22
+ import 'qrcode';
23
+ import { B as BaseAppleCommand } from '../../../baseAppleCommand-CQ5dOna7.js';
24
+ import 'node:path';
25
+ import 'chalk';
26
+ import '@expo/apple-utils/build/index.js';
27
+ import 'node:crypto';
28
+ import 'node:readline';
29
+ import 'node:url';
30
+ import 'readline-sync';
31
+ import 'isomorphic-git';
32
+ import 'deepmerge';
33
+ import 'ini';
34
+ import 'fs';
35
+ import 'path';
36
+ import 'marked';
37
+ import 'marked-terminal';
38
+
39
+ class AppleApiKeyDelete extends BaseAppleCommand {
40
+ static args = {};
41
+ static description = "Delete an Apple API Key from ShipThis and optionally from Apple";
42
+ static examples = [
43
+ "<%= config.bin %> <%= command.id %>",
44
+ "<%= config.bin %> <%= command.id %> --immediate --revokeInApple --iAmSure"
45
+ ];
46
+ static flags = {
47
+ immediate: Flags.boolean({
48
+ char: "i",
49
+ description: "Remove from storage immediately (rather than waiting for automatic cleanup - cannot be undone)",
50
+ required: false
51
+ }),
52
+ iAmSure: Flags.boolean({
53
+ char: "y",
54
+ description: "I am sure I want to do this - do not prompt me",
55
+ required: false
56
+ }),
57
+ revokeInApple: Flags.boolean({
58
+ char: "a",
59
+ description: "Also revoke the API Key in Apple (cannot be undone)",
60
+ required: false
61
+ })
62
+ };
63
+ async run() {
64
+ const { flags } = await this.parse(AppleApiKeyDelete);
65
+ const { immediate, iAmSure, revokeInApple } = flags;
66
+ const userCredentials = await getUserCredentials();
67
+ const userKeys = userCredentials.filter(
68
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY && cred.isActive
69
+ );
70
+ if (userKeys.length === 0) {
71
+ this.error("No App Store Connect API Key found which can be deleted.");
72
+ }
73
+ const [key] = userKeys;
74
+ let appleKey = null;
75
+ if (revokeInApple) {
76
+ const authState = await this.refreshAppleAuthState();
77
+ const ctx = authState.context;
78
+ appleKey = await ApiKey.infoAsync(ctx, { id: key.serialNumber });
79
+ if (!appleKey?.id) {
80
+ this.error("The App Store Connect API Key was not found in Apple, so cannot be revoked there.");
81
+ }
82
+ }
83
+ const getAreYouSure = async () => {
84
+ if (iAmSure) return true;
85
+ const confirmString = getShortUUID(key.id);
86
+ const prompt = getRenderedMarkdown({
87
+ filename: "confirm-delete-apple-credential.md.ejs",
88
+ templateVars: {
89
+ confirmString,
90
+ credentialType: "App Store Connect API Key",
91
+ exportCommand: `shipthis apple apiKey export appleApiKey.zip`,
92
+ immediate,
93
+ revokeInApple
94
+ }
95
+ });
96
+ this.log(prompt);
97
+ const input = await getInput("");
98
+ return input.trim().toLowerCase() === confirmString.toLowerCase();
99
+ };
100
+ const areYouSure = await getAreYouSure();
101
+ if (!areYouSure) {
102
+ this.log("Aborting - not deleting the API Key");
103
+ this.exit(0);
104
+ }
105
+ await deleteUserCredential({
106
+ credentialId: key.id,
107
+ isImmediate: immediate
108
+ });
109
+ this.log("The API Key has been deleted from ShipThis.");
110
+ if (revokeInApple && appleKey?.id) {
111
+ await appleKey.revokeAsync();
112
+ this.log("The API Key has been revoked in Apple.");
113
+ }
114
+ await this.config.runCommand(`apple:apiKey:status`, [!revokeInApple ? "--noAppleAuth" : ""].filter(Boolean));
115
+ }
116
+ }
117
+
118
+ export { AppleApiKeyDelete as default };
@@ -2,8 +2,8 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import * as fs from 'node:fs';
3
3
  import { Args, Flags } from '@oclif/core';
4
4
  import { render } from 'ink';
5
- import { g as getUserCredentials } from '../../../index-1H48f5j2.js';
6
- import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-BtPf4vzY.js';
5
+ import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
6
+ import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-CmuXyPed.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:path';
@@ -29,8 +29,9 @@ import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
32
- import { C as Command } from '../../../Command-DhAVAdiI.js';
33
- import { e as exportCredential } from '../../../export-Bd552LBe.js';
32
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
33
+ import { e as exportCredential } from '../../../export-DujIwhJw.js';
34
+ import 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'deepmerge';
36
37
  import 'ini';
@@ -56,7 +57,7 @@ class AppleApiKeyExport extends BaseAuthenticatedCommand {
56
57
  }
57
58
  const userCredentials = await getUserCredentials();
58
59
  const userAppleApiKeyCredentials = userCredentials.filter(
59
- (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY
60
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY && cred.isActive
60
61
  );
61
62
  if (userAppleApiKeyCredentials.length === 0) {
62
63
  this.error("No App Store Connect API Key found which can be exported.");
@@ -2,8 +2,8 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import * as fs from 'node:fs';
3
3
  import { Args, Flags } from '@oclif/core';
4
4
  import { render } from 'ink';
5
- import { g as getUserCredentials } from '../../../index-1H48f5j2.js';
6
- import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-BtPf4vzY.js';
5
+ import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
6
+ import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-CmuXyPed.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:path';
@@ -29,8 +29,9 @@ import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
32
- import { C as Command } from '../../../Command-DhAVAdiI.js';
33
- import { i as importCredential } from '../../../import-D-EL9sQJ.js';
32
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
33
+ import { i as importCredential } from '../../../import-DGCqCAcC.js';
34
+ import 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'deepmerge';
36
37
  import 'ini';
@@ -59,7 +60,7 @@ class AppleApiKeyImport extends BaseAuthenticatedCommand {
59
60
  }
60
61
  const userCredentials = await getUserCredentials();
61
62
  const userAppleApiKeyCredentials = userCredentials.filter(
62
- (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY
63
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.KEY && cred.isActive
63
64
  );
64
65
  if (userAppleApiKeyCredentials.length > 0 && !force) {
65
66
  this.error("An App Store Connect API Key already exists. Use --force to overwrite it.");