shipthis 0.1.35 → 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 (108) hide show
  1. package/README.md +231 -80
  2. package/assets/markdown/agreement-update.md.ejs +12 -0
  3. package/assets/markdown/confirm-delete-android-keystore.md.ejs +22 -0
  4. package/assets/markdown/confirm-delete-android-serviceaccountkey.md.ejs +24 -0
  5. package/assets/markdown/confirm-delete-apple-credential.md.ejs +29 -0
  6. package/dist/{AppleBundleIdDetails-N_j1wv6f.js → AppleBundleIdDetails-KMzyex1H.js} +3 -5
  7. package/dist/{Command-DN1j3tjt.js → Command-CHh8RDXK.js} +1 -2
  8. package/dist/{CommandGame-D2NqytWc.js → CommandGame-Rvmsa7b0.js} +2 -2
  9. package/dist/{Create-BRdv5jXQ.js → Create-DInZ_pw-.js} +1 -4
  10. package/dist/{GameStatus-joyHPy0f.js → GameStatus-D7ID10tS.js} +1 -4
  11. package/dist/{Import-BNMHsJoM.js → Import-BmO8EYKj.js} +2 -5
  12. package/dist/{JobLogTail-D35FO5v-.js → JobLogTail-CYdceTKL.js} +2 -5
  13. package/dist/{JobProgress-D-9KESaA.js → JobProgress-DBCYbWrO.js} +16 -18
  14. package/dist/{JobStatusTable-DIJ_h-gi.js → JobStatusTable-DhnhY1_i.js} +2 -4
  15. package/dist/{ProjectCredentialsTable-BMKgv99h.js → ProjectCredentialsTable-BDYVYqAq.js} +5 -3
  16. package/dist/{UserCredentialsTable-CUrTDzTK.js → UserCredentialsTable-cDPvjF-F.js} +4 -4
  17. package/dist/{baseAppleCommand-Cs9a52e5.js → baseAppleCommand-CQ5dOna7.js} +1 -1
  18. package/dist/{baseGameAndroidCommand-BCB1SMCf.js → baseGameAndroidCommand-D4ryZS6A.js} +1 -2
  19. package/dist/commands/apiKey/create.js +3 -6
  20. package/dist/commands/apiKey/list.js +3 -6
  21. package/dist/commands/apiKey/revoke.js +3 -6
  22. package/dist/commands/apple/apiKey/create.js +7 -10
  23. package/dist/commands/apple/apiKey/delete.js +118 -0
  24. package/dist/commands/apple/apiKey/export.js +6 -9
  25. package/dist/commands/apple/apiKey/import.js +6 -9
  26. package/dist/commands/apple/apiKey/status.js +4 -7
  27. package/dist/commands/apple/certificate/create.js +7 -10
  28. package/dist/commands/apple/certificate/delete.js +127 -0
  29. package/dist/commands/apple/certificate/export.js +6 -9
  30. package/dist/commands/apple/certificate/import.js +6 -9
  31. package/dist/commands/apple/certificate/status.js +4 -7
  32. package/dist/commands/apple/login.js +23 -4
  33. package/dist/commands/apple/status.js +4 -7
  34. package/dist/commands/dashboard.js +12 -1
  35. package/dist/commands/game/android/apiKey/connect.js +8 -11
  36. package/dist/commands/game/android/apiKey/create.js +10 -13
  37. package/dist/commands/game/android/apiKey/delete.js +100 -0
  38. package/dist/commands/game/android/apiKey/export.js +6 -9
  39. package/dist/commands/game/android/apiKey/import.js +6 -9
  40. package/dist/commands/game/android/apiKey/invite.js +14 -4
  41. package/dist/commands/game/android/apiKey/policy.js +3 -6
  42. package/dist/commands/game/android/apiKey/status.js +6 -9
  43. package/dist/commands/game/android/keyStore/create.js +7 -10
  44. package/dist/commands/game/android/keyStore/delete.js +100 -0
  45. package/dist/commands/game/android/keyStore/export.js +5 -8
  46. package/dist/commands/game/android/keyStore/import.js +8 -11
  47. package/dist/commands/game/android/keyStore/status.js +7 -10
  48. package/dist/commands/game/android/status.js +13 -1
  49. package/dist/commands/game/build/download.js +3 -6
  50. package/dist/commands/game/build/list.js +4 -7
  51. package/dist/commands/game/create.js +13 -2
  52. package/dist/commands/game/details.js +4 -7
  53. package/dist/commands/game/export.js +13 -1
  54. package/dist/commands/game/ios/app/addTester.js +4 -7
  55. package/dist/commands/game/ios/app/create.js +3 -6
  56. package/dist/commands/game/ios/app/status.js +6 -9
  57. package/dist/commands/game/ios/app/sync.js +4 -7
  58. package/dist/commands/game/ios/profile/create.js +6 -9
  59. package/dist/commands/game/ios/profile/delete.js +123 -0
  60. package/dist/commands/game/ios/profile/export.js +5 -8
  61. package/dist/commands/game/ios/profile/import.js +5 -8
  62. package/dist/commands/game/ios/profile/status.js +8 -51
  63. package/dist/commands/game/ios/status.js +10 -13
  64. package/dist/commands/game/ios/wizard.js +2 -6
  65. package/dist/commands/game/job/list.js +3 -6
  66. package/dist/commands/game/job/status.js +8 -11
  67. package/dist/commands/game/list.js +3 -6
  68. package/dist/commands/game/ship.js +17 -14
  69. package/dist/commands/game/status.js +7 -10
  70. package/dist/commands/game/wizard.js +14 -17
  71. package/dist/commands/internal/fastlane.js +13 -1
  72. package/dist/commands/internal/readme.js +13 -4
  73. package/dist/commands/login.js +27 -4
  74. package/dist/commands/status.js +6 -8
  75. package/dist/{export-DFCZKNQk.js → export-DujIwhJw.js} +1 -1
  76. package/dist/{import-BpGyif-m.js → import-DGCqCAcC.js} +1 -1
  77. package/dist/{index-DlE_SPt3.js → index-9LxGafAo.js} +3 -5
  78. package/dist/{index-BTXEUd8W.js → index-BPh_qt7t.js} +4 -6
  79. package/dist/index-CNsmEDXi.js +48 -0
  80. package/dist/index-CmuXyPed.js +1905 -0
  81. package/dist/{upload-D19OQsbn.js → upload-D4x4yCia.js} +1 -1
  82. package/dist/{useAppleApp-BZc_cNa-.js → useAppleApp-taaewPSf.js} +1 -1
  83. package/dist/{useAppleBundleId-DvMXAvWD.js → useAppleBundleId-BeGViMe7.js} +1 -1
  84. package/dist/useAppleProfiles-1TtO0aO6.js +63 -0
  85. package/dist/{useGoogleStatus-Cx_QIsXa.js → useGoogleStatus-CSsxEvX7.js} +1 -2
  86. package/dist/{useProjectCredentials-DxdwJCfU.js → useProjectCredentials-Cm50WMZU.js} +1 -3
  87. package/dist/{useWebSocket-cM5yOcDv.js → useWebSocket-BVfn36be.js} +1 -1
  88. package/docs/apple/apiKey/delete.md +25 -0
  89. package/docs/apple/apiKey.md +26 -0
  90. package/docs/apple/certificate/delete.md +25 -0
  91. package/docs/apple/certificate.md +26 -0
  92. package/docs/assets/st.png +0 -0
  93. package/docs/game/android/apiKey/delete.md +25 -0
  94. package/docs/game/android/apiKey.md +26 -0
  95. package/docs/game/android/keyStore/delete.md +25 -0
  96. package/docs/game/android/keyStore.md +26 -0
  97. package/docs/game/ios/profile/delete.md +26 -0
  98. package/docs/game/ios/profile.md +27 -0
  99. package/docs/game/ship.md +4 -4
  100. package/docs/login.md +6 -2
  101. package/docs/status.md +1 -1
  102. package/package.json +13 -2
  103. package/dist/ejs-DirFZbza.js +0 -716
  104. package/dist/index-BwnzoldS.js +0 -784
  105. package/dist/index-CJWMt1s-.js +0 -153
  106. package/dist/index-hoHfGrjg.js +0 -221
  107. package/dist/index-izrACZbC.js +0 -24
  108. package/dist/useAndroidServiceAccountTestResult-CwKeW0ED.js +0 -50
