shipthis 0.1.11 → 0.1.12

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 (115) hide show
  1. package/npm-shrinkwrap.json +2 -2
  2. package/oclif.manifest.json +1 -83
  3. package/package.json +1 -1
  4. package/dist/AppleBundleIdDetails-C0XqjxKJ.js +0 -72
  5. package/dist/AppleBundleIdDetails-CjP5y0cj.js +0 -74
  6. package/dist/AppleBundleIdDetails-CztWY_mT.js +0 -73
  7. package/dist/AppleBundleIdDetails-DKeSAte9.js +0 -73
  8. package/dist/AppleBundleIdDetails-Df30MPFC.js +0 -73
  9. package/dist/AppleBundleIdDetails-Dxo99Sgu.js +0 -72
  10. package/dist/Command-1YAl_0zS.js +0 -204
  11. package/dist/Command-Cl-JfhTy.js +0 -203
  12. package/dist/Command-D6rWEZRM.js +0 -204
  13. package/dist/Command-Dn0P_KOV.js +0 -205
  14. package/dist/Command-DxmQn3XT.js +0 -204
  15. package/dist/Command-YJJp90ru.js +0 -204
  16. package/dist/CommandGame--SAa3wEL.js +0 -8
  17. package/dist/CommandGame-CZUx_VQu.js +0 -8
  18. package/dist/CommandGame-DspVLTPZ.js +0 -8
  19. package/dist/CommandGame-cPaTk1wh.js +0 -8
  20. package/dist/CommandGame-k04mHiDl.js +0 -8
  21. package/dist/CommandGame-pI9VXKxi.js +0 -8
  22. package/dist/CreateKeystore-BnNdeDUa.js +0 -57
  23. package/dist/CreateKeystore-BqJdpvsI.js +0 -56
  24. package/dist/CreateKeystore-Cf-nsK_M.js +0 -56
  25. package/dist/CreateKeystore-D8uTRamD.js +0 -56
  26. package/dist/CreateKeystore-Dm0KVh85.js +0 -56
  27. package/dist/CreateKeystore-g1z6DsU5.js +0 -56
  28. package/dist/JobProgress-CPkWVSlH.js +0 -108
  29. package/dist/JobProgress-Dk0UoNah.js +0 -108
  30. package/dist/JobProgress-biiLhigg.js +0 -109
  31. package/dist/JobProgress-jmGAzvxS.js +0 -108
  32. package/dist/JobStatusTable-BA_q-kgE.js +0 -75
  33. package/dist/JobStatusTable-ByW0bN6c.js +0 -75
  34. package/dist/JobStatusTable-CgaTS7jS.js +0 -75
  35. package/dist/JobStatusTable-q4atKzhu.js +0 -75
  36. package/dist/ProjectCredentialsTable-BIWBAXCh.js +0 -37
  37. package/dist/ProjectCredentialsTable-Ch8022rs.js +0 -37
  38. package/dist/ProjectCredentialsTable-DRMK_SNw.js +0 -37
  39. package/dist/ProjectCredentialsTable-DfkpvTf8.js +0 -37
  40. package/dist/UserCredentialsTable-CeJS3_hd.js +0 -82
  41. package/dist/UserCredentialsTable-DMh8Wpy7.js +0 -82
  42. package/dist/UserCredentialsTable-DgHZJSHG.js +0 -82
  43. package/dist/UserCredentialsTable-ysmM5dlV.js +0 -82
  44. package/dist/baseAppleCommand-1isaFxCQ.js +0 -10
  45. package/dist/baseAppleCommand-B3WQtlx-.js +0 -10
  46. package/dist/baseAppleCommand-D-G4h8zQ.js +0 -10
  47. package/dist/baseAppleCommand-DpasCbje.js +0 -10
  48. package/dist/baseGameAndroidCommand-B-CFhPnE.js +0 -43
  49. package/dist/baseGameAndroidCommand-B3LRG701.js +0 -43
  50. package/dist/baseGameAndroidCommand-C9BuS2Sr.js +0 -43
  51. package/dist/baseGameAndroidCommand-DD0H8iy-.js +0 -43
  52. package/dist/commands/game/android/wizard.js +0 -509
  53. package/dist/export-BDxGDZdh.js +0 -36
  54. package/dist/export-B_F6vXIK.js +0 -36
  55. package/dist/export-BiLHgSJ9.js +0 -36
  56. package/dist/export-C_lu1FD9.js +0 -36
  57. package/dist/import-7T3J63j2.js +0 -38
  58. package/dist/import-Brg3zYmT.js +0 -38
  59. package/dist/import-BrlJuE2Z.js +0 -38
  60. package/dist/import-CxNikF1c.js +0 -38
  61. package/dist/import-DPbg8WvS.js +0 -38
  62. package/dist/index-B5XHQfs2.js +0 -122
  63. package/dist/index-B6V7vGOj.js +0 -136
  64. package/dist/index-BDFKyTPb.js +0 -24
  65. package/dist/index-BL-1G60K.js +0 -135
  66. package/dist/index-BQRxiyqn.js +0 -693
  67. package/dist/index-BQnkBr1Q.js +0 -136
  68. package/dist/index-BX9h2vPV.js +0 -123
  69. package/dist/index-BjGSEqP5.js +0 -135
  70. package/dist/index-BuZmCvZh.js +0 -24
  71. package/dist/index-Bv3x8c78.js +0 -693
  72. package/dist/index-ByOvCs4O.js +0 -122
  73. package/dist/index-BzffuqPa.js +0 -24
  74. package/dist/index-C9734Cj2.js +0 -693
  75. package/dist/index-CKYExssR.js +0 -136
  76. package/dist/index-CgBgZUkL.js +0 -144
  77. package/dist/index-DBrQda8r.js +0 -122
  78. package/dist/index-DE2Hvx2o.js +0 -122
  79. package/dist/index-DdABTtYO.js +0 -693
  80. package/dist/index-DgbQBx6x.js +0 -122
  81. package/dist/index-DxHPjZav.js +0 -136
  82. package/dist/index-X__XH_Fd.js +0 -144
  83. package/dist/index-m4HTrJ5J.js +0 -135
  84. package/dist/index-wyPoxiTc.js +0 -136
  85. package/dist/upload-CMo3hUhl.js +0 -60
  86. package/dist/upload-Cx71802W.js +0 -60
  87. package/dist/upload-DvAE1vDq.js +0 -60
  88. package/dist/upload-LXRr4pMa.js +0 -60
  89. package/dist/useAndroidServiceAccountTestResult-BDc7XpKE.js +0 -52
  90. package/dist/useAndroidServiceAccountTestResult-B_ekRewZ.js +0 -52
  91. package/dist/useAndroidServiceAccountTestResult-D_30xIJA.js +0 -52
  92. package/dist/useAndroidServiceAccountTestResult-InDf5WSl.js +0 -52
  93. package/dist/useAppleApp-CApC0-4Q.js +0 -32
  94. package/dist/useAppleApp-CETIcsJS.js +0 -32
  95. package/dist/useAppleApp-DgE0wEaq.js +0 -32
  96. package/dist/useAppleApp-DnSjUfSs.js +0 -32
  97. package/dist/useAppleBundleId-BNI8swhC.js +0 -64
  98. package/dist/useAppleBundleId-DtLODy3p.js +0 -64
  99. package/dist/useAppleBundleId-SmzY6rkm.js +0 -64
  100. package/dist/useAppleBundleId-gPBzJwQg.js +0 -64
  101. package/dist/useJobWatching-BIG6fnTN.js +0 -45
  102. package/dist/useJobWatching-BcBJ5dy1.js +0 -43
  103. package/dist/useJobWatching-Bz1e6xOv.js +0 -43
  104. package/dist/useJobWatching-Cp-CYd90.js +0 -45
  105. package/dist/useJobWatching-D-YzSlK8.js +0 -45
  106. package/dist/useJobWatching-P5oC7mNB.js +0 -45
  107. package/dist/useProjectCredentials-B5ZmpIxL.js +0 -54
  108. package/dist/useProjectCredentials-BRffcsO3.js +0 -54
  109. package/dist/useProjectCredentials-CKngz2rd.js +0 -54
  110. package/dist/useProjectCredentials-EapDge1I.js +0 -54
  111. package/dist/useWebSocket-Bep1zAVG.js +0 -36
  112. package/dist/useWebSocket-D8PojLtx.js +0 -36
  113. package/dist/useWebSocket-DoImIdTy.js +0 -36
  114. package/dist/useWebSocket-rBLiZsKb.js +0 -36
  115. package/dist/wizard-ChPegnMW.js +0 -133
