Browse Source

storage-node-v2: Improve ‘create storage bucket’ command.

- add prettier
Shamil Gadelshin 3 years ago
parent
commit
97779b3def

+ 2 - 0
storage-node-v2/.prettierignore

@@ -0,0 +1,2 @@
+/lib/
+.nyc_output

+ 4 - 2
storage-node-v2/package.json

@@ -8,11 +8,11 @@
   },
   "bugs": "https://github.com/shamil-gadelshin/storage-node-v2/issues",
   "dependencies": {
-    "@polkadot/api": "4.2.1",
     "@joystream/types": "^0.15.0",
     "@oclif/command": "^1",
     "@oclif/config": "^1",
     "@oclif/plugin-help": "^3",
+    "@polkadot/api": "4.2.1",
     "storage-node-v2": "file:.",
     "tslib": "^1"
   },
@@ -29,6 +29,7 @@
     "globby": "^10",
     "mocha": "^5",
     "nyc": "^14",
+    "prettier": "^2.3.0",
     "ts-node": "^8",
     "typescript": "^3.3"
   },
@@ -69,7 +70,8 @@
     "prepack": "rm -rf lib && tsc -b && oclif-dev manifest && oclif-dev readme",
     "test": "nyc --extension .ts mocha --forbid-only \"test/**/*.test.ts\"",
     "version": "oclif-dev readme && git add README.md",
-    "build": "tsc --build tsconfig.json"
+    "build": "tsc --build tsconfig.json",
+    "format": "prettier ./src --write"
   },
   "types": "lib/index.d.ts"
 }

+ 31 - 15
storage-node-v2/src/commands/wg/leader/create-bucket.ts