@@ -1,9 +1,9 @@
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-izrACZbC.js';
4
+ import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
5
5
  import forge from 'node-forge';
6
- import { l as CertificateType, k as Certificate, P as Platform, C as CredentialsType } from '../../../index-BwnzoldS.js';
6
+ import { p as CertificateType, d as Certificate, P as Platform, C as CredentialsType } from '../../../index-CmuXyPed.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:fs';
@@ -26,22 +26,19 @@ import 'string-length';
26
26
  import 'strip-ansi';
27
27
  import 'open';
28
28
  import '@inkjs/ui';
29
- import '../../../ejs-DirFZbza.js';
30
29
  import 'marked';
31
30
  import 'marked-terminal';
32
31
  import 'qrcode';
33
32
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
34
- import '../../../index-hoHfGrjg.js';
35
- import { C as Command } from '../../../Command-DN1j3tjt.js';
36
- import { B as BaseAppleCommand } from '../../../baseAppleCommand-Cs9a52e5.js';
37
- import { u as uploadUserCredentials } from '../../../upload-D19OQsbn.js';
33
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
34
+ import { B as BaseAppleCommand } from '../../../baseAppleCommand-CQ5dOna7.js';
35
+ import { u as uploadUserCredentials } from '../../../upload-D4x4yCia.js';
36
+ import 'chalk';
38
37
  import '@expo/apple-utils/build/index.js';
