@solana-mobile/dapp-store-cli 0.4.2 → 0.5.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 (112) hide show
  1. package/bin/dapp-store.js +1 -1
  2. package/lib/CliSetup.js +730 -0
  3. package/lib/CliUtils.js +309 -0
  4. package/lib/__tests__/CliSetupTest.js +140 -0
  5. package/lib/commands/ValidateCommand.js +201 -0
  6. package/lib/commands/create/CreateCliApp.js +240 -0
  7. package/lib/commands/create/CreateCliPublisher.js +238 -0
  8. package/lib/commands/create/CreateCliRelease.js +270 -0
  9. package/lib/commands/create/index.js +41 -0
  10. package/lib/{esm/commands → commands}/index.js +0 -1
  11. package/lib/commands/publish/PublishCliRemove.js +186 -0
  12. package/lib/commands/publish/PublishCliSubmit.js +192 -0
  13. package/lib/commands/publish/PublishCliSupport.js +186 -0
  14. package/lib/commands/publish/PublishCliUpdate.js +193 -0
  15. package/lib/commands/publish/index.js +22 -0
  16. package/lib/{esm/commands → commands}/scaffolding/ScaffoldInit.js +7 -6
  17. package/lib/{esm/commands → commands}/scaffolding/index.js +0 -1
  18. package/lib/config/EnvVariables.js +59 -0
  19. package/lib/config/PublishDetails.js +591 -0
  20. package/lib/config/S3StorageManager.js +93 -0
  21. package/lib/config/index.js +2 -0
  22. package/lib/generated/config_obj.json +1 -0
  23. package/lib/generated/config_schema.json +1 -0
  24. package/lib/index.js +148 -0
  25. package/lib/package.json +74 -0
  26. package/lib/prebuild_schema/publishing_source.yaml +46 -0
  27. package/lib/prebuild_schema/schemagen.js +20 -0
  28. package/lib/upload/CachedStorageDriver.js +307 -0
  29. package/lib/{esm/upload → upload}/index.js +0 -1
  30. package/package.json +21 -7
  31. package/src/CliSetup.ts +511 -0
  32. package/src/CliUtils.ts +64 -19
  33. package/src/__tests__/CliSetupTest.ts +212 -0
  34. package/src/commands/create/CreateCliApp.ts +6 -1
  35. package/src/commands/create/CreateCliPublisher.ts +6 -1
  36. package/src/commands/create/CreateCliRelease.ts +6 -1
  37. package/src/config/EnvVariables.ts +39 -0
  38. package/src/config/PublishDetails.ts +16 -2
  39. package/src/config/S3StorageManager.ts +47 -0
  40. package/src/config/index.ts +2 -0
  41. package/src/index.ts +3 -510
  42. package/lib/esm/CliUtils.js +0 -108
  43. package/lib/esm/CliUtils.js.map +0 -1
  44. package/lib/esm/commands/ValidateCommand.js +0 -42
  45. package/lib/esm/commands/ValidateCommand.js.map +0 -1
  46. package/lib/esm/commands/create/CreateCliApp.js +0 -41
  47. package/lib/esm/commands/create/CreateCliApp.js.map +0 -1
  48. package/lib/esm/commands/create/CreateCliPublisher.js +0 -36
  49. package/lib/esm/commands/create/CreateCliPublisher.js.map +0 -1
  50. package/lib/esm/commands/create/CreateCliRelease.js +0 -50
  51. package/lib/esm/commands/create/CreateCliRelease.js.map +0 -1
  52. package/lib/esm/commands/create/index.js +0 -44
  53. package/lib/esm/commands/create/index.js.map +0 -1
  54. package/lib/esm/commands/index.js.map +0 -1
  55. package/lib/esm/commands/publish/PublishCliRemove.js +0 -26
  56. package/lib/esm/commands/publish/PublishCliRemove.js.map +0 -1
  57. package/lib/esm/commands/publish/PublishCliSubmit.js +0 -31
  58. package/lib/esm/commands/publish/PublishCliSubmit.js.map +0 -1
  59. package/lib/esm/commands/publish/PublishCliSupport.js +0 -26
  60. package/lib/esm/commands/publish/PublishCliSupport.js.map +0 -1
  61. package/lib/esm/commands/publish/PublishCliUpdate.js +0 -32
  62. package/lib/esm/commands/publish/PublishCliUpdate.js.map +0 -1
  63. package/lib/esm/commands/publish/index.js +0 -25
  64. package/lib/esm/commands/publish/index.js.map +0 -1
  65. package/lib/esm/commands/scaffolding/ScaffoldInit.js.map +0 -1
  66. package/lib/esm/commands/scaffolding/index.js.map +0 -1
  67. package/lib/esm/config/PublishDetails.js +0 -177
  68. package/lib/esm/config/PublishDetails.js.map +0 -1
  69. package/lib/esm/generated/config_obj.json +0 -1
  70. package/lib/esm/generated/config_schema.json +0 -1
  71. package/lib/esm/index.js +0 -307
  72. package/lib/esm/index.js.map +0 -1
  73. package/lib/esm/package.json +0 -60
  74. package/lib/esm/upload/CachedStorageDriver.js +0 -66
  75. package/lib/esm/upload/CachedStorageDriver.js.map +0 -1
  76. package/lib/esm/upload/index.js.map +0 -1
  77. package/lib/types/CliUtils.d.ts +0 -21
  78. package/lib/types/CliUtils.d.ts.map +0 -1
  79. package/lib/types/commands/ValidateCommand.d.ts +0 -6
  80. package/lib/types/commands/ValidateCommand.d.ts.map +0 -1
  81. package/lib/types/commands/create/CreateCliApp.d.ts +0 -12
  82. package/lib/types/commands/create/CreateCliApp.d.ts.map +0 -1
  83. package/lib/types/commands/create/CreateCliPublisher.d.ts +0 -9
  84. package/lib/types/commands/create/CreateCliPublisher.d.ts.map +0 -1
  85. package/lib/types/commands/create/CreateCliRelease.d.ts +0 -13
  86. package/lib/types/commands/create/CreateCliRelease.d.ts.map +0 -1
  87. package/lib/types/commands/create/index.d.ts +0 -4
  88. package/lib/types/commands/create/index.d.ts.map +0 -1
  89. package/lib/types/commands/index.d.ts +0 -4
  90. package/lib/types/commands/index.d.ts.map +0 -1
  91. package/lib/types/commands/publish/PublishCliRemove.d.ts +0 -13
  92. package/lib/types/commands/publish/PublishCliRemove.d.ts.map +0 -1
  93. package/lib/types/commands/publish/PublishCliSubmit.d.ts +0 -13
  94. package/lib/types/commands/publish/PublishCliSubmit.d.ts.map +0 -1
  95. package/lib/types/commands/publish/PublishCliSupport.d.ts +0 -13
  96. package/lib/types/commands/publish/PublishCliSupport.d.ts.map +0 -1
  97. package/lib/types/commands/publish/PublishCliUpdate.d.ts +0 -14
  98. package/lib/types/commands/publish/PublishCliUpdate.d.ts.map +0 -1
  99. package/lib/types/commands/publish/index.d.ts +0 -5
  100. package/lib/types/commands/publish/index.d.ts.map +0 -1
  101. package/lib/types/commands/scaffolding/ScaffoldInit.d.ts +0 -2
  102. package/lib/types/commands/scaffolding/ScaffoldInit.d.ts.map +0 -1
  103. package/lib/types/commands/scaffolding/index.d.ts +0 -2
  104. package/lib/types/commands/scaffolding/index.d.ts.map +0 -1
  105. package/lib/types/config/PublishDetails.d.ts +0 -17
  106. package/lib/types/config/PublishDetails.d.ts.map +0 -1
  107. package/lib/types/index.d.ts +0 -2
  108. package/lib/types/index.d.ts.map +0 -1
  109. package/lib/types/upload/CachedStorageDriver.d.ts +0 -30
  110. package/lib/types/upload/CachedStorageDriver.d.ts.map +0 -1
  111. package/lib/types/upload/index.d.ts +0 -2
  112. package/lib/types/upload/index.d.ts.map +0 -1
