nodestatus-server 1.1.0-alpha → 1.1.0-alpha.4
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/README.md +8 -0
- package/build/app.js +190 -59
- package/dist/admin/asset-manifest.json +13 -13
- package/dist/admin/index.html +1 -1
- package/dist/admin/static/css/{main.f124e7ff.chunk.css → main.3be6ff03.chunk.css} +1 -1
- package/dist/admin/static/js/0.9f6e41e4.chunk.js +1 -0
- package/dist/admin/static/js/3.f1d474c4.chunk.js +2 -0
- package/dist/admin/static/js/{3.3cb72322.chunk.js.LICENSE.txt → 3.f1d474c4.chunk.js.LICENSE.txt} +0 -0
- package/dist/admin/static/js/4.bb99ac03.chunk.js +1 -0
- package/dist/admin/static/js/5.1aa416ea.chunk.js +1 -0
- package/dist/admin/static/js/6.6ac61266.chunk.js +1 -0
- package/dist/admin/static/js/main.113da03e.chunk.js +1 -0
- package/dist/admin/static/js/runtime-main.36fcdcba.js +1 -0
- package/package.json +17 -18
- package/dist/admin/static/js/0.6679ea6c.chunk.js +0 -1
- package/dist/admin/static/js/3.3cb72322.chunk.js +0 -2
- package/dist/admin/static/js/4.20f08e63.chunk.js +0 -1
- package/dist/admin/static/js/5.211cebd3.chunk.js +0 -1
- package/dist/admin/static/js/6.2860407e.chunk.js +0 -1
- package/dist/admin/static/js/main.7c5e08e8.chunk.js +0 -1
- package/dist/admin/static/js/runtime-main.3af64b89.js +0 -1
package/README.md
ADDED
package/build/app.js
CHANGED
|
@@ -60264,7 +60264,7 @@ exports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated
|
|
|
60264
60264
|
exports.Option = Option;
|
|
60265
60265
|
}(commander, commander.exports));
|
|
60266
60266
|
|
|
60267
|
-
main.config({ path: require$$1$2.resolve(
|
|
60267
|
+
main.config({ path: require$$1$2.resolve(require$$1$1.homedir(), '.nodestatus/.env.local') });
|
|
60268
60268
|
commander.exports.program
|
|
60269
60269
|
.option('-db, --database <db>', 'the path of database', require$$1$1.platform() === 'win32' ? require$$1$2.resolve(__dirname, '../db.sqlite') : '/usr/local/NodeStatus/server/db.sqlite')
|
|
60270
60270
|
.option('-p, --port <port>', 'the port of NodeStatus', '35601')
|
|
@@ -60283,6 +60283,7 @@ const config = {
|
|
|
60283
60283
|
webPassword: process.env.WEB_PASSWORD || '',
|
|
60284
60284
|
webSecret: process.env.WEB_SECRET || process.env.WEB_PASSWORD || 'secret',
|
|
60285
60285
|
ipcAddress: process.env.IPC_ADDRESS || (require$$1$1.platform() !== 'win32' ? '/tmp/status_unix.sock' : '\\\\.\\pipe\\status_ipc'),
|
|
60286
|
+
pushTimeOut: Number(process.env.PUSH_TIMEOUT) || 30,
|
|
60286
60287
|
telegram: {
|
|
60287
60288
|
proxy: process.env.TGBOT_PROXY,
|
|
60288
60289
|
bot_token: process.env.TGBOT_TOKEN || '',
|
|
@@ -61837,6 +61838,21 @@ Server = __decorate([
|
|
|
61837
61838
|
underscored: true
|
|
61838
61839
|
})
|
|
61839
61840
|
], Server);
|
|
61841
|
+
let Order = class Order extends sequelizeTypescript.Model {
|
|
61842
|
+
/* varchar id split by ',' */
|
|
61843
|
+
order;
|
|
61844
|
+
};
|
|
61845
|
+
__decorate([
|
|
61846
|
+
sequelizeTypescript.NotEmpty,
|
|
61847
|
+
sequelizeTypescript.Unique,
|
|
61848
|
+
sequelizeTypescript.Column,
|
|
61849
|
+
__metadata("design:type", String)
|
|
61850
|
+
], Order.prototype, "order", void 0);
|
|
61851
|
+
Order = __decorate([
|
|
61852
|
+
sequelizeTypescript.Table({
|
|
61853
|
+
underscored: true
|
|
61854
|
+
})
|
|
61855
|
+
], Order);
|
|
61840
61856
|
/* Deprecated */
|
|
61841
61857
|
let User = class User extends sequelizeTypescript.Model {
|
|
61842
61858
|
username;
|
|
@@ -61871,46 +61887,70 @@ async function handleRequest$1(callback) {
|
|
|
61871
61887
|
return createRes(1, error.message);
|
|
61872
61888
|
}
|
|
61873
61889
|
}
|
|
61874
|
-
function getServer(username) {
|
|
61890
|
+
function getServer$1(username, getPassword = false) {
|
|
61875
61891
|
return handleRequest$1(async () => {
|
|
61876
|
-
const
|
|
61877
|
-
|
|
61878
|
-
|
|
61892
|
+
const exclude = ['createdAt', 'updatedAt'];
|
|
61893
|
+
!getPassword && exclude.push('password');
|
|
61894
|
+
const [result, orderResult] = await Promise.all([
|
|
61895
|
+
Server.findOne({
|
|
61896
|
+
where: {
|
|
61897
|
+
username
|
|
61898
|
+
},
|
|
61899
|
+
attributes: {
|
|
61900
|
+
exclude
|
|
61901
|
+
},
|
|
61902
|
+
raw: true
|
|
61903
|
+
}),
|
|
61904
|
+
getOrder()
|
|
61905
|
+
]);
|
|
61906
|
+
if (orderResult.code)
|
|
61907
|
+
return orderResult;
|
|
61908
|
+
const order = orderResult.data?.split(',') || [];
|
|
61909
|
+
const newResult = result;
|
|
61910
|
+
for (let i = 0; i < order.length; ++i) {
|
|
61911
|
+
if (result?.id === Number(order[i])) {
|
|
61912
|
+
newResult.order = i + 1;
|
|
61879
61913
|
}
|
|
61880
|
-
}
|
|
61881
|
-
return createRes(
|
|
61882
|
-
});
|
|
61883
|
-
}
|
|
61884
|
-
function getServerPassword(username) {
|
|
61885
|
-
return handleRequest$1(async () => {
|
|
61886
|
-
const result = await getServer(username);
|
|
61887
|
-
if (result.code)
|
|
61888
|
-
return result;
|
|
61889
|
-
return createRes(0, result.data.password);
|
|
61914
|
+
}
|
|
61915
|
+
return createRes(newResult ? 0 : 1, newResult ? 'ok' : 'User Not Found', newResult);
|
|
61890
61916
|
});
|
|
61891
61917
|
}
|
|
61892
61918
|
function createServer(server) {
|
|
61893
61919
|
return handleRequest$1(async () => {
|
|
61894
|
-
await Server.create(server);
|
|
61895
|
-
|
|
61920
|
+
const [item, result] = await Promise.all([Server.create(server), getOrder()]);
|
|
61921
|
+
let order = result.data;
|
|
61922
|
+
order = order ? `${order},${item.id}` : item.id;
|
|
61923
|
+
await updateOrder(order);
|
|
61896
61924
|
return createRes();
|
|
61897
61925
|
});
|
|
61898
61926
|
}
|
|
61899
61927
|
function bulkCreateServer(servers) {
|
|
61900
61928
|
return handleRequest$1(async () => {
|
|
61901
|
-
await Server.bulkCreate(servers, { validate: true });
|
|
61902
|
-
|
|
61929
|
+
const [items, result] = await Promise.all([Server.bulkCreate(servers, { validate: true }), getOrder()]);
|
|
61930
|
+
if (result.code)
|
|
61931
|
+
return result;
|
|
61932
|
+
let order = result.data;
|
|
61933
|
+
for (const item of items) {
|
|
61934
|
+
order = order ? `${order},${item.id}` : item.id;
|
|
61935
|
+
}
|
|
61936
|
+
await updateOrder(order);
|
|
61903
61937
|
return createRes();
|
|
61904
61938
|
});
|
|
61905
61939
|
}
|
|
61906
61940
|
function delServer$2(username) {
|
|
61907
61941
|
return handleRequest$1(async () => {
|
|
61908
|
-
await
|
|
61909
|
-
|
|
61910
|
-
|
|
61911
|
-
|
|
61912
|
-
|
|
61913
|
-
|
|
61942
|
+
const [result, orderResult] = await Promise.all([getServer$1(username), getOrder()]);
|
|
61943
|
+
if (result.code)
|
|
61944
|
+
return result;
|
|
61945
|
+
if (orderResult.code)
|
|
61946
|
+
return orderResult;
|
|
61947
|
+
const server = result.data;
|
|
61948
|
+
let order = orderResult.data?.split(',');
|
|
61949
|
+
if (order) {
|
|
61950
|
+
order = order.filter((id) => Number(id) !== server.id);
|
|
61951
|
+
}
|
|
61952
|
+
await Promise.all([server.destroy(), updateOrder(order.join(','))]);
|
|
61953
|
+
emitter.emit('update', username, true);
|
|
61914
61954
|
return createRes();
|
|
61915
61955
|
});
|
|
61916
61956
|
}
|
|
@@ -61921,20 +61961,60 @@ function setServer$2(username, obj) {
|
|
|
61921
61961
|
username
|
|
61922
61962
|
}
|
|
61923
61963
|
});
|
|
61924
|
-
|
|
61925
|
-
emitter.emit('update',
|
|
61964
|
+
const shouldDisconnect = !!(obj.username || obj.password || obj.disabled === true);
|
|
61965
|
+
emitter.emit('update', username, shouldDisconnect);
|
|
61966
|
+
obj.username && emitter.emit('update', obj.username, true);
|
|
61926
61967
|
return createRes();
|
|
61927
61968
|
});
|
|
61928
61969
|
}
|
|
61929
61970
|
function getListServers$1() {
|
|
61930
61971
|
return handleRequest$1(async () => {
|
|
61931
|
-
|
|
61972
|
+
/* https://github.com/RobinBuschmann/sequelize-typescript/issues/763
|
|
61973
|
+
* Maybe we should move to TypeORM or Prisma because low typescript support of sequelize
|
|
61974
|
+
* */
|
|
61975
|
+
const [result, orderResult] = await Promise.all([
|
|
61976
|
+
Server.findAll({
|
|
61977
|
+
attributes: {
|
|
61978
|
+
exclude: ['password', 'createdAt', 'updatedAt']
|
|
61979
|
+
},
|
|
61980
|
+
raw: true
|
|
61981
|
+
}),
|
|
61982
|
+
getOrder()
|
|
61983
|
+
]);
|
|
61984
|
+
if (orderResult.code)
|
|
61985
|
+
return orderResult;
|
|
61986
|
+
const order = orderResult.data?.split(',') || [];
|
|
61987
|
+
const newResult = [];
|
|
61988
|
+
const map = new Map();
|
|
61989
|
+
for (let i = 0; i < order.length; ++i) {
|
|
61990
|
+
map.set(Number(order?.[i]), i + 1);
|
|
61991
|
+
}
|
|
61992
|
+
for (const item of result) {
|
|
61993
|
+
newResult.push({ ...item, order: map.get(item.id) });
|
|
61994
|
+
}
|
|
61995
|
+
return createRes({ data: newResult });
|
|
61996
|
+
});
|
|
61997
|
+
}
|
|
61998
|
+
function getOrder() {
|
|
61999
|
+
return handleRequest$1(async () => {
|
|
62000
|
+
const result = await Order.findAll({
|
|
61932
62001
|
attributes: {
|
|
61933
|
-
exclude: ['
|
|
62002
|
+
exclude: ['id', 'createdAt', 'updatedAt']
|
|
61934
62003
|
},
|
|
61935
62004
|
raw: true
|
|
61936
62005
|
});
|
|
61937
|
-
|
|
62006
|
+
const order = result?.[0]?.order || '';
|
|
62007
|
+
return createRes({ data: order });
|
|
62008
|
+
});
|
|
62009
|
+
}
|
|
62010
|
+
function updateOrder(order) {
|
|
62011
|
+
return handleRequest$1(async () => {
|
|
62012
|
+
await Order.destroy({
|
|
62013
|
+
truncate: true
|
|
62014
|
+
});
|
|
62015
|
+
await Order.create({ order });
|
|
62016
|
+
emitter.emit('update');
|
|
62017
|
+
return createRes();
|
|
61938
62018
|
});
|
|
61939
62019
|
}
|
|
61940
62020
|
|
|
@@ -61946,7 +62026,9 @@ const handleRequest = async (ctx, handler) => {
|
|
|
61946
62026
|
ctx.body = result;
|
|
61947
62027
|
};
|
|
61948
62028
|
const listServers = async (ctx) => {
|
|
61949
|
-
await
|
|
62029
|
+
const result = await getListServers$1();
|
|
62030
|
+
result.data.sort((x, y) => y.order - x.order);
|
|
62031
|
+
await handleRequest(ctx, Promise.resolve(result));
|
|
61950
62032
|
};
|
|
61951
62033
|
const setServer$1 = async (ctx) => {
|
|
61952
62034
|
const { username } = ctx.request.body;
|
|
@@ -61958,6 +62040,8 @@ const setServer$1 = async (ctx) => {
|
|
|
61958
62040
|
}
|
|
61959
62041
|
if (!data.password)
|
|
61960
62042
|
delete data.password;
|
|
62043
|
+
if (username === data.username)
|
|
62044
|
+
delete data.username;
|
|
61961
62045
|
await handleRequest(ctx, setServer$2(username, data));
|
|
61962
62046
|
};
|
|
61963
62047
|
const addServer$1 = async (ctx) => {
|
|
@@ -61990,6 +62074,15 @@ const delServer$1 = async (ctx) => {
|
|
|
61990
62074
|
return;
|
|
61991
62075
|
}
|
|
61992
62076
|
await handleRequest(ctx, delServer$2(username));
|
|
62077
|
+
};
|
|
62078
|
+
const modifyOrder = async (ctx) => {
|
|
62079
|
+
const { order = '' } = ctx.request.body;
|
|
62080
|
+
if (!order) {
|
|
62081
|
+
ctx.status = 400;
|
|
62082
|
+
ctx.body = createRes(1, 'Wrong request');
|
|
62083
|
+
return;
|
|
62084
|
+
}
|
|
62085
|
+
await handleRequest(ctx, updateOrder(order));
|
|
61993
62086
|
};
|
|
61994
62087
|
|
|
61995
62088
|
const router = new router$1({ prefix: '/api' });
|
|
@@ -61999,29 +62092,33 @@ router.post('/session', createSession);
|
|
|
61999
62092
|
router.get('/server', listServers);
|
|
62000
62093
|
router.post('/server', addServer$1);
|
|
62001
62094
|
router.put('/server', setServer$1);
|
|
62095
|
+
router.put('/server/order', modifyOrder);
|
|
62002
62096
|
router.delete('/server/:username', delServer$1);
|
|
62003
62097
|
|
|
62004
62098
|
async function authServer(username, password) {
|
|
62005
|
-
const result = await
|
|
62099
|
+
const result = await getServer$1(username, true);
|
|
62006
62100
|
if (result.code)
|
|
62007
62101
|
return false;
|
|
62008
|
-
|
|
62102
|
+
const data = result.data;
|
|
62103
|
+
if (data.disabled || !data.password)
|
|
62104
|
+
return false;
|
|
62105
|
+
return bcryptjs.compareSync(password, data.password);
|
|
62009
62106
|
}
|
|
62010
62107
|
async function addServer(obj) {
|
|
62011
|
-
const result = await getServer(obj.username);
|
|
62108
|
+
const result = await getServer$1(obj.username);
|
|
62012
62109
|
if (!result.code) {
|
|
62013
62110
|
return createRes(1, 'Username duplicate');
|
|
62014
62111
|
}
|
|
62015
62112
|
return createServer(obj);
|
|
62016
62113
|
}
|
|
62017
62114
|
async function setServer(username, obj) {
|
|
62018
|
-
const result = await getServer(username);
|
|
62115
|
+
const result = await getServer$1(username);
|
|
62019
62116
|
if (result.code)
|
|
62020
62117
|
return result;
|
|
62021
62118
|
return setServer$2(username, obj);
|
|
62022
62119
|
}
|
|
62023
62120
|
async function delServer(username) {
|
|
62024
|
-
const result = await getServer(username);
|
|
62121
|
+
const result = await getServer$1(username);
|
|
62025
62122
|
if (result.code) {
|
|
62026
62123
|
return result;
|
|
62027
62124
|
}
|
|
@@ -62033,12 +62130,23 @@ async function getListServers() {
|
|
|
62033
62130
|
return result;
|
|
62034
62131
|
const obj = {};
|
|
62035
62132
|
result.data.forEach(item => {
|
|
62036
|
-
|
|
62133
|
+
const { username, disabled, ..._item } = item;
|
|
62134
|
+
if (disabled)
|
|
62037
62135
|
return;
|
|
62038
|
-
const { username, ..._item } = item;
|
|
62039
62136
|
obj[username] = _item;
|
|
62040
62137
|
});
|
|
62041
62138
|
return createRes({ data: obj });
|
|
62139
|
+
}
|
|
62140
|
+
async function getServer(username) {
|
|
62141
|
+
const result = await getServer$1(username);
|
|
62142
|
+
if (result.code)
|
|
62143
|
+
return result;
|
|
62144
|
+
const data = result.data;
|
|
62145
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
62146
|
+
const { username: _, disabled, ...item } = data;
|
|
62147
|
+
if (disabled)
|
|
62148
|
+
return createRes(1, 'Server disabled');
|
|
62149
|
+
return createRes({ data: item });
|
|
62042
62150
|
}
|
|
62043
62151
|
|
|
62044
62152
|
function createIpc() {
|
|
@@ -68919,7 +69027,7 @@ class NodeStatus {
|
|
|
68919
69027
|
constructor(server, options) {
|
|
68920
69028
|
this.server = server;
|
|
68921
69029
|
this.options = options;
|
|
68922
|
-
emitter.on('update', this.
|
|
69030
|
+
emitter.on('update', this.updateStatus.bind(this));
|
|
68923
69031
|
}
|
|
68924
69032
|
setBan(socket, address, t, reason) {
|
|
68925
69033
|
socket.close();
|
|
@@ -68928,10 +69036,7 @@ class NodeStatus {
|
|
|
68928
69036
|
this.isBanned.set(address, true);
|
|
68929
69037
|
logger.warn(`${address} was banned ${t} seconds, reason: ${reason}`);
|
|
68930
69038
|
callHook(this, 'onServerBanned', address, reason);
|
|
68931
|
-
|
|
68932
|
-
this.isBanned.delete(address);
|
|
68933
|
-
clearTimeout(id);
|
|
68934
|
-
}, t * 1000);
|
|
69039
|
+
setTimeout(() => this.isBanned.delete(address), t * 1000);
|
|
68935
69040
|
}
|
|
68936
69041
|
launch() {
|
|
68937
69042
|
this.server.on('upgrade', (request, socket, head) => {
|
|
@@ -69016,39 +69121,45 @@ class NodeStatus {
|
|
|
69016
69121
|
socket.on('close', () => clearInterval(id));
|
|
69017
69122
|
});
|
|
69018
69123
|
this.options.usePush && this.createPush();
|
|
69019
|
-
return this.
|
|
69124
|
+
return this.updateStatus();
|
|
69020
69125
|
}
|
|
69021
|
-
async
|
|
69022
|
-
const box = (await getListServers()).data;
|
|
69023
|
-
if (!box)
|
|
69024
|
-
return;
|
|
69126
|
+
async updateStatus(username, shouldDisconnect = false) {
|
|
69025
69127
|
if (username) {
|
|
69026
|
-
|
|
69128
|
+
const server = (await getServer(username)).data;
|
|
69129
|
+
if (!server)
|
|
69027
69130
|
delete this.servers[username];
|
|
69028
69131
|
else
|
|
69029
|
-
this.servers[username] = Object.assign(
|
|
69030
|
-
|
|
69031
|
-
socket && socket.terminate();
|
|
69132
|
+
this.servers[username] = Object.assign(server, { status: this.servers?.[username]?.status || {} });
|
|
69133
|
+
shouldDisconnect && this.userMap.get(username)?.terminate() && this.userMap.delete(username);
|
|
69032
69134
|
}
|
|
69033
69135
|
else {
|
|
69136
|
+
const box = (await getListServers()).data;
|
|
69137
|
+
if (!box)
|
|
69138
|
+
return;
|
|
69034
69139
|
for (const k of Object.keys(box)) {
|
|
69035
69140
|
if (!this.servers[k])
|
|
69036
69141
|
this.servers[k] = Object.assign(box[k], { status: {} });
|
|
69142
|
+
if (this.servers[k].order !== box[k].order)
|
|
69143
|
+
this.servers[k].order = box[k].order;
|
|
69037
69144
|
}
|
|
69038
69145
|
for (const k of Object.keys(this.servers)) {
|
|
69039
69146
|
if (!box[k])
|
|
69040
69147
|
delete this.servers[k];
|
|
69041
69148
|
}
|
|
69042
|
-
|
|
69043
|
-
socket.
|
|
69149
|
+
if (shouldDisconnect) {
|
|
69150
|
+
for (const socket of this.userMap.values()) {
|
|
69151
|
+
socket.terminate();
|
|
69152
|
+
}
|
|
69153
|
+
this.userMap.clear();
|
|
69044
69154
|
}
|
|
69045
|
-
this.userMap.clear();
|
|
69046
69155
|
}
|
|
69047
|
-
this.serversPub = Object.values(this.servers).sort((x, y) => y.
|
|
69156
|
+
this.serversPub = Object.values(this.servers).sort((x, y) => y.order - x.order);
|
|
69048
69157
|
}
|
|
69049
69158
|
/* This should move to another file later */
|
|
69050
69159
|
createPush() {
|
|
69051
69160
|
const pushList = [];
|
|
69161
|
+
/* ip -> timer */
|
|
69162
|
+
const timerMap = new Map();
|
|
69052
69163
|
const entities = new Set(['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!', '\\']);
|
|
69053
69164
|
const parseEntities = (str) => {
|
|
69054
69165
|
if (typeof str !== 'string')
|
|
@@ -69134,8 +69245,27 @@ class NodeStatus {
|
|
|
69134
69245
|
}
|
|
69135
69246
|
pushList.push(message => [...chatId].map(id => bot.telegram.sendMessage(id, `${message}`, { parse_mode: 'MarkdownV2' })));
|
|
69136
69247
|
}
|
|
69137
|
-
this.onServerConnected = (socket, username) =>
|
|
69138
|
-
|
|
69248
|
+
this.onServerConnected = (socket, username) => {
|
|
69249
|
+
const ip = this.map.get(socket);
|
|
69250
|
+
if (ip) {
|
|
69251
|
+
const timer = timerMap.get(ip);
|
|
69252
|
+
if (timer) {
|
|
69253
|
+
clearTimeout(timer);
|
|
69254
|
+
timerMap.delete(ip);
|
|
69255
|
+
}
|
|
69256
|
+
else {
|
|
69257
|
+
return Promise.all(pushList.map(fn => fn(`🍊*NodeStatus* \n😀 One new server has connected\\! \n\n *用户名*: ${parseEntities(username)} \n *节点名*: ${parseEntities(this.servers[username]['name'])} \n *时间*: ${parseEntities(new Date())}`)));
|
|
69258
|
+
}
|
|
69259
|
+
}
|
|
69260
|
+
};
|
|
69261
|
+
this.onServerDisconnected = (socket, username) => {
|
|
69262
|
+
const ip = this.map.get(socket);
|
|
69263
|
+
const timer = setTimeout(() => {
|
|
69264
|
+
Promise.all(pushList.map(fn => fn(`🍊*NodeStatus* \n😰 One server has disconnected\\! \n\n *用户名*: ${parseEntities(username)} \n *节点名*: ${parseEntities(this.servers[username]?.['name'])} \n *时间*: ${parseEntities(new Date())}`))).then();
|
|
69265
|
+
ip && timerMap.delete(ip);
|
|
69266
|
+
}, this.options.pushTimeOut * 1000);
|
|
69267
|
+
ip && timerMap.set(ip, timer);
|
|
69268
|
+
};
|
|
69139
69269
|
}
|
|
69140
69270
|
}
|
|
69141
69271
|
|
|
@@ -69145,6 +69275,7 @@ async function createStatus(app) {
|
|
|
69145
69275
|
const instance = new NodeStatus(server, {
|
|
69146
69276
|
interval: Number(config.interval),
|
|
69147
69277
|
usePush: config.usePush,
|
|
69278
|
+
pushTimeOut: config.pushTimeOut,
|
|
69148
69279
|
telegram: {
|
|
69149
69280
|
...config.telegram,
|
|
69150
69281
|
chat_id: config.telegram.chat_id.split(',')
|
|
@@ -69174,7 +69305,7 @@ const sequelize = new sequelizeTypescript.Sequelize({
|
|
|
69174
69305
|
dialectModule: require('sqlite3'),
|
|
69175
69306
|
storage: config.database,
|
|
69176
69307
|
logging: false,
|
|
69177
|
-
models: [Server]
|
|
69308
|
+
models: [Server, Order]
|
|
69178
69309
|
});
|
|
69179
69310
|
|
|
69180
69311
|
(async () => {
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
|
-
"static/js/0.
|
|
4
|
-
"main.css": "/admin/static/css/main.
|
|
5
|
-
"main.js": "/admin/static/js/main.
|
|
6
|
-
"runtime-main.js": "/admin/static/js/runtime-main.
|
|
7
|
-
"static/js/3.
|
|
8
|
-
"static/js/4.
|
|
9
|
-
"static/js/5.
|
|
10
|
-
"static/js/6.
|
|
3
|
+
"static/js/0.9f6e41e4.chunk.js": "/admin/static/js/0.9f6e41e4.chunk.js",
|
|
4
|
+
"main.css": "/admin/static/css/main.3be6ff03.chunk.css",
|
|
5
|
+
"main.js": "/admin/static/js/main.113da03e.chunk.js",
|
|
6
|
+
"runtime-main.js": "/admin/static/js/runtime-main.36fcdcba.js",
|
|
7
|
+
"static/js/3.f1d474c4.chunk.js": "/admin/static/js/3.f1d474c4.chunk.js",
|
|
8
|
+
"static/js/4.bb99ac03.chunk.js": "/admin/static/js/4.bb99ac03.chunk.js",
|
|
9
|
+
"static/js/5.1aa416ea.chunk.js": "/admin/static/js/5.1aa416ea.chunk.js",
|
|
10
|
+
"static/js/6.6ac61266.chunk.js": "/admin/static/js/6.6ac61266.chunk.js",
|
|
11
11
|
"index.html": "/admin/index.html",
|
|
12
|
-
"static/js/3.
|
|
12
|
+
"static/js/3.f1d474c4.chunk.js.LICENSE.txt": "/admin/static/js/3.f1d474c4.chunk.js.LICENSE.txt",
|
|
13
13
|
"static/media/login-office.0f3e03bf.jpeg": "/admin/static/media/login-office.0f3e03bf.jpeg",
|
|
14
14
|
"static/media/logo.2e0dd078.png": "/admin/static/media/logo.2e0dd078.png",
|
|
15
15
|
"static/media/logo.c62a2a6d.svg": "/admin/static/media/logo.c62a2a6d.svg"
|
|
16
16
|
},
|
|
17
17
|
"entrypoints": [
|
|
18
|
-
"static/js/runtime-main.
|
|
19
|
-
"static/js/3.
|
|
20
|
-
"static/css/main.
|
|
21
|
-
"static/js/main.
|
|
18
|
+
"static/js/runtime-main.36fcdcba.js",
|
|
19
|
+
"static/js/3.f1d474c4.chunk.js",
|
|
20
|
+
"static/css/main.3be6ff03.chunk.css",
|
|
21
|
+
"static/js/main.113da03e.chunk.js"
|
|
22
22
|
]
|
|
23
23
|
}
|
package/dist/admin/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/admin/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="NodeStatus Admin"/><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/antd@4.16.13/dist/antd.min.css"><link rel="apple-touch-icon" href="/admin/logo.png"/><title>NodeStatus Admin</title><link href="/admin/static/css/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/admin/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="NodeStatus Admin"/><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/antd@4.16.13/dist/antd.min.css"><link rel="apple-touch-icon" href="/admin/logo.png"/><title>NodeStatus Admin</title><link href="/admin/static/css/main.3be6ff03.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,u,i=r[0],c=r[1],l=r[2],s=0,p=[];s<i.length;s++)u=i[s],Object.prototype.hasOwnProperty.call(o,u)&&o[u]&&p.push(o[u][0]),o[u]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return a.push.apply(a,l||[]),t()}function t(){for(var e,r=0;r<a.length;r++){for(var t=a[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(a.splice(r--,1),e=u(u.s=t[0]))}return e}var n={},o={2:0},a=[];function u(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,u),t.l=!0,t.exports}u.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var a,i=document.createElement("script");i.charset="utf-8",i.timeout=120,u.nc&&i.setAttribute("nonce",u.nc),i.src=function(e){return u.p+"static/js/"+({}[e]||e)+"."+{0:"9f6e41e4",4:"bb99ac03",5:"1aa416ea",6:"6ac61266"}[e]+".chunk.js"}(e);var c=new Error;a=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+a+")",c.name="ChunkLoadError",c.type=n,c.request=a,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){a({type:"timeout",target:i})}),12e4);i.onerror=i.onload=a,document.head.appendChild(i)}return Promise.all(r)},u.m=e,u.c=n,u.d=function(e,r,t){u.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},u.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,r){if(1&r&&(e=u(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(u.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)u.d(t,n,function(r){return e[r]}.bind(null,n));return t},u.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(r,"a",r),r},u.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},u.p="/admin/",u.oe=function(e){throw console.error(e),e};var i=this["webpackJsonphotaru-admin"]=this["webpackJsonphotaru-admin"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var f=c;t()}([])</script><script src="/admin/static/js/3.f1d474c4.chunk.js"></script><script src="/admin/static/js/main.113da03e.chunk.js"></script></body></html>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* ! tailwindcss v2.2.14 | MIT License | https://tailwindcss.com */
|
|
2
2
|
|
|
3
|
-
/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible!important}.m-auto{margin:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.mr-3{margin-right:.75rem!important}.mr-6{margin-right:1.5rem!important}.mb-2{margin-bottom:.5rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-8{margin-bottom:2rem!important}.ml-4{margin-left:1rem!important}.block{display:block!important}.inline{display:inline!important}.flex{display:flex!important}.table{display:table!important}.hidden{display:none!important}.h-5{height:1.25rem!important}.h-12{height:3rem!important}.h-32{height:8rem!important}.h-full{height:100%!important}.h-screen{height:100vh!important}.min-h-screen{min-height:100vh!important}.w-5{width:1.25rem!important}.w-12{width:3rem!important}.w-full{width:100%!important}.max-w-4xl{max-width:56rem!important}.max-w-full{max-width:100%!important}.max-w-screen-xl{max-width:1280px!important}.flex-1{flex:1 1 0%!important}@-webkit-keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@keyframes ping{75%,to{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-transform:translateY(-25%);transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{-webkit-transform:none;transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes bounce{0%,to{-webkit-transform:translateY(-25%);transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{-webkit-transform:none;transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.flex-col{flex-direction:column!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-evenly{justify-content:space-evenly!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.whitespace-nowrap{white-space:nowrap!important}.rounded-lg{border-radius:.5rem!important}.rounded-full{border-radius:9999px!important}.bg-white{background-color:rgba(255,255,255,var(--tw-bg-opacity))!important}.bg-gray-50,.bg-white{--tw-bg-opacity:1!important}.bg-gray-50{background-color:rgba(249,250,251,var(--tw-bg-opacity))!important}.bg-yellow-100{--tw-bg-opacity:1!important;background-color:rgba(254,243,199,var(--tw-bg-opacity))!important}.bg-green-100{background-color:rgba(209,250,229,var(--tw-bg-opacity))!important}.bg-blue-100,.bg-green-100{--tw-bg-opacity:1!important}.bg-blue-100{background-color:rgba(219,234,254,var(--tw-bg-opacity))!important}.object-cover{object-fit:cover!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-6{padding:1.5rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.pl-6{padding-left:1.5rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-base{font-size:1rem!important;line-height:1.5rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.font-medium{font-weight:500!important}.font-semibold{font-weight:600!important}.text-gray-600{--tw-text-opacity:1!important;color:rgba(75,85,99,var(--tw-text-opacity))!important}.text-gray-700{--tw-text-opacity:1!important;color:rgba(55,65,81,var(--tw-text-opacity))!important}.text-yellow-500{--tw-text-opacity:1!important;color:rgba(245,158,11,var(--tw-text-opacity))!important}.text-green-500{--tw-text-opacity:1!important;color:rgba(16,185,129,var(--tw-text-opacity))!important}.text-blue-500{--tw-text-opacity:1!important;color:rgba(59,130,246,var(--tw-text-opacity))!important}*,:after,:before{--tw-shadow:0 0 transparent}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)!important}.shadow,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)!important}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)!important}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)!important}.ring-black{--tw-ring-opacity:1!important;--tw-ring-color:rgba(0,0,0,var(--tw-ring-opacity))!important}.ring-opacity-5{--tw-ring-opacity:0.05!important}.ant-table{overflow:auto;background-color:#fafafa!important}.ant-table .ant-table-thead .ant-table-cell{font-weight:600}.ant-table .ant-table-tbody{background-color:#fff}.ant-drawer-content{background-color:#001529!important}@media (min-width:640px){.sm\:p-16{padding:4rem!important}}@media (min-width:768px){.md\:h-auto{height:auto!important}.md\:w-1\/2{width:50%!important}.md\:flex-row{flex-direction:row!important}}@media (min-width:1024px){.lg\:block{display:block!important}.lg\:inline-block{display:inline-block!important}.lg\:hidden{display:none!important}}
|
|
3
|
+
/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible!important}.m-auto{margin:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.mr-3{margin-right:.75rem!important}.mr-6{margin-right:1.5rem!important}.mb-2{margin-bottom:.5rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-8{margin-bottom:2rem!important}.ml-4{margin-left:1rem!important}.block{display:block!important}.inline{display:inline!important}.flex{display:flex!important}.table{display:table!important}.hidden{display:none!important}.h-5{height:1.25rem!important}.h-12{height:3rem!important}.h-32{height:8rem!important}.h-full{height:100%!important}.h-screen{height:100vh!important}.min-h-screen{min-height:100vh!important}.w-5{width:1.25rem!important}.w-12{width:3rem!important}.w-full{width:100%!important}.max-w-4xl{max-width:56rem!important}.max-w-full{max-width:100%!important}.max-w-screen-xl{max-width:1280px!important}.flex-1{flex:1 1 0%!important}@-webkit-keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@keyframes ping{75%,to{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-transform:translateY(-25%);transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{-webkit-transform:none;transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes bounce{0%,to{-webkit-transform:translateY(-25%);transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{-webkit-transform:none;transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.flex-col{flex-direction:column!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-evenly{justify-content:space-evenly!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.whitespace-nowrap{white-space:nowrap!important}.rounded-lg{border-radius:.5rem!important}.rounded-full{border-radius:9999px!important}.bg-white{background-color:rgba(255,255,255,var(--tw-bg-opacity))!important}.bg-gray-50,.bg-white{--tw-bg-opacity:1!important}.bg-gray-50{background-color:rgba(249,250,251,var(--tw-bg-opacity))!important}.bg-yellow-100{--tw-bg-opacity:1!important;background-color:rgba(254,243,199,var(--tw-bg-opacity))!important}.bg-green-100{background-color:rgba(209,250,229,var(--tw-bg-opacity))!important}.bg-blue-100,.bg-green-100{--tw-bg-opacity:1!important}.bg-blue-100{background-color:rgba(219,234,254,var(--tw-bg-opacity))!important}.object-cover{object-fit:cover!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-6{padding:1.5rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.pl-6{padding-left:1.5rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-base{font-size:1rem!important;line-height:1.5rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.font-medium{font-weight:500!important}.font-semibold{font-weight:600!important}.text-gray-600{--tw-text-opacity:1!important;color:rgba(75,85,99,var(--tw-text-opacity))!important}.text-gray-700{--tw-text-opacity:1!important;color:rgba(55,65,81,var(--tw-text-opacity))!important}.text-yellow-500{--tw-text-opacity:1!important;color:rgba(245,158,11,var(--tw-text-opacity))!important}.text-green-500{--tw-text-opacity:1!important;color:rgba(16,185,129,var(--tw-text-opacity))!important}.text-blue-500{--tw-text-opacity:1!important;color:rgba(59,130,246,var(--tw-text-opacity))!important}*,:after,:before{--tw-shadow:0 0 transparent}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)!important}.shadow,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)!important}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)!important}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)!important}.ring-black{--tw-ring-opacity:1!important;--tw-ring-color:rgba(0,0,0,var(--tw-ring-opacity))!important}.ring-opacity-5{--tw-ring-opacity:0.05!important}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/)!important;--tw-brightness:var(--tw-empty,/*!*/ /*!*/)!important;--tw-contrast:var(--tw-empty,/*!*/ /*!*/)!important;--tw-grayscale:var(--tw-empty,/*!*/ /*!*/)!important;--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/)!important;--tw-invert:var(--tw-empty,/*!*/ /*!*/)!important;--tw-saturate:var(--tw-empty,/*!*/ /*!*/)!important;--tw-sepia:var(--tw-empty,/*!*/ /*!*/)!important;--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/)!important;-webkit-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.ant-table{overflow:auto;background-color:#fafafa!important}.ant-table .ant-table-thead .ant-table-cell{font-weight:600}.ant-table .ant-table-tbody{background-color:#fff}.ant-drawer-content{background-color:#001529!important}@media (min-width:640px){.sm\:p-16{padding:4rem!important}}@media (min-width:768px){.md\:h-auto{height:auto!important}.md\:w-1\/2{width:50%!important}.md\:flex-row{flex-direction:row!important}}@media (min-width:1024px){.lg\:block{display:block!important}.lg\:inline-block{display:inline-block!important}.lg\:hidden{display:none!important}}
|