39
38
  import 'deepmerge';
40
39
  import 'ini';
41
40
  import 'fs';
42
41
  import 'path';
43
- import '../../../index-CJWMt1s-.js';
44
- import '../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
45
42
 
46
43
  function decodeCertificate(certificateContent) {
47
44
  const decodedContent = forge.util.decode64(certificateContent);
@@ -94,7 +91,7 @@ class AppleCertificateCreate extends BaseAppleCommand {
94
91
  const { force } = flags;
95
92
  const userCredentials = await getUserCredentials();
96
93
  const userAppleDistCredentials = userCredentials.filter(
97
- (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE
94
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE && cred.isActive
98
95
  );
99
96
  if (userAppleDistCredentials.length > 0 && !force) {
100
97
  this.error("An Apple Distribution Certificate already exists. Use --force to overwrite it.");
@@ -0,0 +1,127 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { P as Platform, C as CredentialsType, d as Certificate, 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 AppleCertificateDelete extends BaseAppleCommand {
40
+ static args = {};
41
+ static description = "Delete an iOS Distribution Certificate 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 Certificate in Apple (cannot be undone)",
60
+ required: false
61
+ })
62
+ };
63
+ async run() {
64
+ const { flags } = await this.parse(AppleCertificateDelete);
65
+ const { immediate, iAmSure, revokeInApple } = flags;
66
+ const userCredentials = await getUserCredentials();
67
+ const userCerts = userCredentials.filter(
68
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE && cred.isActive
69
+ );
70
+ if (userCerts.length === 0) {
71
+ this.error("No iOS Distribution Certificate found which can be deleted.");
72
+ }
73
+ const [cert] = userCerts;
74
+ let appleCert = null;
75
+ let authState = null;
76
+ let ctx = null;
77
+ if (revokeInApple) {
78
+ authState = await this.refreshAppleAuthState();
79
+ ctx = authState.context;
80
+ const appleCerts = await Certificate.getAsync(ctx, {
81
+ query: {
82
+ filter: {
83
+ serialNumber: cert.serialNumber
84
+ }
85
+ }
86
+ });
87
+ if (appleCerts.length !== 1) {
88
+ this.error("The iOS Distribution Certificate was not found in Apple, so cannot be revoked there.");
89
+ }
90
+ appleCert = appleCerts[0];
91
+ }
92
+ const getAreYouSure = async () => {
93
+ if (iAmSure) return true;
94
+ const confirmString = getShortUUID(cert.id);
95
+ const prompt = getRenderedMarkdown({
96
+ filename: "confirm-delete-apple-credential.md.ejs",
97
+ templateVars: {
98
+ confirmString,
99
+ credentialType: "iOS Distribution Certificate",
100
+ exportCommand: `shipthis apple certificate export cert.zip`,
101
+ immediate,
102
+ revokeInApple
103
+ }
104
+ });
105
+ this.log(prompt);
106
+ const input = await getInput("");
107
+ return input.trim().toLowerCase() === confirmString.toLowerCase();
108
+ };
109
+ const areYouSure = await getAreYouSure();
110
+ if (!areYouSure) {
111
+ this.log("Aborting - not deleting the iOS Distribution Certificate");
112
+ this.exit(0);
113
+ }
114
+ await deleteUserCredential({
115
+ credentialId: cert.id,
116
+ isImmediate: immediate
117
+ });
118
+ this.log("The iOS Distribution Certificate has been deleted from ShipThis.");
119
+ if (revokeInApple && appleCert?.id) {
120
+ Certificate.deleteAsync(ctx, { id: appleCert.id });
121
+ this.log("The iOS Distribution Certificate has been deleted in Apple.");
122
+ }
123
+ await this.config.runCommand(`apple:certificate:status`, [!revokeInApple ? "--noAppleAuth" : ""].filter(Boolean));
124
+ }
125
+ }
126
+
127
+ export { AppleCertificateDelete 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-izrACZbC.js';
6
- import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-BwnzoldS.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';
@@ -25,21 +25,18 @@ import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
- import '../../../ejs-DirFZbza.js';
29
28
  import 'marked';
30
29
  import 'marked-terminal';
31
30
  import 'qrcode';
32
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
33
- import '../../../index-hoHfGrjg.js';
34
- import { C as Command } from '../../../Command-DN1j3tjt.js';
35
- import { e as exportCredential } from '../../../export-DFCZKNQk.js';
32
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
33
+ import { e as exportCredential } from '../../../export-DujIwhJw.js';
34
+ import 'chalk';
36
35
  import '@expo/apple-utils/build/index.js';
37
36
  import 'deepmerge';
38
37
  import 'ini';
39
38
  import 'fs';
40
39
  import 'path';
41
- import '../../../index-CJWMt1s-.js';
42
- import '../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
43
40
 
44
41
  class AppleCertificateExport extends BaseAuthenticatedCommand {
45
42
  static args = {
@@ -60,7 +57,7 @@ class AppleCertificateExport extends BaseAuthenticatedCommand {
60
57
  }
61
58
  const userCredentials = await getUserCredentials();
62
59
  const userAppleDistCredentials = userCredentials.filter(
63
- (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE
60
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE && cred.isActive
64
61
  );
65
62
  if (userAppleDistCredentials.length === 0) {
66
63
  this.error("No Apple Distribution Certificate 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-izrACZbC.js';
6
- import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-BwnzoldS.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';
@@ -25,21 +25,18 @@ import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
- import '../../../ejs-DirFZbza.js';
29
28
  import 'marked';
30
29
  import 'marked-terminal';
31
30
  import 'qrcode';
32
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
33
- import '../../../index-hoHfGrjg.js';
34
- import { C as Command } from '../../../Command-DN1j3tjt.js';
35
- import { i as importCredential } from '../../../import-BpGyif-m.js';
32
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
33
+ import { i as importCredential } from '../../../import-DGCqCAcC.js';
34
+ import 'chalk';
36
35
  import '@expo/apple-utils/build/index.js';
37
36
  import 'deepmerge';
38
37
  import 'ini';
39
38
  import 'fs';
40
39
  import 'path';
41
- import '../../../index-CJWMt1s-.js';
42
- import '../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
43
40
 
44
41
  class AppleCertificateImport extends BaseAuthenticatedCommand {
45
42
  static args = {
@@ -63,7 +60,7 @@ class AppleCertificateImport extends BaseAuthenticatedCommand {
63
60
  }
64
61
  const userCredentials = await getUserCredentials();
65
62
  const userAppleDistCredentials = userCredentials.filter(
66
- (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE
63
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE && cred.isActive
67
64
  );
68
65
  if (userAppleDistCredentials.length > 0 && !force) {
69
66
  this.error("An Apple Distribution Certificate already exists. Use --force to overwrite it.");
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { Box, Text, render } from 'ink';
4
- import { b as getShortDate, k as Certificate, l as CertificateType, P as Platform, C as CredentialsType, B as BaseAuthenticatedCommand } from '../../../index-BwnzoldS.js';
4
+ import { g as getShortUUID, f as getShortDate, d as Certificate, p as CertificateType, P as Platform, C as CredentialsType, B as BaseAuthenticatedCommand } from '../../../index-CmuXyPed.js';
5
5
  import Spinner from 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -23,22 +23,19 @@ import 'fullscreen-ink';
23
23
  import 'string-length';
24
24
  import 'strip-ansi';
25
25
  import 'open';
26
- import { u as useUserCredentials, U as UserCredentialsTable } from '../../../UserCredentialsTable-CUrTDzTK.js';
26
+ import { u as useUserCredentials, U as UserCredentialsTable } from '../../../UserCredentialsTable-cDPvjF-F.js';
27
27
  import '@inkjs/ui';
28
- import '../../../ejs-DirFZbza.js';
29
28
  import 'marked';
30
29
  import 'marked-terminal';
31
30
  import 'qrcode';
32
- import '../../../index-hoHfGrjg.js';
33
- import { g as getShortUUID } from '../../../index-CJWMt1s-.js';
34
31
  import { T as Table } from '../../../Table-FaNgpyeq.js';
35
32
  import { T as Title } from '../../../Title-BCQtayg6.js';
36
33
  import { N as NextSteps } from '../../../NextSteps-DbJHmscQ.js';
37
- import { C as Command } from '../../../Command-DN1j3tjt.js';
34
+ import { C as Command } from '../../../Command-CHh8RDXK.js';
35
+ import 'chalk';
38
36
  import '@expo/apple-utils/build/index.js';
39
37
  import 'deepmerge';
40
38
  import 'ini';
41
- import '../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
42
39
  import 'fs';
43
40
  import 'path';
44
41
 
@@ -1,12 +1,12 @@
1
1
  import { Flags } from '@oclif/core';
2
- import { a3 as Auth, B as BaseAuthenticatedCommand } from '../../index-BwnzoldS.js';
3
- import { a as getInput, e as getMaskedInput } from '../../index-CJWMt1s-.js';
2
+ import { ak as Auth, B as BaseAuthenticatedCommand, c as getInput, al as getMaskedInput } from '../../index-CmuXyPed.js';
4
3
  import 'node:fs';
5
4
  import 'axios';
6
5
  import 'crypto-js';
7
6
  import 'uuid';
8
7
  import 'luxon';
9
8
  import 'node:path';
9
+ import 'chalk';
10
10
  import '@expo/apple-utils/build/index.js';
11
11
  import 'node:crypto';
12
12
  import 'node:readline';
@@ -22,6 +22,17 @@ import 'yazl';
22
22
  import 'socket.io-client';
23
23
  import 'fullscreen-ink';
24
24
  import 'ink';
25
+ import 'react/jsx-runtime';
26
+ import 'ink-spinner';
27
+ import 'string-length';
28
+ import 'strip-ansi';
29
+ import 'open';
30
+ import '@inkjs/ui';
31
+ import 'fs';
32
+ import 'path';
33
+ import 'marked';
34
+ import 'marked-terminal';
35
+ import 'qrcode';
25
36
 
26
37
  async function getNewAuthState(username, password) {
27
38
  const authState = await Auth.loginAsync({
@@ -36,7 +47,8 @@ class AppleLogin extends BaseAuthenticatedCommand {
36
47
  static description = "Authenticate with Apple - saves the session to the auth file";
37
48
  static examples = [
38
49
  "<%= config.bin %> <%= command.id %>",
39
- "<%= config.bin %> <%= command.id %> --force --appleEmail me@email.nowhere"
50
+ "<%= config.bin %> <%= command.id %> --force --appleEmail me@email.nowhere",
51
+ "<%= config.bin %> <%= command.id %> --logout"
40
52
  ];
41
53
  static flags = {
42
54
  appleEmail: Flags.string({
@@ -44,10 +56,17 @@ class AppleLogin extends BaseAuthenticatedCommand {
44
56
  description: "Your Apple Developer email address"
45
57
  }),
46
58
  force: Flags.boolean({ char: "f" }),
47
- quiet: Flags.boolean({ char: "q", description: "Avoid output except for interactions and errors" })
59
+ quiet: Flags.boolean({ char: "q", description: "Avoid output except for interactions and errors" }),
60
+ logout: Flags.boolean({ char: "l", description: "Forget the saved Apple session (log out)" })
48
61
  };
49
62
  async run() {
50
63
  const { flags } = this;
64
+ if (flags.logout) {
65
+ await this.setAppleCookies(void 0);
66
+ if (!this.flags.quiet) this.log("You have been logged out of Apple.");
67
+ await this.config.runCommand(`apple:status`);
68
+ return;
69
+ }
51
70
  const isLoggedIn = await this.hasValidAppleAuthState();
52
71
  if (isLoggedIn && !flags.force) {
53
72
  throw new Error("You are already logged in to Apple. Use --force to re-authenticate.");
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { render } from 'ink';
3
- import { B as BaseAuthenticatedCommand } from '../../index-BwnzoldS.js';
3
+ import { B as BaseAuthenticatedCommand } from '../../index-CmuXyPed.js';
4
4
  import 'ink-spinner';
5
5
  import 'node:crypto';
6
6
  import 'node:fs';
@@ -25,21 +25,18 @@ import 'strip-ansi';
25
25
  import { S as StatusTable } from '../../StatusTable-DzRWcMr4.js';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
- import '../../ejs-DirFZbza.js';
29
28
  import 'marked';
30
29
  import 'marked-terminal';
31
30
  import { N as NextSteps } from '../../NextSteps-DbJHmscQ.js';
32
31
  import 'qrcode';
33
- import '../../index-hoHfGrjg.js';
34
- import { C as Command } from '../../Command-DN1j3tjt.js';
32
+ import { C as Command } from '../../Command-CHh8RDXK.js';
33
+ import 'chalk';
35
34
  import '@expo/apple-utils/build/index.js';
36
35
  import 'deepmerge';
37
36
  import 'ini';
38
- import '../../Title-BCQtayg6.js';
39
37
  import 'fs';
40
38
  import 'path';
41
- import '../../index-CJWMt1s-.js';
42
- import '../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
39
+ import '../../Title-BCQtayg6.js';
43
40
 
44
41
  class AppleStatus extends BaseAuthenticatedCommand {
45
42
  static args = {};
@@ -1,11 +1,12 @@
1
1
  import open from 'open';
2
- import { B as BaseAuthenticatedCommand, a0 as getSingleUseUrl } from '../index-BwnzoldS.js';
2
+ import { B as BaseAuthenticatedCommand, ah as getSingleUseUrl } from '../index-CmuXyPed.js';
3
3
  import 'node:fs';
4
4
  import 'axios';
5
5
  import 'crypto-js';
6
6
  import 'uuid';
7
7
  import 'luxon';
8
8
  import 'node:path';
9
+ import 'chalk';
9
10
  import '@oclif/core';
10
11
  import '@expo/apple-utils/build/index.js';
11
12
  import 'node:crypto';
@@ -22,6 +23,16 @@ import 'yazl';
22
23
  import 'socket.io-client';
23
24
  import 'fullscreen-ink';
24
25
  import 'ink';
26
+ import 'react/jsx-runtime';
27
+ import 'ink-spinner';
28
+ import 'string-length';
29
+ import 'strip-ansi';
30
+ import '@inkjs/ui';
31
+ import 'fs';
32
+ import 'path';
33
+ import 'marked';
34
+ import 'marked-terminal';
35
+ import 'qrcode';
25
36
 
26
37
  class Dashboard extends BaseAuthenticatedCommand {
27
38
  static args = {};
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { Q as getGoogleStatus, X as disconnectGoogle } from '../../../../index-BwnzoldS.js';
4
+ import { a2 as getGoogleStatus, ab as disconnectGoogle } from '../../../../index-CmuXyPed.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -22,26 +22,23 @@ import 'fullscreen-ink';
22
22
  import 'string-length';
23
23
  import 'strip-ansi';
24
24
  import 'open';
25
- import { C as ConnectGoogle } from '../../../../index-DlE_SPt3.js';
26
- import '../../../../index-hoHfGrjg.js';
25
+ import { C as ConnectGoogle } from '../../../../index-9LxGafAo.js';
27
26
  import '@inkjs/ui';
28
- import '../../../../ejs-DirFZbza.js';
29
27
  import 'marked';
30
28
  import 'marked-terminal';
31
29
  import 'qrcode';
32
- import { C as CommandGame } from '../../../../CommandGame-D2NqytWc.js';
33
- import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-BCB1SMCf.js';
30
+ import { C as CommandGame } from '../../../../CommandGame-Rvmsa7b0.js';
31
+ import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-D4ryZS6A.js';
34
32
  import 'crypto-js';
33
+ import 'chalk';
35
34
  import '@expo/apple-utils/build/index.js';
36
35
  import 'deepmerge';
37
36
  import 'ini';
38
- import '../../../../useGoogleStatus-Cx_QIsXa.js';
39
- import '../../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
40
- import '../../../../useWebSocket-cM5yOcDv.js';
41
- import '../../../../index-CJWMt1s-.js';
42
37
  import 'fs';
43
38
  import 'path';
44
- import '../../../../Command-DN1j3tjt.js';
39
+ import '../../../../useGoogleStatus-CSsxEvX7.js';
40
+ import '../../../../useWebSocket-BVfn36be.js';
41
+ import '../../../../Command-CHh8RDXK.js';
45
42
 
46
43
  class GameAndroidApiKeyConnect extends BaseGameAndroidCommand {
47
44
  static args = {};
@@ -5,9 +5,9 @@ import 'node:fs';
5
5
  import 'axios';
6
6
  import 'crypto-js';
7
7
  import 'uuid';
8
- import { P as Platform, C as CredentialsType } from '../../../../index-BwnzoldS.js';
8
+ import { P as Platform, C as CredentialsType } from '../../../../index-CmuXyPed.js';
9
9
  import 'luxon';
10
- import { a as getProjectCredentials } from '../../../../index-izrACZbC.js';
10
+ import { a as getProjectCredentials } from '../../../../index-CNsmEDXi.js';
11
11
  import 'ink-spinner';
12
12
  import 'node:crypto';
13
13
  import 'node:path';
@@ -25,26 +25,23 @@ import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
- import '../../../../ejs-DirFZbza.js';
29
28
  import 'marked';
30
29
  import 'marked-terminal';
31
30
  import 'qrcode';
32
- import '../../../../index-hoHfGrjg.js';
33
- import { C as CreateServiceAccountKey } from '../../../../index-BTXEUd8W.js';
34
- import { C as CommandGame } from '../../../../CommandGame-D2NqytWc.js';
35
- import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-BCB1SMCf.js';
31
+ import { C as CreateServiceAccountKey } from '../../../../index-BPh_qt7t.js';
32
+ import { C as CommandGame } from '../../../../CommandGame-Rvmsa7b0.js';
33
+ import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-D4ryZS6A.js';
34
+ import 'chalk';
36
35
  import '@expo/apple-utils/build/index.js';
37
36
  import 'deepmerge';
38
37
  import 'ini';
39
38
  import 'fs';
40
39
  import 'path';
41
- import '../../../../index-CJWMt1s-.js';
42
- import '../../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
43
- import '../../../../useWebSocket-cM5yOcDv.js';
44
- import '../../../../useProjectCredentials-DxdwJCfU.js';
45
- import '../../../../useGoogleStatus-Cx_QIsXa.js';
40
+ import '../../../../useWebSocket-BVfn36be.js';
41
+ import '../../../../useProjectCredentials-Cm50WMZU.js';
42
+ import '../../../../useGoogleStatus-CSsxEvX7.js';
46
43
  import '../../../../ProgressSpinner-Um6ARKlk.js';
47
- import '../../../../Command-DN1j3tjt.js';
44
+ import '../../../../Command-CHh8RDXK.js';
48
45
 
49
46
  class GameAndroidApiKeyCreate extends BaseGameAndroidCommand {
50
47
  static args = {};
@@ -0,0 +1,100 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { P as Platform, C as CredentialsType, 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 { a as getProjectCredentials, b as deleteProjectCredential } from '../../../../index-CNsmEDXi.js';
9
+ import 'react/jsx-runtime';
10
+ import 'ink';
11
+ import 'ink-spinner';
12
+ import 'react';
13
+ import '@tanstack/react-query';
14
+ import 'fast-glob';
15
+ import 'yazl';
16
+ import 'socket.io-client';
17
+ import 'fullscreen-ink';
18
+ import 'string-length';
19
+ import 'strip-ansi';
20
+ import 'open';
21
+ import '@inkjs/ui';
22
+ import 'qrcode';
23
+ import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-D4ryZS6A.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 GameAndroidApiKeyDelete extends BaseGameAndroidCommand {
40
+ static args = {};
41
+ static description = "Delete the active Android API Key from ShipThis";
42
+ static examples = [
43
+ "<%= config.bin %> <%= command.id %>",
44
+ "<%= config.bin %> <%= command.id %> --immediate --iAmSure"
45
+ ];
46
+ static flags = {
47
+ ...BaseGameAndroidCommand.flags,
48
+ immediate: Flags.boolean({
49
+ char: "i",
50
+ description: "Remove from storage immediately (rather than waiting for automatic cleanup - cannot be undone)",
51
+ required: false
52
+ }),
53
+ iAmSure: Flags.boolean({
54
+ char: "y",
55
+ description: "I am sure I want to do this - do not prompt me",
56
+ required: false
57
+ })
58
+ };
59
+ async run() {
60
+ const { flags } = await this.parse(GameAndroidApiKeyDelete);
61
+ const { immediate, iAmSure } = flags;
62
+ const game = await this.getGame();
63
+ const projectCredentials = await getProjectCredentials(game.id);
64
+ const activeKeys = projectCredentials.filter(
65
+ (cred) => cred.platform === Platform.ANDROID && cred.type === CredentialsType.KEY && cred.isActive
66
+ );
67
+ if (activeKeys.length === 0) {
68
+ this.log("No active Android API Key found which can be deleted.");
69
+ return;
70
+ }
71
+ const [apiKey] = activeKeys;
72
+ const getAreYouSure = async () => {
73
+ if (iAmSure) return true;
74
+ const confirmString = getShortUUID(apiKey.id);
75
+ const prompt = getRenderedMarkdown({
76
+ filename: "confirm-delete-android-serviceaccountkey.md.ejs",
77
+ templateVars: {
78
+ confirmString,
79
+ exportCommand: `shipthis game android apiKey export apiKey.json`,
80
+ immediate
81
+ }
82
+ });
83
+ this.log(prompt);
84
+ const input = await getInput("");
85
+ return input.trim().toLowerCase() === confirmString.toLowerCase();
86
+ };
87
+ const areYouSure = await getAreYouSure();
88
+ if (!areYouSure) {
89
+ this.log("Aborting - Android API Key not deleted");
90
+ this.exit(0);
91
+ }
92
+ await deleteProjectCredential(game.id, {
93
+ credentialId: apiKey.id,
94
+ isImmediate: immediate
95
+ });
96
+ this.log("The Android API Key has been deleted from ShipThis.");
97
+ }
98
+ }
99
+
100
+ export { GameAndroidApiKeyDelete 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 { a as getProjectCredentials } from '../../../../index-izrACZbC.js';
6
- import { P as Platform, C as CredentialsType } from '../../../../index-BwnzoldS.js';
5
+ import { a as getProjectCredentials } from '../../../../index-CNsmEDXi.js';
6
+ import { 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';
@@ -25,22 +25,19 @@ import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
- import '../../../../ejs-DirFZbza.js';
29
28
  import 'marked';
30
29
  import 'marked-terminal';
31
30
  import 'qrcode';
32
31
  import { R as RunWithSpinner } from '../../../../RunWithSpinner-DucRnFp6.js';
33
- import '../../../../index-hoHfGrjg.js';
34
- import { C as Command } from '../../../../Command-DN1j3tjt.js';
35
- import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-BCB1SMCf.js';
36
- import { e as exportCredential } from '../../../../export-DFCZKNQk.js';
32
+ import { C as Command } from '../../../../Command-CHh8RDXK.js';
33
+ import { B as BaseGameAndroidCommand } from '../../../../baseGameAndroidCommand-D4ryZS6A.js';
34
+ import { e as exportCredential } from '../../../../export-DujIwhJw.js';
35
+ import 'chalk';
37
36
  import '@expo/apple-utils/build/index.js';
38
37
  import 'deepmerge';
39
38
  import 'ini';
40
39
  import 'fs';
41
40
  import 'path';
42
- import '../../../../index-CJWMt1s-.js';
43
- import '../../../../useAndroidServiceAccountTestResult-CwKeW0ED.js';
44
41
 
45
42
  class GameAndroidApiKeyExport extends BaseGameAndroidCommand {
46
43
  static args = {