@rpcbase/api 0.87.0 → 0.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5874,7 +5874,7 @@ function requireBytes() {
5874
5874
  }
5875
5875
  return bytes.exports;
5876
5876
  }
5877
- var lib$1 = { exports: {} };
5877
+ var lib$2 = { exports: {} };
5878
5878
  var safer_1;
5879
5879
  var hasRequiredSafer;
5880
5880
  function requireSafer() {
@@ -9595,11 +9595,11 @@ function requireStreams() {
9595
9595
  };
9596
9596
  return streams;
9597
9597
  }
9598
- lib$1.exports;
9599
- var hasRequiredLib$1;
9600
- function requireLib$1() {
9601
- if (hasRequiredLib$1) return lib$1.exports;
9602
- hasRequiredLib$1 = 1;
9598
+ lib$2.exports;
9599
+ var hasRequiredLib$2;
9600
+ function requireLib$2() {
9601
+ if (hasRequiredLib$2) return lib$2.exports;
9602
+ hasRequiredLib$2 = 1;
9603
9603
  (function(module) {
9604
9604
  var Buffer2 = requireSafer().Buffer;
9605
9605
  var bomHandling2 = requireBomHandling();
@@ -9723,8 +9723,8 @@ function requireLib$1() {
9723
9723
  throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.");
9724
9724
  };
9725
9725
  }
9726
- })(lib$1);
9727
- return lib$1.exports;
9726
+ })(lib$2);
9727
+ return lib$2.exports;
9728
9728
  }
9729
9729
  var unpipe_1;
9730
9730
  var hasRequiredUnpipe;
@@ -9772,7 +9772,7 @@ function requireRawBody() {
9772
9772
  var asyncHooks = tryRequireAsyncHooks();
9773
9773
  var bytes2 = requireBytes();
9774
9774
  var createError = requireHttpErrors();
9775
- var iconv = requireLib$1();
9775
+ var iconv = requireLib$2();
9776
9776
  var unpipe = requireUnpipe();
9777
9777
  rawBody = getRawBody;
9778
9778
  var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /;
@@ -13124,7 +13124,7 @@ function requireRead() {
13124
13124
  hasRequiredRead = 1;
13125
13125
  var createError = requireHttpErrors();
13126
13126
  var getBody = requireRawBody();
13127
- var iconv = requireLib$1();
13127
+ var iconv = requireLib$2();
13128
13128
  var onFinished2 = requireOnFinished();
13129
13129
  var zlib = require$$4$1;
13130
13130
  var hasBody = requireTypeIs().hasBody;
@@ -15859,20 +15859,20 @@ function requireParse() {
15859
15859
  };
15860
15860
  return parse;
15861
15861
  }
15862
- var lib;
15863
- var hasRequiredLib;
15864
- function requireLib() {
15865
- if (hasRequiredLib) return lib;
15866
- hasRequiredLib = 1;
15862
+ var lib$1;
15863
+ var hasRequiredLib$1;
15864
+ function requireLib$1() {
15865
+ if (hasRequiredLib$1) return lib$1;
15866
+ hasRequiredLib$1 = 1;
15867
15867
  var stringify = /* @__PURE__ */ requireStringify();
15868
15868
  var parse2 = /* @__PURE__ */ requireParse();
15869
15869
  var formats2 = /* @__PURE__ */ requireFormats();
15870
- lib = {
15870
+ lib$1 = {
15871
15871
  formats: formats2,
15872
15872
  parse: parse2,
15873
15873
  stringify
15874
15874
  };
15875
- return lib;
15875
+ return lib$1;
15876
15876
  }
15877
15877
  var urlencoded_1;
15878
15878
  var hasRequiredUrlencoded;
@@ -15882,7 +15882,7 @@ function requireUrlencoded() {
15882
15882
  var createError = requireHttpErrors();
15883
15883
  var debug = requireBrowser$1()("body-parser:urlencoded");
15884
15884
  var read = requireRead();
15885
- var qs = /* @__PURE__ */ requireLib();
15885
+ var qs = /* @__PURE__ */ requireLib$1();
15886
15886
  var { normalizeOptions } = requireUtils$2();
15887
15887
  urlencoded_1 = urlencoded;
15888
15888
  function urlencoded(options) {
@@ -17265,7 +17265,7 @@ function requireUtils() {
17265
17265
  var etag = requireEtag();
17266
17266
  var mime = requireMimeTypes();
17267
17267
  var proxyaddr = requireProxyAddr();
17268
- var qs = /* @__PURE__ */ requireLib();
17268
+ var qs = /* @__PURE__ */ requireLib$1();
17269
17269
  var querystring = require$$6$1;
17270
17270
  const { Buffer: Buffer2 } = require$$7$1;
17271
17271
  exports$1.methods = METHODS.map((method) => method.toLowerCase());
@@ -21181,6 +21181,286 @@ function requireExpress() {
21181
21181
  return express;
21182
21182
  }
21183
21183
  var expressExports = requireExpress();
21184
+ var lib = { exports: {} };
21185
+ var objectAssign;
21186
+ var hasRequiredObjectAssign;
21187
+ function requireObjectAssign() {
21188
+ if (hasRequiredObjectAssign) return objectAssign;
21189
+ hasRequiredObjectAssign = 1;
21190
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
21191
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
21192
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
21193
+ function toObject(val) {
21194
+ if (val === null || val === void 0) {
21195
+ throw new TypeError("Object.assign cannot be called with null or undefined");
21196
+ }
21197
+ return Object(val);
21198
+ }
21199
+ function shouldUseNative() {
21200
+ try {
21201
+ if (!Object.assign) {
21202
+ return false;
21203
+ }
21204
+ var test1 = new String("abc");
21205
+ test1[5] = "de";
21206
+ if (Object.getOwnPropertyNames(test1)[0] === "5") {
21207
+ return false;
21208
+ }
21209
+ var test2 = {};
21210
+ for (var i = 0; i < 10; i++) {
21211
+ test2["_" + String.fromCharCode(i)] = i;
21212
+ }
21213
+ var order2 = Object.getOwnPropertyNames(test2).map(function(n) {
21214
+ return test2[n];
21215
+ });
21216
+ if (order2.join("") !== "0123456789") {
21217
+ return false;
21218
+ }
21219
+ var test3 = {};
21220
+ "abcdefghijklmnopqrst".split("").forEach(function(letter) {
21221
+ test3[letter] = letter;
21222
+ });
21223
+ if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") {
21224
+ return false;
21225
+ }
21226
+ return true;
21227
+ } catch (err) {
21228
+ return false;
21229
+ }
21230
+ }
21231
+ objectAssign = shouldUseNative() ? Object.assign : function(target, source) {
21232
+ var from;
21233
+ var to = toObject(target);
21234
+ var symbols;
21235
+ for (var s = 1; s < arguments.length; s++) {
21236
+ from = Object(arguments[s]);
21237
+ for (var key in from) {
21238
+ if (hasOwnProperty.call(from, key)) {
21239
+ to[key] = from[key];
21240
+ }
21241
+ }
21242
+ if (getOwnPropertySymbols) {
21243
+ symbols = getOwnPropertySymbols(from);
21244
+ for (var i = 0; i < symbols.length; i++) {
21245
+ if (propIsEnumerable.call(from, symbols[i])) {
21246
+ to[symbols[i]] = from[symbols[i]];
21247
+ }
21248
+ }
21249
+ }
21250
+ }
21251
+ return to;
21252
+ };
21253
+ return objectAssign;
21254
+ }
21255
+ var hasRequiredLib;
21256
+ function requireLib() {
21257
+ if (hasRequiredLib) return lib.exports;
21258
+ hasRequiredLib = 1;
21259
+ (function() {
21260
+ var assign = requireObjectAssign();
21261
+ var vary2 = requireVary();
21262
+ var defaults = {
21263
+ origin: "*",
21264
+ methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
21265
+ preflightContinue: false,
21266
+ optionsSuccessStatus: 204
21267
+ };
21268
+ function isString(s) {
21269
+ return typeof s === "string" || s instanceof String;
21270
+ }
21271
+ function isOriginAllowed(origin, allowedOrigin) {
21272
+ if (Array.isArray(allowedOrigin)) {
21273
+ for (var i = 0; i < allowedOrigin.length; ++i) {
21274
+ if (isOriginAllowed(origin, allowedOrigin[i])) {
21275
+ return true;
21276
+ }
21277
+ }
21278
+ return false;
21279
+ } else if (isString(allowedOrigin)) {
21280
+ return origin === allowedOrigin;
21281
+ } else if (allowedOrigin instanceof RegExp) {
21282
+ return allowedOrigin.test(origin);
21283
+ } else {
21284
+ return !!allowedOrigin;
21285
+ }
21286
+ }
21287
+ function configureOrigin(options, req) {
21288
+ var requestOrigin = req.headers.origin, headers = [], isAllowed;
21289
+ if (!options.origin || options.origin === "*") {
21290
+ headers.push([{
21291
+ key: "Access-Control-Allow-Origin",
21292
+ value: "*"
21293
+ }]);
21294
+ } else if (isString(options.origin)) {
21295
+ headers.push([{
21296
+ key: "Access-Control-Allow-Origin",
21297
+ value: options.origin
21298
+ }]);
21299
+ headers.push([{
21300
+ key: "Vary",
21301
+ value: "Origin"
21302
+ }]);
21303
+ } else {
21304
+ isAllowed = isOriginAllowed(requestOrigin, options.origin);
21305
+ headers.push([{
21306
+ key: "Access-Control-Allow-Origin",
21307
+ value: isAllowed ? requestOrigin : false
21308
+ }]);
21309
+ headers.push([{
21310
+ key: "Vary",
21311
+ value: "Origin"
21312
+ }]);
21313
+ }
21314
+ return headers;
21315
+ }
21316
+ function configureMethods(options) {
21317
+ var methods = options.methods;
21318
+ if (methods.join) {
21319
+ methods = options.methods.join(",");
21320
+ }
21321
+ return {
21322
+ key: "Access-Control-Allow-Methods",
21323
+ value: methods
21324
+ };
21325
+ }
21326
+ function configureCredentials(options) {
21327
+ if (options.credentials === true) {
21328
+ return {
21329
+ key: "Access-Control-Allow-Credentials",
21330
+ value: "true"
21331
+ };
21332
+ }
21333
+ return null;
21334
+ }
21335
+ function configureAllowedHeaders(options, req) {
21336
+ var allowedHeaders = options.allowedHeaders || options.headers;
21337
+ var headers = [];
21338
+ if (!allowedHeaders) {
21339
+ allowedHeaders = req.headers["access-control-request-headers"];
21340
+ headers.push([{
21341
+ key: "Vary",
21342
+ value: "Access-Control-Request-Headers"
21343
+ }]);
21344
+ } else if (allowedHeaders.join) {
21345
+ allowedHeaders = allowedHeaders.join(",");
21346
+ }
21347
+ if (allowedHeaders && allowedHeaders.length) {
21348
+ headers.push([{
21349
+ key: "Access-Control-Allow-Headers",
21350
+ value: allowedHeaders
21351
+ }]);
21352
+ }
21353
+ return headers;
21354
+ }
21355
+ function configureExposedHeaders(options) {
21356
+ var headers = options.exposedHeaders;
21357
+ if (!headers) {
21358
+ return null;
21359
+ } else if (headers.join) {
21360
+ headers = headers.join(",");
21361
+ }
21362
+ if (headers && headers.length) {
21363
+ return {
21364
+ key: "Access-Control-Expose-Headers",
21365
+ value: headers
21366
+ };
21367
+ }
21368
+ return null;
21369
+ }
21370
+ function configureMaxAge(options) {
21371
+ var maxAge = (typeof options.maxAge === "number" || options.maxAge) && options.maxAge.toString();
21372
+ if (maxAge && maxAge.length) {
21373
+ return {
21374
+ key: "Access-Control-Max-Age",
21375
+ value: maxAge
21376
+ };
21377
+ }
21378
+ return null;
21379
+ }
21380
+ function applyHeaders(headers, res) {
21381
+ for (var i = 0, n = headers.length; i < n; i++) {
21382
+ var header = headers[i];
21383
+ if (header) {
21384
+ if (Array.isArray(header)) {
21385
+ applyHeaders(header, res);
21386
+ } else if (header.key === "Vary" && header.value) {
21387
+ vary2(res, header.value);
21388
+ } else if (header.value) {
21389
+ res.setHeader(header.key, header.value);
21390
+ }
21391
+ }
21392
+ }
21393
+ }
21394
+ function cors2(options, req, res, next) {
21395
+ var headers = [], method = req.method && req.method.toUpperCase && req.method.toUpperCase();
21396
+ if (method === "OPTIONS") {
21397
+ headers.push(configureOrigin(options, req));
21398
+ headers.push(configureCredentials(options));
21399
+ headers.push(configureMethods(options));
21400
+ headers.push(configureAllowedHeaders(options, req));
21401
+ headers.push(configureMaxAge(options));
21402
+ headers.push(configureExposedHeaders(options));
21403
+ applyHeaders(headers, res);
21404
+ if (options.preflightContinue) {
21405
+ next();
21406
+ } else {
21407
+ res.statusCode = options.optionsSuccessStatus;
21408
+ res.setHeader("Content-Length", "0");
21409
+ res.end();
21410
+ }
21411
+ } else {
21412
+ headers.push(configureOrigin(options, req));
21413
+ headers.push(configureCredentials(options));
21414
+ headers.push(configureExposedHeaders(options));
21415
+ applyHeaders(headers, res);
21416
+ next();
21417
+ }
21418
+ }
21419
+ function middlewareWrapper(o) {
21420
+ var optionsCallback = null;
21421
+ if (typeof o === "function") {
21422
+ optionsCallback = o;
21423
+ } else {
21424
+ optionsCallback = function(req, cb) {
21425
+ cb(null, o);
21426
+ };
21427
+ }
21428
+ return function corsMiddleware(req, res, next) {
21429
+ optionsCallback(req, function(err, options) {
21430
+ if (err) {
21431
+ next(err);
21432
+ } else {
21433
+ var corsOptions = assign({}, defaults, options);
21434
+ var originCallback = null;
21435
+ if (corsOptions.origin && typeof corsOptions.origin === "function") {
21436
+ originCallback = corsOptions.origin;
21437
+ } else if (corsOptions.origin) {
21438
+ originCallback = function(origin, cb) {
21439
+ cb(null, corsOptions.origin);
21440
+ };
21441
+ }
21442
+ if (originCallback) {
21443
+ originCallback(req.headers.origin, function(err2, origin) {
21444
+ if (err2 || !origin) {
21445
+ next(err2);
21446
+ } else {
21447
+ corsOptions.origin = origin;
21448
+ cors2(corsOptions, req, res, next);
21449
+ }
21450
+ });
21451
+ } else {
21452
+ next();
21453
+ }
21454
+ }
21455
+ });
21456
+ };
21457
+ }
21458
+ lib.exports = middlewareWrapper;
21459
+ })();
21460
+ return lib.exports;
21461
+ }
21462
+ var libExports = requireLib();
21463
+ const cors = /* @__PURE__ */ getDefaultExportFromCjs(libExports);
21184
21464
  process.env = {
21185
21465
  ...env,
21186
21466
  ...__rb_env__,
@@ -21188,7 +21468,8 @@ process.env = {
21188
21468
  };
21189
21469
  const initApi = async ({
21190
21470
  app,
21191
- routes
21471
+ routes,
21472
+ cors: corsOptions
21192
21473
  }) => {
21193
21474
  await initApiClient({ app });
21194
21475
  const registerHandler = (method, path, handler) => {
@@ -21222,24 +21503,36 @@ const initApi = async ({
21222
21503
  registerHandler("delete", path, handler);
21223
21504
  }
21224
21505
  };
21506
+ app.use("/api", cors(corsOptions));
21225
21507
  app.use("/api", expressExports.json({ limit: "8mb" }));
21226
21508
  app.use("/api", function __FIRST_API_MIDDLEWARE__(_req, _res, next) {
21227
21509
  next();
21228
21510
  });
21229
21511
  const routeEntries = Object.entries(routes);
21230
- const loadRoute = async ([routePath, loadFn]) => {
21512
+ const totalRoutes = routeEntries.length;
21513
+ const loadedModules = /* @__PURE__ */ new Map();
21514
+ let loadedCount = 0;
21515
+ await BBPromise.map(routeEntries, async ([routePath, loadFn]) => {
21231
21516
  const routeModule = await loadFn();
21232
- if (typeof routeModule.default !== "function") {
21517
+ loadedModules.set(routePath, routeModule);
21518
+ loadedCount += 1;
21519
+ if (loadedCount % 32 === 0 || loadedCount === totalRoutes) {
21520
+ console.log(`loaded ${loadedCount}/${totalRoutes} api routes`);
21521
+ }
21522
+ return routeModule;
21523
+ }, { concurrency: 32 });
21524
+ for (const [routePath] of routeEntries) {
21525
+ const routeModule = loadedModules.get(routePath);
21526
+ if (!routeModule || typeof routeModule.default !== "function") {
21233
21527
  console.warn(`skipping api module without default export: ${routePath}`);
21234
- return;
21528
+ continue;
21235
21529
  }
21236
21530
  routeModule.default(api);
21237
21531
  const GRAY = "\x1B[90m";
21238
21532
  const RESET = "\x1B[0m";
21239
21533
  const coloredPath = routePath.startsWith("@rpcbase/") ? `${GRAY}${routePath}${RESET}` : routePath;
21240
- console.log("loaded api route", coloredPath);
21241
- };
21242
- await BBPromise.mapSeries(routeEntries, loadRoute);
21534
+ console.log("registered api route", coloredPath);
21535
+ }
21243
21536
  console.log("Done loading routes");
21244
21537
  app.use("/api", (req, res) => {
21245
21538
  res.status(404).json({ error: `Not Found: ${req.method}:${req.originalUrl}` });