shipthis 0.1.8 → 0.1.10
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/dist/AppleBundleIdDetails-CjP5y0cj.js +74 -0
- package/dist/AppleBundleIdDetails-CztWY_mT.js +73 -0
- package/dist/AppleBundleIdDetails-DKeSAte9.js +73 -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-cPaTk1wh.js +8 -0
- package/dist/CommandGame-k04mHiDl.js +8 -0
- package/dist/CommandGame-pI9VXKxi.js +8 -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/JobProgress-CPkWVSlH.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/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 +7 -7
- package/dist/commands/apple/apiKey/export.js +6 -6
- package/dist/commands/apple/apiKey/import.js +6 -6
- package/dist/commands/apple/apiKey/status.js +5 -5
- package/dist/commands/apple/certificate/create.js +7 -7
- package/dist/commands/apple/certificate/export.js +6 -6
- package/dist/commands/apple/certificate/import.js +6 -6
- package/dist/commands/apple/certificate/status.js +5 -5
- package/dist/commands/apple/login.js +2 -2
- package/dist/commands/apple/status.js +4 -4
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/game/android/apiKey/connect.js +8 -8
- package/dist/commands/game/android/apiKey/create.js +10 -10
- package/dist/commands/game/android/apiKey/export.js +7 -7
- package/dist/commands/game/android/apiKey/import.js +7 -7
- package/dist/commands/game/android/apiKey/invite.js +4 -4
- package/dist/commands/game/android/apiKey/status.js +7 -7
- package/dist/commands/game/android/keyStore/create.js +8 -8
- package/dist/commands/game/android/keyStore/export.js +6 -6
- package/dist/commands/game/android/keyStore/import.js +6 -6
- package/dist/commands/game/android/keyStore/status.js +6 -6
- package/dist/commands/game/android/status.js +4 -4
- package/dist/commands/game/build/download.js +4 -4
- package/dist/commands/game/build/list.js +5 -5
- package/dist/commands/game/create.js +2 -2
- package/dist/commands/game/details.js +21 -7
- package/dist/commands/game/export.js +1 -1
- package/dist/commands/game/ios/app/addTester.js +5 -5
- package/dist/commands/game/ios/app/create.js +4 -4
- package/dist/commands/game/ios/app/status.js +7 -7
- package/dist/commands/game/ios/app/sync.js +5 -5
- package/dist/commands/game/ios/profile/create.js +7 -7
- package/dist/commands/game/ios/profile/export.js +6 -6
- package/dist/commands/game/ios/profile/import.js +6 -6
- package/dist/commands/game/ios/profile/status.js +6 -6
- package/dist/commands/game/ios/status.js +7 -7
- package/dist/commands/game/ios/wizard.js +2 -2
- package/dist/commands/game/job/list.js +4 -4
- package/dist/commands/game/job/status.js +7 -7
- package/dist/commands/game/list.js +4 -4
- package/dist/commands/game/ship.js +9 -9
- package/dist/commands/game/status.js +4 -4
- package/dist/commands/game/wizard.js +490 -34
- 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 +4 -4
- 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/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-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/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/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 +256 -220
- package/package.json +3 -5
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { u as useJob } from './Command-YJJp90ru.js';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { u as useWebSocket } from './useWebSocket-rBLiZsKb.js';
|
|
4
|
+
import { E as castJobDates, F as castObjectDates } from './index-Bv3x8c78.js';
|
|
5
|
+
|
|
6
|
+
function useJobWatching({ projectId, jobId, isWatching, onJobUpdate }) {
|
|
7
|
+
const [websocketJob, setWebsocketJob] = useState(null);
|
|
8
|
+
const [mostRecentLog, setMostRecentLog] = useState(null);
|
|
9
|
+
const jobStatusListener = {
|
|
10
|
+
getPattern: () => [`project.${projectId}:job:created`, `project.${projectId}:job:updated`],
|
|
11
|
+
eventHandler: async (pattern, rawJob) => {
|
|
12
|
+
if (rawJob.id !== jobId) return;
|
|
13
|
+
const job2 = castJobDates(rawJob);
|
|
14
|
+
setWebsocketJob(job2);
|
|
15
|
+
if (onJobUpdate) onJobUpdate(job2);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const jobProgressListener = {
|
|
19
|
+
getPattern: () => `project.${projectId}:job.${jobId}:log`,
|
|
20
|
+
eventHandler: async (pattern, rawLogEntry) => {
|
|
21
|
+
const logEntry = castObjectDates(rawLogEntry, ["sentAt", "createdAt"]);
|
|
22
|
+
setMostRecentLog(logEntry);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
useWebSocket(isWatching ? [jobStatusListener, jobProgressListener] : []);
|
|
26
|
+
const { isLoading, data: job } = useJob({
|
|
27
|
+
projectId,
|
|
28
|
+
jobId
|
|
29
|
+
});
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
setWebsocketJob(null);
|
|
32
|
+
}, [jobId, projectId, isWatching, job]);
|
|
33
|
+
const fetchedJob = job ? job : null;
|
|
34
|
+
const data = websocketJob ? websocketJob : fetchedJob;
|
|
35
|
+
const progress = mostRecentLog?.progress || null;
|
|
36
|
+
const stage = mostRecentLog?.stage || null;
|
|
37
|
+
return {
|
|
38
|
+
isLoading,
|
|
39
|
+
data,
|
|
40
|
+
progress,
|
|
41
|
+
stage
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { useJobWatching as u };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { u as useJob } from './Command-D6rWEZRM.js';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { u as useWebSocket } from './useWebSocket-CBqsjHbt.js';
|
|
4
|
+
import { E as castJobDates, F as castObjectDates } from './index-BB7X1Pqp.js';
|
|
5
|
+
|
|
6
|
+
function useJobWatching({ projectId, jobId, isWatching, onJobUpdate }) {
|
|
7
|
+
const [websocketJob, setWebsocketJob] = useState(null);
|
|
8
|
+
const [mostRecentLog, setMostRecentLog] = useState(null);
|
|
9
|
+
const jobStatusListener = {
|
|
10
|
+
getPattern: () => [`project.${projectId}:job:created`, `project.${projectId}:job:updated`],
|
|
11
|
+
eventHandler: async (pattern, rawJob) => {
|
|
12
|
+
if (rawJob.id !== jobId) return;
|
|
13
|
+
const job2 = castJobDates(rawJob);
|
|
14
|
+
setWebsocketJob(job2);
|
|
15
|
+
if (onJobUpdate) onJobUpdate(job2);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const jobProgressListener = {
|
|
19
|
+
getPattern: () => `project.${projectId}:job.${jobId}:log`,
|
|
20
|
+
eventHandler: async (pattern, rawLogEntry) => {
|
|
21
|
+
const logEntry = castObjectDates(rawLogEntry, ["sentAt", "createdAt"]);
|
|
22
|
+
setMostRecentLog(logEntry);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
useWebSocket(isWatching ? [jobStatusListener, jobProgressListener] : []);
|
|
26
|
+
const { isLoading, data: job } = useJob({
|
|
27
|
+
projectId,
|
|
28
|
+
jobId
|
|
29
|
+
});
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
setWebsocketJob(null);
|
|
32
|
+
}, [jobId, projectId, isWatching, job]);
|
|
33
|
+
const fetchedJob = job ? job : null;
|
|
34
|
+
const data = websocketJob ? websocketJob : fetchedJob;
|
|
35
|
+
const progress = mostRecentLog?.progress || null;
|
|
36
|
+
const stage = mostRecentLog?.stage || null;
|
|
37
|
+
return {
|
|
38
|
+
isLoading,
|
|
39
|
+
data,
|
|
40
|
+
progress,
|
|
41
|
+
stage
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { useJobWatching as u };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-BDc7XpKE.js';
|
|
4
|
+
import { b as getShortDate, p as getAuthedHeaders, q as API_URL, K as castArrayObjectDates } from './index-Bv3x8c78.js';
|
|
5
|
+
import { g as getShortUUID } from './index-BQnkBr1Q.js';
|
|
6
|
+
|
|
7
|
+
async function queryProjectCredentials({
|
|
8
|
+
projectId,
|
|
9
|
+
...pageAndSortParams
|
|
10
|
+
}) {
|
|
11
|
+
try {
|
|
12
|
+
const headers = getAuthedHeaders();
|
|
13
|
+
const url = `${API_URL}/projects/${projectId}/credentials`;
|
|
14
|
+
const response = await axios.get(url, { headers, params: pageAndSortParams });
|
|
15
|
+
return {
|
|
16
|
+
...response.data,
|
|
17
|
+
data: castArrayObjectDates(response.data.data)
|
|
18
|
+
};
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.warn("queryProjectCredentials Error", error);
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function getProjectCredentialSummary(credential) {
|
|
25
|
+
return {
|
|
26
|
+
id: getShortUUID(credential.id),
|
|
27
|
+
type: credential.type,
|
|
28
|
+
serial: credential.serialNumber.substring(0, 30) + (credential.serialNumber.length > 30 ? "\u2026" : ""),
|
|
29
|
+
isActive: credential.isActive,
|
|
30
|
+
createdAt: getShortDate(credential.createdAt)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const useProjectCredentials = ({
|
|
34
|
+
platform,
|
|
35
|
+
type,
|
|
36
|
+
...fetchProps
|
|
37
|
+
}) => {
|
|
38
|
+
const queryResult = useQuery({
|
|
39
|
+
queryKey: cacheKeys.projectCredentials(fetchProps),
|
|
40
|
+
queryFn: async () => queryProjectCredentials(fetchProps),
|
|
41
|
+
select: (data) => {
|
|
42
|
+
if (!(platform || type)) return data;
|
|
43
|
+
return {
|
|
44
|
+
...data,
|
|
45
|
+
data: data.data.filter((credential) => {
|
|
46
|
+
return (!platform || credential.platform === platform) && (!type || credential.type === type);
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return queryResult;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { getProjectCredentialSummary as g, useProjectCredentials as u };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-B_ekRewZ.js';
|
|
4
|
+
import { b as getShortDate, o as getAuthedHeaders, p as API_URL, M as castArrayObjectDates } from './index-C9734Cj2.js';
|
|
5
|
+
import { g as getShortUUID } from './index-DxHPjZav.js';
|
|
6
|
+
|
|
7
|
+
async function queryProjectCredentials({
|
|
8
|
+
projectId,
|
|
9
|
+
...pageAndSortParams
|
|
10
|
+
}) {
|
|
11
|
+
try {
|
|
12
|
+
const headers = getAuthedHeaders();
|
|
13
|
+
const url = `${API_URL}/projects/${projectId}/credentials`;
|
|
14
|
+
const response = await axios.get(url, { headers, params: pageAndSortParams });
|
|
15
|
+
return {
|
|
16
|
+
...response.data,
|
|
17
|
+
data: castArrayObjectDates(response.data.data)
|
|
18
|
+
};
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.warn("queryProjectCredentials Error", error);
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function getProjectCredentialSummary(credential) {
|
|
25
|
+
return {
|
|
26
|
+
id: getShortUUID(credential.id),
|
|
27
|
+
type: credential.type,
|
|
28
|
+
serial: credential.serialNumber.substring(0, 30) + (credential.serialNumber.length > 30 ? "\u2026" : ""),
|
|
29
|
+
isActive: credential.isActive,
|
|
30
|
+
createdAt: getShortDate(credential.createdAt)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const useProjectCredentials = ({
|
|
34
|
+
platform,
|
|
35
|
+
type,
|
|
36
|
+
...fetchProps
|
|
37
|
+
}) => {
|
|
38
|
+
const queryResult = useQuery({
|
|
39
|
+
queryKey: cacheKeys.projectCredentials(fetchProps),
|
|
40
|
+
queryFn: async () => queryProjectCredentials(fetchProps),
|
|
41
|
+
select: (data) => {
|
|
42
|
+
if (!(platform || type)) return data;
|
|
43
|
+
return {
|
|
44
|
+
...data,
|
|
45
|
+
data: data.data.filter((credential) => {
|
|
46
|
+
return (!platform || credential.platform === platform) && (!type || credential.type === type);
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return queryResult;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { getProjectCredentialSummary as g, useProjectCredentials as u };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-Ce1x0Eh8.js';
|
|
4
|
+
import { b as getShortDate, p as getAuthedHeaders, q as API_URL, K as castArrayObjectDates } from './index-BB7X1Pqp.js';
|
|
5
|
+
import { g as getShortUUID } from './index-Cz_KLwWf.js';
|
|
6
|
+
|
|
7
|
+
async function queryProjectCredentials({
|
|
8
|
+
projectId,
|
|
9
|
+
...pageAndSortParams
|
|
10
|
+
}) {
|
|
11
|
+
try {
|
|
12
|
+
const headers = getAuthedHeaders();
|
|
13
|
+
const url = `${API_URL}/projects/${projectId}/credentials`;
|
|
14
|
+
const response = await axios.get(url, { headers, params: pageAndSortParams });
|
|
15
|
+
return {
|
|
16
|
+
...response.data,
|
|
17
|
+
data: castArrayObjectDates(response.data.data)
|
|
18
|
+
};
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.warn("queryProjectCredentials Error", error);
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function getProjectCredentialSummary(credential) {
|
|
25
|
+
return {
|
|
26
|
+
id: getShortUUID(credential.id),
|
|
27
|
+
type: credential.type,
|
|
28
|
+
serial: credential.serialNumber.substring(0, 30) + (credential.serialNumber.length > 30 ? "\u2026" : ""),
|
|
29
|
+
isActive: credential.isActive,
|
|
30
|
+
createdAt: getShortDate(credential.createdAt)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const useProjectCredentials = ({
|
|
34
|
+
platform,
|
|
35
|
+
type,
|
|
36
|
+
...fetchProps
|
|
37
|
+
}) => {
|
|
38
|
+
const queryResult = useQuery({
|
|
39
|
+
queryKey: cacheKeys.projectCredentials(fetchProps),
|
|
40
|
+
queryFn: async () => queryProjectCredentials(fetchProps),
|
|
41
|
+
select: (data) => {
|
|
42
|
+
if (!(platform || type)) return data;
|
|
43
|
+
return {
|
|
44
|
+
...data,
|
|
45
|
+
data: data.data.filter((credential) => {
|
|
46
|
+
return (!platform || credential.platform === platform) && (!type || credential.type === type);
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return queryResult;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { getProjectCredentialSummary as g, useProjectCredentials as u };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { io } from 'socket.io-client';
|
|
3
|
+
import { N as getAuthToken, W as WS_URL } from './index-C9734Cj2.js';
|
|
4
|
+
|
|
5
|
+
function useWebSocket(listeners = []) {
|
|
6
|
+
const log = () => {
|
|
7
|
+
};
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (listeners.length === 0) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const token = getAuthToken();
|
|
13
|
+
const socket = io(WS_URL, {
|
|
14
|
+
auth: { token },
|
|
15
|
+
forceNew: true
|
|
16
|
+
});
|
|
17
|
+
socket.on("connect", () => log());
|
|
18
|
+
for (const listener of listeners) {
|
|
19
|
+
const pattern = listener.getPattern();
|
|
20
|
+
const bindSocket = (pattern2) => {
|
|
21
|
+
const boundListener = listener.eventHandler.bind(listener, pattern2);
|
|
22
|
+
socket.on(pattern2, boundListener);
|
|
23
|
+
};
|
|
24
|
+
if (Array.isArray(pattern)) {
|
|
25
|
+
pattern.forEach(bindSocket);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
bindSocket(pattern);
|
|
29
|
+
}
|
|
30
|
+
return () => {
|
|
31
|
+
socket.disconnect();
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { useWebSocket as u };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { io } from 'socket.io-client';
|
|
3
|
+
import { N as getAuthToken, W as WS_URL } from './index-BB7X1Pqp.js';
|
|
4
|
+
|
|
5
|
+
function useWebSocket(listeners = []) {
|
|
6
|
+
const log = () => {
|
|
7
|
+
};
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (listeners.length === 0) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const token = getAuthToken();
|
|
13
|
+
const socket = io(WS_URL, {
|
|
14
|
+
auth: { token },
|
|
15
|
+
forceNew: true
|
|
16
|
+
});
|
|
17
|
+
socket.on("connect", () => log());
|
|
18
|
+
for (const listener of listeners) {
|
|
19
|
+
const pattern = listener.getPattern();
|
|
20
|
+
const bindSocket = (pattern2) => {
|
|
21
|
+
const boundListener = listener.eventHandler.bind(listener, pattern2);
|
|
22
|
+
socket.on(pattern2, boundListener);
|
|
23
|
+
};
|
|
24
|
+
if (Array.isArray(pattern)) {
|
|
25
|
+
pattern.forEach(bindSocket);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
bindSocket(pattern);
|
|
29
|
+
}
|
|
30
|
+
return () => {
|
|
31
|
+
socket.disconnect();
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { useWebSocket as u };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { io } from 'socket.io-client';
|
|
3
|
+
import { N as getAuthToken, W as WS_URL } from './index-Bv3x8c78.js';
|
|
4
|
+
|
|
5
|
+
function useWebSocket(listeners = []) {
|
|
6
|
+
const log = () => {
|
|
7
|
+
};
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (listeners.length === 0) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const token = getAuthToken();
|
|
13
|
+
const socket = io(WS_URL, {
|
|
14
|
+
auth: { token },
|
|
15
|
+
forceNew: true
|
|
16
|
+
});
|
|
17
|
+
socket.on("connect", () => log());
|
|
18
|
+
for (const listener of listeners) {
|
|
19
|
+
const pattern = listener.getPattern();
|
|
20
|
+
const bindSocket = (pattern2) => {
|
|
21
|
+
const boundListener = listener.eventHandler.bind(listener, pattern2);
|
|
22
|
+
socket.on(pattern2, boundListener);
|
|
23
|
+
};
|
|
24
|
+
if (Array.isArray(pattern)) {
|
|
25
|
+
pattern.forEach(bindSocket);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
bindSocket(pattern);
|
|
29
|
+
}
|
|
30
|
+
return () => {
|
|
31
|
+
socket.disconnect();
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { useWebSocket as u };
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { o as getAuthedHeaders, p as API_URL, M as castArrayObjectDates, B as BaseAuthenticatedCommand, s as isCWDGodotGame, P as Platform, C as CredentialsType } from './index-C9734Cj2.js';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
import 'crypto-js';
|
|
5
|
+
import 'uuid';
|
|
6
|
+
import 'luxon';
|
|
7
|
+
import 'fs';
|
|
8
|
+
import AppleLogin from './commands/apple/login.js';
|
|
9
|
+
|
|
10
|
+
async function getUserCredentials(pageSize = 100) {
|
|
11
|
+
const headers = getAuthedHeaders();
|
|
12
|
+
const { data } = await axios({
|
|
13
|
+
method: "get",
|
|
14
|
+
url: `${API_URL}/credentials?pageSize=${pageSize}`,
|
|
15
|
+
headers
|
|
16
|
+
});
|
|
17
|
+
return castArrayObjectDates(data.data);
|
|
18
|
+
}
|
|
19
|
+
async function getProjectCredentials(projectId, pageSize = 100) {
|
|
20
|
+
const headers = getAuthedHeaders();
|
|
21
|
+
const { data } = await axios({
|
|
22
|
+
method: "get",
|
|
23
|
+
url: `${API_URL}/projects/${projectId}/credentials?pageSize=${pageSize}`,
|
|
24
|
+
headers
|
|
25
|
+
});
|
|
26
|
+
return castArrayObjectDates(data.data);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class GameIosWizard extends BaseAuthenticatedCommand {
|
|
30
|
+
static args = {};
|
|
31
|
+
static description = "Runs all the steps for iOS";
|
|
32
|
+
static examples = ["<%= config.bin %> <%= command.id %>"];
|
|
33
|
+
static flags = {
|
|
34
|
+
forceStep: Flags.string({
|
|
35
|
+
char: "f",
|
|
36
|
+
description: "Force a specific step to run."
|
|
37
|
+
})
|
|
38
|
+
};
|
|
39
|
+
async run() {
|
|
40
|
+
const { flags } = this;
|
|
41
|
+
if (!isCWDGodotGame()) {
|
|
42
|
+
this.error(
|
|
43
|
+
"No Godot project detected. Please run this from a Godot project directory with a project.godot file.",
|
|
44
|
+
{ exit: 1 }
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
const projectConfig = await this.getProjectConfigSafe();
|
|
48
|
+
const game = projectConfig.project;
|
|
49
|
+
const isStepForced = (commandName) => flags.forceStep?.includes(commandName);
|
|
50
|
+
const iosSteps = [
|
|
51
|
+
{
|
|
52
|
+
command: "game:create",
|
|
53
|
+
args: ["--quiet"],
|
|
54
|
+
shouldRun: async () => !game
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
command: "apple:login",
|
|
58
|
+
args: ["--quiet"],
|
|
59
|
+
shouldRun: async () => {
|
|
60
|
+
const isLoggedIn = await this.hasValidAppleAuthState();
|
|
61
|
+
return !isLoggedIn;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
command: "apple:apiKey:create",
|
|
66
|
+
args: ["--quiet"],
|
|
67
|
+
shouldRun: async () => {
|
|
68
|
+
const userCredentials = await getUserCredentials();
|
|
69
|
+
const userAppleApiKeyCredentials = userCredentials.filter(
|
|
70
|
+
(cred) => cred.platform == Platform.IOS && cred.type == CredentialsType.KEY
|
|
71
|
+
);
|
|
72
|
+
return userAppleApiKeyCredentials.length === 0;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
command: "apple:certificate:create",
|
|
77
|
+
args: ["--quiet"],
|
|
78
|
+
shouldRun: async () => {
|
|
79
|
+
const userCredentials = await getUserCredentials();
|
|
80
|
+
const userAppleDistCredentials = userCredentials.filter(
|
|
81
|
+
(cred) => cred.platform == Platform.IOS && cred.type == CredentialsType.CERTIFICATE
|
|
82
|
+
);
|
|
83
|
+
return userAppleDistCredentials.length === 0;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
command: "game:ios:app:create",
|
|
88
|
+
args: ["--quiet"],
|
|
89
|
+
shouldRun: async () => {
|
|
90
|
+
if (!game) return true;
|
|
91
|
+
const hasBundleIdSet = !!game.details?.iosBundleId;
|
|
92
|
+
return !hasBundleIdSet;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
command: "game:ios:app:sync",
|
|
97
|
+
args: ["--quiet"],
|
|
98
|
+
// Can always run this
|
|
99
|
+
shouldRun: async () => true
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
command: "game:ios:profile:create",
|
|
103
|
+
args: ["--quiet"],
|
|
104
|
+
shouldRun: async () => {
|
|
105
|
+
if (!game) return true;
|
|
106
|
+
const projectCredentials = await getProjectCredentials(game.id);
|
|
107
|
+
const projectAppleProfileCredentials = projectCredentials.filter(
|
|
108
|
+
(cred) => cred.platform == Platform.IOS && cred.type == CredentialsType.CERTIFICATE
|
|
109
|
+
);
|
|
110
|
+
return projectAppleProfileCredentials.length === 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
];
|
|
114
|
+
for (const step of iosSteps) {
|
|
115
|
+
const command = step.command;
|
|
116
|
+
const willRun = isStepForced(command) || await step.shouldRun();
|
|
117
|
+
if (!willRun) {
|
|
118
|
+
this.debug(`Skipping step: ${command}`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const args = [...step.args, ...isStepForced(command) ? ["--force"] : []];
|
|
122
|
+
this.debug(`Running step: ${command} with args: ${args.join(" ")}`);
|
|
123
|
+
if (command === "apple:login") {
|
|
124
|
+
await AppleLogin.run(args);
|
|
125
|
+
} else {
|
|
126
|
+
await this.config.runCommand(command, args);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
await this.config.runCommand("game:status");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { GameIosWizard as G, getProjectCredentials as a, getUserCredentials as g };
|