@solana-mobile/dapp-store-cli 0.1.6 → 0.1.8
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 -5
- package/lib/esm/commands/create/app.js +3 -2
- package/lib/esm/commands/create/app.js.map +1 -1
- package/lib/esm/commands/publish/remove.js +3 -2
- package/lib/esm/commands/publish/remove.js.map +1 -1
- package/lib/esm/commands/publish/submit.js +3 -2
- package/lib/esm/commands/publish/submit.js.map +1 -1
- package/lib/esm/commands/publish/support.js +3 -2
- package/lib/esm/commands/publish/support.js.map +1 -1
- package/lib/esm/commands/publish/update.js +3 -2
- package/lib/esm/commands/publish/update.js.map +1 -1
- package/lib/esm/config/index.js +1 -1
- package/lib/esm/config/index.js.map +1 -1
- package/lib/esm/config/schema.json +0 -4
- package/lib/esm/index.js +92 -79
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/package.json +57 -0
- package/lib/esm/utils.js +34 -6
- package/lib/esm/utils.js.map +1 -1
- package/lib/types/commands/create/app.d.ts.map +1 -1
- package/lib/types/commands/publish/remove.d.ts +2 -1
- package/lib/types/commands/publish/remove.d.ts.map +1 -1
- package/lib/types/commands/publish/submit.d.ts +2 -1
- package/lib/types/commands/publish/submit.d.ts.map +1 -1
- package/lib/types/commands/publish/support.d.ts +2 -1
- package/lib/types/commands/publish/support.d.ts.map +1 -1
- package/lib/types/commands/publish/update.d.ts +2 -1
- package/lib/types/commands/publish/update.d.ts.map +1 -1
- package/lib/types/utils.d.ts +3 -1
- package/lib/types/utils.d.ts.map +1 -1
- package/package.json +11 -3
- package/src/commands/create/app.ts +3 -2
- package/src/commands/publish/remove.ts +4 -0
- package/src/commands/publish/submit.ts +4 -0
- package/src/commands/publish/support.ts +4 -0
- package/src/commands/publish/update.ts +4 -0
- package/src/config/index.ts +1 -1
- package/src/config/schema.json +0 -4
- package/src/index.ts +124 -91
- package/src/utils.ts +41 -7
package/README.md
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
## Prerequisites
|
|
2
2
|
|
|
3
|
-
- Node
|
|
3
|
+
- Node 18+
|
|
4
4
|
- PNPM
|
|
5
5
|
- Android SDK build tools
|
|
6
6
|
|
|
7
|
-
If you have Node 16+, you can [activate PNPM with Corepack](https://pnpm.io/installation#using-corepack):
|
|
8
|
-
|
|
9
7
|
```shell
|
|
10
8
|
corepack enable
|
|
11
9
|
corepack prepare pnpm@`npm info pnpm --json | jq -r .version` --activate
|
|
@@ -108,8 +106,6 @@ release:
|
|
|
108
106
|
en-US:
|
|
109
107
|
name: |
|
|
110
108
|
A nice, helpful dApp name
|
|
111
|
-
short_description: |
|
|
112
|
-
Some wonderful release notes
|
|
113
109
|
long_description: |
|
|
114
110
|
Some wonderful release notes, in long-form
|
|
115
111
|
new_in_version: |
|
|
@@ -30,8 +30,9 @@ export const createAppCommand = async ({ signer, url, dryRun, publisherMintAddre
|
|
|
30
30
|
publisherMintAddress: publisherDetails.address ?? publisherMintAddress,
|
|
31
31
|
appDetails,
|
|
32
32
|
}, { dryRun });
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
if (!dryRun) {
|
|
34
|
+
saveToConfig({ app: { address: appAddress } });
|
|
35
|
+
}
|
|
35
36
|
return { appAddress };
|
|
36
37
|
};
|
|
37
38
|
//# sourceMappingURL=app.js.map
|
|
@@ -1 +1 @@
|
|
|
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,aAAa,EACb,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,kBAAkB,EAAE,CAAC;IACxD,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,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,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,aAAa,EAAE,CAAC;IAExB,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,
|
|
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,aAAa,EACb,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,kBAAkB,EAAE,CAAC;IACxD,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,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,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,aAAa,EAAE,CAAC;IAExB,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"}
|
|
@@ -2,15 +2,16 @@ import { Connection } from "@solana/web3.js";
|
|
|
2
2
|
import { publishRemove } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
3
|
import { getConfigFile } from "../../utils.js";
|
|
4
4
|
import nacl from "tweetnacl";
|
|
5
|
-
export const publishRemoveCommand = async ({ releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, critical = false, }) => {
|
|
5
|
+
export const publishRemoveCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, critical = false, }) => {
|
|
6
6
|
if (!requestorIsAuthorized) {
|
|
7
7
|
console.error("ERROR: Cannot submit a request for which the requestor does not attest they are authorized to do so");
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
const connection = new Connection(url);
|
|
11
|
-
const { publisher: publisherDetails, release: releaseDetails, } = await getConfigFile();
|
|
11
|
+
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await getConfigFile();
|
|
12
12
|
const sign = ((buf) => nacl.sign(buf, signer.secretKey));
|
|
13
13
|
await publishRemove({ connection, sign }, {
|
|
14
|
+
appMintAddress: appMintAddress ?? appDetails.address,
|
|
14
15
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
15
16
|
publisherDetails,
|
|
16
17
|
requestorIsAuthorized,
|
|
@@ -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;AAC/C,OAAO,IAAI,MAAM,WAAW,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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,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;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,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"}
|
|
@@ -2,7 +2,7 @@ import { Connection } from "@solana/web3.js";
|
|
|
2
2
|
import { publishSubmit } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
3
|
import nacl from "tweetnacl";
|
|
4
4
|
import { getConfigFile } from "../../utils.js";
|
|
5
|
-
export const publishSubmitCommand = async ({ releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, }) => {
|
|
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");
|
|
8
8
|
return;
|
|
@@ -12,9 +12,10 @@ export const publishSubmitCommand = async ({ releaseMintAddress, signer, url, dr
|
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
const connection = new Connection(url);
|
|
15
|
-
const { publisher: publisherDetails, release: releaseDetails, solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails, } = await getConfigFile();
|
|
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
17
|
await publishSubmit({ connection, sign }, {
|
|
18
|
+
appMintAddress: appMintAddress ?? appDetails.address,
|
|
18
19
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
19
20
|
publisherDetails,
|
|
20
21
|
solanaMobileDappPublisherPortalDetails,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../../src/commands/publish/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../../src/commands/publish/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAY/C,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;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,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;KACtB,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -2,15 +2,16 @@ import { Connection } from "@solana/web3.js";
|
|
|
2
2
|
import { publishSupport } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
3
|
import { getConfigFile } from "../../utils.js";
|
|
4
4
|
import nacl from "tweetnacl";
|
|
5
|
-
export const publishSupportCommand = async ({ releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, requestDetails, }) => {
|
|
5
|
+
export const publishSupportCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, requestDetails, }) => {
|
|
6
6
|
if (!requestorIsAuthorized) {
|
|
7
7
|
console.error("ERROR: Cannot submit a request for which the requestor does not attest they are authorized to do so");
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
const connection = new Connection(url);
|
|
11
|
-
const { publisher: publisherDetails, release: releaseDetails, } = await getConfigFile();
|
|
11
|
+
const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await getConfigFile();
|
|
12
12
|
const sign = ((buf) => nacl.sign(buf, signer.secretKey));
|
|
13
13
|
await publishSupport({ connection, sign }, {
|
|
14
|
+
appMintAddress: appMintAddress ?? appDetails.address,
|
|
14
15
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
15
16
|
publisherDetails,
|
|
16
17
|
requestorIsAuthorized,
|
|
@@ -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;AAC/C,OAAO,IAAI,MAAM,WAAW,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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,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;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,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"}
|
|
@@ -2,7 +2,7 @@ import { Connection } from "@solana/web3.js";
|
|
|
2
2
|
import { publishUpdate } from "@solana-mobile/dapp-store-publishing-tools";
|
|
3
3
|
import { getConfigFile } from "../../utils.js";
|
|
4
4
|
import nacl from "tweetnacl";
|
|
5
|
-
export const publishUpdateCommand = async ({ releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, critical = false, }) => {
|
|
5
|
+
export const publishUpdateCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, critical = 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");
|
|
8
8
|
return;
|
|
@@ -12,9 +12,10 @@ export const publishUpdateCommand = async ({ releaseMintAddress, signer, url, dr
|
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
const connection = new Connection(url);
|
|
15
|
-
const { publisher: publisherDetails, release: releaseDetails, solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails, } = await getConfigFile();
|
|
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
17
|
await publishUpdate({ connection, sign }, {
|
|
18
|
+
appMintAddress: appMintAddress ?? appDetails.address,
|
|
18
19
|
releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
|
|
19
20
|
publisherDetails,
|
|
20
21
|
solanaMobileDappPublisherPortalDetails,
|
|
@@ -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;AAC/C,OAAO,IAAI,MAAM,WAAW,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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,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;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,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"}
|
package/lib/esm/config/index.js
CHANGED
|
@@ -2,7 +2,7 @@ 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 "./schema.json";
|
|
5
|
+
import schemaJson from "./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) => {
|
|
@@ -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,eAAe,CAAC;
|
|
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,eAAe,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;AAU/D,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;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpC,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"}
|
|
@@ -150,9 +150,6 @@
|
|
|
150
150
|
"name": {
|
|
151
151
|
"type": "string"
|
|
152
152
|
},
|
|
153
|
-
"short_description": {
|
|
154
|
-
"type": "string"
|
|
155
|
-
},
|
|
156
153
|
"long_description": {
|
|
157
154
|
"type": "string"
|
|
158
155
|
},
|
|
@@ -165,7 +162,6 @@
|
|
|
165
162
|
},
|
|
166
163
|
"required": [
|
|
167
164
|
"name",
|
|
168
|
-
"short_description",
|
|
169
165
|
"long_description",
|
|
170
166
|
"new_in_version",
|
|
171
167
|
"saga_features"
|
package/lib/esm/index.js
CHANGED
|
@@ -2,7 +2,7 @@ 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 { getConfigFile, parseKeypair,
|
|
5
|
+
import { checkForSelfUpdate, generateNetworkSuffix, getConfigFile, parseKeypair, showMessage } from "./utils.js";
|
|
6
6
|
import * as dotenv from "dotenv";
|
|
7
7
|
dotenv.config();
|
|
8
8
|
const hasAddressInConfig = ({ address }) => {
|
|
@@ -21,10 +21,19 @@ function resolveBuildToolsPath(buildToolsPath) {
|
|
|
21
21
|
// No path was specified
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
+
async function tryWithErrorMessage(block) {
|
|
25
|
+
try {
|
|
26
|
+
await block();
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
const errorMsg = e?.message ?? "";
|
|
30
|
+
showMessage("Error", errorMsg, true);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
24
33
|
async function main() {
|
|
25
34
|
program
|
|
26
35
|
.name("dapp-store")
|
|
27
|
-
.version("0.1.
|
|
36
|
+
.version("0.1.8")
|
|
28
37
|
.description("CLI to assist with publishing to the Saga Dapp Store");
|
|
29
38
|
const createCommand = program
|
|
30
39
|
.command("create")
|
|
@@ -36,10 +45,16 @@ async function main() {
|
|
|
36
45
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
37
46
|
.option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
|
|
38
47
|
.action(async ({ keypair, url, dryRun }) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
48
|
+
tryWithErrorMessage(async () => {
|
|
49
|
+
await checkForSelfUpdate();
|
|
50
|
+
const signer = parseKeypair(keypair);
|
|
51
|
+
if (signer) {
|
|
52
|
+
const result = await createPublisherCommand({ signer, url, dryRun });
|
|
53
|
+
const displayUrl = `https://solscan.io/token/${result.publisherAddress}${generateNetworkSuffix(url)}`;
|
|
54
|
+
const resultText = `Publisher NFT successfully minted:\n${displayUrl}`;
|
|
55
|
+
showMessage("Success", resultText);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
43
58
|
});
|
|
44
59
|
createCommand
|
|
45
60
|
.command("app")
|
|
@@ -49,26 +64,25 @@ async function main() {
|
|
|
49
64
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
50
65
|
.option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
|
|
51
66
|
.action(async ({ publisherMintAddress, keypair, url, dryRun }) => {
|
|
52
|
-
|
|
67
|
+
tryWithErrorMessage(async () => {
|
|
68
|
+
await checkForSelfUpdate();
|
|
53
69
|
const config = await getConfigFile();
|
|
54
70
|
if (!hasAddressInConfig(config.publisher) && !publisherMintAddress) {
|
|
55
|
-
|
|
56
|
-
createCommand.showHelpAfterError();
|
|
57
|
-
return;
|
|
71
|
+
throw new Error("Either specify a publisher mint address in the config file or specify as a CLI argument to this command.");
|
|
58
72
|
}
|
|
59
73
|
const signer = parseKeypair(keypair);
|
|
60
74
|
if (signer) {
|
|
61
|
-
await createAppCommand({
|
|
75
|
+
const result = await createAppCommand({
|
|
62
76
|
publisherMintAddress: publisherMintAddress,
|
|
63
77
|
signer,
|
|
64
78
|
url,
|
|
65
79
|
dryRun,
|
|
66
80
|
});
|
|
81
|
+
const displayUrl = `https://solscan.io/token/${result.appAddress}${generateNetworkSuffix(url)}`;
|
|
82
|
+
const resultText = `App NFT successfully minted:\n${displayUrl}`;
|
|
83
|
+
showMessage("Success", resultText);
|
|
67
84
|
}
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
showUserErrorMessage(e?.message ?? "");
|
|
71
|
-
}
|
|
85
|
+
});
|
|
72
86
|
});
|
|
73
87
|
createCommand
|
|
74
88
|
.command("release")
|
|
@@ -79,18 +93,15 @@ async function main() {
|
|
|
79
93
|
.option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
|
|
80
94
|
.option("-b, --build-tools-path <build-tools-path>", "Path to Android build tools which contains AAPT2")
|
|
81
95
|
.action(async ({ appMintAddress, keypair, url, dryRun, buildToolsPath }) => {
|
|
82
|
-
|
|
96
|
+
tryWithErrorMessage(async () => {
|
|
97
|
+
await checkForSelfUpdate();
|
|
83
98
|
const resolvedBuildToolsPath = resolveBuildToolsPath(buildToolsPath);
|
|
84
99
|
if (resolvedBuildToolsPath === undefined) {
|
|
85
|
-
|
|
86
|
-
createCommand.showHelpAfterError();
|
|
87
|
-
return;
|
|
100
|
+
throw new Error("Please specify an Android build tools directory in the .env file or via the command line argument.");
|
|
88
101
|
}
|
|
89
102
|
const config = await getConfigFile();
|
|
90
103
|
if (!hasAddressInConfig(config.app) && !appMintAddress) {
|
|
91
|
-
|
|
92
|
-
createCommand.showHelpAfterError();
|
|
93
|
-
return;
|
|
104
|
+
throw new Error("Either specify an app mint address in the config file or specify as a CLI argument to this command");
|
|
94
105
|
}
|
|
95
106
|
const signer = parseKeypair(keypair);
|
|
96
107
|
if (signer) {
|
|
@@ -101,11 +112,11 @@ async function main() {
|
|
|
101
112
|
url,
|
|
102
113
|
dryRun,
|
|
103
114
|
});
|
|
115
|
+
const displayUrl = `https://solscan.io/token/${result?.releaseAddress}${generateNetworkSuffix(url)}`;
|
|
116
|
+
const resultText = `Release NFT successfully minted:\n${displayUrl}`;
|
|
117
|
+
showMessage("Success", resultText);
|
|
104
118
|
}
|
|
105
|
-
}
|
|
106
|
-
catch (e) {
|
|
107
|
-
showUserErrorMessage(e?.message ?? "");
|
|
108
|
-
}
|
|
119
|
+
});
|
|
109
120
|
});
|
|
110
121
|
program
|
|
111
122
|
.command("validate")
|
|
@@ -113,19 +124,21 @@ async function main() {
|
|
|
113
124
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
114
125
|
.option("-b, --build-tools-path <build-tools-path>", "Path to Android build tools which contains AAPT2")
|
|
115
126
|
.action(async ({ keypair, buildToolsPath }) => {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
tryWithErrorMessage(async () => {
|
|
128
|
+
await checkForSelfUpdate();
|
|
129
|
+
const resolvedBuildToolsPath = resolveBuildToolsPath(buildToolsPath);
|
|
130
|
+
if (resolvedBuildToolsPath === undefined) {
|
|
131
|
+
throw new Error("Please specify an Android build tools directory in the .env file or via the command line argument.");
|
|
132
|
+
}
|
|
133
|
+
const signer = parseKeypair(keypair);
|
|
134
|
+
if (signer) {
|
|
135
|
+
await validateCommand({
|
|
136
|
+
signer,
|
|
137
|
+
buildToolsPath: resolvedBuildToolsPath,
|
|
138
|
+
});
|
|
139
|
+
//TODO: Add pretty formatting here, but will require more work than other sections
|
|
140
|
+
}
|
|
141
|
+
});
|
|
129
142
|
});
|
|
130
143
|
const publishCommand = program
|
|
131
144
|
.command("publish")
|
|
@@ -136,20 +149,21 @@ async function main() {
|
|
|
136
149
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
137
150
|
.requiredOption("--complies-with-solana-dapp-store-policies", "An attestation that the app complies with the Solana dApp Store policies")
|
|
138
151
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
139
|
-
.option("-
|
|
152
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config.yaml will be used.")
|
|
153
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config.yaml will be used.")
|
|
140
154
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
141
155
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
142
|
-
.action(async ({ releaseMintAddress, keypair, url, compliesWithSolanaDappStorePolicies, requestorIsAuthorized, dryRun, }) => {
|
|
143
|
-
|
|
156
|
+
.action(async ({ appMintAddress, releaseMintAddress, keypair, url, compliesWithSolanaDappStorePolicies, requestorIsAuthorized, dryRun, }) => {
|
|
157
|
+
tryWithErrorMessage(async () => {
|
|
158
|
+
await checkForSelfUpdate();
|
|
144
159
|
const config = await getConfigFile();
|
|
145
160
|
if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
|
|
146
|
-
|
|
147
|
-
publishCommand.showHelpAfterError();
|
|
148
|
-
return;
|
|
161
|
+
throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.");
|
|
149
162
|
}
|
|
150
163
|
const signer = parseKeypair(keypair);
|
|
151
164
|
if (signer) {
|
|
152
165
|
await publishSubmitCommand({
|
|
166
|
+
appMintAddress,
|
|
153
167
|
releaseMintAddress,
|
|
154
168
|
signer,
|
|
155
169
|
url,
|
|
@@ -157,11 +171,10 @@ async function main() {
|
|
|
157
171
|
compliesWithSolanaDappStorePolicies,
|
|
158
172
|
requestorIsAuthorized,
|
|
159
173
|
});
|
|
174
|
+
const resultText = "Successfully submitted to the Solana Mobile dApp publisher portal";
|
|
175
|
+
showMessage("Success", resultText);
|
|
160
176
|
}
|
|
161
|
-
}
|
|
162
|
-
catch (e) {
|
|
163
|
-
showUserErrorMessage(e?.message ?? "");
|
|
164
|
-
}
|
|
177
|
+
});
|
|
165
178
|
});
|
|
166
179
|
publishCommand
|
|
167
180
|
.command("update")
|
|
@@ -169,21 +182,22 @@ async function main() {
|
|
|
169
182
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
170
183
|
.requiredOption("--complies-with-solana-dapp-store-policies", "An attestation that the app complies with the Solana dApp Store policies")
|
|
171
184
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
172
|
-
.option("-
|
|
185
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config.yaml will be used.")
|
|
186
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config.yaml will be used.")
|
|
173
187
|
.option("-c, --critical", "Flag for a critical app update request")
|
|
174
188
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
175
189
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
176
|
-
.action(async ({ releaseMintAddress, keypair, url, compliesWithSolanaDappStorePolicies, requestorIsAuthorized, critical, dryRun, }) => {
|
|
177
|
-
|
|
190
|
+
.action(async ({ appMintAddress, releaseMintAddress, keypair, url, compliesWithSolanaDappStorePolicies, requestorIsAuthorized, critical, dryRun, }) => {
|
|
191
|
+
tryWithErrorMessage(async () => {
|
|
192
|
+
await checkForSelfUpdate();
|
|
178
193
|
const config = await getConfigFile();
|
|
179
194
|
if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
|
|
180
|
-
|
|
181
|
-
publishCommand.showHelpAfterError();
|
|
182
|
-
return;
|
|
195
|
+
throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.");
|
|
183
196
|
}
|
|
184
197
|
const signer = parseKeypair(keypair);
|
|
185
198
|
if (signer) {
|
|
186
199
|
await publishUpdateCommand({
|
|
200
|
+
appMintAddress,
|
|
187
201
|
releaseMintAddress,
|
|
188
202
|
signer,
|
|
189
203
|
url,
|
|
@@ -192,32 +206,32 @@ async function main() {
|
|
|
192
206
|
requestorIsAuthorized,
|
|
193
207
|
critical,
|
|
194
208
|
});
|
|
209
|
+
const resultText = "dApp successfully updated on the publisher portal";
|
|
210
|
+
showMessage("Success", resultText);
|
|
195
211
|
}
|
|
196
|
-
}
|
|
197
|
-
catch (e) {
|
|
198
|
-
showUserErrorMessage(e?.message ?? "");
|
|
199
|
-
}
|
|
212
|
+
});
|
|
200
213
|
});
|
|
201
214
|
publishCommand
|
|
202
215
|
.command("remove")
|
|
203
216
|
.description("Remove an existing app from the Solana Mobile dApp publisher portal")
|
|
204
217
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
205
218
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
206
|
-
.option("-
|
|
219
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config.yaml will be used.")
|
|
220
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config.yaml will be used.")
|
|
207
221
|
.option("-c, --critical", "Flag for a critical app removal request")
|
|
208
222
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
209
223
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
210
|
-
.action(async ({ releaseMintAddress, keypair, url, requestorIsAuthorized, critical, dryRun, }) => {
|
|
211
|
-
|
|
224
|
+
.action(async ({ appMintAddress, releaseMintAddress, keypair, url, requestorIsAuthorized, critical, dryRun, }) => {
|
|
225
|
+
tryWithErrorMessage(async () => {
|
|
226
|
+
await checkForSelfUpdate();
|
|
212
227
|
const config = await getConfigFile();
|
|
213
228
|
if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
|
|
214
|
-
|
|
215
|
-
publishCommand.showHelpAfterError();
|
|
216
|
-
return;
|
|
229
|
+
throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.");
|
|
217
230
|
}
|
|
218
231
|
const signer = parseKeypair(keypair);
|
|
219
232
|
if (signer) {
|
|
220
233
|
await publishRemoveCommand({
|
|
234
|
+
appMintAddress,
|
|
221
235
|
releaseMintAddress,
|
|
222
236
|
signer,
|
|
223
237
|
url,
|
|
@@ -225,31 +239,31 @@ async function main() {
|
|
|
225
239
|
requestorIsAuthorized,
|
|
226
240
|
critical,
|
|
227
241
|
});
|
|
242
|
+
const resultText = "dApp successfully removed from the publisher portal";
|
|
243
|
+
showMessage("Success", resultText);
|
|
228
244
|
}
|
|
229
|
-
}
|
|
230
|
-
catch (e) {
|
|
231
|
-
showUserErrorMessage(e?.message ?? "");
|
|
232
|
-
}
|
|
245
|
+
});
|
|
233
246
|
});
|
|
234
247
|
publishCommand
|
|
235
248
|
.command("support <request_details>")
|
|
236
249
|
.description("Submit a support request for an existing app on the Solana Mobile dApp publisher portal")
|
|
237
250
|
.requiredOption("-k, --keypair <path-to-keypair-file>", "Path to keypair file")
|
|
238
251
|
.requiredOption("--requestor-is-authorized", "An attestation that the party making this Solana dApp publisher portal request is authorized to do so")
|
|
239
|
-
.option("-
|
|
252
|
+
.option("-a, --app-mint-address <app-mint-address>", "The mint address of the app NFT. If not specified, the value from config.yaml will be used.")
|
|
253
|
+
.option("-r, --release-mint-address <release-mint-address>", "The mint address of the release NFT. If not specified, the value from config.yaml will be used.")
|
|
240
254
|
.option("-u, --url <url>", "RPC URL", "https://devnet.genesysgo.net")
|
|
241
255
|
.option("-d, --dry-run", "Flag for dry run. Doesn't submit the request to the publisher portal.")
|
|
242
|
-
.action(async (requestDetails, { releaseMintAddress, keypair, url, requestorIsAuthorized, dryRun }) => {
|
|
243
|
-
|
|
256
|
+
.action(async (requestDetails, { appMintAddress, releaseMintAddress, keypair, url, requestorIsAuthorized, dryRun }) => {
|
|
257
|
+
tryWithErrorMessage(async () => {
|
|
258
|
+
await checkForSelfUpdate();
|
|
244
259
|
const config = await getConfigFile();
|
|
245
260
|
if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
|
|
246
|
-
|
|
247
|
-
publishCommand.showHelpAfterError();
|
|
248
|
-
return;
|
|
261
|
+
throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.");
|
|
249
262
|
}
|
|
250
263
|
const signer = parseKeypair(keypair);
|
|
251
264
|
if (signer) {
|
|
252
265
|
await publishSupportCommand({
|
|
266
|
+
appMintAddress,
|
|
253
267
|
releaseMintAddress,
|
|
254
268
|
signer,
|
|
255
269
|
url,
|
|
@@ -257,11 +271,10 @@ async function main() {
|
|
|
257
271
|
requestorIsAuthorized,
|
|
258
272
|
requestDetails,
|
|
259
273
|
});
|
|
274
|
+
const resultText = "Support request sent successfully";
|
|
275
|
+
showMessage("Success", resultText);
|
|
260
276
|
}
|
|
261
|
-
}
|
|
262
|
-
catch (e) {
|
|
263
|
-
showUserErrorMessage(e?.message ?? "");
|
|
264
|
-
}
|
|
277
|
+
});
|
|
265
278
|
});
|
|
266
279
|
await program.parseAsync(process.argv);
|
|
267
280
|
}
|
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,EAAE,aAAa,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|