@solana-mobile/dapp-store-cli 0.1.9 → 0.2.0
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 +18 -53
- package/lib/esm/commands/publish/remove.js +5 -1
- package/lib/esm/commands/publish/remove.js.map +1 -1
- package/lib/esm/commands/publish/submit.js +7 -3
- package/lib/esm/commands/publish/submit.js.map +1 -1
- package/lib/esm/commands/publish/support.js +5 -1
- package/lib/esm/commands/publish/support.js.map +1 -1
- package/lib/esm/commands/publish/update.js +5 -1
- package/lib/esm/commands/publish/update.js.map +1 -1
- package/lib/esm/commands/scaffolding/index.js +2 -0
- package/lib/esm/commands/scaffolding/index.js.map +1 -0
- package/lib/esm/commands/scaffolding/init.js +15 -0
- package/lib/esm/commands/scaffolding/init.js.map +1 -0
- package/lib/esm/commands/validate.js +4 -13
- package/lib/esm/commands/validate.js.map +1 -1
- package/lib/esm/config/index.js +1 -2
- package/lib/esm/config/index.js.map +1 -1
- package/lib/esm/generated/config_obj.json +1 -0
- package/lib/esm/generated/config_schema.json +1 -0
- package/lib/esm/index.js +20 -10
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/package.json +6 -3
- package/lib/esm/utils.js +40 -16
- package/lib/esm/utils.js.map +1 -1
- package/lib/types/commands/create/app.d.ts +1 -1
- package/lib/types/commands/create/app.d.ts.map +1 -1
- package/lib/types/commands/create/release.d.ts +1 -1
- package/lib/types/commands/create/release.d.ts.map +1 -1
- package/lib/types/commands/publish/remove.d.ts +1 -1
- package/lib/types/commands/publish/remove.d.ts.map +1 -1
- package/lib/types/commands/publish/submit.d.ts +1 -1
- package/lib/types/commands/publish/submit.d.ts.map +1 -1
- package/lib/types/commands/publish/support.d.ts +1 -1
- package/lib/types/commands/publish/support.d.ts.map +1 -1
- package/lib/types/commands/publish/update.d.ts +1 -1
- package/lib/types/commands/publish/update.d.ts.map +1 -1
- package/lib/types/commands/scaffolding/index.d.ts +2 -0
- package/lib/types/commands/scaffolding/index.d.ts.map +1 -0
- package/lib/types/commands/scaffolding/init.d.ts +2 -0
- package/lib/types/commands/scaffolding/init.d.ts.map +1 -0
- package/lib/types/commands/validate.d.ts.map +1 -1
- package/lib/types/config/index.d.ts.map +1 -1
- package/lib/types/upload/CachedStorageDriver.d.ts +3 -3
- package/lib/types/upload/CachedStorageDriver.d.ts.map +1 -1
- package/lib/types/utils.d.ts +6 -1
- package/lib/types/utils.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/commands/publish/remove.ts +8 -1
- package/src/commands/publish/submit.ts +12 -4
- package/src/commands/publish/support.ts +8 -1
- package/src/commands/publish/update.ts +8 -1
- package/src/commands/scaffolding/index.ts +1 -0
- package/src/commands/scaffolding/init.ts +19 -0
- package/src/commands/validate.ts +5 -12
- package/src/config/index.ts +1 -2
- package/src/generated/config_obj.json +1 -0
- package/src/generated/config_schema.json +1 -0
- package/src/index.ts +30 -10
- package/src/prebuild_schema/publishing_source.yaml +44 -0
- package/src/prebuild_schema/schemagen.js +20 -0
- package/src/utils.ts +52 -19
- package/lib/esm/config/schema.json +0 -195
package/README.md
CHANGED
|
@@ -25,24 +25,36 @@ echo "ANDROID_TOOLS_DIR=\"<path_to_android_sdk_build_tools_dir>\"" > .env
|
|
|
25
25
|
In your application folder (e.g., `example`):
|
|
26
26
|
|
|
27
27
|
```shell
|
|
28
|
-
|
|
28
|
+
mkdir publishing
|
|
29
|
+
cd publishing
|
|
30
|
+
|
|
31
|
+
pnpm init
|
|
29
32
|
pnpm install --save-dev @solana-mobile/dapp-store-cli
|
|
33
|
+
npx dapp-store init
|
|
30
34
|
npx dapp-store --help
|
|
31
35
|
```
|
|
32
36
|
|
|
33
37
|
or with `yarn`
|
|
34
38
|
|
|
35
39
|
```shell
|
|
36
|
-
|
|
40
|
+
mkdir publishing
|
|
41
|
+
cd publishing
|
|
42
|
+
|
|
43
|
+
yarn init
|
|
37
44
|
yarn add @solana-mobile/dapp-store-cli
|
|
45
|
+
yarn run dapp-store init
|
|
38
46
|
yarn run dapp-store --help
|
|
39
47
|
```
|
|
40
48
|
|
|
41
49
|
or with `npm`
|
|
42
50
|
|
|
43
51
|
```shell
|
|
44
|
-
|
|
52
|
+
mkdir publishing
|
|
53
|
+
cd publishing
|
|
54
|
+
|
|
55
|
+
npm init
|
|
45
56
|
npm install --save-dev @solana-mobile/dapp-store-cli
|
|
57
|
+
npx dapp-store init
|
|
46
58
|
npx dapp-store --help
|
|
47
59
|
```
|
|
48
60
|
|
|
@@ -69,53 +81,6 @@ Repeat steps 3. and 4. as needed!
|
|
|
69
81
|
|
|
70
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.
|
|
71
83
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
```yaml
|
|
77
|
-
publisher:
|
|
78
|
-
name: My new publisher name
|
|
79
|
-
address: BrWNieTsfdkkwMaz2A616i1fkqSjxk2kHhTn1Y44pi48
|
|
80
|
-
website: https://solanamobile.com
|
|
81
|
-
email: hello@solanamobile.com
|
|
82
|
-
media:
|
|
83
|
-
- purpose: icon
|
|
84
|
-
uri: ./media/publisher_icon.jpeg
|
|
85
|
-
app:
|
|
86
|
-
name: My new app name
|
|
87
|
-
address: 4xE4MDVHfFAXMKKzqrJ2v1HxcgYgdoV98nuvd8SRKhWP
|
|
88
|
-
android_package: com.company.dapp
|
|
89
|
-
urls:
|
|
90
|
-
license_url: http://cdn.org/license.html
|
|
91
|
-
copyright_url: http://cdn.org/copyright.html
|
|
92
|
-
privacy_policy_url: http://cdn.org/privacy.html
|
|
93
|
-
website: http://cdn.org
|
|
94
|
-
media:
|
|
95
|
-
- purpose: icon
|
|
96
|
-
uri: ./media/app_icon.jpeg
|
|
97
|
-
release:
|
|
98
|
-
address: HeXP8pLxxzWPo1j7FwsytrCBN9Q7HZ3MA8TVCVGj5eCA
|
|
99
|
-
media:
|
|
100
|
-
- purpose: screenshot
|
|
101
|
-
uri: ./media/app_screenshot.png
|
|
102
|
-
files:
|
|
103
|
-
- purpose: install
|
|
104
|
-
uri: ./files/app-debug.apk
|
|
105
|
-
catalog:
|
|
106
|
-
en-US:
|
|
107
|
-
name: |
|
|
108
|
-
A nice, helpful dApp name
|
|
109
|
-
long_description: |
|
|
110
|
-
Some wonderful release notes, in long-form
|
|
111
|
-
new_in_version: |
|
|
112
|
-
Something new in this version
|
|
113
|
-
saga_features: |
|
|
114
|
-
Some information about saga specific features
|
|
115
|
-
solana_mobile_dapp_publisher_portal:
|
|
116
|
-
google_store_package: com.company.dapp.otherpkg
|
|
117
|
-
testing_instructions: >
|
|
118
|
-
Here are some steps informing Solana Mobile of how to test this dapp. You
|
|
119
|
-
can specify multiple lines of instructions. For example, if a login is
|
|
120
|
-
needed, you would add those details here.
|
|
121
|
-
```
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import { Connection } from "@solana/web3.js";
|
|
2
2
|
import { publishRemove } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
|
-
import { getConfigFile } from "../../utils.js";
|
|
3
|
+
import { checkMintedStatus, getConfigFile } from "../../utils.js";
|
|
4
4
|
import nacl from "tweetnacl";
|
|
5
5
|
export const publishRemoveCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, critical = false, }) => {
|
|
6
6
|
if (!requestorIsAuthorized) {
|
|
@@ -10,6 +10,10 @@ export const publishRemoveCommand = async ({ appMintAddress, releaseMintAddress,
|
|
|
10
10
|
const connection = new Connection(url);
|
|
11
11
|
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await getConfigFile();
|
|
12
12
|
const sign = ((buf) => nacl.sign(buf, signer.secretKey));
|
|
13
|
+
const pubAddr = publisherDetails.address;
|
|
14
|
+
const appAddr = appMintAddress ?? appDetails.address;
|
|
15
|
+
const releaseAddr = releaseMintAddress ?? releaseDetails.address;
|
|
16
|
+
await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
|
|
13
17
|
await publishRemove({ connection, sign }, {
|
|
14
18
|
appMintAddress: appMintAddress ?? appDetails.address,
|
|
15
19
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
@@ -1 +1 @@
|
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,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,aAAa,EAAE,CAAC;IAE1B,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,7 +1,7 @@
|
|
|
1
1
|
import { Connection } from "@solana/web3.js";
|
|
2
2
|
import { publishSubmit } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
3
|
import nacl from "tweetnacl";
|
|
4
|
-
import { getConfigFile } from "../../utils.js";
|
|
4
|
+
import { checkMintedStatus, getConfigFile } from "../../utils.js";
|
|
5
5
|
export const publishSubmitCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, }) => {
|
|
6
6
|
if (!compliesWithSolanaDappStorePolicies) {
|
|
7
7
|
console.error("ERROR: Cannot submit a request for which the requestor does not attest that it complies with Solana dApp Store policies");
|
|
@@ -14,9 +14,13 @@ export const publishSubmitCommand = async ({ appMintAddress, releaseMintAddress,
|
|
|
14
14
|
const connection = new Connection(url);
|
|
15
15
|
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails, } = await getConfigFile();
|
|
16
16
|
const sign = ((buf) => nacl.sign(buf, signer.secretKey));
|
|
17
|
+
const pubAddr = publisherDetails.address;
|
|
18
|
+
const appAddr = appMintAddress ?? appDetails.address;
|
|
19
|
+
const releaseAddr = releaseMintAddress ?? releaseDetails.address;
|
|
20
|
+
await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
|
|
17
21
|
await publishSubmit({ connection, sign }, {
|
|
18
|
-
appMintAddress:
|
|
19
|
-
releaseMintAddress:
|
|
22
|
+
appMintAddress: appAddr,
|
|
23
|
+
releaseMintAddress: releaseAddr,
|
|
20
24
|
publisherDetails,
|
|
21
25
|
solanaMobileDappPublisherPortalDetails,
|
|
22
26
|
compliesWithSolanaDappStorePolicies,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../../src/commands/publish/submit.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAalE,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,aAAa,EAAE,CAAC;IAE1B,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,6 +1,6 @@
|
|
|
1
1
|
import { Connection } from "@solana/web3.js";
|
|
2
2
|
import { publishSupport } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
|
-
import { getConfigFile } from "../../utils.js";
|
|
3
|
+
import { checkMintedStatus, getConfigFile } from "../../utils.js";
|
|
4
4
|
import nacl from "tweetnacl";
|
|
5
5
|
export const publishSupportCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, requestDetails, }) => {
|
|
6
6
|
if (!requestorIsAuthorized) {
|
|
@@ -10,6 +10,10 @@ export const publishSupportCommand = async ({ appMintAddress, releaseMintAddress
|
|
|
10
10
|
const connection = new Connection(url);
|
|
11
11
|
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await getConfigFile();
|
|
12
12
|
const sign = ((buf) => nacl.sign(buf, signer.secretKey));
|
|
13
|
+
const pubAddr = publisherDetails.address;
|
|
14
|
+
const appAddr = appMintAddress ?? appDetails.address;
|
|
15
|
+
const releaseAddr = releaseMintAddress ?? releaseDetails.address;
|
|
16
|
+
await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
|
|
13
17
|
await publishSupport({ connection, sign }, {
|
|
14
18
|
appMintAddress: appMintAddress ?? appDetails.address,
|
|
15
19
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
@@ -1 +1 @@
|
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,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,aAAa,EAAE,CAAC;IAE1B,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,6 +1,6 @@
|
|
|
1
1
|
import { Connection } from "@solana/web3.js";
|
|
2
2
|
import { publishUpdate } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
|
-
import { getConfigFile } from "../../utils.js";
|
|
3
|
+
import { checkMintedStatus, getConfigFile } from "../../utils.js";
|
|
4
4
|
import nacl from "tweetnacl";
|
|
5
5
|
export const publishUpdateCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, critical = false, }) => {
|
|
6
6
|
if (!compliesWithSolanaDappStorePolicies) {
|
|
@@ -14,6 +14,10 @@ export const publishUpdateCommand = async ({ appMintAddress, releaseMintAddress,
|
|
|
14
14
|
const connection = new Connection(url);
|
|
15
15
|
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails, } = await getConfigFile();
|
|
16
16
|
const sign = ((buf) => nacl.sign(buf, signer.secretKey));
|
|
17
|
+
const pubAddr = publisherDetails.address;
|
|
18
|
+
const appAddr = appMintAddress ?? appDetails.address;
|
|
19
|
+
const releaseAddr = releaseMintAddress ?? releaseDetails.address;
|
|
20
|
+
await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
|
|
17
21
|
await publishUpdate({ connection, sign }, {
|
|
18
22
|
appMintAddress: appMintAddress ?? appDetails.address,
|
|
19
23
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
@@ -1 +1 @@
|
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,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,aAAa,EAAE,CAAC;IAE1B,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/scaffolding/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { dump } from "js-yaml";
|
|
2
|
+
// eslint-disable-next-line require-extensions/require-extensions
|
|
3
|
+
import releaseSchema from "../../generated/config_obj.json" assert { type: "json" };
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import { Constants } from "../../utils.js";
|
|
6
|
+
export const initScaffold = () => {
|
|
7
|
+
const outputYaml = Constants.CONFIG_FILE_NAME;
|
|
8
|
+
const outFile = `${process.cwd()}/${outputYaml}`;
|
|
9
|
+
if (fs.existsSync(outFile)) {
|
|
10
|
+
throw Error("Configuration file already present; please use to intialize a new config file.");
|
|
11
|
+
}
|
|
12
|
+
fs.writeFileSync(outFile, dump(releaseSchema));
|
|
13
|
+
return `Your configuration file was created: ${outputYaml}`;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,15 +1,5 @@
|
|
|
1
|
-
import { createAppJson, createPublisherJson, createReleaseJson, validateApp, validatePublisher, validateRelease, } from "@solana-mobile/dapp-store-publishing-tools";
|
|
1
|
+
import { createAppJson, createPublisherJson, createReleaseJson, validateApp, validatePublisher, validateRelease, metaplexFileReplacer, } from "@solana-mobile/dapp-store-publishing-tools";
|
|
2
2
|
import { debug, getConfigFile } from "../utils.js";
|
|
3
|
-
import { isMetaplexFile } from "@metaplex-foundation/js";
|
|
4
|
-
const metaplexFileReplacer = (k, v) => {
|
|
5
|
-
if (isMetaplexFile(v)) {
|
|
6
|
-
return {
|
|
7
|
-
...v,
|
|
8
|
-
buffer: "(suppressed)",
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
return v;
|
|
12
|
-
};
|
|
13
3
|
export const validateCommand = async ({ signer, buildToolsPath, }) => {
|
|
14
4
|
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await getConfigFile(buildToolsPath);
|
|
15
5
|
debug({ publisherDetails, appDetails, releaseDetails });
|
|
@@ -38,9 +28,10 @@ export const validateCommand = async ({ signer, buildToolsPath, }) => {
|
|
|
38
28
|
console.error(e);
|
|
39
29
|
}
|
|
40
30
|
const releaseJson = await createReleaseJson({ releaseDetails, appDetails, publisherDetails }, signer.publicKey);
|
|
41
|
-
|
|
31
|
+
const objStringified = JSON.stringify(releaseJson, metaplexFileReplacer, 2);
|
|
32
|
+
debug("releaseJson=", objStringified);
|
|
42
33
|
try {
|
|
43
|
-
validateRelease(
|
|
34
|
+
validateRelease(JSON.parse(objStringified));
|
|
44
35
|
console.info(`Release JSON valid!`);
|
|
45
36
|
}
|
|
46
37
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,aAAa,EAAE,MAAM,aAAa,CAAC;AAMnD,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,aAAa,CAAC,cAAc,CAAC,CAAC;IAExC,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"}
|
package/lib/esm/config/index.js
CHANGED
|
@@ -2,12 +2,11 @@ import fs from "fs/promises";
|
|
|
2
2
|
import { load } from "js-yaml";
|
|
3
3
|
import Ajv from "ajv";
|
|
4
4
|
// eslint-disable-next-line require-extensions/require-extensions
|
|
5
|
-
import schemaJson from "
|
|
5
|
+
import schemaJson from "../generated/config_schema.json" assert { type: "json" };
|
|
6
6
|
const ajv = new Ajv({ strictTuples: false });
|
|
7
7
|
const validate = ajv.compile(schemaJson);
|
|
8
8
|
export const getConfig = async (configPath) => {
|
|
9
9
|
const configFile = await fs.readFile(configPath, "utf-8");
|
|
10
|
-
const configJson = load(configFile);
|
|
11
10
|
const valid = validate(load(configFile));
|
|
12
11
|
if (!valid) {
|
|
13
12
|
console.error(validate.errors);
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "publisher": { "name": "<<YOUR_PUBLISHER_NAME>>", "address": "", "website": "<<URL_OF_PUBLISHER_WEBSITE>>", "email": "<<EMAIL_ADDRESS_TO_CONTACT_PUBLISHER>>", "media": [{ "purpose": "icon", "uri": "<<RELATIVE_PATH_TO_PUBLISHER_ICON>>" }] }, "app": { "name": "<<APP_NAME>>", "address": "", "android_package": "<<ANDROID_PACKAGE_NAME>>", "urls": { "license_url": "<<URL_OF_APP_LICENSE_OR_TERMS_OF_SERVICE>>", "copyright_url": "<<URL_OF_COPYRIGHT_DETAILS_FOR_APP>>", "privacy_policy_url": "<<URL_OF_APP_PRIVACY_POLICY>>", "website": "<<URL_OF_APP_WEBSITE>>" }, "media": [{ "purpose": "icon", "uri": "<<RELATIVE_PATH_TO_APP_ICON>>" }] }, "release": { "address": "", "media": [{ "purpose": "icon", "uri": "<<RELATIVE_PATH_TO_RELEASE_ICON>>" }, { "purpose": "screenshot", "uri": "<<RELATIVE_PATH_TO_SCREENSHOT>>" }], "files": [{ "purpose": "install", "uri": "<<RELATIVE_PATH_TO_APK>>" }], "catalog": { "en-US": { "name": "<<APP_NAME>>\n", "long_description": "<<LONG_APP_DESCRIPTION>>\n", "new_in_version": "<<WHATS_NEW_IN_THIS_VERSION>>\n", "saga_features": "<<ANY_FEATURES_ONLY_AVAILBLE_WHEN_RUNNING_ON_SAGA>>\n" } } }, "solana_mobile_dapp_publisher_portal": { "google_store_package": "<<ANDROID_PACKAGE_NAME_OF_GOOGLE_PLAY_STORE_VERSION_IF_DIFFERENT>>", "testing_instructions": "<<TESTING_INSTRUCTIONS>>\n" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "object", "properties": { "publisher": { "type": "object", "properties": { "name": { "type": "string" }, "address": { "type": "string" }, "website": { "type": "string" }, "email": { "type": "string" }, "media": { "type": "array", "items": { "type": "object", "properties": { "purpose": { "type": "string" }, "uri": { "type": "string" } } } } } }, "app": { "type": "object", "properties": { "name": { "type": "string" }, "address": { "type": "string" }, "android_package": { "type": "string" }, "urls": { "type": "object", "properties": { "license_url": { "type": "string" }, "copyright_url": { "type": "string" }, "privacy_policy_url": { "type": "string" }, "website": { "type": "string" } } }, "media": { "type": "array", "items": { "type": "object", "properties": { "purpose": { "type": "string" }, "uri": { "type": "string" } } } } } }, "release": { "type": "object", "properties": { "address": { "type": "string" }, "media": { "type": "array", "items": { "type": "object", "properties": { "purpose": { "type": "string" }, "uri": { "type": "string" } }, "required": ["purpose", "uri"] } }, "files": { "type": "array", "items": { "type": "object", "properties": { "purpose": { "type": "string" }, "uri": { "type": "string" } } } }, "catalog": { "type": "object", "properties": { "en-US": { "type": "object", "properties": { "name": { "type": "string" }, "long_description": { "type": "string" }, "new_in_version": { "type": "string" }, "saga_features": { "type": "string" } } } } } } }, "solana_mobile_dapp_publisher_portal": { "type": "object", "properties": { "google_store_package": { "type": "string" }, "testing_instructions": { "type": "string" } } } } }
|
package/lib/esm/index.js
CHANGED
|
@@ -2,8 +2,9 @@ import { Command } from "commander";
|
|
|
2
2
|
import { validateCommand } from "./commands/index.js";
|
|
3
3
|
import { createAppCommand, createPublisherCommand, createReleaseCommand } from "./commands/create/index.js";
|
|
4
4
|
import { publishRemoveCommand, publishSubmitCommand, publishSupportCommand, publishUpdateCommand } from "./commands/publish/index.js";
|
|
5
|
-
import { checkForSelfUpdate, checkSubmissionNetwork, generateNetworkSuffix, getConfigFile, parseKeypair, showMessage } from "./utils.js";
|
|
5
|
+
import { checkForSelfUpdate, checkSubmissionNetwork, Constants, generateNetworkSuffix, getConfigFile, parseKeypair, showMessage } from "./utils.js";
|
|
6
6
|
import * as dotenv from "dotenv";
|
|
7
|
+
import { initScaffold } from "./commands/scaffolding/index.js";
|
|
7
8
|
dotenv.config();
|
|
8
9
|
const hasAddressInConfig = ({ address }) => {
|
|
9
10
|
return !!address;
|
|
@@ -33,8 +34,17 @@ async function tryWithErrorMessage(block) {
|
|
|
33
34
|
async function main() {
|
|
34
35
|
program
|
|
35
36
|
.name("dapp-store")
|
|
36
|
-
.version(
|
|
37
|
+
.version(Constants.CLI_VERSION)
|
|
37
38
|
.description("CLI to assist with publishing to the Saga Dapp Store");
|
|
39
|
+
const initCommand = program
|
|
40
|
+
.command("init")
|
|
41
|
+
.description("First-time initialization of tooling configuration")
|
|
42
|
+
.action(async () => {
|
|
43
|
+
tryWithErrorMessage(async () => {
|
|
44
|
+
const msg = initScaffold();
|
|
45
|
+
showMessage("Initialized", msg);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
38
48
|
const createCommand = program
|
|
39
49
|
.command("create")
|
|
40
50
|
.description("Create a `publisher`, `app`, or `release`");
|
|
@@ -149,8 +159,8 @@ async function main() {
|
|
|
149
159
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
150
160
|
.requiredOption("--complies-with-solana-dapp-store-policies", "An attestation that the app complies with the Solana dApp Store policies")
|
|
151
161
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
152
|
-
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config
|
|
153
|
-
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config
|
|
162
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from your config file will be used.")
|
|
163
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from your config file will be used.")
|
|
154
164
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
155
165
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
156
166
|
.action(async ({ appMintAddress, releaseMintAddress, keypair, url, compliesWithSolanaDappStorePolicies, requestorIsAuthorized, dryRun, }) => {
|
|
@@ -183,8 +193,8 @@ async function main() {
|
|
|
183
193
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
184
194
|
.requiredOption("--complies-with-solana-dapp-store-policies", "An attestation that the app complies with the Solana dApp Store policies")
|
|
185
195
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
186
|
-
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config
|
|
187
|
-
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config
|
|
196
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from your config file will be used.")
|
|
197
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from your config file will be used.")
|
|
188
198
|
.option("-c, --critical", "Flag for a critical app update request")
|
|
189
199
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
190
200
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
@@ -218,8 +228,8 @@ async function main() {
|
|
|
218
228
|
.description("Remove an existing app from the Solana Mobile dApp publisher portal")
|
|
219
229
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
220
230
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
221
|
-
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config
|
|
222
|
-
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config
|
|
231
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from your config file will be used.")
|
|
232
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from your config file will be used.")
|
|
223
233
|
.option("-c, --critical", "Flag for a critical app removal request")
|
|
224
234
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
225
235
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
@@ -252,8 +262,8 @@ async function main() {
|
|
|
252
262
|
.description("Submit a support request for an existing app on the Solana Mobile dApp publisher portal")
|
|
253
263
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
254
264
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
255
|
-
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config
|
|
256
|
-
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config
|
|
265
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from your config file will be used.")
|
|
266
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from your config file will be used.")
|
|
257
267
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
258
268
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
259
269
|
.action(async (requestDetails, { appMintAddress, releaseMintAddress, keypair, url, requestorIsAuthorized, dryRun }) => {
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solana-mobile/dapp-store-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"clean": "shx mkdir -p lib && shx rm -rf lib",
|
|
31
|
-
"prebuild": "pnpm run clean"
|
|
31
|
+
"prebuild": "pnpm run clean && node src/prebuild_schema/schemagen.js"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@metaplex-foundation/js": "0.17.11",
|
|
@@ -40,16 +40,19 @@
|
|
|
40
40
|
"shx": "^0.3.4"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@solana-mobile/dapp-store-publishing-tools": "workspace:0.
|
|
43
|
+
"@solana-mobile/dapp-store-publishing-tools": "workspace:0.2.0",
|
|
44
44
|
"@solana/web3.js": "1.68.0",
|
|
45
|
+
"@types/semver": "^7.3.13",
|
|
45
46
|
"ajv": "^8.11.0",
|
|
46
47
|
"boxen": "^7.0.1",
|
|
47
48
|
"commander": "^9.4.1",
|
|
48
49
|
"debug": "^4.3.4",
|
|
49
50
|
"dotenv": "^16.0.3",
|
|
50
51
|
"esm": "^3.2.25",
|
|
52
|
+
"generate-schema": "^2.6.0",
|
|
51
53
|
"image-size": "^1.0.2",
|
|
52
54
|
"js-yaml": "^4.1.0",
|
|
55
|
+
"semver": "^7.3.8",
|
|
53
56
|
"terminal-link": "^3.0.0",
|
|
54
57
|
"tweetnacl": "1.0.3",
|
|
55
58
|
"update-notifier": "^6.0.2"
|
package/lib/esm/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
|
-
import { Keypair } from "@solana/web3.js";
|
|
2
|
+
import { Keypair, PublicKey } from "@solana/web3.js";
|
|
3
3
|
import { getConfig } from "./config/index.js";
|
|
4
4
|
import debugModule from "debug";
|
|
5
5
|
import { dump } from "js-yaml";
|
|
@@ -11,17 +11,35 @@ import { imageSize } from "image-size";
|
|
|
11
11
|
import updateNotifier from "update-notifier";
|
|
12
12
|
import cliPackage from "./package.json" assert { type: "json" };
|
|
13
13
|
import boxen from "boxen";
|
|
14
|
+
import ver from "semver";
|
|
14
15
|
import { CachedStorageDriver } from "./upload/CachedStorageDriver.js";
|
|
15
16
|
const runImgSize = util.promisify(imageSize);
|
|
16
17
|
const runExec = util.promisify(exec);
|
|
18
|
+
export class Constants {
|
|
19
|
+
}
|
|
20
|
+
Constants.CLI_VERSION = "0.2.0";
|
|
21
|
+
Constants.CONFIG_FILE_NAME = "config.yaml";
|
|
17
22
|
export const debug = debugModule("CLI");
|
|
18
23
|
export const checkForSelfUpdate = async () => {
|
|
19
24
|
const notifier = updateNotifier({ pkg: cliPackage });
|
|
20
25
|
const updateInfo = await notifier.fetchInfo();
|
|
21
|
-
|
|
26
|
+
const latestVer = new ver.SemVer(updateInfo.latest);
|
|
27
|
+
const currentVer = new ver.SemVer(updateInfo.current);
|
|
28
|
+
if (latestVer.major > currentVer.major || latestVer.minor > currentVer.minor) {
|
|
22
29
|
throw new Error("Please update to the latest version of the dApp Store CLI before proceeding.");
|
|
23
30
|
}
|
|
24
31
|
};
|
|
32
|
+
export const checkMintedStatus = async (conn, pubAddr, appAddr, releaseAddr) => {
|
|
33
|
+
const results = await conn.getMultipleAccountsInfo([
|
|
34
|
+
new PublicKey(pubAddr),
|
|
35
|
+
new PublicKey(appAddr),
|
|
36
|
+
new PublicKey(releaseAddr),
|
|
37
|
+
]);
|
|
38
|
+
const rentAccounts = results.filter((item) => !(item == undefined) && item?.lamports > 0);
|
|
39
|
+
if (rentAccounts?.length != 3) {
|
|
40
|
+
throw new Error("Please ensure you have minted all of your NFTs before submitting to the Solana Mobile dApp publisher portal.");
|
|
41
|
+
}
|
|
42
|
+
};
|
|
25
43
|
export const parseKeypair = (pathToKeypairFile) => {
|
|
26
44
|
try {
|
|
27
45
|
const keypairFile = fs.readFileSync(pathToKeypairFile, "utf-8");
|
|
@@ -42,7 +60,7 @@ const AaptPrefixes = {
|
|
|
42
60
|
localePrefix: "locales: ",
|
|
43
61
|
};
|
|
44
62
|
export const getConfigFile = async (buildToolsDir = null) => {
|
|
45
|
-
const configFilePath = `${process.cwd()}
|
|
63
|
+
const configFilePath = `${process.cwd()}/${Constants.CONFIG_FILE_NAME}`;
|
|
46
64
|
const config = await getConfig(configFilePath);
|
|
47
65
|
if (buildToolsDir && fs.lstatSync(buildToolsDir).isDirectory()) {
|
|
48
66
|
// We validate that the config is going to have at least one installable asset
|
|
@@ -56,27 +74,25 @@ export const getConfigFile = async (buildToolsDir = null) => {
|
|
|
56
74
|
const publisherIcon = config.publisher.media?.find((asset) => asset.purpose === "icon")?.uri;
|
|
57
75
|
if (publisherIcon) {
|
|
58
76
|
const iconPath = path.join(process.cwd(), publisherIcon);
|
|
59
|
-
|
|
60
|
-
throw new Error("Please check the path to your Publisher icon and ensure the file is a jpeg, png, or webp file.");
|
|
61
|
-
}
|
|
77
|
+
await checkIconCompatibility(iconPath, "Publisher");
|
|
62
78
|
const iconBuffer = await fs.promises.readFile(iconPath);
|
|
63
|
-
if (await checkIconDimensions(iconPath)) {
|
|
64
|
-
throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.");
|
|
65
|
-
}
|
|
66
79
|
config.publisher.icon = toMetaplexFile(iconBuffer, publisherIcon);
|
|
67
80
|
}
|
|
68
81
|
const appIcon = config.app.media?.find((asset) => asset.purpose === "icon")?.uri;
|
|
69
82
|
if (appIcon) {
|
|
70
83
|
const iconPath = path.join(process.cwd(), appIcon);
|
|
71
|
-
|
|
72
|
-
throw new Error("Please check the path to your App icon and ensure the file is a jpeg, png, or webp file.");
|
|
73
|
-
}
|
|
84
|
+
await checkIconCompatibility(iconPath, "App");
|
|
74
85
|
const iconBuffer = await fs.promises.readFile(iconPath);
|
|
75
|
-
if (await checkIconDimensions(iconPath)) {
|
|
76
|
-
throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.");
|
|
77
|
-
}
|
|
78
86
|
config.app.icon = toMetaplexFile(iconBuffer, appIcon);
|
|
79
87
|
}
|
|
88
|
+
const releaseIcon = config.release.media?.find((asset) => asset.purpose === "icon")?.uri;
|
|
89
|
+
if (releaseIcon) {
|
|
90
|
+
const iconPath = path.join(process.cwd(), releaseIcon);
|
|
91
|
+
await checkIconCompatibility(iconPath, "Release");
|
|
92
|
+
}
|
|
93
|
+
if (!appIcon && !releaseIcon) {
|
|
94
|
+
throw new Error("Please specify at least one media entry of type icon in your configuration file");
|
|
95
|
+
}
|
|
80
96
|
config.release.media.forEach((item) => {
|
|
81
97
|
const imagePath = path.join(process.cwd(), item.uri);
|
|
82
98
|
if (!fs.existsSync(imagePath) || !checkImageExtension(imagePath)) {
|
|
@@ -85,6 +101,14 @@ export const getConfigFile = async (buildToolsDir = null) => {
|
|
|
85
101
|
});
|
|
86
102
|
return config;
|
|
87
103
|
};
|
|
104
|
+
const checkIconCompatibility = async (path, typeString) => {
|
|
105
|
+
if (!fs.existsSync(path) || !checkImageExtension(path)) {
|
|
106
|
+
throw new Error(`Please check the path to your ${typeString} icon and ensure the file is a jpeg, png, or webp file.`);
|
|
107
|
+
}
|
|
108
|
+
if (await checkIconDimensions(path)) {
|
|
109
|
+
throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.");
|
|
110
|
+
}
|
|
111
|
+
};
|
|
88
112
|
const checkImageExtension = (uri) => {
|
|
89
113
|
const fileExt = path.extname(uri).toLowerCase();
|
|
90
114
|
return (fileExt == ".png" ||
|
|
@@ -177,7 +201,7 @@ export const saveToConfig = async ({ publisher, app, release, }) => {
|
|
|
177
201
|
solana_mobile_dapp_publisher_portal: currentConfig.solana_mobile_dapp_publisher_portal,
|
|
178
202
|
};
|
|
179
203
|
// TODO(jon): Verify the contents of the YAML file
|
|
180
|
-
fs.writeFileSync(`${process.cwd()}
|
|
204
|
+
fs.writeFileSync(`${process.cwd()}/${Constants.CONFIG_FILE_NAME}`, dump(newConfig));
|
|
181
205
|
};
|
|
182
206
|
export const getMetaplexInstance = (connection, keypair) => {
|
|
183
207
|
const metaplex = Metaplex.make(connection).use(keypairIdentity(keypair));
|