shipthis 0.1.38 → 0.1.41

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 (90) hide show
  1. package/README.md +62 -5
  2. package/dist/{AppleBundleIdDetails-CgleH2pl.js → AppleBundleIdDetails-BJC7GCx_.js} +4 -3
  3. package/dist/{Command-7dCv1F9p.js → Command-Cj6F5B5a.js} +2 -1
  4. package/dist/{CommandGame-er5Ql6hq.js → CommandGame-CuvuH-z6.js} +2 -2
  5. package/dist/{Create-pLXESvEq.js → Create-pfGYcKu4.js} +2 -1
  6. package/dist/{GameStatus-B_Iw9tYr.js → GameStatus-ZSe-qG3y.js} +2 -1
  7. package/dist/{Import-fIsrfsmr.js → Import-D046HBaF.js} +3 -2
  8. package/dist/{JobLogTail-BPcQ8ghI.js → JobLogTail-Da8GuReK.js} +3 -2
  9. package/dist/{JobProgress-CpEatVPs.js → JobProgress-DltCQpzA.js} +9 -6
  10. package/dist/{JobStatusTable-BmJLzsUN.js → JobStatusTable-DVJjHw97.js} +3 -2
  11. package/dist/{ProjectCredentialsTable-DvPDhi7C.js → ProjectCredentialsTable-BJJz7W1P.js} +2 -2
  12. package/dist/{UserCredentialsTable-MBm1vAP3.js → UserCredentialsTable-CSynIVHU.js} +2 -1
  13. package/dist/{baseAppleCommand-uL0Gnav4.js → baseAppleCommand-Aq-Eaw_K.js} +1 -1
  14. package/dist/baseCommand-CTn3KGH3.js +787 -0
  15. package/dist/{baseGameAndroidCommand-CKTSQyZV.js → baseGameAndroidCommand-DRzVMKuG.js} +2 -1
  16. package/dist/{index-DHioYOIm.js → baseGameCommand-8VL7xe-O.js} +18 -749
  17. package/dist/commands/apiKey/create.js +6 -5
  18. package/dist/commands/apiKey/list.js +6 -5
  19. package/dist/commands/apiKey/revoke.js +6 -5
  20. package/dist/commands/apple/apiKey/create.js +13 -12
  21. package/dist/commands/apple/apiKey/delete.js +7 -6
  22. package/dist/commands/apple/apiKey/export.js +14 -13
  23. package/dist/commands/apple/apiKey/import.js +14 -13
  24. package/dist/commands/apple/apiKey/status.js +13 -12
  25. package/dist/commands/apple/certificate/create.js +13 -12
  26. package/dist/commands/apple/certificate/delete.js +7 -6
  27. package/dist/commands/apple/certificate/export.js +14 -13
  28. package/dist/commands/apple/certificate/import.js +14 -13
  29. package/dist/commands/apple/certificate/status.js +13 -12
  30. package/dist/commands/apple/login.js +4 -3
  31. package/dist/commands/apple/status.js +13 -12
  32. package/dist/commands/dashboard.js +9 -8
  33. package/dist/commands/game/android/apiKey/connect.js +11 -10
  34. package/dist/commands/game/android/apiKey/create.js +13 -12
  35. package/dist/commands/game/android/apiKey/delete.js +6 -5
  36. package/dist/commands/game/android/apiKey/export.js +13 -12
  37. package/dist/commands/game/android/apiKey/import.js +13 -12
  38. package/dist/commands/game/android/apiKey/invite.js +21 -20
  39. package/dist/commands/game/android/apiKey/policy.js +8 -7
  40. package/dist/commands/game/android/apiKey/status.js +13 -12
  41. package/dist/commands/game/android/keyStore/create.js +10 -9
  42. package/dist/commands/game/android/keyStore/delete.js +6 -5
  43. package/dist/commands/game/android/keyStore/export.js +12 -11
  44. package/dist/commands/game/android/keyStore/import.js +15 -14
  45. package/dist/commands/game/android/keyStore/status.js +15 -14
  46. package/dist/commands/game/android/status.js +7 -6
  47. package/dist/commands/game/build/download.js +6 -5
  48. package/dist/commands/game/build/list.js +11 -10
  49. package/dist/commands/game/create.js +5 -3
  50. package/dist/commands/game/details.js +15 -11
  51. package/dist/commands/game/export.js +4 -3
  52. package/dist/commands/game/ios/app/addTester.js +8 -7
  53. package/dist/commands/game/ios/app/create.js +7 -6
  54. package/dist/commands/game/ios/app/status.js +13 -12
  55. package/dist/commands/game/ios/app/sync.js +11 -10
  56. package/dist/commands/game/ios/profile/create.js +9 -8
  57. package/dist/commands/game/ios/profile/delete.js +9 -8
  58. package/dist/commands/game/ios/profile/export.js +12 -11
  59. package/dist/commands/game/ios/profile/import.js +12 -11
  60. package/dist/commands/game/ios/profile/status.js +13 -12
  61. package/dist/commands/game/ios/status.js +17 -16
  62. package/dist/commands/game/ios/wizard.js +13 -11
  63. package/dist/commands/game/job/list.js +6 -5
  64. package/dist/commands/game/job/status.js +11 -10
  65. package/dist/commands/game/list.js +6 -5
  66. package/dist/commands/game/ship.js +15 -9
  67. package/dist/commands/game/status.js +14 -13
  68. package/dist/commands/game/wizard.js +30 -28
  69. package/dist/commands/internal/fastlane.js +14 -13
  70. package/dist/commands/internal/readme.js +18 -17
  71. package/dist/commands/login.js +20 -19
  72. package/dist/commands/status.js +9 -8
  73. package/dist/commands/util/glass.js +119 -0
  74. package/dist/{export-BwwAjG_F.js → export-DtATljiz.js} +1 -1
  75. package/dist/{import-OgFrUsqw.js → import-Dk2ywOVU.js} +1 -1
  76. package/dist/{index-C2omlhEs.js → index-BW7z-5sB.js} +1 -1
  77. package/dist/{index-DVEYxVsH.js → index-CuyVBHWc.js} +4 -3
  78. package/dist/{index-C1XpCT_9.js → index-cRnjcGxV.js} +5 -4
  79. package/dist/{upload-5s3sy2jF.js → upload-CHaDSvvi.js} +1 -1
  80. package/dist/{useAppleApp-szQ_Kg5S.js → useAppleApp-CR847GWc.js} +1 -1
  81. package/dist/{useAppleBundleId-BarLcidd.js → useAppleBundleId-BnwPmVEu.js} +1 -1
  82. package/dist/{useAppleProfiles-C2U4NzC3.js → useAppleProfiles-DY-H0420.js} +1 -1
  83. package/dist/{useGoogleStatus-zfnjhtNB.js → useGoogleStatus-WqPgHteE.js} +2 -1
  84. package/dist/{useProjectCredentials-DbynNY96.js → useProjectCredentials-TvlolkId.js} +2 -1
  85. package/dist/{useWebSocket-h7smqhZQ.js → useWebSocket-MXDbQHcu.js} +1 -1
  86. package/docs/README.md +1 -0
  87. package/docs/game/ship.md +36 -13
  88. package/docs/util/glass.md +47 -0
  89. package/docs/util.md +11 -0
  90. package/package.json +3 -1
