@solana-mobile/dapp-store-cli 0.2.0 → 0.4.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.
Files changed (44) hide show
  1. package/lib/esm/commands/create/app.js +7 -5
  2. package/lib/esm/commands/create/app.js.map +1 -1
  3. package/lib/esm/commands/create/publisher.js +7 -5
  4. package/lib/esm/commands/create/publisher.js.map +1 -1
  5. package/lib/esm/commands/create/release.js +7 -5
  6. package/lib/esm/commands/create/release.js.map +1 -1
  7. package/lib/esm/commands/publish/remove.js +2 -2
  8. package/lib/esm/commands/publish/remove.js.map +1 -1
  9. package/lib/esm/commands/publish/submit.js +2 -2
  10. package/lib/esm/commands/publish/submit.js.map +1 -1
  11. package/lib/esm/commands/publish/support.js +2 -2
  12. package/lib/esm/commands/publish/support.js.map +1 -1
  13. package/lib/esm/commands/publish/update.js +2 -2
  14. package/lib/esm/commands/publish/update.js.map +1 -1
  15. package/lib/esm/commands/validate.js +2 -2
  16. package/lib/esm/commands/validate.js.map +1 -1
  17. package/lib/esm/generated/config_obj.json +1 -1
  18. package/lib/esm/generated/config_schema.json +1 -1
  19. package/lib/esm/index.js +18 -8
  20. package/lib/esm/index.js.map +1 -1
  21. package/lib/esm/package.json +2 -2
  22. package/lib/esm/utils.js +55 -16
  23. package/lib/esm/utils.js.map +1 -1
  24. package/lib/types/commands/create/app.d.ts.map +1 -1
  25. package/lib/types/commands/create/publisher.d.ts.map +1 -1
  26. package/lib/types/commands/create/release.d.ts.map +1 -1
  27. package/lib/types/utils.d.ts +2 -2
  28. package/lib/types/utils.d.ts.map +1 -1
  29. package/package.json +2 -2
  30. package/src/commands/create/app.ts +7 -5
  31. package/src/commands/create/publisher.ts +7 -5
  32. package/src/commands/create/release.ts +7 -5
  33. package/src/commands/publish/remove.ts +2 -2
  34. package/src/commands/publish/submit.ts +2 -2
  35. package/src/commands/publish/support.ts +2 -2
  36. package/src/commands/publish/update.ts +2 -2
  37. package/src/commands/validate.ts +2 -2
  38. package/src/index.ts +25 -10
  39. package/src/prebuild_schema/publishing_source.yaml +7 -5
  40. package/src/prebuild_schema/schemagen.js +7 -0
  41. package/src/utils.ts +77 -23
  42. package/src/config/schema.json +0 -195
  43. package/src/generated/config_obj.json +0 -1
  44. package/src/generated/config_schema.json +0 -1
package/lib/esm/utils.js CHANGED
@@ -17,7 +17,7 @@ const runImgSize = util.promisify(imageSize);
17
17
  const runExec = util.promisify(exec);
18
18
  export class Constants {
19
19
  }
20
- Constants.CLI_VERSION = "0.2.0";
20
+ Constants.CLI_VERSION = "0.4.0";
21
21
  Constants.CONFIG_FILE_NAME = "config.yaml";
22
22
  export const debug = debugModule("CLI");
23
23
  export const checkForSelfUpdate = async () => {
@@ -46,7 +46,7 @@ export const parseKeypair = (pathToKeypairFile) => {
46
46
  return Keypair.fromSecretKey(Buffer.from(JSON.parse(keypairFile)));
47
47
  }
48
48
  catch (e) {
49
- console.error(`Something went wrong when attempting to retrieve the keypair at ${pathToKeypairFile}`);
49
+ showMessage("KeyPair Error", "Something went wrong when attempting to retrieve the keypair at " + pathToKeypairFile, "error");
50
50
  }
51
51
  };
52
52
  const AaptPrefixes = {
@@ -56,10 +56,9 @@ const AaptPrefixes = {
56
56
  verCodePrefix: "versionCode=",
57
57
  verNamePrefix: "versionName=",
58
58
  sdkPrefix: "sdkVersion:",
59
- permissionPrefix: "uses-permission: name=",
60
59
  localePrefix: "locales: ",
61
60
  };
62
- export const getConfigFile = async (buildToolsDir = null) => {
61
+ export const getConfigWithChecks = async (buildToolsDir = null) => {
63
62
  const configFilePath = `${process.cwd()}/${Constants.CONFIG_FILE_NAME}`;
64
63
  const config = await getConfig(configFilePath);
65
64
  if (buildToolsDir && fs.lstatSync(buildToolsDir).isDirectory()) {
@@ -99,6 +98,14 @@ export const getConfigFile = async (buildToolsDir = null) => {
99
98
  throw new Error(`Invalid media path or file type: ${item.uri}. Please ensure the file is a jpeg, png, or webp file.`);
100
99
  }
101
100
  });
101
+ validateLocalizableResources(config);
102
+ const googlePkg = config.solana_mobile_dapp_publisher_portal.google_store_package;
103
+ if (googlePkg?.length) {
104
+ const pkgCompare = new RegExp("[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)+").exec(googlePkg);
105
+ if (!pkgCompare?.length) {
106
+ throw new Error("Please provide a valid Google store package name in the Publisher Portal section of your configuration file.");
107
+ }
108
+ }
102
109
  return config;
103
110
  };
104
111
  const checkIconCompatibility = async (path, typeString) => {
@@ -116,6 +123,27 @@ const checkImageExtension = (uri) => {
116
123
  fileExt == ".jpeg" ||
117
124
  fileExt == ".webp");
118
125
  };
126
+ /**
127
+ * We need to pre-check some things in the localized resources before we move forward
128
+ */
129
+ const validateLocalizableResources = (config) => {
130
+ if (!config.release.catalog["en-US"]) {
131
+ throw new Error("Please ensure you have the en-US locale strings in your configuration file.");
132
+ }
133
+ const baselineSize = Object.keys(config.release.catalog["en-US"]).length;
134
+ Object.keys(config.release.catalog).forEach((locale) => {
135
+ const size = Object.keys(config.release.catalog[locale]).length;
136
+ if (size != baselineSize) {
137
+ throw new Error("Please ensure you have included all localized strings for all locales in your configuration file.");
138
+ }
139
+ });
140
+ const descsWrongLength = Object.values(config.release.catalog)
141
+ .map((x) => x.short_description)
142
+ .filter((desc) => !desc?.length || desc.length > 50);
143
+ if (descsWrongLength.length > 0) {
144
+ throw new Error("Please ensure all translations of short_description are between 0 and 50 characters");
145
+ }
146
+ };
119
147
  export const isDevnet = (rpcUrl) => {
120
148
  return rpcUrl.indexOf("devnet") != -1;
121
149
  };
@@ -140,16 +168,25 @@ export const generateNetworkSuffix = (rpcUrl) => {
140
168
  }
141
169
  return suffix;
142
170
  };