@@ -1,41 +0,0 @@
1
- import { createApp } from "@solana-mobile/dapp-store-publishing-tools";
2
- import { Connection, Keypair, PublicKey, sendAndConfirmTransaction, } from "@solana/web3.js";
3
- import { getMetaplexInstance, } from "../../CliUtils.js";
4
- import { loadPublishDetailsWithChecks, writeToPublishDetails } from "../../config/PublishDetails.js";
5
- const createAppNft = async ({ appDetails, connection, publisherMintAddress, publisher, }, { dryRun }) => {
6
- const mintAddress = Keypair.generate();
7
- const metaplex = getMetaplexInstance(connection, publisher);
8
- const txBuilder = await createApp({
9
- publisherMintAddress: new PublicKey(publisherMintAddress),
10
- mintAddress,
11
- appDetails,
12
- }, { metaplex, publisher });
13
- const blockhash = await connection.getLatestBlockhashAndContext();
14
- const tx = txBuilder.toTransaction(blockhash.value);
15
- tx.sign(mintAddress, publisher);
16
- if (!dryRun) {
17
- const txSig = await sendAndConfirmTransaction(connection, tx, [
18
- publisher,
19
- mintAddress,
20
- ], {
21
- minContextSlot: blockhash.context.slot
22
- });
23
- console.info({ txSig, mintAddress: mintAddress.publicKey.toBase58() });
24
- }
25
- return { appAddress: mintAddress.publicKey.toBase58() };
26
- };
27
- export const createAppCommand = async ({ signer, url, dryRun, publisherMintAddress, }) => {
28
- const connection = new Connection(url);
29
- const { app: appDetails, publisher: publisherDetails } = await loadPublishDetailsWithChecks();
30
- const { appAddress } = await createAppNft({
31
- connection,
32
- publisher: signer,
33
- publisherMintAddress: publisherDetails.address ?? publisherMintAddress,
34
- appDetails,
35
- }, { dryRun });
36
- if (!dryRun) {
37
- writeToPublishDetails({ app: { address: appAddress } });
38
- }
39
- return { appAddress };
40
- };
41
- //# sourceMappingURL=CreateCliApp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateCliApp.js","sourceRoot":"","sources":["../../../../src/commands/create/CreateCliApp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAErG,MAAM,YAAY,GAAG,KAAK,EACxB,EACE,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,SAAS,GAMV,EACD,EAAE,MAAM,EAAwB,EAChC,EAAE;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,SAAS,CAC/B;QACE,oBAAoB,EAAE,IAAI,SAAS,CAAC,oBAAoB,CAAC;QACzD,WAAW;QACX,UAAU;KACX,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE;YAC5D,SAAS;YACT,WAAW;SACZ,EAAE;YACD,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KACxE;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC1D,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,MAAM,EACN,GAAG,EACH,MAAM,EACN,oBAAoB,GACE,EAAE,EAAE;IAC1B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,GACpD,MAAM,4BAA4B,EAAE,CAAC;IAEvC,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,qBAAqB,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;KACzD;IAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC"}
@@ -1,36 +0,0 @@
1
- import { createPublisher } from "@solana-mobile/dapp-store-publishing-tools";
2
- import { Connection, Keypair, sendAndConfirmTransaction, } from "@solana/web3.js";
3
- import { getMetaplexInstance, } from "../../CliUtils.js";
4
- import { loadPublishDetailsWithChecks, writeToPublishDetails } from "../../config/PublishDetails.js";
5
- const createPublisherNft = async ({ connection, publisher, publisherDetails, }, { dryRun }) => {
6
- const mintAddress = Keypair.generate();
7
- const metaplex = getMetaplexInstance(connection, publisher);
8
- console.info(`Creating publisher at address: ${mintAddress.publicKey.toBase58()}`);
9
- const txBuilder = await createPublisher({ mintAddress, publisherDetails }, { metaplex, publisher });
10
- const blockhash = await connection.getLatestBlockhashAndContext();
11
- const tx = txBuilder.toTransaction(blockhash.value);
12
- tx.sign(mintAddress, publisher);
13
- if (!dryRun) {
14
- const txSig = await sendAndConfirmTransaction(connection, tx, [
15
- publisher,
16
- mintAddress,
17
- ], {
18
- minContextSlot: blockhash.context.slot
19
- });
20
- console.info({ txSig, mintAddress: mintAddress.publicKey.toBase58() });
21
- }
22
- return { publisherAddress: mintAddress.publicKey.toBase58() };
23
- };
24
- export const createPublisherCommand = async ({ signer, url, dryRun, }) => {
25
- const connection = new Connection(url);
26
- const { publisher: publisherDetails } = await loadPublishDetailsWithChecks();
27
- const { publisherAddress } = await createPublisherNft({
28
- connection,
29
- publisher: signer,
30
- publisherDetails,
31
- }, { dryRun });
32
- // TODO(sdlaver): dry-run should not modify config
33
- writeToPublishDetails({ publisher: { address: publisherAddress } });
34
- return { publisherAddress };
35
- };
36
- //# sourceMappingURL=CreateCliPublisher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateCliPublisher.js","sourceRoot":"","sources":["../../../../src/commands/create/CreateCliPublisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,OAAO,EACP,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAErG,MAAM,kBAAkB,GAAG,KAAK,EAC9B,EACE,UAAU,EACV,SAAS,EACT,gBAAgB,GAKjB,EACD,EAAE,MAAM,EAAuB,EAC/B,EAAE;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CACV,kCAAkC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CACrE,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EACjC,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE;YAC5D,SAAS;YACT,WAAW;SACZ,EAAE;YACD,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KACxE;IAED,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,MAAM,EACN,GAAG,EACH,MAAM,GAKP,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,4BAA4B,EAAE,CAAC;IAE7E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CACnD;QACE,UAAU;QACV,SAAS,EAAE,MAAM;QACjB,gBAAgB;KACjB,EACD,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAEpE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC9B,CAAC,CAAC"}
@@ -1,50 +0,0 @@
1
- import { createRelease } from "@solana-mobile/dapp-store-publishing-tools";
2
- import { Connection, Keypair, PublicKey, sendAndConfirmTransaction, } from "@solana/web3.js";
3
- import { getMetaplexInstance, } from "../../CliUtils.js";
4
- import { loadPublishDetailsWithChecks, writeToPublishDetails } from "../../config/PublishDetails.js";
5
- const createReleaseNft = async ({ appMintAddress, releaseDetails, appDetails, publisherDetails, connection, publisher, }) => {
6
- const releaseMintAddress = Keypair.generate();
7
- const metaplex = getMetaplexInstance(connection, publisher);
8
- const { txBuilder } = await createRelease({
9
- appMintAddress: new PublicKey(appMintAddress),
10
- releaseMintAddress,
11
- releaseDetails,
12
- appDetails,
13
- publisherDetails,
14
- }, { metaplex, publisher });
15
- const blockhash = await connection.getLatestBlockhashAndContext();
16
- const tx = txBuilder.toTransaction(blockhash.value);
17
- tx.sign(releaseMintAddress, publisher);
18
- const txSig = await sendAndConfirmTransaction(connection, tx, [
19
- publisher,
20
- releaseMintAddress,
21
- ], {
22
- minContextSlot: blockhash.context.slot
23
- });
24
- console.info({
25
- txSig,
26
- releaseMintAddress: releaseMintAddress.publicKey.toBase58(),
27
- });
28
- return { releaseAddress: releaseMintAddress.publicKey.toBase58() };
29
- };
30
- export const createReleaseCommand = async ({ appMintAddress, buildToolsPath, signer, url, dryRun = false, }) => {
31
- const connection = new Connection(url);
32
- const { release, app, publisher } = await loadPublishDetailsWithChecks(buildToolsPath);
33
- if (!dryRun) {
34
- const { releaseAddress } = await createReleaseNft({
35
- appMintAddress: app.address ?? appMintAddress,
36
- connection,
37
- publisher: signer,
38
- releaseDetails: {
39
- ...release,
40
- },
41
- appDetails: app,
42
- publisherDetails: publisher,
43
- });
44
- writeToPublishDetails({
45
- release: { address: releaseAddress },
46
- });
47
- return { releaseAddress };
48
- }
49
- };
50
- //# sourceMappingURL=CreateCliRelease.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateCliRelease.js","sourceRoot":"","sources":["../../../../src/commands/create/CreateCliRelease.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAUrG,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,cAAc,EACd,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,SAAS,GAQV,EAAE,EAAE;IACH,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE5D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CACvC;QACE,cAAc,EAAE,IAAI,SAAS,CAAC,cAAc,CAAC;QAC7C,kBAAkB;QAClB,cAAc;QACd,UAAU;QACV,gBAAgB;KACjB,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,4BAA4B,EAAE,CAAC;IAClE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE;QAC5D,SAAS;QACT,kBAAkB;KACnB,EAAE;QACD,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;KACvC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC;QACX,KAAK;QACL,kBAAkB,EAAE,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE;KAC5D,CAAC,CAAC;IAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,cAAc,EACd,cAAc,EACd,MAAM,EACN,GAAG,EACH,MAAM,GAAG,KAAK,GACY,EAAE,EAAE;IAC9B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,4BAA4B,CAAC,cAAc,CAAC,CAAC;IAEvF,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAChD,cAAc,EAAE,GAAG,CAAC,OAAO,IAAI,cAAc;YAC7C,UAAU;YACV,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE;gBACd,GAAG,OAAO;aACX;YACD,UAAU,EAAE,GAAG;YACf,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;QAEH,qBAAqB,CAAC;YACpB,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;SACrC,CAAC,CAAC;QAEH,OAAO,EAAE,cAAc,EAAE,CAAC;KAC3B;AACH,CAAC,CAAC"}
@@ -1,44 +0,0 @@
1
- export * from "./CreateCliPublisher.js";
2
- export * from "./CreateCliApp.js";
3
- export * from "./CreateCliRelease.js";
4
- /*
5
- * Module responsible for creating publishers, apps, and releases (in that order)
6
- * Anything that is out-of-order will be prompted back into order
7
- * And steps that happen more than once will do their best to remember as much information as possible.
8
- * We will ask questions and do our best to answer anything that's already been configured, and prompt for anything that's not
9
- */
10
- // We'll never ask for private keys or seed phrases
11
- // You can use a burner signer to publish; all NFTs require verification from the publisher signer
12
- // You can use a multisig or Ledger for that purpose
13
- // Publisher
14
- // Public key attached to a publisher must also verify applications and releases
15
- // Most information here can be be edited after the fact
16
- // Only required fields are name, address, publisher website, and contact
17
- // Optional fields are: description, image_url (need dimensions!)
18
- // App
19
- // Publisher creator key required
20
- // Most information can be edited after the fact
21
- // Required: name, description, `android_package`
22
- // Optional: Any additional creator keys
23
- // TODO(jon): Probably okay to capture more information here like:
24
- // - `license_url`
25
- // - `copyright_url`
26
- // - `privacy_policy_url`
27
- // Release
28
- // Publisher creator key required
29
- // Immutable; information cannot be edited after publishing.
30
- // Change based on the review process must result in a new release
31
- // Required:
32
- // - version (automatically prompt with semver + 1)
33
- // - release notes (description)
34
- // - publisher creator key
35
- // - path to the APK
36
- // Optional:
37
- // - Media related to the release
38
- // - New permissions (prompted)
39
- // - New languages (prompted)
40
- // Handles uploads of all files, sha'ing them
41
- // Handles i18n (later)
42
- // We'll attempt to read as much as possible from a provided `.yml` file
43
- // If there are provided folders that are well-structured, we'll opt to use that too.
44
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/create/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC;;;;;GAKG;AAEH,mDAAmD;AACnD,kGAAkG;AAClG,oDAAoD;AAEpD,YAAY;AACZ,gFAAgF;AAChF,wDAAwD;AACxD,yEAAyE;AACzE,iEAAiE;AAEjE,MAAM;AACN,iCAAiC;AACjC,gDAAgD;AAChD,iDAAiD;AACjD,wCAAwC;AACxC,kEAAkE;AAClE,kBAAkB;AAClB,oBAAoB;AACpB,yBAAyB;AACzB,UAAU;AACV,iCAAiC;AACjC,4DAA4D;AAC5D,kEAAkE;AAClE,YAAY;AACZ,mDAAmD;AACnD,gCAAgC;AAChC,0BAA0B;AAC1B,oBAAoB;AACpB,YAAY;AACZ,iCAAiC;AACjC,+BAA+B;AAC/B,6BAA6B;AAC7B,6CAA6C;AAC7C,uBAAuB;AAEvB,wEAAwE;AACxE,qFAAqF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
@@ -1,26 +0,0 @@
1
- import { Connection } from "@solana/web3.js";
2
- import { publishRemove } from "@solana-mobile/dapp-store-publishing-tools";
3
- import { checkMintedStatus } from "../../CliUtils.js";
4
- import nacl from "tweetnacl";
5
- import { loadPublishDetailsWithChecks } from "../../config/PublishDetails.js";
6
- export const publishRemoveCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, critical = false, }) => {
7
- if (!requestorIsAuthorized) {
8
- console.error("ERROR: Cannot submit a request for which the requestor does not attest they are authorized to do so");
9
- return;
10
- }
11
- const connection = new Connection(url);
12
- const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await loadPublishDetailsWithChecks();
13
- const sign = ((buf) => nacl.sign(buf, signer.secretKey));
14
- const pubAddr = publisherDetails.address;
15
- const appAddr = appMintAddress ?? appDetails.address;
16
- const releaseAddr = releaseMintAddress ?? releaseDetails.address;
17
- await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
18
- await publishRemove({ connection, sign }, {
19
- appMintAddress: appMintAddress ?? appDetails.address,
20
- releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
21
- publisherDetails,
22
- requestorIsAuthorized,
23
- criticalUpdate: critical,
24
- }, dryRun);
25
- };
26
- //# sourceMappingURL=PublishCliRemove.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublishCliRemove.js","sourceRoot":"","sources":["../../../../src/commands/publish/PublishCliRemove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAY9E,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,4BAA4B,EAAE,CAAC;IAEzC,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,31 +0,0 @@
1
- import { Connection } from "@solana/web3.js";
2
- import { publishSubmit } from "@solana-mobile/dapp-store-publishing-tools";
3
- import nacl from "tweetnacl";
4
- import { checkMintedStatus } from "../../CliUtils.js";
5
- import { loadPublishDetailsWithChecks } from "../../config/PublishDetails.js";
6
- export const publishSubmitCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, }) => {
7
- if (!compliesWithSolanaDappStorePolicies) {
8
- console.error("ERROR: Cannot submit a request for which the requestor does not attest that it complies with Solana dApp Store policies");
9
- return;
10
- }
11
- else if (!requestorIsAuthorized) {
12
- console.error("ERROR: Cannot submit a request for which the requestor does not attest they are authorized to do so");
13
- return;
14
- }
15
- const connection = new Connection(url);
16
- const { publisher: publisherDetails, app: appDetails, release: releaseDetails, solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails, } = await loadPublishDetailsWithChecks();
17
- const sign = ((buf) => nacl.sign(buf, signer.secretKey));
18
- const pubAddr = publisherDetails.address;
19
- const appAddr = appMintAddress ?? appDetails.address;
20
- const releaseAddr = releaseMintAddress ?? releaseDetails.address;
21
- await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
22
- await publishSubmit({ connection, sign }, {
23
- appMintAddress: appAddr,
24
- releaseMintAddress: releaseAddr,
25
- publisherDetails,
26
- solanaMobileDappPublisherPortalDetails,
27
- compliesWithSolanaDappStorePolicies,
28
- requestorIsAuthorized,
29
- }, dryRun);
30
- };
31
- //# sourceMappingURL=PublishCliSubmit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublishCliSubmit.js","sourceRoot":"","sources":["../../../../src/commands/publish/PublishCliSubmit.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,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAY9E,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,4BAA4B,EAAE,CAAC;IAEzC,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,26 +0,0 @@
1
- import { Connection } from "@solana/web3.js";
2
- import { publishSupport } from "@solana-mobile/dapp-store-publishing-tools";
3
- import { checkMintedStatus } from "../../CliUtils.js";
4
- import nacl from "tweetnacl";
5
- import { loadPublishDetailsWithChecks } from "../../config/PublishDetails.js";
6
- export const publishSupportCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, requestorIsAuthorized = false, requestDetails, }) => {
7
- if (!requestorIsAuthorized) {
8
- console.error("ERROR: Cannot submit a request for which the requestor does not attest they are authorized to do so");
9
- return;
10
- }
11
- const connection = new Connection(url);
12
- const { publisher: publisherDetails, app: appDetails, release: releaseDetails, } = await loadPublishDetailsWithChecks();
13
- const sign = ((buf) => nacl.sign(buf, signer.secretKey));
14
- const pubAddr = publisherDetails.address;
15
- const appAddr = appMintAddress ?? appDetails.address;
16
- const releaseAddr = releaseMintAddress ?? releaseDetails.address;
17
- await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
18
- await publishSupport({ connection, sign }, {
19
- appMintAddress: appMintAddress ?? appDetails.address,
20
- releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
21
- publisherDetails,
22
- requestorIsAuthorized,
23
- requestDetails,
24
- }, dryRun);
25
- };
26
- //# sourceMappingURL=PublishCliSupport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublishCliSupport.js","sourceRoot":"","sources":["../../../../src/commands/publish/PublishCliSupport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAY9E,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,4BAA4B,EAAE,CAAC;IAEzC,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,32 +0,0 @@
1
- import { Connection } from "@solana/web3.js";
2
- import { publishUpdate } from "@solana-mobile/dapp-store-publishing-tools";
3
- import { checkMintedStatus } from "../../CliUtils.js";
4
- import nacl from "tweetnacl";
5
- import { loadPublishDetailsWithChecks } from "../../config/PublishDetails.js";
6
- export const publishUpdateCommand = async ({ appMintAddress, releaseMintAddress, signer, url, dryRun = false, compliesWithSolanaDappStorePolicies = false, requestorIsAuthorized = false, critical = false, }) => {
7
- if (!compliesWithSolanaDappStorePolicies) {
8
- console.error("ERROR: Cannot submit a request for which the requestor does not attest that it complies with Solana dApp Store policies");
9
- return;
10
- }
11
- else if (!requestorIsAuthorized) {
12
- console.error("ERROR: Cannot submit a request for which the requestor does not attest they are authorized to do so");
13
- return;
14
- }
15
- const connection = new Connection(url);
16
- const { publisher: publisherDetails, app: appDetails, release: releaseDetails, solana_mobile_dapp_publisher_portal: solanaMobileDappPublisherPortalDetails, } = await loadPublishDetailsWithChecks();
17
- const sign = ((buf) => nacl.sign(buf, signer.secretKey));
18
- const pubAddr = publisherDetails.address;
19
- const appAddr = appMintAddress ?? appDetails.address;
20
- const releaseAddr = releaseMintAddress ?? releaseDetails.address;
21
- await checkMintedStatus(connection, pubAddr, appAddr, releaseAddr);
22
- await publishUpdate({ connection, sign }, {
23
- appMintAddress: appMintAddress ?? appDetails.address,
24
- releaseMintAddress: releaseMintAddress ?? releaseDetails.address,
25
- publisherDetails,
26
- solanaMobileDappPublisherPortalDetails,
27
- compliesWithSolanaDappStorePolicies,
28
- requestorIsAuthorized,
29
- criticalUpdate: critical,
30
- }, dryRun);
31
- };
32
- //# sourceMappingURL=PublishCliUpdate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublishCliUpdate.js","sourceRoot":"","sources":["../../../../src/commands/publish/PublishCliUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAa9E,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,4BAA4B,EAAE,CAAC;IAEzC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAA6B,CAAC;IAEhE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,IAAI,cAAc,CAAC,OAAO,CAAC;IAEjE,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,aAAa,CACjB,EAAE,UAAU,EAAE,IAAI,EAAE,EACpB;QACE,cAAc,EAAE,cAAc,IAAI,UAAU,CAAC,OAAO;QACpD,kBAAkB,EAAE,kBAAkB,IAAI,cAAc,CAAC,OAAO;QAChE,gBAAgB;QAChB,sCAAsC;QACtC,mCAAmC;QACnC,qBAAqB;QACrB,cAAc,EAAE,QAAQ;KACzB,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,25 +0,0 @@
1
- export * from "./PublishCliRemove.js";
2
- export * from "./PublishCliSubmit.js";
3
- export * from "./PublishCliSupport.js";
4
- export * from "./PublishCliUpdate.js";
5
- /*
6
- * Module responsible for submitting requests to the Solana dApp Store publisher portal
7
- * Anything that is out-of-order will be prompted back into order
8
- * And steps that happen more than once will do their best to remember as much information as possible.
9
- * We will ask questions and do our best to answer anything that's already been configured, and prompt for anything that's not
10
- */
11
- // We'll never ask for private keys or seed phrases
12
- // You must use the same signer(s) when submitting requests to the publisher portal as was used to publish
13
- // your app on-chain.
14
- // The Solana Mobile dApp publisher portal supports 4 different requests: `submit`, `update`, `remove`, and `support`.
15
- // Each request includes:
16
- // - a 32-digit randomly generated unique identifier
17
- // - an attestation payload, signed with the private key of the dApp collection update authority
18
- // - the dApp release NFT address
19
- // - contact and company information for the requestor
20
- // - a self-attestation that the requestor is authorized to make this request
21
- // - additional fields, specific to the request type in question
22
- // We'll attempt to read as much as possible from a provided `.yml` file
23
- // If there are provided folders that are well-structured, we'll opt to use that too.
24
- // Requests and responses are logged to the console, to facilitate use in an automated CI/CD environment.
25
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/publish/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AAEtC;;;;;GAKG;AAEH,mDAAmD;AACnD,0GAA0G;AAC1G,qBAAqB;AAErB,sHAAsH;AACtH,yBAAyB;AACzB,oDAAoD;AACpD,gGAAgG;AAChG,iCAAiC;AACjC,sDAAsD;AACtD,6EAA6E;AAC7E,gEAAgE;AAEhE,wEAAwE;AACxE,qFAAqF;AAErF,yGAAyG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScaffoldInit.js","sourceRoot":"","sources":["../../../../src/commands/scaffolding/ScaffoldInit.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,mBAAmB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC;IAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC1B,MAAM,KAAK,CAAC,gFAAgF,CAAC,CAAC;KAC/F;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAE/C,OAAO,wCAAwC,UAAU,EAAE,CAAC;AAC9D,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/scaffolding/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -1,177 +0,0 @@
1
- import { dump, load } from "js-yaml";
2
- import Ajv from "ajv";
3
- // eslint-disable-next-line require-extensions/require-extensions
4
- import schemaJson from "../generated/config_schema.json" assert { type: "json" };
5
- import fs from "fs";
6
- import path from "path";
7
- import { toMetaplexFile } from "@metaplex-foundation/js";
8
- import { Constants, showMessage } from "../CliUtils.js";
9
- import util from "util";
10
- import { imageSize } from "image-size";
11
- import { exec } from "child_process";
12
- const runImgSize = util.promisify(imageSize);
13
- const runExec = util.promisify(exec);
14
- const AaptPrefixes = {
15
- quoteRegex: "'(.*?)'",
16
- quoteNonLazyRegex: "'(.*)'",
17
- packagePrefix: "package: name=",
18
- verCodePrefix: "versionCode=",
19
- verNamePrefix: "versionName=",
20
- sdkPrefix: "sdkVersion:",
21
- localePrefix: "locales: ",
22
- };
23
- const ajv = new Ajv({ strictTuples: false });
24
- const validate = ajv.compile(schemaJson);
25
- export const loadPublishDetails = async (configPath) => {
26
- const configFile = await fs.promises.readFile(configPath, "utf-8");
27
- const valid = validate(load(configFile));
28
- if (!valid) {
29
- console.error(validate.errors);
30
- process.exit(1);
31
- }
32
- return load(configFile);
33
- };
34
- export const loadPublishDetailsWithChecks = async (buildToolsDir = null) => {
35
- const config = await loadPublishDetails(Constants.getConfigFilePath());
36
- // We validate that the config is going to have at least one installable asset
37
- const apkEntry = config.release.files.find((asset) => asset.purpose === "install");
38
- const apkPath = path.join(process.cwd(), apkEntry?.uri);
39
- if (!fs.existsSync(apkPath)) {
40
- throw new Error("Invalid path to APK file.");
41
- }
42
- if (buildToolsDir) {
43
- config.release.android_details = await getAndroidDetails(buildToolsDir, apkPath);
44
- }
45
- const publisherIcon = config.publisher.media?.find((asset) => asset.purpose === "icon")?.uri;
46
- if (publisherIcon) {
47
- const iconPath = path.join(process.cwd(), publisherIcon);
48
- await checkIconCompatibility(iconPath, "Publisher");
49
- const iconBuffer = await fs.promises.readFile(iconPath);
50
- config.publisher.icon = toMetaplexFile(iconBuffer, publisherIcon);
51
- }
52
- const appIcon = config.app.media?.find((asset) => asset.purpose === "icon")?.uri;
53
- if (appIcon) {
54
- const iconPath = path.join(process.cwd(), appIcon);
55
- await checkIconCompatibility(iconPath, "App");
56
- const iconBuffer = await fs.promises.readFile(iconPath);
57
- config.app.icon = toMetaplexFile(iconBuffer, appIcon);
58
- }
59
- const releaseIcon = config.release.media?.find((asset) => asset.purpose === "icon")?.uri;
60
- if (releaseIcon) {
61
- const iconPath = path.join(process.cwd(), releaseIcon);
62
- await checkIconCompatibility(iconPath, "Release");
63
- }
64
- if (!appIcon && !releaseIcon) {
65
- throw new Error("Please specify at least one media entry of type icon in your configuration file");
66
- }
67
- config.release.media.forEach((item) => {
68
- const imagePath = path.join(process.cwd(), item.uri);
69
- if (!fs.existsSync(imagePath) || !checkImageExtension(imagePath)) {
70
- throw new Error(`Invalid media path or file type: ${item.uri}. Please ensure the file is a jpeg, png, or webp file.`);
71
- }
72
- });
73
- validateLocalizableResources(config);
74
- const googlePkg = config.solana_mobile_dapp_publisher_portal.google_store_package;
75
- if (googlePkg?.length) {
76
- const pkgCompare = new RegExp("[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)+").exec(googlePkg);
77
- if (!pkgCompare?.length) {
78
- throw new Error("Please provide a valid Google store package name in the Publisher Portal section of your configuration file.");
79
- }
80
- }
81
- return config;
82
- };
83
- const checkIconCompatibility = async (path, typeString) => {
84
- if (!fs.existsSync(path) || !checkImageExtension(path)) {
85
- throw new Error(`Please check the path to your ${typeString} icon and ensure the file is a jpeg, png, or webp file.`);
86
- }
87
- if (await checkIconDimensions(path)) {
88
- throw new Error("Icons must have square dimensions and be no greater than 512px by 512px.");
89
- }
90
- };
91
- const checkImageExtension = (uri) => {
92
- const fileExt = path.extname(uri).toLowerCase();
93
- return (fileExt == ".png" ||
94
- fileExt == ".jpg" ||
95
- fileExt == ".jpeg" ||
96
- fileExt == ".webp");
97
- };
98
- /**
99
- * We need to pre-check some things in the localized resources before we move forward
100
- */
101
- const validateLocalizableResources = (config) => {
102
- if (!config.release.catalog["en-US"]) {
103
- throw new Error("Please ensure you have the en-US locale strings in your configuration file.");
104
- }
105
- const baselineSize = Object.keys(config.release.catalog["en-US"]).length;
106
- Object.keys(config.release.catalog).forEach((locale) => {
107
- const size = Object.keys(config.release.catalog[locale]).length;
108
- if (size != baselineSize) {
109
- throw new Error("Please ensure you have included all localized strings for all locales in your configuration file.");
110
- }
111
- });
112
- const descsWrongLength = Object.values(config.release.catalog)
113
- .map((x) => x.short_description)
114
- .filter((desc) => !desc?.length || desc.length > 50);
115
- if (descsWrongLength.length > 0) {
116
- throw new Error("Please ensure all translations of short_description are between 0 and 50 characters");
117
- }
118
- };
119
- const checkIconDimensions = async (iconPath) => {
120
- const size = await runImgSize(iconPath);
121
- return size?.width != size?.height || (size?.width ?? 0) > 512;
122
- };
123
- const getAndroidDetails = async (aaptDir, apkPath) => {
124
- try {
125
- const { stdout } = await runExec(`${aaptDir}/aapt2 dump badging "${apkPath}"`);
126
- const appPackage = new RegExp(AaptPrefixes.packagePrefix + AaptPrefixes.quoteRegex).exec(stdout);
127
- const versionCode = new RegExp(AaptPrefixes.verCodePrefix + AaptPrefixes.quoteRegex).exec(stdout);
128
- const versionName = new RegExp(AaptPrefixes.verNamePrefix + AaptPrefixes.quoteRegex).exec(stdout);
129
- const minSdk = new RegExp(AaptPrefixes.sdkPrefix + AaptPrefixes.quoteRegex).exec(stdout);
130
- const permissions = [...stdout.matchAll(/uses-permission: name='(.*)'/g)];
131
- const locales = new RegExp(AaptPrefixes.localePrefix + AaptPrefixes.quoteNonLazyRegex).exec(stdout);
132
- let localeArray = Array.from(locales?.values() ?? []);
133
- if (localeArray.length == 2) {
134
- const localesSrc = localeArray[1];
135
- localeArray = ["en-US"].concat(localesSrc.split("' '").slice(1));
136
- }
137
- if (localeArray.length >= 60) {
138
- showMessage("The bundle apk claims supports for following locales", "Claim for supported locales::\n" +
139
- localeArray +
140
- "\nIf this release does not support all these locales the release may be rejected" +
141
- "\nSee details at https://developer.android.com/guide/topics/resources/multilingual-support#design for configuring the supported locales", "warning");
142
- }
143
- return {
144
- android_package: appPackage?.[1] ?? "",
145
- min_sdk: parseInt(minSdk?.[1] ?? "0", 10),
146
- version_code: parseInt(versionCode?.[1] ?? "0", 10),
147
- version: versionName?.[1] ?? "0",
148
- permissions: permissions.flatMap(permission => permission[1]),
149
- locales: localeArray
150
- };
151
- }
152
- catch (e) {
153
- throw new Error("There was an error parsing your APK. Please ensure you have provided a valid Android tools directory containing AAPT2.");
154
- }
155
- };
156
- export const writeToPublishDetails = async ({ publisher, app, release }) => {
157
- const currentConfig = await loadPublishDetailsWithChecks();
158
- delete currentConfig.publisher.icon;
159
- delete currentConfig.app.icon;
160
- const newConfig = {
161
- publisher: {
162
- ...currentConfig.publisher,
163
- address: publisher?.address ?? currentConfig.publisher.address
164
- },
165
- app: {
166
- ...currentConfig.app,
167
- address: app?.address ?? currentConfig.app.address
168
- },
169
- release: {
170
- ...currentConfig.release,
171
- address: release?.address ?? currentConfig.release.address
172
- },
173
- solana_mobile_dapp_publisher_portal: currentConfig.solana_mobile_dapp_publisher_portal
174
- };
175
- fs.writeFileSync(Constants.getConfigFilePath(), dump(newConfig));
176
- };
177
- //# sourceMappingURL=PublishDetails.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublishDetails.js","sourceRoot":"","sources":["../../../src/config/PublishDetails.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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>>", "short_description": "<<SHORT_APP_DESCRIPTION>>", "long_description": "<<LONG_APP_DESCRIPTION>>", "new_in_version": "<<WHATS_NEW_IN_THIS_VERSION>>", "saga_features": "<<ANY_FEATURES_ONLY_AVAILBLE_WHEN_RUNNING_ON_SAGA>>" } } }, "solana_mobile_dapp_publisher_portal": { "google_store_package": "<<ANDROID_PACKAGE_NAME_OF_GOOGLE_PLAY_STORE_VERSION_IF_DIFFERENT>>", "testing_instructions": "<<TESTING_INSTRUCTIONS>>" } }
@@ -1 +0,0 @@
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" }, "short_description": { "type": "string" }, "long_description": { "type": "string" }, "new_in_version": { "type": "string" }, "saga_features": { "type": "string" } }, "required": ["short_description"] } } } } }, "solana_mobile_dapp_publisher_portal": { "type": "object", "properties": { "google_store_package": { "type": "string" }, "testing_instructions": { "type": "string" } } } } }