@super-protocol/sdk-js 0.14.2-beta.0 → 0.15.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.
Files changed (79) hide show
  1. package/build/TIIGenerator.js +129 -239
  2. package/build/connectors/BaseConnector.js +17 -47
  3. package/build/connectors/BlockchainConnector.js +222 -348
  4. package/build/connectors/BlockchainEventsListener.js +38 -92
  5. package/build/contracts/app.json +0 -110
  6. package/build/crypto/Crypto.js +63 -135
  7. package/build/crypto/index.js +1 -1
  8. package/build/crypto/nodejs/AES.js +62 -119
  9. package/build/crypto/nodejs/ARIA.js +61 -118
  10. package/build/crypto/nodejs/ECIES.js +51 -87
  11. package/build/crypto/nodejs/NativeCrypto.js +64 -118
  12. package/build/crypto/nodejs/RSA-Hybrid.js +54 -113
  13. package/build/index.d.ts +5 -0
  14. package/build/index.js +14 -2
  15. package/build/logger.d.ts +3 -1
  16. package/build/logger.js +2 -2
  17. package/build/models/EtlModel.js +65 -114
  18. package/build/models/Offer.js +227 -462
  19. package/build/models/Order.js +324 -573
  20. package/build/models/Provider.js +72 -165
  21. package/build/models/TCB.js +67 -171
  22. package/build/models/TeeOffer.d.ts +1 -7
  23. package/build/models/TeeOffer.js +389 -758
  24. package/build/proto/Compression.js +20 -21
  25. package/build/proto/TRI.js +46 -50
  26. package/build/proto/TeeProperties.js +60 -66
  27. package/build/providers/storage/ChunksDownloadDecorator.js +125 -235
  28. package/build/providers/storage/S3StorageProvider.js +173 -298
  29. package/build/providers/storage/StorageAdapter.d.ts +60 -0
  30. package/build/providers/storage/StorageAdapter.js +317 -0
  31. package/build/providers/storage/StorageContentWriter.d.ts +39 -0
  32. package/build/providers/storage/StorageContentWriter.js +181 -0
  33. package/build/providers/storage/StorageKeyValueAdapter.d.ts +20 -0
  34. package/build/providers/storage/StorageKeyValueAdapter.js +152 -0
  35. package/build/providers/storage/StorageMetadataReader.d.ts +19 -0
  36. package/build/providers/storage/StorageMetadataReader.js +65 -0
  37. package/build/providers/storage/StorjAdapter.d.ts +19 -0
  38. package/build/providers/storage/StorjAdapter.js +62 -0
  39. package/build/providers/storage/StorjStorageProvider.js +138 -315
  40. package/build/providers/storage/getStorageProvider.js +7 -7
  41. package/build/providers/storage/types.d.ts +7 -0
  42. package/build/providers/storage/types.js +2 -0
  43. package/build/staticModels/ActiveOffers.js +32 -100
  44. package/build/staticModels/ActiveOrders.js +42 -120
  45. package/build/staticModels/BaseStaticModel.js +7 -10
  46. package/build/staticModels/Consensus.d.ts +2 -2
  47. package/build/staticModels/Consensus.js +157 -280
  48. package/build/staticModels/Deposits.js +109 -201
  49. package/build/staticModels/Marks.js +21 -82
  50. package/build/staticModels/ModelPackager.js +34 -84
  51. package/build/staticModels/Offers.js +140 -266
  52. package/build/staticModels/Orders.js +285 -472
  53. package/build/staticModels/ProviderRegistry.js +114 -225
  54. package/build/staticModels/Superpro.js +17 -63
  55. package/build/staticModels/SuperproToken.js +90 -169
  56. package/build/staticModels/TeeOffers.js +220 -416
  57. package/build/store.js +2 -2
  58. package/build/types/HardwareInfo.js +2 -2
  59. package/build/types/Order.d.ts +0 -6
  60. package/build/types/Order.js +4 -6
  61. package/build/types/Provider.js +1 -1
  62. package/build/types/TeeOfferInfo.js +1 -1
  63. package/build/types/TeeOfferOption.js +2 -2
  64. package/build/types/TeeOfferSlot.js +2 -2
  65. package/build/types/ValueOfferSlot.js +3 -3
  66. package/build/utils/Monitoring.js +24 -28
  67. package/build/utils/NonceTracker.js +56 -121
  68. package/build/utils/PubSub.d.ts +9 -0
  69. package/build/utils/PubSub.js +36 -0
  70. package/build/utils/TxManager.js +121 -215
  71. package/build/utils/compressors/GzipCompressor.js +13 -50
  72. package/build/utils/compressors/UncompressedCompressor.js +10 -13
  73. package/build/utils/helpers/tryWithInterval.js +34 -78
  74. package/build/utils/resourceLoaders/BaseResourceLoader.js +26 -78
  75. package/build/utils/resourceLoaders/StorageProviderLoader.js +33 -97
  76. package/build/utils/resourceLoaders/UrlResourceLoader.js +29 -93
  77. package/build/utils/resourceLoaders/getResourceLoader.js +6 -6
  78. package/build/utils.js +60 -105
  79. package/package.json +4 -1
