1
0
mirror of https://github.com/toast-ts/Daggerbot-TS.git synced 2024-11-18 00:31:00 -05:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Toast
11d7a8dde9
Merge 8b541cbed3 into d6d66c5c52 2024-02-15 07:43:40 +11:00
toast-ts
d6d66c5c52 Attempt to fix the 'RanIntoHumor' that's been broken under the radar. 2024-02-15 07:38:50 +11:00
toast-ts
40c7e27b6c Update PostgreSQL image 2024-02-13 17:40:19 +11:00
toast-ts
8b541cbed3 Merge branch 'master' into sequelize-v7 2024-02-13 08:29:25 +11:00
toast-ts
4fb097fa70 Sync Sequelize v7 changes from Canary repository 2024-02-12 19:55:45 +11:00
15 changed files with 724 additions and 432 deletions

420
.pnp.cjs generated
View File

@ -28,12 +28,12 @@ const RAW_RUNTIME_STATE =
"packageDependencies": [\ "packageDependencies": [\
["@napi-rs/canvas", "npm:0.1.45"],\ ["@napi-rs/canvas", "npm:0.1.45"],\
["@octokit/rest", "npm:20.0.2"],\ ["@octokit/rest", "npm:20.0.2"],\
["@sequelize/core", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37"],\
["@toast/tokenservice-client", "npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz"],\ ["@toast/tokenservice-client", "npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz"],\
["@types/ms", "npm:0.7.34"],\ ["@types/ms", "npm:0.7.34"],\
["@types/node", "npm:20.11.17"],\ ["@types/node", "npm:20.11.17"],\
["@types/node-cron", "npm:3.0.11"],\ ["@types/node-cron", "npm:3.0.11"],\
["@types/pg", "npm:8.11.0"],\ ["@types/pg", "npm:8.11.0"],\
["@types/sequelize", "npm:4.28.20"],\
["ansi-colors", "npm:4.1.3"],\ ["ansi-colors", "npm:4.1.3"],\
["dayjs", "npm:1.11.10"],\ ["dayjs", "npm:1.11.10"],\
["discord.js", "npm:14.14.1"],\ ["discord.js", "npm:14.14.1"],\
@ -42,8 +42,8 @@ const RAW_RUNTIME_STATE =
["node-cron", "npm:3.0.3"],\ ["node-cron", "npm:3.0.3"],\
["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\ ["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\
["pg-hstore", "npm:2.3.4"],\ ["pg-hstore", "npm:2.3.4"],\
["postgres-array", "npm:3.0.2"],\
["redis", "npm:4.6.13"],\ ["redis", "npm:4.6.13"],\
["sequelize", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0"],\
["simple-git", "npm:3.22.0"],\ ["simple-git", "npm:3.22.0"],\
["systeminformation", "npm:5.21.24"],\ ["systeminformation", "npm:5.21.24"],\
["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7"],\
@ -266,6 +266,37 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["@nodelib/fs.scandir", [\
["npm:2.1.5", {\
"packageLocation": "./.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip/node_modules/@nodelib/fs.scandir/",\
"packageDependencies": [\
["@nodelib/fs.scandir", "npm:2.1.5"],\
["@nodelib/fs.stat", "npm:2.0.5"],\
["run-parallel", "npm:1.2.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["@nodelib/fs.stat", [\
["npm:2.0.5", {\
"packageLocation": "./.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip/node_modules/@nodelib/fs.stat/",\
"packageDependencies": [\
["@nodelib/fs.stat", "npm:2.0.5"]\
],\
"linkType": "HARD"\
}]\
]],\
["@nodelib/fs.walk", [\
["npm:1.2.8", {\
"packageLocation": "./.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip/node_modules/@nodelib/fs.walk/",\
"packageDependencies": [\
["@nodelib/fs.walk", "npm:1.2.8"],\
["@nodelib/fs.scandir", "npm:2.1.5"],\
["fastq", "npm:1.17.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@octokit/auth-token", [\ ["@octokit/auth-token", [\
["npm:4.0.0", {\ ["npm:4.0.0", {\
"packageLocation": "./.yarn/cache/@octokit-auth-token-npm-4.0.0-9ad78a752f-60e42701e3.zip/node_modules/@octokit/auth-token/",\ "packageLocation": "./.yarn/cache/@octokit-auth-token-npm-4.0.0-9ad78a752f-60e42701e3.zip/node_modules/@octokit/auth-token/",\
@ -607,6 +638,75 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["@sequelize/core", [\
["npm:7.0.0-alpha.37", {\
"packageLocation": "./.yarn/cache/@sequelize-core-npm-7.0.0-alpha.37-1b326b1eb8-dcaadb079b.zip/node_modules/@sequelize/core/",\
"packageDependencies": [\
["@sequelize/core", "npm:7.0.0-alpha.37"]\
],\
"linkType": "SOFT"\
}],\
["virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37", {\
"packageLocation": "./.yarn/__virtual__/@sequelize-core-virtual-e750a028ee/0/cache/@sequelize-core-npm-7.0.0-alpha.37-1b326b1eb8-dcaadb079b.zip/node_modules/@sequelize/core/",\
"packageDependencies": [\
["@sequelize/core", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37"],\
["@types/debug", "npm:4.1.12"],\
["@types/ibm_db", null],\
["@types/mariadb", null],\
["@types/mysql2", null],\
["@types/odbc", null],\
["@types/pg", "npm:8.11.0"],\
["@types/snowflake-sdk", null],\
["@types/sqlite3", null],\
["@types/tedious", null],\
["@types/validator", "npm:13.11.9"],\
["bnf-parser", "npm:3.1.6"],\
["dayjs", "npm:1.11.10"],\
["debug", "virtual:8dde907e274d6cda4b3be6cd808e5a16421eab0e2ce2f6110b97323dbadda969b2dab36e690fd106d5bd3c87e0525cade2b2ba6fb4fb0c0e439212e4cf5c851b#npm:4.3.4"],\
["dottie", "npm:2.0.6"],\
["fast-glob", "npm:3.3.2"],\
["ibm_db", null],\
["inflection", "npm:3.0.0"],\
["lodash", "npm:4.17.21"],\
["mariadb", null],\
["mysql2", null],\
["odbc", null],\
["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\
["pg-connection-string", "npm:2.6.2"],\
["pg-hstore", "npm:2.3.4"],\
["retry-as-promised", "npm:7.0.4"],\
["semver", "npm:7.6.0"],\
["sequelize-pool", "npm:8.0.0"],\
["snowflake-sdk", null],\
["sqlite3", null],\
["tedious", null],\
["toposort-class", "npm:1.0.1"],\
["type-fest", "npm:3.13.1"],\
["uuid", "npm:9.0.1"],\
["validator", "npm:13.11.0"],\
["wkx", "npm:0.5.0"]\
],\
"packagePeers": [\
"@types/ibm_db",\
"@types/mariadb",\
"@types/mysql2",\
"@types/odbc",\
"@types/pg",\
"@types/snowflake-sdk",\
"@types/sqlite3",\
"@types/tedious",\
"ibm_db",\
"mariadb",\
"mysql2",\
"odbc",\
"pg",\
"snowflake-sdk",\
"sqlite3",\
"tedious"\
],\
"linkType": "HARD"\
}]\
]],\
["@toast/tokenservice-client", [\ ["@toast/tokenservice-client", [\
["npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz", {\ ["npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz", {\
"packageLocation": "./.yarn/cache/@toast-tokenservice-client-npm-1.0.12-11df688697-64112744b4.zip/node_modules/@toast/tokenservice-client/",\ "packageLocation": "./.yarn/cache/@toast-tokenservice-client-npm-1.0.12-11df688697-64112744b4.zip/node_modules/@toast/tokenservice-client/",\
@ -617,25 +717,6 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["@types/bluebird", [\
["npm:3.5.42", {\
"packageLocation": "./.yarn/cache/@types-bluebird-npm-3.5.42-15f353048c-09ad60b083.zip/node_modules/@types/bluebird/",\
"packageDependencies": [\
["@types/bluebird", "npm:3.5.42"]\
],\
"linkType": "HARD"\
}]\
]],\
["@types/continuation-local-storage", [\
["npm:3.2.7", {\
"packageLocation": "./.yarn/cache/@types-continuation-local-storage-npm-3.2.7-763e4dc12b-1f272b53bc.zip/node_modules/@types/continuation-local-storage/",\
"packageDependencies": [\
["@types/continuation-local-storage", "npm:3.2.7"],\
["@types/node", "npm:20.11.17"]\
],\
"linkType": "HARD"\
}]\
]],\
["@types/debug", [\ ["@types/debug", [\
["npm:4.1.12", {\ ["npm:4.1.12", {\
"packageLocation": "./.yarn/cache/@types-debug-npm-4.1.12-82a3fc4905-47876a852d.zip/node_modules/@types/debug/",\ "packageLocation": "./.yarn/cache/@types-debug-npm-4.1.12-82a3fc4905-47876a852d.zip/node_modules/@types/debug/",\
@ -646,15 +727,6 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["@types/lodash", [\
["npm:4.14.201", {\
"packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.201-0c286bbc0c-9b56a2a650.zip/node_modules/@types/lodash/",\
"packageDependencies": [\
["@types/lodash", "npm:4.14.201"]\
],\
"linkType": "HARD"\
}]\
]],\
["@types/ms", [\ ["@types/ms", [\
["npm:0.7.34", {\ ["npm:0.7.34", {\
"packageLocation": "./.yarn/cache/@types-ms-npm-0.7.34-46f5141bfd-f38d36e7b6.zip/node_modules/@types/ms/",\ "packageLocation": "./.yarn/cache/@types-ms-npm-0.7.34-46f5141bfd-f38d36e7b6.zip/node_modules/@types/ms/",\
@ -695,24 +767,11 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["@types/sequelize", [\
["npm:4.28.20", {\
"packageLocation": "./.yarn/cache/@types-sequelize-npm-4.28.20-a712a5ea90-8b3faec2e6.zip/node_modules/@types/sequelize/",\
"packageDependencies": [\
["@types/sequelize", "npm:4.28.20"],\
["@types/bluebird", "npm:3.5.42"],\
["@types/continuation-local-storage", "npm:3.2.7"],\
["@types/lodash", "npm:4.14.201"],\
["@types/validator", "npm:13.11.6"]\
],\
"linkType": "HARD"\
}]\
]],\
["@types/validator", [\ ["@types/validator", [\
["npm:13.11.6", {\ ["npm:13.11.9", {\
"packageLocation": "./.yarn/cache/@types-validator-npm-13.11.6-83ab3545a6-65991ba600.zip/node_modules/@types/validator/",\ "packageLocation": "./.yarn/cache/@types-validator-npm-13.11.9-ac3f0e748e-2d397c6929.zip/node_modules/@types/validator/",\
"packageDependencies": [\ "packageDependencies": [\
["@types/validator", "npm:13.11.6"]\ ["@types/validator", "npm:13.11.9"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
@ -754,6 +813,25 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["bnf-parser", [\
["npm:3.1.6", {\
"packageLocation": "./.yarn/cache/bnf-parser-npm-3.1.6-40bea7c0c7-caaf7078e2.zip/node_modules/bnf-parser/",\
"packageDependencies": [\
["bnf-parser", "npm:3.1.6"]\
],\
"linkType": "HARD"\
}]\
]],\
["braces", [\
["npm:3.0.2", {\
"packageLocation": "./.yarn/cache/braces-npm-3.0.2-782240b28a-966b1fb48d.zip/node_modules/braces/",\
"packageDependencies": [\
["braces", "npm:3.0.2"],\
["fill-range", "npm:7.0.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["buffer-writer", [\ ["buffer-writer", [\
["npm:2.0.0", {\ ["npm:2.0.0", {\
"packageLocation": "./.yarn/cache/buffer-writer-npm-2.0.0-5cd2ef55bc-fdca8e28c5.zip/node_modules/buffer-writer/",\ "packageLocation": "./.yarn/cache/buffer-writer-npm-2.0.0-5cd2ef55bc-fdca8e28c5.zip/node_modules/buffer-writer/",\
@ -779,12 +857,12 @@ const RAW_RUNTIME_STATE =
["daggerbot-ts", "workspace:."],\ ["daggerbot-ts", "workspace:."],\
["@napi-rs/canvas", "npm:0.1.45"],\ ["@napi-rs/canvas", "npm:0.1.45"],\
["@octokit/rest", "npm:20.0.2"],\ ["@octokit/rest", "npm:20.0.2"],\
["@sequelize/core", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37"],\
["@toast/tokenservice-client", "npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz"],\ ["@toast/tokenservice-client", "npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz"],\
["@types/ms", "npm:0.7.34"],\ ["@types/ms", "npm:0.7.34"],\
["@types/node", "npm:20.11.17"],\ ["@types/node", "npm:20.11.17"],\
["@types/node-cron", "npm:3.0.11"],\ ["@types/node-cron", "npm:3.0.11"],\
["@types/pg", "npm:8.11.0"],\ ["@types/pg", "npm:8.11.0"],\
["@types/sequelize", "npm:4.28.20"],\
["ansi-colors", "npm:4.1.3"],\ ["ansi-colors", "npm:4.1.3"],\
["dayjs", "npm:1.11.10"],\ ["dayjs", "npm:1.11.10"],\
["discord.js", "npm:14.14.1"],\ ["discord.js", "npm:14.14.1"],\
@ -793,8 +871,8 @@ const RAW_RUNTIME_STATE =
["node-cron", "npm:3.0.3"],\ ["node-cron", "npm:3.0.3"],\
["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\ ["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\
["pg-hstore", "npm:2.3.4"],\ ["pg-hstore", "npm:2.3.4"],\
["postgres-array", "npm:3.0.2"],\
["redis", "npm:4.6.13"],\ ["redis", "npm:4.6.13"],\
["sequelize", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0"],\
["simple-git", "npm:3.22.0"],\ ["simple-git", "npm:3.22.0"],\
["systeminformation", "npm:5.21.24"],\ ["systeminformation", "npm:5.21.24"],\
["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7"],\
@ -894,6 +972,20 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["fast-glob", [\
["npm:3.3.2", {\
"packageLocation": "./.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip/node_modules/fast-glob/",\
"packageDependencies": [\
["fast-glob", "npm:3.3.2"],\
["@nodelib/fs.stat", "npm:2.0.5"],\
["@nodelib/fs.walk", "npm:1.2.8"],\
["glob-parent", "npm:5.1.2"],\
["merge2", "npm:1.4.1"],\
["micromatch", "npm:4.0.5"]\
],\
"linkType": "HARD"\
}]\
]],\
["fast-xml-parser", [\ ["fast-xml-parser", [\
["npm:4.3.4", {\ ["npm:4.3.4", {\
"packageLocation": "./.yarn/cache/fast-xml-parser-npm-4.3.4-471ce88e5f-ef85910198.zip/node_modules/fast-xml-parser/",\ "packageLocation": "./.yarn/cache/fast-xml-parser-npm-4.3.4-471ce88e5f-ef85910198.zip/node_modules/fast-xml-parser/",\
@ -904,6 +996,26 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["fastq", [\
["npm:1.17.1", {\
"packageLocation": "./.yarn/cache/fastq-npm-1.17.1-56d4554993-a443180068.zip/node_modules/fastq/",\
"packageDependencies": [\
["fastq", "npm:1.17.1"],\
["reusify", "npm:1.0.4"]\
],\
"linkType": "HARD"\
}]\
]],\
["fill-range", [\
["npm:7.0.1", {\
"packageLocation": "./.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-e260f7592f.zip/node_modules/fill-range/",\
"packageDependencies": [\
["fill-range", "npm:7.0.1"],\
["to-regex-range", "npm:5.0.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["generic-pool", [\ ["generic-pool", [\
["npm:3.9.0", {\ ["npm:3.9.0", {\
"packageLocation": "./.yarn/cache/generic-pool-npm-3.9.0-21fff1a77f-3c632d30a6.zip/node_modules/generic-pool/",\ "packageLocation": "./.yarn/cache/generic-pool-npm-3.9.0-21fff1a77f-3c632d30a6.zip/node_modules/generic-pool/",\
@ -913,11 +1025,49 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["inflection", [\ ["glob-parent", [\
["npm:1.13.4", {\ ["npm:5.1.2", {\
"packageLocation": "./.yarn/cache/inflection-npm-1.13.4-102169ecb5-a0cc1b105c.zip/node_modules/inflection/",\ "packageLocation": "./.yarn/cache/glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip/node_modules/glob-parent/",\
"packageDependencies": [\ "packageDependencies": [\
["inflection", "npm:1.13.4"]\ ["glob-parent", "npm:5.1.2"],\
["is-glob", "npm:4.0.3"]\
],\
"linkType": "HARD"\
}]\
]],\
["inflection", [\
["npm:3.0.0", {\
"packageLocation": "./.yarn/cache/inflection-npm-3.0.0-1581c4d576-e8aae6abb8.zip/node_modules/inflection/",\
"packageDependencies": [\
["inflection", "npm:3.0.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["is-extglob", [\
["npm:2.1.1", {\
"packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip/node_modules/is-extglob/",\
"packageDependencies": [\
["is-extglob", "npm:2.1.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["is-glob", [\
["npm:4.0.3", {\
"packageLocation": "./.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip/node_modules/is-glob/",\
"packageDependencies": [\
["is-glob", "npm:4.0.3"],\
["is-extglob", "npm:2.1.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["is-number", [\
["npm:7.0.0", {\
"packageLocation": "./.yarn/cache/is-number-npm-7.0.0-060086935c-6a6c3383f6.zip/node_modules/is-number/",\
"packageDependencies": [\
["is-number", "npm:7.0.0"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
@ -968,21 +1118,22 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["moment", [\ ["merge2", [\
["npm:2.29.4", {\ ["npm:1.4.1", {\
"packageLocation": "./.yarn/cache/moment-npm-2.29.4-902943305d-157c5af5a0.zip/node_modules/moment/",\ "packageLocation": "./.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip/node_modules/merge2/",\
"packageDependencies": [\ "packageDependencies": [\
["moment", "npm:2.29.4"]\ ["merge2", "npm:1.4.1"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["moment-timezone", [\ ["micromatch", [\
["npm:0.5.43", {\ ["npm:4.0.5", {\
"packageLocation": "./.yarn/cache/moment-timezone-npm-0.5.43-1304d8602a-f8b66f8562.zip/node_modules/moment-timezone/",\ "packageLocation": "./.yarn/cache/micromatch-npm-4.0.5-cfab5d7669-a749888789.zip/node_modules/micromatch/",\
"packageDependencies": [\ "packageDependencies": [\
["moment-timezone", "npm:0.5.43"],\ ["micromatch", "npm:4.0.5"],\
["moment", "npm:2.29.4"]\ ["braces", "npm:3.0.2"],\
["picomatch", "npm:2.3.1"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
@ -1186,6 +1337,15 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["picomatch", [\
["npm:2.3.1", {\
"packageLocation": "./.yarn/cache/picomatch-npm-2.3.1-c782cfd986-60c2595003.zip/node_modules/picomatch/",\
"packageDependencies": [\
["picomatch", "npm:2.3.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["postgres-array", [\ ["postgres-array", [\
["npm:2.0.0", {\ ["npm:2.0.0", {\
"packageLocation": "./.yarn/cache/postgres-array-npm-2.0.0-4f49dc1389-aff99e7971.zip/node_modules/postgres-array/",\ "packageLocation": "./.yarn/cache/postgres-array-npm-2.0.0-4f49dc1389-aff99e7971.zip/node_modules/postgres-array/",\
@ -1261,6 +1421,15 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["queue-microtask", [\
["npm:1.2.3", {\
"packageLocation": "./.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip/node_modules/queue-microtask/",\
"packageDependencies": [\
["queue-microtask", "npm:1.2.3"]\
],\
"linkType": "HARD"\
}]\
]],\
["redis", [\ ["redis", [\
["npm:4.6.13", {\ ["npm:4.6.13", {\
"packageLocation": "./.yarn/cache/redis-npm-4.6.13-68c7e2be72-cc66182b8f.zip/node_modules/redis/",\ "packageLocation": "./.yarn/cache/redis-npm-4.6.13-68c7e2be72-cc66182b8f.zip/node_modules/redis/",\
@ -1285,91 +1454,40 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["semver", [\ ["reusify", [\
["npm:7.5.4", {\ ["npm:1.0.4", {\
"packageLocation": "./.yarn/cache/semver-npm-7.5.4-c4ad957fcd-985dec0d37.zip/node_modules/semver/",\ "packageLocation": "./.yarn/cache/reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip/node_modules/reusify/",\
"packageDependencies": [\ "packageDependencies": [\
["semver", "npm:7.5.4"],\ ["reusify", "npm:1.0.4"]\
],\
"linkType": "HARD"\
}]\
]],\
["run-parallel", [\
["npm:1.2.0", {\
"packageLocation": "./.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip/node_modules/run-parallel/",\
"packageDependencies": [\
["run-parallel", "npm:1.2.0"],\
["queue-microtask", "npm:1.2.3"]\
],\
"linkType": "HARD"\
}]\
]],\
["semver", [\
["npm:7.6.0", {\
"packageLocation": "./.yarn/cache/semver-npm-7.6.0-f4630729f6-1b41018df2.zip/node_modules/semver/",\
"packageDependencies": [\
["semver", "npm:7.6.0"],\
["lru-cache", "npm:6.0.0"]\ ["lru-cache", "npm:6.0.0"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["sequelize", [\
["npm:6.37.0", {\
"packageLocation": "./.yarn/cache/sequelize-npm-6.37.0-0544e51055-3eb3c53e48.zip/node_modules/sequelize/",\
"packageDependencies": [\
["sequelize", "npm:6.37.0"]\
],\
"linkType": "SOFT"\
}],\
["virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0", {\
"packageLocation": "./.yarn/__virtual__/sequelize-virtual-acbc91f444/0/cache/sequelize-npm-6.37.0-0544e51055-3eb3c53e48.zip/node_modules/sequelize/",\
"packageDependencies": [\
["sequelize", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0"],\
["@types/debug", "npm:4.1.12"],\
["@types/ibm_db", null],\
["@types/mariadb", null],\
["@types/mysql2", null],\
["@types/oracledb", null],\
["@types/pg", "npm:8.11.0"],\
["@types/pg-hstore", null],\
["@types/snowflake-sdk", null],\
["@types/sqlite3", null],\
["@types/tedious", null],\
["@types/validator", "npm:13.11.6"],\
["debug", "virtual:8dde907e274d6cda4b3be6cd808e5a16421eab0e2ce2f6110b97323dbadda969b2dab36e690fd106d5bd3c87e0525cade2b2ba6fb4fb0c0e439212e4cf5c851b#npm:4.3.4"],\
["dottie", "npm:2.0.6"],\
["ibm_db", null],\
["inflection", "npm:1.13.4"],\
["lodash", "npm:4.17.21"],\
["mariadb", null],\
["moment", "npm:2.29.4"],\
["moment-timezone", "npm:0.5.43"],\
["mysql2", null],\
["oracledb", null],\
["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\
["pg-connection-string", "npm:2.6.2"],\
["pg-hstore", "npm:2.3.4"],\
["retry-as-promised", "npm:7.0.4"],\
["semver", "npm:7.5.4"],\
["sequelize-pool", "npm:7.1.0"],\
["snowflake-sdk", null],\
["sqlite3", null],\
["tedious", null],\
["toposort-class", "npm:1.0.1"],\
["uuid", "npm:8.3.2"],\
["validator", "npm:13.11.0"],\
["wkx", "npm:0.5.0"]\
],\
"packagePeers": [\
"@types/ibm_db",\
"@types/mariadb",\
"@types/mysql2",\
"@types/oracledb",\
"@types/pg-hstore",\
"@types/pg",\
"@types/snowflake-sdk",\
"@types/sqlite3",\
"@types/tedious",\
"ibm_db",\
"mariadb",\
"mysql2",\
"oracledb",\
"pg-hstore",\
"pg",\
"snowflake-sdk",\
"sqlite3",\
"tedious"\
],\
"linkType": "HARD"\
}]\
]],\
["sequelize-pool", [\ ["sequelize-pool", [\
["npm:7.1.0", {\ ["npm:8.0.0", {\
"packageLocation": "./.yarn/cache/sequelize-pool-npm-7.1.0-670df81ecb-eeb0837451.zip/node_modules/sequelize-pool/",\ "packageLocation": "./.yarn/cache/sequelize-pool-npm-8.0.0-e96de3b702-c449ec2f34.zip/node_modules/sequelize-pool/",\
"packageDependencies": [\ "packageDependencies": [\
["sequelize-pool", "npm:7.1.0"]\ ["sequelize-pool", "npm:8.0.0"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
@ -1413,6 +1531,16 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["to-regex-range", [\
["npm:5.0.1", {\
"packageLocation": "./.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip/node_modules/to-regex-range/",\
"packageDependencies": [\
["to-regex-range", "npm:5.0.1"],\
["is-number", "npm:7.0.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["toposort-class", [\ ["toposort-class", [\
["npm:1.0.1", {\ ["npm:1.0.1", {\
"packageLocation": "./.yarn/cache/toposort-class-npm-1.0.1-aefabde69e-166cb89ecb.zip/node_modules/toposort-class/",\ "packageLocation": "./.yarn/cache/toposort-class-npm-1.0.1-aefabde69e-166cb89ecb.zip/node_modules/toposort-class/",\
@ -1440,6 +1568,15 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\ "linkType": "HARD"\
}]\ }]\
]],\ ]],\
["type-fest", [\
["npm:3.13.1", {\
"packageLocation": "./.yarn/cache/type-fest-npm-3.13.1-4bd562882d-9a8a2359ad.zip/node_modules/type-fest/",\
"packageDependencies": [\
["type-fest", "npm:3.13.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["typescript", [\ ["typescript", [\
["patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7", {\ ["patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7", {\
"packageLocation": "./.yarn/cache/typescript-patch-4778c7998b-c93786fcc9.zip/node_modules/typescript/",\ "packageLocation": "./.yarn/cache/typescript-patch-4778c7998b-c93786fcc9.zip/node_modules/typescript/",\
@ -1501,6 +1638,13 @@ const RAW_RUNTIME_STATE =
["uuid", "npm:8.3.2"]\ ["uuid", "npm:8.3.2"]\
],\ ],\
"linkType": "HARD"\ "linkType": "HARD"\
}],\
["npm:9.0.1", {\
"packageLocation": "./.yarn/cache/uuid-npm-9.0.1-39a8442bc6-9d0b6adb72.zip/node_modules/uuid/",\
"packageDependencies": [\
["uuid", "npm:9.0.1"]\
],\
"linkType": "HARD"\
}]\ }]\
]],\ ]],\
["validator", [\ ["validator", [\

View File

@ -7,7 +7,7 @@ services:
- 6379:6379/tcp - 6379:6379/tcp
db: db:
container_name: postgres-master container_name: postgres-master
image: postgres:16.1-alpine3.19 image: postgres:16.2-alpine3.19
restart: unless-stopped restart: unless-stopped
ports: ports:
- 5432:5432/tcp - 5432:5432/tcp

View File

@ -34,6 +34,7 @@
"dependencies": { "dependencies": {
"@napi-rs/canvas": "0.1.45", "@napi-rs/canvas": "0.1.45",
"@octokit/rest": "20.0.2", "@octokit/rest": "20.0.2",
"@sequelize/core": "7.0.0-alpha.37",
"@toast/tokenservice-client": "1.0.12", "@toast/tokenservice-client": "1.0.12",
"ansi-colors": "4.1.3", "ansi-colors": "4.1.3",
"dayjs": "1.11.10", "dayjs": "1.11.10",
@ -43,8 +44,8 @@
"node-cron": "3.0.3", "node-cron": "3.0.3",
"pg": "8.11.3", "pg": "8.11.3",
"pg-hstore": "2.3.4", "pg-hstore": "2.3.4",
"postgres-array": "3.0.2",
"redis": "4.6.13", "redis": "4.6.13",
"sequelize": "6.37.0",
"simple-git": "3.22.0", "simple-git": "3.22.0",
"systeminformation": "5.21.24", "systeminformation": "5.21.24",
"undici": "6.6.2" "undici": "6.6.2"
@ -54,7 +55,6 @@
"@types/node": "20.11.17", "@types/node": "20.11.17",
"@types/node-cron": "3.0.11", "@types/node-cron": "3.0.11",
"@types/pg": "8.11.0", "@types/pg": "8.11.0",
"@types/sequelize": "4.28.20",
"typescript": "5.3.3" "typescript": "5.3.3"
} }
} }

View File

@ -8,7 +8,7 @@ services:
- 6379:6379/tcp - 6379:6379/tcp
db-slave: db-slave:
container_name: postgres-slave container_name: postgres-slave
image: postgres:16.1-alpine3.19 image: postgres:16.2-alpine3.19
restart: unless-stopped restart: unless-stopped
ports: ports:
- 5432:5432/tcp - 5432:5432/tcp

View File

@ -9,10 +9,14 @@ import {FSData} from 'src/interfaces';
import {requestServerData, mpModuleDisabled, refreshTimerSecs, playtimeStat} from '../modules/MPModule.js'; import {requestServerData, mpModuleDisabled, refreshTimerSecs, playtimeStat} from '../modules/MPModule.js';
async function fetchData(client:TClient, interaction:Discord.ChatInputCommandInteraction, serverName:string):Promise<FSData|Discord.InteractionResponse> { async function fetchData(client:TClient, interaction:Discord.ChatInputCommandInteraction, serverName:string):Promise<FSData|Discord.InteractionResponse> {
try {
const db = await client.MPServer.findInCache(); const db = await client.MPServer.findInCache();
const data = await requestServerData(client, db.find(x=>x.serverName === serverName)); const data = await requestServerData(client, db.find(x=>x.serverName === serverName));
if (!data) return interaction.reply('Ran into a '+RanIntoHumor+' while trying to retrieve server data, please try again later.');
return data.dss as FSData; return data.dss as FSData;
} catch {
Logger.console('error', 'MPDB', 'Function failed - fetchData');
return interaction.reply('Ran into a '+RanIntoHumor()+' while trying to retrieve server data, please try again later.');
}
} }
const logPrefix = 'MPDB'; const logPrefix = 'MPDB';
@ -42,8 +46,10 @@ export default class MP {
const canvas = await new CanvasBuilder().generateGraph(PDArr.slice(-120), 'players'); const canvas = await new CanvasBuilder().generateGraph(PDArr.slice(-120), 'players');
const players:string[] = []; const players:string[] = [];
let embedColor:Discord.ColorResolvable; let embedColor:Discord.ColorResolvable;
try {
switch (true){ switch (true){
case DSS?.slots?.used === DSS?.slots.capacity: case DSS?.slots?.used === DSS?.slots?.capacity:
embedColor = client.config.embedColorRed; embedColor = client.config.embedColorRed;
break; break;
case DSS?.slots?.used > 8: case DSS?.slots?.used > 8:
@ -53,16 +59,17 @@ export default class MP {
embedColor = client.config.embedColorGreen; embedColor = client.config.embedColorGreen;
} }
for (const player of DSS.slots.players.filter(x=>x.isUsed)) players.push(playtimeStat(player)) for (const player of DSS.slots.players.filter(x=>x.isUsed)) players.push(playtimeStat(player))
let attachmentName:string = 'MPModule.jpg'; let attachmentName:string = 'MPModule.jpg';
await interaction.reply({embeds:[new client.embed() await interaction.reply({embeds:[new client.embed()
.setTitle(DSS.server?.name.length > 0 ? DSS.server.name : 'Offline') .setTitle(DSS.server?.name.length > 0 ? DSS.server.name : 'Offline')
.setColor(embedColor) .setColor(embedColor)
.setDescription(DSS?.slots?.used < 1 ? '*Nobody is playing*' : players.join('\n\n')) .setDescription(DSS?.slots?.used < 1 ? '*Nobody is playing*' : players.join('\n\n'))
.setImage(`attachment://${attachmentName}`) .setImage(`attachment://${attachmentName}`)
.setAuthor({name: `${DSS.slots.used}/${DSS.slots.capacity}`}) .setAuthor({name: `${DSS.slots?.used}/${DSS.slots?.capacity}`})
.setFooter({text: `Current time: ${('0'+Math.floor((DSS?.server.dayTime/3600/1000))).slice(-2)}:${('0'+Math.floor((DSS?.server.dayTime/60/1000)%60)).slice(-2)}`}) .setFooter({text: `Current time: ${('0'+Math.floor((DSS?.server.dayTime/3600/1000))).slice(-2)}:${('0'+Math.floor((DSS?.server.dayTime/60/1000)%60)).slice(-2)}`})
], files: [new client.attachment(canvas.toBuffer('image/jpeg'), {name: attachmentName})]}) ], files: [new client.attachment(canvas.toBuffer('image/jpeg'), {name: attachmentName})]});
} catch {}
}, },
details: async()=>{ details: async()=>{
const DSS = await fetchData(client, interaction, choiceSelector) as FSData; const DSS = await fetchData(client, interaction, choiceSelector) as FSData;
@ -71,26 +78,25 @@ export default class MP {
const server = db.find(x=>x.serverName === choiceSelector); const server = db.find(x=>x.serverName === choiceSelector);
const dEmbed = new client.embed().setColor(client.config.embedColor).setAuthor({name: 'Crossplay server'}).setDescription(MessageTool.concatMessage( const dEmbed = new client.embed().setColor(client.config.embedColor).setAuthor({name: 'Crossplay server'}).setDescription(MessageTool.concatMessage(
`**Name:** \`${DSS?.server.name.length > 0 ? DSS.server.name : '\u200b'}\``, `**Name:** \`${DSS.server?.name.length > 0 ? DSS.server.name : '\u200b'}\``,
'**Password:** `mf4700`', '**Password:** `mf4700`',
`**Map:** \`${DSS.server.mapName.length > 0 ? DSS.server.mapName : 'No map'}\``, `**Map:** \`${DSS.server?.mapName.length > 0 ? DSS.server.mapName : 'No map'}\``,
`**Mods:** [Click here](http://${server.ip}/mods.html) **|** [Direct link](http://${server.ip}/all_mods_download?onlyActive=true)`, `**Mods:** [Click here](http://${server.ip}/mods.html) **|** [Direct link](http://${server.ip}/all_mods_download?onlyActive=true)`,
'**Filters:** [Click here](https://discord.com/channels/468835415093411861/468835769092669461/926581585938120724)', '**Filters:** [Click here](https://discord.com/channels/468835415093411861/468835769092669461/926581585938120724)',
`Please see <#${channels.serverInfo}> for more additional information and rules.` `Please see <#${channels.serverInfo}> for more additional information and rules.`
)); ));
if (DSS.server.name.length < 1) dEmbed.setFooter({text: 'Server is currently offline'}); if (DSS.server?.name.length < 1) dEmbed.setFooter({text: 'Server is currently offline'});
await interaction.reply({embeds: [dEmbed]}) DSS.server ? await interaction.reply({embeds: [dEmbed]}) : null;
}, },
status: async()=>{ status: async()=>{
const DSS = await fetchData(client, interaction, choiceSelector) as FSData; const DSS = await fetchData(client, interaction, choiceSelector) as FSData;
if (!DSS) return console.log('Endpoint failed - status'); if (!DSS) return console.log('Endpoint failed - status');
if (DSS.server.name.length > 0) {
await interaction.reply({embeds: [new client.embed().setColor(client.config.embedColor).addFields( DSS.server ? await interaction.reply({embeds: [new client.embed().setColor(client.config.embedColor).addFields(
{name: 'Name', value: `\`${DSS?.server.name}\``}, {name: 'Name', value: DSS.server?.name?.length < 1 ? '*`Offline`*' : `\`${DSS?.server?.name}\``},
{name: 'Players', value: `${DSS.slots.used}/${DSS.slots.capacity}`}, {name: 'Players', value: `${DSS?.slots.used}/${DSS?.slots.capacity}`},
{name: 'Map', value: DSS?.server.mapName} {name: 'Map', value: DSS?.server.mapName}
).setFooter({text: `Version: ${DSS?.server.version} | Time: ${`${('0'+Math.floor((DSS?.server.dayTime/3600/1000))).slice(-2)}:${('0'+Math.floor((DSS?.server.dayTime/60/1000)%60)).slice(-2)}`}`})]}) ).setFooter({text: `Version: ${DSS?.server?.version} | Time: ${`${('0'+Math.floor((DSS?.server.dayTime/3600/1000))).slice(-2)}:${('0'+Math.floor((DSS?.server.dayTime/60/1000)%60)).slice(-2)}`}`})]}) : null
} else return interaction.reply('Server is currently offline.')
}, },
pallets: async()=>{ pallets: async()=>{
const DSS = await fetchData(client, interaction, choiceSelector) as FSData; const DSS = await fetchData(client, interaction, choiceSelector) as FSData;

View File

@ -1,4 +1,4 @@
import {Sequelize} from 'sequelize'; import {Sequelize} from '@sequelize/core';
import Logger from '../helpers/Logger.js'; import Logger from '../helpers/Logger.js';
import TSClient from '../helpers/TSClient.js'; import TSClient from '../helpers/TSClient.js';

View File

@ -1,5 +1,5 @@
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
import CacheServer from '../components/CacheServer.js'; import CacheServer from '../components/CacheServer.js';
class MPServer extends Model { class MPServer extends Model {
@ -57,58 +57,45 @@ export class MPServerSvc {
} }
query = async(pattern:string)=>await this.model.sequelize.query(pattern); query = async(pattern:string)=>await this.model.sequelize.query(pattern);
async fetchPlayerData(serverName:string) { async fetchPlayerData(serverName:string) {
const findServerByName = await this.model.findOne({where: {serverName: serverName}}); const server = await this.model.findOne({where: {serverName: serverName}});
if (findServerByName) return findServerByName.dataValues.playerData; return server ? server.dataValues.playerData : [];
else return [];
} }
async addServer(serverName:string, ip:string, code:string) { async addServer(serverName:string, ip:string, code:string) {
const findServerByName = await this.model.findOne({where: {serverName: serverName}}); await this.model.upsert({
if (findServerByName) { serverName,
(await findServerByName.update({serverName: serverName, ip: ip, code: code})).save();
await CacheServer.delete(cacheKey).then(async()=>await this.findInCache());
} else {
await this.model.create({
serverName: serverName,
isActive: true, isActive: true,
ip: ip, ip,
code: code, code,
playerData: [] playerData: []
}); });
await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); await CacheServer.delete(cacheKey).then(async()=>await this.findInCache());
} }
}
async removeServer(serverName:string) { async removeServer(serverName:string) {
const findServerByName = await this.model.findOne({where: {serverName: serverName}}); await this.model.destroy({where: {serverName}});
if (findServerByName) {
await this.model.destroy({where: {serverName: serverName}});
await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); await CacheServer.delete(cacheKey).then(async()=>await this.findInCache());
} }
}
async toggleServerUsability(serverName:string, isActive:boolean) { async toggleServerUsability(serverName:string, isActive:boolean) {
const findServerByName = await this.model.findOne({where: {serverName: serverName}}); const [updated] = await this.model.update({isActive}, {where: {serverName}});
if (findServerByName) { if (updated) {
this.model.update({isActive: isActive}, {where: {serverName: serverName}}).then(async flagUpdated=>{
if (flagUpdated) {
await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); await CacheServer.delete(cacheKey).then(async()=>await this.findInCache());
return true; return true;
} }
}); return false;
} else return false;
} }
async incrementPlayerCount(serverName:string, playerCount:number) { async incrementPlayerCount(serverName:string, playerCount:number) {
const findServerByName = await this.model.findOne({where: {serverName: serverName}}); const server = await this.model.findOne({where: {serverName}});
if (findServerByName) { if (server) {
let PD = findServerByName.dataValues.playerData; let PD = server.dataValues.playerData;
if (PD.length > 1920) PD = []; //Selfnote: 86400/45 = 1920, where 86400 is seconds in a day and 45 is the MPModule's refresh interval. if (PD.length > 1920) PD = []; //Selfnote: 86400/45 = 1920, where 86400 is seconds in a day and 45 is the MPModule's refresh interval.
PD.push(playerCount); PD.push(playerCount);
const updatePD = await this.model.update({playerData: PD}, {where: {serverName: serverName}}); await this.model.update({playerData: PD}, {where: {serverName}});
if (updatePD) true; return true;
else return false; }
} else return false; return false;
} }
async findInCache(): Promise<IServer[]> { async findInCache(): Promise<IServer[]> {
const cachedResult = await CacheServer.get(cacheKey, true); const cachedResult = await CacheServer.get(cacheKey, true);
let result; let result:IServer[];
if (cachedResult) result = cachedResult; if (cachedResult) result = cachedResult;
else { else {
result = await this.model.findAll(); result = await this.model.findAll();

View File

@ -1,5 +1,6 @@
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
import Logger from '../helpers/Logger.js';
class dailyMsgs extends Model { class dailyMsgs extends Model {
declare public day: number; declare public day: number;
@ -26,18 +27,20 @@ export class DailyMsgsSvc {
tableName: 'dailymsgs', tableName: 'dailymsgs',
createdAt: false, createdAt: false,
updatedAt: false, updatedAt: false,
indexes: [
{name: 'day_index', fields: ['day'], unique: true}
],
sequelize: DatabaseServer.seq sequelize: DatabaseServer.seq
}) })
this.model.sync(); this.model.sync();
} }
query = async(pattern:string)=>await this.model.sequelize.query(pattern); query = async(pattern:string)=>await this.model.sequelize.query(pattern);
nukeDays = async()=>await this.model.destroy({truncate: true}); nukeDays = async()=>await this.model.destroy();
fetchDays = async()=>await this.model.findAll(); fetchDays = async()=>await this.model.findAll();
async newDay(formattedDate:number, total:number) { async newDay(formattedDate:number, total:number) {
if (await this.model.findOne({where: {day: formattedDate}})) return console.log('This day already exists!') const [instance, created] = await this.model.findOrCreate({where: {day: formattedDate}, defaults: {total}});
return await this.model.create({day: formattedDate, total: total}); if (!created) return Logger.console('log', 'DailyMsgs', 'This day already exists!');
return instance
// Save previous day's total messages into database when a new day starts. // Save previous day's total messages into database when a new day starts.
} }
updateDay = async(formattedDate:number, total:number)=>await this.model.update({total: total}, {where: {day: formattedDate}});
// THIS IS FOR DEVELOPMENT PURPOSES ONLY, NOT TO BE USED IN LIVE ENVIRONMENT!
} }

View File

@ -1,5 +1,5 @@
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
class prohibitedWords extends Model { class prohibitedWords extends Model {
declare public word: string; declare public word: string;

View File

@ -1,12 +1,24 @@
import Discord from 'discord.js'; import Discord from 'discord.js';
import TClient from '../client.js'; import TClient from '../client.js';
import ms from 'ms'; import ms from 'ms';
import Logger from '../helpers/Logger.js';
import {Punishment} from 'src/interfaces'; import {Punishment} from 'src/interfaces';
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
import CacheServer from '../components/CacheServer.js'; import CacheServer from '../components/CacheServer.js';
import Formatters from '../helpers/Formatters.js'; import Formatters from '../helpers/Formatters.js';
const PAST_TENSE_MAPPING = {
ban: 'banned',
softban: 'softbanned',
kick: 'kicked',
mute: 'muted',
warn: 'warned',
remind: 'reminded'
};
const TRANSACTION_FAILED = 'An error occurred while updating the database. See console for more details.';
class punishments extends Model { class punishments extends Model {
declare public case_id: number; declare public case_id: number;
declare public type: string; declare public type: string;
@ -91,13 +103,13 @@ export class PunishmentsSvc {
findByCancels =(caseId:number)=>this.model.findOne({where: {cancels: caseId}}) findByCancels =(caseId:number)=>this.model.findOne({where: {cancels: caseId}})
getAllCases =()=>this.model.findAll(); getAllCases =()=>this.model.findAll();
async generateCaseId() { async generateCaseId() {
const result = await this.model.findAll(); const result = await this.model.max('case_id');
return Math.max(...result.map((x:Punishment)=>x.case_id), 0) + 1; return (result as number ?? 0) + 1;
} }
async findInCache():Promise<any> { async findInCache():Promise<Punishment[]> {
const cacheKey = 'punishments'; const cacheKey = 'punishments';
const cachedResult = await CacheServer.get(cacheKey, true); const cachedResult = await CacheServer.get(cacheKey, true);
let result:any; let result:Punishment[];
if (cachedResult) result = cachedResult; if (cachedResult) result = cachedResult;
else { else {
result = await this.model.findAll(); result = await this.model.findAll();
@ -132,16 +144,7 @@ export class PunishmentsSvc {
} }
(this.client.channels.cache.get(channel) as Discord.TextChannel).send({embeds: [embed]}); (this.client.channels.cache.get(channel) as Discord.TextChannel).send({embeds: [embed]});
} }
getPastTense(type:string) { getPastTense =(type:string)=>PAST_TENSE_MAPPING[type];
return {
ban: 'banned',
softban: 'softbanned',
kick: 'kicked',
mute: 'muted',
warn: 'warned',
remind: 'reminded'
}[type];
}
async punishmentAdd(type:string, options:{time?:string, interaction?:Discord.ChatInputCommandInteraction}, moderator:string, reason: string, user:Discord.User, guildUser?:Discord.GuildMember) { async punishmentAdd(type:string, options:{time?:string, interaction?:Discord.ChatInputCommandInteraction}, moderator:string, reason: string, user:Discord.User, guildUser?:Discord.GuildMember) {
const {time, interaction} = options; const {time, interaction} = options;
const now = Date.now(); const now = Date.now();
@ -165,14 +168,22 @@ export class PunishmentsSvc {
if (guildUser) await guildUser.send(`You've been ${this.getPastTense(type)} ${inOrFromBoolean} **${guild.name}**${durText}\n\`${reason}\` (Case #${punishment.case_id})`).catch(()=>embed.setFooter({text: 'Unable to DM a member'})); if (guildUser) await guildUser.send(`You've been ${this.getPastTense(type)} ${inOrFromBoolean} **${guild.name}**${durText}\n\`${reason}\` (Case #${punishment.case_id})`).catch(()=>embed.setFooter({text: 'Unable to DM a member'}));
if (['ban', 'softban'].includes(type)) { switch (type) {
case 'ban':
case 'softban': {
const alreadyBanned = await guild.bans.fetch(user.id).catch(()=>null); // 172800 seconds is 48 hours, just for future reference const alreadyBanned = await guild.bans.fetch(user.id).catch(()=>null); // 172800 seconds is 48 hours, just for future reference
if (!alreadyBanned) punishmentResult = await guild.bans.create(user.id, {reason: auditLogReason, deleteMessageSeconds: 172800}).catch((err:Error)=>err.message); if (alreadyBanned) punishmentResult = `This user already exists in the guild\'s ban list.\nReason: \`${alreadyBanned?.reason}\``;
else punishmentResult = `This user already exists in the guild\'s ban list.\nReason: \`${alreadyBanned?.reason}\``; else punishmentResult = await guild.bans.create(user.id, {reason: auditLogReason, deleteMessageSeconds: 172800}).catch((err:Error)=>err.message);
} else if (type === 'kick') punishmentResult = await guildUser?.kick(auditLogReason).catch((err:Error)=>err.message);
else if (type === 'mute') punishmentResult = await guildUser?.timeout(millisecondTime, auditLogReason).catch((err:Error)=>err.message);
if (type === 'softban' && typeof punishmentResult !== 'string') punishmentResult = await guild.bans.remove(user.id, auditLogReason).catch((err:Error)=>err.message); if (type === 'softban' && typeof punishmentResult !== 'string') punishmentResult = await guild.bans.remove(user.id, auditLogReason).catch((err:Error)=>err.message);
break;
}
case 'kick':
punishmentResult = await guildUser?.kick(auditLogReason).catch((err:Error)=>err.message);
break;
case 'mute':
punishmentResult = await guildUser?.timeout(millisecondTime, auditLogReason).catch((err:Error)=>err.message);
break;
}
if (millisecondTime && ['ban', 'mute'].includes(type)) { if (millisecondTime && ['ban', 'mute'].includes(type)) {
punishment.endTime = now + millisecondTime; punishment.endTime = now + millisecondTime;
@ -183,9 +194,9 @@ export class PunishmentsSvc {
if (interaction) return interaction.editReply(punishmentResult); if (interaction) return interaction.editReply(punishmentResult);
else return punishmentResult; else return punishmentResult;
} else { } else {
const checkIfExists = await this.model.findOne({where: {case_id: punishment.case_id}}); try { // https://sequelize.org/docs/v7/querying/transactions/
if (checkIfExists) this.model.update({expired: punishment.expired, time: punishment.time, endTime: punishment.endTime}, {where: {case_id: punishment.case_id}}) await this.model.sequelize.transaction(async transaction=>{
else await this.model.create({ await this.model.upsert({
case_id: punishment.case_id, case_id: punishment.case_id,
type: punishment.type, type: punishment.type,
member_name: punishment.member_name, member_name: punishment.member_name,
@ -197,8 +208,13 @@ export class PunishmentsSvc {
endTime: punishment.endTime, endTime: punishment.endTime,
cancels: punishment.cancels, cancels: punishment.cancels,
duration: punishment.duration duration: punishment.duration
}); }, {transaction});
await this.createModlog(punishment); await this.createModlog(punishment);
});
} catch (err) {
Logger.console('error', 'Punishment', err);
return TRANSACTION_FAILED;
}
if (interaction) return interaction.editReply({embeds: [embed]}); if (interaction) return interaction.editReply({embeds: [embed]});
else return punishmentResult; else return punishmentResult;
@ -217,20 +233,29 @@ export class PunishmentsSvc {
let removePunishmentData:Punishment = {type: `un${punishment.type}`, case_id: ID, cancels: punishment.case_id, member_name: punishment.member_name, member: punishment.member, reason, moderator, time: now}; let removePunishmentData:Punishment = {type: `un${punishment.type}`, case_id: ID, cancels: punishment.case_id, member_name: punishment.member_name, member: punishment.member, reason, moderator, time: now};
let removePunishmentResult:any; let removePunishmentResult:any;
if (punishment.type === 'ban') removePunishmentResult = await guild.bans.remove(punishment.member, auditLogReason).catch((err:Error)=>err.message); switch (punishment.type) {
else if (punishment.type === 'mute') { case 'ban':
removePunishmentResult = await guild.bans.remove(punishment.member, auditLogReason).catch((err:Error)=>err.message);
break;
case 'mute':
if (guildUser) { if (guildUser) {
removePunishmentResult = await guildUser.timeout(null, auditLogReason).catch((err:Error)=>err.message); removePunishmentResult = await guildUser.timeout(null, auditLogReason).catch((err:Error)=>err.message);
guildUser.send(`You've been unmuted in **${guild.name}**.`).catch(()=>null); guildUser.send(`You've been unmuted in **${guild.name}**.`).catch(()=>null);
} else this.model.update({expired: true}, {where: {case_id: caseId}}); } else this.model.update({expired: true}, {where: {case_id: caseId}});
} else removePunishmentData.type = 'punishmentOverride'; break;
default:
removePunishmentData.type = 'punishmentOverride';
break;
}
if (typeof removePunishmentResult === 'string') {// Punishment was unsuccessful if (typeof removePunishmentResult === 'string') {// Punishment was unsuccessful
if (interaction) return interaction.editReply(removePunishmentResult); if (interaction) return interaction.editReply(removePunishmentResult);
else return removePunishmentResult; else return removePunishmentResult;
} else { } else {
this.model.update({expired: true}, {where: {case_id: caseId}}).then(()=> try { // https://sequelize.org/docs/v7/querying/transactions/
this.model.create({ await this.model.sequelize.transaction(async transaction=>{
await this.model.update({expired: true}, {where: {case_id: caseId}, transaction})
await this.model.upsert({
case_id: removePunishmentData.case_id, case_id: removePunishmentData.case_id,
type: removePunishmentData.type, type: removePunishmentData.type,
member_name: removePunishmentData.member_name, member_name: removePunishmentData.member_name,
@ -242,9 +267,13 @@ export class PunishmentsSvc {
endTime: removePunishmentData.endTime, endTime: removePunishmentData.endTime,
cancels: removePunishmentData.cancels, cancels: removePunishmentData.cancels,
duration: removePunishmentData.duration duration: removePunishmentData.duration
}) }, {transaction});
);
await this.createModlog(removePunishmentData); await this.createModlog(removePunishmentData);
});
} catch (err) {
Logger.console('error', 'Punishment', err);
return TRANSACTION_FAILED;
}
if (interaction) return interaction.reply({embeds: [new this.client.embed() if (interaction) return interaction.reply({embeds: [new this.client.embed()
.setColor(this.client.config.embedColor) .setColor(this.client.config.embedColor)

View File

@ -1,5 +1,5 @@
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
class suggestions extends Model { class suggestions extends Model {
declare public id: number; declare public id: number;

View File

@ -2,7 +2,7 @@ import TClient from '../client.js';
import MessageTool from '../helpers/MessageTool.js'; import MessageTool from '../helpers/MessageTool.js';
import CacheServer from '../components/CacheServer.js'; import CacheServer from '../components/CacheServer.js';
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
import {ChatInputCommandInteraction, Snowflake} from 'discord.js'; import {ChatInputCommandInteraction, Snowflake} from 'discord.js';
class tagsystem extends Model { class tagsystem extends Model {
@ -79,7 +79,7 @@ export class TagSystemSvc {
async findInCache(): Promise<Tags[]> { async findInCache(): Promise<Tags[]> {
const cacheKey = 'tags'; const cacheKey = 'tags';
const cachedResult = await CacheServer.get(cacheKey, true); const cachedResult = await CacheServer.get(cacheKey, true);
let result; let result:Tags[];
if (cachedResult) result = cachedResult; if (cachedResult) result = cachedResult;
else { else {
result = await this.model.findAll(); result = await this.model.findAll();

View File

@ -2,7 +2,7 @@ import Discord from 'discord.js';
import TClient from '../client.js'; import TClient from '../client.js';
import MessageTool from '../helpers/MessageTool.js'; import MessageTool from '../helpers/MessageTool.js';
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
import {writeFileSync} from 'node:fs'; import {writeFileSync} from 'node:fs';
import cron from 'node-cron'; import cron from 'node-cron';
import Logger from '../helpers/Logger.js'; import Logger from '../helpers/Logger.js';
@ -61,9 +61,9 @@ export class UserLevelsSvc {
fetchEveryone = async()=>await this.model.findAll(); fetchEveryone = async()=>await this.model.findAll();
fetchUser = async(userId:string)=>await this.model.findByPk(userId); fetchUser = async(userId:string)=>await this.model.findByPk(userId);
deleteUser = async(userId:string)=>await this.model.destroy({where: {id: userId}}); deleteUser = async(userId:string)=>await this.model.destroy({where: {id: userId}});
async modifyUser(userId:string, updatedMessages:number) { async modifyUser(userId:string, messages:number) {
await this.model.update({messages: updatedMessages}, {where: {id: userId}}); const [_, [updatedUser]] = await this.model.update({messages}, {where: {id: userId}, returning: true});
return (await this.model.findByPk(userId)).dataValues; return updatedUser.dataValues;
} }
async blockUser(userId:string, duration:number):Promise<boolean> { async blockUser(userId:string, duration:number):Promise<boolean> {
const data = await this.model.findByPk(userId); const data = await this.model.findByPk(userId);
@ -74,8 +74,8 @@ export class UserLevelsSvc {
} }
} }
async getActiveUsers() { async getActiveUsers() {
const members = (await this.model.findAll()).sort((a,b)=>b.dataValues.messages-a.dataValues.messages); const members = await this.model.findAll({order: [['messages', 'DESC']], limit: 5});
return members.slice(0, 5); return members;
} }
async messageIncremental(userId:string) { async messageIncremental(userId:string) {
const data = await this.model.findByPk(userId); const data = await this.model.findByPk(userId);
@ -119,7 +119,7 @@ export class UserLevelsSvc {
Logger.console('log', 'Cron:resetAllData', `Counted ${performCountBeforeReset.toLocaleString()} members before reset`); Logger.console('log', 'Cron:resetAllData', `Counted ${performCountBeforeReset.toLocaleString()} members before reset`);
await this.client.dailyMsgs.nukeDays(); await this.client.dailyMsgs.nukeDays();
await this.model.drop().then(async()=>await this.model.sync()); await this.model.truncate();
try { try {
// Send notification to dcServer's logs channel after cronjob is complete. // Send notification to dcServer's logs channel after cronjob is complete.
@ -139,16 +139,12 @@ export class UserLevelsSvc {
// Reset LRSstart to current Epoch and save it to config file // Reset LRSstart to current Epoch and save it to config file
const newEpoch = new Date().getTime(); const newEpoch = new Date().getTime();
if (this.client.config.LRSstart !== newEpoch) {
this.client.config.LRSstart = newEpoch; this.client.config.LRSstart = newEpoch;
const logText = `Resetting LRSstart to \`${newEpoch}\`, saved to config file`; Logger.console('log', 'Cron:resetAllData', `Resetting LRSstart to \`${newEpoch}\`, saved to config file`);
Logger.console('log', 'DailyMsgs', logText);
(this.client.channels.resolve(this.client.config.dcServer.channels.logs) as Discord.TextChannel).send({embeds: [new this.client.embed()
.setColor(this.client.config.embedColorXmas)
.setTitle('Happy New Years! Level System is clean!')
.setDescription(logText)
]}).catch(err=>console.log(err));
writeFileSync('src/config.json', JSON.stringify(this.client.config, null, 2)); writeFileSync('src/config.json', JSON.stringify(this.client.config, null, 2));
Logger.console('log', 'Cron:resetAllData', 'Job completed'); Logger.console('log', 'Cron:resetAllData', 'Job completed');
}
}) })
} }
algorithm = (level:number)=>level*level*15; algorithm = (level:number)=>level*level*15;

View File

@ -1,5 +1,5 @@
import DatabaseServer from '../components/DatabaseServer.js'; import DatabaseServer from '../components/DatabaseServer.js';
import {Model, DataTypes} from 'sequelize'; import {Model, DataTypes} from '@sequelize/core';
class youtubeChannels extends Model { class youtubeChannels extends Model {
declare public ytchannel: string; declare public ytchannel: string;
@ -36,9 +36,8 @@ export class YouTubeChannelsSvc {
} }
query = async(pattern:string)=>await this.model.sequelize.query(pattern); query = async(pattern:string)=>await this.model.sequelize.query(pattern);
async addChannel(YTChannelID:string, DCChannelID:string, DCRole:string) { async addChannel(YTChannelID:string, DCChannelID:string, DCRole:string) {
if (await this.model.findOne({where: {ytchannel: YTChannelID}})) return false; const [_, created] = await this.model.findOrCreate({where: {ytchannel: YTChannelID}, defaults: {dcchannel: DCChannelID, dcrole: DCRole}});
await this.model.create({ytchannel: YTChannelID, dcchannel: DCChannelID, dcrole: DCRole}); return created;
return true;
} }
delChannel = async(YTChannelID:string)=>await this.model.destroy({where: {ytchannel: YTChannelID}}); delChannel = async(YTChannelID:string)=>await this.model.destroy({where: {ytchannel: YTChannelID}});
getChannels = async()=>await this.model.findAll(); getChannels = async()=>await this.model.findAll();

370
yarn.lock
View File

@ -206,6 +206,33 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
dependencies:
"@nodelib/fs.stat": "npm:2.0.5"
run-parallel: "npm:^1.1.9"
checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b
languageName: node
linkType: hard
"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
version: 2.0.5
resolution: "@nodelib/fs.stat@npm:2.0.5"
checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
languageName: node
linkType: hard
"@nodelib/fs.walk@npm:^1.2.3":
version: 1.2.8
resolution: "@nodelib/fs.walk@npm:1.2.8"
dependencies:
"@nodelib/fs.scandir": "npm:2.1.5"
fastq: "npm:^1.6.0"
checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0
languageName: node
linkType: hard
"@octokit/auth-token@npm:^4.0.0": "@octokit/auth-token@npm:^4.0.0":
version: 4.0.0 version: 4.0.0
resolution: "@octokit/auth-token@npm:4.0.0" resolution: "@octokit/auth-token@npm:4.0.0"
@ -429,6 +456,50 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@sequelize/core@npm:7.0.0-alpha.37":
version: 7.0.0-alpha.37
resolution: "@sequelize/core@npm:7.0.0-alpha.37"
dependencies:
"@types/debug": "npm:^4.1.7"
"@types/validator": "npm:^13.7.5"
bnf-parser: "npm:3.1.6"
dayjs: "npm:^1.11.5"
debug: "npm:^4.3.4"
dottie: "npm:^2.0.2"
fast-glob: "npm:^3.2.12"
inflection: "npm:^3.0.0"
lodash: "npm:^4.17.21"
pg-connection-string: "npm:^2.5.0"
pg-hstore: "npm:^2.3.4"
retry-as-promised: "npm:^7.0.3"
semver: "npm:^7.3.7"
sequelize-pool: "npm:^8.0.0"
toposort-class: "npm:^1.0.1"
type-fest: "npm:^3.0.0"
uuid: "npm:^9.0.0"
validator: "npm:^13.7.0"
wkx: "npm:^0.5.0"
peerDependenciesMeta:
ibm_db:
optional: true
mariadb:
optional: true
mysql2:
optional: true
odbc:
optional: true
pg:
optional: true
snowflake-sdk:
optional: true
sqlite3:
optional: true
tedious:
optional: true
checksum: 10/dcaadb079bc5fcc505efbfff18ca8165dae4a24ad9c9f9f99e91474343e27986ceef702a69db0ab5406988b151dfa76f05e536425c08b29e80e10da70bb437fd
languageName: node
linkType: hard
"@toast/tokenservice-client@npm:1.0.12": "@toast/tokenservice-client@npm:1.0.12":
version: 1.0.12 version: 1.0.12
resolution: "@toast/tokenservice-client@npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz" resolution: "@toast/tokenservice-client@npm:1.0.12::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.12%2Ftokenservice-client-1.0.12.tgz"
@ -438,23 +509,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/bluebird@npm:*": "@types/debug@npm:^4.1.7":
version: 3.5.42
resolution: "@types/bluebird@npm:3.5.42"
checksum: 10/09ad60b083f916c7611936d3c70986df8f2eae11e46768ab7901d86bee5b1ca6b00cd9ef8cc0d3761256e2bc4ada3388e5529f71745a6b3d7602e868e3530310
languageName: node
linkType: hard
"@types/continuation-local-storage@npm:*":
version: 3.2.7
resolution: "@types/continuation-local-storage@npm:3.2.7"
dependencies:
"@types/node": "npm:*"
checksum: 10/1f272b53bc56774773b7cbd6019ae26843599fb9073cb70c3dda13f8bfac5eabb6c8bf33f548a37be9c6d772eb9a4ab4399bc7d25bc82588655f51f572df79f3
languageName: node
linkType: hard
"@types/debug@npm:^4.1.8":
version: 4.1.12 version: 4.1.12
resolution: "@types/debug@npm:4.1.12" resolution: "@types/debug@npm:4.1.12"
dependencies: dependencies:
@ -463,13 +518,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/lodash@npm:*":
version: 4.14.201
resolution: "@types/lodash@npm:4.14.201"
checksum: 10/9b56a2a650880045343055e63c7ad73df97188453aa3de8375dc97670748d467f6f4a3b59d689f4ae45dd947d4c0b3ecd873763910336238736056dce20cfe56
languageName: node
linkType: hard
"@types/ms@npm:*, @types/ms@npm:0.7.34": "@types/ms@npm:*, @types/ms@npm:0.7.34":
version: 0.7.34 version: 0.7.34
resolution: "@types/ms@npm:0.7.34" resolution: "@types/ms@npm:0.7.34"
@ -504,22 +552,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/sequelize@npm:4.28.20": "@types/validator@npm:^13.7.5":
version: 4.28.20 version: 13.11.9
resolution: "@types/sequelize@npm:4.28.20" resolution: "@types/validator@npm:13.11.9"
dependencies: checksum: 10/2d397c69293cc726e0cf1b4c74c563ca4e459b00f216f3ff0ac184c9648103be27169e8c67f85be9c6e7a3fcbb149c6add66a2547b185a1b25aa79e4b61261bd
"@types/bluebird": "npm:*"
"@types/continuation-local-storage": "npm:*"
"@types/lodash": "npm:*"
"@types/validator": "npm:*"
checksum: 10/8b3faec2e650ee299ae8a8a06bab7bd928131938ba34c7faa1d5c099682d6649e7aa68b0540a3e4883db7e3bc10d043ae3f23624d11b42a60f6bcbd40800ffac
languageName: node
linkType: hard
"@types/validator@npm:*, @types/validator@npm:^13.7.17":
version: 13.11.6
resolution: "@types/validator@npm:13.11.6"
checksum: 10/65991ba60029361b279009efb16cf08a576002742c3a5b84e50e19f74083dafb51cdc697ad54e94befb298c46a468b554844552b9ce78663a4cf7e2030a907f6
languageName: node languageName: node
linkType: hard linkType: hard
@ -553,6 +589,22 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"bnf-parser@npm:3.1.6":
version: 3.1.6
resolution: "bnf-parser@npm:3.1.6"
checksum: 10/caaf7078e2a5a9ab97f7f0b65eb1d034b5f5b9f80b189fee9ff3b9aa36dad79820b12f978eb079a7c8b3da37a7bd65b763313deee5058fc76c5d6900d2e3b981
languageName: node
linkType: hard
"braces@npm:^3.0.2":
version: 3.0.2
resolution: "braces@npm:3.0.2"
dependencies:
fill-range: "npm:^7.0.1"
checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1
languageName: node
linkType: hard
"buffer-writer@npm:2.0.0": "buffer-writer@npm:2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "buffer-writer@npm:2.0.0" resolution: "buffer-writer@npm:2.0.0"
@ -573,12 +625,12 @@ __metadata:
dependencies: dependencies:
"@napi-rs/canvas": "npm:0.1.45" "@napi-rs/canvas": "npm:0.1.45"
"@octokit/rest": "npm:20.0.2" "@octokit/rest": "npm:20.0.2"
"@sequelize/core": "npm:7.0.0-alpha.37"
"@toast/tokenservice-client": "npm:1.0.12" "@toast/tokenservice-client": "npm:1.0.12"
"@types/ms": "npm:0.7.34" "@types/ms": "npm:0.7.34"
"@types/node": "npm:20.11.17" "@types/node": "npm:20.11.17"
"@types/node-cron": "npm:3.0.11" "@types/node-cron": "npm:3.0.11"
"@types/pg": "npm:8.11.0" "@types/pg": "npm:8.11.0"
"@types/sequelize": "npm:4.28.20"
ansi-colors: "npm:4.1.3" ansi-colors: "npm:4.1.3"
dayjs: "npm:1.11.10" dayjs: "npm:1.11.10"
discord.js: "npm:14.14.1" discord.js: "npm:14.14.1"
@ -587,8 +639,8 @@ __metadata:
node-cron: "npm:3.0.3" node-cron: "npm:3.0.3"
pg: "npm:8.11.3" pg: "npm:8.11.3"
pg-hstore: "npm:2.3.4" pg-hstore: "npm:2.3.4"
postgres-array: "npm:3.0.2"
redis: "npm:4.6.13" redis: "npm:4.6.13"
sequelize: "npm:6.37.0"
simple-git: "npm:3.22.0" simple-git: "npm:3.22.0"
systeminformation: "npm:5.21.24" systeminformation: "npm:5.21.24"
typescript: "npm:5.3.3" typescript: "npm:5.3.3"
@ -596,7 +648,7 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"dayjs@npm:1.11.10": "dayjs@npm:1.11.10, dayjs@npm:^1.11.5":
version: 1.11.10 version: 1.11.10
resolution: "dayjs@npm:1.11.10" resolution: "dayjs@npm:1.11.10"
checksum: 10/27e8f5bc01c0a76f36c656e62ab7f08c2e7b040b09e613cd4844abf03fb258e0350f0a83b02c887b84d771c1f11e092deda0beef8c6df2a1afbc3f6c1fade279 checksum: 10/27e8f5bc01c0a76f36c656e62ab7f08c2e7b040b09e613cd4844abf03fb258e0350f0a83b02c887b84d771c1f11e092deda0beef8c6df2a1afbc3f6c1fade279
@ -651,7 +703,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"dottie@npm:^2.0.6": "dottie@npm:^2.0.2":
version: 2.0.6 version: 2.0.6
resolution: "dottie@npm:2.0.6" resolution: "dottie@npm:2.0.6"
checksum: 10/698731cfa2c1b530ba3491fa864dc572678a2a6de801f25912e2e4d7d4669ae013b696711786016bf41c7b6f98057c678503f14550bb171b3f70cdadffb9218f checksum: 10/698731cfa2c1b530ba3491fa864dc572678a2a6de801f25912e2e4d7d4669ae013b696711786016bf41c7b6f98057c678503f14550bb171b3f70cdadffb9218f
@ -665,6 +717,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"fast-glob@npm:^3.2.12":
version: 3.3.2
resolution: "fast-glob@npm:3.3.2"
dependencies:
"@nodelib/fs.stat": "npm:^2.0.2"
"@nodelib/fs.walk": "npm:^1.2.3"
glob-parent: "npm:^5.1.2"
merge2: "npm:^1.3.0"
micromatch: "npm:^4.0.4"
checksum: 10/222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df
languageName: node
linkType: hard
"fast-xml-parser@npm:4.3.4": "fast-xml-parser@npm:4.3.4":
version: 4.3.4 version: 4.3.4
resolution: "fast-xml-parser@npm:4.3.4" resolution: "fast-xml-parser@npm:4.3.4"
@ -676,6 +741,24 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"fastq@npm:^1.6.0":
version: 1.17.1
resolution: "fastq@npm:1.17.1"
dependencies:
reusify: "npm:^1.0.4"
checksum: 10/a443180068b527dd7b3a63dc7f2a47ceca2f3e97b9c00a1efe5538757e6cc4056a3526df94308075d7727561baf09ebaa5b67da8dcbddb913a021c5ae69d1f69
languageName: node
linkType: hard
"fill-range@npm:^7.0.1":
version: 7.0.1
resolution: "fill-range@npm:7.0.1"
dependencies:
to-regex-range: "npm:^5.0.1"
checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429
languageName: node
linkType: hard
"generic-pool@npm:3.9.0": "generic-pool@npm:3.9.0":
version: 3.9.0 version: 3.9.0
resolution: "generic-pool@npm:3.9.0" resolution: "generic-pool@npm:3.9.0"
@ -683,10 +766,42 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"inflection@npm:^1.13.4": "glob-parent@npm:^5.1.2":
version: 1.13.4 version: 5.1.2
resolution: "inflection@npm:1.13.4" resolution: "glob-parent@npm:5.1.2"
checksum: 10/a0cc1b105ccbda9607b5d1610b5c7aa35456ca06b7f3573a47c677e1f829052859cacc36601c3c07de89cb756616a440814ef2d190a6ae70398e6aa6efc2a547 dependencies:
is-glob: "npm:^4.0.1"
checksum: 10/32cd106ce8c0d83731966d31517adb766d02c3812de49c30cfe0675c7c0ae6630c11214c54a5ae67aca882cf738d27fd7768f21aa19118b9245950554be07247
languageName: node
linkType: hard
"inflection@npm:^3.0.0":
version: 3.0.0
resolution: "inflection@npm:3.0.0"
checksum: 10/e8aae6abb872a8aa19184a1b84470fff7120806329c78011befcf50bce04a7b0d65012ac373f2cc5caeaaf241874c7ae20a26038ff7dbe0cdae0b863f25b5e02
languageName: node
linkType: hard
"is-extglob@npm:^2.1.1":
version: 2.1.1
resolution: "is-extglob@npm:2.1.1"
checksum: 10/df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85
languageName: node
linkType: hard
"is-glob@npm:^4.0.1":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
is-extglob: "npm:^2.1.1"
checksum: 10/3ed74f2b0cdf4f401f38edb0442ddfde3092d79d7d35c9919c86641efdbcbb32e45aa3c0f70ce5eecc946896cd5a0f26e4188b9f2b881876f7cb6c505b82da11
languageName: node
linkType: hard
"is-number@npm:^7.0.0":
version: 7.0.0
resolution: "is-number@npm:7.0.0"
checksum: 10/6a6c3383f68afa1e05b286af866017c78f1226d43ac8cb064e115ff9ed85eb33f5c4f7216c96a71e4dfea289ef52c5da3aef5bbfade8ffe47a0465d70c0c8e86
languageName: node languageName: node
linkType: hard linkType: hard
@ -727,19 +842,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"moment-timezone@npm:^0.5.43": "merge2@npm:^1.3.0":
version: 0.5.43 version: 1.4.1
resolution: "moment-timezone@npm:0.5.43" resolution: "merge2@npm:1.4.1"
dependencies: checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
moment: "npm:^2.29.4"
checksum: 10/f8b66f8562960d6c2ec90ea7e2ca8c10bd5f5cf5ced2eaaac83deb1011b145d0154e8d77018cf5e913d489898a343122a3d815768809653ab039306dce1db1eb
languageName: node languageName: node
linkType: hard linkType: hard
"moment@npm:^2.29.4": "micromatch@npm:^4.0.4":
version: 2.29.4 version: 4.0.5
resolution: "moment@npm:2.29.4" resolution: "micromatch@npm:4.0.5"
checksum: 10/157c5af5a0ba8196e577bc67feb583303191d21ba1f7f2af30b3b40d4c63a64d505ba402be2a1454832082fac6be69db1e0d186c3279dae191e6634b0c33705c dependencies:
braces: "npm:^3.0.2"
picomatch: "npm:^2.3.1"
checksum: 10/a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2
languageName: node languageName: node
linkType: hard linkType: hard
@ -796,14 +912,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"pg-connection-string@npm:^2.6.1, pg-connection-string@npm:^2.6.2": "pg-connection-string@npm:^2.5.0, pg-connection-string@npm:^2.6.2":
version: 2.6.2 version: 2.6.2
resolution: "pg-connection-string@npm:2.6.2" resolution: "pg-connection-string@npm:2.6.2"
checksum: 10/22265882c3b6f2320785378d0760b051294a684989163d5a1cde4009e64e84448d7bf67d9a7b9e7f69440c3ee9e2212f9aa10dd17ad6773f6143c6020cebbcb5 checksum: 10/22265882c3b6f2320785378d0760b051294a684989163d5a1cde4009e64e84448d7bf67d9a7b9e7f69440c3ee9e2212f9aa10dd17ad6773f6143c6020cebbcb5
languageName: node languageName: node
linkType: hard linkType: hard
"pg-hstore@npm:2.3.4": "pg-hstore@npm:2.3.4, pg-hstore@npm:^2.3.4":
version: 2.3.4 version: 2.3.4
resolution: "pg-hstore@npm:2.3.4" resolution: "pg-hstore@npm:2.3.4"
dependencies: dependencies:
@ -903,6 +1019,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"picomatch@npm:^2.3.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc
languageName: node
linkType: hard
"postgres-array@npm:3.0.2, postgres-array@npm:~3.0.1":
version: 3.0.2
resolution: "postgres-array@npm:3.0.2"
checksum: 10/0159517e4e5f263bf9e324f0c4d3c10244a294021f2b5980abc8c23afdb965370a7fc0c82012fce4d28e83186ad089b6476b05fcef6c88f8e43e37a3a2fa0ad5
languageName: node
linkType: hard
"postgres-array@npm:~2.0.0": "postgres-array@npm:~2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "postgres-array@npm:2.0.0" resolution: "postgres-array@npm:2.0.0"
@ -910,13 +1040,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"postgres-array@npm:~3.0.1":
version: 3.0.2
resolution: "postgres-array@npm:3.0.2"
checksum: 10/0159517e4e5f263bf9e324f0c4d3c10244a294021f2b5980abc8c23afdb965370a7fc0c82012fce4d28e83186ad089b6476b05fcef6c88f8e43e37a3a2fa0ad5
languageName: node
linkType: hard
"postgres-bytea@npm:~1.0.0": "postgres-bytea@npm:~1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "postgres-bytea@npm:1.0.0" resolution: "postgres-bytea@npm:1.0.0"
@ -970,6 +1093,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"queue-microtask@npm:^1.2.2":
version: 1.2.3
resolution: "queue-microtask@npm:1.2.3"
checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b
languageName: node
linkType: hard
"redis@npm:4.6.13": "redis@npm:4.6.13":
version: 4.6.13 version: 4.6.13
resolution: "redis@npm:4.6.13" resolution: "redis@npm:4.6.13"
@ -984,71 +1114,44 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"retry-as-promised@npm:^7.0.4": "retry-as-promised@npm:^7.0.3":
version: 7.0.4 version: 7.0.4
resolution: "retry-as-promised@npm:7.0.4" resolution: "retry-as-promised@npm:7.0.4"
checksum: 10/cd9fd20e990c6980a2979348fbc198aa4a065f03242c1cd7782372da7054253927e0803291c843db07255a38d255936cc0f9da55bf826c9f75443a9dedb8bf4b checksum: 10/cd9fd20e990c6980a2979348fbc198aa4a065f03242c1cd7782372da7054253927e0803291c843db07255a38d255936cc0f9da55bf826c9f75443a9dedb8bf4b
languageName: node languageName: node
linkType: hard linkType: hard
"semver@npm:^7.5.4": "reusify@npm:^1.0.4":
version: 7.5.4 version: 1.0.4
resolution: "semver@npm:7.5.4" resolution: "reusify@npm:1.0.4"
checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb
languageName: node
linkType: hard
"run-parallel@npm:^1.1.9":
version: 1.2.0
resolution: "run-parallel@npm:1.2.0"
dependencies:
queue-microtask: "npm:^1.2.2"
checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d
languageName: node
linkType: hard
"semver@npm:^7.3.7":
version: 7.6.0
resolution: "semver@npm:7.6.0"
dependencies: dependencies:
lru-cache: "npm:^6.0.0" lru-cache: "npm:^6.0.0"
bin: bin:
semver: bin/semver.js semver: bin/semver.js
checksum: 10/985dec0d372370229a262c737063860fabd4a1c730662c1ea3200a2f649117761a42184c96df62a0e885e76fbd5dace41087d6c1ac0351b13c0df5d6bcb1b5ac checksum: 10/1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535
languageName: node languageName: node
linkType: hard linkType: hard
"sequelize-pool@npm:^7.1.0": "sequelize-pool@npm:^8.0.0":
version: 7.1.0 version: 8.0.0
resolution: "sequelize-pool@npm:7.1.0" resolution: "sequelize-pool@npm:8.0.0"
checksum: 10/eeb0837451afb245cf3aece5d93c50ef051bd7f4397c4e578f8cbf41ebf485e0acd887c1aa3f4394b80dc874229a32ce5aafeaa2f00ec3ecc5dfcc518bd7bf7e checksum: 10/c449ec2f3444f75372fde505bf26a22724ee7336192fd7937e546759bca19256fefd39970230b4eb11f1dcb106607dae7085e14e3dc8e3c1a90d30f7874de204
languageName: node
linkType: hard
"sequelize@npm:6.37.0":
version: 6.37.0
resolution: "sequelize@npm:6.37.0"
dependencies:
"@types/debug": "npm:^4.1.8"
"@types/validator": "npm:^13.7.17"
debug: "npm:^4.3.4"
dottie: "npm:^2.0.6"
inflection: "npm:^1.13.4"
lodash: "npm:^4.17.21"
moment: "npm:^2.29.4"
moment-timezone: "npm:^0.5.43"
pg-connection-string: "npm:^2.6.1"
retry-as-promised: "npm:^7.0.4"
semver: "npm:^7.5.4"
sequelize-pool: "npm:^7.1.0"
toposort-class: "npm:^1.0.1"
uuid: "npm:^8.3.2"
validator: "npm:^13.9.0"
wkx: "npm:^0.5.0"
peerDependenciesMeta:
ibm_db:
optional: true
mariadb:
optional: true
mysql2:
optional: true
oracledb:
optional: true
pg:
optional: true
pg-hstore:
optional: true
snowflake-sdk:
optional: true
sqlite3:
optional: true
tedious:
optional: true
checksum: 10/3eb3c53e487edb521f12ffdfffb2a5b22adf070378a94bbce4baa63998f36f07a13279fa26a37a6950b588a405addf5d6169814dd140315b337ae4ee88303e0c
languageName: node languageName: node
linkType: hard linkType: hard
@ -1087,6 +1190,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
dependencies:
is-number: "npm:^7.0.0"
checksum: 10/10dda13571e1f5ad37546827e9b6d4252d2e0bc176c24a101252153ef435d83696e2557fe128c4678e4e78f5f01e83711c703eef9814eb12dab028580d45980a
languageName: node
linkType: hard
"toposort-class@npm:^1.0.1": "toposort-class@npm:^1.0.1":
version: 1.0.1 version: 1.0.1
resolution: "toposort-class@npm:1.0.1" resolution: "toposort-class@npm:1.0.1"
@ -1108,6 +1220,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"type-fest@npm:^3.0.0":
version: 3.13.1
resolution: "type-fest@npm:3.13.1"
checksum: 10/9a8a2359ada34c9b3affcaf3a8f73ee14c52779e89950db337ce66fb74c3399776c697c99f2532e9b16e10e61cfdba3b1c19daffb93b338b742f0acd0117ce12
languageName: node
linkType: hard
"typescript@npm:5.3.3": "typescript@npm:5.3.3":
version: 5.3.3 version: 5.3.3
resolution: "typescript@npm:5.3.3" resolution: "typescript@npm:5.3.3"
@ -1167,7 +1286,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"uuid@npm:8.3.2, uuid@npm:^8.3.2": "uuid@npm:8.3.2":
version: 8.3.2 version: 8.3.2
resolution: "uuid@npm:8.3.2" resolution: "uuid@npm:8.3.2"
bin: bin:
@ -1176,7 +1295,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"validator@npm:^13.9.0": "uuid@npm:^9.0.0":
version: 9.0.1
resolution: "uuid@npm:9.0.1"
bin:
uuid: dist/bin/uuid
checksum: 10/9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2
languageName: node
linkType: hard
"validator@npm:^13.7.0":
version: 13.11.0 version: 13.11.0
resolution: "validator@npm:13.11.0" resolution: "validator@npm:13.11.0"
checksum: 10/4bf094641eb71729c06a42d669840e7189597ba655a8264adabac9bf03f95cd6fde5fbc894b0a13ee861bd4a852f56d2afdc9391aeaeb3fc0f9633a974140e12 checksum: 10/4bf094641eb71729c06a42d669840e7189597ba655a8264adabac9bf03f95cd6fde5fbc894b0a13ee861bd4a852f56d2afdc9391aeaeb3fc0f9633a974140e12