Skip to content

Commit e48f76c

Browse files
author
Leszek Wiesner
authored
Merge pull request #4727 from zeeshanakram3/ephesus_updateFromMaster
Ephesus: Update from `master`
2 parents 96a83c5 + cb14bfa commit e48f76c

32 files changed

Lines changed: 928 additions & 85 deletions

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,6 @@ runtime-inputs/
4545

4646
.my_setup
4747

48-
devops/infrastructure
48+
devops/infrastructure
49+
50+
joystream.tar.gz

RUNTIME-CONTRIBUTING.md

Lines changed: 339 additions & 0 deletions
Large diffs are not rendered by default.

cli/README.md

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ $ npm install -g @joystream/cli
2626
$ joystream-cli COMMAND
2727
running command...
2828
$ joystream-cli (-v|--version|version)
29-
@joystream/cli/1.2.0 darwin-x64 node-v14.16.1
29+
@joystream/cli/1.2.0 darwin-x64 node-v14.18.0
3030
$ joystream-cli --help [COMMAND]
3131
USAGE
3232
$ joystream-cli COMMAND
@@ -175,6 +175,9 @@ When using the CLI for the first time there are a few common steps you might wan
175175
- [`joystream-cli membership:updateAccounts`](#joystream-cli-membershipupdateaccounts)
176176
- [`joystream-cli sign-offline:signUnsignedTx`](#joystream-cli-sign-offlinesignunsignedtx)
177177
- [`joystream-cli staking:validate`](#joystream-cli-stakingvalidate)
178+
- [`joystream-cli util:decodeMessage`](#joystream-cli-utildecodemessage)
179+
- [`joystream-cli util:encodeMessage`](#joystream-cli-utilencodemessage)
180+
- [`joystream-cli util:messageStructure`](#joystream-cli-utilmessagestructure)
178181
- [`joystream-cli working-groups:application WGAPPLICATIONID`](#joystream-cli-working-groupsapplication-wgapplicationid)
179182
- [`joystream-cli working-groups:apply`](#joystream-cli-working-groupsapply)
180183
- [`joystream-cli working-groups:cancelOpening OPENINGID`](#joystream-cli-working-groupscancelopening-openingid)
@@ -2106,6 +2109,84 @@ OPTIONS
21062109

21072110
_See code: [src/commands/staking/validate.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/staking/validate.ts)_
21082111

2112+
## `joystream-cli util:decodeMessage`
2113+
2114+
Decode a protobuf message (from hex to json)
2115+
2116+
```
2117+
USAGE
2118+
$ joystream-cli util:decodeMessage
2119+
2120+
OPTIONS
2121+
--hex=hex
2122+
(required) Hex-encoded protobuf message'
2123+
2124+
--type=(AppActionMetadata|AppAction|BountyMetadata|BountyWorkData|ChannelMetadata|ChannelPayoutsMetadata|CouncilCandid
2125+
acyNoteMetadata|ForumPostMetadata|ForumThreadMetadata|MembershipMetadata|ReactVideo|ReactComment|CreateComment|EditCom
2126+
ment|DeleteComment|PinOrUnpinComment|ModerateComment|BanOrUnbanMemberFromChannel|VideoReactionsPreference|CreateVideoC
2127+
ategory|MakeChannelPayment|AppMetadata|CreateApp|UpdateApp|MemberRemarked|ChannelModeratorRemarked|ChannelOwnerRemarke
2128+
d|PersonMetadata|ProposalsDiscussionPostMetadata|SeriesMetadata|SeasonMetadata|GeoCoordiantes|NodeLocationMetadata|Sto
2129+
rageBucketOperatorMetadata|DistributionBucketOperatorMetadata|GeographicalArea|DistributionBucketFamilyMetadata|Publis
2130+
hedBeforeJoystream|License|MediaType|SubtitleMetadata|VideoMetadata|ContentMetadata|OpeningMetadata|UpcomingOpeningMet
2131+
adata|ApplicationMetadata|WorkingGroupMetadata|SetGroupMetadata|AddUpcomingOpening|RemoveUpcomingOpening|WorkingGroupM
2132+
etadataAction|ModeratePost|RemarkMetadataAction)
2133+
Type of the message
2134+
```
2135+
2136+
_See code: [src/commands/util/decodeMessage.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/util/decodeMessage.ts)_
2137+
2138+
## `joystream-cli util:encodeMessage`
2139+
2140+
Encode a protobuf message (from json to hex)
2141+
2142+
```
2143+
USAGE
2144+
$ joystream-cli util:encodeMessage
2145+
2146+
OPTIONS
2147+
-i, --input=input
2148+
Path to a file containing a JSON-encoded message
2149+
2150+
--jsonString=jsonString
2151+
JSON-encoded message input (eg. '{"videoId":1}'
2152+
2153+
--type=(AppActionMetadata|AppAction|BountyMetadata|BountyWorkData|ChannelMetadata|ChannelPayoutsMetadata|CouncilCandid
2154+
acyNoteMetadata|ForumPostMetadata|ForumThreadMetadata|MembershipMetadata|ReactVideo|ReactComment|CreateComment|EditCom
2155+
ment|DeleteComment|PinOrUnpinComment|ModerateComment|BanOrUnbanMemberFromChannel|VideoReactionsPreference|CreateVideoC
2156+
ategory|MakeChannelPayment|AppMetadata|CreateApp|UpdateApp|MemberRemarked|ChannelModeratorRemarked|ChannelOwnerRemarke
2157+
d|PersonMetadata|ProposalsDiscussionPostMetadata|SeriesMetadata|SeasonMetadata|GeoCoordiantes|NodeLocationMetadata|Sto
2158+
rageBucketOperatorMetadata|DistributionBucketOperatorMetadata|GeographicalArea|DistributionBucketFamilyMetadata|Publis
2159+
hedBeforeJoystream|License|MediaType|SubtitleMetadata|VideoMetadata|ContentMetadata|OpeningMetadata|UpcomingOpeningMet
2160+
adata|ApplicationMetadata|WorkingGroupMetadata|SetGroupMetadata|AddUpcomingOpening|RemoveUpcomingOpening|WorkingGroupM
2161+
etadataAction|ModeratePost|RemarkMetadataAction)
2162+
Type of the message
2163+
```
2164+
2165+
_See code: [src/commands/util/encodeMessage.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/util/encodeMessage.ts)_
2166+
2167+
## `joystream-cli util:messageStructure`
2168+
2169+
Show message structure (available fields, their types and indexes)
2170+
2171+
```
2172+
USAGE
2173+
$ joystream-cli util:messageStructure
2174+
2175+
OPTIONS
2176+
--type=(AppActionMetadata|AppAction|BountyMetadata|BountyWorkData|ChannelMetadata|ChannelPayoutsMetadata|CouncilCandid
2177+
acyNoteMetadata|ForumPostMetadata|ForumThreadMetadata|MembershipMetadata|ReactVideo|ReactComment|CreateComment|EditCom
2178+
ment|DeleteComment|PinOrUnpinComment|ModerateComment|BanOrUnbanMemberFromChannel|VideoReactionsPreference|CreateVideoC
2179+
ategory|MakeChannelPayment|AppMetadata|CreateApp|UpdateApp|MemberRemarked|ChannelModeratorRemarked|ChannelOwnerRemarke
2180+
d|PersonMetadata|ProposalsDiscussionPostMetadata|SeriesMetadata|SeasonMetadata|GeoCoordiantes|NodeLocationMetadata|Sto
2181+
rageBucketOperatorMetadata|DistributionBucketOperatorMetadata|GeographicalArea|DistributionBucketFamilyMetadata|Publis
2182+
hedBeforeJoystream|License|MediaType|SubtitleMetadata|VideoMetadata|ContentMetadata|OpeningMetadata|UpcomingOpeningMet
2183+
adata|ApplicationMetadata|WorkingGroupMetadata|SetGroupMetadata|AddUpcomingOpening|RemoveUpcomingOpening|WorkingGroupM
2184+
etadataAction|ModeratePost|RemarkMetadataAction)
2185+
Type of the message
2186+
```
2187+
2188+
_See code: [src/commands/util/messageStructure.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/util/messageStructure.ts)_
2189+
21092190
## `joystream-cli working-groups:application WGAPPLICATIONID`
21102191

21112192
Shows an overview of given application by Working Group Application ID

cli/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@
143143
},
144144
"sign-offline": {
145145
"description": "Sign unsigned transactions, created with 'advanced-transactions', offline"
146+
},
147+
"util": {
148+
"description": "General Joystream utilities"
146149
}
147150
}
148151
},
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { flags } from '@oclif/command'
2+
import * as allMessages from '@joystream/metadata-protobuf'
3+
import allMessagesJson from '@joystream/metadata-protobuf/json'
4+
import { AnyMetadataClass } from '@joystream/metadata-protobuf/types'
5+
import DefaultCommandBase from './DefaultCommandBase'
6+
7+
type MessageTypeName = keyof typeof allMessages & keyof typeof allMessagesJson & string
8+
9+
/**
10+
* Abstract base class for commands that require a single protobuf message context.
11+
*/
12+
export default abstract class ProtobufMessageCommandBase extends DefaultCommandBase {
13+
protected MessageClass!: AnyMetadataClass<unknown>
14+
protected messageJson!: Record<string, unknown>
15+
protected type!: keyof typeof allMessages
16+
17+
static flags = {
18+
type: flags.enum<MessageTypeName>({
19+
options: Object.keys(allMessages) as MessageTypeName[],
20+
required: false,
21+
description: 'Type of the message',
22+
}),
23+
}
24+
25+
async init(): Promise<void> {
26+
await super.init()
27+
let {
28+
flags: { type },
29+
} = this.parse(this.constructor as typeof ProtobufMessageCommandBase)
30+
31+
if (!type) {
32+
type = await this.promptForMessageType()
33+
}
34+
35+
this.type = type
36+
this.messageJson = allMessagesJson[type]
37+
this.MessageClass = allMessages[type]
38+
}
39+
40+
async promptForMessageType(message = 'Choose a message type'): Promise<MessageTypeName> {
41+
return this.simplePrompt<MessageTypeName>({
42+
type: 'list',
43+
choices: Object.keys(allMessages)
44+
.sort()
45+
.map((c) => ({
46+
value: c,
47+
name: c,
48+
})),
49+
message,
50+
})
51+
}
52+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { flags } from '@oclif/command'
2+
import { hexToU8a, isHex } from '@polkadot/util'
3+
import ExitCodes from '../../ExitCodes'
4+
import { metaToObject } from '@joystream/metadata-protobuf/utils'
5+
import ProtobufMessageCommandBase from '../../base/ProtobufMessageCommandBase'
6+
7+
export default class DecodeMessageCommand extends ProtobufMessageCommandBase {
8+
static description = 'Decode a protobuf message (from hex to json)'
9+
10+
static flags = {
11+
...super.flags,
12+
hex: flags.string({
13+
required: true,
14+
description: `Hex-encoded protobuf message'`,
15+
}),
16+
}
17+
18+
async run(): Promise<void> {
19+
const { hex } = this.parse(DecodeMessageCommand).flags
20+
if (!isHex(hex)) {
21+
this.error('Invalid hex string provided', { exit: ExitCodes.InvalidInput })
22+
}
23+
const jsonObj = metaToObject(this.MessageClass, this.MessageClass.decode(hexToU8a(hex)))
24+
this.jsonPrettyPrint(JSON.stringify(jsonObj))
25+
26+
this.output(JSON.stringify(jsonObj))
27+
}
28+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { flags } from '@oclif/command'
2+
import { metadataToBytes } from '../../helpers/serialization'
3+
import { getInputJson } from '../../helpers/InputOutput'
4+
import ExitCodes from '../../ExitCodes'
5+
import ProtobufMessageCommandBase from '../../base/ProtobufMessageCommandBase'
6+
7+
export default class EncodeMessageCommand extends ProtobufMessageCommandBase {
8+
static description = 'Encode a protobuf message (from json to hex)'
9+
10+
static flags = {
11+
...super.flags,
12+
jsonString: flags.string({
13+
required: false,
14+
description: `JSON-encoded message input (eg. '${JSON.stringify({ videoId: 1 })}'`,
15+
exclusive: ['input'],
16+
}),
17+
input: flags.string({
18+
char: 'i',
19+
required: false,
20+
description: `Path to a file containing a JSON-encoded message`,
21+
exclusive: ['jsonString'],
22+
}),
23+
}
24+
25+
async run(): Promise<void> {
26+
const { jsonString, input } = this.parse(EncodeMessageCommand).flags
27+
const jsonObj = input
28+
? await getInputJson(input)
29+
: jsonString
30+
? JSON.parse(jsonString)
31+
: this.error('Either --input or --jsonString must be provided!', { exit: ExitCodes.InvalidInput })
32+
const bytes = metadataToBytes(this.MessageClass, jsonObj)
33+
34+
this.output(bytes.toHex())
35+
}
36+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import ProtobufMessageCommandBase from '../../base/ProtobufMessageCommandBase'
2+
3+
export default class MessageStructureCommand extends ProtobufMessageCommandBase {
4+
static description = 'Show message structure (available fields, their types and indexes)'
5+
static flags = { ...super.flags }
6+
7+
async run(): Promise<void> {
8+
this.output(JSON.stringify(this.messageJson, null, 4))
9+
}
10+
}

metadata-protobuf/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
node_modules/
22
lib/
33
compiled/
4+
src/json/*.json

metadata-protobuf/.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ lib/
22
doc/
33
proto/
44
compiled/
5+
src/json/messages.json

0 commit comments

Comments
 (0)