143
- export const showMessage = (titleMessage = "", contentMessage = "", isError = false) => {
144
- console.log(boxen(contentMessage, {
171
+ export const showMessage = (titleMessage = "", contentMessage = "", type = "standard") => {
172
+ let color = "cyan";
173
+ if (type == "error") {
174
+ color = "redBright";
175
+ }
176
+ else if (type == "warning") {
177
+ color = "yellow";
178
+ }
179
+ const msg = boxen(contentMessage, {
145
180
  title: titleMessage,
146
181
  padding: 1,
147
182
  margin: 1,
148
183
  borderStyle: 'single',
149
- borderColor: isError ? "redBright" : "cyan",
184
+ borderColor: color,
150
185
  textAlignment: "left",
151
- titleAlignment: "center"
152
- }));
186
+ titleAlignment: "center",
187
+ });
188
+ console.log(msg);
189
+ return msg;
153
190
  };
154
191
  const checkIconDimensions = async (iconPath) => {
155
192
  const size = await runImgSize(iconPath);
@@ -161,28 +198,30 @@ const getAndroidDetails = async (aaptDir, apkPath) => {
161
198
  const versionCode = new RegExp(AaptPrefixes.verCodePrefix + AaptPrefixes.quoteRegex).exec(stdout);
162
199
  const versionName = new RegExp(AaptPrefixes.verNamePrefix + AaptPrefixes.quoteRegex).exec(stdout);
163
200
  const minSdk = new RegExp(AaptPrefixes.sdkPrefix + AaptPrefixes.quoteRegex).exec(stdout);
164
- const permissions = new RegExp(AaptPrefixes.permissionPrefix + AaptPrefixes.quoteNonLazyRegex).exec(stdout);
201
+ const permissions = [...stdout.matchAll(/uses-permission: name='(.*)'/g)];
165
202
  const locales = new RegExp(AaptPrefixes.localePrefix + AaptPrefixes.quoteNonLazyRegex).exec(stdout);
166
- let permissionArray = Array.from(permissions?.values() ?? []);
167
- if (permissionArray.length >= 2) {
168
- permissionArray = permissionArray.slice(1);
169
- }
170
203
  let localeArray = Array.from(locales?.values() ?? []);
171
204
  if (localeArray.length == 2) {
172
205
  const localesSrc = localeArray[1];
173
206
  localeArray = ["en-US"].concat(localesSrc.split("' '").slice(1));
174
207
  }
208
+ if (localeArray.length >= 60) {
209
+ showMessage("The bundle apk claims supports for following locales", "Claim for supported locales::\n" +
210
+ localeArray +
211
+ "\nIf this release does not support all these locales the release may be rejected" +
212
+ "\nSee details at https://developer.android.com/guide/topics/resources/multilingual-support#design for configuring the supported locales", "warning");
213
+ }
175
214
  return {
176
215
  android_package: appPackage?.[1] ?? "",
177
216
  min_sdk: parseInt(minSdk?.[1] ?? "0", 10),
178
217
  version_code: parseInt(versionCode?.[1] ?? "0", 10),
179
218
  version: versionName?.[1] ?? "0",
180
- permissions: permissionArray,
219
+ permissions: permissions.flatMap(permission => permission[1]),
181
220
  locales: localeArray,
182
221
  };
183
222
  };
184
223
  export const saveToConfig = async ({ publisher, app, release, }) => {
185
- const currentConfig = await getConfigFile();
224
+ const currentConfig = await getConfigWithChecks();
186
225
  delete currentConfig.publisher.icon;
187
226
  delete currentConfig.app.icon;
188
227
  const newConfig = {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../src/commands/create/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAGR,MAAM,iBAAiB,CAAC;AAgDzB,KAAK,qBAAqB,GAAG;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,gBAAgB,mDAK1B,qBAAqB;;EAqBvB,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../src/commands/create/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAGR,MAAM,iBAAiB,CAAC;AAkDzB,KAAK,qBAAqB,GAAG;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,gBAAgB,mDAK1B,qBAAqB;;EAqBvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../../src/commands/create/publisher.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAER,MAAM,iBAAiB,CAAC;AA6CzB,eAAO,MAAM,sBAAsB;YAKzB,OAAO;SACV,MAAM;YACH,OAAO;;;EAmBhB,CAAC"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../../src/commands/create/publisher.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAER,MAAM,iBAAiB,CAAC;AA+CzB,eAAO,MAAM,sBAAsB;YAKzB,OAAO;SACV,MAAM;YACH,OAAO;;;EAmBhB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../../src/commands/create/release.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,OAAO,EAGR,MAAM,iBAAiB,CAAC;AASzB,KAAK,yBAAyB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAgDF,eAAO,MAAM,oBAAoB,6DAM9B,yBAAyB;;cAuB3B,CAAC"}
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../../src/commands/create/release.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,OAAO,EAGR,MAAM,iBAAiB,CAAC;AASzB,KAAK,yBAAyB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAkDF,eAAO,MAAM,oBAAoB,6DAM9B,yBAAyB;;cAuB3B,CAAC"}
@@ -12,12 +12,12 @@ export declare const debug: debugModule.Debugger;
12
12
  export declare const checkForSelfUpdate: () => Promise<void>;
13
13
  export declare const checkMintedStatus: (conn: Connection, pubAddr: string, appAddr: string, releaseAddr: string) => Promise<void>;
14
14
  export declare const parseKeypair: (pathToKeypairFile: string) => Keypair | undefined;
15
- export declare const getConfigFile: (buildToolsDir?: string | null) => Promise<CLIConfig>;
15
+ export declare const getConfigWithChecks: (buildToolsDir?: string | null) => Promise<CLIConfig>;
16
16
  export declare const isDevnet: (rpcUrl: string) => boolean;
17
17
  export declare const isTestnet: (rpcUrl: string) => boolean;
18
18
  export declare const checkSubmissionNetwork: (rpcUrl: string) => void;
19
19
  export declare const generateNetworkSuffix: (rpcUrl: string) => string;
20
- export declare const showMessage: (titleMessage?: string, contentMessage?: string, isError?: boolean) => void;
20
+ export declare const showMessage: (titleMessage?: string, contentMessage?: string, type?: "standard" | "error" | "warning") => string;
21
21
  type SaveToConfigArgs = {
22
22
  publisher?: Pick<Publisher, "address">;
23
23
  app?: Pick<App, "address">;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AAC1G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAa,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,WAAW,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAwC,QAAQ,EAAkB,MAAM,yBAAyB,CAAC;AAYzG,qBAAa,SAAS;IACpB,MAAM,CAAC,WAAW,SAAW;IAC7B,MAAM,CAAC,gBAAgB,SAAiB;CACzC;AAED,eAAO,MAAM,KAAK,sBAAqB,CAAC;AAExC,eAAO,MAAM,kBAAkB,qBAU9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,SAAgB,UAAU,WAAW,MAAM,WAAW,MAAM,eAAe,MAAM,kBAW9G,CAAC;AAEF,eAAO,MAAM,YAAY,sBAAuB,MAAM,wBASrD,CAAC;AAaF,eAAO,MAAM,aAAa,mBACT,MAAM,GAAG,IAAI,KAC3B,QAAQ,SAAS,CAkEnB,CAAC;AAsBF,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,OAEzC,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,OAE1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WAAY,MAAM,SAIpD,CAAC;AAEF,eAAO,MAAM,qBAAqB,WAAY,MAAM,KAAG,MAYtD,CAAC;AAEF,eAAO,MAAM,WAAW,6EAcvB,CAAC;AAsDF,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,YAAY,iCAItB,gBAAgB,kBAyBlB,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAClB,UAAU,WACb,OAAO,aAoBjB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAuB,MAAM,4CAA4C,CAAC;AAC/H,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAa,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,WAAW,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAwC,QAAQ,EAAkB,MAAM,yBAAyB,CAAC;AAYzG,qBAAa,SAAS;IACpB,MAAM,CAAC,WAAW,SAAW;IAC7B,MAAM,CAAC,gBAAgB,SAAiB;CACzC;AAED,eAAO,MAAM,KAAK,sBAAqB,CAAC;AAExC,eAAO,MAAM,kBAAkB,qBAU9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,SAAgB,UAAU,WAAW,MAAM,WAAW,MAAM,eAAe,MAAM,kBAW9G,CAAC;AAEF,eAAO,MAAM,YAAY,sBAAuB,MAAM,wBAYrD,CAAC;AAYF,eAAO,MAAO,mBAAmB,mBAChB,MAAM,GAAG,IAAI,KAC3B,QAAQ,SAAS,CA6EnB,CAAC;AAiDF,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,OAEzC,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,OAE1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WAAY,MAAM,SAIpD,CAAC;AAEF,eAAO,MAAM,qBAAqB,WAAY,MAAM,KAAG,MAYtD,CAAC;AAEF,eAAO,MAAM,WAAW,0DAGhB,UAAU,GAAG,OAAO,GAAG,SAAS,KACrC,MAoBF,CAAC;AA0DF,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,YAAY,iCAItB,gBAAgB,kBAyBlB,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAClB,UAAU,WACb,OAAO,aAoBjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solana-mobile/dapp-store-cli",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -36,7 +36,7 @@
36
36
  "shx": "^0.3.4"
37
37
  },
38
38
  "dependencies": {
39
- "@solana-mobile/dapp-store-publishing-tools": "0.2.0",
39
+ "@solana-mobile/dapp-store-publishing-tools": "0.4.0",
40
40
  "@solana/web3.js": "1.68.0",
41
41
  "@types/semver": "^7.3.13",
42
42
  "ajv": "^8.11.0",
@@ -8,7 +8,7 @@ import {
8
8
  } from "@solana/web3.js";
9
9
 
10
10
  import {
11
- getConfigFile,
11
+ getConfigWithChecks,
12
12
  getMetaplexInstance,
13
13
  saveToConfig,
14
14
  } from "../../utils.js";
@@ -38,15 +38,17 @@ const createAppNft = async (
38
38
  { metaplex, publisher }
39
39
  );
40
40
 
41
- const blockhash = await connection.getLatestBlockhash();
42
- const tx = txBuilder.toTransaction(blockhash);
41
+ const blockhash = await connection.getLatestBlockhashAndContext();
42
+ const tx = txBuilder.toTransaction(blockhash.value);
43
43
  tx.sign(mintAddress, publisher);
44
44
 
45
45
  if (!dryRun) {
46
46
  const txSig = await sendAndConfirmTransaction(connection, tx, [
47
47
  publisher,
48
48
  mintAddress,
49
- ]);
49
+ ], {
50
+ minContextSlot: blockhash.context.slot
51
+ });
50
52
  console.info({ txSig, mintAddress: mintAddress.publicKey.toBase58() });
51
53
  }
52
54
 
@@ -69,7 +71,7 @@ export const createAppCommand = async ({
69
71
  const connection = new Connection(url);
70
72
 
71
73
  const { app: appDetails, publisher: publisherDetails } =
72
- await getConfigFile();
74
+ await getConfigWithChecks();
73
75
 
74
76
  const { appAddress } = await createAppNft(
75
77
  {
@@ -7,7 +7,7 @@ import {
7
7
  } from "@solana/web3.js";
8
8
 
9
9
  import {
10
- getConfigFile,
10
+ getConfigWithChecks,
11
11
  getMetaplexInstance,
12
12
  saveToConfig,
13
13
  } from "../../utils.js";
@@ -34,15 +34,17 @@ const createPublisherNft = async (
34
34
  { metaplex, publisher }
35
35
  );
36
36
 
37
- const blockhash = await connection.getLatestBlockhash();
38
- const tx = txBuilder.toTransaction(blockhash);
37
+ const blockhash = await connection.getLatestBlockhashAndContext();
38
+ const tx = txBuilder.toTransaction(blockhash.value);
39
39
  tx.sign(mintAddress, publisher);
40
40
 
41
41
  if (!dryRun) {
42
42
  const txSig = await sendAndConfirmTransaction(connection, tx, [
43
43
  publisher,
44
44
  mintAddress,
45
- ]);
45
+ ], {
46
+ minContextSlot: blockhash.context.slot
47
+ });
46
48
  console.info({ txSig, mintAddress: mintAddress.publicKey.toBase58() });
47
49
  }
48
50
 
@@ -60,7 +62,7 @@ export const createPublisherCommand = async ({
60
62
  }) => {
61
63
  const connection = new Connection(url);
62
64
 
63
- const { publisher: publisherDetails } = await getConfigFile();
65
+ const { publisher: publisherDetails } = await getConfigWithChecks();
64
66
 
65
67
  const { publisherAddress } = await createPublisherNft(
66
68
  {
@@ -13,7 +13,7 @@ import {
13
13
  import { CachedStorageDriver } from "../../upload/CachedStorageDriver.js";
14
14
 
15
15
  import {
16
- getConfigFile,
16
+ getConfigWithChecks,
17
17
  getMetaplexInstance,
18
18
  saveToConfig,
19
19
  } from "../../utils.js";
@@ -56,14 +56,16 @@ const createReleaseNft = async ({
56
56
  { metaplex, publisher }
57
57
  );
58
58
 
59
- const blockhash = await connection.getLatestBlockhash();
60
- const tx = txBuilder.toTransaction(blockhash);
59
+ const blockhash = await connection.getLatestBlockhashAndContext();
60
+ const tx = txBuilder.toTransaction(blockhash.value);
61
61
  tx.sign(releaseMintAddress, publisher);
62
62
 
63
63
  const txSig = await sendAndConfirmTransaction(connection, tx, [
64
64
  publisher,
65
65
  releaseMintAddress,
66
- ]);
66
+ ], {
67
+ minContextSlot: blockhash.context.slot
68
+ });
67
69
  console.info({
68
70
  txSig,
69
71
  releaseMintAddress: releaseMintAddress.publicKey.toBase58(),
@@ -81,7 +83,7 @@ export const createReleaseCommand = async ({
81
83
  }: CreateReleaseCommandInput) => {
82
84
  const connection = new Connection(url);
83
85
 
84
- const { release, app, publisher } = await getConfigFile(buildToolsPath);
86
+ const { release, app, publisher } = await getConfigWithChecks(buildToolsPath);
85
87
 
86
88
  if (!dryRun) {
87
89
  const { releaseAddress } = await createReleaseNft({
@@ -1,7 +1,7 @@
1
1
  import { Connection, Keypair } from "@solana/web3.js";
2
2
  import type { SignWithPublisherKeypair } from "@solana-mobile/dapp-store-publishing-tools";
3
3
  import { publishRemove } from "@solana-mobile/dapp-store-publishing-tools";
4
- import { checkMintedStatus, getConfigFile } from "../../utils.js";
4
+ import { checkMintedStatus, getConfigWithChecks } from "../../utils.js";
5
5
  import nacl from "tweetnacl";
6
6
 
7
7
  type PublishRemoveCommandInput = {
@@ -35,7 +35,7 @@ export const publishRemoveCommand = async ({
35
35
  publisher: publisherDetails,
36
36
  app: appDetails,
37
37
  release: releaseDetails,
38
- } = await getConfigFile();
38
+ } = await getConfigWithChecks();
39
39
 
40
40
  const sign = ((buf: Buffer) =>
41
41
  nacl.sign(buf, signer.secretKey)) as SignWithPublisherKeypair;
@@ -2,7 +2,7 @@ import { AccountInfo, Connection, Keypair, PublicKey } from "@solana/web3.js";
2
2
  import type { SignWithPublisherKeypair } from "@solana-mobile/dapp-store-publishing-tools";
3
3
  import { publishSubmit } from "@solana-mobile/dapp-store-publishing-tools";
4
4
  import nacl from "tweetnacl";
5
- import { checkMintedStatus, getConfigFile } from "../../utils.js";
5
+ import { checkMintedStatus, getConfigWithChecks } from "../../utils.js";
6
6
  import { Buffer } from "buffer";
7
7
 
8
8
  type PublishSubmitCommandInput = {
@@ -42,7 +42,7 @@ export const publishSubmitCommand = async ({
42
42
  app: appDetails,
43
43
  release: releaseDetails,
44
44
  solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails,
45
- } = await getConfigFile();
45
+ } = await getConfigWithChecks();
46
46
 
47
47
  const sign = ((buf: Buffer) =>
48
48
  nacl.sign(buf, signer.secretKey)) as SignWithPublisherKeypair;
@@ -1,7 +1,7 @@
1
1
  import { Connection, Keypair } from "@solana/web3.js";
2
2
  import type { SignWithPublisherKeypair } from "@solana-mobile/dapp-store-publishing-tools";
3
3
  import { publishSupport } from "@solana-mobile/dapp-store-publishing-tools";
4
- import { checkMintedStatus, getConfigFile } from "../../utils.js";
4
+ import { checkMintedStatus, getConfigWithChecks } from "../../utils.js";
5
5
  import nacl from "tweetnacl";
6
6
 
7
7
  type PublishSupportCommandInput = {
@@ -35,7 +35,7 @@ export const publishSupportCommand = async ({
35
35
  publisher: publisherDetails,
36
36
  app: appDetails,
37
37
  release: releaseDetails,
38
- } = await getConfigFile();
38
+ } = await getConfigWithChecks();
39
39
 
40
40
  const sign = ((buf: Buffer) =>
41
41
  nacl.sign(buf, signer.secretKey)) as SignWithPublisherKeypair;
@@ -1,7 +1,7 @@
1
1
  import { Connection, Keypair } from "@solana/web3.js";
2
2
  import type { SignWithPublisherKeypair } from "@solana-mobile/dapp-store-publishing-tools";
3
3
  import { publishUpdate } from "@solana-mobile/dapp-store-publishing-tools";
4
- import { checkMintedStatus, getConfigFile } from "../../utils.js";
4
+ import { checkMintedStatus, getConfigWithChecks } from "../../utils.js";
5
5
  import nacl from "tweetnacl";
6
6
 
7
7
  type PublishUpdateCommandInput = {
@@ -43,7 +43,7 @@ export const publishUpdateCommand = async ({
43
43
  app: appDetails,
44
44
  release: releaseDetails,
45
45
  solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails,
46
- } = await getConfigFile();
46
+ } = await getConfigWithChecks();
47
47
 
48
48
  const sign = ((buf: Buffer) =>
49
49
  nacl.sign(buf, signer.secretKey)) as SignWithPublisherKeypair;
@@ -7,7 +7,7 @@ import {
7
7
  validateRelease,
8
8
  metaplexFileReplacer,
9
9
  } from "@solana-mobile/dapp-store-publishing-tools";
10
- import { debug, getConfigFile } from "../utils.js";
10
+ import { debug, getConfigWithChecks } from "../utils.js";
11
11
 
12
12
  import type { Keypair } from "@solana/web3.js";
13
13
  import type { MetaplexFile } from "@metaplex-foundation/js";
@@ -24,7 +24,7 @@ export const validateCommand = async ({
24
24
  publisher: publisherDetails,
25
25
  app: appDetails,
26
26
  release: releaseDetails,
27
- } = await getConfigFile(buildToolsPath);
27
+ } = await getConfigWithChecks(buildToolsPath);
28
28
 
29
29
  debug({ publisherDetails, appDetails, releaseDetails });
30
30
 
package/src/index.ts CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  checkSubmissionNetwork,
13
13
  Constants,
14
14
  generateNetworkSuffix,
15
- getConfigFile,
15
+ getConfigWithChecks,
16
16
  parseKeypair,
17
17
  showMessage
18
18
  } from "./utils.js";
@@ -45,13 +45,24 @@ function resolveBuildToolsPath(buildToolsPath: string | undefined) {
45
45
  return;
46
46
  }
47
47
 
48
+ /**
49
+ * This method should be updated with each new release of the CLI, and just do nothing when there isn't anything to report
50
+ */
51
+ function latestReleaseMessage() {
52
+ showMessage(
53
+ `Publishing Tools Version ${ Constants.CLI_VERSION }`,
54
+ "- Bug fixes, including enforcing \`short_description\` maximum length of 50 characters.",
55
+ "warning"
56
+ )
57
+ }
58
+
48
59
  async function tryWithErrorMessage(block: () => Promise<any>) {
49
60
  try {
50
61
  await block()
51
62
  } catch (e) {
52
63
  const errorMsg = (e as Error | null)?.message ?? "";
53
64
 
54
- showMessage("Error", errorMsg, true);
65
+ showMessage("Error", errorMsg, "error");
55
66
  }
56
67
  }
57
68
 
@@ -59,7 +70,7 @@ async function main() {
59
70
  program
60
71
  .name("dapp-store")
61
72
  .version(Constants.CLI_VERSION)
62
- .description("CLI to assist with publishing to the Saga Dapp Store");
73
+ .description("CLI to assist with publishing to the Saga Dapp Store")
63
74
 
64
75
  const initCommand = program
65
76
  .command("init")
@@ -74,7 +85,7 @@ async function main() {
74
85
 
75
86
  const createCommand = program
76
87
  .command("create")
77
- .description("Create a `publisher`, `app`, or `release`");
88
+ .description("Create a `publisher`, `app`, or `release`")
78
89
 
79
90
  createCommand
80
91
  .command("publisher")
@@ -87,6 +98,7 @@ async function main() {
87
98
  .option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
88
99
  .action(async ({ keypair, url, dryRun }) => {
89
100
  tryWithErrorMessage(async () => {
101
+ latestReleaseMessage();
90
102
  await checkForSelfUpdate();
91
103
 
92
104
  const signer = parseKeypair(keypair);
@@ -116,9 +128,10 @@ async function main() {
116
128
  .option("-d, --dry-run", "Flag for dry run. Doesn't mint an NFT")
117
129
  .action(async ({ publisherMintAddress, keypair, url, dryRun }) => {
118
130
  tryWithErrorMessage(async () => {
131
+ latestReleaseMessage();
119
132
  await checkForSelfUpdate();
120
133
 
121
- const config = await getConfigFile();
134
+ const config = await getConfigWithChecks();
122
135
 
123
136
  if (!hasAddressInConfig(config.publisher) && !publisherMintAddress) {
124
137
  throw new Error("Either specify a publisher mint address in the config file or specify as a CLI argument to this command.")
@@ -160,6 +173,7 @@ async function main() {
160
173
  )
161
174
  .action(async ({ appMintAddress, keypair, url, dryRun, buildToolsPath }) => {
162
175
  tryWithErrorMessage(async () => {
176
+ latestReleaseMessage();
163
177
  await checkForSelfUpdate();
164
178
 
165
179
  const resolvedBuildToolsPath = resolveBuildToolsPath(buildToolsPath);
@@ -167,7 +181,7 @@ async function main() {
167
181
  throw new Error("Please specify an Android build tools directory in the .env file or via the command line argument.")
168
182
  }
169
183
 
170
- const config = await getConfigFile();
184
+ const config = await getConfigWithChecks();
171
185
  if (!hasAddressInConfig(config.app) && !appMintAddress) {
172
186
  throw new Error("Either specify an app mint address in the config file or specify as a CLI argument to this command")
173
187
  }
@@ -204,6 +218,7 @@ async function main() {
204
218
  )
205
219
  .action(async ({ keypair, buildToolsPath }) => {
206
220
  tryWithErrorMessage(async () => {
221
+ latestReleaseMessage();
207
222
  await checkForSelfUpdate();
208
223
 
209
224
  const resolvedBuildToolsPath = resolveBuildToolsPath(buildToolsPath);
@@ -271,7 +286,7 @@ async function main() {
271
286
  await checkForSelfUpdate();
272
287
  await checkSubmissionNetwork(url);
273
288
 
274
- const config = await getConfigFile();
289
+ const config = await getConfigWithChecks();
275
290
 
276
291
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
277
292
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -342,7 +357,7 @@ async function main() {
342
357
  await checkForSelfUpdate();
343
358
  await checkSubmissionNetwork(url);
344
359
 
345
- const config = await getConfigFile();
360
+ const config = await getConfigWithChecks();
346
361
 
347
362
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
348
363
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -409,7 +424,7 @@ async function main() {
409
424
  await checkForSelfUpdate();
410
425
  await checkSubmissionNetwork(url);
411
426
 
412
- const config = await getConfigFile();
427
+ const config = await getConfigWithChecks();
413
428
 
414
429
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
415
430
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -469,7 +484,7 @@ async function main() {
469
484
  await checkForSelfUpdate();
470
485
  await checkSubmissionNetwork(url);
471
486
 
472
- const config = await getConfigFile();
487
+ const config = await getConfigWithChecks();
473
488
 
474
489
  if (!hasAddressInConfig(config.release) && !releaseMintAddress) {
475
490
  throw new Error("Either specify a release mint address in the config file or specify as a CLI argument to this command.")
@@ -30,15 +30,17 @@ release:
30
30
  uri: <<RELATIVE_PATH_TO_APK>>
31
31
  catalog:
32
32
  en-US:
33
- name: |
33
+ name: >-
34
34
  <<APP_NAME>>
35
- long_description: |
35
+ short_description: >-
36
+ <<SHORT_APP_DESCRIPTION>>
37
+ long_description: >-
36
38
  <<LONG_APP_DESCRIPTION>>
37
- new_in_version: |
39
+ new_in_version: >-
38
40
  <<WHATS_NEW_IN_THIS_VERSION>>
39
- saga_features: |
41
+ saga_features: >-
40
42
  <<ANY_FEATURES_ONLY_AVAILBLE_WHEN_RUNNING_ON_SAGA>>
41
43
  solana_mobile_dapp_publisher_portal:
42
44
  google_store_package: <<ANDROID_PACKAGE_NAME_OF_GOOGLE_PLAY_STORE_VERSION_IF_DIFFERENT>>
43
- testing_instructions: >
45
+ testing_instructions: >-
44
46
  <<TESTING_INSTRUCTIONS>>
@@ -8,6 +8,13 @@ try {
8
8
  fs.writeFileSync('./src/generated/config_obj.json', Buffer.from(JSON.stringify(convertedYaml)), 'utf-8');
9
9
 
10
10
  const schema = generateSchema.json('result', convertedYaml);
11
+ // CLI 0.3.0: Adding requirement for `short_description` so validation will catch
12
+ schema["properties"]
13
+ ["release"]
14
+ ["properties"]
15
+ ["catalog"]
16
+ ["properties"]
17
+ ["en-US"].required = ["short_description"];
11
18
 
12
19
  // Generator adds some keys/values we don't need & mess up validation
13
20
  delete schema.$schema;