aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-09-05 20:38:22 -0700
committerAdam Soltys <[email protected]>2022-09-05 20:38:22 -0700
commit39fd8f38c7c9e3d231f7347ea51f79812fd524da (patch)
treef6deb8c7a8cd6539c46e3331e3b4b6e953c4bef6
parenta5080abb26a1dbb65c6d0889d30ad58f2098dae7 (diff)
downloadcoinos-server-39fd8f38c7c9e3d231f7347ea51f79812fd524da.tar.gz
coinos-server-39fd8f38c7c9e3d231f7347ea51f79812fd524da.zip
custom loader
-rw-r--r--db/index.js24
-rw-r--r--db/models/accounts.js2
-rw-r--r--db/models/codes.js2
-rw-r--r--db/models/deposits.js2
-rw-r--r--db/models/invoices.js2
-rw-r--r--db/models/keys.js2
-rw-r--r--db/models/orders.js2
-rw-r--r--db/models/payments.js2
-rw-r--r--db/models/referrals.js2
-rw-r--r--db/models/users.js2
-rw-r--r--db/models/waiting_list.js2
-rw-r--r--db/models/withdrawals.js2
-rw-r--r--lib/binance.js2
-rw-r--r--lib/bitcoin.js2
-rw-r--r--lib/liquid.js2
-rw-r--r--lib/ln.js2
-rw-r--r--lib/lnd.js2
-rw-r--r--lib/mail.js4
-rw-r--r--lib/notifications.js2
-rw-r--r--lib/passport.js4
-rw-r--r--lib/rates.js2
-rw-r--r--lib/sockets.js2
-rw-r--r--lib/sync.js4
-rw-r--r--lib/upload.js2
-rw-r--r--loader.js8
-rw-r--r--package.json2
-rw-r--r--routes/assets.js6
-rw-r--r--routes/bitcoin/broadcast.js2
-rw-r--r--routes/bitcoin/fee.js2
-rw-r--r--routes/bitcoin/receive.js6
-rw-r--r--routes/bitcoin/send.js4
-rw-r--r--routes/bitcoin/sweep.js4
-rw-r--r--routes/funding.js4
-rw-r--r--routes/info.js2
-rw-r--r--routes/invoices.js6
-rw-r--r--routes/lightning/channelRequest.js2
-rw-r--r--routes/lightning/receive.js10
-rw-r--r--routes/liquid/broadcast.js2
-rw-r--r--routes/liquid/fee.js2
-rw-r--r--routes/liquid/receive.js6
-rw-r--r--routes/liquid/send.js4
-rw-r--r--routes/lnurl.js10
-rw-r--r--routes/payments.js12
-rw-r--r--routes/send.js6
-rw-r--r--routes/swaps.js4
-rw-r--r--routes/users.js10
46 files changed, 99 insertions, 91 deletions
diff --git a/db/index.js b/db/index.js
index 9f34884e..e37bae2a 100644
--- a/db/index.js
+++ b/db/index.js
@@ -1,21 +1,21 @@
import Sequelize from '@sequelize/core';
-import db from "./db.js";
+import db from "/db";
db.authenticate().catch((err) => {
console.debug("Error connecting to database: " + err.message);
console.log(dbOptions.connection.database + "." + dbOptions.connection.user);
});
-import './models/accounts.js';
-import './models/codes.js';
-import './models/deposits.js';
-import './models/invoices.js';
-import './models/keys.js';
-import './models/payments.js';
-import './models/orders.js';
-import './models/users.js';
-import './models/withdrawals.js';
+import '/db/models/accounts';
+import '/db/models/codes';
+import '/db/models/deposits';
+import '/db/models/invoices';
+import '/db/models/keys';
+import '/db/models/payments';
+import '/db/models/orders';
+import '/db/models/users';
+import '/db/models/withdrawals';
// Require models in order (to enable FK relationship specs in models)
@@ -23,9 +23,9 @@ import './models/withdrawals.js';
// require("./normalized/user_keys.js");
// require("./normalized/user_preferences.js");
-import './models/referrals.js';
+import '/db/models/referrals';
-import './models/waiting_list.js';
+import '/db/models/waiting_list';
// require("./normalized/subscriptions.js");
// require("./normalized/user_subscriptions.js");
diff --git a/db/models/accounts.js b/db/models/accounts.js
index c7e76277..2bcdbe61 100644
--- a/db/models/accounts.js
+++ b/db/models/accounts.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/codes.js b/db/models/codes.js
index 57edfb35..1f15135e 100644
--- a/db/models/codes.js
+++ b/db/models/codes.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/deposits.js b/db/models/deposits.js
index 0d030bf2..5053e60a 100644
--- a/db/models/deposits.js
+++ b/db/models/deposits.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/invoices.js b/db/models/invoices.js
index c405b122..9ecb63a4 100644
--- a/db/models/invoices.js
+++ b/db/models/invoices.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/keys.js b/db/models/keys.js
index 8807e00e..5d32c880 100644
--- a/db/models/keys.js
+++ b/db/models/keys.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/orders.js b/db/models/orders.js
index 60fd539b..71483a64 100644
--- a/db/models/orders.js
+++ b/db/models/orders.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/payments.js b/db/models/payments.js
index 31ce4855..5e063397 100644
--- a/db/models/payments.js
+++ b/db/models/payments.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/referrals.js b/db/models/referrals.js
index 2d1e8d8c..561135dc 100644
--- a/db/models/referrals.js
+++ b/db/models/referrals.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/users.js b/db/models/users.js
index 50b8941c..46577074 100644
--- a/db/models/users.js
+++ b/db/models/users.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/waiting_list.js b/db/models/waiting_list.js
index 76fb9e3f..f1a4de3d 100644
--- a/db/models/waiting_list.js
+++ b/db/models/waiting_list.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/db/models/withdrawals.js b/db/models/withdrawals.js
index 53863cbf..a9b02654 100644
--- a/db/models/withdrawals.js
+++ b/db/models/withdrawals.js
@@ -1,4 +1,4 @@
-import db from "../db.js";
+import db from "/db";
import { DataTypes } from '@sequelize/core';
const attributes = {
diff --git a/lib/binance.js b/lib/binance.js
index 1dc1facd..df33f298 100644
--- a/lib/binance.js
+++ b/lib/binance.js
@@ -1,4 +1,4 @@
-import app from "../app.js";
+import app from "$app.js";
import WebSocket from "ws";
import { err } from "./logging.js";
import store from "./store.js";
diff --git a/lib/bitcoin.js b/lib/bitcoin.js
index 275abc04..461b9594 100644
--- a/lib/bitcoin.js
+++ b/lib/bitcoin.js
@@ -1,3 +1,3 @@
-import config from "../config/index.js";
+import config from "$config/index.js";
import rpc from "./rpc.js";
export default rpc(config.bitcoin);
diff --git a/lib/liquid.js b/lib/liquid.js
index d93bb5a1..26abc542 100644
--- a/lib/liquid.js
+++ b/lib/liquid.js
@@ -1,4 +1,4 @@
-import config from "../config/index.js";
+import config from "$config/index.js";
import rpc from "./rpc.js";
export default rpc(config.liquid);
diff --git a/lib/ln.js b/lib/ln.js
index b1f9962d..6e58da35 100644
--- a/lib/ln.js
+++ b/lib/ln.js
@@ -1,4 +1,4 @@
-import config from "../config/index.js";
+import config from "$config/index.js";
let ln;
if (config.lna.clightning) {
diff --git a/lib/lnd.js b/lib/lnd.js
index e1251412..bc2c054c 100644
--- a/lib/lnd.js
+++ b/lib/lnd.js
@@ -1,4 +1,4 @@
-import config from "../config/index.js";
+import config from "$config/index.js";
import { authenticatedLndGrpc } from 'lightning';
const { cert, macaroon, socket } = config.lna;
diff --git a/lib/mail.js b/lib/mail.js
index d826b845..a2088ecc 100644
--- a/lib/mail.js
+++ b/lib/mail.js
@@ -1,5 +1,5 @@
-import app from "../app.js";
-import config from "../config/index.js";
+import app from "$app.js";
+import config from "$config/index.js";
import fs from "fs";
import Imap from "imap";
import { inspect } from "util";
diff --git a/lib/notifications.js b/lib/notifications.js
index 40d227c8..e6a4e534 100644
--- a/lib/notifications.js
+++ b/lib/notifications.js
@@ -1,4 +1,4 @@
-import config from "../config/index.js";
+import config from "$config/index.js";
import webpush from 'web-push';
if (config.vapid) {
diff --git a/lib/passport.js b/lib/passport.js
index 36057ade..90fc2dc9 100644
--- a/lib/passport.js
+++ b/lib/passport.js
@@ -1,10 +1,10 @@
-import app from "../app.js";
+import app from "$app.js";
import Passport from "passport";
import jwt from "passport-jwt";
import { Op } from "@sequelize/core";
import fastifyPassport from "@fastify/passport";
import fastifySecureSession from '@fastify/secure-session'
-import config from "../config/index.js";
+import config from "$config/index.js";
import fs from "fs";
import path from "path";
diff --git a/lib/rates.js b/lib/rates.js
index d22bf2f5..8811e260 100644
--- a/lib/rates.js
+++ b/lib/rates.js
@@ -1,4 +1,4 @@
-import app from "../app.js";
+import app from "$app.js";
import axios from "axios";
import fs from "fs";
import binanceFactory from "./binance.js";
diff --git a/lib/sockets.js b/lib/sockets.js
index de6986b1..fb121bdd 100644
--- a/lib/sockets.js
+++ b/lib/sockets.js
@@ -1,5 +1,5 @@
import store from "./store.js";
-import app from "../app.js";
+import app from "$app.js";
import jwt from "jsonwebtoken";
import { v4 } from "uuid";
import WebSocket from "ws";
diff --git a/lib/sync.js b/lib/sync.js
index 30d5b007..f3d6baa5 100644
--- a/lib/sync.js
+++ b/lib/sync.js
@@ -1,5 +1,5 @@
-import db from "../db/index.js";
-import app from "../app.js";
+import db from "$db/db";
+import app from "$app.js";
import { differenceInDays } from "date-fns";
import fs from "fs";
import read from "./read.js";
diff --git a/lib/upload.js b/lib/upload.js
index f48a3d94..c60c9ab1 100644
--- a/lib/upload.js
+++ b/lib/upload.js
@@ -1,5 +1,5 @@
import { auth } from "./passport.js";
-import app from "../app.js";
+import app from "$app.js";
import multer from "multer";
const storage = multer.diskStorage({
diff --git a/loader.js b/loader.js
new file mode 100644
index 00000000..7deda005
--- /dev/null
+++ b/loader.js
@@ -0,0 +1,8 @@
+import path from 'path'
+import fs from 'fs'
+
+export function resolve (specifier, parentModuleURL, defaultResolver) {
+ specifier = specifier.replace(/^\$/, path.resolve('.') + "/")
+ specifier = fs.existsSync(specifier) && fs.lstatSync(specifier).isDirectory() ? `${specifier}/index` : specifier
+ return defaultResolver(specifier, parentModuleURL)
+}
diff --git a/package.json b/package.json
index d72602a0..531c37b3 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"version": "0.0.1",
"private": true,
"scripts": {
- "start": "NODE_OPTIONS=--openssl-legacy-provider nodemon index.js",
+ "start": "NODE_OPTIONS=\"--es-module-specifier-resolution=node --experimental-modules --loader ./loader.js --openssl-legacy-provider\" nodemon index.js",
"generate": "sequelize-automate -c config/index.js",
"min": "DEBUG=debug SCOPE=MIN nodemon index.js",
"debug": "DEBUG=debug nodemon index.js"
diff --git a/routes/assets.js b/routes/assets.js
index baf915e7..f942cf12 100644
--- a/routes/assets.js
+++ b/routes/assets.js
@@ -1,6 +1,6 @@
-import store from "../lib/store.js";
-import app from "../app.js";
-import { auth } from "../lib/passport.js";
+import store from "$lib/store.js";
+import app from "$app.js";
+import { auth } from "$lib/passport.js";
import axios from 'axios';
import crypto from 'crypto';
import fs from 'fs';
diff --git a/routes/bitcoin/broadcast.js b/routes/bitcoin/broadcast.js
index 185db283..2bf61049 100644
--- a/routes/bitcoin/broadcast.js
+++ b/routes/bitcoin/broadcast.js
@@ -1,4 +1,4 @@
-import store from "../../lib/store.js";
+import store from "$lib/store.js";
export default async (req, res) => {
try {
const { user } = req;
diff --git a/routes/bitcoin/fee.js b/routes/bitcoin/fee.js
index 35ca4e3d..f701752d 100644
--- a/routes/bitcoin/fee.js
+++ b/routes/bitcoin/fee.js
@@ -1,4 +1,4 @@
-import buildTx from "../../lib/buildtx.js";
+import buildTx from "$lib/buildtx.js";
export default async (req, res) => {
let { user } = req;
diff --git a/routes/bitcoin/receive.js b/routes/bitcoin/receive.js
index 449e3984..1391a7d6 100644
--- a/routes/bitcoin/receive.js
+++ b/routes/bitcoin/receive.js
@@ -1,6 +1,6 @@
-import { rates } from "../../lib/store.js";
-import { notify } from "../../lib/notifications.js";
-import { callWebhook } from "../../lib/webhooks.js";
+import { rates } from "$lib/store.js";
+import { notify } from "$lib/notifications.js";
+import { callWebhook } from "$lib/webhooks.js";
import reverse from 'buffer-reverse';
import zmq from 'zeromq/v5-compat.js';
import { Op } from '@sequelize/core';
diff --git a/routes/bitcoin/send.js b/routes/bitcoin/send.js
index 5cecde32..34f27ac8 100644
--- a/routes/bitcoin/send.js
+++ b/routes/bitcoin/send.js
@@ -1,5 +1,5 @@
-import store from "../../lib/store.js";
-import config from "../../config/index.js";
+import store from "$lib/store.js";
+import config from "$config/index.js";
const btc = config.liquid.btcasset;
import {
computeConversionFee,
diff --git a/routes/bitcoin/sweep.js b/routes/bitcoin/sweep.js
index eecfebe4..4d399c0d 100644
--- a/routes/bitcoin/sweep.js
+++ b/routes/bitcoin/sweep.js
@@ -1,5 +1,5 @@
-import config from "../../config/index.js";
-import { prod } from "../../lib/utils.js";
+import config from "$config/index.js";
+import { prod } from "$lib/utils.js";
import axios from "axios";
import bitcoin from "bitcoinjs-lib";
import coinselect from "coinselect";
diff --git a/routes/funding.js b/routes/funding.js
index 692fe2f8..6dc4939e 100644
--- a/routes/funding.js
+++ b/routes/funding.js
@@ -1,5 +1,5 @@
-import app from "../app.js";
-import config from "../config/index.js";
+import app from "$app.js";
+import config from "$config/index.js";
import mailgunFactory from 'mailgun-js';
const mailgun = mailgunFactory(config.mailgun);
diff --git a/routes/info.js b/routes/info.js
index 970cbb2a..84f61fa1 100644
--- a/routes/info.js
+++ b/routes/info.js
@@ -1,4 +1,4 @@
-import app from "../app.js";
+import app from "$app.js";
import sequelize from '@sequelize/core';
const { Op } = sequelize;
diff --git a/routes/invoices.js b/routes/invoices.js
index 814363b0..721fbc39 100644
--- a/routes/invoices.js
+++ b/routes/invoices.js
@@ -1,6 +1,6 @@
-import store from "../lib/store.js";
-import app from "../app.js";
-import { optionalAuth } from "../lib/passport.js";
+import store from "$lib/store.js";
+import app from "$app.js";
+import { optionalAuth } from "$lib/passport.js";
import { Op } from "@sequelize/core";
import axios from "axios";
diff --git a/routes/lightning/channelRequest.js b/routes/lightning/channelRequest.js
index 11c76abf..a2a29d4d 100644
--- a/routes/lightning/channelRequest.js
+++ b/routes/lightning/channelRequest.js
@@ -1,4 +1,4 @@
-import { lnurlServer } from "../lnurl.js";
+import { lnurlServer } from "$lnurl.js";
export default async (req, res) => {
let { localAmt, pushAmt } = req.body;
diff --git a/routes/lightning/receive.js b/routes/lightning/receive.js
index f013efd7..e5e93e91 100644
--- a/routes/lightning/receive.js
+++ b/routes/lightning/receive.js
@@ -1,9 +1,9 @@
-import config from "../../config/index.js";
-import { notify } from "../../lib/notifications.js";
-import { callWebhook } from "../../lib/webhooks.js";
+import config from "$config/index.js";
+import { notify } from "$lib/notifications.js";
+import { callWebhook } from "$lib/webhooks.js";
import { computeConversionFee } from './conversionFee.js';
-import { sendLiquid } from "../liquid/send.js";
-import ln from "../../lib/ln.js";
+import { sendLiquid } from "$liquid/send.js";
+import ln from "$lib/ln.js";
const handlePayment = async (msg) => {
l("incoming lightning payment", msg.value, msg.payment_request, msg.settled);
diff --git a/routes/liquid/broadcast.js b/routes/liquid/broadcast.js
index 5deb846f..5d8e751b 100644
--- a/routes/liquid/broadcast.js
+++ b/routes/liquid/broadcast.js
@@ -1,4 +1,4 @@
-import store from "../../lib/store.js";
+import store from "$lib/store.js";
export default async (req, res) => {
try {
const { user } = req;
diff --git a/routes/liquid/fee.js b/routes/liquid/fee.js
index 9d8a5bad..055a60ed 100644
--- a/routes/liquid/fee.js
+++ b/routes/liquid/fee.js
@@ -1,4 +1,4 @@
-import buildTx from "../../lib/buildliquidtx.js";
+import buildTx from "$lib/buildliquidtx.js";
liquidTx = async ({ address, asset, amount, feeRate, replaceable, user }) => {
let tx, fee;
diff --git a/routes/liquid/receive.js b/routes/liquid/receive.js
index 624108cf..0d8fa22d 100644
--- a/routes/liquid/receive.js
+++ b/routes/liquid/receive.js
@@ -1,7 +1,7 @@
-import store from "../../lib/store.js";
+import store from "$lib/store.js";
import { sendLiquid } from "./send.js";
-import { notify } from "../../lib/notifications.js";
-import { callWebhook } from "../../lib/webhooks.js";
+import { notify } from "$lib/notifications.js";
+import { callWebhook } from "$lib/webhooks.js";
import reverse from 'buffer-reverse';
import zmq from 'zeromq/v5-compat.js';
import { Op } from '@sequelize/core';
diff --git a/routes/liquid/send.js b/routes/liquid/send.js
index 5b4db184..00fb9d10 100644
--- a/routes/liquid/send.js
+++ b/routes/liquid/send.js
@@ -1,5 +1,5 @@
-import store from "../../lib/store.js";
-import config from "../../config/index.js";
+import store from "$lib/store.js";
+import config from "$config/index.js";
const btc = config.liquid.btcasset;
const lcad = config.liquid.cadasset;
// import { Transaction } from 'liquidjs-lib';
diff --git a/routes/lnurl.js b/routes/lnurl.js
index 3e5b0fd8..62f83233 100644
--- a/routes/lnurl.js
+++ b/routes/lnurl.js
@@ -1,13 +1,13 @@
-import store from "../lib/store.js";
-import app from "../app.js";
-import config from "../config/index.js";
+import store from "$lib/store.js";
+import app from "$app.js";
+import config from "$config/index.js";
import axios from "axios";
import lnurl from "lnurl";
import jwt from "jsonwebtoken";
import qs from "query-string";
-import persist from "../lib/persist.js";
+import persist from "$lib/persist.js";
import bolt11 from "bolt11";
-import { optionalAuth, auth } from "../lib/passport.js";
+import { optionalAuth, auth } from "$lib/passport.js";
export const logins = persist("data/logins.json");
export const recipients = persist("data/recipients.json");
diff --git a/routes/payments.js b/routes/payments.js
index f6e28f18..0bffffed 100644
--- a/routes/payments.js
+++ b/routes/payments.js
@@ -1,13 +1,13 @@
-import store from "../lib/store.js";
-import bc from "../lib/bitcoin.js";
-import app from "../app.js";
-import config from "../config/index.js";
-import { auth, adminAuth, optionalAuth } from "../lib/passport.js";
+import store from "$lib/store.js";
+import bc from "$lib/bitcoin.js";
+import app from "$app.js";
+import config from "$config/index.js";
+import { auth, adminAuth, optionalAuth } from "$lib/passport.js";
import fs from "fs";
import { join } from "path";
import { Op } from "@sequelize/core";
import send from "./send.js";
-import { warn } from "../lib/logging.js";
+import { warn } from "$lib/logging.js";
import btcRoutes from "./bitcoin/index.js";
import lnRoutes from "./lightning/index.js";
diff --git a/routes/send.js b/routes/send.js
index 778d3534..a55c70b4 100644
--- a/routes/send.js
+++ b/routes/send.js
@@ -1,8 +1,8 @@
-import store from "../lib/store.js";
-import { callWebhook } from "../lib/webhooks.js";
+import store from "$lib/store.js";
+import { callWebhook } from "$lib/webhooks.js";
import axios from "axios";
import { v4 } from "uuid";
-import { notify } from "../lib/notifications.js";
+import { notify } from "$lib/notifications.js";
import { sendLiquid } from "./liquid/send.js";
export default async (req, res, next) => {
diff --git a/routes/swaps.js b/routes/swaps.js
index 89cc2188..fa8dbfab 100644
--- a/routes/swaps.js
+++ b/routes/swaps.js
@@ -1,10 +1,10 @@
-import { rates } from "../lib/store.js";
+import { rates } from "$lib/store.js";
import axios from 'axios';
import crypto from 'crypto';
import fs from 'fs';
import getAccount from '../lib/account.js';
import { Op, col } from '@sequelize/core';
-import { rates } from "../lib/store.js";
+import { rates } from "$lib/store.js";
const shallow = a => {
let b = {};
diff --git a/routes/users.js b/routes/users.js
index 2222741f..cdc51174 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -1,18 +1,18 @@
-import app from "../app.js";
-import { auth, optionalAuth } from "../lib/passport.js";
-import { getUser } from "../lib/utils.js";
+import app from "$app.js";
+import { auth, optionalAuth } from "$lib/passport.js";
+import { getUser } from "$lib/utils.js";
import axios from "axios";
import bcrypt from "bcrypt";
import jwt from "jsonwebtoken";
import { authenticator } from "otplib";
-import getAccount from "../lib/account.js";
+import getAccount from "$lib/account.js";
import Sequelize from "@sequelize/core";
import bitcoin from "bitcoinjs-lib";
// import liquid from 'liquidjs-lib';
import { fromBase58, fromPrivateKey } from "bip32";
import { Mutex } from "async-mutex";
import bip32 from "bip32";
-import whitelist from "../lib/whitelist.js";
+import whitelist from "$lib/whitelist.js";
const pick = (O, ...K) => K.reduce((o, k) => ((o[k] = O[k]), o), {});