@alephium/web3 0.1.0 → 0.2.0-rc.10

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 (93) hide show
  1. package/.eslintignore +2 -2
  2. package/README.md +2 -135
  3. package/contracts/greeter/greeter.ral +7 -0
  4. package/contracts/{greeter_interface.ral → greeter/greeter_interface.ral} +1 -0
  5. package/contracts/greeter_main.ral +2 -4
  6. package/dist/alephium-web3.min.js +1 -1
  7. package/dist/alephium-web3.min.js.LICENSE.txt +0 -17
  8. package/dist/alephium-web3.min.js.map +1 -1
  9. package/dist/scripts/create-project.js +3 -2
  10. package/dist/src/api/api-alephium.d.ts +58 -13
  11. package/dist/src/api/api-alephium.js +19 -3
  12. package/dist/src/api/api-explorer.d.ts +32 -16
  13. package/dist/src/api/api-explorer.js +26 -0
  14. package/dist/src/api/index.d.ts +2 -2
  15. package/dist/src/api/index.js +18 -3
  16. package/dist/src/contract/contract.d.ts +105 -48
  17. package/dist/src/contract/contract.js +362 -189
  18. package/dist/src/contract/events.d.ts +7 -25
  19. package/dist/src/contract/events.js +18 -31
  20. package/dist/src/contract/index.js +5 -1
  21. package/dist/src/global.d.ts +4 -0
  22. package/dist/src/global.js +38 -0
  23. package/dist/src/index.d.ts +3 -0
  24. package/dist/src/index.js +21 -1
  25. package/dist/src/signer/index.d.ts +0 -1
  26. package/dist/src/signer/index.js +5 -2
  27. package/dist/src/signer/signer.d.ts +1 -1
  28. package/dist/src/signer/signer.js +8 -3
  29. package/dist/src/transaction/index.d.ts +1 -0
  30. package/dist/src/{test → transaction}/index.js +6 -13
  31. package/dist/src/transaction/status.d.ts +10 -0
  32. package/dist/src/transaction/status.js +48 -0
  33. package/dist/src/utils/index.d.ts +1 -2
  34. package/dist/src/utils/index.js +6 -3
  35. package/dist/src/utils/subscription.d.ts +23 -0
  36. package/dist/src/utils/subscription.js +53 -0
  37. package/dist/src/utils/utils.d.ts +5 -2
  38. package/dist/src/utils/utils.js +25 -16
  39. package/jest-config.json +11 -0
  40. package/package.json +7 -35
  41. package/scripts/create-project.ts +3 -2
  42. package/src/api/api-alephium.ts +73 -8
  43. package/src/api/api-explorer.ts +30 -0
  44. package/src/api/index.ts +13 -3
  45. package/src/contract/contract.ts +512 -279
  46. package/src/contract/events.ts +21 -48
  47. package/src/{utils/transaction.ts → global.ts} +14 -15
  48. package/src/index.ts +4 -0
  49. package/src/signer/index.ts +0 -1
  50. package/src/signer/signer.ts +4 -3
  51. package/src/{utils/password-crypto.test.ts → transaction/index.ts} +1 -9
  52. package/src/transaction/status.ts +58 -0
  53. package/src/utils/index.ts +1 -2
  54. package/src/utils/subscription.ts +72 -0
  55. package/src/utils/utils.ts +16 -8
  56. package/templates/base/package.json +2 -2
  57. package/templates/base/src/greeter.ts +8 -7
  58. package/templates/react/package.json +2 -2
  59. package/templates/react/src/App.tsx +2 -2
  60. package/.eslintrc.json +0 -21
  61. package/LICENSE +0 -165
  62. package/contracts/add.ral +0 -16
  63. package/contracts/greeter.ral +0 -7
  64. package/contracts/main.ral +0 -6
  65. package/contracts/sub.ral +0 -9
  66. package/dist/src/signer/node-wallet.d.ts +0 -13
  67. package/dist/src/signer/node-wallet.js +0 -60
  68. package/dist/src/test/index.d.ts +0 -7
  69. package/dist/src/test/privatekey-wallet.d.ts +0 -12
  70. package/dist/src/test/privatekey-wallet.js +0 -68
  71. package/dist/src/utils/password-crypto.d.ts +0 -2
  72. package/dist/src/utils/password-crypto.js +0 -69
  73. package/dist/src/utils/transaction.d.ts +0 -2
  74. package/dist/src/utils/transaction.js +0 -58
  75. package/gitignore +0 -10
  76. package/src/contract/ralph.test.ts +0 -178
  77. package/src/fixtures/address.json +0 -36
  78. package/src/fixtures/balance.json +0 -9
  79. package/src/fixtures/self-clique.json +0 -19
  80. package/src/fixtures/transaction.json +0 -13
  81. package/src/fixtures/transactions.json +0 -179
  82. package/src/signer/fixtures/genesis.json +0 -26
  83. package/src/signer/fixtures/wallets.json +0 -26
  84. package/src/signer/node-wallet.ts +0 -74
  85. package/src/test/index.ts +0 -32
  86. package/src/test/privatekey-wallet.ts +0 -58
  87. package/src/utils/address.test.ts +0 -47
  88. package/src/utils/djb2.test.ts +0 -35
  89. package/src/utils/password-crypto.ts +0 -77
  90. package/src/utils/transaction.test.ts +0 -50
  91. package/src/utils/utils.test.ts +0 -160
  92. package/test/contract.test.ts +0 -161
  93. package/test/events.test.ts +0 -139