@@ -1,28 +1,44 @@
-import {run as apiRun} from '../../../helpers/api'
-import {Command, flags} from '@oclif/command'
+import { createStorageBucket } from '../../../services/api'
+import { Command, flags } from '@oclif/command'
 
 export default class WgLeaderCreateBucket extends Command {
-  static description = 'Create storage bucket.'
+  static description = `Create new storage bucket. Requires storage working group leader permissions.`
 
   static flags = {
-    help: flags.help({char: 'h'}),
-    // flag with a value (-n, --name=VALUE)
-    name: flags.string({char: 'n', description: 'name to print'}),
-    // flag with no value (-f, --force)
-    force: flags.boolean({char: 'f'}),
+    help: flags.help({ char: 'h' }),
+    size: flags.integer({
+      char: 's',
+      description: 'Storage bucket max total objects size',
+    }),
+    number: flags.integer({
+      char: 'n',
+      description: 'Storage bucket max total objects number',
+    }),
+    allow: flags.boolean({ char: 'a', description: 'Accepts new bags' }),
+    dev: flags.boolean({ char: 'd', description: 'Development API' }),
   }
 
-  static args = [{name: 'file'}]
+  static args = [{ name: 'file' }]
 
   async run() {
-    const {args, flags} = this.parse(WgLeaderCreateBucket)
+    const { flags } = this.parse(WgLeaderCreateBucket)
 
-    const name = flags.name ?? 'world'
-    this.log(`Create storage bucket: ${name} `)
-    if (args.file && flags.force) {
-      this.log(`you input --force and --file: ${args.file}`)
+    const objectSize = flags.size ?? 0
+    const objectNumber = flags.number ?? 0
+    const allowNewBags = flags.allow ?? true
+
+    this.log('Creating storage bucket...')
+    if (flags.dev) {
+      this.log('development mode is ON')
     }
 
-    await apiRun()
+    await createStorageBucket(null, allowNewBags, objectSize, objectNumber)
+  }
+
+  async finally(err: any) {
+    // called after run and catch regardless of whether or not the command errored
+    // We'll force exit here, in case there is no error, to prevent console.log from hanging the process
+    if (!err) this.exit(0)
+    super.finally(err)
   }
 }

+ 0 - 33
storage-node-v2/src/helpers/api.ts

@@ -1,33 +0,0 @@
-import { ApiPromise, WsProvider } from '@polkadot/api';
-import { types } from '@joystream/types/'
-
-export async function run() { 
-    const wsProvider = new WsProvider('ws://localhost:9944');
-    let extendedTypes = types;
-    extendedTypes.StorageBucketId = {}
-    extendedTypes.BagId = {}
-    extendedTypes.UploadParameters = {}
-    extendedTypes.DynamicBagId = {}
-    extendedTypes.StorageBucketsPerBagValueConstraint = {}
-    extendedTypes.Voucher = {}
-    extendedTypes.DynamicBagType = {}
-    extendedTypes.DynamicBagCreationPolicy = {}
-    extendedTypes.DataObjectId = {}
-    extendedTypes.DynamicBag = {}
-    extendedTypes.StaticBag = {}
-    extendedTypes.StaticBag = {}
-    extendedTypes.StaticBagId = {}
-    extendedTypes.StorageBucket = {}
-
-    try  {
-      let api = await ApiPromise.create({provider: wsProvider, types: extendedTypes})
-      console.log(api.genesisHash.toHex())
-      const memberId = 0
-
-      let profile = await api.query.members.membershipById(memberId)
-      console.log(profile)
-    }
-    catch(err) {
-     console.error(`Api Error: ${err}`)
-    }
-}

+ 1 - 1
storage-node-v2/src/index.ts

@@ -1 +1 @@
-export {run} from '@oclif/command'
+export { run } from '@oclif/command'

+ 77 - 0
storage-node-v2/src/services/api.ts

@@ -0,0 +1,77 @@
+import { ApiPromise, WsProvider } from '@polkadot/api'
+import { RegistryTypes } from '@polkadot/types/types'
+import { types } from '@joystream/types/'
+import { Keyring } from '@polkadot/api'
+
+export async function joystreamApiTestQuery() {
+  try {
+    let api = await createApi()
+    console.log(api.genesisHash.toHex())
+    const memberId = 0
+
+    let profile = await api.query.members.membershipById(memberId)
+    console.log(profile)
+  } catch (err) {
+    console.error(`Api Error: ${err}`)
+  }
+}
+
+export async function createStorageBucket(
+  invitedWorker: number | null = null,
+  allowedNewBags: boolean = true,
+  sizeLimit: number = 0,
+  objectsLimit: number = 0
+): Promise<void> {
+  try {
+    let api = await createApi()
+
+    const keyring = new Keyring({ type: 'sr25519' })
+    const alice = keyring.addFromUri('//Alice')
+
+    let invitedWorkerValue: any = api.createType(
+      'Option<WorkerId>',
+      invitedWorker
+    )
+
+    const txHash = await api.tx.storage
+      .createStorageBucket(
+        invitedWorkerValue,
+        allowedNewBags,
+        sizeLimit,
+        objectsLimit
+      )
+      .signAndSend(alice)
+
+    // Show the hash
+    console.log(`Submitted with hash ${txHash}`)
+  } catch (err) {
+    console.error(`Api Error: ${err}`)
+  }
+}
+
+async function createApi() {
+  const wsProvider = new WsProvider('ws://localhost:9944')
+  let extendedTypes = createExtendedTypes(types)
+
+  return await ApiPromise.create({ provider: wsProvider, types: extendedTypes })
+}
+
+function createExtendedTypes(defaultTypes: RegistryTypes) {
+  let extendedTypes = types
+  extendedTypes.StorageBucketId = {}
+  extendedTypes.BagId = {}
+  extendedTypes.UploadParameters = {}
+  extendedTypes.DynamicBagId = {}
+  extendedTypes.StorageBucketsPerBagValueConstraint = {}
+  extendedTypes.Voucher = {}
+  extendedTypes.DynamicBagType = {}
+  extendedTypes.DynamicBagCreationPolicy = {}
+  extendedTypes.DataObjectId = {}
+  extendedTypes.DynamicBag = {}
+  extendedTypes.StaticBag = {}
+  extendedTypes.StaticBag = {}
+  extendedTypes.StaticBagId = {}
+  extendedTypes.StorageBucket = {}
+
+  return extendedTypes
+}

+ 11 - 1
storage-node-v2/tsconfig.json

@@ -7,9 +7,19 @@
     "rootDir": "src",
     "strict": true,
     "target": "es2017",
-    "skipLibCheck": true
+    "skipLibCheck": true,
+    "baseUrl": ".",
+    "paths": {
+      "@polkadot/types/augment": ["../types/augment-codec/augment-types.ts"],
+    },
+    "esModuleInterop": true,
+    "types" : [ "node" ],
+    "noUnusedLocals": true,
+    "resolveJsonModule": true
   },
   "include": [
     "src/**/*"
   ]
 }
+
+

+ 6 - 1
storage-node-v2/yarn.lock

@@ -2690,6 +2690,11 @@ prelude-ls@~1.1.2:
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
   integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 
+prettier@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18"
+  integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==
+
 progress@^2.0.0:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
@@ -3056,7 +3061,7 @@ stdout-stderr@^0.1.9:
     "@oclif/config" "^1"
     "@oclif/plugin-help" "^3"
     "@polkadot/api" "4.2.1"
-    storage-node-v2 "file:../../../../Library/Caches/Yarn/v6/npm-storage-node-v2-0.1.0-c54f0bf0-9db2-4d8d-9d13-7f2f66b590e1-1621426883087/node_modules/storage-node-v2"
+    storage-node-v2 "file:../../../../Library/Caches/Yarn/v6/npm-storage-node-v2-0.1.0-9a7c099e-925a-46db-9cc9-8738470270a5-1621511115700/node_modules/storage-node-v2"
     tslib "^1"
 
 string-width@^2.1.0, string-width@^2.1.1: