hive-stream 2.0.3 → 2.0.5

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 (99) hide show
  1. package/.env +3 -1
  2. package/.env.example +3 -2
  3. package/.travis.yml +11 -11
  4. package/LICENSE +21 -21
  5. package/README.md +238 -236
  6. package/dist/actions.d.ts +10 -9
  7. package/dist/actions.js +23 -15
  8. package/dist/actions.js.map +1 -1
  9. package/dist/adapters/base.adapter.d.ts +25 -21
  10. package/dist/adapters/base.adapter.js +49 -63
  11. package/dist/adapters/base.adapter.js.map +1 -1
  12. package/dist/adapters/mongodb.adapter.d.ts +37 -29
  13. package/dist/adapters/mongodb.adapter.js +158 -113
  14. package/dist/adapters/mongodb.adapter.js.map +1 -1
  15. package/dist/adapters/sqlite.adapter.d.ts +41 -23
  16. package/dist/adapters/sqlite.adapter.js +397 -121
  17. package/dist/adapters/sqlite.adapter.js.map +1 -1
  18. package/dist/api.d.ts +6 -0
  19. package/dist/api.js +56 -0
  20. package/dist/api.js.map +1 -0
  21. package/dist/config.d.ts +16 -14
  22. package/dist/config.js +18 -15
  23. package/dist/config.js.map +1 -1
  24. package/dist/contracts/coinflip.contract.d.ts +14 -0
  25. package/dist/contracts/coinflip.contract.js +95 -0
  26. package/dist/contracts/coinflip.contract.js.map +1 -0
  27. package/dist/contracts/dice.contract.d.ts +29 -29
  28. package/dist/contracts/dice.contract.js +155 -157
  29. package/dist/contracts/dice.contract.js.map +1 -1
  30. package/dist/contracts/lotto.contract.d.ts +20 -16
  31. package/dist/contracts/lotto.contract.js +246 -107
  32. package/dist/contracts/lotto.contract.js.map +1 -1
  33. package/dist/exchanges/bittrex.d.ts +6 -0
  34. package/dist/exchanges/bittrex.js +35 -0
  35. package/dist/exchanges/bittrex.js.map +1 -0
  36. package/dist/exchanges/exchange.d.ts +9 -0
  37. package/dist/exchanges/exchange.js +27 -0
  38. package/dist/exchanges/exchange.js.map +1 -0
  39. package/dist/hive-rates.d.ts +9 -0
  40. package/dist/hive-rates.js +76 -0
  41. package/dist/hive-rates.js.map +1 -0
  42. package/dist/index.d.ts +11 -10
  43. package/dist/index.js +32 -15
  44. package/dist/index.js.map +1 -1
  45. package/dist/streamer.d.ts +93 -70
  46. package/dist/streamer.js +545 -439
  47. package/dist/streamer.js.map +1 -1
  48. package/dist/test.d.ts +1 -1
  49. package/dist/test.js +25 -27
  50. package/dist/test.js.map +1 -1
  51. package/dist/types/hive-stream.d.ts +6 -6
  52. package/dist/types/hive-stream.js +2 -2
  53. package/dist/utils.d.ts +27 -14
  54. package/dist/utils.js +261 -85
  55. package/dist/utils.js.map +1 -1
  56. package/ecosystem.config.js +17 -17
  57. package/jest.config.js +8 -13
  58. package/package.json +48 -44
  59. package/test-contract-block.md +18 -18
  60. package/tests/adapters/sqlite.adapter.spec.ts +43 -0
  61. package/tests/contracts/coinflip.contract.spec.ts +132 -0
  62. package/tests/contracts/dice.contract.spec.ts +159 -156
  63. package/tests/contracts/entrants.json +728 -728
  64. package/tests/contracts/lotto.contract.spec.ts +323 -372
  65. package/tests/setup.ts +18 -20
  66. package/tests/streamer.spec.ts +151 -151
  67. package/tests/utils.spec.ts +94 -99
  68. package/tsconfig.build.json +22 -20
  69. package/tslint.json +20 -20
  70. package/wallaby.js +26 -0
  71. package/dist/adapters/file.adapter.d.ts +0 -8
  72. package/dist/adapters/file.adapter.js +0 -70
  73. package/dist/adapters/file.adapter.js.map +0 -1
  74. package/dist/test/setup.d.ts +0 -0
  75. package/dist/test/setup.js +0 -9
  76. package/dist/test/setup.js.map +0 -1
  77. package/dist/test/streamer.spec.d.ts +0 -1
  78. package/dist/test/streamer.spec.js +0 -145
  79. package/dist/test/streamer.spec.js.map +0 -1
  80. package/dist/test/utils.spec.d.ts +0 -1
  81. package/dist/test/utils.spec.js +0 -11
  82. package/dist/test/utils.spec.js.map +0 -1
  83. package/dist/tests/contracts/dice.contract.spec.d.ts +0 -1
  84. package/dist/tests/contracts/dice.contract.spec.js +0 -130
  85. package/dist/tests/contracts/dice.contract.spec.js.map +0 -1
  86. package/dist/tests/contracts/entrants.json +0 -729
  87. package/dist/tests/contracts/lotto.contract.spec.d.ts +0 -1
  88. package/dist/tests/contracts/lotto.contract.spec.js +0 -300
  89. package/dist/tests/contracts/lotto.contract.spec.js.map +0 -1
  90. package/dist/tests/setup.d.ts +0 -1
  91. package/dist/tests/setup.js +0 -19
  92. package/dist/tests/setup.js.map +0 -1
  93. package/dist/tests/streamer.spec.d.ts +0 -1
  94. package/dist/tests/streamer.spec.js +0 -123
  95. package/dist/tests/streamer.spec.js.map +0 -1
  96. package/dist/tests/utils.spec.d.ts +0 -1
  97. package/dist/tests/utils.spec.js +0 -87
  98. package/dist/tests/utils.spec.js.map +0 -1
  99. package/hive-stream.json +0 -1
