shipthis 0.1.9 → 0.1.11
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.
- package/assets/markdown/create-or-import-keystore.md +7 -0
- package/dist/AppleBundleIdDetails-CjP5y0cj.js +74 -0
- package/dist/AppleBundleIdDetails-CztWY_mT.js +73 -0
- package/dist/AppleBundleIdDetails-DKeSAte9.js +73 -0
- package/dist/AppleBundleIdDetails-DymjrhOZ.js +73 -0
- package/dist/Command-BiB9MqbJ.js +204 -0
- package/dist/Command-D6rWEZRM.js +204 -0
- package/dist/Command-Dn0P_KOV.js +205 -0
- package/dist/Command-YJJp90ru.js +204 -0
- package/dist/CommandGame-C1oTlfdb.js +8 -0
- package/dist/CommandGame-cPaTk1wh.js +8 -0
- package/dist/CommandGame-k04mHiDl.js +8 -0
- package/dist/CommandGame-pI9VXKxi.js +8 -0
- package/dist/Create-DIaSKUpl.js +56 -0
- package/dist/CreateKeystore-BnNdeDUa.js +57 -0
- package/dist/CreateKeystore-Cf-nsK_M.js +56 -0
- package/dist/CreateKeystore-g1z6DsU5.js +56 -0
- package/dist/Import-BIOsf8AA.js +107 -0
- package/dist/JobProgress-CPkWVSlH.js +108 -0
- package/dist/JobProgress-W0QQR49T.js +108 -0
- package/dist/JobProgress-biiLhigg.js +109 -0
- package/dist/JobProgress-jmGAzvxS.js +108 -0
- package/dist/JobStatusTable-BA_q-kgE.js +75 -0
- package/dist/JobStatusTable-ByW0bN6c.js +75 -0
- package/dist/JobStatusTable-CgaTS7jS.js +75 -0
- package/dist/JobStatusTable-DqoppRro.js +75 -0
- package/dist/ProjectCredentialsTable-8kXt7sTS.js +37 -0
- package/dist/ProjectCredentialsTable-DRMK_SNw.js +37 -0
- package/dist/ProjectCredentialsTable-DfkpvTf8.js +37 -0
- package/dist/UserCredentialsTable-DMh8Wpy7.js +82 -0
- package/dist/UserCredentialsTable-DgHZJSHG.js +82 -0
- package/dist/UserCredentialsTable-TflQvTEP.js +82 -0
- package/dist/baseAppleCommand-1isaFxCQ.js +10 -0
- package/dist/baseAppleCommand-B9wyIqdL.js +10 -0
- package/dist/baseAppleCommand-DpasCbje.js +10 -0
- package/dist/baseGameAndroidCommand-6vsMpE7a.js +43 -0
- package/dist/baseGameAndroidCommand-B3LRG701.js +43 -0
- package/dist/baseGameAndroidCommand-C9BuS2Sr.js +43 -0
- package/dist/commands/apple/apiKey/create.js +10 -10
- package/dist/commands/apple/apiKey/export.js +8 -8
- package/dist/commands/apple/apiKey/import.js +8 -8
- package/dist/commands/apple/apiKey/status.js +7 -7
- package/dist/commands/apple/certificate/create.js +10 -10
- package/dist/commands/apple/certificate/export.js +8 -8
- package/dist/commands/apple/certificate/import.js +8 -8
- package/dist/commands/apple/certificate/status.js +7 -7
- package/dist/commands/apple/login.js +2 -2
- package/dist/commands/apple/status.js +6 -6
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/game/android/apiKey/connect.js +11 -11
- package/dist/commands/game/android/apiKey/create.js +13 -13
- package/dist/commands/game/android/apiKey/export.js +9 -9
- package/dist/commands/game/android/apiKey/import.js +9 -9
- package/dist/commands/game/android/apiKey/invite.js +4 -4
- package/dist/commands/game/android/apiKey/status.js +9 -9
- package/dist/commands/game/android/keyStore/create.js +12 -12
- package/dist/commands/game/android/keyStore/export.js +8 -8
- package/dist/commands/game/android/keyStore/import.js +49 -29
- package/dist/commands/game/android/keyStore/status.js +8 -8
- package/dist/commands/game/android/status.js +7 -7
- package/dist/commands/game/build/download.js +7 -7
- package/dist/commands/game/build/list.js +7 -7
- package/dist/commands/game/create.js +2 -2
- package/dist/commands/game/details.js +22 -8
- package/dist/commands/game/export.js +1 -1
- package/dist/commands/game/ios/app/addTester.js +6 -6
- package/dist/commands/game/ios/app/create.js +5 -5
- package/dist/commands/game/ios/app/status.js +9 -9
- package/dist/commands/game/ios/app/sync.js +7 -7
- package/dist/commands/game/ios/profile/create.js +10 -10
- package/dist/commands/game/ios/profile/export.js +8 -8
- package/dist/commands/game/ios/profile/import.js +8 -8
- package/dist/commands/game/ios/profile/status.js +8 -8
- package/dist/commands/game/ios/status.js +10 -10
- package/dist/commands/game/ios/wizard.js +2 -2
- package/dist/commands/game/job/list.js +7 -7
- package/dist/commands/game/job/status.js +11 -11
- package/dist/commands/game/list.js +7 -7
- package/dist/commands/game/ship.js +11 -11
- package/dist/commands/game/status.js +7 -7
- package/dist/commands/game/wizard.js +590 -35
- package/dist/commands/internal/fastlane.js +1 -1
- package/dist/commands/internal/readme.js +255 -770
- package/dist/commands/login.js +2 -2
- package/dist/commands/status.js +6 -6
- package/dist/export-B_F6vXIK.js +36 -0
- package/dist/export-C_lu1FD9.js +36 -0
- package/dist/export-rS9o87LD.js +36 -0
- package/dist/import-7T3J63j2.js +38 -0
- package/dist/import-Brg3zYmT.js +38 -0
- package/dist/import-DPbg8WvS.js +38 -0
- package/dist/import-v54PM_Qg.js +47 -0
- package/dist/index-BB7X1Pqp.js +695 -0
- package/dist/index-BQnkBr1Q.js +136 -0
- package/dist/index-BX9h2vPV.js +123 -0
- package/dist/index-BjGSEqP5.js +135 -0
- package/dist/index-Bv3x8c78.js +693 -0
- package/dist/index-ByOvCs4O.js +122 -0
- package/dist/index-BzffuqPa.js +24 -0
- package/dist/index-C9734Cj2.js +693 -0
- package/dist/index-CKYExssR.js +136 -0
- package/dist/index-Cz_KLwWf.js +136 -0
- package/dist/index-D6BH5UAM.js +135 -0
- package/dist/index-DOgF4dFK.js +24 -0
- package/dist/index-DgbQBx6x.js +122 -0
- package/dist/index-DxHPjZav.js +136 -0
- package/dist/index-m4HTrJ5J.js +135 -0
- package/dist/index-o9Y-84Rj.js +122 -0
- package/dist/upload-2naN75Zu.js +60 -0
- package/dist/upload-Cx71802W.js +60 -0
- package/dist/upload-DvAE1vDq.js +60 -0
- package/dist/useAndroidServiceAccountTestResult-BDc7XpKE.js +52 -0
- package/dist/useAndroidServiceAccountTestResult-B_ekRewZ.js +52 -0
- package/dist/useAndroidServiceAccountTestResult-Ce1x0Eh8.js +52 -0
- package/dist/useAppleApp-BEtLQa7n.js +32 -0
- package/dist/useAppleApp-CApC0-4Q.js +32 -0
- package/dist/useAppleApp-CETIcsJS.js +32 -0
- package/dist/useAppleBundleId-DXbMDRLd.js +64 -0
- package/dist/useAppleBundleId-SmzY6rkm.js +64 -0
- package/dist/useAppleBundleId-gPBzJwQg.js +64 -0
- package/dist/useJobWatching-BIG6fnTN.js +45 -0
- package/dist/useJobWatching-Cp-CYd90.js +45 -0
- package/dist/useJobWatching-D-YzSlK8.js +45 -0
- package/dist/useJobWatching-I_A3b36f.js +45 -0
- package/dist/useProjectCredentials-CKngz2rd.js +54 -0
- package/dist/useProjectCredentials-EapDge1I.js +54 -0
- package/dist/useProjectCredentials-vjedBbKl.js +54 -0
- package/dist/useWebSocket-Bep1zAVG.js +36 -0
- package/dist/useWebSocket-CBqsjHbt.js +36 -0
- package/dist/useWebSocket-rBLiZsKb.js +36 -0
- package/dist/wizard-ChPegnMW.js +133 -0
- package/npm-shrinkwrap.json +251 -223
- package/oclif.manifest.json +282 -223
- package/package.json +2 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Create or import an Android Keystore
|
|
2
|
+
|
|
3
|
+
ShipThis can create an **Android Keystore file** for you, which is used by Google Play to verify that you are the known uploader of your game. This keystore is called the upload key. After you upload a new build, Google Play internally processes and re-signs the app for Distribution with a different key called the Google Play signing key.
|
|
4
|
+
|
|
5
|
+
Read more at [https://developer.android.com/privacy-and-security/keystore](https://developer.android.com/privacy-and-security/keystore)
|
|
6
|
+
|
|
7
|
+
**Note: If you have previously published your game to Google Play, then you may want to import an existing keystore file.**
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import './index-C9734Cj2.js';
|
|
5
|
+
import 'axios';
|
|
6
|
+
import '@tanstack/react-query';
|
|
7
|
+
import 'crypto';
|
|
8
|
+
import 'fs';
|
|
9
|
+
import 'readline-sync';
|
|
10
|
+
import 'node:readline';
|
|
11
|
+
import 'node:path';
|
|
12
|
+
import 'node:url';
|
|
13
|
+
import 'react';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import 'socket.io-client';
|
|
18
|
+
import 'isomorphic-git';
|
|
19
|
+
import '@oclif/core';
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-CApC0-4Q.js';
|
|
21
|
+
import 'fast-glob';
|
|
22
|
+
import 'yazl';
|
|
23
|
+
import '@inkjs/ui';
|
|
24
|
+
import './Command-Dn0P_KOV.js';
|
|
25
|
+
import 'open';
|
|
26
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
27
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
28
|
+
import 'string-length';
|
|
29
|
+
import 'strip-ansi';
|
|
30
|
+
import './wizard-ChPegnMW.js';
|
|
31
|
+
import 'qrcode';
|
|
32
|
+
import { u as useAppleBundleId } from './useAppleBundleId-gPBzJwQg.js';
|
|
33
|
+
|
|
34
|
+
const AppleAppDetails = (props) => {
|
|
35
|
+
const { data, isLoading } = useAppleApp(props);
|
|
36
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
37
|
+
/* @__PURE__ */ jsx(Title, { children: "App Details (in the Apple Developer Portal)" }),
|
|
38
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
39
|
+
data && data.summary && /* @__PURE__ */ jsx(Table, { data: [data.summary] })
|
|
40
|
+
] });
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const AppleBundleIdDetails = (props) => {
|
|
44
|
+
const { data, isLoading } = useAppleBundleId(props);
|
|
45
|
+
const { bundleIdSummary, capabilitiesTable, shouldSyncCapabilities, capabilities } = data || {};
|
|
46
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
47
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
48
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Details (in the Apple Developer Portal)" }),
|
|
49
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
50
|
+
bundleIdSummary && /* @__PURE__ */ jsx(Table, { data: [bundleIdSummary] })
|
|
51
|
+
] }),
|
|
52
|
+
capabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
53
|
+
/* @__PURE__ */ jsx(Title, { children: "Capabilities enabled in the BundleId" }),
|
|
54
|
+
/* @__PURE__ */ jsx(
|
|
55
|
+
Table,
|
|
56
|
+
{
|
|
57
|
+
data: capabilities.map((c) => {
|
|
58
|
+
return { capability: `${c}` };
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }),
|
|
63
|
+
capabilitiesTable && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Capability Check" }),
|
|
65
|
+
/* @__PURE__ */ jsx(Table, { data: capabilitiesTable })
|
|
66
|
+
] }),
|
|
67
|
+
shouldSyncCapabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
68
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "The capabilities are out of sync with the Apple Developer Portal." }),
|
|
69
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Run shipthis game ios app sync" })
|
|
70
|
+
] })
|
|
71
|
+
] });
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export { AppleAppDetails as A, AppleBundleIdDetails as a };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import './index-Bv3x8c78.js';
|
|
5
|
+
import 'axios';
|
|
6
|
+
import '@tanstack/react-query';
|
|
7
|
+
import 'crypto';
|
|
8
|
+
import 'fs';
|
|
9
|
+
import 'readline-sync';
|
|
10
|
+
import 'node:readline';
|
|
11
|
+
import 'node:path';
|
|
12
|
+
import 'node:url';
|
|
13
|
+
import 'react';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import 'socket.io-client';
|
|
18
|
+
import 'isomorphic-git';
|
|
19
|
+
import '@oclif/core';
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-CETIcsJS.js';
|
|
21
|
+
import 'fast-glob';
|
|
22
|
+
import 'yazl';
|
|
23
|
+
import '@inkjs/ui';
|
|
24
|
+
import './Command-YJJp90ru.js';
|
|
25
|
+
import 'open';
|
|
26
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
27
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
28
|
+
import 'string-length';
|
|
29
|
+
import 'strip-ansi';
|
|
30
|
+
import 'qrcode';
|
|
31
|
+
import { u as useAppleBundleId } from './useAppleBundleId-SmzY6rkm.js';
|
|
32
|
+
|
|
33
|
+
const AppleAppDetails = (props) => {
|
|
34
|
+
const { data, isLoading } = useAppleApp(props);
|
|
35
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
36
|
+
/* @__PURE__ */ jsx(Title, { children: "App Details (in the Apple Developer Portal)" }),
|
|
37
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
38
|
+
data && data.summary && /* @__PURE__ */ jsx(Table, { data: [data.summary] })
|
|
39
|
+
] });
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const AppleBundleIdDetails = (props) => {
|
|
43
|
+
const { data, isLoading } = useAppleBundleId(props);
|
|
44
|
+
const { bundleIdSummary, capabilitiesTable, shouldSyncCapabilities, capabilities } = data || {};
|
|
45
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Details (in the Apple Developer Portal)" }),
|
|
48
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
49
|
+
bundleIdSummary && /* @__PURE__ */ jsx(Table, { data: [bundleIdSummary] })
|
|
50
|
+
] }),
|
|
51
|
+
capabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
52
|
+
/* @__PURE__ */ jsx(Title, { children: "Capabilities enabled in the BundleId" }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
Table,
|
|
55
|
+
{
|
|
56
|
+
data: capabilities.map((c) => {
|
|
57
|
+
return { capability: `${c}` };
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
] }),
|
|
62
|
+
capabilitiesTable && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
63
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Capability Check" }),
|
|
64
|
+
/* @__PURE__ */ jsx(Table, { data: capabilitiesTable })
|
|
65
|
+
] }),
|
|
66
|
+
shouldSyncCapabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
67
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "The capabilities are out of sync with the Apple Developer Portal." }),
|
|
68
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Run shipthis game ios app sync" })
|
|
69
|
+
] })
|
|
70
|
+
] });
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export { AppleAppDetails as A, AppleBundleIdDetails as a };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import './index-BB7X1Pqp.js';
|
|
5
|
+
import 'axios';
|
|
6
|
+
import '@tanstack/react-query';
|
|
7
|
+
import 'crypto';
|
|
8
|
+
import 'fs';
|
|
9
|
+
import 'readline-sync';
|
|
10
|
+
import 'node:readline';
|
|
11
|
+
import 'node:path';
|
|
12
|
+
import 'node:url';
|
|
13
|
+
import 'react';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import 'socket.io-client';
|
|
18
|
+
import 'isomorphic-git';
|
|
19
|
+
import '@oclif/core';
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-BEtLQa7n.js';
|
|
21
|
+
import 'fast-glob';
|
|
22
|
+
import 'yazl';
|
|
23
|
+
import '@inkjs/ui';
|
|
24
|
+
import './Command-D6rWEZRM.js';
|
|
25
|
+
import 'open';
|
|
26
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
27
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
28
|
+
import 'string-length';
|
|
29
|
+
import 'strip-ansi';
|
|
30
|
+
import 'qrcode';
|
|
31
|
+
import { u as useAppleBundleId } from './useAppleBundleId-DXbMDRLd.js';
|
|
32
|
+
|
|
33
|
+
const AppleAppDetails = (props) => {
|
|
34
|
+
const { data, isLoading } = useAppleApp(props);
|
|
35
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
36
|
+
/* @__PURE__ */ jsx(Title, { children: "App Details (in the Apple Developer Portal)" }),
|
|
37
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
38
|
+
data && data.summary && /* @__PURE__ */ jsx(Table, { data: [data.summary] })
|
|
39
|
+
] });
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const AppleBundleIdDetails = (props) => {
|
|
43
|
+
const { data, isLoading } = useAppleBundleId(props);
|
|
44
|
+
const { bundleIdSummary, capabilitiesTable, shouldSyncCapabilities, capabilities } = data || {};
|
|
45
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Details (in the Apple Developer Portal)" }),
|
|
48
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
49
|
+
bundleIdSummary && /* @__PURE__ */ jsx(Table, { data: [bundleIdSummary] })
|
|
50
|
+
] }),
|
|
51
|
+
capabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
52
|
+
/* @__PURE__ */ jsx(Title, { children: "Capabilities enabled in the BundleId" }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
Table,
|
|
55
|
+
{
|
|
56
|
+
data: capabilities.map((c) => {
|
|
57
|
+
return { capability: `${c}` };
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
] }),
|
|
62
|
+
capabilitiesTable && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
63
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Capability Check" }),
|
|
64
|
+
/* @__PURE__ */ jsx(Table, { data: capabilitiesTable })
|
|
65
|
+
] }),
|
|
66
|
+
shouldSyncCapabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
67
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "The capabilities are out of sync with the Apple Developer Portal." }),
|
|
68
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Run shipthis game ios app sync" })
|
|
69
|
+
] })
|
|
70
|
+
] });
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export { AppleAppDetails as A, AppleBundleIdDetails as a };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import './index-BB7X1Pqp.js';
|
|
5
|
+
import 'axios';
|
|
6
|
+
import '@tanstack/react-query';
|
|
7
|
+
import 'crypto';
|
|
8
|
+
import 'fs';
|
|
9
|
+
import 'readline-sync';
|
|
10
|
+
import 'node:readline';
|
|
11
|
+
import 'node:path';
|
|
12
|
+
import 'node:url';
|
|
13
|
+
import 'react';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import 'socket.io-client';
|
|
18
|
+
import 'isomorphic-git';
|
|
19
|
+
import '@oclif/core';
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-BEtLQa7n.js';
|
|
21
|
+
import 'fast-glob';
|
|
22
|
+
import 'yazl';
|
|
23
|
+
import '@inkjs/ui';
|
|
24
|
+
import './Command-BiB9MqbJ.js';
|
|
25
|
+
import 'open';
|
|
26
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
27
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
28
|
+
import 'string-length';
|
|
29
|
+
import 'strip-ansi';
|
|
30
|
+
import 'qrcode';
|
|
31
|
+
import { u as useAppleBundleId } from './useAppleBundleId-DXbMDRLd.js';
|
|
32
|
+
|
|
33
|
+
const AppleAppDetails = (props) => {
|
|
34
|
+
const { data, isLoading } = useAppleApp(props);
|
|
35
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
36
|
+
/* @__PURE__ */ jsx(Title, { children: "App Details (in the Apple Developer Portal)" }),
|
|
37
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
38
|
+
data && data.summary && /* @__PURE__ */ jsx(Table, { data: [data.summary] })
|
|
39
|
+
] });
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const AppleBundleIdDetails = (props) => {
|
|
43
|
+
const { data, isLoading } = useAppleBundleId(props);
|
|
44
|
+
const { bundleIdSummary, capabilitiesTable, shouldSyncCapabilities, capabilities } = data || {};
|
|
45
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Details (in the Apple Developer Portal)" }),
|
|
48
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
49
|
+
bundleIdSummary && /* @__PURE__ */ jsx(Table, { data: [bundleIdSummary] })
|
|
50
|
+
] }),
|
|
51
|
+
capabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
52
|
+
/* @__PURE__ */ jsx(Title, { children: "Capabilities enabled in the BundleId" }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
Table,
|
|
55
|
+
{
|
|
56
|
+
data: capabilities.map((c) => {
|
|
57
|
+
return { capability: `${c}` };
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
] }),
|
|
62
|
+
capabilitiesTable && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
63
|
+
/* @__PURE__ */ jsx(Title, { children: "BundleId Capability Check" }),
|
|
64
|
+
/* @__PURE__ */ jsx(Table, { data: capabilitiesTable })
|
|
65
|
+
] }),
|
|
66
|
+
shouldSyncCapabilities && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
67
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "The capabilities are out of sync with the Apple Developer Portal." }),
|
|
68
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Run shipthis game ios app sync" })
|
|
69
|
+
] })
|
|
70
|
+
] });
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export { AppleAppDetails as A, AppleBundleIdDetails as a };
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Text, useInput, Box } from 'ink';
|
|
3
|
+
import React, { useState, useEffect, useContext, useRef } from 'react';
|
|
4
|
+
import Spinner from 'ink-spinner';
|
|
5
|
+
import open from 'open';
|
|
6
|
+
import { g as getShortUUID, h as getPlatformName, s as scriptDir } from './index-Cz_KLwWf.js';
|
|
7
|
+
import { c as cacheKeys, u as useAndroidServiceAccountTestResult, K as KeyTestStatus, a as KeyTestError } from './useAndroidServiceAccountTestResult-Ce1x0Eh8.js';
|
|
8
|
+
import { p as getAuthedHeaders, q as API_URL, K as castArrayObjectDates, P as Platform, a6 as getShortDateTime, a5 as getJob, J as JobStatus, a7 as getShortTimeDelta, H as getProject, a2 as getShortAuthRequiredUrl, $ as queryClient, X as WEB_URL } from './index-BB7X1Pqp.js';
|
|
9
|
+
import '@inkjs/ui';
|
|
10
|
+
import axios from 'axios';
|
|
11
|
+
import { useQuery, QueryClientProvider } from '@tanstack/react-query';
|
|
12
|
+
import fs__default from 'fs';
|
|
13
|
+
import 'uuid';
|
|
14
|
+
import 'yazl';
|
|
15
|
+
import { setOptions, parse } from 'marked';
|
|
16
|
+
import TerminalRenderer from 'marked-terminal';
|
|
17
|
+
import path from 'path';
|
|
18
|
+
import 'qrcode';
|
|
19
|
+
import 'string-length';
|
|
20
|
+
import 'strip-ansi';
|
|
21
|
+
import 'luxon';
|
|
22
|
+
import 'fast-glob';
|
|
23
|
+
import 'socket.io-client';
|
|
24
|
+
import 'crypto';
|
|
25
|
+
import 'readline-sync';
|
|
26
|
+
import 'node:readline';
|
|
27
|
+
import 'node:path';
|
|
28
|
+
import 'node:url';
|
|
29
|
+
import 'crypto-js';
|
|
30
|
+
import 'isomorphic-git';
|
|
31
|
+
import '@oclif/core';
|
|
32
|
+
|
|
33
|
+
async function queryBuilds({ projectId, ...pageAndSortParams }) {
|
|
34
|
+
try {
|
|
35
|
+
const headers = getAuthedHeaders();
|
|
36
|
+
const url = `${API_URL}/projects/${projectId}/builds`;
|
|
37
|
+
const response = await axios.get(url, { headers, params: pageAndSortParams });
|
|
38
|
+
return {
|
|
39
|
+
...response.data,
|
|
40
|
+
data: castArrayObjectDates(response.data.data)
|
|
41
|
+
};
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.warn("queryBuilds Error", error);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function getBuildSummary(build) {
|
|
48
|
+
const filename = build.platform == Platform.IOS ? "output.ipa" : "output.aab";
|
|
49
|
+
return {
|
|
50
|
+
id: getShortUUID(build.id),
|
|
51
|
+
...getJobDetailsSummary(build.jobDetails),
|
|
52
|
+
platform: getPlatformName(build.platform),
|
|
53
|
+
jobId: getShortUUID(build.jobId),
|
|
54
|
+
createdAt: getShortDateTime(build.createdAt),
|
|
55
|
+
cmd: `shipthis game build download ${getShortUUID(build.id)} ${filename}`
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const useBuilds = (props) => {
|
|
59
|
+
const queryResult = useQuery({
|
|
60
|
+
queryKey: cacheKeys.builds(props),
|
|
61
|
+
queryFn: async () => queryBuilds(props)
|
|
62
|
+
});
|
|
63
|
+
return queryResult;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
function getJobDetailsSummary(jobDetails) {
|
|
67
|
+
const semanticVersion = jobDetails?.semanticVersion || "N/A";
|
|
68
|
+
const buildNumber = jobDetails?.buildNumber || "N/A";
|
|
69
|
+
const gitCommit = jobDetails?.gitCommitHash ? getShortUUID(jobDetails?.gitCommitHash) : "N/A";
|
|
70
|
+
const gitBranch = jobDetails?.gitBranch || "N/A";
|
|
71
|
+
return {
|
|
72
|
+
version: `${semanticVersion} (${buildNumber})`,
|
|
73
|
+
gitInfo: `${gitCommit} (${gitBranch})`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function getJobSummary(job, timeNow) {
|
|
77
|
+
const inProgress = ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
|
|
78
|
+
return {
|
|
79
|
+
id: getShortUUID(job.id),
|
|
80
|
+
...getJobDetailsSummary(job.details),
|
|
81
|
+
platform: getPlatformName(job.type),
|
|
82
|
+
status: job.status,
|
|
83
|
+
createdAt: getShortDateTime(job.createdAt),
|
|
84
|
+
runtime: getShortTimeDelta(job.createdAt, inProgress ? timeNow : job.updatedAt)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const useJob = (props) => {
|
|
88
|
+
return useQuery({
|
|
89
|
+
queryKey: cacheKeys.job(props),
|
|
90
|
+
queryFn: () => getJob(props.jobId, props.projectId)
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const CommandContext = React.createContext({
|
|
95
|
+
command: null,
|
|
96
|
+
setCommand: (command) => {
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const CommandProvider = (props) => {
|
|
100
|
+
const [command, setCommand] = useState(props.command || null);
|
|
101
|
+
return /* @__PURE__ */ jsx(CommandContext.Provider, { value: { command, setCommand }, children: props.children });
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const GameContext = React.createContext({
|
|
105
|
+
gameId: null,
|
|
106
|
+
game: null,
|
|
107
|
+
setGameId: (gameId) => {
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
const GameProvider = ({ children }) => {
|
|
111
|
+
const [gameId, setGameId] = useState(null);
|
|
112
|
+
const [game, setGame] = useState(null);
|
|
113
|
+
const { command } = React.useContext(CommandContext);
|
|
114
|
+
const handleLoad = async () => {
|
|
115
|
+
if (command) {
|
|
116
|
+
const commandGameId = await command.getGameId();
|
|
117
|
+
if (commandGameId) setGameId(commandGameId);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const handleGameIdChange = async () => {
|
|
121
|
+
if (!gameId) {
|
|
122
|
+
setGame(null);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const game2 = await getProject(gameId);
|
|
126
|
+
setGame(game2);
|
|
127
|
+
};
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
handleGameIdChange();
|
|
130
|
+
}, [gameId]);
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
handleLoad();
|
|
133
|
+
}, [command]);
|
|
134
|
+
return /* @__PURE__ */ jsx(GameContext.Provider, { value: { gameId, game, setGameId }, children });
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const entrypointPath = fs__default.realpathSync(process.argv[1]);
|
|
138
|
+
const root = path.dirname(entrypointPath);
|
|
139
|
+
const Markdown = ({ filename, templateVars, ...options }) => {
|
|
140
|
+
setOptions({ renderer: new TerminalRenderer(options) });
|
|
141
|
+
const mdPath = path.join(root, "..", "assets", "markdown", filename);
|
|
142
|
+
const mdTemplate = fs__default.readFileSync(mdPath, "utf8").trim();
|
|
143
|
+
const markdown = !templateVars ? mdTemplate : mdTemplate.replace(/\${(.*?)}/g, (_, key) => templateVars[key.trim()] || "");
|
|
144
|
+
return /* @__PURE__ */ jsx(Text, { children: parse(markdown).trim() });
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
scriptDir(import.meta);
|
|
148
|
+
const getIsAppFound = (result) => {
|
|
149
|
+
const isFound = result?.status === KeyTestStatus.SUCCESS || result?.status === KeyTestStatus.ERROR && result?.error === KeyTestError.NOT_INVITED;
|
|
150
|
+
return isFound;
|
|
151
|
+
};
|
|
152
|
+
const CreateGooglePlayGame = (props) => {
|
|
153
|
+
const { gameId } = useContext(GameContext);
|
|
154
|
+
return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(Create, { gameId, ...props }) });
|
|
155
|
+
};
|
|
156
|
+
const Create = ({ onComplete, onError, gameId, ...boxProps }) => {
|
|
157
|
+
const { data: result, isFetching } = useAndroidServiceAccountTestResult({ projectId: gameId });
|
|
158
|
+
const { data: builds } = useBuilds({ projectId: gameId, pageNumber: 0 });
|
|
159
|
+
const previousIsFound = useRef(false);
|
|
160
|
+
useEffect(() => {
|
|
161
|
+
const isFound = getIsAppFound(result);
|
|
162
|
+
if (previousIsFound.current === false && isFound) {
|
|
163
|
+
onComplete();
|
|
164
|
+
}
|
|
165
|
+
previousIsFound.current = isFound;
|
|
166
|
+
}, [result]);
|
|
167
|
+
useInput(async (input) => {
|
|
168
|
+
if (!gameId) return;
|
|
169
|
+
switch (input) {
|
|
170
|
+
case "r":
|
|
171
|
+
queryClient.invalidateQueries({
|
|
172
|
+
queryKey: cacheKeys.androidKeyTestResult({ projectId: gameId })
|
|
173
|
+
});
|
|
174
|
+
break;
|
|
175
|
+
case "d":
|
|
176
|
+
const dashUrl = await getShortAuthRequiredUrl(`/games/${getShortUUID(gameId)}/builds`);
|
|
177
|
+
await open(dashUrl);
|
|
178
|
+
}
|
|
179
|
+
if (input !== "r") return;
|
|
180
|
+
queryClient.invalidateQueries({
|
|
181
|
+
queryKey: cacheKeys.androidKeyTestResult({ projectId: gameId })
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
const initialBuild = builds?.data.find((build) => build.platform === Platform.ANDROID);
|
|
185
|
+
const downloadCmd = initialBuild ? `${getBuildSummary(initialBuild).cmd}` : "";
|
|
186
|
+
const templateVars = {
|
|
187
|
+
downloadCmd,
|
|
188
|
+
dashboardURL: new URL(`/games/${getShortUUID(gameId)}/builds`, WEB_URL).toString()
|
|
189
|
+
};
|
|
190
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 1, ...boxProps, children: [
|
|
191
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
|
|
192
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: isFetching ? "Checking..." : "ShipThis has not detected your game in Google Play. Press R to test again." }),
|
|
193
|
+
isFetching && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
|
|
194
|
+
] }),
|
|
195
|
+
/* @__PURE__ */ jsx(Markdown, { filename: "create-google-play-game.md", templateVars })
|
|
196
|
+
] }) });
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const Command = ({ children, command }) => {
|
|
200
|
+
const width = Math.min(160, process.stdout.columns || 80);
|
|
201
|
+
return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(CommandProvider, { command, children: /* @__PURE__ */ jsx(Box, { width, flexDirection: "column", children }) }) });
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
export { Command as C, GameProvider as G, Markdown as M, getBuildSummary as a, GameContext as b, CommandContext as c, useBuilds as d, CreateGooglePlayGame as e, getJobSummary as g, queryBuilds as q, useJob as u };
|