@solana-mobile/dapp-store-cli 0.1.1-0 → 0.1.1-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.
- package/README.md +1 -1
- package/bin/dapp-store.js +1 -1
- package/lib/esm/commands/create/release.js +2 -3
- package/lib/esm/commands/create/release.js.map +1 -1
- package/lib/esm/config/index.js.map +1 -1
- package/lib/esm/config/schema.json +10 -39
- package/lib/esm/index.js +133 -116
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/upload/CachedStorageDriver.js +3 -1
- package/lib/esm/upload/CachedStorageDriver.js.map +1 -1
- package/lib/esm/utils.js +11 -26
- package/lib/esm/utils.js.map +1 -1
- package/lib/types/commands/create/release.d.ts +1 -2
- package/lib/types/commands/create/release.d.ts.map +1 -1
- package/lib/types/config/index.d.ts +0 -1
- package/lib/types/config/index.d.ts.map +1 -1
- package/lib/types/upload/CachedStorageDriver.d.ts +1 -1
- package/lib/types/upload/CachedStorageDriver.d.ts.map +1 -1
- package/lib/types/utils.d.ts +2 -4
- package/lib/types/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/commands/create/release.ts +1 -4
- package/src/config/index.ts +1 -2
- package/src/config/schema.json +10 -39
- package/src/index.ts +161 -148
- package/src/upload/CachedStorageDriver.ts +4 -1
- package/src/utils.ts +16 -52
package/src/index.ts
CHANGED
|
@@ -75,30 +75,33 @@ async function main() {
|
|
|
75
75
|
.option("-u, --url", "RPC URL", "https://devnet.genesysgo.net")
|
|
76
76
|
.option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
|
|
77
77
|
.action(async ({ publisherMintAddress, keypair, url, dryRun }) => {
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
try {
|
|
79
|
+
const config = await getConfigFile();
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
if (!hasAddressInConfig(config.publisher) && !publisherMintAddress) {
|
|
82
|
+
showUserErrorMessage(
|
|
83
|
+
"Either specify an publisher mint address in the config file, or specify as a CLI argument to this command."
|
|
84
|
+
);
|
|
85
|
+
createCommand.showHelpAfterError();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
89
|
+
const signer = parseKeypair(keypair);
|
|
90
|
+
if (signer) {
|
|
91
|
+
await createAppCommand({
|
|
92
|
+
publisherMintAddress: publisherMintAddress,
|
|
93
|
+
signer,
|
|
94
|
+
url,
|
|
95
|
+
dryRun,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
} catch (e) {
|
|
99
|
+
showUserErrorMessage((e as Error | null)?.message ?? "");
|
|
97
100
|
}
|
|
98
101
|
});
|
|
99
102
|
|
|
100
103
|
createCommand
|
|
101
|
-
.command("release
|
|
104
|
+
.command("release")
|
|
102
105
|
.description("Create a release")
|
|
103
106
|
.requiredOption(
|
|
104
107
|
"-k, --keypair <path-to-keypair-file>",
|
|
@@ -114,48 +117,46 @@ async function main() {
|
|
|
114
117
|
"-b, --build-tools-path <build-tools-path>",
|
|
115
118
|
"Path to Android build tools which contains AAPT2"
|
|
116
119
|
)
|
|
117
|
-
.action(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
dryRun,
|
|
158
|
-
});
|
|
120
|
+
.action(async ({ appMintAddress, keypair, url, dryRun, buildToolsPath }) => {
|
|
121
|
+
try {
|
|
122
|
+
const toolsEnvDir = process.env.ANDROID_TOOLS_DIR ?? "";
|
|
123
|
+
|
|
124
|
+
let buildTools = "";
|
|
125
|
+
if (toolsEnvDir && toolsEnvDir.length > 0) {
|
|
126
|
+
buildTools = toolsEnvDir;
|
|
127
|
+
} else if (buildToolsPath) {
|
|
128
|
+
buildTools = buildToolsPath;
|
|
129
|
+
} else {
|
|
130
|
+
showUserErrorMessage(
|
|
131
|
+
"\n\n::: Please specify an Android build tools directory in the .env file or via the command line argument. :::\n\n"
|
|
132
|
+
);
|
|
133
|
+
createCommand.showHelpAfterError();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const config = await getConfigFile();
|
|
138
|
+
|
|
139
|
+
if (!hasAddressInConfig(config.app) && !appMintAddress) {
|
|
140
|
+
showUserErrorMessage(
|
|
141
|
+
"\n\n::: Either specify an app mint address in the config file, or specify as a CLI argument to this command. :::\n\n"
|
|
142
|
+
);
|
|
143
|
+
createCommand.showHelpAfterError();
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const signer = parseKeypair(keypair);
|
|
148
|
+
|
|
149
|
+
if (signer) {
|
|
150
|
+
const result = await createReleaseCommand({
|
|
151
|
+
appMintAddress: appMintAddress,
|
|
152
|
+
buildToolsPath: buildTools,
|
|
153
|
+
signer,
|
|
154
|
+
url,
|
|
155
|
+
dryRun,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
} catch (e) {
|
|
159
|
+
showUserErrorMessage((e as Error | null)?.message ?? "");
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
162
|
);
|
|
@@ -230,27 +231,30 @@ async function main() {
|
|
|
230
231
|
requestorIsAuthorized,
|
|
231
232
|
dryRun,
|
|
232
233
|
}) => {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
234
|
+
try {
|
|
235
|
+
const config = await getConfigFile();
|
|
236
|
+
|
|
237
|
+
if (!hasAddressInConfig(config.publisher) && !releaseMintAddress) {
|
|
238
|
+
showUserErrorMessage(
|
|
239
|
+
"\n\n::: Either specify an release mint address in the config file, or specify as a CLI argument to this command. :::\n\n"
|
|
240
|
+
);
|
|
241
|
+
publishCommand.showHelpAfterError();
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const signer = parseKeypair(keypair);
|
|
246
|
+
if (signer) {
|
|
247
|
+
await publishSubmitCommand({
|
|
248
|
+
releaseMintAddress,
|
|
249
|
+
signer,
|
|
250
|
+
url,
|
|
251
|
+
dryRun,
|
|
252
|
+
compliesWithSolanaDappStorePolicies,
|
|
253
|
+
requestorIsAuthorized,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
} catch (e) {
|
|
257
|
+
showUserErrorMessage((e as Error | null)?.message ?? "");
|
|
254
258
|
}
|
|
255
259
|
}
|
|
256
260
|
);
|
|
@@ -292,29 +296,32 @@ async function main() {
|
|
|
292
296
|
critical,
|
|
293
297
|
dryRun,
|
|
294
298
|
}) => {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
299
|
+
try {
|
|
300
|
+
const config = await getConfigFile();
|
|
301
|
+
|
|
302
|
+
if (!hasAddressInConfig(config.publisher) && !releaseMintAddress) {
|
|
303
|
+
showUserErrorMessage(
|
|
304
|
+
"\n\n::: Either specify an release mint address in the config file, or specify as a CLI argument to this command. :::\n\n"
|
|
305
|
+
);
|
|
306
|
+
publishCommand.showHelpAfterError();
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
const signer = parseKeypair(keypair);
|
|
311
|
+
|
|
312
|
+
if (signer) {
|
|
313
|
+
await publishUpdateCommand({
|
|
314
|
+
releaseMintAddress,
|
|
315
|
+
signer,
|
|
316
|
+
url,
|
|
317
|
+
dryRun,
|
|
318
|
+
compliesWithSolanaDappStorePolicies,
|
|
319
|
+
requestorIsAuthorized,
|
|
320
|
+
critical,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
} catch (e) {
|
|
324
|
+
showUserErrorMessage((e as Error | null)?.message ?? "");
|
|
318
325
|
}
|
|
319
326
|
}
|
|
320
327
|
);
|
|
@@ -351,28 +358,31 @@ async function main() {
|
|
|
351
358
|
critical,
|
|
352
359
|
dryRun,
|
|
353
360
|
}) => {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
361
|
+
try {
|
|
362
|
+
const config = await getConfigFile();
|
|
363
|
+
|
|
364
|
+
if (!hasAddressInConfig(config.publisher) && !releaseMintAddress) {
|
|
365
|
+
showUserErrorMessage(
|
|
366
|
+
"\n\n::: Either specify an release mint address in the config file, or specify as a CLI argument to this command. :::\n\n"
|
|
367
|
+
);
|
|
368
|
+
publishCommand.showHelpAfterError();
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const signer = parseKeypair(keypair);
|
|
373
|
+
|
|
374
|
+
if (signer) {
|
|
375
|
+
await publishRemoveCommand({
|
|
376
|
+
releaseMintAddress,
|
|
377
|
+
signer,
|
|
378
|
+
url,
|
|
379
|
+
dryRun,
|
|
380
|
+
requestorIsAuthorized,
|
|
381
|
+
critical,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
} catch (e) {
|
|
385
|
+
showUserErrorMessage((e as Error | null)?.message ?? "");
|
|
376
386
|
}
|
|
377
387
|
}
|
|
378
388
|
);
|
|
@@ -404,28 +414,31 @@ async function main() {
|
|
|
404
414
|
requestDetails,
|
|
405
415
|
{ releaseMintAddress, keypair, url, requestorIsAuthorized, dryRun }
|
|
406
416
|
) => {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
417
|
+
try {
|
|
418
|
+
const config = await getConfigFile();
|
|
419
|
+
|
|
420
|
+
if (!hasAddressInConfig(config.publisher) && !releaseMintAddress) {
|
|
421
|
+
showUserErrorMessage(
|
|
422
|
+
"\n\n::: Either specify an release mint address in the config file, or specify as a CLI argument to this command. :::\n\n"
|
|
423
|
+
);
|
|
424
|
+
publishCommand.showHelpAfterError();
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const signer = parseKeypair(keypair);
|
|
429
|
+
|
|
430
|
+
if (signer) {
|
|
431
|
+
await publishSupportCommand({
|
|
432
|
+
releaseMintAddress,
|
|
433
|
+
signer,
|
|
434
|
+
url,
|
|
435
|
+
dryRun,
|
|
436
|
+
requestorIsAuthorized,
|
|
437
|
+
requestDetails,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
} catch (e) {
|
|
441
|
+
showUserErrorMessage((e as Error | null)?.message ?? "");
|
|
429
442
|
}
|
|
430
443
|
}
|
|
431
444
|
);
|
|
@@ -19,7 +19,10 @@ export type AssetManifestSchema = {
|
|
|
19
19
|
|
|
20
20
|
// TODO(jon): We need to manage the removal / replacement of assets in the manifest
|
|
21
21
|
export class CachedStorageDriver implements StorageDriver {
|
|
22
|
-
|
|
22
|
+
// NOTE: this schema version is independent of the publishing JSON schema. It should be updated
|
|
23
|
+
// when the AssetManifestSchema or Asset types are updated.
|
|
24
|
+
static readonly SCHEMA_VERSION = "0.1";
|
|
25
|
+
|
|
23
26
|
assetManifest: AssetManifestSchema;
|
|
24
27
|
assetManifestPath: string;
|
|
25
28
|
storageDriver: StorageDriver;
|
package/src/utils.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
|
-
import type {
|
|
3
|
-
AndroidDetails,
|
|
4
|
-
App,
|
|
5
|
-
Publisher,
|
|
6
|
-
Release,
|
|
7
|
-
} from "@solana-mobile/dapp-store-publishing-tools";
|
|
2
|
+
import type { AndroidDetails, App, Publisher, Release } from "@solana-mobile/dapp-store-publishing-tools";
|
|
8
3
|
import type { Connection } from "@solana/web3.js";
|
|
9
4
|
import { Keypair } from "@solana/web3.js";
|
|
10
5
|
import type { CLIConfig } from "./config/index.js";
|
|
@@ -14,12 +9,7 @@ import { dump } from "js-yaml";
|
|
|
14
9
|
import * as util from "util";
|
|
15
10
|
import { exec } from "child_process";
|
|
16
11
|
import * as path from "path";
|
|
17
|
-
import {
|
|
18
|
-
BundlrStorageDriver,
|
|
19
|
-
keypairIdentity,
|
|
20
|
-
Metaplex,
|
|
21
|
-
toMetaplexFile,
|
|
22
|
-
} from "@metaplex-foundation/js";
|
|
12
|
+
import { BundlrStorageDriver, keypairIdentity, Metaplex, toMetaplexFile } from "@metaplex-foundation/js";
|
|
23
13
|
import { imageSize } from "image-size";
|
|
24
14
|
|
|
25
15
|
import { CachedStorageDriver } from "./upload/CachedStorageDriver.js";
|
|
@@ -53,11 +43,10 @@ const AaptPrefixes = {
|
|
|
53
43
|
|
|
54
44
|
export const getConfigFile = async (
|
|
55
45
|
buildToolsDir: string | null = null
|
|
56
|
-
): Promise<CLIConfig
|
|
46
|
+
): Promise<CLIConfig> => {
|
|
57
47
|
const configFilePath = `${process.cwd()}/config.yaml`;
|
|
58
48
|
|
|
59
49
|
const config = await getConfig(configFilePath);
|
|
60
|
-
config.isValid = true;
|
|
61
50
|
|
|
62
51
|
console.info(`Pulling details from ${configFilePath}`);
|
|
63
52
|
|
|
@@ -68,9 +57,7 @@ export const getConfigFile = async (
|
|
|
68
57
|
)!;
|
|
69
58
|
const apkPath = path.join(process.cwd(), apkEntry?.uri);
|
|
70
59
|
if (!fs.existsSync(apkPath)) {
|
|
71
|
-
|
|
72
|
-
config.isValid = false;
|
|
73
|
-
return config;
|
|
60
|
+
throw new Error("Invalid path to APK file.");
|
|
74
61
|
}
|
|
75
62
|
|
|
76
63
|
config.release.android_details = await getAndroidDetails(
|
|
@@ -85,27 +72,16 @@ export const getConfigFile = async (
|
|
|
85
72
|
if (publisherIcon) {
|
|
86
73
|
const iconPath = path.join(process.cwd(), publisherIcon);
|
|
87
74
|
if (!fs.existsSync(iconPath) || !checkImageExtension(iconPath)) {
|
|
88
|
-
|
|
89
|
-
"Please check the path to your Publisher icon ensure the file is a jpeg, png, or webp file."
|
|
90
|
-
);
|
|
91
|
-
config.isValid = false;
|
|
92
|
-
return config;
|
|
75
|
+
throw new Error("Please check the path to your Publisher icon and ensure the file is a jpeg, png, or webp file.");
|
|
93
76
|
}
|
|
94
77
|
|
|
95
78
|
const iconBuffer = await fs.promises.readFile(iconPath);
|
|
96
79
|
|
|
97
80
|
if (await checkIconDimensions(iconPath)) {
|
|
98
|
-
|
|
99
|
-
"Icons must have square dimensions and be no greater than 512px by 512px."
|
|
100
|
-
);
|
|
101
|
-
config.isValid = false;
|
|
102
|
-
return config;
|
|
81
|
+
throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.")
|
|
103
82
|
}
|
|
104
83
|
|
|
105
|
-
config.publisher.icon = toMetaplexFile(
|
|
106
|
-
iconBuffer,
|
|
107
|
-
path.join("media", publisherIcon)
|
|
108
|
-
);
|
|
84
|
+
config.publisher.icon = toMetaplexFile(iconBuffer, publisherIcon);
|
|
109
85
|
}
|
|
110
86
|
|
|
111
87
|
const appIcon = config.app.media?.find(
|
|
@@ -114,34 +90,22 @@ export const getConfigFile = async (
|
|
|
114
90
|
if (appIcon) {
|
|
115
91
|
const iconPath = path.join(process.cwd(), appIcon);
|
|
116
92
|
if (!fs.existsSync(iconPath) || !checkImageExtension(iconPath)) {
|
|
117
|
-
|
|
118
|
-
"Please check the path to your App icon ensure the file is a jpeg, png, or webp file."
|
|
119
|
-
);
|
|
120
|
-
config.isValid = false;
|
|
121
|
-
return config;
|
|
93
|
+
throw new Error("Please check the path to your App icon and ensure the file is a jpeg, png, or webp file.")
|
|
122
94
|
}
|
|
123
95
|
|
|
124
96
|
const iconBuffer = await fs.promises.readFile(iconPath);
|
|
125
97
|
|
|
126
98
|
if (await checkIconDimensions(iconPath)) {
|
|
127
|
-
|
|
128
|
-
"Icons must have square dimensions and be no greater than 512px by 512px."
|
|
129
|
-
);
|
|
130
|
-
config.isValid = false;
|
|
131
|
-
return config;
|
|
99
|
+
throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.")
|
|
132
100
|
}
|
|
133
101
|
|
|
134
|
-
config.app.icon = toMetaplexFile(iconBuffer,
|
|
102
|
+
config.app.icon = toMetaplexFile(iconBuffer, appIcon);
|
|
135
103
|
}
|
|
136
104
|
|
|
137
105
|
config.release.media.forEach((item: CLIConfig["release"]["media"][0]) => {
|
|
138
106
|
const imagePath = path.join(process.cwd(), item.uri);
|
|
139
107
|
if (!fs.existsSync(imagePath) || !checkImageExtension(imagePath)) {
|
|
140
|
-
|
|
141
|
-
`Invalid media path or file type: ${item.uri}. Please ensure the file is a jpeg, png, or webp file.`
|
|
142
|
-
);
|
|
143
|
-
config.isValid = false;
|
|
144
|
-
return config;
|
|
108
|
+
throw new Error(`Invalid media path or file type: ${item.uri}. Please ensure the file is a jpeg, png, or webp file.`)
|
|
145
109
|
}
|
|
146
110
|
});
|
|
147
111
|
|
|
@@ -182,8 +146,9 @@ const getAndroidDetails = async (
|
|
|
182
146
|
const versionCode = new RegExp(
|
|
183
147
|
AaptPrefixes.verCodePrefix + AaptPrefixes.quoteRegex
|
|
184
148
|
).exec(stdout);
|
|
185
|
-
|
|
186
|
-
|
|
149
|
+
const versionName = new RegExp(
|
|
150
|
+
AaptPrefixes.verNamePrefix + AaptPrefixes.quoteRegex
|
|
151
|
+
).exec(stdout);
|
|
187
152
|
const minSdk = new RegExp(
|
|
188
153
|
AaptPrefixes.sdkPrefix + AaptPrefixes.quoteRegex
|
|
189
154
|
).exec(stdout);
|
|
@@ -209,6 +174,7 @@ const getAndroidDetails = async (
|
|
|
209
174
|
android_package: appPackage?.[1] ?? "",
|
|
210
175
|
min_sdk: parseInt(minSdk?.[1] ?? "0", 10),
|
|
211
176
|
version_code: parseInt(versionCode?.[1] ?? "0", 10),
|
|
177
|
+
version: versionName?.[1] ?? "0",
|
|
212
178
|
permissions: permissionArray,
|
|
213
179
|
locales: localeArray,
|
|
214
180
|
};
|
|
@@ -217,7 +183,7 @@ const getAndroidDetails = async (
|
|
|
217
183
|
type SaveToConfigArgs = {
|
|
218
184
|
publisher?: Pick<Publisher, "address">;
|
|
219
185
|
app?: Pick<App, "address">;
|
|
220
|
-
release?: Pick<Release, "address"
|
|
186
|
+
release?: Pick<Release, "address">;
|
|
221
187
|
};
|
|
222
188
|
|
|
223
189
|
export const saveToConfig = async ({
|
|
@@ -242,11 +208,9 @@ export const saveToConfig = async ({
|
|
|
242
208
|
release: {
|
|
243
209
|
...currentConfig.release,
|
|
244
210
|
address: release?.address ?? currentConfig.release.address,
|
|
245
|
-
version: release?.version ?? currentConfig.release.version,
|
|
246
211
|
},
|
|
247
212
|
solana_mobile_dapp_publisher_portal:
|
|
248
213
|
currentConfig.solana_mobile_dapp_publisher_portal,
|
|
249
|
-
isValid: currentConfig.isValid,
|
|
250
214
|
};
|
|
251
215
|
|
|
252
216
|
// TODO(jon): Verify the contents of the YAML file
|