package/wallaby.js ADDED
@@ -0,0 +1,26 @@
1
+ module.exports = function (wallaby) {
2
+ return {
3
+ files: [
4
+ "**/*.css",
5
+ "**/*.json",
6
+ "src/**/*.ts",
7
+ "src/**/*.html",
8
+ "tests/setup.ts",
9
+ "tsconfig.json",
10
+ ],
11
+
12
+ tests: ["tests/**/*.spec.ts"],
13
+
14
+ compilers: {
15
+ "**/*.ts": wallaby.compilers.typeScript({
16
+ module: "commonjs",
17
+ typescript: require("typescript"),
18
+ }),
19
+ },
20
+
21
+ env: {
22
+ runner: "node",
23
+ type: "node",
24
+ },
25
+ };
26
+ };
@@ -1,8 +0,0 @@
1
- import { AdapterBase } from './base.adapter';
2
- import { TimeAction } from '../actions';
3
- export declare class FileAdapter extends AdapterBase {
4
- protected create(): Promise<boolean>;
5
- protected loadActions(): Promise<TimeAction[]>;
6
- protected loadState(): any;
7
- protected saveState(data: any): Promise<void>;
8
- }
@@ -1,70 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const fs_1 = __importDefault(require("fs"));
16
- const base_adapter_1 = require("./base.adapter");
17
- class FileAdapter extends base_adapter_1.AdapterBase {
18
- create() {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- return new Promise((resolve, reject) => {
21
- const data = {
22
- lastBlockNumber: 0,
23
- actions: []
24
- };
25
- if (!fs_1.default.existsSync('hive-stream.json')) {
26
- fs_1.default.writeFile('hive-stream.json', JSON.stringify(data), err => {
27
- if (err) {
28
- console.error(err);
29
- reject(err);
30
- }
31
- else {
32
- resolve(true);
33
- }
34
- });
35
- }
36
- else {
37
- resolve(true);
38
- }
39
- });
40
- });
41
- }
42
- loadActions() {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- if (fs_1.default.existsSync('hive-stream.json')) {
45
- const file = JSON.parse(fs_1.default.readFileSync('hive-stream.json'));
46
- return (file === null || file === void 0 ? void 0 : file.actions) ? file.actions : [];
47
- }
48
- return [];
49
- });
50
- }
51
- loadState() {
52
- if (fs_1.default.existsSync('hive-stream.json')) {
53
- const state = JSON.parse(fs_1.default.readFileSync('hive-stream.json'));
54
- return state;
55
- }
56
- }
57
- saveState(data) {
58
- return __awaiter(this, void 0, void 0, function* () {
59
- fs_1.default.writeFile('hive-stream.json', JSON.stringify(data), err => {
60
- if (err) {
61
- console.error(err);
62
- return err;
63
- }
64
- return true;
65
- });
66
- });
67
- }
68
- }
69
- exports.FileAdapter = FileAdapter;
70
- //# sourceMappingURL=file.adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.adapter.js","sourceRoot":"","sources":["../../src/adapters/file.adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,iDAA6C;AAI7C,MAAa,WAAY,SAAQ,0BAAW;IACxB,MAAM;;YAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG;oBACT,eAAe,EAAE,CAAC;oBAClB,OAAO,EAAE,EAAE;iBACd,CAAC;gBAEF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;oBACpC,YAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;wBACzD,IAAI,GAAG,EAAE;4BACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAEnB,MAAM,CAAC,GAAG,CAAC,CAAC;yBACf;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,CAAC;yBACjB;oBACL,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC;iBACjB;YACL,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEe,WAAW;;YACvB,IAAI,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,YAAE,CAAC,YAAY,CAAC,kBAAkB,CAAuB,CAAC,CAAC;gBAEpF,OAAO,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C;YAED,OAAO,EAAE,CAAC;QACd,CAAC;KAAA;IAES,SAAS;QACf,IAAI,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE,YAAE,CAAC,YAAY,CAAC,kBAAkB,CAAuB,CAAC,CAAC;YAErF,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEe,SAAS,CAAC,IAAS;;YAC/B,YAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;gBACzD,IAAI,GAAG,EAAE;oBACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAEnB,OAAO,GAAG,CAAC;iBACd;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;CACJ;AArDD,kCAqDC"}
File without changes
@@ -1,9 +0,0 @@
1
- global.console = {
2
- log: jest.fn(),
3
- // Keep native behaviour for other methods, use those to print out things in your own tests, not `console.log`
4
- error: console.error,
5
- warn: console.warn,
6
- info: console.info,
7
- debug: console.debug,
8
- };
9
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../test/setup.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,OAAO,GAAG;IACtB,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IAEd,8GAA8G;IAC9G,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;CACvB,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,145 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __importDefault = (this && this.__importDefault) || function (mod) {
11
- return (mod && mod.__esModule) ? mod : { "default": mod };
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- const dsteem_1 = require("dsteem");
15
- const streamer_1 = require("./../src/streamer");
16
- const fs_1 = __importDefault(require("fs"));
17
- const utils_1 = require("dsteem/lib/utils");
18
- jest.mock('fs');
19
- describe('Streamer', () => {
20
- let sut;
21
- beforeEach(() => {
22
- sut = new streamer_1.Streamer({});
23
- });
24
- afterEach(() => {
25
- sut.stop();
26
- });
27
- test('Constructor should instantiate client instance', () => {
28
- expect(sut['client']).toBeInstanceOf(dsteem_1.Client);
29
- });
30
- test('setConfig properly assigns multiple values', () => {
31
- sut.setConfig({
32
- LAST_BLOCK_NUMBER: 1234
33
- });
34
- expect(sut['config'].LAST_BLOCK_NUMBER).toStrictEqual(1234);
35
- });
36
- test('state file does not exist', () => {
37
- fs_1.default.existsSync.mockReturnValue(false);
38
- jest.spyOn(fs_1.default, 'readFileSync');
39
- sut.start();
40
- expect(fs_1.default.readFileSync).not.toBeCalled();
41
- });
42
- test('state file does exist', () => {
43
- fs_1.default.existsSync.mockReturnValue(true);
44
- jest.spyOn(fs_1.default, 'readFileSync').mockReturnValue(`{"lastBlockNumber": 27777}`);
45
- sut.start();
46
- expect(fs_1.default.readFileSync).toBeCalledWith('hive-stream.json');
47
- expect(sut['lastBlockNumber']).toStrictEqual(27777);
48
- });
49
- test('getBlock gets a block', () => __awaiter(this, void 0, void 0, function* () {
50
- jest.spyOn(sut['client'].database, 'getDynamicGlobalProperties').mockResolvedValue({ head_block_number: 8882 });
51
- jest.spyOn(sut['client'].database, 'getBlock').mockResolvedValue({
52
- block_id: 1234,
53
- previous: 1233,
54
- transaction_ids: ['sdasd', 'dasdad'],
55
- timestamp: new Date().toDateString(),
56
- transactions: {
57
- 0: {
58
- operations: {
59
- 0: {}
60
- }
61
- }
62
- }
63
- });
64
- jest.spyOn(sut, 'getBlock');
65
- jest.spyOn(sut, 'loadBlock');
66
- sut['lastBlockNumber'] = 0;
67
- yield sut['getBlock']();
68
- expect(sut['lastBlockNumber']).toStrictEqual(8882);
69
- // Wait for 3 block cycles to be called
70
- yield utils_1.sleep(3000);
71
- sut['disableAllProcessing'] = true;
72
- expect(sut['loadBlock']).toBeCalledWith(8882);
73
- expect(sut['getBlock']).toBeCalledTimes(3);
74
- }));
75
- test('getBlock global properties returns null', () => __awaiter(this, void 0, void 0, function* () {
76
- jest.spyOn(sut['client'].database, 'getDynamicGlobalProperties').mockResolvedValue(null);
77
- jest.spyOn(sut, 'getBlock');
78
- jest.spyOn(sut, 'loadBlock');
79
- yield sut['getBlock']();
80
- yield utils_1.sleep(1000);
81
- sut['disableAllProcessing'] = true;
82
- expect(sut['getBlock']).toBeCalled();
83
- }));
84
- test('getBlock client error should retry', () => __awaiter(this, void 0, void 0, function* () {
85
- jest.spyOn(sut['client'].database, 'getDynamicGlobalProperties').mockRejectedValue({ message: 'network error' });
86
- jest.spyOn(sut, 'getBlock');
87
- jest.spyOn(sut, 'loadBlock');
88
- expect(sut['attempts']).toStrictEqual(0);
89
- yield sut['getBlock']();
90
- sut['disableAllProcessing'] = true;
91
- expect(sut['loadBlock']).not.toBeCalled();
92
- expect(sut['attempts']).toStrictEqual(1);
93
- }));
94
- test('processOperation calls post subscriber', () => {
95
- const callback = jest.fn();
96
- sut.onPost(callback);
97
- const operation = [
98
- 'comment',
99
- { parent_author: '' }
100
- ];
101
- sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
102
- expect(callback).toBeCalledWith({ 'parent_author': '' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
103
- });
104
- test('processOperation calls comment subscriber', () => {
105
- const callback = jest.fn();
106
- sut.onComment(callback);
107
- const operation = [
108
- 'comment',
109
- { parent_author: 'beggars' }
110
- ];
111
- sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
112
- expect(callback).toBeCalledWith({ 'parent_author': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
113
- });
114
- test('processOperation calls transfer subscriber', () => {
115
- const callback = jest.fn();
116
- sut.onTransfer('beggars', callback);
117
- const operation = [
118
- 'transfer',
119
- { to: 'beggars' }
120
- ];
121
- sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
122
- expect(callback).toBeCalledWith({ 'to': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
123
- });
124
- test('processOperation calls custom json subscriber signed with active key', () => {
125
- const callback = jest.fn();
126
- sut.onCustomJson(callback);
127
- const operation = [
128
- 'custom_json',
129
- { required_auths: ['beggars'] }
130
- ];
131
- sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
132
- expect(callback).toBeCalledWith({ 'required_auths': ['beggars'] }, { 'isSignedWithActiveKey': true, 'sender': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
133
- });
134
- test('processOperation calls custom json subscriber signed without active key', () => {
135
- const callback = jest.fn();
136
- sut.onCustomJson(callback);
137
- const operation = [
138
- 'custom_json',
139
- { required_posting_auths: ['beggars'] }
140
- ];
141
- sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
142
- expect(callback).toBeCalledWith({ 'required_posting_auths': ['beggars'] }, { 'isSignedWithActiveKey': false, 'sender': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
143
- });
144
- });
145
- //# sourceMappingURL=streamer.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streamer.spec.js","sourceRoot":"","sources":["../../test/streamer.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mCAAgC;AAChC,gDAA6C;AAE7C,4CAAoB;AACpB,4CAAyC;AAEzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IAEtB,IAAI,GAAa,CAAC;IAElB,UAAU,CAAC,GAAG,EAAE;QACZ,GAAG,GAAG,IAAI,mBAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,GAAG,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,eAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,GAAG,CAAC,SAAS,CAAC;YACV,iBAAiB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QAClC,YAAU,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,YAAE,EAAE,cAAc,CAAC,CAAC;QAE/B,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,MAAM,CAAC,YAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC9B,YAAU,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,CAAC,YAAE,EAAE,cAAc,CAAC,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QAE7E,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,MAAM,CAAC,YAAE,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAE3D,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAS,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,iBAAiB,CAAC,EAAC,iBAAiB,EAAE,IAAI,EAAQ,CAAC,CAAC;QAErH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,iBAAiB,CAAC;YAC7D,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE;YACpC,YAAY,EAAE;gBACV,CAAC,EAAE;oBACC,UAAU,EAAE;wBACR,CAAC,EAAE,EAAE;qBACR;iBACJ;aACJ;SACG,CAAC,CAAC;QAEV,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAEpC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE3B,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAExB,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,aAAK,CAAC,IAAI,CAAC,CAAC;QAElB,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAS,EAAE;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAEzF,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAExB,MAAM,aAAK,CAAC,IAAI,CAAC,CAAC;QAElB,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,GAAS,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAExB,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAE1C,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAErB,MAAM,SAAS,GAAG;YACd,SAAS;YACT,EAAE,aAAa,EAAE,EAAE,EAAE;SACxB,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,eAAe,EAAE,EAAE,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG;YACd,SAAS;YACT,EAAE,aAAa,EAAE,SAAS,EAAE;SAC/B,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,eAAe,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACpI,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG;YACd,UAAU;YACV,EAAE,EAAE,EAAE,SAAS,EAAE;SACpB,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACzH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG;YACd,aAAa;YACb,EAAE,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE;SAClC,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAC,EAAE,EAAC,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IAC7L,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG;YACd,aAAa;YACb,EAAE,sBAAsB,EAAE,CAAC,SAAS,CAAC,EAAE;SAC1C,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,EAAC,EAAE,EAAC,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACtM,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("./../src/utils");
4
- describe('Utils', () => {
5
- test('Should generate two deterministic numbers', () => {
6
- // Should generate a deterministic random number
7
- expect(utils_1.Utils.randomNumber('dasdasdas', '2312fsdfsdfsdf', 'kfjlksdjflksdjf999')).toStrictEqual(26);
8
- expect(utils_1.Utils.randomNumber('fdfsdfsdfsdfsf', '2312fsdfsdfsdf', 'kfjlksdjflksdjf999')).toStrictEqual(43);
9
- });
10
- });
11
- //# sourceMappingURL=utils.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../test/utils.spec.ts"],"names":[],"mappings":";;AAAA,0CAAuC;AAEvC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAEnB,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,gDAAgD;QAChD,MAAM,CAAC,aAAK,CAAC,YAAY,CAAC,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAElG,MAAM,CAAC,aAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,130 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const utils_1 = require("@hivechain/dhive/lib/utils");
13
- const dice_contract_1 = require("./../../src/contracts/dice.contract");
14
- const streamer_1 = require("../../src/streamer");
15
- describe('Dice Contract', () => {
16
- let sut;
17
- let contract;
18
- beforeEach(() => {
19
- sut = new streamer_1.Streamer();
20
- contract = new dice_contract_1.DiceContract();
21
- });
22
- afterEach(() => {
23
- sut.stop();
24
- });
25
- afterAll(() => {
26
- jest.restoreAllMocks();
27
- });
28
- test('Registers the dice contract', () => {
29
- sut.registerContract('testdice', contract);
30
- const findContract = sut['contracts'].find(c => c.name === 'testdice');
31
- expect(findContract).not.toBeUndefined();
32
- });
33
- test('User wins a roll', () => __awaiter(void 0, void 0, void 0, function* () {
34
- sut.registerContract('testdice', contract);
35
- contract['_instance'] = sut;
36
- jest.spyOn(contract, 'roll');
37
- jest.spyOn(contract, 'getBalance').mockResolvedValue(2000);
38
- jest.spyOn(sut, 'getTransaction').mockResolvedValue({ test: 123 });
39
- jest.spyOn(sut, 'verifyTransfer').mockResolvedValue(true);
40
- jest.spyOn(sut, 'transferHiveTokens').mockResolvedValue(true);
41
- const memo = JSON.stringify({
42
- hivePayload: {
43
- id: 'hivestream',
44
- name: 'testdice',
45
- action: 'roll',
46
- payload: {
47
- roll: 69
48
- }
49
- }
50
- });
51
- sut.processOperation(['transfer', { from: 'testuser', amount: '9.000 HIVE', memo }], 778782, 'dfjfsdfsdfsd34hfkj88787', 'fkjsdkfj', 'fhkjsdhfkjsdf', '2019-06-23');
52
- yield utils_1.sleep(100);
53
- expect(contract['roll']).toBeCalled();
54
- expect(contract['_instance'].getTransaction).toBeCalledWith(778782, 'fhkjsdhfkjsdf');
55
- expect(contract['_instance'].transferHiveTokens).toBeCalledWith('beggars', 'testuser', '12.391', 'HIVE', 'You won 12.391 HIVE. Roll: 54, Your guess: 69');
56
- }));
57
- test('User loses a roll', () => __awaiter(void 0, void 0, void 0, function* () {
58
- sut.registerContract('testdice', contract);
59
- contract['_instance'] = sut;
60
- jest.spyOn(contract, 'roll');
61
- jest.spyOn(contract, 'getBalance').mockResolvedValue(2000);
62
- jest.spyOn(sut, 'getTransaction').mockResolvedValue({ test: 123 });
63
- jest.spyOn(sut, 'verifyTransfer').mockResolvedValue(true);
64
- jest.spyOn(sut, 'transferHiveTokens').mockResolvedValue(true);
65
- const memo = JSON.stringify({
66
- hivePayload: {
67
- id: 'hivestream',
68
- name: 'testdice',
69
- action: 'roll',
70
- payload: {
71
- roll: 69
72
- }
73
- }
74
- });
75
- sut.processOperation(['transfer', { from: 'testuser', amount: '9.000 HIVE', memo }], 778782, 'dfjfsdfsdfs4hfkj88787', 'fkjsdkfj', 'fhkjsdhfkjsdf', '2019-06-23');
76
- yield utils_1.sleep(100);
77
- expect(contract['roll']).toBeCalled();
78
- expect(sut.getTransaction).toBeCalledWith(778782, 'fhkjsdhfkjsdf');
79
- expect(sut.transferHiveTokens).toBeCalledWith('beggars', 'testuser', '0.001', 'HIVE', 'You lost 9 HIVE. Roll: 81, Your guess: 69');
80
- }));
81
- test('User sent an invalid amount, refund them', () => __awaiter(void 0, void 0, void 0, function* () {
82
- sut.registerContract('testdice', contract);
83
- contract['_instance'] = sut;
84
- jest.spyOn(contract, 'roll');
85
- jest.spyOn(contract, 'getBalance').mockResolvedValue(2000);
86
- jest.spyOn(sut, 'getTransaction').mockResolvedValue({ test: 123 });
87
- jest.spyOn(sut, 'verifyTransfer').mockResolvedValue(true);
88
- jest.spyOn(sut, 'transferHiveTokens').mockResolvedValue(true);
89
- const memo = JSON.stringify({
90
- hivePayload: {
91
- id: 'hivestream',
92
- name: 'testdice',
93
- action: 'roll',
94
- payload: {
95
- roll: 69
96
- }
97
- }
98
- });
99
- sut.processOperation(['transfer', { from: 'testuser', amount: '100.000 HIVE', memo }], 778782, 'dfjfsdfsdfs4hfkj88787', 'fkjsdkfj', 'fhkjsdhfkjsdf', '2019-06-23');
100
- yield utils_1.sleep(100);
101
- expect(contract['roll']).toBeCalled();
102
- expect(sut.getTransaction).toBeCalledWith(778782, 'fhkjsdhfkjsdf');
103
- expect(sut.transferHiveTokens).toBeCalledWith('beggars', 'testuser', '100.000', 'HIVE', '[Refund] You sent an invalid bet amount.');
104
- }));
105
- test('User sent an unsupported currency, refund them', () => __awaiter(void 0, void 0, void 0, function* () {
106
- sut.registerContract('testdice', contract);
107
- contract['_instance'] = sut;
108
- jest.spyOn(contract, 'roll');
109
- jest.spyOn(contract, 'getBalance').mockResolvedValue(2000);
110
- jest.spyOn(sut, 'getTransaction').mockResolvedValue({ test: 123 });
111
- jest.spyOn(sut, 'verifyTransfer').mockResolvedValue(true);
112
- jest.spyOn(sut, 'transferHiveTokens').mockResolvedValue(true);
113
- const memo = JSON.stringify({
114
- hivePayload: {
115
- id: 'hivestream',
116
- name: 'testdice',
117
- action: 'roll',
118
- payload: {
119
- roll: 69
120
- }
121
- }
122
- });
123
- sut.processOperation(['transfer', { from: 'testuser', amount: '10.000 HBD', memo }], 778782, 'dfjfsdfsdfs4hfkj88787', 'fkjsdkfj', 'fhkjsdhfkjsdf', '2019-06-23');
124
- yield utils_1.sleep(100);
125
- expect(contract['roll']).toBeCalled();
126
- expect(sut.getTransaction).toBeCalledWith(778782, 'fhkjsdhfkjsdf');
127
- expect(sut.transferHiveTokens).toBeCalledWith('beggars', 'testuser', '10.000', 'HBD', '[Refund] Invalid bet params.');
128
- }));
129
- });
130
- //# sourceMappingURL=dice.contract.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dice.contract.spec.js","sourceRoot":"","sources":["../../../tests/contracts/dice.contract.spec.ts"],"names":[],"mappings":"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"}