@@ -1,38 +1,39 @@
1
1
  import fs__default, { promises } from 'node:fs';
2
- import path from 'node:path';
2
+ import path__default from 'node:path';
3
3
  import { Args, Flags } from '@oclif/core';
4
- import { ac as BaseCommand } from '../../index-DHioYOIm.js';
5
4
  import 'axios';
6
5
  import 'crypto-js';
7
6
  import 'uuid';
7
+ import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
8
8
  import 'luxon';
9
- import 'chalk';
10
- import '@expo/apple-utils/build/index.js';
9
+ import 'react/jsx-runtime';
10
+ import 'ink';
11
+ import 'ink-spinner';
11
12
  import 'node:crypto';
12
13
  import 'node:readline';
13
14
  import 'node:url';
14
15
  import 'readline-sync';
15
16
  import 'isomorphic-git';
16
- import 'deepmerge';
17
- import 'ini';
18
17
  import '@tanstack/react-query';
19
18
  import 'react';
20
19
  import 'fast-glob';
21
20
  import 'yazl';
22
21
  import 'socket.io-client';
23
22
  import 'fullscreen-ink';
24
- import 'ink';
25
- import 'react/jsx-runtime';
26
- import 'ink-spinner';
27
23
  import 'string-length';
28
24
  import 'strip-ansi';
29
25
  import 'open';
30
26
  import '@inkjs/ui';
31
- import 'fs';
32
- import 'path';
27
+ import '../../baseGameCommand-8VL7xe-O.js';
33
28
  import 'marked';
34
29
  import 'marked-terminal';
35
30
  import 'qrcode';
31
+ import 'chalk';
32
+ import '@expo/apple-utils/build/index.js';
33
+ import 'deepmerge';
34
+ import 'ini';
35
+ import 'fs';
36
+ import 'path';
36
37
 
37
38
  function generateFastlaneSession(cookieData) {
38
39
  return cookieData.cookies.map((cookie) => `- !ruby/object:HTTP::Cookie
@@ -65,7 +66,7 @@ class AppleFastlane extends BaseCommand {
65
66
  const { args } = this;
66
67
  const { file, username } = args;
67
68
  const homeDirectory = this.config.home;
68
- const inputFilePath = path.join(homeDirectory, ".app-store", "auth", username, "cookie");
69
+ const inputFilePath = path__default.join(homeDirectory, ".app-store", "auth", username, "cookie");
69
70
  if (!fs__default.existsSync(inputFilePath)) {
70
71
  throw new Error(`No expo auth file found for ${username}`);
71
72
  }
@@ -76,7 +77,7 @@ class AppleFastlane extends BaseCommand {
76
77
  const fileContent = await promises.readFile(inputFilePath, "utf8");
77
78
  const cookieData = JSON.parse(fileContent);
78
79
  const yamlContent = generateFastlaneSession(cookieData);
79
- await promises.mkdir(path.dirname(outputFilePath), { recursive: true });
80
+ await promises.mkdir(path__default.dirname(outputFilePath), { recursive: true });
80
81
  await promises.writeFile(outputFilePath, yamlContent, "utf-8");
81
82
  console.log(`FASTLANE_SESSION written to ${outputFilePath}`);
82
83
  }
@@ -1,39 +1,40 @@
1
1
  import fs__default from 'node:fs';
2
- import path from 'node:path';
2
+ import path__default from 'node:path';
3
3
  import { Args, Flags } from '@oclif/core';
4
- import { ac as BaseCommand, ad as ejs } from '../../index-DHioYOIm.js';
5
- import CustomHelp from '../../utils/help.js';
4
+ import { q as ejs } from '../../baseGameCommand-8VL7xe-O.js';
6
5
  import 'axios';
7
6
  import 'crypto-js';
8
7
  import 'uuid';
8
+ import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
9
9
  import 'luxon';
10
- import 'chalk';
11
- import '@expo/apple-utils/build/index.js';
10
+ import 'react/jsx-runtime';
11
+ import 'ink';
12
+ import 'ink-spinner';
12
13
  import 'node:crypto';
13
14
  import 'node:readline';
14
15
  import 'node:url';
15
16
  import 'readline-sync';
16
17
  import 'isomorphic-git';
17
- import 'deepmerge';
18
- import 'ini';
18
+ import CustomHelp from '../../utils/help.js';
19
19
  import '@tanstack/react-query';
20
20
  import 'react';
21
21
  import 'fast-glob';
22
22
  import 'yazl';
23
23
  import 'socket.io-client';
24
24
  import 'fullscreen-ink';
25
- import 'ink';
26
- import 'react/jsx-runtime';
27
- import 'ink-spinner';
28
25
  import 'string-length';
29
26
  import 'strip-ansi';
30
27
  import 'open';
31
28
  import '@inkjs/ui';
32
- import 'fs';
33
- import 'path';
34
29
  import 'marked';
35
30
  import 'marked-terminal';
36
31
  import 'qrcode';
32
+ import 'fs';
33
+ import 'path';
34
+ import 'chalk';
35
+ import '@expo/apple-utils/build/index.js';
36
+ import 'deepmerge';
37
+ import 'ini';
37
38
 
38
39
  const ROOT_TOPIC_NAME = "shipthis";
39
40
  const ROOT_TOPIC_DESCRIPTION = "Root topic";
@@ -133,7 +134,7 @@ function getTopicTree(topics, commands, separateFileDepth) {
133
134
  const includeTopicsAndCommands = currentParent.includeTopicsAndCommands || currentDepth >= separateFileDepth;
134
135
  const newSubTopic = {
135
136
  commands: [],
136
- filePath: `${path.join(...name.split(":"))}.md`,
137
+ filePath: `${path__default.join(...name.split(":"))}.md`,
137
138
  includeTopicsAndCommands,
138
139
  subTopics: [],
139
140
  topic: topicsByName[name]
@@ -153,7 +154,7 @@ function getTopicTree(topics, commands, separateFileDepth) {
153
154
  if (!subTopic) throw new Error("Could not find topic for command: " + command.id);
154
155
  currentParent = subTopic;
155
156
  }
156
- currentParent.commands.push({ command, filePath: `${path.join(...command.id.split(":"))}.md` });
157
+ currentParent.commands.push({ command, filePath: `${path__default.join(...command.id.split(":"))}.md` });
157
158
  }
158
159
  return topicTree;
159
160
  }
@@ -184,13 +185,13 @@ function writeTopic(topic, outputDir, dryRun, overWrite, only) {
184
185
  outputList.push(filePath2);
185
186
  const doWrite = !exists || overWrite;
186
187
  if (!doWrite || dryRun) return;
187
- const folder = path.dirname(filePath2);
188
+ const folder = path__default.dirname(filePath2);
188
189
  fs__default.mkdirSync(folder, { recursive: true });
189
190
  fs__default.writeFileSync(filePath2, rendered);
190
191
  };
191
192
  const skipFile = (filePath2) => only && !filePath2.match(only);
192
193
  const writeOutput = { created: [], overwritten: [] };
193
- const filePath = path.join(outputDir, topic.filePath);
194
+ const filePath = path__default.join(outputDir, topic.filePath);
194
195
  if (!skipFile(filePath)) makeFolderAndSave(filePath, topic.rendered);
195
196
  for (const subTopic of topic.subTopics) {
196
197
  const subWriteOutput = writeTopic(subTopic, outputDir, dryRun, overWrite, only);
@@ -199,7 +200,7 @@ function writeTopic(topic, outputDir, dryRun, overWrite, only) {
199
200
  }
200
201
  for (const command of topic.commands) {
201
202
  if (!command.renderedForFile) throw new Error(`Command ${command.command.id} has not been rendered`);
202
- const filePath2 = path.join(outputDir, command.filePath);
203
+ const filePath2 = path__default.join(outputDir, command.filePath);
203
204
  if (!skipFile(filePath2)) makeFolderAndSave(filePath2, command.renderedForFile);
204
205
  }
205
206
  return writeOutput;
@@ -1,12 +1,29 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import axios from 'axios';
3
- import { W as WEB_URL, ac as BaseCommand, ai as acceptTerms, s as API_URL, aj as setAuthToken, c as getInput } from '../index-DHioYOIm.js';
3
+ import { W as WEB_URL, B as BaseCommand, Z as acceptTerms, o as API_URL, _ as setAuthToken } from '../baseCommand-CTn3KGH3.js';
4
+ import 'react/jsx-runtime';
5
+ import 'ink';
6
+ import 'ink-spinner';
7
+ import { b as getInput } from '../baseGameCommand-8VL7xe-O.js';
8
+ import 'react';
9
+ import '@tanstack/react-query';
10
+ import 'luxon';
4
11
  import 'node:fs';
5
- import 'crypto-js';
12
+ import 'fast-glob';
6
13
  import 'uuid';
7
- import 'luxon';
14
+ import 'yazl';
15
+ import 'socket.io-client';
16
+ import 'fullscreen-ink';
17
+ import 'string-length';
18
+ import 'strip-ansi';
19
+ import 'open';
20
+ import '@inkjs/ui';
8
21
  import 'node:path';
22
+ import 'marked';
23
+ import 'marked-terminal';
24
+ import 'qrcode';
9
25
  import 'chalk';
26
+ import 'crypto-js';
10
27
  import '@expo/apple-utils/build/index.js';
11
28
  import 'node:crypto';
12
29
  import 'node:readline';
@@ -15,24 +32,8 @@ import 'readline-sync';
15
32
  import 'isomorphic-git';
16
33
  import 'deepmerge';
17
34
  import 'ini';
18
- import '@tanstack/react-query';
19
- import 'react';
20
- import 'fast-glob';
21
- import 'yazl';
22
- import 'socket.io-client';
23
- import 'fullscreen-ink';
24
- import 'ink';
25
- import 'react/jsx-runtime';
26
- import 'ink-spinner';
27
- import 'string-length';
28
- import 'strip-ansi';
29
- import 'open';
30
- import '@inkjs/ui';
31
35
  import 'fs';
32
36
  import 'path';
33
- import 'marked';
34
- import 'marked-terminal';
35
- import 'qrcode';
36
37
 
37
38
  const TERMS_URL = new URL("/terms", WEB_URL).href;
38
39
  const PRIVACY_URL = new URL("/privacy", WEB_URL).href;
@@ -1,21 +1,21 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { render } from 'ink';
3
- import { ac as BaseCommand, o as isCWDGodotGame } from '../index-DHioYOIm.js';
3
+ import 'node:fs';
4
+ import 'axios';
5
+ import 'crypto-js';
6
+ import 'uuid';
7
+ import { B as BaseCommand, j as isCWDGodotGame } from '../baseCommand-CTn3KGH3.js';
8
+ import 'luxon';
4
9
  import 'ink-spinner';
5
10
  import 'node:crypto';
6
- import 'node:fs';
7
11
  import 'node:path';
8
12
  import 'node:readline';
9
13
  import 'node:url';
10
14
  import 'readline-sync';
11
- import 'luxon';
12
- import 'axios';
13
15
  import { i as isCWDGitRepo } from '../git-BpsfNFZ_.js';
14
16
  import '@oclif/core';
15
17
  import '@tanstack/react-query';
16
18
  import 'react';
17
- import 'crypto-js';
18
- import 'uuid';
19
19
  import 'fast-glob';
20
20
  import 'yazl';
21
21
  import 'socket.io-client';
@@ -25,19 +25,20 @@ import 'strip-ansi';
25
25
  import { S as StatusTable } from '../StatusTable-DzRWcMr4.js';
26
26
  import 'open';
27
27
  import '@inkjs/ui';
28
+ import '../baseGameCommand-8VL7xe-O.js';
28
29
  import 'marked';
29
30
  import 'marked-terminal';
30
31
  import { N as NextSteps } from '../NextSteps-DbJHmscQ.js';
31
32
  import 'qrcode';
32
- import { C as Command } from '../Command-7dCv1F9p.js';
33
+ import { C as Command } from '../Command-Cj6F5B5a.js';
33
34
  import chalk from 'chalk';
34
35
  import '@expo/apple-utils/build/index.js';
35
36
  import 'isomorphic-git';
36
37
  import 'deepmerge';
37
38
  import 'ini';
39
+ import '../Title-BCQtayg6.js';
38
40
  import 'fs';
39
41
  import 'path';
40
- import '../Title-BCQtayg6.js';
41
42
 
42
43
  class Status extends BaseCommand {
43
44
  static args = {};
@@ -0,0 +1,119 @@
1
+ import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
2
+ import { Flags, Args } from '@oclif/core';
3
+ import * as fs from 'node:fs';
4
+ import * as path from 'node:path';
5
+ import xcode from 'xcode';
6
+ import 'chalk';
7
+ import 'axios';
8
+ import 'crypto-js';
9
+ import 'uuid';
10
+ import 'luxon';
11
+ import '@expo/apple-utils/build/index.js';
12
+ import 'node:crypto';
13
+ import 'node:readline';
14
+ import 'node:url';
15
+ import 'readline-sync';
16
+ import 'isomorphic-git';
17
+ import 'deepmerge';
18
+ import 'ini';
19
+ import '@tanstack/react-query';
20
+ import 'react';
21
+ import 'fast-glob';
22
+ import 'yazl';
23
+ import 'socket.io-client';
24
+ import 'fullscreen-ink';
25
+ import 'ink';
26
+
27
+ async function applyLiquidGlassIcon(opts) {
28
+ const { projectDir, iconDir, verbose } = opts;
29
+ const info = (msg) => {
30
+ if (!verbose) return;
31
+ console.log(msg);
32
+ };
33
+ const warn = (msg) => console.warn(`Warning: ${msg}`);
34
+ info(`Applying Liquid Glass icon from: ${iconDir}`);
35
+ if (!fs.existsSync(projectDir)) {
36
+ throw new Error(`projectDir not found: ${projectDir}`);
37
+ }
38
+ const pbxprojPath = path.join(projectDir, "project.pbxproj");
39
+ if (!fs.existsSync(pbxprojPath)) {
40
+ throw new Error(`project.pbxproj not found at: ${pbxprojPath}`);
41
+ }
42
+ if (!fs.existsSync(iconDir)) {
43
+ throw new Error(`Icon directory not found: ${iconDir}`);
44
+ }
45
+ const iconFolderName = path.basename(iconDir);
46
+ const appIconName = iconFolderName.replace(/\.icon$/i, "");
47
+ info(`Detected .icon folder: ${iconFolderName}`);
48
+ info(`Derived app icon name: ${appIconName}`);
49
+ const projectRoot = path.dirname(projectDir);
50
+ const destIconDir = path.join(projectRoot, iconFolderName);
51
+ if (!fs.existsSync(destIconDir)) {
52
+ info(`Copying .icon folder into project root: ${destIconDir}`);
53
+ await fs.promises.cp(iconDir, destIconDir, {
54
+ recursive: true
55
+ });
56
+ } else {
57
+ info(`Icon folder already exists in project root, skipping copy.`);
58
+ }
59
+ const project = xcode.project(pbxprojPath);
60
+ project.parseSync();
61
+ info(`Adding folder reference to Copy Bundle Resources: ${iconFolderName}`);
62
+ const firstProject = project.getFirstProject();
63
+ const mainGroupId = firstProject.firstProject.mainGroup;
64
+ const mainGroup = project.getPBXGroupByKey(mainGroupId);
65
+ const fileRef = project.addResourceFile(
66
+ iconFolderName,
67
+ { lastKnownFileType: "folder.iconcomposer.icon" },
68
+ mainGroup.name
69
+ );
70
+ if (fileRef) {
71
+ project.addToPbxResourcesBuildPhase(fileRef);
72
+ } else {
73
+ warn(`Folder reference may already exist in project: ${iconFolderName}`);
74
+ }
75
+ const configs = project.pbxXCBuildConfigurationSection();
76
+ let modified = 0;
77
+ info(`Updating build settings for app icon: ${appIconName}`);
78
+ for (const key in configs) {
79
+ const cfg = configs[key];
80
+ if (!cfg || typeof cfg !== "object" || !cfg.buildSettings) continue;
81
+ cfg.buildSettings["ASSETCATALOG_COMPILER_APPICON_NAME"] = appIconName;
82
+ cfg.buildSettings["ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS"] = "YES";
83
+ modified++;
84
+ }
85
+ info(`Modified ${modified} build configurations`);
86
+ info(`Writing updated project to ${pbxprojPath}`);
87
+ fs.writeFileSync(pbxprojPath, project.writeSync());
88
+ info(`Liquid Glass icon successfully applied.`);
89
+ }
90
+ class InternalGlass extends BaseCommand {
91
+ static description = "Apply a Liquid Glass .icon folder to a local Xcode project";
92
+ static flags = {
93
+ verbose: Flags.boolean({
94
+ default: false,
95
+ description: "Enable verbose logging"
96
+ })
97
+ };
98
+ static args = {
99
+ project: Args.string({
100
+ description: "Path to the .xcodeproj directory",
101
+ required: true
102
+ }),
103
+ icon: Args.string({
104
+ description: "Path to the .icon folder",
105
+ required: true
106
+ })
107
+ };
108
+ async run() {
109
+ const { args, flags } = await this.parse(InternalGlass);
110
+ await applyLiquidGlassIcon({
111
+ projectDir: args.project,
112
+ iconDir: args.icon,
113
+ verbose: flags.verbose
114
+ });
115
+ this.log("Liquid Glass icon applied.");
116
+ }
117
+ }
118
+
119
+ export { applyLiquidGlassIcon, InternalGlass as default };
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'node:fs';
2
2
  import axios from 'axios';
3
- import { s as API_URL, t as getAuthedHeaders } from './index-DHioYOIm.js';
3
+ import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.js';
4
4
 
5
5
  async function exportCredential({ credentialId, projectId, zipPath }) {
6
6
  const headers = getAuthedHeaders();
@@ -1,6 +1,6 @@
1
1
  import { promises } from 'node:fs';
2
2
  import axios from 'axios';
3
- import { s as API_URL, t as getAuthedHeaders } from './index-DHioYOIm.js';
3
+ import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.js';
4
4
 
5
5
  async function getNewImportTicket(projectId) {
6
6
  const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { s as API_URL, t as getAuthedHeaders, V as castArrayObjectDates } from './index-DHioYOIm.js';
2
+ import { o as API_URL, p as getAuthedHeaders, F as castArrayObjectDates } from './baseCommand-CTn3KGH3.js';
3
3
  import 'node:fs';
4
4
 
5
5
  async function getUserCredentials(pageSize = 100) {
@@ -12,7 +12,7 @@ import 'readline-sync';
12
12
  import 'luxon';
13
13
  import 'axios';
14
14
  import 'isomorphic-git';
15
- import { av as getShortAuthRequiredUrl, ax as getGoogleAuthUrl, R as GameContext, at as useSafeInput, W as WEB_URL, au as Markdown } from './index-DHioYOIm.js';
15
+ import { a3 as getShortAuthRequiredUrl, a5 as getGoogleAuthUrl, W as WEB_URL } from './baseCommand-CTn3KGH3.js';
16
16
  import '@oclif/core';
17
17
  import '@tanstack/react-query';
18
18
  import 'crypto-js';
@@ -20,9 +20,10 @@ import 'uuid';
20
20
  import 'fast-glob';
21
21
  import 'yazl';
22
22
  import 'socket.io-client';
23
- import { u as useGoogleStatus } from './useGoogleStatus-zfnjhtNB.js';
24
- import { u as useWebSocket } from './useWebSocket-h7smqhZQ.js';
23
+ import { u as useGoogleStatus } from './useGoogleStatus-WqPgHteE.js';
24
+ import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
25
25
  import 'fullscreen-ink';
26
+ import { G as GameContext, w as useSafeInput, M as Markdown } from './baseGameCommand-8VL7xe-O.js';
26
27
  import 'string-length';
27
28
  import 'strip-ansi';
28
29
  import '@inkjs/ui';
@@ -8,20 +8,21 @@ import 'node:path';
8
8
  import 'node:readline';
9
9
  import 'node:url';
10
10
  import 'readline-sync';
11
- import { a0 as cacheKeys, t as getAuthedHeaders, s as API_URL, aw as castObjectDates, X as queryClient, a5 as revokePolicy, a4 as enforcePolicy, P as Platform, C as CredentialsType, a2 as getGoogleStatus, R as GameContext, at as useSafeInput, au as Markdown, f as getShortDate } from './index-DHioYOIm.js';
11
+ import { p as getAuthedHeaders, o as API_URL, a4 as castObjectDates, H as queryClient, Q as revokePolicy, O as enforcePolicy, P as Platform, C as CredentialsType, M as getGoogleStatus, c as getShortDate } from './baseCommand-CTn3KGH3.js';
12
12
  import axios from 'axios';
13
13
  import 'isomorphic-git';
14
14
  import '@oclif/core';
15
15
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
16
16
  import 'luxon';
17
+ import { k as cacheKeys, G as GameContext, w as useSafeInput, M as Markdown } from './baseGameCommand-8VL7xe-O.js';
17
18
  import 'fast-glob';
18
19
  import 'uuid';
19
20
  import 'yazl';
20
21
  import 'socket.io-client';
21
22
  import 'fullscreen-ink';
22
- import { u as useWebSocket } from './useWebSocket-h7smqhZQ.js';
23
- import { u as useProjectCredentials } from './useProjectCredentials-DbynNY96.js';
24
- import { u as useGoogleStatus } from './useGoogleStatus-zfnjhtNB.js';
23
+ import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
24
+ import { u as useProjectCredentials } from './useProjectCredentials-TvlolkId.js';
25
+ import { u as useGoogleStatus } from './useGoogleStatus-WqPgHteE.js';
25
26
  import 'crypto-js';
26
27
  import 'string-length';
27
28
  import 'strip-ansi';
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { s as API_URL, t as getAuthedHeaders } from './index-DHioYOIm.js';
2
+ import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.js';
3
3
 
4
4
  async function getNewUploadTicket(projectId = null) {
5
5
  const url = projectId ? `${API_URL}/projects/${projectId}/credentials/url` : `${API_URL}/credentials/url`;
@@ -1,5 +1,5 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import { l as App } from './index-DHioYOIm.js';
2
+ import { f as App } from './baseCommand-CTn3KGH3.js';
3
3
 
4
4
  const queryAppleApp = async ({ ctx, iosBundleId }) => {
5
5
  if (!iosBundleId) {
@@ -1,5 +1,5 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import { k as BundleId, u as getGodotProjectCapabilities, P as Platform, G as GODOT_CAPABILITIES, v as CapabilityType } from './index-DHioYOIm.js';
2
+ import { e as BundleId, q as getGodotProjectCapabilities, P as Platform, G as GODOT_CAPABILITIES, r as CapabilityType } from './baseCommand-CTn3KGH3.js';
3
3
 
4
4
  async function getBundleIdCapabilities(bundleId) {
5
5
  const current = await bundleId.getBundleIdCapabilitiesAsync();
@@ -1,6 +1,6 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
2
  import { DateTime } from 'luxon';
3
- import { f as getShortDate, q as Profile, r as ProfileType } from './index-DHioYOIm.js';
3
+ import { c as getShortDate, m as Profile, n as ProfileType } from './baseCommand-CTn3KGH3.js';
4
4
  import 'node:crypto';
5
5
  import 'node:fs';
6
6
  import 'node:path';
@@ -1,5 +1,6 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import { a0 as cacheKeys, a2 as getGoogleStatus } from './index-DHioYOIm.js';
2
+ import { M as getGoogleStatus } from './baseCommand-CTn3KGH3.js';
3
+ import { k as cacheKeys } from './baseGameCommand-8VL7xe-O.js';
3
4
 
4
5
  const useGoogleStatus = () => useQuery({
5
6
  queryFn: getGoogleStatus,
@@ -1,6 +1,7 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
2
  import axios from 'axios';
3
- import { a0 as cacheKeys, g as getShortUUID, f as getShortDate, t as getAuthedHeaders, s as API_URL, V as castArrayObjectDates } from './index-DHioYOIm.js';
3
+ import { c as getShortDate, p as getAuthedHeaders, o as API_URL, F as castArrayObjectDates } from './baseCommand-CTn3KGH3.js';
4
+ import { k as cacheKeys, g as getShortUUID } from './baseGameCommand-8VL7xe-O.js';
4
5
 
5
6
  async function queryProjectCredentials({
6
7
  projectId,
@@ -1,6 +1,6 @@
1
1
  import { useEffect } from 'react';
2
2
  import { io } from 'socket.io-client';
3
- import { _ as WS_URL, $ as getAuthToken } from './index-DHioYOIm.js';
3
+ import { I as WS_URL, K as getAuthToken } from './baseCommand-CTn3KGH3.js';
4
4
 
5
5
  function useWebSocket(listeners = []) {
6
6
  const log = () => {
package/docs/README.md CHANGED
@@ -11,6 +11,7 @@ Begin with our [Quickstart Guide](https://shipth.is/docs/guides/quick-start).
11
11
  - [apiKey](https://shipth.is/docs/reference/apiKey) - Commands that relate to ShipThis API keys
12
12
  - [apple](https://shipth.is/docs/reference/apple) - Commands that relate to linking your ShipThis account with your Apple Developer Account
13
13
  - [game](https://shipth.is/docs/reference/game) - Commands that relate to configuring the specific game in the current working directory
14
+ - [util](https://shipth.is/docs/reference/util) - Utility commands that do not require login
14
15
 
15
16
  ## Commands
16
17
 
package/docs/game/ship.md CHANGED
@@ -27,30 +27,51 @@ When using ShipThis in a CI environment, it is most useful to use the `--follow`
27
27
 
28
28
  [![asciicast](https://asciinema.org/a/gKmZ0E1rJ4oiT9SyuSivXBZfY.svg)](https://asciinema.org/a/gKmZ0E1rJ4oiT9SyuSivXBZfY#shipthis-col80row24)
29
29
 
30
- ### Advanced usage - follow, do not publish, and then download APK
30
+ ### Follow, do not publish, and then download APK
31
31
 
32
32
  [![asciicast](https://asciinema.org/a/GNf0t8niOlrMDsgPKqmBcuqQh.svg)](https://asciinema.org/a/GNf0t8niOlrMDsgPKqmBcuqQh#shipthis-col80row24)
33
33
 
34
+ ### Building with demo credentials
35
+
36
+ Adding the `--useDemoCredentials` flag executes the build for the specified platform but applies ShipThis certificates, keystores or provisioning profiles. This can be useful to generate an asset which can be side-loaded onto your own device.
37
+
38
+ ```bash
39
+ # To build for iOS with demo credentials
40
+ shipthis game ship --platform ios --follow --useDemoCredentials --download game.ipa
41
+
42
+ # To build for Android with demo credentials
43
+ shipthis game ship --platform android --follow --useDemoCredentials --downloadAPK game.apk
44
+ ```
45
+
46
+ ### Overriding the Godot version
47
+
48
+ You can specify a different Godot version to use only for the current job. This can be helpful if you are upgrading your game to use a newer version of Godot.
49
+
50
+ ```bash
51
+ shipthis game ship --platform android --follow --gameEngineVersion 4.5.1 --download game-4.5.1.aab
52
+ ```
53
+
34
54
  ## Help Output
35
55
 
36
56
  ```help
37
57
  USAGE
38
- $ shipthis game ship [-g <value>] [--download <value> --platform android|ios] [--downloadAPK <value> ] [--follow ]
39
- [--skipPublish] [--verbose] [--useDemoCredentials ]
58
+ $ shipthis game ship [-g <value>] [--download <value> --platform android|ios] [--downloadAPK <value> ] [--follow ] [--skipPublish] [--verbose] [--useDemoCredentials ]
59
+ [--gameEngineVersion <value>]
40
60
 
41
61
  FLAGS
42
- -g, --gameId=<value> The ID of the game
43
- --download=<value> Download the build artifact to the specified file
44
- --downloadAPK=<value> Download the APK artifact (if available) to the specified file
45
- --follow Follow the job logs in real-time (requires --platform)
46
- --platform=<option> The platform to ship the game to. This can be "android" or "ios"
47
- <options: android|ios>
48
- --skipPublish Skip the publish step
49
- --useDemoCredentials Use demo credentials for this build (requires --platform, implies --skipPublish)
50
- --verbose Enable verbose logging
62
+ -g, --gameId=<value> The ID of the game
63
+ --download=<value> Download the build artifact to the specified file
64
+ --downloadAPK=<value> Download the APK artifact (if available) to the specified file
65
+ --follow Follow the job logs in real-time (requires --platform)
66
+ --gameEngineVersion=<value> Override the specified game engine version for this build
67
+ --platform=<option> The platform to ship the game to. This can be "android" or "ios"
68
+ <options: android|ios>
69
+ --skipPublish Skip the publish step
70
+ --useDemoCredentials Use demo credentials for this build (requires --platform, implies --skipPublish)
71
+ --verbose Enable verbose logging
51
72
 
52
73
  DESCRIPTION
53
- Builds the app (for all platforms with valid credentials) and ships it to the stores.
74
+ Builds and publishes your ShipThis game.
54
75
 
55
76
  EXAMPLES
56
77
  $ shipthis game ship
@@ -66,4 +87,6 @@ EXAMPLES
66
87
  $ shipthis game ship --platform ios --follow --verbose
67
88
 
68
89
  $ shipthis game ship --platform ios --useDemoCredentials --download game.ipa
90
+
91
+ $ shipthis game ship --platform android --gameEngineVersion 4.5.1 --skipPublish
69
92
  ```