shipthis 0.1.36 → 0.1.38

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 (101) hide show
  1. package/README.md +46 -33
  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/assets/markdown/ship-success.md.ejs +4 -0
  6. package/dist/{AppleBundleIdDetails-pEVOUXTQ.js → AppleBundleIdDetails-CgleH2pl.js} +3 -3
  7. package/dist/{Command-DhAVAdiI.js → Command-7dCv1F9p.js} +1 -1
  8. package/dist/{CommandGame-C-oV-hb4.js → CommandGame-er5Ql6hq.js} +2 -2
  9. package/dist/{Create-Dg9ZlwEd.js → Create-pLXESvEq.js} +1 -1
  10. package/dist/{GameStatus-Dm9TqFfW.js → GameStatus-B_Iw9tYr.js} +1 -1
  11. package/dist/{Import-BFNNkN-I.js → Import-fIsrfsmr.js} +2 -2
  12. package/dist/{JobLogTail-RTNIiAUk.js → JobLogTail-BPcQ8ghI.js} +2 -2
  13. package/dist/{JobProgress-dFWcT0CQ.js → JobProgress-CpEatVPs.js} +10 -6
  14. package/dist/{JobStatusTable-BlvMuWF7.js → JobStatusTable-BmJLzsUN.js} +2 -2
  15. package/dist/{ProjectCredentialsTable-CMBnYLou.js → ProjectCredentialsTable-DvPDhi7C.js} +5 -3
  16. package/dist/{UserCredentialsTable-oxE3mDmE.js → UserCredentialsTable-MBm1vAP3.js} +4 -2
  17. package/dist/{baseAppleCommand-cnLvBz95.js → baseAppleCommand-uL0Gnav4.js} +1 -1
  18. package/dist/{baseGameAndroidCommand-DUDYisYm.js → baseGameAndroidCommand-CKTSQyZV.js} +1 -1
  19. package/dist/commands/apiKey/create.js +3 -2
  20. package/dist/commands/apiKey/list.js +3 -2
  21. package/dist/commands/apiKey/revoke.js +3 -2
  22. package/dist/commands/apple/apiKey/create.js +7 -6
  23. package/dist/commands/apple/apiKey/delete.js +118 -0
  24. package/dist/commands/apple/apiKey/export.js +6 -5
  25. package/dist/commands/apple/apiKey/import.js +6 -5
  26. package/dist/commands/apple/apiKey/status.js +4 -3
  27. package/dist/commands/apple/certificate/create.js +7 -6
  28. package/dist/commands/apple/certificate/delete.js +127 -0
  29. package/dist/commands/apple/certificate/export.js +6 -5
  30. package/dist/commands/apple/certificate/import.js +6 -5
  31. package/dist/commands/apple/certificate/status.js +4 -3
  32. package/dist/commands/apple/login.js +12 -3
  33. package/dist/commands/apple/status.js +3 -2
  34. package/dist/commands/dashboard.js +2 -1
  35. package/dist/commands/game/android/apiKey/connect.js +8 -7
  36. package/dist/commands/game/android/apiKey/create.js +10 -9
  37. package/dist/commands/game/android/apiKey/delete.js +100 -0
  38. package/dist/commands/game/android/apiKey/export.js +6 -5
  39. package/dist/commands/game/android/apiKey/import.js +6 -5
  40. package/dist/commands/game/android/apiKey/invite.js +3 -2
  41. package/dist/commands/game/android/apiKey/policy.js +3 -2
  42. package/dist/commands/game/android/apiKey/status.js +6 -5
  43. package/dist/commands/game/android/keyStore/create.js +7 -6
  44. package/dist/commands/game/android/keyStore/delete.js +100 -0
  45. package/dist/commands/game/android/keyStore/export.js +5 -4
  46. package/dist/commands/game/android/keyStore/import.js +8 -7
  47. package/dist/commands/game/android/keyStore/status.js +5 -4
  48. package/dist/commands/game/android/status.js +2 -1
  49. package/dist/commands/game/build/download.js +3 -2
  50. package/dist/commands/game/build/list.js +4 -3
  51. package/dist/commands/game/create.js +2 -1
  52. package/dist/commands/game/details.js +9 -5
  53. package/dist/commands/game/export.js +2 -1
  54. package/dist/commands/game/ios/app/addTester.js +4 -3
  55. package/dist/commands/game/ios/app/create.js +3 -2
  56. package/dist/commands/game/ios/app/status.js +6 -5
  57. package/dist/commands/game/ios/app/sync.js +4 -3
  58. package/dist/commands/game/ios/profile/create.js +6 -5
  59. package/dist/commands/game/ios/profile/delete.js +123 -0
  60. package/dist/commands/game/ios/profile/export.js +5 -4
  61. package/dist/commands/game/ios/profile/import.js +5 -4
  62. package/dist/commands/game/ios/profile/status.js +8 -47
  63. package/dist/commands/game/ios/status.js +8 -7
  64. package/dist/commands/game/ios/wizard.js +2 -2
  65. package/dist/commands/game/job/list.js +3 -2
  66. package/dist/commands/game/job/status.js +6 -5
  67. package/dist/commands/game/list.js +3 -2
  68. package/dist/commands/game/ship.js +18 -10
  69. package/dist/commands/game/status.js +5 -4
  70. package/dist/commands/game/wizard.js +14 -13
  71. package/dist/commands/internal/fastlane.js +2 -1
  72. package/dist/commands/internal/readme.js +2 -1
  73. package/dist/commands/login.js +2 -1
  74. package/dist/commands/status.js +2 -2
  75. package/dist/{export-Bd552LBe.js → export-BwwAjG_F.js} +1 -1
  76. package/dist/{import-D-EL9sQJ.js → import-OgFrUsqw.js} +1 -1
  77. package/dist/{index-DwATmUTQ.js → index-C1XpCT_9.js} +4 -4
  78. package/dist/index-C2omlhEs.js +48 -0
  79. package/dist/{index-BtPf4vzY.js → index-DHioYOIm.js} +6 -3
  80. package/dist/{index-DCN43FhY.js → index-DVEYxVsH.js} +3 -3
  81. package/dist/{upload-Dm38PqhN.js → upload-5s3sy2jF.js} +1 -1
  82. package/dist/{useAppleApp-BKPntZPm.js → useAppleApp-szQ_Kg5S.js} +1 -1
  83. package/dist/{useAppleBundleId-DvQKEEy4.js → useAppleBundleId-BarLcidd.js} +1 -1
  84. package/dist/useAppleProfiles-C2U4NzC3.js +63 -0
  85. package/dist/{useGoogleStatus-D9jjGa--.js → useGoogleStatus-zfnjhtNB.js} +1 -1
  86. package/dist/{useProjectCredentials-BjsS28hP.js → useProjectCredentials-DbynNY96.js} +1 -1
  87. package/dist/{useWebSocket-CIeyHqxG.js → useWebSocket-h7smqhZQ.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/game/android/apiKey/delete.md +25 -0
  93. package/docs/game/android/apiKey.md +26 -0
  94. package/docs/game/android/keyStore/delete.md +25 -0
  95. package/docs/game/android/keyStore.md +26 -0
  96. package/docs/game/details.md +13 -10
  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 +5 -4
  100. package/package.json +6 -1
  101. package/dist/index-1H48f5j2.js +0 -24
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { d as BaseGameCommand } from '../../../../index-BtPf4vzY.js';
4
+ import { h as BaseGameCommand } from '../../../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -28,17 +28,18 @@ import 'marked';
28
28
  import 'marked-terminal';
29
29
  import { N as NextSteps } from '../../../../NextSteps-DbJHmscQ.js';
30
30
  import 'qrcode';
31
- import { A as AppleAppDetails, a as AppleBundleIdDetails } from '../../../../AppleBundleIdDetails-pEVOUXTQ.js';
32
- import { C as Command } from '../../../../Command-DhAVAdiI.js';
31
+ import { A as AppleAppDetails, a as AppleBundleIdDetails } from '../../../../AppleBundleIdDetails-CgleH2pl.js';
32
+ import { C as Command } from '../../../../Command-7dCv1F9p.js';
33
+ import 'chalk';
33
34
  import '@expo/apple-utils/build/index.js';
34
35
  import 'deepmerge';
35
36
  import 'ini';
36
37
  import 'fs';
37
38
  import 'path';
38
39
  import '../../../../Title-BCQtayg6.js';
39
- import '../../../../useAppleApp-BKPntZPm.js';
40
+ import '../../../../useAppleApp-szQ_Kg5S.js';
40
41
  import '../../../../Table-FaNgpyeq.js';
41
- import '../../../../useAppleBundleId-DvQKEEy4.js';
42
+ import '../../../../useAppleBundleId-BarLcidd.js';
42
43
 
43
44
  class GameIosAppStatus extends BaseGameCommand {
44
45
  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 { d as BaseGameCommand, k as CapabilityTypeOption } from '../../../../index-BtPf4vzY.js';
4
+ import { h as BaseGameCommand, m as CapabilityTypeOption } from '../../../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -16,7 +16,7 @@ import '@tanstack/react-query';
16
16
  import 'react';
17
17
  import 'crypto-js';
18
18
  import 'uuid';
19
- import { f as fetchBundleId } from '../../../../useAppleBundleId-DvQKEEy4.js';
19
+ import { f as fetchBundleId } from '../../../../useAppleBundleId-BarLcidd.js';
20
20
  import 'fast-glob';
21
21
  import 'yazl';
22
22
  import 'socket.io-client';
@@ -29,7 +29,8 @@ 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';
32
+ import { C as Command } from '../../../../Command-7dCv1F9p.js';
33
+ import 'chalk';
33
34
  import '@expo/apple-utils/build/index.js';
34
35
  import 'deepmerge';
35
36
  import 'ini';
@@ -5,9 +5,9 @@ import { render } from 'ink';
5
5
  import 'node:fs';
6
6
  import 'crypto-js';
7
7
  import 'uuid';
8
- import { d as BaseGameCommand, P as Platform, C as CredentialsType, o as Certificate, p as CertificateType, q as Profile, r as ProfileType } from '../../../../index-BtPf4vzY.js';
8
+ import { h as BaseGameCommand, P as Platform, C as CredentialsType, d as Certificate, p as CertificateType, q as Profile, r as ProfileType } from '../../../../index-DHioYOIm.js';
9
9
  import 'luxon';
10
- import { a as getProjectCredentials, g as getUserCredentials } from '../../../../index-1H48f5j2.js';
10
+ import { a as getProjectCredentials, g as getUserCredentials } from '../../../../index-C2omlhEs.js';
11
11
  import 'ink-spinner';
12
12
  import 'node:crypto';
13
13
  import 'node:path';
@@ -17,7 +17,7 @@ import 'readline-sync';
17
17
  import 'isomorphic-git';
18
18
  import '@tanstack/react-query';
19
19
  import 'react';
20
- import { f as fetchBundleId } from '../../../../useAppleBundleId-DvQKEEy4.js';
20
+ import { f as fetchBundleId } from '../../../../useAppleBundleId-BarLcidd.js';
21
21
  import 'fast-glob';
22
22
  import 'yazl';
23
23
  import 'socket.io-client';
@@ -30,8 +30,9 @@ import 'marked';
30
30
  import 'marked-terminal';
31
31
  import 'qrcode';
32
32
  import { R as RunWithSpinner } from '../../../../RunWithSpinner-DucRnFp6.js';
33
- import { C as Command } from '../../../../Command-DhAVAdiI.js';
34
- import { a as uploadProjectCredentials } from '../../../../upload-Dm38PqhN.js';
33
+ import { C as Command } from '../../../../Command-7dCv1F9p.js';
34
+ import { a as uploadProjectCredentials } from '../../../../upload-5s3sy2jF.js';
35
+ import 'chalk';
35
36
  import '@expo/apple-utils/build/index.js';
36
37
  import 'deepmerge';
37
38
  import 'ini';
@@ -0,0 +1,123 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { h as BaseGameCommand, P as Platform, C as CredentialsType, g as getShortUUID, b as getRenderedMarkdown, c as getInput } from '../../../../index-DHioYOIm.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-C2omlhEs.js';
9
+ import 'react/jsx-runtime';
10
+ import 'ink';
11
+ import 'ink-spinner';
12
+ import 'react';
13
+ import '@tanstack/react-query';
14
+ import { q as queryAppleProfiles } from '../../../../useAppleProfiles-C2U4NzC3.js';
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 '@inkjs/ui';
23
+ import 'qrcode';
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 GameIosProfileDelete extends BaseGameCommand {
40
+ static args = {};
41
+ static description = "Delete an iOS Mobile Provisioning Profile from ShipThis and optionally from Apple";
42
+ static examples = [
43
+ "<%= config.bin %> <%= command.id %>",
44
+ "<%= config.bin %> <%= command.id %> --revokeInApple --immediate --iAmSure"
45
+ ];
46
+ static flags = {
47
+ ...BaseGameCommand.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
+ revokeInApple: Flags.boolean({
59
+ char: "a",
60
+ description: "Also revoke the Profile in Apple (cannot be undone)",
61
+ required: false
62
+ })
63
+ };
64
+ async run() {
65
+ const { flags } = await this.parse(GameIosProfileDelete);
66
+ const { immediate, iAmSure, revokeInApple } = flags;
67
+ const game = await this.getGame();
68
+ const projectCredentials = await getProjectCredentials(game.id);
69
+ const userAppleProfileCredentials = projectCredentials.filter(
70
+ (cred) => cred.platform === Platform.IOS && cred.type === CredentialsType.CERTIFICATE && cred.isActive
71
+ );
72
+ if (userAppleProfileCredentials.length === 0) {
73
+ this.error("No active Mobile Provisioning Profile found which can be deleted.");
74
+ }
75
+ const [profile] = userAppleProfileCredentials;
76
+ let appleProfile = null;
77
+ if (revokeInApple) {
78
+ const authState = await this.refreshAppleAuthState();
79
+ const ctx = authState.context;
80
+ const appleProfiles = await queryAppleProfiles({ ctx });
81
+ appleProfile = appleProfiles.find((p) => {
82
+ const profileSerialNumber = p.attributes.certificates?.[0]?.attributes.serialNumber;
83
+ return profileSerialNumber === profile.serialNumber;
84
+ });
85
+ if (!appleProfile?.id) {
86
+ this.error("The Mobile Provisioning Profile was not found in Apple, so cannot be revoked there.");
87
+ }
88
+ }
89
+ const getAreYouSure = async () => {
90
+ if (iAmSure) return true;
91
+ const confirmString = getShortUUID(profile.id);
92
+ const prompt = getRenderedMarkdown({
93
+ filename: "confirm-delete-apple-credential.md.ejs",
94
+ templateVars: {
95
+ confirmString,
96
+ credentialType: "Mobile Provisioning Profile",
97
+ exportCommand: `shipthis game ios profile export userProfile.zip`,
98
+ immediate,
99
+ revokeInApple
100
+ }
101
+ });
102
+ this.log(prompt);
103
+ const input = await getInput("");
104
+ return input.trim().toLowerCase() === confirmString.toLowerCase();
105
+ };
106
+ const areYouSure = await getAreYouSure();
107
+ if (!areYouSure) {
108
+ this.log("Aborting - Mobile Provisioning Profile not deleted");
109
+ this.exit(0);
110
+ }
111
+ await deleteProjectCredential(game.id, {
112
+ credentialId: profile.id,
113
+ isImmediate: immediate
114
+ });
115
+ this.log("The Mobile Provisioning Profile has been deleted from ShipThis.");
116
+ if (revokeInApple && appleProfile?.id) {
117
+ await appleProfile.deleteAsync();
118
+ this.log("The Mobile Provisioning Profile has been deleted in Apple.");
119
+ }
120
+ }
121
+ }
122
+
123
+ export { GameIosProfileDelete 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-1H48f5j2.js';
6
- import { d as BaseGameCommand, P as Platform, C as CredentialsType } from '../../../../index-BtPf4vzY.js';
5
+ import { a as getProjectCredentials } from '../../../../index-C2omlhEs.js';
6
+ import { h as BaseGameCommand, P as Platform, C as CredentialsType } from '../../../../index-DHioYOIm.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-7dCv1F9p.js';
33
+ import { e as exportCredential } from '../../../../export-BwwAjG_F.js';
34
+ import 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'deepmerge';
36
37
  import 'ini';
@@ -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-1H48f5j2.js';
6
- import { d as BaseGameCommand, P as Platform, C as CredentialsType } from '../../../../index-BtPf4vzY.js';
5
+ import { a as getProjectCredentials } from '../../../../index-C2omlhEs.js';
6
+ import { h as BaseGameCommand, P as Platform, C as CredentialsType } from '../../../../index-DHioYOIm.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-7dCv1F9p.js';
33
+ import { i as importCredential } from '../../../../import-OgFrUsqw.js';
34
+ import 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'deepmerge';
36
37
  import 'ini';
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { Box, Text, render } from 'ink';
4
- import { c as getShortDate, q as Profile, r as ProfileType, C as CredentialsType, P as Platform, d as BaseGameCommand } from '../../../../index-BtPf4vzY.js';
4
+ import { C as CredentialsType, P as Platform, h as BaseGameCommand } from '../../../../index-DHioYOIm.js';
5
5
  import Spinner from 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -9,10 +9,10 @@ import 'node:path';
9
9
  import 'node:readline';
10
10
  import 'node:url';
11
11
  import 'readline-sync';
12
- import { DateTime } from 'luxon';
12
+ import 'luxon';
13
13
  import 'axios';
14
14
  import 'isomorphic-git';
15
- import { useQuery } from '@tanstack/react-query';
15
+ import '@tanstack/react-query';
16
16
  import 'react';
17
17
  import 'crypto-js';
18
18
  import 'uuid';
@@ -22,64 +22,25 @@ import 'socket.io-client';
22
22
  import 'fullscreen-ink';
23
23
  import 'string-length';
24
24
  import 'strip-ansi';
25
- import { P as ProjectCredentialsTable } from '../../../../ProjectCredentialsTable-CMBnYLou.js';
25
+ import { P as ProjectCredentialsTable } from '../../../../ProjectCredentialsTable-DvPDhi7C.js';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
28
  import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
- import { u as useProjectCredentials } from '../../../../useProjectCredentials-BjsS28hP.js';
31
+ import { u as useAppleProfiles, c as canAppleProfileBeUsed, g as getAppleProfileSummary } from '../../../../useAppleProfiles-C2U4NzC3.js';
32
+ import { u as useProjectCredentials } from '../../../../useProjectCredentials-DbynNY96.js';
32
33
  import { T as Table } from '../../../../Table-FaNgpyeq.js';
33
34
  import { T as Title } from '../../../../Title-BCQtayg6.js';
34
35
  import { N as NextSteps } from '../../../../NextSteps-DbJHmscQ.js';
35
- import { C as Command } from '../../../../Command-DhAVAdiI.js';
36
+ import { C as Command } from '../../../../Command-7dCv1F9p.js';
37
+ import 'chalk';
36
38
  import '@expo/apple-utils/build/index.js';
37
39
  import 'deepmerge';
38
40
  import 'ini';
39
41
  import 'fs';
40
42
  import 'path';
41
43
 
42
- async function queryAppleProfiles({ ctx }) {
43
- const appleProfiles = await Profile.getAsync(ctx, {
44
- query: {
45
- filter: {
46
- profileType: [ProfileType.IOS_APP_STORE]
47
- }
48
- }
49
- });
50
- return appleProfiles;
51
- }
52
- const canAppleProfileBeUsed = (appleProfile, project, projectCredentials) => {
53
- try {
54
- if (!appleProfile.isValid) return false;
55
- const profileBundleId = appleProfile.attributes.bundleId?.attributes.identifier;
56
- const profileCertificateSerialNumber = appleProfile.attributes.certificates?.[0]?.attributes.serialNumber;
57
- if (profileBundleId !== project.details?.iosBundleId) return false;
58
- return projectCredentials.some(
59
- (credential) => credential.isActive && credential.serialNumber === profileCertificateSerialNumber
60
- );
61
- } catch (error) {
62
- console.log(error);
63
- return false;
64
- }
65
- };
66
- function getAppleProfileSummary(appleProfile, project, projectCredentials) {
67
- return {
68
- canBeUsed: canAppleProfileBeUsed(appleProfile, project, projectCredentials),
69
- expires: getShortDate(DateTime.fromISO(appleProfile.attributes.expirationDate)),
70
- id: appleProfile.id,
71
- name: appleProfile.attributes.name,
72
- platform: appleProfile.attributes.platform
73
- };
74
- }
75
- const useAppleProfiles = (props) => {
76
- const queryResult = useQuery({
77
- queryFn: () => queryAppleProfiles(props),
78
- queryKey: ["appleProfiles"]
79
- });
80
- return queryResult;
81
- };
82
-
83
44
  const AppleProfilesTable = ({ ctx, project, ...boxProps }) => {
84
45
  const { data: credentialsResponse } = useProjectCredentials({
85
46
  platform: Platform.IOS,
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render, Box } from 'ink';
4
- import { d as BaseGameCommand, P as Platform } from '../../../index-BtPf4vzY.js';
4
+ import { h as BaseGameCommand, P as Platform } from '../../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -20,7 +20,7 @@ import 'fast-glob';
20
20
  import 'yazl';
21
21
  import 'socket.io-client';
22
22
  import 'fullscreen-ink';
23
- import { G as GameStatusDetails } from '../../../GameStatus-Dm9TqFfW.js';
23
+ import { G as GameStatusDetails } from '../../../GameStatus-B_Iw9tYr.js';
24
24
  import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import 'open';
@@ -28,8 +28,9 @@ import '@inkjs/ui';
28
28
  import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
- import { A as AppleAppDetails, a as AppleBundleIdDetails } from '../../../AppleBundleIdDetails-pEVOUXTQ.js';
32
- import { C as CommandGame } from '../../../CommandGame-C-oV-hb4.js';
31
+ import { A as AppleAppDetails, a as AppleBundleIdDetails } from '../../../AppleBundleIdDetails-CgleH2pl.js';
32
+ import { C as CommandGame } from '../../../CommandGame-er5Ql6hq.js';
33
+ import 'chalk';
33
34
  import '@expo/apple-utils/build/index.js';
34
35
  import 'deepmerge';
35
36
  import 'ini';
@@ -38,10 +39,10 @@ import 'path';
38
39
  import '../../../StatusTable-DzRWcMr4.js';
39
40
  import '../../../Title-BCQtayg6.js';
40
41
  import '../../../NextSteps-DbJHmscQ.js';
41
- import '../../../useAppleApp-BKPntZPm.js';
42
+ import '../../../useAppleApp-szQ_Kg5S.js';
42
43
  import '../../../Table-FaNgpyeq.js';
43
- import '../../../useAppleBundleId-DvQKEEy4.js';
44
- import '../../../Command-DhAVAdiI.js';
44
+ import '../../../useAppleBundleId-BarLcidd.js';
45
+ import '../../../Command-7dCv1F9p.js';
45
46
 
46
47
  class GameIosStatus extends BaseGameCommand {
47
48
  static args = {};
@@ -4,9 +4,9 @@ import 'node:fs';
4
4
  import 'axios';
5
5
  import 'crypto-js';
6
6
  import 'uuid';
7
- import { B as BaseAuthenticatedCommand, m as isCWDGodotGame, n as getRenderedMarkdown, W as WEB_URL, P as Platform, C as CredentialsType } from '../../../index-BtPf4vzY.js';
7
+ import { B as BaseAuthenticatedCommand, o as isCWDGodotGame, b as getRenderedMarkdown, W as WEB_URL, P as Platform, C as CredentialsType } from '../../../index-DHioYOIm.js';
8
8
  import 'luxon';
9
- import { g as getUserCredentials, a as getProjectCredentials } from '../../../index-1H48f5j2.js';
9
+ import { g as getUserCredentials, a as getProjectCredentials } from '../../../index-C2omlhEs.js';
10
10
  import 'react/jsx-runtime';
11
11
  import 'ink';
12
12
  import 'ink-spinner';
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render, Box, Text } from 'ink';
4
4
  import { DateTime } from 'luxon';
5
- import { d as BaseGameCommand, H as getProjectJobs, I as getJobSummary, J as getJobStatusColor } from '../../../index-BtPf4vzY.js';
5
+ import { h as BaseGameCommand, H as getProjectJobs, I as getJobSummary, J as getJobStatusColor } from '../../../index-DHioYOIm.js';
6
6
  import 'ink-spinner';
7
7
  import { T as Table } from '../../../Table-FaNgpyeq.js';
8
8
  import { T as Title } from '../../../Title-BCQtayg6.js';
@@ -23,8 +23,9 @@ import 'node:path';
23
23
  import 'marked';
24
24
  import 'marked-terminal';
25
25
  import 'qrcode';
26
- import { C as Command } from '../../../Command-DhAVAdiI.js';
26
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
27
27
  import 'crypto-js';
28
+ import 'chalk';
28
29
  import '@expo/apple-utils/build/index.js';
29
30
  import 'node:crypto';
30
31
  import 'node:readline';
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Args, Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { d as BaseGameCommand, K as getJob, L as JobStatus } from '../../../index-BtPf4vzY.js';
4
+ import { h as BaseGameCommand, K as getJob, L as JobStatus } from '../../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -19,8 +19,8 @@ import 'uuid';
19
19
  import 'yazl';
20
20
  import 'socket.io-client';
21
21
  import 'fullscreen-ink';
22
- import { J as JobLogTail } from '../../../JobLogTail-RTNIiAUk.js';
23
- import { J as JobStatusTable } from '../../../JobStatusTable-BlvMuWF7.js';
22
+ import { J as JobLogTail } from '../../../JobLogTail-BPcQ8ghI.js';
23
+ import { J as JobStatusTable } from '../../../JobStatusTable-BmJLzsUN.js';
24
24
  import 'open';
25
25
  import '@inkjs/ui';
26
26
  import 'marked';
@@ -29,14 +29,15 @@ import { N as NextSteps } from '../../../NextSteps-DbJHmscQ.js';
29
29
  import 'qrcode';
30
30
  import 'string-length';
31
31
  import 'strip-ansi';
32
- import { C as Command } from '../../../Command-DhAVAdiI.js';
32
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
33
33
  import 'crypto-js';
34
+ import 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'deepmerge';
36
37
  import 'ini';
37
38
  import 'fs';
38
39
  import 'path';
39
- import '../../../useWebSocket-CIeyHqxG.js';
40
+ import '../../../useWebSocket-h7smqhZQ.js';
40
41
  import '../../../Title-BCQtayg6.js';
41
42
  import '../../../StatusTable-DzRWcMr4.js';
42
43
 
@@ -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, g as getProjects, b as getShortUUID, c as getShortDate } from '../../index-BtPf4vzY.js';
4
+ import { B as BaseAuthenticatedCommand, e as getProjects, g as getShortUUID, f as getShortDate } from '../../index-DHioYOIm.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-7dCv1F9p.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, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { Box, Text, render } from 'ink';
4
- import { as as LogLevel, S as CommandContext, R as GameContext, at as useSafeInput, au as Markdown, W as WEB_URL, b as getShortUUID, av as getShortAuthRequiredUrl, d as BaseGameCommand, K as getJob, V as downloadBuildById } from '../../index-BtPf4vzY.js';
4
+ import { as as LogLevel, S as CommandContext, R as GameContext, at as useSafeInput, au as Markdown, W as WEB_URL, g as getShortUUID, av as getShortAuthRequiredUrl, h as BaseGameCommand, K as getJob, a1 as downloadBuildById } from '../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -23,25 +23,26 @@ import 'string-length';
23
23
  import 'strip-ansi';
24
24
  import open from 'open';
25
25
  import 'crypto-js';
26
- import { u as useJobWatching, J as JobLogTail } from '../../JobLogTail-RTNIiAUk.js';
27
- import { J as JobStatusTable } from '../../JobStatusTable-BlvMuWF7.js';
26
+ import { u as useJobWatching, J as JobLogTail } from '../../JobLogTail-BPcQ8ghI.js';
27
+ import { J as JobStatusTable } from '../../JobStatusTable-BmJLzsUN.js';
28
28
  import '@inkjs/ui';
29
- import { u as useShip, J as JobProgress } from '../../JobProgress-dFWcT0CQ.js';
29
+ import { u as useShip, J as JobProgress } from '../../JobProgress-CpEatVPs.js';
30
30
  import 'qrcode';
31
31
  import 'marked';
32
32
  import 'marked-terminal';
33
- import { C as CommandGame } from '../../CommandGame-C-oV-hb4.js';
33
+ import { C as CommandGame } from '../../CommandGame-er5Ql6hq.js';
34
+ import 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'deepmerge';
36
37
  import 'ini';
37
38
  import 'fs';
38
39
  import 'path';
39
- import '../../useWebSocket-CIeyHqxG.js';
40
+ import '../../useWebSocket-h7smqhZQ.js';
40
41
  import '../../Title-BCQtayg6.js';
41
42
  import '../../StatusTable-DzRWcMr4.js';
42
43
  import '../../git-BpsfNFZ_.js';
43
44
  import '../../ProgressSpinner-Um6ARKlk.js';
44
- import '../../Command-DhAVAdiI.js';
45
+ import '../../Command-7dCv1F9p.js';
45
46
 
46
47
  function isNetworkError(exception) {
47
48
  if (!axios.isAxiosError(exception)) return false;
@@ -160,7 +161,8 @@ const Ship = ({ onComplete, onError }) => {
160
161
  filename: "ship-success.md.ejs",
161
162
  templateVars: {
162
163
  gameBuildsUrl: `${WEB_URL}games/${getShortUUID(gameId)}/builds`,
163
- wasPublished: !flags?.skipPublish
164
+ wasPublished: !(flags?.skipPublish || flags?.useDemoCredentials),
165
+ usedDemoCredentials: !!flags?.useDemoCredentials
164
166
  }
165
167
  }
166
168
  ),
@@ -189,7 +191,8 @@ class GameShip extends BaseGameCommand {
189
191
  "<%= config.bin %> <%= command.id %> --platform android --skipPublish",
190
192
  "<%= config.bin %> <%= command.id %> --platform android --download game.aab",
191
193
  "<%= config.bin %> <%= command.id %> --platform android --follow --downloadAPK game.apk",
192
- "<%= config.bin %> <%= command.id %> --platform ios --follow --verbose"
194
+ "<%= config.bin %> <%= command.id %> --platform ios --follow --verbose",
195
+ "<%= config.bin %> <%= command.id %> --platform ios --useDemoCredentials --download game.ipa"
193
196
  ];
194
197
  static flags = {
195
198
  ...BaseGameCommand.flags,
@@ -205,7 +208,7 @@ class GameShip extends BaseGameCommand {
205
208
  }),
206
209
  follow: Flags.boolean({
207
210
  dependsOn: ["platform"],
208
- description: "Follow the job logs in real-time. Requires --platform to be specified.",
211
+ description: "Follow the job logs in real-time (requires --platform)",
209
212
  required: false
210
213
  }),
211
214
  platform: Flags.string({
@@ -222,6 +225,11 @@ class GameShip extends BaseGameCommand {
222
225
  default: false,
223
226
  description: "Enable verbose logging",
224
227
  required: false
228
+ }),
229
+ useDemoCredentials: Flags.boolean({
230
+ dependsOn: ["platform"],
231
+ description: "Use demo credentials for this build (requires --platform, implies --skipPublish)",
232
+ required: false
225
233
  })
226
234
  };
227
235
  async run() {
@@ -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 { B as BaseAuthenticatedCommand } from '../../index-BtPf4vzY.js';
4
+ import { B as BaseAuthenticatedCommand } from '../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -20,7 +20,7 @@ import 'fast-glob';
20
20
  import 'yazl';
21
21
  import 'socket.io-client';
22
22
  import 'fullscreen-ink';
23
- import { a as GameStatus$1 } from '../../GameStatus-Dm9TqFfW.js';
23
+ import { a as GameStatus$1 } from '../../GameStatus-B_Iw9tYr.js';
24
24
  import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import 'open';
@@ -28,7 +28,8 @@ import '@inkjs/ui';
28
28
  import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
- import { C as CommandGame } from '../../CommandGame-C-oV-hb4.js';
31
+ import { C as CommandGame } from '../../CommandGame-er5Ql6hq.js';
32
+ import 'chalk';
32
33
  import '@expo/apple-utils/build/index.js';
33
34
  import 'deepmerge';
34
35
  import 'ini';
@@ -37,7 +38,7 @@ import 'path';
37
38
  import '../../StatusTable-DzRWcMr4.js';
38
39
  import '../../Title-BCQtayg6.js';
39
40
  import '../../NextSteps-DbJHmscQ.js';
40
- import '../../Command-DhAVAdiI.js';
41
+ import '../../Command-7dCv1F9p.js';
41
42
 
42
43
  class GameStatus extends BaseAuthenticatedCommand {
43
44
  static args = {};