@@ -1,29 +1,11 @@
1
- import { node } from '../api';
2
- import { NodeProvider } from '../api';
3
- declare type EventCallback = (event: node.ContractEvent) => Promise<void>;
4
- declare type ErrorCallback = (error: any, subscription: Subscription) => Promise<void>;
5
- export interface SubscribeOptions {
6
- provider: NodeProvider;
7
- contractAddress: string;
8
- fromCount?: number;
9
- pollingInterval: number;
10
- eventCallback: EventCallback;
11
- errorCallback: ErrorCallback;
12
- }
13
- export declare class Subscription {
14
- provider: NodeProvider;
1
+ import { ContractEvent } from '../api/api-alephium';
2
+ import { Subscription, SubscribeOptions } from '../utils';
3
+ export declare class EventSubscription extends Subscription<ContractEvent> {
15
4
  readonly contractAddress: string;
16
- pollingInterval: number;
17
5
  private fromCount;
18
- private eventCallback;
19
- private errorCallback;
20
- private task;
21
- private cancelled;
22
- private eventEmitter;
23
- constructor(options: SubscribeOptions);
24
- unsubscribe(): void;
6
+ constructor(options: SubscribeOptions<ContractEvent>, contractAddress: string, fromCount?: number);
7
+ startPolling(): void;
25
8
  currentEventCount(): number;
26
- private fetchEvents;
9
+ polling(): Promise<void>;
27
10
  }
28
- export declare function subscribe(options: SubscribeOptions): Subscription;
29
- export {};
11
+ export declare function subscribeToEvents(options: SubscribeOptions<ContractEvent>, contractAddress: string, fromCount?: number): EventSubscription;
@@ -16,39 +16,26 @@ GNU Lesser General Public License for more details.
16
16
  You should have received a copy of the GNU Lesser General Public License
17
17
  along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
- var __importDefault = (this && this.__importDefault) || function (mod) {
20
- return (mod && mod.__esModule) ? mod : { "default": mod };
21
- };
22
19
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.subscribe = exports.Subscription = void 0;
24
- const eventemitter3_1 = __importDefault(require("eventemitter3"));
25
- class Subscription {
26
- constructor(options) {
27
- this.provider = options.provider;
28
- this.contractAddress = options.contractAddress;
29
- this.fromCount = typeof options.fromCount === 'undefined' ? 0 : options.fromCount;
30
- this.pollingInterval = options.pollingInterval;
31
- this.eventCallback = options.eventCallback;
32
- this.errorCallback = options.errorCallback;
33
- this.task = undefined;
34
- this.cancelled = false;
35
- this.eventEmitter = new eventemitter3_1.default();
20
+ exports.subscribeToEvents = exports.EventSubscription = void 0;
21
+ const utils_1 = require("../utils");
22
+ class EventSubscription extends utils_1.Subscription {
23
+ constructor(options, contractAddress, fromCount) {
24
+ super(options);
25
+ this.contractAddress = contractAddress;
26
+ this.fromCount = typeof fromCount === 'undefined' ? 0 : fromCount;
27
+ this.startPolling();
28
+ }
29
+ startPolling() {
36
30
  this.eventEmitter.on('tick', async () => {
37
- await this.fetchEvents();
31
+ await this.polling();
38
32
  });
39
33
  this.eventEmitter.emit('tick');
40
34
  }
41
- unsubscribe() {
42
- this.eventEmitter.removeAllListeners();
43
- this.cancelled = true;
44
- if (typeof this.task !== 'undefined') {
45
- clearTimeout(this.task);
46
- }
47
- }
48
35
  currentEventCount() {
49
36
  return this.fromCount;
50
37
  }
51
- async fetchEvents() {
38
+ async polling() {
52
39
  try {
53
40
  const events = await this.provider.events.getEventsContractContractaddress(this.contractAddress, {
54
41
  start: this.fromCount
@@ -60,18 +47,18 @@ class Subscription {
60
47
  this.task = setTimeout(() => this.eventEmitter.emit('tick'), this.pollingInterval);
61
48
  return;
62
49
  }
63
- const promises = events.events.map((event) => this.eventCallback(event));
50
+ const promises = events.events.map((event) => this.messageCallback(event));
64
51
  await Promise.all(promises);
65
52
  this.fromCount = events.nextStart;
66
- await this.fetchEvents();
53
+ await this.polling();
67
54
  }
68
55
  catch (err) {
69
56
  await this.errorCallback(err, this);
70
57
  }
71
58
  }
72
59
  }
73
- exports.Subscription = Subscription;
74
- function subscribe(options) {
75
- return new Subscription(options);
60
+ exports.EventSubscription = EventSubscription;
61
+ function subscribeToEvents(options, contractAddress, fromCount) {
62
+ return new EventSubscription(options, contractAddress, fromCount);
76
63
  }
77
- exports.subscribe = subscribe;
64
+ exports.subscribeToEvents = subscribeToEvents;
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -0,0 +1,4 @@
1
+ import { NodeProvider } from './api';
2
+ export declare function setCurrentNodeProvider(provider: NodeProvider): void;
3
+ export declare function setCurrentNodeProvider(baseUrl: string, apiKey?: string): void;
4
+ export declare function getCurrentNodeProvider(): NodeProvider;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /*
3
+ Copyright 2018 - 2022 The Alephium Authors
4
+ This file is part of the alephium project.
5
+
6
+ The library is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Lesser General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ The library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public License
17
+ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.getCurrentNodeProvider = exports.setCurrentNodeProvider = void 0;
21
+ const api_1 = require("./api");
22
+ let _currentNodeProvider = undefined;
23
+ function setCurrentNodeProvider(provider, apiKey) {
24
+ if (typeof provider == 'string') {
25
+ _currentNodeProvider = new api_1.NodeProvider(provider, apiKey);
26
+ }
27
+ else {
28
+ _currentNodeProvider = provider;
29
+ }
30
+ }
31
+ exports.setCurrentNodeProvider = setCurrentNodeProvider;
32
+ function getCurrentNodeProvider() {
33
+ if (typeof _currentNodeProvider === 'undefined') {
34
+ throw Error('No node provider is set.');
35
+ }
36
+ return _currentNodeProvider;
37
+ }
38
+ exports.getCurrentNodeProvider = getCurrentNodeProvider;
@@ -2,4 +2,7 @@ export * from './api';
2
2
  export * from './contract';
3
3
  export * from './signer';
4
4
  export * from './utils';
5
+ export * from './transaction';
5
6
  export * from './constants';
7
+ export * as web3 from './global';
8
+ export * as utils from './utils';
package/dist/src/index.js CHANGED
@@ -18,17 +18,37 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
25
29
  }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
26
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
28
37
  };
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
29
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.utils = exports.web3 = void 0;
30
47
  __exportStar(require("./api"), exports);
31
48
  __exportStar(require("./contract"), exports);
32
49
  __exportStar(require("./signer"), exports);
33
50
  __exportStar(require("./utils"), exports);
51
+ __exportStar(require("./transaction"), exports);
34
52
  __exportStar(require("./constants"), exports);
53
+ exports.web3 = __importStar(require("./global"));
54
+ exports.utils = __importStar(require("./utils"));
@@ -1,2 +1 @@
1
1
  export * from './signer';
2
- export * from './node-wallet';
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -28,4 +32,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
28
32
  };
29
33
  Object.defineProperty(exports, "__esModule", { value: true });
30
34
  __exportStar(require("./signer"), exports);
31
- __exportStar(require("./node-wallet"), exports);
@@ -111,7 +111,7 @@ export declare abstract class SignerWithNodeProvider implements SignerProvider {
111
111
  alwaysSubmitTx: boolean;
112
112
  abstract getAccounts(): Promise<Account[]>;
113
113
  getAccount(signerAddress: string): Promise<Account>;
114
- constructor(provider: NodeProvider, alwaysSubmitTx: boolean);
114
+ constructor(alwaysSubmitTx: boolean);
115
115
  private defaultSignerAddress;
116
116
  submitTransaction(unsignedTx: string, txHash: string, signerAddress?: string): Promise<SubmissionResult>;
117
117
  private shouldSubmitTx;
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -44,6 +48,7 @@ const elliptic_1 = require("elliptic");
44
48
  const utils = __importStar(require("../utils"));
45
49
  const utils_1 = require("../utils");
46
50
  const blakejs_1 = __importDefault(require("blakejs"));
51
+ const global_1 = require("../global");
47
52
  const ec = new elliptic_1.ec('secp256k1');
48
53
  (0, utils_1.assertType)();
49
54
  (0, utils_1.assertType)();
@@ -58,8 +63,8 @@ const ec = new elliptic_1.ec('secp256k1');
58
63
  (0, utils_1.assertType)();
59
64
  (0, utils_1.assertType)();
60
65
  class SignerWithNodeProvider {
61
- constructor(provider, alwaysSubmitTx) {
62
- this.provider = provider;
66
+ constructor(alwaysSubmitTx) {
67
+ this.provider = (0, global_1.getCurrentNodeProvider)();
63
68
  this.alwaysSubmitTx = alwaysSubmitTx;
64
69
  }
65
70
  async getAccount(signerAddress) {
@@ -0,0 +1 @@
1
+ export * from './status';
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -27,15 +31,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
31
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
28
32
  };
29
33
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.testWallet = exports.testPassword = exports.testAddress = exports.testWalletName = void 0;
31
- const signer_1 = require("../signer");
32
- exports.testWalletName = 'alephium-web3-test-only-wallet';
33
- exports.testAddress = '1DrDyTr9RpRsQnDnXo2YRiPzPW4ooHX5LLoqXrqfMrpQH';
34
- exports.testPassword = 'alph';
35
- async function testWallet(provider) {
36
- const wallet = new signer_1.NodeWallet(provider, exports.testWalletName);
37
- await wallet.unlock(exports.testPassword);
38
- return wallet;
39
- }
40
- exports.testWallet = testWallet;
41
- __exportStar(require("./privatekey-wallet"), exports);
34
+ __exportStar(require("./status"), exports);
@@ -0,0 +1,10 @@
1
+ import { TxStatus } from '../api/api-alephium';
2
+ import { Subscription, SubscribeOptions } from '../utils';
3
+ export declare class TxStatusSubscription extends Subscription<TxStatus> {
4
+ readonly txId: string;
5
+ readonly fromGroup?: number;
6
+ readonly toGroup?: number;
7
+ constructor(options: SubscribeOptions<TxStatus>, txId: string, fromGroup?: number, toGroup?: number);
8
+ polling(): Promise<void>;
9
+ }
10
+ export declare function subscribeToTxStatus(options: SubscribeOptions<TxStatus>, txId: string, fromGroup?: number, toGroup?: number): TxStatusSubscription;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /*
3
+ Copyright 2018 - 2022 The Alephium Authors
4
+ This file is part of the alephium project.
5
+
6
+ The library is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Lesser General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ The library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public License
17
+ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.subscribeToTxStatus = exports.TxStatusSubscription = void 0;
21
+ const utils_1 = require("../utils");
22
+ class TxStatusSubscription extends utils_1.Subscription {
23
+ constructor(options, txId, fromGroup, toGroup) {
24
+ super(options);
25
+ this.txId = txId;
26
+ this.fromGroup = fromGroup;
27
+ this.toGroup = toGroup;
28
+ this.startPolling();
29
+ }
30
+ async polling() {
31
+ try {
32
+ const txStatus = await this.provider.transactions.getTransactionsStatus({
33
+ txId: this.txId,
34
+ fromGroup: this.fromGroup,
35
+ toGroup: this.toGroup
36
+ });
37
+ await this.messageCallback(txStatus);
38
+ }
39
+ catch (err) {
40
+ await this.errorCallback(err, this);
41
+ }
42
+ }
43
+ }
44
+ exports.TxStatusSubscription = TxStatusSubscription;
45
+ function subscribeToTxStatus(options, txId, fromGroup, toGroup) {
46
+ return new TxStatusSubscription(options, txId, fromGroup, toGroup);
47
+ }
48
+ exports.subscribeToTxStatus = subscribeToTxStatus;
@@ -1,6 +1,5 @@
1
1
  export * from './address';
2
2
  export * from './bs58';
3
3
  export * from './djb2';
4
- export * from './password-crypto';
5
- export * from './transaction';
6
4
  export * from './utils';
5
+ export * from './subscription';
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -30,6 +34,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
30
34
  __exportStar(require("./address"), exports);
31
35
  __exportStar(require("./bs58"), exports);
32
36
  __exportStar(require("./djb2"), exports);
33
- __exportStar(require("./password-crypto"), exports);
34
- __exportStar(require("./transaction"), exports);
35
37
  __exportStar(require("./utils"), exports);
38
+ __exportStar(require("./subscription"), exports);
@@ -0,0 +1,23 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import { NodeProvider } from '../api';
3
+ declare type MessageCallback<Message> = (message: Message) => Promise<void>;
4
+ declare type ErrorCallback<Message> = (error: any, subscription: Subscription<Message>) => Promise<void>;
5
+ export interface SubscribeOptions<Message> {
6
+ pollingInterval: number;
7
+ messageCallback: MessageCallback<Message>;
8
+ errorCallback: ErrorCallback<Message>;
9
+ }
10
+ export declare abstract class Subscription<Message> {
11
+ provider: NodeProvider;
12
+ pollingInterval: number;
13
+ protected messageCallback: MessageCallback<Message>;
14
+ protected errorCallback: ErrorCallback<Message>;
15
+ protected task: ReturnType<typeof setTimeout> | undefined;
16
+ protected eventEmitter: EventEmitter;
17
+ protected cancelled: boolean;
18
+ constructor(options: SubscribeOptions<Message>);
19
+ startPolling(): void;
20
+ unsubscribe(): void;
21
+ abstract polling(): Promise<void>;
22
+ }
23
+ export {};
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /*
3
+ Copyright 2018 - 2022 The Alephium Authors
4
+ This file is part of the alephium project.
5
+
6
+ The library is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Lesser General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ The library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public License
17
+ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
+ */
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.Subscription = void 0;
24
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
25
+ const global_1 = require("../global");
26
+ class Subscription {
27
+ constructor(options) {
28
+ this.provider = (0, global_1.getCurrentNodeProvider)();
29
+ this.pollingInterval = options.pollingInterval;
30
+ this.messageCallback = options.messageCallback;
31
+ this.errorCallback = options.errorCallback;
32
+ this.task = undefined;
33
+ this.cancelled = false;
34
+ this.eventEmitter = new eventemitter3_1.default();
35
+ }
36
+ startPolling() {
37
+ this.eventEmitter.on('tick', async () => {
38
+ await this.polling();
39
+ if (!this.cancelled) {
40
+ this.task = setTimeout(() => this.eventEmitter.emit('tick'), this.pollingInterval);
41
+ }
42
+ });
43
+ this.eventEmitter.emit('tick');
44
+ }
45
+ unsubscribe() {
46
+ this.eventEmitter.removeAllListeners();
47
+ this.cancelled = true;
48
+ if (typeof this.task !== 'undefined') {
49
+ clearTimeout(this.task);
50
+ }
51
+ }
52
+ }
53
+ exports.Subscription = Subscription;
@@ -7,9 +7,10 @@ export declare function convertHttpResponse<T>(response: node.HttpResponse<T, {
7
7
  detail: string;
8
8
  }>): T;
9
9
  export declare function signatureEncode(signature: EC.Signature): string;
10
- export declare const signatureDecode: (ec: EC, signature: string) => SignatureInput;
10
+ export declare function signatureDecode(ec: EC, signature: string): SignatureInput;
11
+ export declare function xorByte(intValue: number): number;
11
12
  export declare function isHexString(input: string): boolean;
12
- export declare const groupOfAddress: (address: string) => number;
13
+ export declare function groupOfAddress(address: string): number;
13
14
  export declare function contractIdFromAddress(address: string): Uint8Array;
14
15
  export declare function tokenIdFromAddress(address: string): Uint8Array;
15
16
  export declare function hexToBinUnsafe(hex: string): Uint8Array;
@@ -20,6 +21,8 @@ export declare function addressFromContractId(contractId: string): string;
20
21
  export declare function contractIdFromTx(txId: string, outputIndex: number): string;
21
22
  export declare function subContractId(parentContractId: string, pathInHex: string): string;
22
23
  export declare function stringToHex(str: string): string;
24
+ export declare function hexToString(str: string): string;
25
+ export declare function timeout(ms: number): Promise<void>;
23
26
  declare type _Eq<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
24
27
  export declare type Eq<X, Y> = _Eq<{
25
28
  [P in keyof X]: X[P];
@@ -20,7 +20,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
20
20
  return (mod && mod.__esModule) ? mod : { "default": mod };
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.assertType = exports.stringToHex = exports.subContractId = exports.contractIdFromTx = exports.addressFromContractId = exports.addressFromPublicKey = exports.publicKeyFromPrivateKey = exports.binToHex = exports.hexToBinUnsafe = exports.tokenIdFromAddress = exports.contractIdFromAddress = exports.groupOfAddress = exports.isHexString = exports.signatureDecode = exports.signatureEncode = exports.convertHttpResponse = void 0;
23
+ exports.assertType = exports.timeout = exports.hexToString = exports.stringToHex = exports.subContractId = exports.contractIdFromTx = exports.addressFromContractId = exports.addressFromPublicKey = exports.publicKeyFromPrivateKey = exports.binToHex = exports.hexToBinUnsafe = exports.tokenIdFromAddress = exports.contractIdFromAddress = exports.groupOfAddress = exports.isHexString = exports.xorByte = exports.signatureDecode = exports.signatureEncode = exports.convertHttpResponse = void 0;
24
24
  const elliptic_1 = require("elliptic");
25
25
  const bn_js_1 = __importDefault(require("bn.js"));
26
26
  const blakejs_1 = __importDefault(require("blakejs"));
@@ -49,7 +49,7 @@ function signatureEncode(signature) {
49
49
  }
50
50
  exports.signatureEncode = signatureEncode;
51
51
  // the signature should be in hex string format for 64 bytes
52
- const signatureDecode = (ec, signature) => {
52
+ function signatureDecode(ec, signature) {
53
53
  if (signature.length !== 128) {
54
54
  throw new Error('Invalid signature length');
55
55
  }
@@ -62,15 +62,16 @@ const signatureDecode = (ec, signature) => {
62
62
  else {
63
63
  throw new Error('The signature is not normalized');
64
64
  }
65
- };
65
+ }
66
66
  exports.signatureDecode = signatureDecode;
67
- const xorByte = (intValue) => {
67
+ function xorByte(intValue) {
68
68
  const byte0 = (intValue >> 24) & 0xff;
69
69
  const byte1 = (intValue >> 16) & 0xff;
70
70
  const byte2 = (intValue >> 8) & 0xff;
71
71
  const byte3 = intValue & 0xff;
72
72
  return (byte0 ^ byte1 ^ byte2 ^ byte3) & 0xff;
73
- };
73
+ }
74
+ exports.xorByte = xorByte;
74
75
  function isHexString(input) {
75
76
  return input.length % 2 === 0 && /[0-9a-f]*$/.test(input);
76
77
  }
@@ -82,7 +83,7 @@ var AddressType;
82
83
  AddressType[AddressType["P2SH"] = 2] = "P2SH";
83
84
  AddressType[AddressType["P2C"] = 3] = "P2C";
84
85
  })(AddressType || (AddressType = {}));
85
- const groupOfAddress = (address) => {
86
+ function groupOfAddress(address) {
86
87
  const decoded = bs58_1.default.decode(address);
87
88
  if (decoded.length == 0)
88
89
  throw new Error('Address string is empty');
@@ -100,32 +101,32 @@ const groupOfAddress = (address) => {
100
101
  else {
101
102
  throw new Error(`Invalid asset address type: ${addressType}`);
102
103
  }
103
- };
104
+ }
104
105
  exports.groupOfAddress = groupOfAddress;
105
- const groupOfAddressBytes = (bytes) => {
106
+ function groupOfAddressBytes(bytes) {
106
107
  const hint = (0, djb2_1.default)(bytes) | 1;
107
108
  const hash = xorByte(hint);
108
109
  const group = hash % constants_1.TOTAL_NUMBER_OF_GROUPS;
109
110
  return group;
110
- };
111
+ }
111
112
  // Pay to public key hash address
112
- const groupOfP2pkhAddress = (address) => {
113
+ function groupOfP2pkhAddress(address) {
113
114
  if (address.length != 32) {
114
115
  throw new Error(`Invalid p2pkh address length: ${address.length}`);
115
116
  }
116
117
  return groupOfAddressBytes(address);
117
- };
118
+ }
118
119
  // Pay to multiple public key hash address
119
- const groupOfP2mpkhAddress = (address) => {
120
+ function groupOfP2mpkhAddress(address) {
120
121
  if ((address.length - 2) % 32 != 0) {
121
122
  throw new Error(`Invalid p2mpkh address length: ${address.length}`);
122
123
  }
123
124
  return groupOfAddressBytes(address.slice(1, 33));
124
- };
125
+ }
125
126
  // Pay to script hash address
126
- const groupOfP2shAddress = (address) => {
127
+ function groupOfP2shAddress(address) {
127
128
  return groupOfAddressBytes(address);
128
- };
129
+ }
129
130
  function contractIdFromAddress(address) {
130
131
  return idFromAddress(address);
131
132
  }
@@ -182,7 +183,7 @@ function contractIdFromTx(txId, outputIndex) {
182
183
  }
183
184
  exports.contractIdFromTx = contractIdFromTx;
184
185
  function subContractId(parentContractId, pathInHex) {
185
- const data = buffer_1.Buffer.concat([hexToBinUnsafe(pathInHex), hexToBinUnsafe(parentContractId)]);
186
+ const data = buffer_1.Buffer.concat([hexToBinUnsafe(parentContractId), hexToBinUnsafe(pathInHex)]);
186
187
  return binToHex(blakejs_1.default.blake2b(blakejs_1.default.blake2b(data, undefined, 32), undefined, 32));
187
188
  }
188
189
  exports.subContractId = subContractId;
@@ -194,6 +195,14 @@ function stringToHex(str) {
194
195
  return hex;
195
196
  }
196
197
  exports.stringToHex = stringToHex;
198
+ function hexToString(str) {
199
+ return buffer_1.Buffer.from(str, 'hex').toString();
200
+ }
201
+ exports.hexToString = hexToString;
202
+ function timeout(ms) {
203
+ return new Promise((resolve) => setTimeout(resolve, ms));
204
+ }
205
+ exports.timeout = timeout;
197
206
  // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
198
207
  function assertType() { }
199
208
  exports.assertType = assertType;
@@ -0,0 +1,11 @@
1
+ {
2
+ "testPathIgnorePatterns": [".*/node_modules/"],
3
+ "transform": {
4
+ "^.+\\.(t|j)sx?$": "ts-jest"
5
+ },
6
+ "testMatch": ["**/*.test.ts"],
7
+ "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"],
8
+ "collectCoverage": true,
9
+ "coverageDirectory": "./coverage/",
10
+ "collectCoverageFrom": ["src/**/*.ts"]
11
+ }