@solana-mobile/dapp-store-cli 0.4.0 → 0.4.1

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 (110) hide show
  1. package/lib/esm/CliUtils.js +105 -0
  2. package/lib/esm/CliUtils.js.map +1 -0
  3. package/lib/esm/commands/{validate.js → ValidateCommand.js} +4 -3
  4. package/lib/esm/commands/ValidateCommand.js.map +1 -0
  5. package/lib/esm/commands/create/{app.js → CreateCliApp.js} +5 -4
  6. package/lib/esm/commands/create/CreateCliApp.js.map +1 -0
  7. package/lib/esm/commands/create/{publisher.js → CreateCliPublisher.js} +5 -4
  8. package/lib/esm/commands/create/CreateCliPublisher.js.map +1 -0
  9. package/lib/esm/commands/create/{release.js → CreateCliRelease.js} +5 -4
  10. package/lib/esm/commands/create/CreateCliRelease.js.map +1 -0
  11. package/lib/esm/commands/create/index.js +3 -3
  12. package/lib/esm/commands/create/index.js.map +1 -1
  13. package/lib/esm/commands/index.js +1 -1
  14. package/lib/esm/commands/index.js.map +1 -1
  15. package/lib/esm/commands/publish/{remove.js → PublishCliRemove.js} +4 -3
  16. package/lib/esm/commands/publish/PublishCliRemove.js.map +1 -0
  17. package/lib/esm/commands/publish/{submit.js → PublishCliSubmit.js} +4 -3
  18. package/lib/esm/commands/publish/PublishCliSubmit.js.map +1 -0
  19. package/lib/esm/commands/publish/{support.js → PublishCliSupport.js} +4 -3
  20. package/lib/esm/commands/publish/PublishCliSupport.js.map +1 -0
  21. package/lib/esm/commands/publish/{update.js → PublishCliUpdate.js} +4 -3
  22. package/lib/esm/commands/publish/PublishCliUpdate.js.map +1 -0
  23. package/lib/esm/commands/publish/index.js +4 -4
  24. package/lib/esm/commands/publish/index.js.map +1 -1
  25. package/lib/esm/commands/scaffolding/{init.js → ScaffoldInit.js} +2 -2
  26. package/lib/esm/commands/scaffolding/ScaffoldInit.js.map +1 -0
  27. package/lib/esm/commands/scaffolding/index.js +1 -1
  28. package/lib/esm/commands/scaffolding/index.js.map +1 -1
  29. package/lib/esm/config/PublishDetails.js +178 -0
  30. package/lib/esm/config/PublishDetails.js.map +1 -0
  31. package/lib/esm/index.js +16 -15
  32. package/lib/esm/index.js.map +1 -1
  33. package/lib/esm/package.json +2 -2
  34. package/lib/types/{utils.d.ts → CliUtils.d.ts} +2 -11
  35. package/lib/types/CliUtils.d.ts.map +1 -0
  36. package/lib/types/commands/{validate.d.ts → ValidateCommand.d.ts} +1 -1
  37. package/lib/types/commands/ValidateCommand.d.ts.map +1 -0
  38. package/lib/types/commands/create/{app.d.ts → CreateCliApp.d.ts} +2 -2
  39. package/lib/types/commands/create/CreateCliApp.d.ts.map +1 -0
  40. package/lib/types/commands/create/{publisher.d.ts → CreateCliPublisher.d.ts} +1 -1
  41. package/lib/types/commands/create/CreateCliPublisher.d.ts.map +1 -0
  42. package/lib/types/commands/create/{release.d.ts → CreateCliRelease.d.ts} +2 -2
  43. package/lib/types/commands/create/CreateCliRelease.d.ts.map +1 -0
  44. package/lib/types/commands/create/index.d.ts +3 -3
  45. package/lib/types/commands/create/index.d.ts.map +1 -1
  46. package/lib/types/commands/index.d.ts +1 -1
  47. package/lib/types/commands/index.d.ts.map +1 -1
  48. package/lib/types/commands/publish/{remove.d.ts → PublishCliRemove.d.ts} +2 -2
  49. package/lib/types/commands/publish/PublishCliRemove.d.ts.map +1 -0
  50. package/lib/types/commands/publish/{submit.d.ts → PublishCliSubmit.d.ts} +2 -2
  51. package/lib/types/commands/publish/PublishCliSubmit.d.ts.map +1 -0
  52. package/lib/types/commands/publish/{support.d.ts → PublishCliSupport.d.ts} +2 -2
  53. package/lib/types/commands/publish/PublishCliSupport.d.ts.map +1 -0
  54. package/lib/types/commands/publish/{update.d.ts → PublishCliUpdate.d.ts} +2 -2
  55. package/lib/types/commands/publish/PublishCliUpdate.d.ts.map +1 -0
  56. package/lib/types/commands/publish/index.d.ts +4 -4
  57. package/lib/types/commands/publish/index.d.ts.map +1 -1
  58. package/lib/types/commands/scaffolding/{init.d.ts → ScaffoldInit.d.ts} +1 -1
  59. package/lib/types/commands/scaffolding/ScaffoldInit.d.ts.map +1 -0
  60. package/lib/types/commands/scaffolding/index.d.ts +1 -1
  61. package/lib/types/commands/scaffolding/index.d.ts.map +1 -1
  62. package/lib/types/config/PublishDetails.d.ts +17 -0
  63. package/lib/types/config/PublishDetails.d.ts.map +1 -0
  64. package/lib/types/upload/CachedStorageDriver.d.ts +3 -3
  65. package/lib/types/upload/CachedStorageDriver.d.ts.map +1 -1
  66. package/package.json +2 -2
  67. package/src/CliUtils.ts +135 -0
  68. package/src/commands/{validate.ts → ValidateCommand.ts} +3 -2
  69. package/src/commands/create/{app.ts → CreateCliApp.ts} +4 -5
  70. package/src/commands/create/{publisher.ts → CreateCliPublisher.ts} +4 -5
  71. package/src/commands/create/{release.ts → CreateCliRelease.ts} +4 -7
  72. package/src/commands/create/index.ts +3 -3
  73. package/src/commands/index.ts +1 -1
  74. package/src/commands/publish/{remove.ts → PublishCliRemove.ts} +3 -2
  75. package/src/commands/publish/{submit.ts → PublishCliSubmit.ts} +3 -2
  76. package/src/commands/publish/{support.ts → PublishCliSupport.ts} +3 -2
  77. package/src/commands/publish/{update.ts → PublishCliUpdate.ts} +3 -2
  78. package/src/commands/publish/index.ts +4 -4
  79. package/src/commands/scaffolding/{init.ts → ScaffoldInit.ts} +1 -1
  80. package/src/commands/scaffolding/index.ts +1 -1
  81. package/src/config/PublishDetails.ts +273 -0
  82. package/src/index.ts +17 -17
  83. package/README.md +0 -86
  84. package/lib/esm/commands/create/app.js.map +0 -1
  85. package/lib/esm/commands/create/publisher.js.map +0 -1
  86. package/lib/esm/commands/create/release.js.map +0 -1
  87. package/lib/esm/commands/publish/remove.js.map +0 -1
  88. package/lib/esm/commands/publish/submit.js.map +0 -1
  89. package/lib/esm/commands/publish/support.js.map +0 -1
  90. package/lib/esm/commands/publish/update.js.map +0 -1
  91. package/lib/esm/commands/scaffolding/init.js.map +0 -1
  92. package/lib/esm/commands/validate.js.map +0 -1
  93. package/lib/esm/config/index.js +0 -18
  94. package/lib/esm/config/index.js.map +0 -1
  95. package/lib/esm/utils.js +0 -261
  96. package/lib/esm/utils.js.map +0 -1
  97. package/lib/types/commands/create/app.d.ts.map +0 -1
  98. package/lib/types/commands/create/publisher.d.ts.map +0 -1
  99. package/lib/types/commands/create/release.d.ts.map +0 -1
  100. package/lib/types/commands/publish/remove.d.ts.map +0 -1
  101. package/lib/types/commands/publish/submit.d.ts.map +0 -1
  102. package/lib/types/commands/publish/support.d.ts.map +0 -1
  103. package/lib/types/commands/publish/update.d.ts.map +0 -1
  104. package/lib/types/commands/scaffolding/init.d.ts.map +0 -1
  105. package/lib/types/commands/validate.d.ts.map +0 -1
  106. package/lib/types/config/index.d.ts +0 -9
  107. package/lib/types/config/index.d.ts.map +0 -1
  108. package/lib/types/utils.d.ts.map +0 -1
  109. package/src/config/index.ts +0 -38
  110. package/src/utils.ts +0 -377