@@ -1,38 +0,0 @@
1
- import axios from 'axios';
2
- import { promises } from 'fs';
3
- import { o as getAuthedHeaders, p as API_URL } from './index-C9734Cj2.js';
4
-
5
- async function getNewImportTicket(projectId) {
6
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
7
- const headers = getAuthedHeaders();
8
- const { data: importInfo } = await axios({
9
- method: "post",
10
- url,
11
- headers
12
- });
13
- return importInfo;
14
- }
15
- async function importCredential({ projectId, zipPath, type, platform }) {
16
- const importTicket = await getNewImportTicket(projectId);
17
- const zipBuffer = await promises.readFile(zipPath);
18
- await axios.put(importTicket.url, zipBuffer, {
19
- headers: {
20
- "Content-length": zipBuffer.length,
21
- "Content-Type": "application/zip"
22
- }
23
- });
24
- const headers = getAuthedHeaders();
25
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import` : `${API_URL}/credentials/import`;
26
- return await axios({
27
- method: "post",
28
- url,
29
- headers,
30
- data: {
31
- uuid: importTicket.uuid,
32
- type,
33
- platform
34
- }
35
- });
36
- }
37
-
38
- export { importCredential as i };
@@ -1,38 +0,0 @@
1
- import axios from 'axios';
2
- import { promises } from 'fs';
3
- import { p as getAuthedHeaders, q as API_URL } from './index-DdABTtYO.js';
4
-
5
- async function getNewImportTicket(projectId) {
6
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
7
- const headers = getAuthedHeaders();
8
- const { data: importInfo } = await axios({
9
- method: "post",
10
- url,
11
- headers
12
- });
13
- return importInfo;
14
- }
15
- async function importCredential({ projectId, zipPath, type, platform }) {
16
- const importTicket = await getNewImportTicket(projectId);
17
- const zipBuffer = await promises.readFile(zipPath);
18
- await axios.put(importTicket.url, zipBuffer, {
19
- headers: {
20
- "Content-length": zipBuffer.length,
21
- "Content-Type": "application/zip"
22
- }
23
- });
24
- const headers = getAuthedHeaders();
25
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import` : `${API_URL}/credentials/import`;
26
- return await axios({
27
- method: "post",
28
- url,
29
- headers,
30
- data: {
31
- uuid: importTicket.uuid,
32
- type,
33
- platform
34
- }
35
- });
36
- }
37
-
38
- export { importCredential as i };
@@ -1,38 +0,0 @@
1
- import axios from 'axios';
2
- import { promises } from 'fs';
3
- import { p as getAuthedHeaders, q as API_URL } from './index-BQRxiyqn.js';
4
-
5
- async function getNewImportTicket(projectId) {
6
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
7
- const headers = getAuthedHeaders();
8
- const { data: importInfo } = await axios({
9
- method: "post",
10
- url,
11
- headers
12
- });
13
- return importInfo;
14
- }
15
- async function importCredential({ projectId, zipPath, type, platform }) {
16
- const importTicket = await getNewImportTicket(projectId);
17
- const zipBuffer = await promises.readFile(zipPath);
18
- await axios.put(importTicket.url, zipBuffer, {
19
- headers: {
20
- "Content-length": zipBuffer.length,
21
- "Content-Type": "application/zip"
22
- }
23
- });
24
- const headers = getAuthedHeaders();
25
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import` : `${API_URL}/credentials/import`;
26
- return await axios({
27
- method: "post",
28
- url,
29
- headers,
30
- data: {
31
- uuid: importTicket.uuid,
32
- type,
33
- platform
34
- }
35
- });
36
- }
37
-
38
- export { importCredential as i };
@@ -1,38 +0,0 @@
1
- import axios from 'axios';
2
- import { promises } from 'fs';
3
- import { p as getAuthedHeaders, q as API_URL } from './index-Bv3x8c78.js';
4
-
5
- async function getNewImportTicket(projectId) {
6
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
7
- const headers = getAuthedHeaders();
8
- const { data: importInfo } = await axios({
9
- method: "post",
10
- url,
11
- headers
12
- });
13
- return importInfo;
14
- }
15
- async function importCredential({ projectId, zipPath, type, platform }) {
16
- const importTicket = await getNewImportTicket(projectId);
17
- const zipBuffer = await promises.readFile(zipPath);
18
- await axios.put(importTicket.url, zipBuffer, {
19
- headers: {
20
- "Content-length": zipBuffer.length,
21
- "Content-Type": "application/zip"
22
- }
23
- });
24
- const headers = getAuthedHeaders();
25
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import` : `${API_URL}/credentials/import`;
26
- return await axios({
27
- method: "post",
28
- url,
29
- headers,
30
- data: {
31
- uuid: importTicket.uuid,
32
- type,
33
- platform
34
- }
35
- });
36
- }
37
-
38
- export { importCredential as i };
@@ -1,122 +0,0 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import { Text, useInput, Box } from 'ink';
3
- import open from 'open';
4
- import { useState, useEffect, useContext } from 'react';
5
- import { S as getGoogleStatus, a1 as getShortAuthRequiredUrl, a2 as getGoogleAuthUrl, Z as WEB_URL } from './index-BQRxiyqn.js';
6
- import 'crypto';
7
- import 'fs';
8
- import 'readline-sync';
9
- import 'node:readline';
10
- import 'node:path';
11
- import 'node:url';
12
- import 'axios';
13
- import { useQuery } from '@tanstack/react-query';
14
- import 'crypto-js';
15
- import 'uuid';
16
- import 'luxon';
17
- import 'fast-glob';
18
- import 'yazl';
19
- import 'socket.io-client';
20
- import { u as useWebSocket } from './useWebSocket-DoImIdTy.js';
21
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-D_30xIJA.js';
22
- import 'isomorphic-git';
23
- import '@oclif/core';
24
- import { a as GameContext, M as Markdown } from './Command-Cl-JfhTy.js';
25
- import 'ink-spinner';
26
- import '@inkjs/ui';
27
- import qrcode from 'qrcode';
28
- import 'string-length';
29
- import 'strip-ansi';
30
-
31
- const useGoogleStatus = () => {
32
- return useQuery({
33
- queryKey: cacheKeys.googleStatus(),
34
- queryFn: getGoogleStatus
35
- });
36
- };
37
-
38
- function useGoogleStatusWatching({
39
- projectId,
40
- isWatching,
41
- onGoogleStatusUpdate
42
- }) {
43
- const [wsGoogleStatus, setWsGoogleStatus] = useState(null);
44
- const listener = {
45
- getPattern: () => `project.${projectId}:google-status`,
46
- eventHandler: async (pattern, data2) => {
47
- setWsGoogleStatus(data2);
48
- if (onGoogleStatusUpdate) onGoogleStatusUpdate(data2);
49
- }
50
- };
51
- useWebSocket([listener] );
52
- const { isLoading, data: googleStatus } = useGoogleStatus();
53
- useEffect(() => {
54
- setWsGoogleStatus(null);
55
- }, [projectId, isWatching, googleStatus]);
56
- const fetchedGoogleStatus = googleStatus ? googleStatus : null;
57
- const data = wsGoogleStatus ? wsGoogleStatus : fetchedGoogleStatus;
58
- return {
59
- isLoading,
60
- data
61
- };
62
- }
63
-
64
- const QRCodeTerminal = ({ url }) => {
65
- const [code, setCode] = useState(null);
66
- const handleLoad = async () => {
67
- const codeString = await qrcode.toString(url, { type: "terminal", errorCorrectionLevel: "L", small: true });
68
- setCode(codeString);
69
- };
70
- useEffect(() => {
71
- handleLoad();
72
- }, []);
73
- return /* @__PURE__ */ jsx(Fragment, { children: code && /* @__PURE__ */ jsx(Text, { children: code }) });
74
- };
75
-
76
- async function getConnectUrl(gameId, helpPage) {
77
- const helpPagePath = `/docs/android?gameId=${gameId}#2-connect-shipthis-with-google`;
78
- const url = helpPage ? await getShortAuthRequiredUrl(helpPagePath) : await getGoogleAuthUrl(gameId);
79
- return url;
80
- }
81
- const GoogleAuthQRCode = ({ gameId, helpPage }) => {
82
- const [url, setUrl] = useState(null);
83
- const handleLoad = async () => {
84
- const url2 = await getConnectUrl(gameId, helpPage);
85
- setUrl(url2);
86
- };
87
- useEffect(() => {
88
- handleLoad();
89
- }, []);
90
- return /* @__PURE__ */ jsx(Fragment, { children: url && /* @__PURE__ */ jsx(QRCodeTerminal, { url }) });
91
- };
92
-
93
- const ConnectGoogle = (props) => {
94
- const { gameId } = useContext(GameContext);
95
- return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(ConnectForGame, { gameId, ...props }) });
96
- };
97
- const ConnectForGame = ({ onComplete, onError, helpPage, gameId, ...boxProps }) => {
98
- useGoogleStatusWatching({
99
- projectId: gameId,
100
- isWatching: true,
101
- onGoogleStatusUpdate: (status) => {
102
- if (status.isAuthenticated) return onComplete();
103
- }
104
- });
105
- useInput(async (input) => {
106
- if (!gameId) return;
107
- if (input !== "d") return;
108
- const url = await getConnectUrl(gameId, true);
109
- await open(url);
110
- });
111
- const templateVars = {
112
- privacyURL: new URL("/privacy", WEB_URL).toString()
113
- };
114
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 1, ...boxProps, children: [
115
- /* @__PURE__ */ jsx(Markdown, { filename: "privacy-notification.md", templateVars }),
116
- /* @__PURE__ */ jsx(Text, { children: "Scan the QR code below to connect your Google account to ShipThis:" }),
117
- gameId && /* @__PURE__ */ jsx(GoogleAuthQRCode, { gameId, helpPage: !!helpPage }),
118
- /* @__PURE__ */ jsx(Text, { children: "Or press D to sign-in using your browser" })
119
- ] });
120
- };
121
-
122
- export { ConnectGoogle as C };
@@ -1,136 +0,0 @@
1
- import crypto from 'crypto';
2
- import fs__default from 'fs';
3
- import readlineSync from 'readline-sync';
4
- import { promises } from 'node:readline';
5
- import path from 'node:path';
6
- import { fileURLToPath } from 'node:url';
7
- import { K as JobStatus, P as Platform, L as JobStage, M as LogLevel } from './index-BQRxiyqn.js';
8
- import 'react';
9
- import 'axios';
10
- import '@tanstack/react-query';
11
- import 'luxon';
12
- import 'isomorphic-git';
13
- import '@oclif/core';
14
- import 'crypto-js';
15
- import 'uuid';
16
- import 'fast-glob';
17
- import 'yazl';
18
- import 'socket.io-client';
19
-
20
- function getShortUUID(originalUuid) {
21
- return originalUuid.slice(0, 8);
22
- }
23
- function getStageColor(stage) {
24
- switch (stage) {
25
- case JobStage.SETUP:
26
- return "#FFB3B3";
27
- // pastel red
28
- case JobStage.CONFIGURE:
29
- return "#FFD9B3";
30
- // pastel orange
31
- case JobStage.EXPORT:
32
- return "#FFFACD";
33
- // pastel yellow
34
- case JobStage.BUILD:
35
- return "#B3FFB3";
36
- // pastel green
37
- case JobStage.PUBLISH:
38
- return "#B3D9FF";
39
- }
40
- }
41
- function getMessageColor(level) {
42
- switch (level) {
43
- case LogLevel.INFO:
44
- return "white";
45
- case LogLevel.WARN:
46
- return "yellow";
47
- case LogLevel.ERROR:
48
- return "red";
49
- }
50
- }
51
- function getJobStatusColor(status) {
52
- switch (status) {
53
- case JobStatus.PENDING:
54
- return "yellow";
55
- case JobStatus.PROCESSING:
56
- return "blue";
57
- case JobStatus.COMPLETED:
58
- return "green";
59
- case JobStatus.FAILED:
60
- return "red";
61
- }
62
- }
63
- async function getFileHash(filename) {
64
- return new Promise((resolve, reject) => {
65
- const hash = crypto.createHash("sha256");
66
- const rs = fs__default.createReadStream(filename);
67
- rs.on("error", reject);
68
- rs.on("data", (chunk) => hash.update(chunk));
69
- rs.on("end", () => resolve(hash.digest("hex")));
70
- });
71
- }
72
- function isValidSemVer(versionString) {
73
- const [semVer, major, minor, patch, prerelease, buildmetadata] = versionString.match(
74
- /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
75
- ) ?? [];
76
- return !!semVer;
77
- }
78
- function makeHumanReadable(rawObject) {
79
- const getLabel = (key) => {
80
- const words = key.split(/(?=[A-Z])/);
81
- return words.map((word) => word[0].toUpperCase() + word.slice(1)).join(" ").replaceAll(" ", " ");
82
- };
83
- const withLabels = Object.entries(rawObject).reduce((acc, [key, value]) => {
84
- acc[getLabel(key)] = value;
85
- return acc;
86
- }, {});
87
- return withLabels;
88
- }
89
- function getPlatformName(platform) {
90
- switch (platform) {
91
- case Platform.IOS:
92
- return "iOS";
93
- case Platform.ANDROID:
94
- return "Android";
95
- default:
96
- throw new Error(`Unknown platform: ${platform}`);
97
- }
98
- }
99
- async function getMaskedInput(message) {
100
- const password = readlineSync.question(message, {
101
- hideEchoBack: true
102
- // This will hide the input as the user types
103
- });
104
- return password;
105
- }
106
- async function getInput(message) {
107
- const rl = promises.createInterface({
108
- input: process.stdin,
109
- output: process.stdout
110
- });
111
- const answer = await rl.question(message);
112
- rl.close();
113
- return answer;
114
- }
115
- function generatePackageName(gameName) {
116
- let normalizedGameName = gameName.trim().toLowerCase();
117
- normalizedGameName = normalizedGameName.replace(/[\s\-_]+/g, ".");
118
- normalizedGameName = normalizedGameName.replace(/[^a-z0-9\.]/g, "");
119
- normalizedGameName = normalizedGameName.replace(/\.+/g, ".");
120
- normalizedGameName = normalizedGameName.replace(/^\./, "").replace(/\.$/, "");
121
- if (/^[0-9]/.test(normalizedGameName)) {
122
- normalizedGameName = "app." + normalizedGameName;
123
- }
124
- const prefix = "com.";
125
- if (normalizedGameName === "") {
126
- return null;
127
- }
128
- return prefix + normalizedGameName;
129
- }
130
- function scriptDir(importMeta) {
131
- const filename = fileURLToPath(importMeta.url);
132
- const dirname = path.dirname(filename);
133
- return dirname;
134
- }
135
-
136
- export { getInput as a, generatePackageName as b, getFileHash as c, getJobStatusColor as d, getMaskedInput as e, getStageColor as f, getShortUUID as g, getMessageColor as h, isValidSemVer as i, getPlatformName as j, makeHumanReadable as m, scriptDir as s };
@@ -1,24 +0,0 @@
1
- import axios from 'axios';
2
- import { p as getAuthedHeaders, q as API_URL, H as castArrayObjectDates } from './index-DdABTtYO.js';
3
- import 'fs';
4
-
5
- async function getUserCredentials(pageSize = 100) {
6
- const headers = getAuthedHeaders();
7
- const { data } = await axios({
8
- method: "get",
9
- url: `${API_URL}/credentials?pageSize=${pageSize}`,
10
- headers
11
- });
12
- return castArrayObjectDates(data.data);
13
- }
14
- async function getProjectCredentials(projectId, pageSize = 100) {
15
- const headers = getAuthedHeaders();
16
- const { data } = await axios({
17
- method: "get",
18
- url: `${API_URL}/projects/${projectId}/credentials?pageSize=${pageSize}`,
19
- headers
20
- });
21
- return castArrayObjectDates(data.data);
22
- }
23
-
24
- export { getProjectCredentials as a, getUserCredentials as g };
@@ -1,135 +0,0 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import { Box, Text } from 'ink';
3
- import { useState, useRef, useEffect, useContext } from 'react';
4
- import Spinner from 'ink-spinner';
5
- import { b as GameContext } from './Command-DxmQn3XT.js';
6
- import { p as getAuthedHeaders, q as API_URL, M as castObjectDates, P as Platform, C as CredentialsType, Q as getGoogleStatus } from './index-DdABTtYO.js';
7
- import axios from 'axios';
8
- import 'crypto-js';
9
- import 'uuid';
10
- import 'luxon';
11
- import 'fs';
12
- import '@inkjs/ui';
13
- import { useQuery, useQueryClient } from '@tanstack/react-query';
14
- import 'open';
15
- import 'crypto';
16
- import 'readline-sync';
17
- import 'node:readline';
18
- import 'node:path';
19
- import 'node:url';
20
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-InDf5WSl.js';
21
- import 'fast-glob';
22
- import 'yazl';
23
- import 'socket.io-client';
24
- import 'isomorphic-git';
25
- import '@oclif/core';
26
- import { u as useWebSocket } from './useWebSocket-D8PojLtx.js';
27
- import { u as useProjectCredentials } from './useProjectCredentials-BRffcsO3.js';
28
- import { P as ProgressSpinner } from './ProgressSpinner-6pw1T8Iw.js';
29
- import 'qrcode';
30
- import 'string-length';
31
- import 'strip-ansi';
32
-
33
- async function fetchStatus({ projectId }) {
34
- try {
35
- if (!projectId) throw new Error("projectId is required");
36
- const headers = getAuthedHeaders();
37
- const url = `${API_URL}/projects/${projectId}/credentials/android/key/status/`;
38
- const response = await axios.get(url, { headers });
39
- return castObjectDates(response.data);
40
- } catch (error) {
41
- console.warn("fetchStatus Error", error);
42
- throw error;
43
- }
44
- }
45
- const useAndroidServiceAccountSetupStatus = (props) => {
46
- return useQuery({
47
- queryKey: cacheKeys.androidSetupStatus(props),
48
- queryFn: () => fetchStatus(props),
49
- // Status changes frequently, so we want to keep it fresh
50
- refetchInterval: 1e3 * 5,
51
- staleTime: 1e3 * 5
52
- });
53
- };
54
-
55
- const ERR_NOT_AUTHENTICATED = "You must be connected to Google to create a Service Account Key";
56
- const useHasServiceAccountKey = (projectId) => {
57
- const { data, isSuccess } = useProjectCredentials({ projectId, platform: Platform.ANDROID });
58
- return isSuccess && data.data.some((cred) => cred.isActive && cred.platform === Platform.ANDROID && cred.type == CredentialsType.KEY);
59
- };
60
- const useAndroidServiceAccount = ({ projectId, onError, onComplete }) => {
61
- const queryClient = useQueryClient();
62
- const [isStarting, setIsStarting] = useState(false);
63
- const hasServiceAccountKey = useHasServiceAccountKey(projectId);
64
- const listener = {
65
- getPattern: () => `project.${projectId}:android-setup-status`,
66
- eventHandler: async (pattern, data) => {
67
- const key = cacheKeys.androidSetupStatus({ projectId });
68
- queryClient.setQueryData(key, () => data);
69
- }
70
- };
71
- useWebSocket([listener]);
72
- const { data: setupStatus } = useAndroidServiceAccountSetupStatus({ projectId });
73
- const prevSetupStatusRef = useRef("unknown");
74
- useEffect(() => {
75
- if (["running", "queued"].includes(prevSetupStatusRef.current)) {
76
- if (setupStatus?.status === "complete") onComplete();
77
- if (setupStatus?.status === "error") onError(new Error(setupStatus.errorMessage));
78
- }
79
- prevSetupStatusRef.current = setupStatus?.status || "unknown";
80
- }, [setupStatus]);
81
- const handleStart = async () => {
82
- try {
83
- setIsStarting(true);
84
- const currentStatus = await getGoogleStatus();
85
- if (!currentStatus.isAuthenticated) throw new Error(ERR_NOT_AUTHENTICATED);
86
- const headers = getAuthedHeaders();
87
- const androidKeyApiBase = `${API_URL}/projects/${projectId}/credentials/android/key`;
88
- const startUrl = `${androidKeyApiBase}/setup/`;
89
- const { data: updatedStatus } = await axios.post(startUrl, {}, { headers });
90
- queryClient.invalidateQueries({
91
- queryKey: cacheKeys.projectCredentials({ projectId, pageNumber: 0 })
92
- });
93
- await queryClient.setQueryData(cacheKeys.androidSetupStatus({ projectId }), (_) => updatedStatus);
94
- setIsStarting(false);
95
- return true;
96
- } catch (error) {
97
- setIsStarting(false);
98
- console.warn("useAndroidServiceAccount.handleStart Error", error);
99
- onError(error);
100
- return false;
101
- }
102
- };
103
- const isCreating = isStarting || setupStatus?.status === "queued" || setupStatus?.status === "running";
104
- return {
105
- handleStart,
106
- setupStatus,
107
- isCreating,
108
- hasServiceAccountKey
109
- };
110
- };
111
-
112
- const CreateServiceAccountKey = (props) => {
113
- const { gameId } = useContext(GameContext);
114
- return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(CreateForGame, { gameId, ...props }) });
115
- };
116
- const CreateForGame = ({ onComplete, onError, gameId, ...boxProps }) => {
117
- const [didStart, setDidStart] = useState(false);
118
- const { handleStart, setupStatus, isCreating } = useAndroidServiceAccount({
119
- projectId: gameId,
120
- onError,
121
- onComplete
122
- });
123
- useEffect(() => {
124
- handleStart().then(() => setDidStart(true));
125
- }, [gameId]);
126
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 1, ...boxProps, children: [
127
- /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
128
- /* @__PURE__ */ jsx(Text, { children: "Creating a Service Account and API Key..." }),
129
- isCreating && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
130
- ] }),
131
- didStart && /* @__PURE__ */ jsx(ProgressSpinner, { progress: (setupStatus?.progress || 0) * 100, spinnerType: "dots" })
132
- ] }) });
133
- };
134
-
135
- export { CreateServiceAccountKey as C };