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,108 @@
|
|
|
1
|
+
import { v4 } from 'uuid';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import fg from 'fast-glob';
|
|
4
|
+
import fs__default from 'fs';
|
|
5
|
+
import yazl from 'yazl';
|
|
6
|
+
import { useMutation } from '@tanstack/react-query';
|
|
7
|
+
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-Ce1x0Eh8.js';
|
|
8
|
+
import { $ as queryClient, x as DEFAULT_SHIPPED_FILES_GLOBS, w as DEFAULT_IGNORED_FILES_GLOBS, a0 as getNewUploadTicket, a1 as startJobsFromUpload, J as JobStatus } from './index-BB7X1Pqp.js';
|
|
9
|
+
import { f as getFileHash, h as getPlatformName } from './index-Cz_KLwWf.js';
|
|
10
|
+
import { g as getCWDGitInfo } from './git-DREGq-jc.js';
|
|
11
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
12
|
+
import { useRef } from 'react';
|
|
13
|
+
import 'ink';
|
|
14
|
+
import './Command-D6rWEZRM.js';
|
|
15
|
+
import 'ink-spinner';
|
|
16
|
+
import 'crypto-js';
|
|
17
|
+
import 'luxon';
|
|
18
|
+
import '@inkjs/ui';
|
|
19
|
+
import 'open';
|
|
20
|
+
import { P as ProgressSpinner } from './ProgressSpinner-6pw1T8Iw.js';
|
|
21
|
+
import 'qrcode';
|
|
22
|
+
import 'string-length';
|
|
23
|
+
import 'strip-ansi';
|
|
24
|
+
import 'socket.io-client';
|
|
25
|
+
import { u as useJobWatching } from './useJobWatching-D-YzSlK8.js';
|
|
26
|
+
|
|
27
|
+
async function ship({ command, log = () => {
|
|
28
|
+
} }) {
|
|
29
|
+
log("Fetching project config...");
|
|
30
|
+
const projectConfig = await command.getProjectConfig();
|
|
31
|
+
if (!projectConfig.project) throw new Error("No project found in project config");
|
|
32
|
+
log("Retrieving file globs...");
|
|
33
|
+
const shippedFilesGlobs = projectConfig.shippedFilesGlobs || DEFAULT_SHIPPED_FILES_GLOBS;
|
|
34
|
+
const ignoredFilesGlobs = projectConfig.ignoredFilesGlobs || DEFAULT_IGNORED_FILES_GLOBS;
|
|
35
|
+
log("Finding files to include in zip...");
|
|
36
|
+
const files = await fg(shippedFilesGlobs, { dot: true, ignore: ignoredFilesGlobs });
|
|
37
|
+
log(`Found ${files.length} files, adding to zip...`);
|
|
38
|
+
const zipFile = new yazl.ZipFile();
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
zipFile.addFile(file, file);
|
|
41
|
+
}
|
|
42
|
+
const outputZipToFile = (zip, fileName) => new Promise((resolve) => {
|
|
43
|
+
const outputStream = fs__default.createWriteStream(fileName);
|
|
44
|
+
zip.outputStream.pipe(outputStream).on("close", () => resolve());
|
|
45
|
+
zip.end();
|
|
46
|
+
});
|
|
47
|
+
const tmpZipFile = `${process.cwd()}/shipthis-${v4()}.zip`;
|
|
48
|
+
log(`Creating zip file: ${tmpZipFile}`);
|
|
49
|
+
await outputZipToFile(zipFile, tmpZipFile);
|
|
50
|
+
log("Reading zip file buffer...");
|
|
51
|
+
const zipBuffer = fs__default.readFileSync(tmpZipFile);
|
|
52
|
+
const { size } = fs__default.statSync(tmpZipFile);
|
|
53
|
+
log("Requesting upload ticket...");
|
|
54
|
+
const uploadTicket = await getNewUploadTicket(projectConfig.project.id);
|
|
55
|
+
log("Uploading zip file...");
|
|
56
|
+
await axios.put(uploadTicket.url, zipBuffer, {
|
|
57
|
+
headers: {
|
|
58
|
+
"Content-length": size,
|
|
59
|
+
"Content-Type": "application/zip"
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
log("Fetching Git info...");
|
|
63
|
+
const gitInfo = await getCWDGitInfo();
|
|
64
|
+
log("Computing file hash...");
|
|
65
|
+
const zipFileMd5 = await getFileHash(tmpZipFile);
|
|
66
|
+
const uploadDetails = {
|
|
67
|
+
...gitInfo,
|
|
68
|
+
zipFileMd5
|
|
69
|
+
};
|
|
70
|
+
log("Starting jobs from upload...");
|
|
71
|
+
const jobs = await startJobsFromUpload(uploadTicket.id, uploadDetails);
|
|
72
|
+
log("Cleaning up temporary zip file...");
|
|
73
|
+
fs__default.unlinkSync(tmpZipFile);
|
|
74
|
+
log("Job submission complete.");
|
|
75
|
+
return jobs;
|
|
76
|
+
}
|
|
77
|
+
const useShip = () => {
|
|
78
|
+
return useMutation({
|
|
79
|
+
mutationFn: ship,
|
|
80
|
+
onSuccess: async (data) => {
|
|
81
|
+
queryClient.invalidateQueries({
|
|
82
|
+
queryKey: cacheKeys.jobs({ projectId: data[0].project.id, pageNumber: 0 })
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const JobProgress = (props) => {
|
|
89
|
+
const prevJobStatus = useRef(props.job.status);
|
|
90
|
+
const handleJobUpdate = (job) => {
|
|
91
|
+
const completed = [JobStatus.COMPLETED, JobStatus.FAILED];
|
|
92
|
+
const wasRunning = !completed.includes(prevJobStatus.current);
|
|
93
|
+
if (completed.includes(job.status) && wasRunning) {
|
|
94
|
+
props.onComplete();
|
|
95
|
+
}
|
|
96
|
+
prevJobStatus.current = job.status;
|
|
97
|
+
};
|
|
98
|
+
const { progress } = useJobWatching({
|
|
99
|
+
projectId: props.job.project.id,
|
|
100
|
+
jobId: props.job.id,
|
|
101
|
+
isWatching: true,
|
|
102
|
+
onJobUpdate: handleJobUpdate
|
|
103
|
+
});
|
|
104
|
+
const label = `${getPlatformName(props.job.type)} build progress...`;
|
|
105
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(ProgressSpinner, { progress, label, spinnerType: "dots" }) });
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export { JobProgress as J, useShip as u };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import Spinner from 'ink-spinner';
|
|
6
|
+
import { d as getStageColor, c as getJobStatusColor } from './index-BQnkBr1Q.js';
|
|
7
|
+
import { J as JobStatus } from './index-Bv3x8c78.js';
|
|
8
|
+
import 'axios';
|
|
9
|
+
import '@tanstack/react-query';
|
|
10
|
+
import 'crypto-js';
|
|
11
|
+
import 'uuid';
|
|
12
|
+
import 'fs';
|
|
13
|
+
import { g as getJobSummary, a as getBuildSummary } from './Command-YJJp90ru.js';
|
|
14
|
+
import 'fast-glob';
|
|
15
|
+
import 'yazl';
|
|
16
|
+
import 'socket.io-client';
|
|
17
|
+
import { u as useJobWatching } from './useJobWatching-Cp-CYd90.js';
|
|
18
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
19
|
+
import { a as StatusRow, b as StatusRowLabel } from './StatusTable-Dm5St4g-.js';
|
|
20
|
+
|
|
21
|
+
const JobStatusSpinner = ({ status, showSpinner }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22
|
+
/* @__PURE__ */ jsx(Text, { color: getJobStatusColor(status), children: `${status}` }),
|
|
23
|
+
showSpinner && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
25
|
+
/* @__PURE__ */ jsx(Spinner, { type: "dots" })
|
|
26
|
+
] })
|
|
27
|
+
] });
|
|
28
|
+
const JobStatusTable = ({ jobId, projectId, isWatching, onJobUpdate }) => {
|
|
29
|
+
const { data: job, stage, isLoading } = useJobWatching({ projectId, jobId, isWatching, onJobUpdate });
|
|
30
|
+
const [time, setTime] = useState(DateTime.now());
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isWatching) return;
|
|
33
|
+
const interval = setInterval(() => setTime(DateTime.now()), 1e3);
|
|
34
|
+
return () => {
|
|
35
|
+
clearInterval(interval);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
const isJobInProgress = job && ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
|
|
39
|
+
const summary = job ? getJobSummary(job, time) : null;
|
|
40
|
+
const buildSummary = job && job.build ? getBuildSummary(job.build) : null;
|
|
41
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Title, { children: "Job Details" }),
|
|
44
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
45
|
+
summary && job && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
46
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: summary.id }),
|
|
47
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Name", value: job.project.name }),
|
|
48
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Status" }),
|
|
50
|
+
/* @__PURE__ */ jsx(JobStatusSpinner, { status: job.status, showSpinner: isWatching && !!isJobInProgress })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
53
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Stage" }),
|
|
54
|
+
stage && /* @__PURE__ */ jsx(Text, { color: getStageColor(stage), children: `${stage}` })
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Version", value: summary.version }),
|
|
57
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Git Info", value: summary.gitInfo }),
|
|
58
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: summary.platform }),
|
|
59
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Started At", value: summary.createdAt }),
|
|
60
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Runtime", value: summary.runtime })
|
|
61
|
+
] })
|
|
62
|
+
] }),
|
|
63
|
+
buildSummary && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, marginLeft: 3, borderStyle: "single", padding: 1, children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Title, { children: "Build Details" }),
|
|
65
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
66
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: buildSummary.id }),
|
|
67
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: buildSummary.platform }),
|
|
68
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Type", value: buildSummary.type }),
|
|
69
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "CMD", value: buildSummary.cmd })
|
|
70
|
+
] })
|
|
71
|
+
] })
|
|
72
|
+
] });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { JobStatusTable as J };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import Spinner from 'ink-spinner';
|
|
6
|
+
import { d as getStageColor, c as getJobStatusColor } from './index-Cz_KLwWf.js';
|
|
7
|
+
import { J as JobStatus } from './index-BB7X1Pqp.js';
|
|
8
|
+
import 'axios';
|
|
9
|
+
import '@tanstack/react-query';
|
|
10
|
+
import 'crypto-js';
|
|
11
|
+
import 'uuid';
|
|
12
|
+
import 'fs';
|
|
13
|
+
import { g as getJobSummary, a as getBuildSummary } from './Command-D6rWEZRM.js';
|
|
14
|
+
import 'fast-glob';
|
|
15
|
+
import 'yazl';
|
|
16
|
+
import 'socket.io-client';
|
|
17
|
+
import { u as useJobWatching } from './useJobWatching-D-YzSlK8.js';
|
|
18
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
19
|
+
import { a as StatusRow, b as StatusRowLabel } from './StatusTable-Dm5St4g-.js';
|
|
20
|
+
|
|
21
|
+
const JobStatusSpinner = ({ status, showSpinner }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22
|
+
/* @__PURE__ */ jsx(Text, { color: getJobStatusColor(status), children: `${status}` }),
|
|
23
|
+
showSpinner && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
25
|
+
/* @__PURE__ */ jsx(Spinner, { type: "dots" })
|
|
26
|
+
] })
|
|
27
|
+
] });
|
|
28
|
+
const JobStatusTable = ({ jobId, projectId, isWatching, onJobUpdate }) => {
|
|
29
|
+
const { data: job, stage, isLoading } = useJobWatching({ projectId, jobId, isWatching, onJobUpdate });
|
|
30
|
+
const [time, setTime] = useState(DateTime.now());
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isWatching) return;
|
|
33
|
+
const interval = setInterval(() => setTime(DateTime.now()), 1e3);
|
|
34
|
+
return () => {
|
|
35
|
+
clearInterval(interval);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
const isJobInProgress = job && ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
|
|
39
|
+
const summary = job ? getJobSummary(job, time) : null;
|
|
40
|
+
const buildSummary = job && job.build ? getBuildSummary(job.build) : null;
|
|
41
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Title, { children: "Job Details" }),
|
|
44
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
45
|
+
summary && job && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
46
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: summary.id }),
|
|
47
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Name", value: job.project.name }),
|
|
48
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Status" }),
|
|
50
|
+
/* @__PURE__ */ jsx(JobStatusSpinner, { status: job.status, showSpinner: isWatching && !!isJobInProgress })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
53
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Stage" }),
|
|
54
|
+
stage && /* @__PURE__ */ jsx(Text, { color: getStageColor(stage), children: `${stage}` })
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Version", value: summary.version }),
|
|
57
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Git Info", value: summary.gitInfo }),
|
|
58
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: summary.platform }),
|
|
59
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Started At", value: summary.createdAt }),
|
|
60
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Runtime", value: summary.runtime })
|
|
61
|
+
] })
|
|
62
|
+
] }),
|
|
63
|
+
buildSummary && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, marginLeft: 3, borderStyle: "single", padding: 1, children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Title, { children: "Build Details" }),
|
|
65
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
66
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: buildSummary.id }),
|
|
67
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: buildSummary.platform }),
|
|
68
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Type", value: buildSummary.type }),
|
|
69
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "CMD", value: buildSummary.cmd })
|
|
70
|
+
] })
|
|
71
|
+
] })
|
|
72
|
+
] });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { JobStatusTable as J };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import Spinner from 'ink-spinner';
|
|
6
|
+
import { d as getStageColor, c as getJobStatusColor } from './index-DxHPjZav.js';
|
|
7
|
+
import { J as JobStatus } from './index-C9734Cj2.js';
|
|
8
|
+
import 'axios';
|
|
9
|
+
import '@tanstack/react-query';
|
|
10
|
+
import 'crypto-js';
|
|
11
|
+
import 'uuid';
|
|
12
|
+
import 'fs';
|
|
13
|
+
import { g as getJobSummary, a as getBuildSummary } from './Command-Dn0P_KOV.js';
|
|
14
|
+
import 'fast-glob';
|
|
15
|
+
import 'yazl';
|
|
16
|
+
import 'socket.io-client';
|
|
17
|
+
import { u as useJobWatching } from './useJobWatching-BIG6fnTN.js';
|
|
18
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
19
|
+
import { a as StatusRow, b as StatusRowLabel } from './StatusTable-Dm5St4g-.js';
|
|
20
|
+
|
|
21
|
+
const JobStatusSpinner = ({ status, showSpinner }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22
|
+
/* @__PURE__ */ jsx(Text, { color: getJobStatusColor(status), children: `${status}` }),
|
|
23
|
+
showSpinner && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
25
|
+
/* @__PURE__ */ jsx(Spinner, { type: "dots" })
|
|
26
|
+
] })
|
|
27
|
+
] });
|
|
28
|
+
const JobStatusTable = ({ jobId, projectId, isWatching, onJobUpdate }) => {
|
|
29
|
+
const { data: job, stage, isLoading } = useJobWatching({ projectId, jobId, isWatching, onJobUpdate });
|
|
30
|
+
const [time, setTime] = useState(DateTime.now());
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isWatching) return;
|
|
33
|
+
const interval = setInterval(() => setTime(DateTime.now()), 1e3);
|
|
34
|
+
return () => {
|
|
35
|
+
clearInterval(interval);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
const isJobInProgress = job && ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
|
|
39
|
+
const summary = job ? getJobSummary(job, time) : null;
|
|
40
|
+
const buildSummary = job && job.build ? getBuildSummary(job.build) : null;
|
|
41
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Title, { children: "Job Details" }),
|
|
44
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
45
|
+
summary && job && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
46
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: summary.id }),
|
|
47
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Name", value: job.project.name }),
|
|
48
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Status" }),
|
|
50
|
+
/* @__PURE__ */ jsx(JobStatusSpinner, { status: job.status, showSpinner: isWatching && !!isJobInProgress })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
53
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Stage" }),
|
|
54
|
+
stage && /* @__PURE__ */ jsx(Text, { color: getStageColor(stage), children: `${stage}` })
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Version", value: summary.version }),
|
|
57
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Git Info", value: summary.gitInfo }),
|
|
58
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: summary.platform }),
|
|
59
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Started At", value: summary.createdAt }),
|
|
60
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Runtime", value: summary.runtime })
|
|
61
|
+
] })
|
|
62
|
+
] }),
|
|
63
|
+
buildSummary && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, marginLeft: 3, borderStyle: "single", padding: 1, children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Title, { children: "Build Details" }),
|
|
65
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
66
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: buildSummary.id }),
|
|
67
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: buildSummary.platform }),
|
|
68
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Type", value: buildSummary.type }),
|
|
69
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "CMD", value: buildSummary.cmd })
|
|
70
|
+
] })
|
|
71
|
+
] })
|
|
72
|
+
] });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { JobStatusTable as J };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import Spinner from 'ink-spinner';
|
|
6
|
+
import { d as getStageColor, c as getJobStatusColor } from './index-Cz_KLwWf.js';
|
|
7
|
+
import { J as JobStatus } from './index-BB7X1Pqp.js';
|
|
8
|
+
import 'axios';
|
|
9
|
+
import '@tanstack/react-query';
|
|
10
|
+
import 'crypto-js';
|
|
11
|
+
import 'uuid';
|
|
12
|
+
import 'fs';
|
|
13
|
+
import { g as getJobSummary, a as getBuildSummary } from './Command-BiB9MqbJ.js';
|
|
14
|
+
import 'fast-glob';
|
|
15
|
+
import 'yazl';
|
|
16
|
+
import 'socket.io-client';
|
|
17
|
+
import { u as useJobWatching } from './useJobWatching-I_A3b36f.js';
|
|
18
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
19
|
+
import { a as StatusRow, b as StatusRowLabel } from './StatusTable-Dm5St4g-.js';
|
|
20
|
+
|
|
21
|
+
const JobStatusSpinner = ({ status, showSpinner }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22
|
+
/* @__PURE__ */ jsx(Text, { color: getJobStatusColor(status), children: `${status}` }),
|
|
23
|
+
showSpinner && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
25
|
+
/* @__PURE__ */ jsx(Spinner, { type: "dots" })
|
|
26
|
+
] })
|
|
27
|
+
] });
|
|
28
|
+
const JobStatusTable = ({ jobId, projectId, isWatching, onJobUpdate }) => {
|
|
29
|
+
const { data: job, stage, isLoading } = useJobWatching({ projectId, jobId, isWatching, onJobUpdate });
|
|
30
|
+
const [time, setTime] = useState(DateTime.now());
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isWatching) return;
|
|
33
|
+
const interval = setInterval(() => setTime(DateTime.now()), 1e3);
|
|
34
|
+
return () => {
|
|
35
|
+
clearInterval(interval);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
const isJobInProgress = job && ![JobStatus.COMPLETED, JobStatus.FAILED].includes(job.status);
|
|
39
|
+
const summary = job ? getJobSummary(job, time) : null;
|
|
40
|
+
const buildSummary = job && job.build ? getBuildSummary(job.build) : null;
|
|
41
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Title, { children: "Job Details" }),
|
|
44
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
45
|
+
summary && job && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
46
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: summary.id }),
|
|
47
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Name", value: job.project.name }),
|
|
48
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Status" }),
|
|
50
|
+
/* @__PURE__ */ jsx(JobStatusSpinner, { status: job.status, showSpinner: isWatching && !!isJobInProgress })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
53
|
+
/* @__PURE__ */ jsx(StatusRowLabel, { label: "Stage" }),
|
|
54
|
+
stage && /* @__PURE__ */ jsx(Text, { color: getStageColor(stage), children: `${stage}` })
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Version", value: summary.version }),
|
|
57
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Git Info", value: summary.gitInfo }),
|
|
58
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: summary.platform }),
|
|
59
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Started At", value: summary.createdAt }),
|
|
60
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Runtime", value: summary.runtime })
|
|
61
|
+
] })
|
|
62
|
+
] }),
|
|
63
|
+
buildSummary && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, marginLeft: 3, borderStyle: "single", padding: 1, children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Title, { children: "Build Details" }),
|
|
65
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [
|
|
66
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "ID", value: buildSummary.id }),
|
|
67
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Platform", value: buildSummary.platform }),
|
|
68
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "Type", value: buildSummary.type }),
|
|
69
|
+
/* @__PURE__ */ jsx(StatusRow, { label: "CMD", value: buildSummary.cmd })
|
|
70
|
+
] })
|
|
71
|
+
] })
|
|
72
|
+
] });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { JobStatusTable as J };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import 'fs';
|
|
6
|
+
import 'readline-sync';
|
|
7
|
+
import 'node:readline';
|
|
8
|
+
import 'node:path';
|
|
9
|
+
import 'node:url';
|
|
10
|
+
import 'react';
|
|
11
|
+
import 'axios';
|
|
12
|
+
import '@tanstack/react-query';
|
|
13
|
+
import './index-BB7X1Pqp.js';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-vjedBbKl.js';
|
|
18
|
+
import 'fast-glob';
|
|
19
|
+
import 'yazl';
|
|
20
|
+
import 'socket.io-client';
|
|
21
|
+
import 'isomorphic-git';
|
|
22
|
+
import '@oclif/core';
|
|
23
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
24
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
25
|
+
|
|
26
|
+
const ProjectCredentialsTable = ({ credentialTypeName, queryProps, ...boxProps }) => {
|
|
27
|
+
const { isLoading, data } = useProjectCredentials(queryProps);
|
|
28
|
+
const hasActive = data?.data.some((credential) => credential.isActive);
|
|
29
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, ...boxProps, children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Title, { children: `${credentialTypeName}s in your ShipThis account` }),
|
|
31
|
+
/* @__PURE__ */ jsx(Box, { marginLeft: 2, marginBottom: 1, flexDirection: "column", children: /* @__PURE__ */ jsx(Text, { children: hasActive ? `You have an active ${credentialTypeName} in your ShipThis account.` : `You DO NOT have an active ${credentialTypeName} which ShipThis can use.` }) }),
|
|
32
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
33
|
+
data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getProjectCredentialSummary) })
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { ProjectCredentialsTable as P };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import 'fs';
|
|
6
|
+
import 'readline-sync';
|
|
7
|
+
import 'node:readline';
|
|
8
|
+
import 'node:path';
|
|
9
|
+
import 'node:url';
|
|
10
|
+
import 'react';
|
|
11
|
+
import 'axios';
|
|
12
|
+
import '@tanstack/react-query';
|
|
13
|
+
import './index-C9734Cj2.js';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-EapDge1I.js';
|
|
18
|
+
import 'fast-glob';
|
|
19
|
+
import 'yazl';
|
|
20
|
+
import 'socket.io-client';
|
|
21
|
+
import 'isomorphic-git';
|
|
22
|
+
import '@oclif/core';
|
|
23
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
24
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
25
|
+
|
|
26
|
+
const ProjectCredentialsTable = ({ credentialTypeName, queryProps, ...boxProps }) => {
|
|
27
|
+
const { isLoading, data } = useProjectCredentials(queryProps);
|
|
28
|
+
const hasActive = data?.data.some((credential) => credential.isActive);
|
|
29
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, ...boxProps, children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Title, { children: `${credentialTypeName}s in your ShipThis account` }),
|
|
31
|
+
/* @__PURE__ */ jsx(Box, { marginLeft: 2, marginBottom: 1, flexDirection: "column", children: /* @__PURE__ */ jsx(Text, { children: hasActive ? `You have an active ${credentialTypeName} in your ShipThis account.` : `You DO NOT have an active ${credentialTypeName} which ShipThis can use.` }) }),
|
|
32
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
33
|
+
data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getProjectCredentialSummary) })
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { ProjectCredentialsTable as P };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import 'fs';
|
|
6
|
+
import 'readline-sync';
|
|
7
|
+
import 'node:readline';
|
|
8
|
+
import 'node:path';
|
|
9
|
+
import 'node:url';
|
|
10
|
+
import 'react';
|
|
11
|
+
import 'axios';
|
|
12
|
+
import '@tanstack/react-query';
|
|
13
|
+
import './index-Bv3x8c78.js';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-CKngz2rd.js';
|
|
18
|
+
import 'fast-glob';
|
|
19
|
+
import 'yazl';
|
|
20
|
+
import 'socket.io-client';
|
|
21
|
+
import 'isomorphic-git';
|
|
22
|
+
import '@oclif/core';
|
|
23
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
24
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
25
|
+
|
|
26
|
+
const ProjectCredentialsTable = ({ credentialTypeName, queryProps, ...boxProps }) => {
|
|
27
|
+
const { isLoading, data } = useProjectCredentials(queryProps);
|
|
28
|
+
const hasActive = data?.data.some((credential) => credential.isActive);
|
|
29
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, ...boxProps, children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Title, { children: `${credentialTypeName}s in your ShipThis account` }),
|
|
31
|
+
/* @__PURE__ */ jsx(Box, { marginLeft: 2, marginBottom: 1, flexDirection: "column", children: /* @__PURE__ */ jsx(Text, { children: hasActive ? `You have an active ${credentialTypeName} in your ShipThis account.` : `You DO NOT have an active ${credentialTypeName} which ShipThis can use.` }) }),
|
|
32
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
33
|
+
data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getProjectCredentialSummary) })
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { ProjectCredentialsTable as P };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import 'fs';
|
|
6
|
+
import 'readline-sync';
|
|
7
|
+
import 'node:readline';
|
|
8
|
+
import 'node:path';
|
|
9
|
+
import 'node:url';
|
|
10
|
+
import 'react';
|
|
11
|
+
import axios from 'axios';
|
|
12
|
+
import { useQuery } from '@tanstack/react-query';
|
|
13
|
+
import { b as getShortDate, o as getAuthedHeaders, p as API_URL, M as castArrayObjectDates } from './index-C9734Cj2.js';
|
|
14
|
+
import 'crypto-js';
|
|
15
|
+
import 'uuid';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import 'fast-glob';
|
|
18
|
+
import 'yazl';
|
|
19
|
+
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-B_ekRewZ.js';
|
|
20
|
+
import { g as getShortUUID } from './index-DxHPjZav.js';
|
|
21
|
+
import 'socket.io-client';
|
|
22
|
+
import 'isomorphic-git';
|
|
23
|
+
import '@oclif/core';
|
|
24
|
+
import { T as Table } from './Table-CvM6pccN.js';
|
|
25
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
26
|
+
|
|
27
|
+
async function queryUserCredentials(params) {
|
|
28
|
+
try {
|
|
29
|
+
const headers = getAuthedHeaders();
|
|
30
|
+
const url = `${API_URL}/credentials`;
|
|
31
|
+
const response = await axios.get(url, { headers, params });
|
|
32
|
+
return {
|
|
33
|
+
...response.data,
|
|
34
|
+
data: castArrayObjectDates(response.data.data)
|
|
35
|
+
};
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.warn("queryUserCredentials Error", error);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function getUserCredentialSummary(credential) {
|
|
42
|
+
return {
|
|
43
|
+
id: getShortUUID(credential.id),
|
|
44
|
+
type: credential.type,
|
|
45
|
+
serial: credential.serialNumber,
|
|
46
|
+
isActive: credential.isActive,
|
|
47
|
+
createdAt: getShortDate(credential.createdAt)
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const useUserCredentials = ({
|
|
51
|
+
platform,
|
|
52
|
+
type,
|
|
53
|
+
...pageAndSortParams
|
|
54
|
+
}) => {
|
|
55
|
+
const queryResult = useQuery({
|
|
56
|
+
queryKey: cacheKeys.userCredentials(pageAndSortParams),
|
|
57
|
+
queryFn: async () => queryUserCredentials(pageAndSortParams),
|
|
58
|
+
select: (data) => {
|
|
59
|
+
if (!(platform || type)) return data;
|
|
60
|
+
return {
|
|
61
|
+
...data,
|
|
62
|
+
data: data.data.filter((credential) => {
|
|
63
|
+
return (!platform || credential.platform === platform) && (!type || credential.type === type);
|
|
64
|
+
})
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return queryResult;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const UserCredentialsTable = ({ credentialTypeName, queryProps, ...boxProps }) => {
|
|
72
|
+
const { isLoading, data } = useUserCredentials(queryProps);
|
|
73
|
+
const hasActive = data?.data.some((credential) => credential.isActive);
|
|
74
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, ...boxProps, children: [
|
|
75
|
+
/* @__PURE__ */ jsx(Title, { children: `${credentialTypeName}s in your ShipThis account` }),
|
|
76
|
+
/* @__PURE__ */ jsx(Box, { marginLeft: 2, marginBottom: 1, flexDirection: "column", children: /* @__PURE__ */ jsx(Text, { children: hasActive ? `You have an active ${credentialTypeName} in your ShipThis account.` : `You DO NOT have an active ${credentialTypeName} which ShipThis can use.` }) }),
|
|
77
|
+
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
78
|
+
data && data.data.length > 0 && /* @__PURE__ */ jsx(Table, { data: data.data.map(getUserCredentialSummary) })
|
|
79
|
+
] });
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export { UserCredentialsTable as U, useUserCredentials as u };
|