@streamr/cli-tools 102.0.0-beta.0 → 102.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/streamr-internal-node-info.ts +81 -0
- package/bin/streamr-internal-operator-delegate.ts +18 -0
- package/bin/streamr-internal-operator-stake.ts +18 -0
- package/bin/streamr-internal-operator-undelegate.ts +17 -0
- package/bin/streamr-internal-operator-unstake.ts +16 -0
- package/bin/streamr-internal-show-sdk-config.ts +11 -0
- package/bin/streamr-internal-sponsorship-sponsor.ts +18 -0
- package/bin/streamr-internal-visualize-topology.ts +1 -1
- package/bin/streamr-internal.ts +7 -0
- package/bin/streamr-mock-data-generate.ts +26 -13
- package/bin/streamr-mock-data.ts +1 -1
- package/bin/streamr-storage-node-list-streams.ts +3 -3
- package/bin/streamr-stream-create.ts +1 -1
- package/bin/streamr-stream-publish.ts +22 -12
- package/bin/streamr-stream-search.ts +2 -2
- package/bin/streamr-stream-show.ts +10 -2
- package/bin/streamr-stream-subscribe.ts +1 -1
- package/bin/streamr-wallet-whoami.ts +1 -1
- package/dist/bin/streamr-internal-node-info.d.ts +5 -0
- package/dist/bin/streamr-internal-node-info.js +75 -0
- package/dist/bin/streamr-internal-node-info.js.map +1 -0
- package/dist/bin/streamr-internal-operator-delegate.d.ts +2 -0
- package/dist/bin/streamr-internal-operator-delegate.js +14 -0
- package/dist/bin/streamr-internal-operator-delegate.js.map +1 -0
- package/dist/bin/streamr-internal-operator-stake.d.ts +2 -0
- package/dist/bin/streamr-internal-operator-stake.js +15 -0
- package/dist/bin/streamr-internal-operator-stake.js.map +1 -0
- package/dist/bin/streamr-internal-operator-undelegate.d.ts +2 -0
- package/dist/bin/streamr-internal-operator-undelegate.js +14 -0
- package/dist/bin/streamr-internal-operator-undelegate.js.map +1 -0
- package/dist/bin/streamr-internal-operator-unstake.d.ts +2 -0
- package/dist/bin/streamr-internal-operator-unstake.js +14 -0
- package/dist/bin/streamr-internal-operator-unstake.js.map +1 -0
- package/dist/bin/streamr-internal-show-sdk-config.d.ts +2 -0
- package/dist/bin/streamr-internal-show-sdk-config.js +11 -0
- package/dist/bin/streamr-internal-show-sdk-config.js.map +1 -0
- package/dist/bin/streamr-internal-sponsorship-sponsor.d.ts +2 -0
- package/dist/bin/streamr-internal-sponsorship-sponsor.js +14 -0
- package/dist/bin/streamr-internal-sponsorship-sponsor.js.map +1 -0
- package/dist/bin/streamr-internal-visualize-topology.js +1 -1
- package/dist/bin/streamr-internal-visualize-topology.js.map +1 -1
- package/dist/bin/streamr-internal.js +7 -0
- package/dist/bin/streamr-internal.js.map +1 -1
- package/dist/bin/streamr-mock-data-generate.d.ts +10 -1
- package/dist/bin/streamr-mock-data-generate.js +29 -15
- package/dist/bin/streamr-mock-data-generate.js.map +1 -1
- package/dist/bin/streamr-mock-data.js +1 -1
- package/dist/bin/streamr-mock-data.js.map +1 -1
- package/dist/bin/streamr-storage-node-list-streams.js +3 -3
- package/dist/bin/streamr-storage-node-list-streams.js.map +1 -1
- package/dist/bin/streamr-stream-create.js +1 -1
- package/dist/bin/streamr-stream-create.js.map +1 -1
- package/dist/bin/streamr-stream-publish.js +21 -11
- package/dist/bin/streamr-stream-publish.js.map +1 -1
- package/dist/bin/streamr-stream-search.js +2 -2
- package/dist/bin/streamr-stream-search.js.map +1 -1
- package/dist/bin/streamr-stream-show.js +9 -2
- package/dist/bin/streamr-stream-show.js.map +1 -1
- package/dist/bin/streamr-stream-subscribe.js +1 -1
- package/dist/bin/streamr-stream-subscribe.js.map +1 -1
- package/dist/bin/streamr-wallet-whoami.js +1 -1
- package/dist/bin/streamr-wallet-whoami.js.map +1 -1
- package/dist/package.json +12 -8
- package/dist/src/client.d.ts +1 -1
- package/dist/src/client.js +3 -4
- package/dist/src/client.js.map +1 -1
- package/dist/src/command.d.ts +3 -3
- package/dist/src/command.js +3 -1
- package/dist/src/command.js.map +1 -1
- package/dist/src/common.d.ts +3 -0
- package/dist/src/common.js +20 -2
- package/dist/src/common.js.map +1 -1
- package/dist/src/permission.js +1 -1
- package/dist/src/permission.js.map +1 -1
- package/jest.config.ts +1 -0
- package/package.json +12 -8
- package/src/client.ts +3 -4
- package/src/command.ts +5 -3
- package/src/common.ts +18 -0
- package/src/permission.ts +1 -1
- package/test/environment.test.ts +32 -0
- package/test/internal-operator.test.ts +57 -0
- package/test/internal-sponsorship-sponsor.test.ts +28 -0
- package/test/mock-data.test.ts +14 -0
- package/test/storage-node.test.ts +3 -3
- package/test/stream-create.test.ts +1 -1
- package/test/stream-permission.test.ts +1 -1
- package/test/stream-publish-subscribe.test.ts +1 -1
- package/test/stream-resend.test.ts +1 -1
- package/test/utils.ts +5 -5
- package/tsconfig.json +1 -14
- package/tsconfig.node.json +16 -0
- package/.eslintignore +0 -2
- package/.eslintrc +0 -6
package/dist/src/permission.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/permission.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,sCAA4F;AAC5F,uCAA+C;AAE/C,MAAM,cAAc,GAAG,QAAQ,CAAA;AAElB,QAAA,WAAW,GAAG,IAAI,GAAG,CAA2B;IACzD,CAAC,WAAW,EAAE,sBAAgB,CAAC,SAAS,CAAC;IACzC,CAAC,SAAS,EAAE,sBAAgB,CAAC,OAAO,CAAC;IACrC,CAAC,MAAM,EAAE,sBAAgB,CAAC,IAAI,CAAC;IAC/B,CAAC,QAAQ,EAAE,sBAAgB,CAAC,MAAM,CAAC;IACnC,CAAC,OAAO,EAAE,sBAAgB,CAAC,KAAK,CAAC;CACpC,CAAC,CAAA;AAEK,MAAM,aAAa,GAAG,CAAC,EAAU,EAA4B,EAAE;IAClE,MAAM,MAAM,GAAG,mBAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,MAAM,CAAA;AACjB,CAAC,CAAA;AANY,QAAA,aAAa,iBAMzB;AAEM,MAAM,eAAe,GAAG,CAAC,UAA4B,EAAU,EAAE;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAE,CAAC,CAAC,CAAC,CAAA;AACrF,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B;AAEM,MAAM,2BAA2B,GAAG,CACvC,MAA2E,EAC3E,YAAoB,EAChB,EAAE;IACN,IAAA,6BAAmB,EAAC,KAAK,EAAE,MAAqB,EAAE,QAAgB,EAAE,IAAY,EAAE,aAAuB,EAAE,EAAE;QACzG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,WAAW,GAAuB,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAA,qBAAa,EAAC,YAAY,CAAC,CAAC,CAAA;QACxG,IAAI,UAAgC,CAAA;QACpC,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YAC1B,UAAU,GAAG;gBACT,WAAW;gBACX,MAAM,EAAE,IAAI;aACf,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,UAAU,GAAG;gBACT,WAAW;gBACX,IAAI;
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/permission.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,sCAA4F;AAC5F,uCAA+C;AAE/C,MAAM,cAAc,GAAG,QAAQ,CAAA;AAElB,QAAA,WAAW,GAAG,IAAI,GAAG,CAA2B;IACzD,CAAC,WAAW,EAAE,sBAAgB,CAAC,SAAS,CAAC;IACzC,CAAC,SAAS,EAAE,sBAAgB,CAAC,OAAO,CAAC;IACrC,CAAC,MAAM,EAAE,sBAAgB,CAAC,IAAI,CAAC;IAC/B,CAAC,QAAQ,EAAE,sBAAgB,CAAC,MAAM,CAAC;IACnC,CAAC,OAAO,EAAE,sBAAgB,CAAC,KAAK,CAAC;CACpC,CAAC,CAAA;AAEK,MAAM,aAAa,GAAG,CAAC,EAAU,EAA4B,EAAE;IAClE,MAAM,MAAM,GAAG,mBAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,MAAM,CAAA;AACjB,CAAC,CAAA;AANY,QAAA,aAAa,iBAMzB;AAEM,MAAM,eAAe,GAAG,CAAC,UAA4B,EAAU,EAAE;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAE,CAAC,CAAC,CAAC,CAAA;AACrF,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B;AAEM,MAAM,2BAA2B,GAAG,CACvC,MAA2E,EAC3E,YAAoB,EAChB,EAAE;IACN,IAAA,6BAAmB,EAAC,KAAK,EAAE,MAAqB,EAAE,QAAgB,EAAE,IAAY,EAAE,aAAuB,EAAE,EAAE;QACzG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,WAAW,GAAuB,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAA,qBAAa,EAAC,YAAY,CAAC,CAAC,CAAA;QACxG,IAAI,UAAgC,CAAA;QACpC,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YAC1B,UAAU,GAAG;gBACT,WAAW;gBACX,MAAM,EAAE,IAAI;aACf,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,UAAU,GAAG;gBACT,WAAW;gBACX,MAAM,EAAE,IAAI;aACf,CAAA;QACL,CAAC;QACD,MAAM,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACpC,CAAC,CAAC;SACG,WAAW,CAAC,IAAI,oBAAQ,CAAC,YAAY,CAAC,CAAC;SACvC,WAAW,CAAC,IAAI,oBAAQ,CAAC,QAAQ,CAAC,CAAC;SACnC,WAAW,CAAC,IAAI,oBAAQ,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACrF,WAAW,CAAC,GAAG,YAAY,kDAAkD,YAAY,sBAAsB,CAAC;SAChH,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA;AA1BY,QAAA,2BAA2B,+BA0BvC"}
|
package/jest.config.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../jest.config'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/cli-tools",
|
|
3
|
-
"version": "102.0.0-beta.
|
|
3
|
+
"version": "102.0.0-beta.2",
|
|
4
4
|
"description": "Command line tools for Streamr",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"streamr": "dist/bin/streamr.js"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc -b tsconfig.json",
|
|
14
|
+
"build": "tsc -b tsconfig.node.json",
|
|
15
15
|
"check": "tsc -p ./tsconfig.jest.json",
|
|
16
16
|
"clean": "jest --clearCache || true; rm -rf dist *.tsbuildinfo node_modules/.cache || true",
|
|
17
17
|
"eslint": "eslint --cache --cache-location=node_modules/.cache/.eslintcache/ '*/**/*.{js,ts}'",
|
|
@@ -26,19 +26,23 @@
|
|
|
26
26
|
"author": "Streamr Network AG <contact@streamr.com>",
|
|
27
27
|
"license": "AGPL-3.0",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@streamr/
|
|
30
|
-
"@streamr/
|
|
31
|
-
"
|
|
29
|
+
"@streamr/dht": "102.0.0-beta.2",
|
|
30
|
+
"@streamr/sdk": "102.0.0-beta.2",
|
|
31
|
+
"@streamr/trackerless-network": "102.0.0-beta.2",
|
|
32
|
+
"@streamr/utils": "102.0.0-beta.2",
|
|
33
|
+
"commander": "^13.1.0",
|
|
32
34
|
"easy-table": "^1.1.1",
|
|
33
35
|
"ethers": "^6.13.0",
|
|
34
36
|
"event-stream": "^4.0.1",
|
|
35
|
-
"lodash": "^4.17.21"
|
|
37
|
+
"lodash": "^4.17.21",
|
|
38
|
+
"semver": "^7.6.3"
|
|
36
39
|
},
|
|
37
40
|
"devDependencies": {
|
|
38
|
-
"@streamr/test-utils": "102.0.0-beta.
|
|
41
|
+
"@streamr/test-utils": "102.0.0-beta.2",
|
|
39
42
|
"@types/event-stream": "^4.0.5",
|
|
40
|
-
"@types/lodash": "^4.17.
|
|
43
|
+
"@types/lodash": "^4.17.14",
|
|
41
44
|
"@types/merge2": "^1.4.4",
|
|
45
|
+
"@types/semver": "^7.5.8",
|
|
42
46
|
"merge2": "^1.4.1"
|
|
43
47
|
}
|
|
44
48
|
}
|
package/src/client.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { StreamrClient, StreamrClientConfig } from '@streamr/sdk'
|
|
2
2
|
import merge from 'lodash/merge'
|
|
3
|
-
import { StreamrClientConfig, StreamrClient, CONFIG_TEST } from '@streamr/sdk'
|
|
4
3
|
import { Options } from './command'
|
|
5
4
|
import { getConfig } from './config'
|
|
6
5
|
|
|
7
6
|
export const getClientConfig = (commandOptions: Options, overridenOptions: StreamrClientConfig = {}): StreamrClientConfig => {
|
|
8
|
-
const environmentOptions = commandOptions.dev ? omit(CONFIG_TEST, 'auth') : undefined
|
|
9
7
|
const configFileJson = getConfig(commandOptions.config)?.client
|
|
8
|
+
const environmentOptions = { environment: commandOptions.env }
|
|
10
9
|
const authenticationOptions = (commandOptions.privateKey !== undefined) ? { auth: { privateKey: commandOptions.privateKey } } : undefined
|
|
11
10
|
return merge(
|
|
12
|
-
environmentOptions,
|
|
13
11
|
configFileJson,
|
|
12
|
+
environmentOptions,
|
|
14
13
|
authenticationOptions,
|
|
15
14
|
overridenOptions
|
|
16
15
|
)
|
package/src/command.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { DEFAULT_ENVIRONMENT_ID, ENVIRONMENT_IDS, EnvironmentId, StreamrClientConfig } from '@streamr/sdk'
|
|
1
2
|
import commander, { Command } from 'commander'
|
|
2
|
-
import { StreamrClientConfig } from '@streamr/sdk'
|
|
3
3
|
import pkg from '../package.json'
|
|
4
4
|
import { createClient } from './client'
|
|
5
|
+
import { createFnParseEnum, formEnumArgValueDescription } from './common'
|
|
5
6
|
|
|
6
7
|
export interface Options {
|
|
7
8
|
privateKey?: string
|
|
8
9
|
config?: string
|
|
9
|
-
|
|
10
|
+
env?: EnvironmentId
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export const createCommand = (): commander.Command => {
|
|
@@ -31,7 +32,8 @@ export const createClientCommand = (
|
|
|
31
32
|
return createCommand()
|
|
32
33
|
.option('--private-key <key>', 'use an Ethereum private key to authenticate')
|
|
33
34
|
.option('--config <file>', 'read connection and authentication settings from a config file')
|
|
34
|
-
.option('--
|
|
35
|
+
.option('--env <environmentId>', `use pre-defined environment (${formEnumArgValueDescription(ENVIRONMENT_IDS, DEFAULT_ENVIRONMENT_ID)})`,
|
|
36
|
+
createFnParseEnum('env', ENVIRONMENT_IDS))
|
|
35
37
|
.action(async (...args: any[]) => {
|
|
36
38
|
const commandOptions = args[args.length - 1].opts()
|
|
37
39
|
try {
|
package/src/common.ts
CHANGED
|
@@ -23,3 +23,21 @@ export function createFnParseInt(name: string): (s: string) => number {
|
|
|
23
23
|
return n
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
export function createFnParseEnum(name: string, allowedValues: string[]): (s: string) => string {
|
|
28
|
+
return (value: string) => {
|
|
29
|
+
if (!allowedValues.includes(value)) {
|
|
30
|
+
console.error(`${name} must be one of: ${allowedValues.map((s) => wrapWithQuotes(s)).join(', ')}`)
|
|
31
|
+
process.exit(1)
|
|
32
|
+
}
|
|
33
|
+
return value
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const formEnumArgValueDescription = (allowedValues: string[], defaultValue: string): string => {
|
|
38
|
+
return `one of: ${allowedValues.map(wrapWithQuotes).join(', ')}, default: ${wrapWithQuotes(defaultValue)}`
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const wrapWithQuotes = (str: string): string => {
|
|
42
|
+
return `"${str}"`
|
|
43
|
+
}
|
package/src/permission.ts
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { randomString } from '@streamr/utils'
|
|
2
|
+
import fs from 'fs/promises'
|
|
3
|
+
import { runCommand } from './utils'
|
|
4
|
+
import { StreamrClientConfig } from '@streamr/sdk'
|
|
5
|
+
|
|
6
|
+
const POLYGON_AMOY_CHAIN_ID = 80002
|
|
7
|
+
|
|
8
|
+
describe('env command line option', () => {
|
|
9
|
+
|
|
10
|
+
it('takes precedence over client.environment config', async () => {
|
|
11
|
+
const configFileName = `test-${randomString(10)}.json`
|
|
12
|
+
await fs.writeFile(configFileName, JSON.stringify({
|
|
13
|
+
client: {
|
|
14
|
+
environment: 'dev2'
|
|
15
|
+
}
|
|
16
|
+
}))
|
|
17
|
+
const outputLines = await runCommand(`internal show-sdk-config --env polygonAmoy --config ${configFileName}`, {
|
|
18
|
+
devEnvironment: false
|
|
19
|
+
})
|
|
20
|
+
const outputJson: StreamrClientConfig = JSON.parse(outputLines.join(''))
|
|
21
|
+
await fs.unlink(configFileName)
|
|
22
|
+
expect(outputJson.contracts!.ethereumNetwork!.chainId).toBe(POLYGON_AMOY_CHAIN_ID)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it('invalid value', async () => {
|
|
26
|
+
const outputLines = await runCommand('stream show foobar --env invalid-environment', {
|
|
27
|
+
devEnvironment: false
|
|
28
|
+
})
|
|
29
|
+
expect(outputLines).toHaveLength(1)
|
|
30
|
+
expect(outputLines[0]).toEqual('env must be one of: "polygon", "polygonAmoy", "dev2"')
|
|
31
|
+
}, 60 * 1000)
|
|
32
|
+
})
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { _operatorContractUtils } from '@streamr/sdk'
|
|
2
|
+
import { fetchPrivateKeyWithGas, generateWalletWithGasAndTokens } from '@streamr/test-utils'
|
|
3
|
+
import { createTestClient, runCommand } from './utils'
|
|
4
|
+
import { parseEther, Wallet } from 'ethers'
|
|
5
|
+
import { wait } from '@streamr/utils'
|
|
6
|
+
|
|
7
|
+
const DELEGATION_AMOUNT = '20000'
|
|
8
|
+
const STAKE_AMOUNT = '10000'
|
|
9
|
+
const SELF_DELEGATION_AMOUNT = '100000'
|
|
10
|
+
const MINIMUM_DELEGATION_SECONDS = 1 // the config value defined in StreamrEnvDeployer in network-contracts repo
|
|
11
|
+
|
|
12
|
+
describe('operator', () => {
|
|
13
|
+
|
|
14
|
+
it('happy path', async () => {
|
|
15
|
+
const client = createTestClient(await fetchPrivateKeyWithGas())
|
|
16
|
+
const stream = await client.createStream('/test')
|
|
17
|
+
const sponsorshipContract = await _operatorContractUtils.deploySponsorshipContract({
|
|
18
|
+
streamId: stream.id,
|
|
19
|
+
deployer: new Wallet(await fetchPrivateKeyWithGas()).connect(_operatorContractUtils.getProvider())
|
|
20
|
+
})
|
|
21
|
+
const sponsorshipAddress: string = await sponsorshipContract.getAddress()
|
|
22
|
+
const operator = await generateWalletWithGasAndTokens()
|
|
23
|
+
const operatorContract = await _operatorContractUtils.deployOperatorContract({
|
|
24
|
+
deployer: operator
|
|
25
|
+
})
|
|
26
|
+
await _operatorContractUtils.delegate(operator, await operatorContract.getAddress(), parseEther(SELF_DELEGATION_AMOUNT))
|
|
27
|
+
const delegator = await generateWalletWithGasAndTokens()
|
|
28
|
+
const operatorAddress: string = await operatorContract.getAddress()
|
|
29
|
+
|
|
30
|
+
// delegate
|
|
31
|
+
await runCommand(`internal operator-delegate ${operatorAddress} ${DELEGATION_AMOUNT}`, {
|
|
32
|
+
privateKey: delegator.privateKey
|
|
33
|
+
})
|
|
34
|
+
expect(await operatorContract.balanceInData(await delegator.getAddress())).toEqual(parseEther(DELEGATION_AMOUNT))
|
|
35
|
+
|
|
36
|
+
// stake
|
|
37
|
+
await runCommand(`internal operator-stake ${operatorAddress} ${sponsorshipAddress} ${STAKE_AMOUNT}`, {
|
|
38
|
+
privateKey: operator.privateKey
|
|
39
|
+
})
|
|
40
|
+
expect(await operatorContract.totalStakedIntoSponsorshipsWei()).toEqual(parseEther(STAKE_AMOUNT))
|
|
41
|
+
|
|
42
|
+
// unstake
|
|
43
|
+
await runCommand(`internal operator-unstake ${operatorAddress} ${sponsorshipAddress}`, {
|
|
44
|
+
privateKey: operator.privateKey
|
|
45
|
+
})
|
|
46
|
+
expect(await operatorContract.totalStakedIntoSponsorshipsWei()).toEqual(0n)
|
|
47
|
+
|
|
48
|
+
// undelegate
|
|
49
|
+
await wait(MINIMUM_DELEGATION_SECONDS)
|
|
50
|
+
await runCommand(`internal operator-undelegate ${operatorAddress} ${DELEGATION_AMOUNT}`, {
|
|
51
|
+
privateKey: delegator.privateKey
|
|
52
|
+
})
|
|
53
|
+
expect(await operatorContract.balanceInData(await delegator.getAddress())).toEqual(0n)
|
|
54
|
+
|
|
55
|
+
await client.destroy()
|
|
56
|
+
}, 30 * 1000)
|
|
57
|
+
})
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { _operatorContractUtils } from '@streamr/sdk'
|
|
2
|
+
import { fetchPrivateKeyWithGas, generateWalletWithGasAndTokens } from '@streamr/test-utils'
|
|
3
|
+
import { createTestClient, runCommand } from './utils'
|
|
4
|
+
import { parseEther, Wallet } from 'ethers'
|
|
5
|
+
|
|
6
|
+
const SPONSOR_AMOUNT = '12345'
|
|
7
|
+
|
|
8
|
+
describe('sponsorship-sponsor', () => {
|
|
9
|
+
|
|
10
|
+
it('happy path', async () => {
|
|
11
|
+
const client = createTestClient(await fetchPrivateKeyWithGas())
|
|
12
|
+
const stream = await client.createStream('/test')
|
|
13
|
+
const sponsorshipContract = await _operatorContractUtils.deploySponsorshipContract({
|
|
14
|
+
streamId: stream.id,
|
|
15
|
+
deployer: new Wallet(await fetchPrivateKeyWithGas()).connect(_operatorContractUtils.getProvider())
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const sponsorer = await generateWalletWithGasAndTokens()
|
|
19
|
+
const sponsorshipAddress: string = await sponsorshipContract.getAddress()
|
|
20
|
+
await runCommand(`internal sponsorship-sponsor ${sponsorshipAddress} ${SPONSOR_AMOUNT}`, {
|
|
21
|
+
privateKey: sponsorer.privateKey
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const remainingWei = await sponsorshipContract.connect(sponsorer, _operatorContractUtils.getProvider()).remainingWei()
|
|
25
|
+
expect(remainingWei).toEqual(parseEther(SPONSOR_AMOUNT))
|
|
26
|
+
await client.destroy()
|
|
27
|
+
})
|
|
28
|
+
})
|
package/test/mock-data.test.ts
CHANGED
|
@@ -16,4 +16,18 @@ describe('mock-data', () => {
|
|
|
16
16
|
expect(json).toBeObject()
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
+
it('generate binary', async () => {
|
|
20
|
+
const abortController = new AbortController()
|
|
21
|
+
const outputIterable = startCommand('mock-data generate --binary --min-length 32 --max-length 64', {
|
|
22
|
+
abortSignal: abortController.signal,
|
|
23
|
+
devEnvironment: false
|
|
24
|
+
})
|
|
25
|
+
const firstLine = (await collect(outputIterable, 1))[0]
|
|
26
|
+
abortController.abort()
|
|
27
|
+
expect(firstLine).toMatch(/^[0-9a-f]+$/)
|
|
28
|
+
const lengthInBytes = firstLine.length / 2
|
|
29
|
+
expect(lengthInBytes).toBeGreaterThanOrEqual(32)
|
|
30
|
+
expect(lengthInBytes).toBeLessThanOrEqual(64)
|
|
31
|
+
})
|
|
32
|
+
|
|
19
33
|
})
|
|
@@ -2,7 +2,7 @@ import { fetchPrivateKeyWithGas } from '@streamr/test-utils'
|
|
|
2
2
|
import 'jest-extended'
|
|
3
3
|
import { StreamID } from '@streamr/sdk'
|
|
4
4
|
import { DOCKER_DEV_STORAGE_NODE, createTestClient, runCommand } from './utils'
|
|
5
|
-
import {
|
|
5
|
+
import { until } from '@streamr/utils'
|
|
6
6
|
|
|
7
7
|
const isStored = async (streamId: StreamID): Promise<boolean> => {
|
|
8
8
|
const output = await runCommand(`storage-node list-streams ${DOCKER_DEV_STORAGE_NODE}`)
|
|
@@ -19,11 +19,11 @@ describe('storage node', () => {
|
|
|
19
19
|
await runCommand(`storage-node add-stream ${DOCKER_DEV_STORAGE_NODE} ${stream.id}`, {
|
|
20
20
|
privateKey
|
|
21
21
|
})
|
|
22
|
-
await
|
|
22
|
+
await until(async () => await isStored(stream.id) === true, 15 * 1000, 1000)
|
|
23
23
|
await runCommand(`storage-node remove-stream ${DOCKER_DEV_STORAGE_NODE} ${stream.id}`, {
|
|
24
24
|
privateKey
|
|
25
25
|
})
|
|
26
|
-
await
|
|
26
|
+
await until(async () => await isStored(stream.id) === false, 15 * 1000, 1000)
|
|
27
27
|
}, 80 * 1000)
|
|
28
28
|
|
|
29
29
|
it('list nodes', async () => {
|
|
@@ -19,7 +19,7 @@ describe('create stream', () => {
|
|
|
19
19
|
})
|
|
20
20
|
const client = createTestClient()
|
|
21
21
|
const stream = await client.getStream(streamId)
|
|
22
|
-
expect(stream.
|
|
22
|
+
expect(await stream.getPartitionCount()).toBe(1)
|
|
23
23
|
await client.destroy()
|
|
24
24
|
}, 20 * 1000)
|
|
25
25
|
|
|
@@ -11,7 +11,7 @@ describe('permission', () => {
|
|
|
11
11
|
const stream = await client.createStream(`/${Date.now()}`)
|
|
12
12
|
const otherUser = randomUserId()
|
|
13
13
|
const hasPermission = () => client.hasPermission({
|
|
14
|
-
|
|
14
|
+
userId: otherUser,
|
|
15
15
|
permission: StreamPermission.PUBLISH,
|
|
16
16
|
streamId: stream.id,
|
|
17
17
|
allowPublic: false
|
|
@@ -18,7 +18,7 @@ describe('publish and subscribe', () => {
|
|
|
18
18
|
const client = createTestClient(publisherPrivateKey)
|
|
19
19
|
const stream = await client.createStream(`/${Date.now()}`)
|
|
20
20
|
await stream.grantPermissions({
|
|
21
|
-
|
|
21
|
+
userId: new Wallet(subscriberPrivateKey).address,
|
|
22
22
|
permissions: [StreamPermission.SUBSCRIBE]
|
|
23
23
|
})
|
|
24
24
|
streamId = stream.id
|
|
@@ -18,7 +18,7 @@ describe('resend stream', () => {
|
|
|
18
18
|
privateKey = await fetchPrivateKeyWithGas()
|
|
19
19
|
const client = createTestClient(privateKey)
|
|
20
20
|
stream = await client.createStream(`/${Date.now()}`)
|
|
21
|
-
await stream.addToStorageNode(DOCKER_DEV_STORAGE_NODE)
|
|
21
|
+
await stream.addToStorageNode(DOCKER_DEV_STORAGE_NODE, { wait: true })
|
|
22
22
|
for (const msgId of range(10)) {
|
|
23
23
|
await wait(10) // to prevent duplicate timestamps (to make test assertions simpler)
|
|
24
24
|
const msg = await stream.publish({ msgId })
|
package/test/utils.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Stream, StreamrClient } from '@streamr/sdk'
|
|
2
|
+
import { collect, until } from '@streamr/utils'
|
|
2
3
|
import { spawn } from 'child_process'
|
|
3
4
|
import merge2 from 'merge2'
|
|
4
|
-
import { CONFIG_TEST, Stream, StreamrClient } from '@streamr/sdk'
|
|
5
5
|
|
|
6
6
|
export const DOCKER_DEV_STORAGE_NODE = '0xde1112f631486CfC759A50196853011528bC5FA0'
|
|
7
7
|
|
|
@@ -24,7 +24,7 @@ export async function* startCommand(commandLine: string, opts?: StartCommandOpti
|
|
|
24
24
|
args.push('--private-key', opts.privateKey)
|
|
25
25
|
}
|
|
26
26
|
if (opts?.devEnvironment !== false) {
|
|
27
|
-
args.push('--
|
|
27
|
+
args.push('--env', 'dev2')
|
|
28
28
|
}
|
|
29
29
|
const executable = spawn(`node`, args, {
|
|
30
30
|
signal: opts?.abortSignal,
|
|
@@ -69,13 +69,13 @@ async function* lines(src: AsyncIterable<Buffer>): AsyncGenerator<string, any, a
|
|
|
69
69
|
|
|
70
70
|
export const createTestClient = (privateKey?: string): StreamrClient => {
|
|
71
71
|
return new StreamrClient({
|
|
72
|
-
|
|
72
|
+
environment: 'dev2',
|
|
73
73
|
auth: (privateKey !== undefined) ? { privateKey } : undefined
|
|
74
74
|
})
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export const waitForTheGraphToHaveIndexed = async (stream: Stream, client: StreamrClient): Promise<void> => {
|
|
78
|
-
await
|
|
78
|
+
await until(async () => {
|
|
79
79
|
// eslint-disable-next-line no-underscore-dangle
|
|
80
80
|
for await (const _msg of client.searchStreams(stream.id, undefined)) {
|
|
81
81
|
return true
|
package/tsconfig.json
CHANGED
|
@@ -1,16 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends": "
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"composite": true,
|
|
5
|
-
"outDir": "dist"
|
|
6
|
-
},
|
|
7
|
-
"include": [
|
|
8
|
-
"package.json",
|
|
9
|
-
"src/**/*",
|
|
10
|
-
"bin/**/*"
|
|
11
|
-
],
|
|
12
|
-
"references": [
|
|
13
|
-
{ "path": "../utils/tsconfig.node.json" },
|
|
14
|
-
{ "path": "../sdk/tsconfig.node.json" }
|
|
15
|
-
]
|
|
2
|
+
"extends": "./tsconfig.jest.json"
|
|
16
3
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.node.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"composite": true,
|
|
5
|
+
"outDir": "dist"
|
|
6
|
+
},
|
|
7
|
+
"include": [
|
|
8
|
+
"package.json",
|
|
9
|
+
"src/**/*",
|
|
10
|
+
"bin/**/*"
|
|
11
|
+
],
|
|
12
|
+
"references": [
|
|
13
|
+
{ "path": "../utils/tsconfig.node.json" },
|
|
14
|
+
{ "path": "../sdk/tsconfig.node.json" }
|
|
15
|
+
]
|
|
16
|
+
}
|
package/.eslintignore
DELETED