@morpho-dev/router 0.0.16 → 0.0.18

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 (32) hide show
  1. package/dist/index.browser.d.cts +136 -9
  2. package/dist/index.browser.d.ts +136 -9
  3. package/dist/index.browser.js +377 -9
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.browser.mjs +377 -5
  6. package/dist/index.browser.mjs.map +1 -1
  7. package/dist/index.node.d.cts +108 -726
  8. package/dist/index.node.d.ts +108 -726
  9. package/dist/index.node.js +735 -1215
  10. package/dist/index.node.js.map +1 -1
  11. package/dist/index.node.mjs +734 -1204
  12. package/dist/index.node.mjs.map +1 -1
  13. package/package.json +3 -12
  14. package/dist/drizzle/0000_add-offers-table.sql +0 -37
  15. package/dist/drizzle/0001_create_offer_status_relation.sql +0 -10
  16. package/dist/drizzle/0002_add_created_at_in_offer_status_relation.sql +0 -3
  17. package/dist/drizzle/0003_add-cursor-indices-to-offers.sql +0 -6
  18. package/dist/drizzle/0004_offer-start.sql +0 -1
  19. package/dist/drizzle/0005_rename-price-token-buy.sql +0 -8
  20. package/dist/drizzle/0006_rename-buy.sql +0 -3
  21. package/dist/drizzle/0007_rename-offering.sql +0 -3
  22. package/dist/drizzle/0008_add-consumed-relation.sql +0 -10
  23. package/dist/drizzle/meta/0000_snapshot.json +0 -344
  24. package/dist/drizzle/meta/0001_snapshot.json +0 -426
  25. package/dist/drizzle/meta/0002_snapshot.json +0 -439
  26. package/dist/drizzle/meta/0003_snapshot.json +0 -553
  27. package/dist/drizzle/meta/0004_snapshot.json +0 -559
  28. package/dist/drizzle/meta/0005_snapshot.json +0 -559
  29. package/dist/drizzle/meta/0006_snapshot.json +0 -559
  30. package/dist/drizzle/meta/0007_snapshot.json +0 -559
  31. package/dist/drizzle/meta/0008_snapshot.json +0 -635
  32. package/dist/drizzle/meta/_journal.json +0 -69
@@ -2,9 +2,9 @@
2
2
 
3
3
  var mempool = require('@morpho-dev/mempool');
4
4
  var chains$1 = require('viem/chains');
5
- var viem = require('viem');
6
5
  var v4 = require('zod/v4');
7
6
  var zodOpenapi = require('zod-openapi');
7
+ var viem = require('viem');
8
8
 
9
9
  var __defProp = Object.defineProperty;
10
10
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -68,7 +68,7 @@ var chains = {
68
68
  }
69
69
  };
70
70
 
71
- // src/core/Client.ts
71
+ // src/core/router/Client.ts
72
72
  var Client_exports = {};
73
73
  __export(Client_exports, {
74
74
  HttpForbiddenError: () => HttpForbiddenError,
@@ -139,6 +139,18 @@ var InvalidRouterOfferError = class extends mempool.Errors.BaseError {
139
139
  }
140
140
  };
141
141
 
142
+ // src/utils/index.ts
143
+ var utils_exports = {};
144
+ __export(utils_exports, {
145
+ batch: () => batch,
146
+ decodeCursor: () => decodeCursor,
147
+ encodeCursor: () => encodeCursor,
148
+ poll: () => poll,
149
+ retry: () => retry,
150
+ validateCursor: () => validateCursor,
151
+ wait: () => wait
152
+ });
153
+
142
154
  // src/utils/batch.ts
143
155
  function* batch(array, batchSize) {
144
156
  for (let i = 0; i < array.length; i += batchSize) {
@@ -249,6 +261,20 @@ function poll(fn, { interval }) {
249
261
  return unwatch;
250
262
  }
251
263
 
264
+ // src/utils/retry.ts
265
+ var retry = async (fn, attempts = 3, delayMs = 50) => {
266
+ let lastErr;
267
+ for (let i = 0; i < attempts; i++) {
268
+ try {
269
+ return await fn();
270
+ } catch (err) {
271
+ lastErr = err;
272
+ if (i < attempts - 1) await new Promise((r) => setTimeout(r, delayMs));
273
+ }
274
+ }
275
+ throw lastErr;
276
+ };
277
+
252
278
  // src/core/apiSchema/requests.ts
253
279
  var MAX_LIMIT = 100;
254
280
  var DEFAULT_LIMIT = 20;
@@ -740,7 +766,7 @@ function fromResponse(offerResponse) {
740
766
  };
741
767
  }
742
768
 
743
- // src/core/Client.ts
769
+ // src/core/router/Client.ts
744
770
  function connect(opts) {
745
771
  const u = new URL(opts?.url || "https://router.morpho.dev");
746
772
  if (u.protocol !== "http:" && u.protocol !== "https:") {
@@ -970,6 +996,352 @@ var HttpGetOffersFailedError = class extends mempool.Errors.BaseError {
970
996
  }
971
997
  };
972
998
 
999
+ // src/OfferStore/index.ts
1000
+ var OfferStore_exports = {};
1001
+ __export(OfferStore_exports, {
1002
+ memory: () => memory
1003
+ });
1004
+ function memory(parameters) {
1005
+ const map = parameters.offers;
1006
+ const filled = parameters.filled;
1007
+ const create = async (parameters2) => {
1008
+ if (map.has(parameters2.offer.hash.toLowerCase())) return parameters2.offer.hash;
1009
+ map.set(parameters2.offer.hash.toLowerCase(), {
1010
+ ...parameters2.offer,
1011
+ status: parameters2.status,
1012
+ metadata: parameters2.metadata
1013
+ });
1014
+ const chainId = parameters2.offer.chainId;
1015
+ const address = parameters2.offer.offering.toLowerCase();
1016
+ const nonce = parameters2.offer.nonce;
1017
+ const filledForChain = filled.get(chainId) || /* @__PURE__ */ new Map();
1018
+ const filledForOffering = filledForChain.get(address) || /* @__PURE__ */ new Map();
1019
+ if (!filledForOffering.has(nonce)) filledForOffering.set(nonce, 0n);
1020
+ filledForChain.set(address, filledForOffering);
1021
+ filled.set(chainId, filledForChain);
1022
+ return Promise.resolve(parameters2.offer.hash);
1023
+ };
1024
+ const sort = (sortBy, sortOrder, a, b) => {
1025
+ sortBy = sortBy || "expiry";
1026
+ sortOrder = sortOrder || "desc";
1027
+ const sortKey = sortBy === "amount" ? "assets" : sortBy;
1028
+ if (a[sortKey] === b[sortKey]) {
1029
+ if (a.hash === b.hash) return 0;
1030
+ return sortOrder === "asc" ? a.hash > b.hash ? 1 : -1 : b.hash > a.hash ? 1 : -1;
1031
+ }
1032
+ switch (sortBy) {
1033
+ case "rate":
1034
+ if (a.rate === b.rate) {
1035
+ if (a.hash === b.hash) return 0;
1036
+ return sortOrder === "asc" ? a.hash > b.hash ? 1 : -1 : a.hash > b.hash ? -1 : 1;
1037
+ }
1038
+ return sortOrder === "asc" ? a.rate > b.rate ? 1 : -1 : b.rate > a.rate ? 1 : -1;
1039
+ case "maturity":
1040
+ if (a.maturity === b.maturity) {
1041
+ if (a.hash === b.hash) return 0;
1042
+ return sortOrder === "asc" ? a.hash > b.hash ? 1 : -1 : a.hash > b.hash ? -1 : 1;
1043
+ }
1044
+ return sortOrder === "asc" ? a.maturity > b.maturity ? 1 : -1 : b.maturity > a.maturity ? 1 : -1;
1045
+ case "expiry":
1046
+ if (a.expiry === b.expiry) {
1047
+ if (a.hash === b.hash) return 0;
1048
+ return sortOrder === "asc" ? a.hash > b.hash ? 1 : -1 : a.hash > b.hash ? -1 : 1;
1049
+ }
1050
+ return sortOrder === "asc" ? a.expiry > b.expiry ? 1 : -1 : b.expiry > a.expiry ? 1 : -1;
1051
+ case "amount":
1052
+ if (a.assets === b.assets) {
1053
+ if (a.hash === b.hash) return 0;
1054
+ return sortOrder === "asc" ? a.hash > b.hash ? 1 : -1 : a.hash > b.hash ? -1 : 1;
1055
+ }
1056
+ return sortOrder === "asc" ? a.assets > b.assets ? 1 : -1 : b.assets > a.assets ? 1 : -1;
1057
+ default:
1058
+ if (a.expiry === b.expiry) {
1059
+ if (a.hash === b.hash) return 0;
1060
+ return sortOrder === "asc" ? a.hash > b.hash ? 1 : -1 : a.hash > b.hash ? -1 : 1;
1061
+ }
1062
+ return sortOrder === "asc" ? a.expiry > b.expiry ? 1 : -1 : b.expiry > a.expiry ? 1 : -1;
1063
+ }
1064
+ };
1065
+ return {
1066
+ create,
1067
+ createMany: async (parameters2) => {
1068
+ return Promise.all(
1069
+ parameters2.map((p) => create({ offer: p.offer, status: p.status, metadata: p.metadata }))
1070
+ );
1071
+ },
1072
+ getAll: async (params) => {
1073
+ const { query } = params || {};
1074
+ let {
1075
+ creators,
1076
+ side,
1077
+ chains: chains2,
1078
+ loanTokens,
1079
+ status = ["valid"],
1080
+ callbackAddresses,
1081
+ minAmount,
1082
+ maxAmount,
1083
+ minRate,
1084
+ maxRate,
1085
+ minMaturity,
1086
+ maxMaturity,
1087
+ minExpiry,
1088
+ maxExpiry,
1089
+ collateralAssets,
1090
+ collateralOracles,
1091
+ collateralTuple,
1092
+ minLltv,
1093
+ maxLltv,
1094
+ sortBy = "expiry",
1095
+ sortOrder = "desc",
1096
+ cursor: queryCursor,
1097
+ limit = 20
1098
+ } = query || {};
1099
+ const now = mempool.Time.now();
1100
+ const buy = side === "buy";
1101
+ let offers = Array.from(map.values()).map((o) => ({
1102
+ ...o,
1103
+ consumed: filled.get(o.chainId)?.get(o.offering.toLowerCase())?.get(o.nonce) || 0n
1104
+ })).filter((o) => o.consumed < o.assets);
1105
+ const cursor = decodeCursor(queryCursor);
1106
+ if (cursor) {
1107
+ if (cursor.sort !== sortBy || cursor.dir !== sortOrder) {
1108
+ throw new Error("Cursor does not match the current sort parameters");
1109
+ }
1110
+ switch (cursor.sort) {
1111
+ case "rate":
1112
+ offers = offers.filter(
1113
+ (o) => (sortOrder === "asc" ? o.rate >= BigInt(cursor.rate) : o.rate <= BigInt(cursor.rate)) && (o.rate !== BigInt(cursor.rate) || (sortOrder === "asc" ? o.hash > cursor.hash : o.hash < cursor.hash))
1114
+ );
1115
+ break;
1116
+ case "maturity":
1117
+ offers = offers.filter(
1118
+ (o) => (sortOrder === "asc" ? o.maturity >= BigInt(cursor.maturity) : o.maturity <= BigInt(cursor.maturity)) && (o.maturity !== mempool.Maturity.from(cursor.maturity) || (sortOrder === "asc" ? o.hash > cursor.hash : o.hash < cursor.hash))
1119
+ );
1120
+ break;
1121
+ case "expiry":
1122
+ offers = offers.filter(
1123
+ (o) => (sortOrder === "asc" ? o.expiry >= cursor.expiry : o.expiry <= cursor.expiry) && (o.expiry !== cursor.expiry || (sortOrder === "asc" ? o.hash > cursor.hash : o.hash < cursor.hash))
1124
+ );
1125
+ break;
1126
+ case "amount":
1127
+ offers = offers.filter(
1128
+ (o) => (sortOrder === "asc" ? o.assets >= BigInt(cursor.assets) : o.assets <= BigInt(cursor.assets)) && (o.assets !== BigInt(cursor.assets) || (sortOrder === "asc" ? o.hash > cursor.hash : o.hash < cursor.hash))
1129
+ );
1130
+ break;
1131
+ default:
1132
+ throw new Error("Invalid sort parameter");
1133
+ }
1134
+ offers = offers.filter((o) => o.hash !== cursor.hash);
1135
+ }
1136
+ creators && (creators = creators.map((c) => c.toLowerCase()));
1137
+ loanTokens && (loanTokens = loanTokens.map((lt) => lt.toLowerCase()));
1138
+ collateralAssets && (collateralAssets = collateralAssets.map((ca) => ca.toLowerCase()));
1139
+ collateralOracles && (collateralOracles = collateralOracles.map((co) => co.toLowerCase()));
1140
+ collateralTuple && (collateralTuple = collateralTuple.map((ct) => ({
1141
+ asset: ct.asset.toLowerCase(),
1142
+ oracle: ct.oracle?.toLowerCase()
1143
+ })));
1144
+ offers = offers.filter((o) => o.expiry >= now);
1145
+ creators && (offers = offers.filter((o) => creators.includes(o.offering.toLowerCase())));
1146
+ side && (offers = offers.filter((o) => o.buy === buy));
1147
+ chains2 && (offers = offers.filter((o) => chains2.includes(Number(o.chainId))));
1148
+ loanTokens && (offers = offers.filter((o) => loanTokens.includes(o.loanToken.toLowerCase())));
1149
+ status && (offers = offers.filter((o) => status.includes(o.status)));
1150
+ callbackAddresses && (offers = offers.filter(
1151
+ (o) => callbackAddresses.includes(o.callback.address.toLowerCase())
1152
+ ));
1153
+ minAmount && (offers = offers.filter((o) => o.assets >= minAmount));
1154
+ maxAmount && (offers = offers.filter((o) => o.assets <= maxAmount));
1155
+ minRate && (offers = offers.filter((o) => o.rate >= minRate));
1156
+ maxRate && (offers = offers.filter((o) => o.rate <= maxRate));
1157
+ minMaturity && (offers = offers.filter((o) => o.maturity >= minMaturity));
1158
+ maxMaturity && (offers = offers.filter((o) => o.maturity <= maxMaturity));
1159
+ minExpiry && (offers = offers.filter((o) => o.expiry >= minExpiry));
1160
+ maxExpiry && (offers = offers.filter((o) => o.expiry <= maxExpiry));
1161
+ collateralAssets && (offers = offers.filter(
1162
+ (o) => o.collaterals.some((c) => collateralAssets.includes(c.asset.toLowerCase()))
1163
+ ));
1164
+ collateralOracles && (offers = offers.filter(
1165
+ (o) => o.collaterals.some((c) => collateralOracles.includes(c.oracle.toLowerCase()))
1166
+ ));
1167
+ collateralTuple && (offers = offers.filter(
1168
+ (o) => o.collaterals.some(
1169
+ (c) => collateralTuple.some(
1170
+ (ct) => c.asset.toLowerCase() === ct.asset.toLowerCase() && (ct.oracle ? c.oracle.toLowerCase() === ct.oracle.toLowerCase() : true) && (ct.lltv ? c.lltv === mempool.LLTV.from(BigInt(ct.lltv)) : true)
1171
+ )
1172
+ )
1173
+ ));
1174
+ minLltv && (offers = offers.filter(
1175
+ (o) => o.collaterals.every((c) => c.lltv >= mempool.LLTV.from(viem.parseUnits(minLltv.toString(), 16)))
1176
+ ));
1177
+ maxLltv && (offers = offers.filter(
1178
+ (o) => o.collaterals.every((c) => c.lltv <= mempool.LLTV.from(viem.parseUnits(maxLltv.toString(), 16)))
1179
+ ));
1180
+ offers = offers.sort((a, b) => sort(sortBy, sortOrder, a, b));
1181
+ let nextCursor = null;
1182
+ if (offers.length > limit) {
1183
+ const last = offers[limit - 1];
1184
+ const base = {
1185
+ sort: sortBy,
1186
+ dir: sortOrder,
1187
+ hash: last.hash
1188
+ };
1189
+ switch (sortBy) {
1190
+ case "rate":
1191
+ base.rate = last.rate.toString();
1192
+ break;
1193
+ case "amount":
1194
+ base.assets = last.assets.toString();
1195
+ break;
1196
+ case "maturity":
1197
+ base.maturity = last.maturity;
1198
+ break;
1199
+ default:
1200
+ base.expiry = last.expiry;
1201
+ }
1202
+ nextCursor = encodeCursor(base);
1203
+ }
1204
+ offers = offers.slice(0, limit);
1205
+ return {
1206
+ offers,
1207
+ nextCursor
1208
+ };
1209
+ },
1210
+ findMatchingOffers: async (params) => {
1211
+ const {
1212
+ side,
1213
+ chainId,
1214
+ rate,
1215
+ collaterals = [],
1216
+ maturity,
1217
+ minMaturity,
1218
+ maxMaturity,
1219
+ loanToken,
1220
+ creator,
1221
+ status,
1222
+ cursor: queryCursor,
1223
+ limit = 20
1224
+ } = params;
1225
+ const now = mempool.Time.now();
1226
+ const buy = side !== "buy";
1227
+ const sortOrder = buy ? "asc" : "desc";
1228
+ let offers = Array.from(map.values()).map((o) => ({
1229
+ ...o,
1230
+ consumed: filled.get(o.chainId)?.get(o.offering.toLowerCase())?.get(o.nonce) || 0n
1231
+ })).filter((o) => o.consumed < o.assets);
1232
+ const cursor = decodeCursor(queryCursor);
1233
+ if (cursor) {
1234
+ if (cursor.sort !== "rate" || cursor.dir !== sortOrder) {
1235
+ throw new Error("Cursor does not match the current sort parameters");
1236
+ }
1237
+ offers = offers.filter(
1238
+ (o) => sortOrder === "asc" ? o.rate >= BigInt(cursor.rate) : o.rate <= BigInt(cursor.rate)
1239
+ );
1240
+ offers = offers.filter((o) => o.hash !== cursor.hash);
1241
+ }
1242
+ offers = offers.filter((o) => o.buy === buy);
1243
+ offers = offers.filter((o) => o.chainId === BigInt(chainId));
1244
+ offers = offers.filter((o) => o.expiry >= now);
1245
+ rate && (offers = offers.filter((o) => buy ? o.rate >= rate : o.rate <= rate));
1246
+ collaterals.length > 0 && (offers = offers.filter(
1247
+ (o) => buy ? collaterals.every((c) => {
1248
+ return o.collaterals.some(
1249
+ (oc) => oc.asset.toLowerCase() === c.asset.toLowerCase() && oc.oracle.toLowerCase() === c.oracle.toLowerCase() && oc.lltv === c.lltv
1250
+ );
1251
+ }) : o.collaterals.every((oc) => {
1252
+ return collaterals.some(
1253
+ (c) => oc.asset.toLowerCase() === c.asset.toLowerCase() && oc.oracle.toLowerCase() === c.oracle.toLowerCase() && oc.lltv === c.lltv
1254
+ );
1255
+ })
1256
+ ));
1257
+ maturity && (offers = offers.filter((o) => o.maturity === maturity));
1258
+ minMaturity && (offers = offers.filter((o) => o.maturity >= minMaturity));
1259
+ maxMaturity && (offers = offers.filter((o) => o.maturity <= maxMaturity));
1260
+ loanToken && (offers = offers.filter((o) => o.loanToken.toLowerCase() === loanToken.toLowerCase()));
1261
+ creator && (offers = offers.filter((o) => o.offering.toLowerCase() === creator.toLowerCase()));
1262
+ status && (offers = offers.filter((o) => status.includes(o.status)));
1263
+ const byGroup = /* @__PURE__ */ new Map();
1264
+ for (const offer of offers) {
1265
+ const groupKey = `${offer.chainId}-${offer.offering.toLowerCase()}-${offer.nonce}-${offer.buy}`;
1266
+ const current = byGroup.get(groupKey);
1267
+ if (!current) {
1268
+ byGroup.set(groupKey, offer);
1269
+ continue;
1270
+ }
1271
+ const remainingCandidate = offer.assets - offer.consumed;
1272
+ const remainingCurrent = current.assets - current.consumed;
1273
+ let candidateIsBetter = false;
1274
+ if (offer.buy) {
1275
+ if (offer.rate !== current.rate) candidateIsBetter = offer.rate < current.rate;
1276
+ else if (remainingCandidate !== remainingCurrent)
1277
+ candidateIsBetter = remainingCandidate > remainingCurrent;
1278
+ else if (offer.maturity !== current.maturity)
1279
+ candidateIsBetter = offer.maturity > current.maturity;
1280
+ else candidateIsBetter = offer.hash < current.hash;
1281
+ } else {
1282
+ if (offer.rate !== current.rate) candidateIsBetter = offer.rate > current.rate;
1283
+ else if (remainingCandidate !== remainingCurrent)
1284
+ candidateIsBetter = remainingCandidate > remainingCurrent;
1285
+ else if (offer.maturity !== current.maturity)
1286
+ candidateIsBetter = offer.maturity > current.maturity;
1287
+ else candidateIsBetter = offer.hash < current.hash;
1288
+ }
1289
+ if (candidateIsBetter) byGroup.set(groupKey, offer);
1290
+ }
1291
+ offers = Array.from(byGroup.values());
1292
+ offers = offers.sort((a, b) => sort("rate", sortOrder, a, b));
1293
+ let nextCursor = null;
1294
+ if (offers.length > limit) {
1295
+ const last = offers[limit - 1];
1296
+ nextCursor = encodeCursor({
1297
+ sort: "rate",
1298
+ dir: sortOrder,
1299
+ hash: last.hash,
1300
+ rate: last.rate.toString()
1301
+ });
1302
+ }
1303
+ offers = offers.slice(0, limit);
1304
+ return {
1305
+ offers,
1306
+ nextCursor
1307
+ };
1308
+ },
1309
+ delete: async (hash) => {
1310
+ if (!map.has(hash.toLowerCase())) return false;
1311
+ map.delete(hash.toLowerCase());
1312
+ return true;
1313
+ },
1314
+ deleteMany: async (hashes) => {
1315
+ let deleted = 0;
1316
+ for (const hash of hashes) {
1317
+ if (map.has(hash.toLowerCase())) {
1318
+ map.delete(hash.toLowerCase());
1319
+ deleted++;
1320
+ }
1321
+ }
1322
+ return deleted;
1323
+ },
1324
+ updateStatus: async (parameters2) => {
1325
+ if (!map.has(parameters2.offerHash.toLowerCase())) return;
1326
+ map.set(parameters2.offerHash.toLowerCase(), {
1327
+ ...map.get(parameters2.offerHash.toLowerCase()),
1328
+ status: parameters2.status,
1329
+ metadata: parameters2.metadata
1330
+ });
1331
+ },
1332
+ updateConsumedAmount: async (parameters2) => {
1333
+ const chainId = parameters2.chainId;
1334
+ const address = parameters2.offering.toLowerCase();
1335
+ const nonce = parameters2.nonce;
1336
+ const filledForChain = filled.get(chainId) || /* @__PURE__ */ new Map();
1337
+ const filledForOffering = filledForChain.get(address) || /* @__PURE__ */ new Map();
1338
+ filledForOffering.set(nonce, parameters2.consumed);
1339
+ filledForChain.set(address, filledForOffering);
1340
+ filled.set(chainId, filledForChain);
1341
+ }
1342
+ };
1343
+ }
1344
+
973
1345
  // src/RouterEvent.ts
974
1346
  var RouterEvent_exports = {};
975
1347
  __export(RouterEvent_exports, {
@@ -1205,17 +1577,13 @@ function morpho(parameters) {
1205
1577
  }
1206
1578
 
1207
1579
  exports.Chain = Chain_exports;
1580
+ exports.OfferStore = OfferStore_exports;
1208
1581
  exports.Router = Client_exports;
1209
1582
  exports.RouterEvent = RouterEvent_exports;
1210
1583
  exports.RouterOffer = RouterOffer_exports;
1584
+ exports.Utils = utils_exports;
1211
1585
  exports.Validation = Validation_exports;
1212
1586
  exports.ValidationRule = ValidationRule_exports;
1213
- exports.batch = batch;
1214
- exports.decodeCursor = decodeCursor;
1215
- exports.encodeCursor = encodeCursor;
1216
- exports.poll = poll;
1217
- exports.validateCursor = validateCursor;
1218
- exports.wait = wait;
1219
1587
  Object.keys(mempool).forEach(function (k) {
1220
1588
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
1221
1589
  enumerable: true,