package/build/store.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var constants_1 = require("./constants");
4
- var store = {
3
+ const constants_1 = require("./constants");
4
+ const store = {
5
5
  web3Wss: undefined,
6
6
  web3Https: undefined,
7
7
  actionAccount: undefined,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HardwareInfoStructure = void 0;
4
- var OptionInfo_1 = require("./OptionInfo");
5
- var SlotInfo_1 = require("./SlotInfo");
4
+ const OptionInfo_1 = require("./OptionInfo");
5
+ const SlotInfo_1 = require("./SlotInfo");
6
6
  // Order of keys and type conversion functions for this object in blockchain contract
7
7
  exports.HardwareInfoStructure = {
8
8
  slotInfo: SlotInfo_1.SlotInfoStructure,
@@ -43,8 +43,6 @@ export declare const OrderInfoStructure: {
43
43
  optionsCount: StringConstructor[];
44
44
  };
45
45
  externalId: typeof parseBytes32String;
46
- expectedPrice: StringConstructor;
47
- maxPriceSlippage: StringConstructor;
48
46
  };
49
47
  export declare const OrderInfoStructureArray: {
50
48
  offerId: StringConstructor;
@@ -63,8 +61,6 @@ export declare const OrderInfoStructureArray: {
63
61
  optionsCount: StringConstructor[];
64
62
  };
65
63
  externalId: typeof parseBytes32String;
66
- expectedPrice: StringConstructor;
67
- maxPriceSlippage: StringConstructor;
68
64
  }[];
69
65
  export type OrderSlots = {
70
66
  slotId: string;
@@ -81,8 +77,6 @@ export type OrderInfo = {
81
77
  args: OrderArgs;
82
78
  slots: OrderSlots;
83
79
  externalId: string;
84
- expectedPrice: string;
85
- maxPriceSlippage: string;
86
80
  };
87
81
  export type ExtendedOrderInfo = OrderInfo & {
88
82
  blocking: boolean;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OrderUsageStructure = exports.OrderResultStructure = exports.OrderInfoStructureArray = exports.OrderInfoStructure = exports.OrderSlotsStructure = exports.OrderArgsStructure = exports.OrderStatus = void 0;
4
- var utils_1 = require("ethers/lib/utils");
5
- var SlotUsage_1 = require("./SlotUsage");
6
- var SlotInfo_1 = require("./SlotInfo");
7
- var OptionInfo_1 = require("./OptionInfo");
4
+ const utils_1 = require("ethers/lib/utils");
5
+ const SlotUsage_1 = require("./SlotUsage");
6
+ const SlotInfo_1 = require("./SlotInfo");
7
+ const OptionInfo_1 = require("./OptionInfo");
8
8
  var OrderStatus;
9
9
  (function (OrderStatus) {
10
10
  OrderStatus["New"] = "0";
@@ -37,8 +37,6 @@ exports.OrderInfoStructure = {
37
37
  args: exports.OrderArgsStructure,
38
38
  slots: exports.OrderSlotsStructure,
39
39
  externalId: utils_1.parseBytes32String,
40
- expectedPrice: String,
41
- maxPriceSlippage: String,
42
40
  };
43
41
  // Array of order info structures
44
42
  exports.OrderInfoStructureArray = [exports.OrderInfoStructure];
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProviderInfoStructureV2 = exports.ProviderInfoStructure = void 0;
4
- var utils_1 = require("ethers/lib/utils");
4
+ const utils_1 = require("ethers/lib/utils");
5
5
  // Order of keys and type conversion functions for this object in blockchain contract
6
6
  exports.ProviderInfoStructure = {
7
7
  tokenReceiver: String,
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TeeOfferInfoStructure = void 0;
4
- var HardwareInfo_1 = require("./HardwareInfo");
4
+ const HardwareInfo_1 = require("./HardwareInfo");
5
5
  // Order of keys and type conversion functions for this object in blockchain contract
6
6
  exports.TeeOfferInfoStructure = {
7
7
  name: String,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TeeOfferOptionStructure = void 0;
4
- var OptionInfo_1 = require("./OptionInfo");
5
- var SlotUsage_1 = require("./SlotUsage");
4
+ const OptionInfo_1 = require("./OptionInfo");
5
+ const SlotUsage_1 = require("./SlotUsage");
6
6
  // Order of keys and type conversion functions for this object in blockchain contract
7
7
  exports.TeeOfferOptionStructure = {
8
8
  id: String,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TeeOfferSlotStructure = void 0;
4
- var SlotInfo_1 = require("./SlotInfo");
5
- var SlotUsage_1 = require("./SlotUsage");
4
+ const SlotInfo_1 = require("./SlotInfo");
5
+ const SlotUsage_1 = require("./SlotUsage");
6
6
  // Order of keys and type conversion functions for this object in blockchain contract
7
7
  exports.TeeOfferSlotStructure = {
8
8
  id: String,
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ValueOfferSlotStructure = void 0;
4
- var OptionInfo_1 = require("./OptionInfo");
5
- var SlotInfo_1 = require("./SlotInfo");
6
- var SlotUsage_1 = require("./SlotUsage");
4
+ const OptionInfo_1 = require("./OptionInfo");
5
+ const SlotInfo_1 = require("./SlotInfo");
6
+ const SlotUsage_1 = require("./SlotUsage");
7
7
  // Order of keys and type conversion functions for this object in blockchain contract
8
8
  exports.ValueOfferSlotStructure = {
9
9
  id: String,
@@ -4,45 +4,41 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Monitoring = void 0;
7
- var logger_1 = __importDefault(require("../logger"));
8
- var Monitoring = /** @class */ (function () {
9
- function Monitoring() {
7
+ const logger_1 = __importDefault(require("../logger"));
8
+ class Monitoring {
9
+ constructor() {
10
10
  this.logger = logger_1.default.child({ className: "Monitoring" });
11
11
  this.contractMethodCalls = new Map();
12
12
  }
13
- Monitoring.getInstance = function () {
13
+ static getInstance() {
14
14
  if (!Monitoring.instance) {
15
15
  Monitoring.instance = new Monitoring();
16
16
  }
17
17
  return Monitoring.instance;
18
- };
19
- Monitoring.prototype.initializeLogging = function () {
20
- var _this = this;
21
- var checkInterval = process.env.PRINT_CONTRACT_CALLS_INTERVAL || 300000;
18
+ }
19
+ initializeLogging() {
20
+ const checkInterval = process.env.PRINT_CONTRACT_CALLS_INTERVAL || 300000;
22
21
  this.shutdownLogging();
23
- var startTs = Date.now();
24
- this.interval = setInterval(function () {
25
- _this.contractMethodCalls.forEach(function (value, key) {
26
- return _this.logger.debug({
27
- methodName: key,
28
- calledTimes: value,
29
- });
30
- });
31
- var totalCalls = Array.from(_this.contractMethodCalls.values()).reduce(function (acc, curr) { return acc + curr; }, 0);
32
- var timeSpend = Math.floor((Date.now() - startTs) / (60 * 1000));
33
- _this.logger.debug({
22
+ const startTs = Date.now();
23
+ this.interval = setInterval(() => {
24
+ this.contractMethodCalls.forEach((value, key) => this.logger.debug({
25
+ methodName: key,
26
+ calledTimes: value,
27
+ }));
28
+ const totalCalls = Array.from(this.contractMethodCalls.values()).reduce((acc, curr) => acc + curr, 0);
29
+ const timeSpend = Math.floor((Date.now() - startTs) / (60 * 1000));
30
+ this.logger.debug({
34
31
  timeSpend: timeSpend + " min",
35
- totalCalls: totalCalls,
32
+ totalCalls,
36
33
  }, "Contract methods calls");
37
34
  }, +checkInterval);
38
- };
39
- Monitoring.prototype.shutdownLogging = function () {
35
+ }
36
+ shutdownLogging() {
40
37
  clearInterval(this.interval);
41
- };
42
- Monitoring.prototype.incrementCall = function (methodName) {
43
- var prevValue = this.contractMethodCalls.get(methodName) || 0;
38
+ }
39
+ incrementCall(methodName) {
40
+ const prevValue = this.contractMethodCalls.get(methodName) || 0;
44
41
  this.contractMethodCalls.set(methodName, prevValue + 1);
45
- };
46
- return Monitoring;
47
- }());
42
+ }
43
+ }
48
44
  exports.Monitoring = Monitoring;
@@ -8,148 +8,83 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
13
  };
41
14
  Object.defineProperty(exports, "__esModule", { value: true });
42
- var logger_1 = __importDefault(require("../logger"));
43
- var NonceTracker = /** @class */ (function () {
44
- function NonceTracker(web3, address) {
15
+ const logger_1 = __importDefault(require("../logger"));
16
+ class NonceTracker {
17
+ constructor(web3, address) {
45
18
  this.web3 = web3;
46
19
  this.address = address;
47
20
  this.countOfPendingTransactions = 0;
48
- this.logger = logger_1.default.child({ className: "NonceTracker", address: address });
21
+ this.logger = logger_1.default.child({ className: "NonceTracker", address });
49
22
  this.logger.trace("Created NonceTracker");
50
23
  }
51
- NonceTracker.prototype.initAccount = function () {
52
- return __awaiter(this, void 0, void 0, function () {
53
- var _a;
54
- return __generator(this, function (_b) {
55
- switch (_b.label) {
56
- case 0:
57
- _a = this;
58
- return [4 /*yield*/, this.web3.eth.getTransactionCount(this.address)];
59
- case 1:
60
- _a.txCount = _b.sent();
61
- this.logger.trace("Initialized ".concat(this.address, " account with nonce: ").concat(this.txCount));
62
- return [2 /*return*/];
63
- }
64
- });
24
+ initAccount() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ this.txCount = yield this.web3.eth.getTransactionCount(this.address);
27
+ this.logger.trace(`Initialized ${this.address} account with nonce: ${this.txCount}`);
65
28
  });
66
- };
67
- NonceTracker.prototype.getNonce = function () {
29
+ }
30
+ getNonce() {
68
31
  if (this.txCount === undefined)
69
- throw Error("NonceTracker for address ".concat(this.address, " is not initialized"));
70
- this.logger.trace("Get nonce: ".concat(this.txCount));
32
+ throw Error(`NonceTracker for address ${this.address} is not initialized`);
33
+ this.logger.trace(`Get nonce: ${this.txCount}`);
71
34
  return this.txCount;
72
- };
73
- NonceTracker.prototype.consumeNonce = function () {
35
+ }
36
+ consumeNonce() {
74
37
  if (this.txCount === undefined)
75
- throw Error("NonceTracker for address ".concat(this.address, " is not initialized"));
76
- this.logger.trace("Consume nonce: ".concat(this.txCount + 1));
38
+ throw Error(`NonceTracker for address ${this.address} is not initialized`);
39
+ this.logger.trace(`Consume nonce: ${this.txCount + 1}`);
77
40
  return this.txCount++;
78
- };
79
- NonceTracker.prototype.onTransactionStartPublishing = function () {
80
- return __awaiter(this, void 0, void 0, function () {
81
- return __generator(this, function (_a) {
82
- switch (_a.label) {
83
- case 0:
84
- if (!this.transactionsOnHold) return [3 /*break*/, 2];
85
- return [4 /*yield*/, this.waitForPendingTransactions()];
86
- case 1:
87
- _a.sent();
88
- _a.label = 2;
89
- case 2:
90
- this.countOfPendingTransactions++;
91
- return [2 /*return*/];
92
- }
93
- });
41
+ }
42
+ onTransactionStartPublishing() {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ if (this.transactionsOnHold) {
45
+ yield this.waitForPendingTransactions();
46
+ }
47
+ this.countOfPendingTransactions++;
94
48
  });
95
- };
96
- NonceTracker.prototype.onTransactionPublished = function () {
49
+ }
50
+ onTransactionPublished() {
97
51
  this.countOfPendingTransactions--;
98
52
  if (this.countOfPendingTransactions === 0) {
99
53
  this.sendHoldTransactions();
100
54
  }
101
- };
102
- NonceTracker.prototype.onTransactionError = function () {
103
- return __awaiter(this, void 0, void 0, function () {
104
- return __generator(this, function (_a) {
105
- switch (_a.label) {
106
- case 0:
107
- this.countOfPendingTransactions--;
108
- if (!this.transactionsOnHold)
109
- this.transactionsOnHold = [];
110
- if (!(this.countOfPendingTransactions === 0)) return [3 /*break*/, 1];
111
- this.sendHoldTransactions();
112
- return [3 /*break*/, 3];
113
- case 1: return [4 /*yield*/, this.waitForPendingTransactions()];
114
- case 2:
115
- _a.sent();
116
- _a.label = 3;
117
- case 3: return [2 /*return*/];
118
- }
119
- });
55
+ }
56
+ onTransactionError() {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ this.countOfPendingTransactions--;
59
+ if (!this.transactionsOnHold)
60
+ this.transactionsOnHold = [];
61
+ if (this.countOfPendingTransactions === 0) {
62
+ this.sendHoldTransactions();
63
+ }
64
+ else {
65
+ yield this.waitForPendingTransactions();
66
+ }
120
67
  });
121
- };
122
- NonceTracker.prototype.waitForPendingTransactions = function () {
123
- return __awaiter(this, void 0, void 0, function () {
124
- var _this = this;
125
- return __generator(this, function (_a) {
126
- return [2 /*return*/, new Promise(function (resolve) {
127
- if (!_this.transactionsOnHold)
128
- return resolve();
129
- _this.transactionsOnHold.push(function () {
130
- resolve();
131
- });
132
- })];
68
+ }
69
+ waitForPendingTransactions() {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ return new Promise((resolve) => {
72
+ if (!this.transactionsOnHold)
73
+ return resolve();
74
+ this.transactionsOnHold.push(() => {
75
+ resolve();
76
+ });
133
77
  });
134
78
  });
135
- };
136
- NonceTracker.prototype.sendHoldTransactions = function () {
137
- return __awaiter(this, void 0, void 0, function () {
138
- return __generator(this, function (_a) {
139
- switch (_a.label) {
140
- case 0:
141
- if (!this.transactionsOnHold)
142
- return [2 /*return*/];
143
- return [4 /*yield*/, this.initAccount()];
144
- case 1:
145
- _a.sent();
146
- this.transactionsOnHold.forEach(function (callback) { return callback(); });
147
- this.transactionsOnHold = undefined;
148
- return [2 /*return*/];
149
- }
150
- });
79
+ }
80
+ sendHoldTransactions() {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ if (!this.transactionsOnHold)
83
+ return;
84
+ yield this.initAccount();
85
+ this.transactionsOnHold.forEach((callback) => callback());
86
+ this.transactionsOnHold = undefined;
151
87
  });
152
- };
153
- return NonceTracker;
154
- }());
88
+ }
89
+ }
155
90
  exports.default = NonceTracker;
@@ -0,0 +1,9 @@
1
+ type Listener<Message> = (message: Message) => void;
2
+ export default class PubSub<Event, Message> {
3
+ private subscriptions;
4
+ subscribe(event: Event, listener: Listener<Message>): () => void;
5
+ unsubscribe(event: Event, listener: Listener<Message>): void;
6
+ publish(event: Event, message: Message): void;
7
+ clear(event?: Event): void;
8
+ }
9
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class PubSub {
4
+ constructor() {
5
+ this.subscriptions = new Map();
6
+ }
7
+ subscribe(event, listener) {
8
+ this.subscriptions.set(event, (this.subscriptions.get(event) || []).concat(listener));
9
+ return () => {
10
+ this.unsubscribe(event, listener);
11
+ };
12
+ }
13
+ unsubscribe(event, listener) {
14
+ const eventListeners = this.subscriptions.get(event);
15
+ if (eventListeners) {
16
+ this.subscriptions.set(event, eventListeners.filter((l) => l !== listener));
17
+ }
18
+ }
19
+ publish(event, message) {
20
+ const eventListeners = this.subscriptions.get(event);
21
+ if (eventListeners) {
22
+ eventListeners.forEach((listener) => {
23
+ listener(message);
24
+ });
25
+ }
26
+ }
27
+ clear(event) {
28
+ if (event) {
29
+ this.subscriptions.delete(event);
30
+ }
31
+ else {
32
+ this.subscriptions.clear();
33
+ }
34
+ }
35
+ }
36
+ exports.default = PubSub;