shipthis 0.1.10 → 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 (155) hide show
  1. package/assets/markdown/create-or-import-keystore.md +7 -0
  2. package/dist/{AppleBundleIdDetails-DKeSAte9.js → AppleBundleIdDetails-DymjrhOZ.js} +1 -1
  3. package/dist/{CommandGame--SAa3wEL.js → CommandGame-C1oTlfdb.js} +1 -1
  4. package/dist/{CreateKeystore-g1z6DsU5.js → Create-DIaSKUpl.js} +5 -5
  5. package/dist/Import-BIOsf8AA.js +107 -0
  6. package/dist/{JobProgress-jmGAzvxS.js → JobProgress-W0QQR49T.js} +2 -2
  7. package/dist/{JobStatusTable-ByW0bN6c.js → JobStatusTable-DqoppRro.js} +2 -2
  8. package/dist/commands/apple/apiKey/create.js +4 -4
  9. package/dist/commands/apple/apiKey/export.js +3 -3
  10. package/dist/commands/apple/apiKey/import.js +4 -4
  11. package/dist/commands/apple/apiKey/status.js +3 -3
  12. package/dist/commands/apple/certificate/create.js +4 -4
  13. package/dist/commands/apple/certificate/export.js +3 -3
  14. package/dist/commands/apple/certificate/import.js +4 -4
  15. package/dist/commands/apple/certificate/status.js +3 -3
  16. package/dist/commands/apple/status.js +3 -3
  17. package/dist/commands/game/android/apiKey/connect.js +6 -6
  18. package/dist/commands/game/android/apiKey/create.js +6 -6
  19. package/dist/commands/game/android/apiKey/export.js +3 -3
  20. package/dist/commands/game/android/apiKey/import.js +4 -4
  21. package/dist/commands/game/android/apiKey/status.js +3 -3
  22. package/dist/commands/game/android/keyStore/create.js +7 -7
  23. package/dist/commands/game/android/keyStore/export.js +3 -3
  24. package/dist/commands/game/android/keyStore/import.js +45 -25
  25. package/dist/commands/game/android/keyStore/status.js +3 -3
  26. package/dist/commands/game/android/status.js +5 -5
  27. package/dist/commands/game/build/download.js +4 -4
  28. package/dist/commands/game/build/list.js +4 -4
  29. package/dist/commands/game/details.js +3 -3
  30. package/dist/commands/game/ios/app/addTester.js +3 -3
  31. package/dist/commands/game/ios/app/create.js +3 -3
  32. package/dist/commands/game/ios/app/status.js +4 -4
  33. package/dist/commands/game/ios/app/sync.js +3 -3
  34. package/dist/commands/game/ios/profile/create.js +4 -4
  35. package/dist/commands/game/ios/profile/export.js +3 -3
  36. package/dist/commands/game/ios/profile/import.js +4 -4
  37. package/dist/commands/game/ios/profile/status.js +3 -3
  38. package/dist/commands/game/ios/status.js +6 -6
  39. package/dist/commands/game/job/list.js +5 -5
  40. package/dist/commands/game/job/status.js +7 -7
  41. package/dist/commands/game/list.js +5 -5
  42. package/dist/commands/game/ship.js +7 -7
  43. package/dist/commands/game/status.js +5 -5
  44. package/dist/commands/game/wizard.js +116 -17
  45. package/dist/commands/status.js +3 -3
  46. package/dist/{import-7T3J63j2.js → import-v54PM_Qg.js} +11 -2
  47. package/dist/{index-m4HTrJ5J.js → index-D6BH5UAM.js} +3 -3
  48. package/dist/{index-DgbQBx6x.js → index-o9Y-84Rj.js} +1 -1
  49. package/dist/{useJobWatching-D-YzSlK8.js → useJobWatching-I_A3b36f.js} +1 -1
  50. package/npm-shrinkwrap.json +2 -2
  51. package/oclif.manifest.json +27 -86
  52. package/package.json +1 -1
  53. package/dist/AppleBundleIdDetails-C0XqjxKJ.js +0 -72
  54. package/dist/AppleBundleIdDetails-CjP5y0cj.js +0 -74
  55. package/dist/AppleBundleIdDetails-CztWY_mT.js +0 -73
  56. package/dist/AppleBundleIdDetails-Df30MPFC.js +0 -73
  57. package/dist/AppleBundleIdDetails-Dxo99Sgu.js +0 -72
  58. package/dist/Command-1YAl_0zS.js +0 -204
  59. package/dist/Command-Cl-JfhTy.js +0 -203
  60. package/dist/Command-Dn0P_KOV.js +0 -205
  61. package/dist/Command-DxmQn3XT.js +0 -204
  62. package/dist/Command-YJJp90ru.js +0 -204
  63. package/dist/CommandGame-CZUx_VQu.js +0 -8
  64. package/dist/CommandGame-DspVLTPZ.js +0 -8
  65. package/dist/CommandGame-cPaTk1wh.js +0 -8
  66. package/dist/CommandGame-k04mHiDl.js +0 -8
  67. package/dist/CommandGame-pI9VXKxi.js +0 -8
  68. package/dist/CreateKeystore-BnNdeDUa.js +0 -57
  69. package/dist/CreateKeystore-BqJdpvsI.js +0 -56
  70. package/dist/CreateKeystore-Cf-nsK_M.js +0 -56
  71. package/dist/CreateKeystore-D8uTRamD.js +0 -56
  72. package/dist/CreateKeystore-Dm0KVh85.js +0 -56
  73. package/dist/JobProgress-CPkWVSlH.js +0 -108
  74. package/dist/JobProgress-Dk0UoNah.js +0 -108
  75. package/dist/JobProgress-biiLhigg.js +0 -109
  76. package/dist/JobStatusTable-BA_q-kgE.js +0 -75
  77. package/dist/JobStatusTable-CgaTS7jS.js +0 -75
  78. package/dist/JobStatusTable-q4atKzhu.js +0 -75
  79. package/dist/ProjectCredentialsTable-BIWBAXCh.js +0 -37
  80. package/dist/ProjectCredentialsTable-Ch8022rs.js +0 -37
  81. package/dist/ProjectCredentialsTable-DRMK_SNw.js +0 -37
  82. package/dist/ProjectCredentialsTable-DfkpvTf8.js +0 -37
  83. package/dist/UserCredentialsTable-CeJS3_hd.js +0 -82
  84. package/dist/UserCredentialsTable-DMh8Wpy7.js +0 -82
  85. package/dist/UserCredentialsTable-DgHZJSHG.js +0 -82
  86. package/dist/UserCredentialsTable-ysmM5dlV.js +0 -82
  87. package/dist/baseAppleCommand-1isaFxCQ.js +0 -10
  88. package/dist/baseAppleCommand-B3WQtlx-.js +0 -10
  89. package/dist/baseAppleCommand-D-G4h8zQ.js +0 -10
  90. package/dist/baseAppleCommand-DpasCbje.js +0 -10
  91. package/dist/baseGameAndroidCommand-B-CFhPnE.js +0 -43
  92. package/dist/baseGameAndroidCommand-B3LRG701.js +0 -43
  93. package/dist/baseGameAndroidCommand-C9BuS2Sr.js +0 -43
  94. package/dist/baseGameAndroidCommand-DD0H8iy-.js +0 -43
  95. package/dist/commands/game/android/wizard.js +0 -509
  96. package/dist/export-BDxGDZdh.js +0 -36
  97. package/dist/export-B_F6vXIK.js +0 -36
  98. package/dist/export-BiLHgSJ9.js +0 -36
  99. package/dist/export-C_lu1FD9.js +0 -36
  100. package/dist/import-Brg3zYmT.js +0 -38
  101. package/dist/import-BrlJuE2Z.js +0 -38
  102. package/dist/import-CxNikF1c.js +0 -38
  103. package/dist/import-DPbg8WvS.js +0 -38
  104. package/dist/index-B5XHQfs2.js +0 -122
  105. package/dist/index-B6V7vGOj.js +0 -136
  106. package/dist/index-BDFKyTPb.js +0 -24
  107. package/dist/index-BL-1G60K.js +0 -135
  108. package/dist/index-BQRxiyqn.js +0 -693
  109. package/dist/index-BQnkBr1Q.js +0 -136
  110. package/dist/index-BX9h2vPV.js +0 -123
  111. package/dist/index-BjGSEqP5.js +0 -135
  112. package/dist/index-BuZmCvZh.js +0 -24
  113. package/dist/index-Bv3x8c78.js +0 -693
  114. package/dist/index-ByOvCs4O.js +0 -122
  115. package/dist/index-BzffuqPa.js +0 -24
  116. package/dist/index-C9734Cj2.js +0 -693
  117. package/dist/index-CKYExssR.js +0 -136
  118. package/dist/index-CgBgZUkL.js +0 -144
  119. package/dist/index-DBrQda8r.js +0 -122
  120. package/dist/index-DE2Hvx2o.js +0 -122
  121. package/dist/index-DdABTtYO.js +0 -693
  122. package/dist/index-DxHPjZav.js +0 -136
  123. package/dist/index-X__XH_Fd.js +0 -144
  124. package/dist/index-wyPoxiTc.js +0 -136
  125. package/dist/upload-CMo3hUhl.js +0 -60
  126. package/dist/upload-Cx71802W.js +0 -60
  127. package/dist/upload-DvAE1vDq.js +0 -60
  128. package/dist/upload-LXRr4pMa.js +0 -60
  129. package/dist/useAndroidServiceAccountTestResult-BDc7XpKE.js +0 -52
  130. package/dist/useAndroidServiceAccountTestResult-B_ekRewZ.js +0 -52
  131. package/dist/useAndroidServiceAccountTestResult-D_30xIJA.js +0 -52
  132. package/dist/useAndroidServiceAccountTestResult-InDf5WSl.js +0 -52
  133. package/dist/useAppleApp-CApC0-4Q.js +0 -32
  134. package/dist/useAppleApp-CETIcsJS.js +0 -32
  135. package/dist/useAppleApp-DgE0wEaq.js +0 -32
  136. package/dist/useAppleApp-DnSjUfSs.js +0 -32
  137. package/dist/useAppleBundleId-BNI8swhC.js +0 -64
  138. package/dist/useAppleBundleId-DtLODy3p.js +0 -64
  139. package/dist/useAppleBundleId-SmzY6rkm.js +0 -64
  140. package/dist/useAppleBundleId-gPBzJwQg.js +0 -64
  141. package/dist/useJobWatching-BIG6fnTN.js +0 -45
  142. package/dist/useJobWatching-BcBJ5dy1.js +0 -43
  143. package/dist/useJobWatching-Bz1e6xOv.js +0 -43
  144. package/dist/useJobWatching-Cp-CYd90.js +0 -45
  145. package/dist/useJobWatching-P5oC7mNB.js +0 -45
  146. package/dist/useProjectCredentials-B5ZmpIxL.js +0 -54
  147. package/dist/useProjectCredentials-BRffcsO3.js +0 -54
  148. package/dist/useProjectCredentials-CKngz2rd.js +0 -54
  149. package/dist/useProjectCredentials-EapDge1I.js +0 -54
  150. package/dist/useWebSocket-Bep1zAVG.js +0 -36
  151. package/dist/useWebSocket-D8PojLtx.js +0 -36
  152. package/dist/useWebSocket-DoImIdTy.js +0 -36
  153. package/dist/useWebSocket-rBLiZsKb.js +0 -36
  154. package/dist/wizard-ChPegnMW.js +0 -133
  155. package/dist/{Command-D6rWEZRM.js → Command-BiB9MqbJ.js} +3 -3
