@streamr/cli-tools 101.1.2 → 102.0.0-beta.1
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-add-stream.ts +1 -0
- package/bin/streamr-storage-node-list-streams.ts +4 -3
- package/bin/streamr-storage-node-list.ts +1 -0
- package/bin/streamr-storage-node-remove-stream.ts +1 -0
- package/bin/streamr-stream-create.ts +2 -1
- package/bin/streamr-stream-grant-permission.ts +1 -0
- package/bin/streamr-stream-publish.ts +24 -12
- package/bin/streamr-stream-resend-from.ts +1 -0
- package/bin/streamr-stream-resend-last.ts +1 -0
- package/bin/streamr-stream-resend-range.ts +1 -0
- package/bin/streamr-stream-resend.ts +1 -0
- package/bin/streamr-stream-revoke-permission.ts +1 -0
- package/bin/streamr-stream-search.ts +3 -2
- package/bin/streamr-stream-show.ts +11 -2
- package/bin/streamr-stream-subscribe.ts +2 -1
- package/bin/streamr-wallet-whoami.ts +2 -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-add-stream.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-storage-node-list.js.map +1 -1
- package/dist/bin/streamr-storage-node-remove-stream.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-grant-permission.js.map +1 -1
- package/dist/bin/streamr-stream-publish.js +22 -11
- package/dist/bin/streamr-stream-publish.js.map +1 -1
- package/dist/bin/streamr-stream-resend-from.js.map +1 -1
- package/dist/bin/streamr-stream-resend-last.js.map +1 -1
- package/dist/bin/streamr-stream-resend-range.js.map +1 -1
- package/dist/bin/streamr-stream-resend.js.map +1 -1
- package/dist/bin/streamr-stream-revoke-permission.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 +13 -9
- 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 +13 -9
- 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 +3 -3
- 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/cli-tools",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "102.0.0-beta.1",
|
|
4
4
|
"description": "Command line tools for Streamr",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"streamr": "dist/bin/streamr.js"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc -b tsconfig.json",
|
|
15
|
-
"check": "tsc -p ./tsconfig.json
|
|
14
|
+
"build": "tsc -b tsconfig.node.json",
|
|
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}'",
|
|
18
18
|
"test": "npm run build && jest --bail --forceExit"
|
|
@@ -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.1",
|
|
30
|
+
"@streamr/sdk": "102.0.0-beta.1",
|
|
31
|
+
"@streamr/trackerless-network": "102.0.0-beta.1",
|
|
32
|
+
"@streamr/utils": "102.0.0-beta.1",
|
|
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": "
|
|
41
|
+
"@streamr/test-utils": "102.0.0-beta.1",
|
|
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/dist/src/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { StreamrClient, StreamrClientConfig } from '@streamr/sdk';
|
|
2
2
|
import { Options } from './command';
|
|
3
3
|
export declare const getClientConfig: (commandOptions: Options, overridenOptions?: StreamrClientConfig) => StreamrClientConfig;
|
|
4
4
|
export declare const createClient: (commandOptions: Options, overridenOptions?: StreamrClientConfig) => StreamrClient;
|
package/dist/src/client.js
CHANGED
|
@@ -4,15 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createClient = exports.getClientConfig = void 0;
|
|
7
|
-
const omit_1 = __importDefault(require("lodash/omit"));
|
|
8
|
-
const merge_1 = __importDefault(require("lodash/merge"));
|
|
9
7
|
const sdk_1 = require("@streamr/sdk");
|
|
8
|
+
const merge_1 = __importDefault(require("lodash/merge"));
|
|
10
9
|
const config_1 = require("./config");
|
|
11
10
|
const getClientConfig = (commandOptions, overridenOptions = {}) => {
|
|
12
|
-
const environmentOptions = commandOptions.dev ? (0, omit_1.default)(sdk_1.CONFIG_TEST, 'auth') : undefined;
|
|
13
11
|
const configFileJson = (0, config_1.getConfig)(commandOptions.config)?.client;
|
|
12
|
+
const environmentOptions = { environment: commandOptions.env };
|
|
14
13
|
const authenticationOptions = (commandOptions.privateKey !== undefined) ? { auth: { privateKey: commandOptions.privateKey } } : undefined;
|
|
15
|
-
return (0, merge_1.default)(
|
|
14
|
+
return (0, merge_1.default)(configFileJson, environmentOptions, authenticationOptions, overridenOptions);
|
|
16
15
|
};
|
|
17
16
|
exports.getClientConfig = getClientConfig;
|
|
18
17
|
const addInterruptHandler = (client) => {
|
package/dist/src/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;;;;AAAA,sCAAiE;AACjE,yDAAgC;AAEhC,qCAAoC;AAE7B,MAAM,eAAe,GAAG,CAAC,cAAuB,EAAE,mBAAwC,EAAE,EAAuB,EAAE;IACxH,MAAM,cAAc,GAAG,IAAA,kBAAS,EAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IAC/D,MAAM,kBAAkB,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG,EAAE,CAAA;IAC9D,MAAM,qBAAqB,GAAG,CAAC,cAAc,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACzI,OAAO,IAAA,eAAK,EACR,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,CACnB,CAAA;AACL,CAAC,CAAA;AAVY,QAAA,eAAe,mBAU3B;AAED,MAAM,mBAAmB,GAAG,CAAC,MAAqB,EAAE,EAAE;IAClD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;QAAC,MAAM,CAAC;YACL,QAAQ;QACZ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,CAAA;IAClB,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAEM,MAAM,YAAY,GAAG,CAAC,cAAuB,EAAE,mBAAwC,EAAE,EAAiB,EAAE;IAC/G,MAAM,MAAM,GAAG,IAAA,uBAAe,EAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,IAAI,mBAAa,CAAC,MAAM,CAAC,CAAA;IACxC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAA;AACjB,CAAC,CAAA;AALY,QAAA,YAAY,gBAKxB"}
|
package/dist/src/command.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { EnvironmentId, StreamrClientConfig } from '@streamr/sdk';
|
|
2
|
+
import commander from 'commander';
|
|
3
3
|
export interface Options {
|
|
4
4
|
privateKey?: string;
|
|
5
5
|
config?: string;
|
|
6
|
-
|
|
6
|
+
env?: EnvironmentId;
|
|
7
7
|
}
|
|
8
8
|
export declare const createCommand: () => commander.Command;
|
|
9
9
|
export interface CommandOpts {
|
package/dist/src/command.js
CHANGED
|
@@ -4,9 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createClientCommand = exports.createCommand = void 0;
|
|
7
|
+
const sdk_1 = require("@streamr/sdk");
|
|
7
8
|
const commander_1 = require("commander");
|
|
8
9
|
const package_json_1 = __importDefault(require("../package.json"));
|
|
9
10
|
const client_1 = require("./client");
|
|
11
|
+
const common_1 = require("./common");
|
|
10
12
|
const createCommand = () => {
|
|
11
13
|
return new commander_1.Command()
|
|
12
14
|
.version(package_json_1.default.version)
|
|
@@ -21,7 +23,7 @@ const createClientCommand = (action, opts = {
|
|
|
21
23
|
return (0, exports.createCommand)()
|
|
22
24
|
.option('--private-key <key>', 'use an Ethereum private key to authenticate')
|
|
23
25
|
.option('--config <file>', 'read connection and authentication settings from a config file')
|
|
24
|
-
.option('--
|
|
26
|
+
.option('--env <environmentId>', `use pre-defined environment (${(0, common_1.formEnumArgValueDescription)(sdk_1.ENVIRONMENT_IDS, sdk_1.DEFAULT_ENVIRONMENT_ID)})`, (0, common_1.createFnParseEnum)('env', sdk_1.ENVIRONMENT_IDS))
|
|
25
27
|
.action(async (...args) => {
|
|
26
28
|
const commandOptions = args[args.length - 1].opts();
|
|
27
29
|
try {
|
package/dist/src/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":";;;;;;AAAA,yCAA8C;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":";;;;;;AAAA,sCAA0G;AAC1G,yCAA8C;AAC9C,mEAAiC;AACjC,qCAAuC;AACvC,qCAAyE;AAQlE,MAAM,aAAa,GAAG,GAAsB,EAAE;IACjD,OAAO,IAAI,mBAAO,EAAE;SACf,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC;SACpB,kBAAkB,EAAE;SACpB,oBAAoB,CAAC,KAAK,CAAC,CAAA;AACpC,CAAC,CAAA;AALY,QAAA,aAAa,iBAKzB;AAOM,MAAM,mBAAmB,GAAG,CAC/B,MAA+C,EAC/C,OAAoB;IAChB,iBAAiB,EAAE,IAAI;IACvB,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACnC,EACgB,EAAE;IACnB,OAAO,IAAA,qBAAa,GAAE;SACjB,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;SAC5E,MAAM,CAAC,iBAAiB,EAAE,gEAAgE,CAAC;SAC3F,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,IAAA,oCAA2B,EAAC,qBAAe,EAAE,4BAAsB,CAAC,GAAG,EACpI,IAAA,0BAAiB,EAAC,KAAK,EAAE,qBAAe,CAAC,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,cAAc,EAAE,IAAI,CAAC,oBAAqB,CAAC,cAAc,CAAC,CAAC,CAAA;YACvF,IAAI,CAAC;gBACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;YAC1C,CAAC;oBAAS,CAAC;gBACP,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACL,CAAC,CAAC,CAAA;AACV,CAAC,CAAA;AA5BY,QAAA,mBAAmB,uBA4B/B"}
|
package/dist/src/common.d.ts
CHANGED
|
@@ -4,3 +4,6 @@ export declare enum OptionType {
|
|
|
4
4
|
}
|
|
5
5
|
export declare const getOptionType: (value: string | boolean) => OptionType | never;
|
|
6
6
|
export declare function createFnParseInt(name: string): (s: string) => number;
|
|
7
|
+
export declare function createFnParseEnum(name: string, allowedValues: string[]): (s: string) => string;
|
|
8
|
+
export declare const formEnumArgValueDescription: (allowedValues: string[], defaultValue: string) => string;
|
|
9
|
+
export declare const wrapWithQuotes: (str: string) => string;
|
package/dist/src/common.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.wrapWithQuotes = exports.formEnumArgValueDescription = exports.getOptionType = exports.OptionType = void 0;
|
|
4
|
+
exports.createFnParseInt = createFnParseInt;
|
|
5
|
+
exports.createFnParseEnum = createFnParseEnum;
|
|
4
6
|
var OptionType;
|
|
5
7
|
(function (OptionType) {
|
|
6
8
|
OptionType[OptionType["FLAG"] = 0] = "FLAG";
|
|
@@ -28,5 +30,21 @@ function createFnParseInt(name) {
|
|
|
28
30
|
return n;
|
|
29
31
|
};
|
|
30
32
|
}
|
|
31
|
-
|
|
33
|
+
function createFnParseEnum(name, allowedValues) {
|
|
34
|
+
return (value) => {
|
|
35
|
+
if (!allowedValues.includes(value)) {
|
|
36
|
+
console.error(`${name} must be one of: ${allowedValues.map((s) => (0, exports.wrapWithQuotes)(s)).join(', ')}`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const formEnumArgValueDescription = (allowedValues, defaultValue) => {
|
|
43
|
+
return `one of: ${allowedValues.map(exports.wrapWithQuotes).join(', ')}, default: ${(0, exports.wrapWithQuotes)(defaultValue)}`;
|
|
44
|
+
};
|
|
45
|
+
exports.formEnumArgValueDescription = formEnumArgValueDescription;
|
|
46
|
+
const wrapWithQuotes = (str) => {
|
|
47
|
+
return `"${str}"`;
|
|
48
|
+
};
|
|
49
|
+
exports.wrapWithQuotes = wrapWithQuotes;
|
|
32
50
|
//# sourceMappingURL=common.js.map
|
package/dist/src/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";;;AAeA,4CASC;AAED,8CAQC;AAlCD,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,2CAAI,CAAA;IACJ,mDAAQ,CAAA,CAAE,8BAA8B;AAC5C,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAEM,MAAM,aAAa,GAAG,CAAC,KAAuB,EAAsB,EAAE;IACzE,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC,IAAI,CAAA;IAC1B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC,QAAQ,CAAA;IAC9B,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,GAAG,CAAC,CAAA;IAC5D,CAAC;AACL,CAAC,CAAA;AARY,QAAA,aAAa,iBAQzB;AAED,SAAgB,gBAAgB,CAAC,IAAY;IACzC,OAAO,CAAC,GAAW,EAAE,EAAE;QACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,6BAA6B,GAAG,IAAI,CAAC,CAAA;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,CAAC,CAAA;IACZ,CAAC,CAAA;AACL,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY,EAAE,aAAuB;IACnE,OAAO,CAAC,KAAa,EAAE,EAAE;QACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,oBAAoB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC,CAAA;AACL,CAAC;AAEM,MAAM,2BAA2B,GAAG,CAAC,aAAuB,EAAE,YAAoB,EAAU,EAAE;IACjG,OAAO,WAAW,aAAa,CAAC,GAAG,CAAC,sBAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAA,sBAAc,EAAC,YAAY,CAAC,EAAE,CAAA;AAC9G,CAAC,CAAA;AAFY,QAAA,2BAA2B,+BAEvC;AAEM,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,OAAO,IAAI,GAAG,GAAG,CAAA;AACrB,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B"}
|
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": "
|
|
3
|
+
"version": "102.0.0-beta.1",
|
|
4
4
|
"description": "Command line tools for Streamr",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"streamr": "dist/bin/streamr.js"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc -b tsconfig.json",
|
|
15
|
-
"check": "tsc -p ./tsconfig.json
|
|
14
|
+
"build": "tsc -b tsconfig.node.json",
|
|
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}'",
|
|
18
18
|
"test": "npm run build && jest --bail --forceExit"
|
|
@@ -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.1",
|
|
30
|
+
"@streamr/sdk": "102.0.0-beta.1",
|
|
31
|
+
"@streamr/trackerless-network": "102.0.0-beta.1",
|
|
32
|
+
"@streamr/utils": "102.0.0-beta.1",
|
|
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": "
|
|
41
|
+
"@streamr/test-utils": "102.0.0-beta.1",
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fetchPrivateKeyWithGas,
|
|
1
|
+
import { fetchPrivateKeyWithGas, randomUserId } from '@streamr/test-utils'
|
|
2
2
|
import 'jest-extended'
|
|
3
3
|
import { StreamPermission } from '@streamr/sdk'
|
|
4
4
|
import { createTestClient, runCommand } from './utils'
|
|
@@ -9,9 +9,9 @@ describe('permission', () => {
|
|
|
9
9
|
const privateKey = await fetchPrivateKeyWithGas()
|
|
10
10
|
const client = createTestClient(privateKey)
|
|
11
11
|
const stream = await client.createStream(`/${Date.now()}`)
|
|
12
|
-
const otherUser =
|
|
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