@@ -0,0 +1,273 @@
1
+ import type {
2
+ AndroidDetails,
3
+ App,
4
+ Publisher,
5
+ Release,
6
+ SolanaMobileDappPublisherPortal
7
+ } from "@solana-mobile/dapp-store-publishing-tools";
8
+ import { dump, load } from "js-yaml";
9
+ import Ajv from "ajv";
10
+ // eslint-disable-next-line require-extensions/require-extensions
11
+ import schemaJson from "../generated/config_schema.json" assert { type: "json" };
12
+ import fs from "fs";
13
+ import path from "path";
14
+ import { toMetaplexFile } from "@metaplex-foundation/js";
15
+ import { Constants, showMessage } from "../CliUtils.js";
16
+ import util from "util";
17
+ import { imageSize } from "image-size";
18
+ import { exec } from "child_process";
19
+
20
+ const runImgSize = util.promisify(imageSize);
21
+ const runExec = util.promisify(exec);
22
+
23
+ export interface PublishDetails {
24
+ publisher: Publisher;
25
+ app: App;
26
+ release: Release;
27
+ solana_mobile_dapp_publisher_portal: SolanaMobileDappPublisherPortal;
28
+ }
29
+
30
+ const AaptPrefixes = {
31
+ quoteRegex: "'(.*?)'",
32
+ quoteNonLazyRegex: "'(.*)'",
33
+ packagePrefix: "package: name=",
34
+ verCodePrefix: "versionCode=",
35
+ verNamePrefix: "versionName=",
36
+ sdkPrefix: "sdkVersion:",
37
+ localePrefix: "locales: ",
38
+ };
39
+
40
+ type SaveToConfigArgs = {
41
+ publisher?: Pick<Publisher, "address">;
42
+ app?: Pick<App, "address">;
43
+ release?: Pick<Release, "address">;
44
+ };
45
+
46
+ const ajv = new Ajv({ strictTuples: false });
47
+ const validate = ajv.compile(schemaJson);
48
+
49
+ export const loadPublishDetails = async (configPath: string) => {
50
+ const configFile = await fs.promises.readFile(configPath, "utf-8");
51
+
52
+ const valid = validate(load(configFile) as object);
53
+
54
+ if (!valid) {
55
+ console.error(validate.errors);
56
+ process.exit(1);
57
+ }
58
+
59
+ return load(configFile) as PublishDetails;
60
+ };
61
+
62
+ export const loadPublishDetailsWithChecks = async (
63
+ buildToolsDir: string | null = null
64
+ ): Promise<PublishDetails> => {
65
+ const configFilePath = `${process.cwd()}/${Constants.CONFIG_FILE_NAME}`;
66
+
67
+ const config = await loadPublishDetails(configFilePath);
68
+
69
+ // We validate that the config is going to have at least one installable asset
70
+ const apkEntry = config.release.files.find(
71
+ (asset: PublishDetails["release"]["files"][0]) => asset.purpose === "install"
72
+ )!;
73
+ const apkPath = path.join(process.cwd(), apkEntry?.uri);
74
+ if (!fs.existsSync(apkPath)) {
75
+ throw new Error("Invalid path to APK file.");
76
+ }
77
+
78
+ if (buildToolsDir) {
79
+ config.release.android_details = await getAndroidDetails(
80
+ buildToolsDir,
81
+ apkPath
82
+ );
83
+ }
84
+
85
+ const publisherIcon = config.publisher.media?.find(
86
+ (asset: any) => asset.purpose === "icon"
87
+ )?.uri;
88
+
89
+ if (publisherIcon) {
90
+ const iconPath = path.join(process.cwd(), publisherIcon);
91
+ await checkIconCompatibility(iconPath, "Publisher");
92
+
93
+ const iconBuffer = await fs.promises.readFile(iconPath);
94
+ config.publisher.icon = toMetaplexFile(iconBuffer, publisherIcon);
95
+ }
96
+
97
+ const appIcon = config.app.media?.find(
98
+ (asset: any) => asset.purpose === "icon"
99
+ )?.uri;
100
+
101
+ if (appIcon) {
102
+ const iconPath = path.join(process.cwd(), appIcon);
103
+ await checkIconCompatibility(iconPath, "App");
104
+
105
+ const iconBuffer = await fs.promises.readFile(iconPath);
106
+ config.app.icon = toMetaplexFile(iconBuffer, appIcon);
107
+ }
108
+
109
+ const releaseIcon = config.release.media?.find(
110
+ (asset: any) => asset.purpose === "icon"
111
+ )?.uri;
112
+
113
+ if (releaseIcon) {
114
+ const iconPath = path.join(process.cwd(), releaseIcon);
115
+ await checkIconCompatibility(iconPath, "Release");
116
+ }
117
+
118
+ if (!appIcon && !releaseIcon) {
119
+ throw new Error("Please specify at least one media entry of type icon in your configuration file");
120
+ }
121
+
122
+ config.release.media.forEach((item: PublishDetails["release"]["media"][0]) => {
123
+ const imagePath = path.join(process.cwd(), item.uri);
124
+ if (!fs.existsSync(imagePath) || !checkImageExtension(imagePath)) {
125
+ throw new Error(`Invalid media path or file type: ${item.uri}. Please ensure the file is a jpeg, png, or webp file.`);
126
+ }
127
+ }
128
+ );
129
+
130
+ validateLocalizableResources(config);
131
+
132
+ const googlePkg = config.solana_mobile_dapp_publisher_portal.google_store_package;
133
+ if (googlePkg?.length) {
134
+ const pkgCompare = new RegExp("[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)+").exec(googlePkg);
135
+
136
+ if (!pkgCompare?.length) {
137
+ throw new Error("Please provide a valid Google store package name in the Publisher Portal section of your configuration file.");
138
+ }
139
+ }
140
+
141
+ return config;
142
+ };
143
+
144
+ const checkIconCompatibility = async (path: string, typeString: string) => {
145
+ if (!fs.existsSync(path) || !checkImageExtension(path)) {
146
+ throw new Error(`Please check the path to your ${typeString} icon and ensure the file is a jpeg, png, or webp file.`);
147
+ }
148
+
149
+ if (await checkIconDimensions(path)) {
150
+ throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.");
151
+ }
152
+ };
153
+
154
+ const checkImageExtension = (uri: string): boolean => {
155
+ const fileExt = path.extname(uri).toLowerCase();
156
+ return (
157
+ fileExt == ".png" ||
158
+ fileExt == ".jpg" ||
159
+ fileExt == ".jpeg" ||
160
+ fileExt == ".webp"
161
+ );
162
+ };
163
+
164
+ /**
165
+ * We need to pre-check some things in the localized resources before we move forward
166
+ */
167
+ const validateLocalizableResources = (config: PublishDetails) => {
168
+ if (!config.release.catalog["en-US"]) {
169
+ throw new Error("Please ensure you have the en-US locale strings in your configuration file.");
170
+ }
171
+
172
+ const baselineSize = Object.keys(config.release.catalog["en-US"]).length;
173
+ Object.keys(config.release.catalog).forEach((locale) => {
174
+ const size = Object.keys(config.release.catalog[locale]).length;
175
+
176
+ if (size != baselineSize) {
177
+ throw new Error("Please ensure you have included all localized strings for all locales in your configuration file.");
178
+ }
179
+ });
180
+
181
+ const descsWrongLength = Object.values(config.release.catalog)
182
+ .map((x) => x.short_description)
183
+ .filter((desc) => !desc?.length || desc.length > 50);
184
+
185
+ if (descsWrongLength.length > 0) {
186
+ throw new Error("Please ensure all translations of short_description are between 0 and 50 characters");
187
+ }
188
+ };
189
+
190
+ const checkIconDimensions = async (iconPath: string): Promise<boolean> => {
191
+ const size = await runImgSize(iconPath);
192
+
193
+ return size?.width != size?.height || (size?.width ?? 0) > 512;
194
+ };
195
+
196
+ const getAndroidDetails = async (
197
+ aaptDir: string,
198
+ apkPath: string
199
+ ): Promise<AndroidDetails> => {
200
+ try {
201
+ const { stdout } = await runExec(`${aaptDir}/aapt2 dump badging "${apkPath}"`);
202
+
203
+ const appPackage = new RegExp(
204
+ AaptPrefixes.packagePrefix + AaptPrefixes.quoteRegex
205
+ ).exec(stdout);
206
+ const versionCode = new RegExp(
207
+ AaptPrefixes.verCodePrefix + AaptPrefixes.quoteRegex
208
+ ).exec(stdout);
209
+ const versionName = new RegExp(
210
+ AaptPrefixes.verNamePrefix + AaptPrefixes.quoteRegex
211
+ ).exec(stdout);
212
+ const minSdk = new RegExp(
213
+ AaptPrefixes.sdkPrefix + AaptPrefixes.quoteRegex
214
+ ).exec(stdout);
215
+ const permissions = [...stdout.matchAll(/uses-permission: name='(.*)'/g)];
216
+ const locales = new RegExp(
217
+ AaptPrefixes.localePrefix + AaptPrefixes.quoteNonLazyRegex
218
+ ).exec(stdout);
219
+
220
+ let localeArray = Array.from(locales?.values() ?? []);
221
+ if (localeArray.length == 2) {
222
+ const localesSrc = localeArray[1];
223
+ localeArray = ["en-US"].concat(localesSrc.split("' '").slice(1));
224
+ }
225
+
226
+ if (localeArray.length >= 60) {
227
+ showMessage(
228
+ "The bundle apk claims supports for following locales",
229
+ "Claim for supported locales::\n" +
230
+ localeArray +
231
+ "\nIf this release does not support all these locales the release may be rejected" +
232
+ "\nSee details at https://developer.android.com/guide/topics/resources/multilingual-support#design for configuring the supported locales",
233
+ "warning"
234
+ );
235
+ }
236
+
237
+ return {
238
+ android_package: appPackage?.[1] ?? "",
239
+ min_sdk: parseInt(minSdk?.[1] ?? "0", 10),
240
+ version_code: parseInt(versionCode?.[1] ?? "0", 10),
241
+ version: versionName?.[1] ?? "0",
242
+ permissions: permissions.flatMap(permission => permission[1]),
243
+ locales: localeArray
244
+ };
245
+ } catch (e) {
246
+ throw new Error("There was an error parsing your APK. Please ensure you have provided a valid Android tools directory containing AAPT2.");
247
+ }
248
+ };
249
+
250
+ export const writeToPublishDetails = async ({ publisher, app, release }: SaveToConfigArgs) => {
251
+ const currentConfig = await loadPublishDetailsWithChecks();
252
+
253
+ delete currentConfig.publisher.icon;
254
+ delete currentConfig.app.icon;
255
+
256
+ const newConfig: PublishDetails = {
257
+ publisher: {
258
+ ...currentConfig.publisher,
259
+ address: publisher?.address ?? currentConfig.publisher.address
260
+ },
261
+ app: {
262
+ ...currentConfig.app,
263
+ address: app?.address ?? currentConfig.app.address
264
+ },
265
+ release: {
266
+ ...currentConfig.release,
267
+ address: release?.address ?? currentConfig.release.address
268
+ },
269
+ solana_mobile_dapp_publisher_portal: currentConfig.solana_mobile_dapp_publisher_portal
270
+ };
271
+
272
+ fs.writeFileSync(`${process.cwd()}/${Constants.CONFIG_FILE_NAME}`, dump(newConfig));
273
+ };
package/src/index.ts CHANGED
@@ -12,15 +12,15 @@ import {
12
12
  checkSubmissionNetwork,
13
13
  Constants,
14
14
  generateNetworkSuffix,
15
- getConfigWithChecks,
16
15
  parseKeypair,
17
16
  showMessage
18
- } from "./utils.js";
17
+ } from "./CliUtils.js";
19
18
  import terminalLink from "terminal-link";
20
19
  import boxen from "boxen";
21
20
 
22
21
  import * as dotenv from "dotenv";
23
22
  import { initScaffold } from "./commands/scaffolding/index.js";
23
+ import { loadPublishDetailsWithChecks } from "./config/PublishDetails.js";
24
24
 
25
25
  dotenv.config();
26
26
 
@@ -51,9 +51,9 @@ function resolveBuildToolsPath(buildToolsPath: string | undefined) {
51
51
  function latestReleaseMessage() {
52
52
  showMessage(
53
53
  `Publishing Tools Version ${ Constants.CLI_VERSION }`,
54
- "- Bug fixes, including enforcing \`short_description\` maximum length of 50 characters.",
54
+ "- NOTE: In a future release, the maximum length for `short_description` will be reduced from 50 to 30 characters. We recommend updating all localized instances now.",
55
55
  "warning"
56
- )
56
+ );
57
57
  }
58
58
 
59
59
  async function tryWithErrorMessage(block: () => Promise<any>) {
@@ -94,7 +94,7 @@ async function main() {
94
94
  "-k, --keypair <path-to-keypair-file>",
95
95
  "Path to keypair file"
96
96
  )
97
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
97
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
98
98
  .option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
99
99
  .action(async ({ keypair, url, dryRun }) => {
100
100
  tryWithErrorMessage(async () => {
@@ -124,14 +124,14 @@ async function main() {
124
124
  "-p, --publisher-mint-address <publisher-mint-address>",
125
125
  "The mint address of the publisher NFT"
126
126
  )
127
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
127
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
128
128
  .option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
129
129
  .action(async ({ publisherMintAddress, keypair, url, dryRun }) => {
130
130
  tryWithErrorMessage(async () => {
131
131
  latestReleaseMessage();
132
132
  await checkForSelfUpdate();
133
133
 
134
- const config = await getConfigWithChecks();
134
+ const config = await loadPublishDetailsWithChecks();
135
135
 
136
136
  if (!hasAddressInConfig(config.publisher) && !publisherMintAddress) {
137
137
  throw new Error("Either specify a publisher mint address in the config file or specify as a CLI argument to this command.")
@@ -165,7 +165,7 @@ async function main() {
165
165
  "-a, --app-mint-address <app-mint-address>",
166
166
  "The mint address of the app NFT"
167
167
  )
168
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
168
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
169
169
  .option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
170
170
  .option(
171
171
  "-b, --build-tools-path <build-tools-path>",
@@ -181,7 +181,7 @@ async function main() {
181
181
  throw new Error("Please specify an Android build tools directory in the .env file or via the command line argument.")
182
182
  }
183
183
 
184
- const config = await getConfigWithChecks();
184
+ const config = await loadPublishDetailsWithChecks();
185
185
  if (!hasAddressInConfig(config.app) && !appMintAddress) {
186
186
  throw new Error("Either specify an app mint address in the config file or specify as a CLI argument to this command")
187
187
  }
@@ -267,7 +267,7 @@ async function main() {
267
267
  "-r, --release-mint-address <release-mint-address>",
268
268
  "The mint address of the release NFT. If not specified, the value from your config file will be used."
269
269
  )
270
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
270
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
271
271
  .option(
272
272
  "-d, --dry-run",
273
273
  "Flag for dry run. Doesn't submit the request to the publisher portal."
@@ -286,7 +286,7 @@ async function main() {
286
286
  await checkForSelfUpdate();
287
287
  await checkSubmissionNetwork(url);
288
288
 
289
- const config = await getConfigWithChecks();
289
+ const config = await loadPublishDetailsWithChecks();
290
290
 
291
291
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
292
292
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -337,7 +337,7 @@ async function main() {
337
337
  "The mint address of the release NFT. If not specified, the value from your config file will be used."
338
338
  )
339
339
  .option("-c, --critical", "Flag for a critical app update request")
340
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
340
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
341
341
  .option(
342
342
  "-d, --dry-run",
343
343
  "Flag for dry run. Doesn't submit the request to the publisher portal."
@@ -357,7 +357,7 @@ async function main() {
357
357
  await checkForSelfUpdate();
358
358
  await checkSubmissionNetwork(url);
359
359
 
360
- const config = await getConfigWithChecks();
360
+ const config = await loadPublishDetailsWithChecks();
361
361
 
362
362
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
363
363
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -405,7 +405,7 @@ async function main() {
405
405
  "The mint address of the release NFT. If not specified, the value from your config file will be used."
406
406
  )
407
407
  .option("-c, --critical", "Flag for a critical app removal request")
408
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
408
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
409
409
  .option(
410
410
  "-d, --dry-run",
411
411
  "Flag for dry run. Doesn't submit the request to the publisher portal."
@@ -424,7 +424,7 @@ async function main() {
424
424
  await checkForSelfUpdate();
425
425
  await checkSubmissionNetwork(url);
426
426
 
427
- const config = await getConfigWithChecks();
427
+ const config = await loadPublishDetailsWithChecks();
428
428
 
429
429
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
430
430
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -470,7 +470,7 @@ async function main() {
470
470
  "-r, --release-mint-address <release-mint-address>",
471
471
  "The mint address of the release NFT. If not specified, the value from your config file will be used."
472
472
  )
473
- .option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
473
+ .option("-u, --url <url>", "RPC URL", Constants.DEFAULT_RPC_DEVNET)
474
474
  .option(
475
475
  "-d, --dry-run",
476
476
  "Flag for dry run. Doesn't submit the request to the publisher portal."
@@ -484,7 +484,7 @@ async function main() {
484
484
  await checkForSelfUpdate();
485
485
  await checkSubmissionNetwork(url);
486
486
 
487
- const config = await getConfigWithChecks();
487
+ const config = await loadPublishDetailsWithChecks();
488
488
 
489
489
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
490
490
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
package/README.md DELETED
@@ -1,86 +0,0 @@
1
- ## Prerequisites
2
-
3
- - Node 18+
4
- - PNPM
5
- - Android SDK build tools
6
-
7
- ```shell
8
- corepack enable
9
- corepack prepare pnpm@`npm info pnpm --json | jq -r .version` --activate
10
- ```
11
-
12
- Corepack requires a version to enable, so if you don't have [jq](https://stedolan.github.io/jq/) installed, you can [install it](https://formulae.brew.sh/formula/jq), or just manually get the current version of pnpm with `npm info pnpm` and use it like this:
13
-
14
- ```shell
15
- corepack prepare pnpm@7.13.4 --activate
16
- ```
17
-
18
- You must have the Android SDK build tools available for use by the `dapp-store` CLI. If you have Android Studio, these tools are available as part of that installation (for e.g., on MacOS, they can be found in ~/Library/Android/sdk/build-tools/<version>). If you do not have Android Studio installed, or wish to use a standalone version of the Android SDK build tools, please follow the instructions [here](https://developer.android.com/studio/intro/update#sdk-manager). The path to the SDK build tools can be provided either directly to subcommands that require it with the `-b` option, or indirectly via a `.env` file:
19
- ```
20
- echo "ANDROID_TOOLS_DIR=\"<path_to_android_sdk_build_tools_dir>\"" > .env
21
- ```
22
-
23
- ## Usage
24
-
25
- In your application folder (e.g., `example`):
26
-
27
- ```shell
28
- mkdir publishing
29
- cd publishing
30
-
31
- pnpm init
32
- pnpm install --save-dev @solana-mobile/dapp-store-cli
33
- npx dapp-store init
34
- npx dapp-store --help
35
- ```
36
-
37
- or with `yarn`
38
-
39
- ```shell
40
- mkdir publishing
41
- cd publishing
42
-
43
- yarn init
44
- yarn add @solana-mobile/dapp-store-cli
45
- yarn run dapp-store init
46
- yarn run dapp-store --help
47
- ```
48
-
49
- or with `npm`
50
-
51
- ```shell
52
- mkdir publishing
53
- cd publishing
54
-
55
- npm init
56
- npm install --save-dev @solana-mobile/dapp-store-cli
57
- npx dapp-store init
58
- npx dapp-store --help
59
- ```
60
-
61
- # Overview
62
-
63
- Publishers, applications, and releases on the Saga Dapp Store are all represented as NFTs, with some modifications.
64
-
65
- "Publishers" are Metaplex Certified Collection (MCC) NFTs that have can have many "apps" associated with them.
66
-
67
- "Apps" are _also_ MCC NFTs that can have many "releases" associated with them.
68
-
69
- "Releases" are immutable Metaplex NFTs that can only be issued once per-version. Any new releases must be re-issued as a new NFT.
70
-
71
- A typical publishing flow might look like:
72
-
73
- 1. Create a publisher (`dapp-store create publisher ...`)
74
- 2. Create an app (`dapp-store create app ...`)
75
- 3. Create a release (`dapp-store create release ...`)
76
- 4. Submit an app for review (`dapp-store publish submit ...`)
77
-
78
- Repeat steps 3. and 4. as needed!
79
-
80
- ## Editor's Note
81
-
82
- The `dapp-store` CLI handles rote tasks like uploading assets to immutable file storage and i18n. However, it is by no means the only way to create these NFTs—all information about the requirements are specified in this repository, and the packages have been designed to be portable to other client contexts besides the CLI.
83
-
84
- ### CLI Updates
85
-
86
- The CLI will automatically check for updated versions on npm and restrict operations if the version bump is significant enough. If your CI/CD deployments fail be sure to check if there is a required update.
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/commands/create/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,MAAM,YAAY,GAAG,KAAK,EACxB,EACE,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,SAAS,GAMV,EACD,EAAE,MAAM,EAAwB,EAChC,EAAE;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,SAAS,CAC/B;QACE,oBAAoB,EAAE,IAAI,SAAS,CAAC,oBAAoB,CAAC;QACzD,WAAW;QACX,UAAU;KACX,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE;YAC5D,SAAS;YACT,WAAW;SACZ,EAAE;YACD,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KACxE;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC1D,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,MAAM,EACN,GAAG,EACH,MAAM,EACN,oBAAoB,GACE,EAAE,EAAE;IAC1B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,GACpD,MAAM,mBAAmB,EAAE,CAAC;IAE9B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,YAAY,CACvC;QACE,UAAU;QACV,SAAS,EAAE,MAAM;QACjB,oBAAoB,EAAE,gBAAgB,CAAC,OAAO,IAAI,oBAAoB;QACtE,UAAU;KACX,EACD,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE;QACX,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;KAChD;IAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../../src/commands/create/publisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,OAAO,EACP,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,MAAM,kBAAkB,GAAG,KAAK,EAC9B,EACE,UAAU,EACV,SAAS,EACT,gBAAgB,GAKjB,EACD,EAAE,MAAM,EAAuB,EAC/B,EAAE;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CACV,kCAAkC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CACrE,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EACjC,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE;YAC5D,SAAS;YACT,WAAW;SACZ,EAAE;YACD,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KACxE;IAED,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,MAAM,EACN,GAAG,EACH,MAAM,GAKP,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEpE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CACnD;QACE,UAAU;QACV,SAAS,EAAE,MAAM;QACjB,gBAAgB;KACjB,EACD,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,kDAAkD;IAClD,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE3D,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC9B,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"release.js","sourceRoot":"","sources":["../../../../src/commands/create/release.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAUxB,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,cAAc,EACd,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,SAAS,GAQV,EAAE,EAAE;IACH,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE5D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CACvC;QACE,cAAc,EAAE,IAAI,SAAS,CAAC,cAAc,CAAC;QAC7C,kBAAkB;QAClB,cAAc;QACd,UAAU;QACV,gBAAgB;KACjB,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE;QAC5D,SAAS;QACT,kBAAkB;KACnB,EAAE;QACD,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;KACvC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC;QACX,KAAK;QACL,kBAAkB,EAAE,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE;KAC5D,CAAC,CAAC;IAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,cAAc,EACd,cAAc,EACd,MAAM,EACN,GAAG,EACH,MAAM,GAAG,KAAK,GACY,EAAE,EAAE;IAC9B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAE9E,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAChD,cAAc,EAAE,GAAG,CAAC,OAAO,IAAI,cAAc;YAC7C,UAAU;YACV,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE;gBACd,GAAG,OAAO;aACX;YACD,UAAU,EAAE,GAAG;YACf,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;QAEH,YAAY,CAAC;YACX,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;SACrC,CAAC,CAAC;QAEH,OAAO,EAAE,cAAc,EAAE,CAAC;KAC3B;AACH,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../../src/commands/publish/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,GAAG,EACH,MAAM,GAAG,KAAK,EACd,qBAAqB,GAAG,KAAK,EAC7B,QAAQ,GAAG,KAAK,GACU,EAAE,EAAE;IAC9B,IAAI,CAAC,qBAAqB,EAAE;QAC1B,OAAO,CAAC,KAAK,CACX,qGAAqG,CACtG,CAAC;QACF,OAAO;KACR;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EACJ,SAAS,EAAE,gBAAgB,EAC3B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,cAAc,GACxB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,IAAI,cAAc,CAAC,OAAO,CAAC;IAEjE,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,aAAa,CACjB,EAAE,UAAU,EAAE,IAAI,EAAE,EACpB;QACE,cAAc,EAAE,cAAc,IAAI,UAAU,CAAC,OAAO;QACpD,kBAAkB,EAAE,kBAAkB,IAAI,cAAc,CAAC,OAAO;QAChE,gBAAgB;QAChB,qBAAqB;QACrB,cAAc,EAAE,QAAQ;KACzB,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../../src/commands/publish/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAsB,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAaxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,GAAG,EACH,MAAM,GAAG,KAAK,EACd,mCAAmC,GAAG,KAAK,EAC3C,qBAAqB,GAAG,KAAK,GACH,EAAE,EAAE;IAC9B,IAAI,CAAC,mCAAmC,EAAE;QACxC,OAAO,CAAC,KAAK,CACX,yHAAyH,CAC1H,CAAC;QACF,OAAO;KACR;SAAM,IAAI,CAAC,qBAAqB,EAAE;QACjC,OAAO,CAAC,KAAK,CACX,qGAAqG,CACtG,CAAC;QACF,OAAO;KACR;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EACJ,SAAS,EAAE,gBAAgB,EAC3B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,cAAc,EACvB,mCAAmC,EAAE,sCAAsC,GAC5E,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,IAAI,cAAc,CAAC,OAAO,CAAC;IAEjE,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,aAAa,CACjB,EAAE,UAAU,EAAE,IAAI,EAAE,EACpB;QACE,cAAc,EAAE,OAAO;QACvB,kBAAkB,EAAE,WAAW;QAC/B,gBAAgB;QAChB,sCAAsC;QACtC,mCAAmC;QACnC,qBAAqB;KACtB,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"support.js","sourceRoot":"","sources":["../../../../src/commands/publish/support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAC1C,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,GAAG,EACH,MAAM,GAAG,KAAK,EACd,qBAAqB,GAAG,KAAK,EAC7B,cAAc,GACa,EAAE,EAAE;IAC/B,IAAI,CAAC,qBAAqB,EAAE;QAC1B,OAAO,CAAC,KAAK,CACX,qGAAqG,CACtG,CAAC;QACF,OAAO;KACR;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EACJ,SAAS,EAAE,gBAAgB,EAC3B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,cAAc,GACxB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,IAAI,cAAc,CAAC,OAAO,CAAC;IAEjE,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,cAAc,CAClB,EAAE,UAAU,EAAE,IAAI,EAAE,EACpB;QACE,cAAc,EAAE,cAAc,IAAI,UAAU,CAAC,OAAO;QACpD,kBAAkB,EAAE,kBAAkB,IAAI,cAAc,CAAC,OAAO;QAChE,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;KACf,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/publish/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,GAAG,EACH,MAAM,GAAG,KAAK,EACd,mCAAmC,GAAG,KAAK,EAC3C,qBAAqB,GAAG,KAAK,EAC7B,QAAQ,GAAG,KAAK,GACU,EAAE,EAAE;IAC9B,IAAI,CAAC,mCAAmC,EAAE;QACxC,OAAO,CAAC,KAAK,CACX,yHAAyH,CAC1H,CAAC;QACF,OAAO;KACR;SAAM,IAAI,CAAC,qBAAqB,EAAE;QACjC,OAAO,CAAC,KAAK,CACX,qGAAqG,CACtG,CAAC;QACF,OAAO;KACR;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EACJ,SAAS,EAAE,gBAAgB,EAC3B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,cAAc,EACvB,mCAAmC,EAAE,sCAAsC,GAC5E,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,IAAI,cAAc,CAAC,OAAO,CAAC;IAEjE,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,aAAa,CACjB,EAAE,UAAU,EAAE,IAAI,EAAE,EACpB;QACE,cAAc,EAAE,cAAc,IAAI,UAAU,CAAC,OAAO;QACpD,kBAAkB,EAAE,kBAAkB,IAAI,cAAc,CAAC,OAAO;QAChE,gBAAgB;QAChB,sCAAsC;QACtC,mCAAmC;QACnC,qBAAqB;QACrB,cAAc,EAAE,QAAQ;KACzB,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/scaffolding/init.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAErC,iEAAiE;AACjE,OAAO,aAAa,MAAM,iCAAiC,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;AACpF,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC;IAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC1B,MAAM,KAAK,CAAC,gFAAgF,CAAC,CAAC;KAC/F;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAE/C,OAAO,wCAAwC,UAAU,EAAE,CAAC;AAC9D,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMzD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,MAAM,EACN,cAAc,GAIf,EAAE,EAAE;IACH,MAAM,EACJ,SAAS,EAAE,gBAAgB,EAC3B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,cAAc,GACxB,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAE9C,KAAK,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC5D,IAAI,OAAO,aAAa,CAAC,KAAK,KAAK,QAAQ,EAAE;QAC3C,aAAa,CAAC,KAAK,GAAI,aAAa,CAAC,KAAsB,EAAE,QAAQ,CAAC;KACvE;IACD,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpF,IAAI;QACF,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;KACvC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;QACrC,OAAO,CAAC,KAAK,GAAI,OAAO,CAAC,KAAsB,EAAE,QAAQ,CAAC;KAC3D;IACD,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;IAExE,IAAI;QACF,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACjC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACzC,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAChD,MAAM,CAAC,SAAS,CACjB,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAEtC,IAAI;QACF,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;KACrC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;AACH,CAAC,CAAC"}
@@ -1,18 +0,0 @@
1
- import fs from "fs/promises";
2
- import { load } from "js-yaml";
3
- import Ajv from "ajv";
4
- // eslint-disable-next-line require-extensions/require-extensions
5
- import schemaJson from "../generated/config_schema.json" assert { type: "json" };
6
- const ajv = new Ajv({ strictTuples: false });
7
- const validate = ajv.compile(schemaJson);
8
- export const getConfig = async (configPath) => {
9
- const configFile = await fs.readFile(configPath, "utf-8");
10
- const valid = validate(load(configFile));
11
- if (!valid) {
12
- console.error(validate.errors);
13
- process.exit(1);
14
- }
15
- const config = load(configFile);
16
- return config;
17
- };
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,iEAAiE;AACjE,OAAO,UAAU,MAAM,iCAAiC,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;AAUjF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAE;IACpD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC,CAAC;IAEnD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAc,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}