@@ -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 { P as Platform, J as JobStatus, K as JobStage, L as LogLevel } from './index-C9734Cj2.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, getJobStatusColor as c, getStageColor as d, getFileHash as e, getPlatformName as f, getShortUUID as g, getMaskedInput as h, isValidSemVer as i, getMessageColor as j, makeHumanReadable as m, scriptDir as s };
@@ -1,144 +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 { a as GameContext } from './Command-1YAl_0zS.js';
6
- import { p as getAuthedHeaders, q as API_URL, O as castObjectDates, P as Platform, C as CredentialsType, S as getGoogleStatus } from './index-BQRxiyqn.js';
7
- import axios from 'axios';
8
- import 'crypto-js';
9
- import 'uuid';
10
- import 'luxon';
11
- import 'fs';
12
- import { ProgressBar } from '@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-D_30xIJA.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-DoImIdTy.js';
27
- import { u as useProjectCredentials } from './useProjectCredentials-B5ZmpIxL.js';
28
- import 'qrcode';
29
- import 'string-length';
30
- import 'strip-ansi';
31
-
32
- async function fetchStatus({ projectId }) {
33
- try {
34
- if (!projectId) throw new Error("projectId is required");
35
- const headers = getAuthedHeaders();
36
- const url = `${API_URL}/projects/${projectId}/credentials/android/key/status/`;
37
- const response = await axios.get(url, { headers });
38
- return castObjectDates(response.data);
39
- } catch (error) {
40
- console.warn("fetchStatus Error", error);
41
- throw error;
42
- }
43
- }
44
- const useAndroidServiceAccountSetupStatus = (props) => {
45
- return useQuery({
46
- queryKey: cacheKeys.androidSetupStatus(props),
47
- queryFn: () => fetchStatus(props),
48
- // Status changes frequently, so we want to keep it fresh
49
- refetchInterval: 1e3 * 5,
50
- staleTime: 1e3 * 5
51
- });
52
- };
53
-
54
- const ERR_NOT_AUTHENTICATED = "You must be connected to Google to create a Service Account Key";
55
- const useHasServiceAccountKey = (projectId) => {
56
- const { data, isSuccess } = useProjectCredentials({ projectId, platform: Platform.ANDROID });
57
- return isSuccess && data.data.some((cred) => cred.isActive && cred.platform === Platform.ANDROID && cred.type == CredentialsType.KEY);
58
- };
59
- const useAndroidServiceAccount = ({ projectId, onError, onComplete }) => {
60
- const queryClient = useQueryClient();
61
- const [isStarting, setIsStarting] = useState(false);
62
- const hasServiceAccountKey = useHasServiceAccountKey(projectId);
63
- const listener = {
64
- getPattern: () => `project.${projectId}:android-setup-status`,
65
- eventHandler: async (pattern, data) => {
66
- const key = cacheKeys.androidSetupStatus({ projectId });
67
- queryClient.setQueryData(key, () => data);
68
- }
69
- };
70
- useWebSocket([listener]);
71
- const { data: setupStatus } = useAndroidServiceAccountSetupStatus({ projectId });
72
- const prevSetupStatusRef = useRef("unknown");
73
- useEffect(() => {
74
- if (["running", "queued"].includes(prevSetupStatusRef.current)) {
75
- if (setupStatus?.status === "complete") onComplete();
76
- if (setupStatus?.status === "error") onError(new Error(setupStatus.errorMessage));
77
- }
78
- prevSetupStatusRef.current = setupStatus?.status || "unknown";
79
- }, [setupStatus]);
80
- const handleStart = async () => {
81
- try {
82
- setIsStarting(true);
83
- const currentStatus = await getGoogleStatus();
84
- if (!currentStatus.isAuthenticated) throw new Error(ERR_NOT_AUTHENTICATED);
85
- const headers = getAuthedHeaders();
86
- const androidKeyApiBase = `${API_URL}/projects/${projectId}/credentials/android/key`;
87
- const startUrl = `${androidKeyApiBase}/setup/`;
88
- const { data: updatedStatus } = await axios.post(startUrl, {}, { headers });
89
- queryClient.invalidateQueries({
90
- queryKey: cacheKeys.projectCredentials({ projectId, pageNumber: 0 })
91
- });
92
- await queryClient.setQueryData(cacheKeys.androidSetupStatus({ projectId }), (_) => updatedStatus);
93
- setIsStarting(false);
94
- return true;
95
- } catch (error) {
96
- setIsStarting(false);
97
- console.warn("useAndroidServiceAccount.handleStart Error", error);
98
- onError(error);
99
- return false;
100
- }
101
- };
102
- const isCreating = isStarting || setupStatus?.status === "queued" || setupStatus?.status === "running";
103
- return {
104
- handleStart,
105
- setupStatus,
106
- isCreating,
107
- hasServiceAccountKey
108
- };
109
- };
110
-
111
- const ProgressSpinner = ({ progress, label, spinnerType, labelProps, boxProps }) => /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Box, { flexDirection: "column", gap: 1, ...boxProps, children: /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
112
- label && label != "" && /* @__PURE__ */ jsx(Text, { ...labelProps, children: label }),
113
- /* @__PURE__ */ jsx(ProgressBar, { value: progress || 0 }),
114
- /* @__PURE__ */ jsxs(Text, { children: [
115
- Math.floor(progress || 0),
116
- "%"
117
- ] }),
118
- /* @__PURE__ */ jsx(Spinner, { type: spinnerType })
119
- ] }) }) });
120
-
121
- const CreateServiceAccountKey = (props) => {
122
- const { gameId } = useContext(GameContext);
123
- return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(CreateForGame, { gameId, ...props }) });
124
- };
125
- const CreateForGame = ({ onComplete, onError, gameId, ...boxProps }) => {
126
- const [didStart, setDidStart] = useState(false);
127
- const { handleStart, setupStatus, isCreating } = useAndroidServiceAccount({
128
- projectId: gameId,
129
- onError,
130
- onComplete
131
- });
132
- useEffect(() => {
133
- handleStart().then(() => setDidStart(true));
134
- }, [gameId]);
135
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 1, ...boxProps, children: [
136
- /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
137
- /* @__PURE__ */ jsx(Text, { children: "Creating a Service Account and API Key..." }),
138
- isCreating && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
139
- ] }),
140
- didStart && /* @__PURE__ */ jsx(ProgressSpinner, { progress: (setupStatus?.progress || 0) * 100, spinnerType: "dots" })
141
- ] }) });
142
- };
143
-
144
- export { CreateServiceAccountKey as C, ProgressSpinner as P };
@@ -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 { J as JobStatus, P as Platform, I as JobStage, L as LogLevel } from './index-DdABTtYO.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, getJobStatusColor as c, getStageColor as d, getMaskedInput as e, getFileHash as f, getShortUUID as g, getPlatformName as h, isValidSemVer as i, getMessageColor as j, makeHumanReadable as m, scriptDir as s };
@@ -1,60 +0,0 @@
1
- import axios from 'axios';
2
- import { p as getAuthedHeaders, q as API_URL } from './index-BQRxiyqn.js';
3
-
4
- async function getNewUploadTicket(projectId = null) {
5
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/url` : `${API_URL}/credentials/url`;
6
- const headers = getAuthedHeaders();
7
- const { data: uploadInfo } = await axios({
8
- method: "post",
9
- url,
10
- headers
11
- });
12
- return uploadInfo;
13
- }
14
- async function uploadUserCredentials({ contents, platform, type, serialNumber }) {
15
- const uploadInfo = await getNewUploadTicket();
16
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
17
- await axios.put(uploadInfo.url, jsonBuffer, {
18
- headers: {
19
- "Content-length": jsonBuffer.length,
20
- "Content-Type": "application/json"
21
- }
22
- });
23
- const headers = getAuthedHeaders();
24
- return await axios({
25
- method: "post",
26
- url: `${API_URL}/credentials`,
27
- headers,
28
- data: {
29
- platform,
30
- type,
31
- uuid: uploadInfo.uuid,
32
- serialNumber
33
- }
34
- });
35
- }
36
- async function uploadProjectCredentials(projectId, { contents, platform, type, serialNumber, identifier }) {
37
- const uploadInfo = await getNewUploadTicket(projectId);
38
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
39
- await axios.put(uploadInfo.url, jsonBuffer, {
40
- headers: {
41
- "Content-length": jsonBuffer.length,
42
- "Content-Type": "application/json"
43
- }
44
- });
45
- const headers = getAuthedHeaders();
46
- return await axios({
47
- method: "post",
48
- url: `${API_URL}/projects/${projectId}/credentials`,
49
- headers,
50
- data: {
51
- platform,
52
- type,
53
- uuid: uploadInfo.uuid,
54
- identifier,
55
- serialNumber
56
- }
57
- });
58
- }
59
-
60
- export { uploadProjectCredentials as a, uploadUserCredentials as u };
@@ -1,60 +0,0 @@
1
- import axios from 'axios';
2
- import { o as getAuthedHeaders, p as API_URL } from './index-C9734Cj2.js';
3
-
4
- async function getNewUploadTicket(projectId = null) {
5
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/url` : `${API_URL}/credentials/url`;
6
- const headers = getAuthedHeaders();
7
- const { data: uploadInfo } = await axios({
8
- method: "post",
9
- url,
10
- headers
11
- });
12
- return uploadInfo;
13
- }
14
- async function uploadUserCredentials({ contents, platform, type, serialNumber }) {
15
- const uploadInfo = await getNewUploadTicket();
16
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
17
- await axios.put(uploadInfo.url, jsonBuffer, {
18
- headers: {
19
- "Content-length": jsonBuffer.length,
20
- "Content-Type": "application/json"
21
- }
22
- });
23
- const headers = getAuthedHeaders();
24
- return await axios({
25
- method: "post",
26
- url: `${API_URL}/credentials`,
27
- headers,
28
- data: {
29
- platform,
30
- type,
31
- uuid: uploadInfo.uuid,
32
- serialNumber
33
- }
34
- });
35
- }
36
- async function uploadProjectCredentials(projectId, { contents, platform, type, serialNumber, identifier }) {
37
- const uploadInfo = await getNewUploadTicket(projectId);
38
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
39
- await axios.put(uploadInfo.url, jsonBuffer, {
40
- headers: {
41
- "Content-length": jsonBuffer.length,
42
- "Content-Type": "application/json"
43
- }
44
- });
45
- const headers = getAuthedHeaders();
46
- return await axios({
47
- method: "post",
48
- url: `${API_URL}/projects/${projectId}/credentials`,
49
- headers,
50
- data: {
51
- platform,
52
- type,
53
- uuid: uploadInfo.uuid,
54
- identifier,
55
- serialNumber
56
- }
57
- });
58
- }
59
-
60
- export { uploadProjectCredentials as a, uploadUserCredentials as u };
@@ -1,60 +0,0 @@
1
- import axios from 'axios';
2
- import { p as getAuthedHeaders, q as API_URL } from './index-Bv3x8c78.js';
3
-
4
- async function getNewUploadTicket(projectId = null) {
5
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/url` : `${API_URL}/credentials/url`;
6
- const headers = getAuthedHeaders();
7
- const { data: uploadInfo } = await axios({
8
- method: "post",
9
- url,
10
- headers
11
- });
12
- return uploadInfo;
13
- }
14
- async function uploadUserCredentials({ contents, platform, type, serialNumber }) {
15
- const uploadInfo = await getNewUploadTicket();
16
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
17
- await axios.put(uploadInfo.url, jsonBuffer, {
18
- headers: {
19
- "Content-length": jsonBuffer.length,
20
- "Content-Type": "application/json"
21
- }
22
- });
23
- const headers = getAuthedHeaders();
24
- return await axios({
25
- method: "post",
26
- url: `${API_URL}/credentials`,
27
- headers,
28
- data: {
29
- platform,
30
- type,
31
- uuid: uploadInfo.uuid,
32
- serialNumber
33
- }
34
- });
35
- }
36
- async function uploadProjectCredentials(projectId, { contents, platform, type, serialNumber, identifier }) {
37
- const uploadInfo = await getNewUploadTicket(projectId);
38
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
39
- await axios.put(uploadInfo.url, jsonBuffer, {
40
- headers: {
41
- "Content-length": jsonBuffer.length,
42
- "Content-Type": "application/json"
43
- }
44
- });
45
- const headers = getAuthedHeaders();
46
- return await axios({
47
- method: "post",
48
- url: `${API_URL}/projects/${projectId}/credentials`,
49
- headers,
50
- data: {
51
- platform,
52
- type,
53
- uuid: uploadInfo.uuid,
54
- identifier,
55
- serialNumber
56
- }
57
- });
58
- }
59
-
60
- export { uploadProjectCredentials as a, uploadUserCredentials as u };
@@ -1,60 +0,0 @@
1
- import axios from 'axios';
2
- import { p as getAuthedHeaders, q as API_URL } from './index-DdABTtYO.js';
3
-
4
- async function getNewUploadTicket(projectId = null) {
5
- const url = projectId ? `${API_URL}/projects/${projectId}/credentials/url` : `${API_URL}/credentials/url`;
6
- const headers = getAuthedHeaders();
7
- const { data: uploadInfo } = await axios({
8
- method: "post",
9
- url,
10
- headers
11
- });
12
- return uploadInfo;
13
- }
14
- async function uploadUserCredentials({ contents, platform, type, serialNumber }) {
15
- const uploadInfo = await getNewUploadTicket();
16
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
17
- await axios.put(uploadInfo.url, jsonBuffer, {
18
- headers: {
19
- "Content-length": jsonBuffer.length,
20
- "Content-Type": "application/json"
21
- }
22
- });
23
- const headers = getAuthedHeaders();
24
- return await axios({
25
- method: "post",
26
- url: `${API_URL}/credentials`,
27
- headers,
28
- data: {
29
- platform,
30
- type,
31
- uuid: uploadInfo.uuid,
32
- serialNumber
33
- }
34
- });
35
- }
36
- async function uploadProjectCredentials(projectId, { contents, platform, type, serialNumber, identifier }) {
37
- const uploadInfo = await getNewUploadTicket(projectId);
38
- const jsonBuffer = Buffer.from(JSON.stringify(contents));
39
- await axios.put(uploadInfo.url, jsonBuffer, {
40
- headers: {
41
- "Content-length": jsonBuffer.length,
42
- "Content-Type": "application/json"
43
- }
44
- });
45
- const headers = getAuthedHeaders();
46
- return await axios({
47
- method: "post",
48
- url: `${API_URL}/projects/${projectId}/credentials`,
49
- headers,
50
- data: {
51
- platform,
52
- type,
53
- uuid: uploadInfo.uuid,
54
- identifier,
55
- serialNumber
56
- }
57
- });
58
- }
59
-
60
- export { uploadProjectCredentials as a, uploadUserCredentials as u };