Recipe sharing platform built on AT Protocol
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Sessions now persist to database

+1444 -5
+5 -3
app.js
··· 2 2 const express = require("express"); 3 3 const session = require("express-session"); 4 4 const path = require("path"); 5 + const TursoSessionStore = require("./config/session-store"); 5 6 6 7 const app = express(); 7 8 const PORT = process.env.PORT || 3000; ··· 15 16 app.use(express.urlencoded({ extended: true })); 16 17 app.use(express.static(path.join(__dirname, "public"))); 17 18 18 - // Session configuration 19 + // Session configuration with Turso store 19 20 app.use( 20 21 session({ 22 + store: new TursoSessionStore(), 21 23 secret: process.env.SESSION_SECRET, 22 24 resave: false, 23 25 saveUninitialized: false, 24 26 cookie: { 25 27 secure: process.env.NODE_ENV === "production", 26 28 httpOnly: true, 27 - maxAge: 24 * 60 * 60 * 1000, // 24 hours 29 + maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days 28 30 }, 29 31 }), 30 32 ); 31 33 34 + // Routes 32 35 app.use("/", require("./routes/index")); 33 36 app.use("/auth", require("./routes/auth")); 34 37 app.use("/recipe", require("./routes/recipe")); 35 - // app.use('/user', require('./routes/user')); 36 38 37 39 // 404 handler 38 40 app.use((req, res) => {
+8
config/schema.sql
··· 26 26 FOREIGN KEY (did) REFERENCES users(did) 27 27 ); 28 28 29 + -- Sessions table 30 + CREATE TABLE IF NOT EXISTS sessions ( 31 + sid TEXT PRIMARY KEY, 32 + sess TEXT NOT NULL, 33 + expired INTEGER NOT NULL 34 + ); 35 + 29 36 -- Index for faster lookups 30 37 CREATE INDEX IF NOT EXISTS idx_recipes_did ON recipes(did); 31 38 CREATE INDEX IF NOT EXISTS idx_recipes_type ON recipes(type); 32 39 CREATE INDEX IF NOT EXISTS idx_recipes_created ON recipes(created_at DESC); 40 + CREATE INDEX IF NOT EXISTS idx_sessions_expired ON sessions(expired);
+96
config/session-store.js
··· 1 + const session = require("express-session"); 2 + const db = require("./database"); 3 + 4 + class TursoSessionStore extends session.Store { 5 + constructor() { 6 + super(); 7 + this.db = db; 8 + 9 + // Clean up expired sessions every hour 10 + setInterval(() => this.cleanup(), 3600000); 11 + } 12 + 13 + // Get a session 14 + async get(sid, callback) { 15 + try { 16 + const result = await this.db.execute({ 17 + sql: "SELECT sess FROM sessions WHERE sid = ? AND expired > ?", 18 + args: [sid, Date.now()], 19 + }); 20 + 21 + if (result.rows.length === 0) { 22 + return callback(null, null); 23 + } 24 + 25 + const session = JSON.parse(result.rows[0].sess); 26 + callback(null, session); 27 + } catch (error) { 28 + callback(error); 29 + } 30 + } 31 + 32 + // Save/update a session 33 + async set(sid, session, callback) { 34 + try { 35 + const maxAge = session.cookie.maxAge || 86400000; // 24 hours default 36 + const expired = Date.now() + maxAge; 37 + const sess = JSON.stringify(session); 38 + 39 + await this.db.execute({ 40 + sql: `INSERT INTO sessions (sid, sess, expired) 41 + VALUES (?, ?, ?) 42 + ON CONFLICT(sid) DO UPDATE SET sess = ?, expired = ?`, 43 + args: [sid, sess, expired, sess, expired], 44 + }); 45 + 46 + callback && callback(null); 47 + } catch (error) { 48 + callback && callback(error); 49 + } 50 + } 51 + 52 + // Destroy a session 53 + async destroy(sid, callback) { 54 + try { 55 + await this.db.execute({ 56 + sql: "DELETE FROM sessions WHERE sid = ?", 57 + args: [sid], 58 + }); 59 + 60 + callback && callback(null); 61 + } catch (error) { 62 + callback && callback(error); 63 + } 64 + } 65 + 66 + // Cleanup expired sessions 67 + async cleanup() { 68 + try { 69 + await this.db.execute({ 70 + sql: "DELETE FROM sessions WHERE expired < ?", 71 + args: [Date.now()], 72 + }); 73 + } catch (error) { 74 + console.error("Session cleanup error:", error); 75 + } 76 + } 77 + 78 + // Touch a session (update expiry) 79 + async touch(sid, session, callback) { 80 + try { 81 + const maxAge = session.cookie.maxAge || 2592000000; // 30 days 82 + const expired = Date.now() + maxAge; 83 + 84 + await this.db.execute({ 85 + sql: "UPDATE sessions SET expired = ? WHERE sid = ?", 86 + args: [expired, sid], 87 + }); 88 + 89 + callback && callback(null); 90 + } catch (error) { 91 + callback && callback(error); 92 + } 93 + } 94 + } 95 + 96 + module.exports = TursoSessionStore;
+1334 -2
package-lock.json
··· 12 12 "@atproto/api": "^0.18.18", 13 13 "@atproto/oauth-client-node": "^0.3.16", 14 14 "@libsql/client": "^0.17.0", 15 + "connect-sqlite3": "^0.9.16", 15 16 "dotenv": "^17.2.3", 16 17 "ejs": "^4.0.1", 17 18 "express": "^5.2.1", ··· 300 301 "zod": "^3.23.8" 301 302 } 302 303 }, 304 + "node_modules/@gar/promisify": { 305 + "version": "1.1.3", 306 + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", 307 + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", 308 + "license": "MIT", 309 + "optional": true 310 + }, 303 311 "node_modules/@libsql/client": { 304 312 "version": "0.17.0", 305 313 "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.17.0.tgz", ··· 467 475 "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==", 468 476 "license": "MIT" 469 477 }, 478 + "node_modules/@npmcli/fs": { 479 + "version": "1.1.1", 480 + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", 481 + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", 482 + "license": "ISC", 483 + "optional": true, 484 + "dependencies": { 485 + "@gar/promisify": "^1.0.1", 486 + "semver": "^7.3.5" 487 + } 488 + }, 489 + "node_modules/@npmcli/move-file": { 490 + "version": "1.1.2", 491 + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", 492 + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", 493 + "deprecated": "This functionality has been moved to @npmcli/fs", 494 + "license": "MIT", 495 + "optional": true, 496 + "dependencies": { 497 + "mkdirp": "^1.0.4", 498 + "rimraf": "^3.0.2" 499 + }, 500 + "engines": { 501 + "node": ">=10" 502 + } 503 + }, 504 + "node_modules/@tootallnate/once": { 505 + "version": "1.1.2", 506 + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 507 + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 508 + "license": "MIT", 509 + "optional": true, 510 + "engines": { 511 + "node": ">= 6" 512 + } 513 + }, 470 514 "node_modules/@types/node": { 471 515 "version": "25.1.0", 472 516 "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", ··· 485 529 "@types/node": "*" 486 530 } 487 531 }, 532 + "node_modules/abbrev": { 533 + "version": "1.1.1", 534 + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 535 + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 536 + "license": "ISC", 537 + "optional": true 538 + }, 488 539 "node_modules/accepts": { 489 540 "version": "2.0.0", 490 541 "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", ··· 498 549 "node": ">= 0.6" 499 550 } 500 551 }, 552 + "node_modules/agent-base": { 553 + "version": "6.0.2", 554 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 555 + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 556 + "license": "MIT", 557 + "optional": true, 558 + "dependencies": { 559 + "debug": "4" 560 + }, 561 + "engines": { 562 + "node": ">= 6.0.0" 563 + } 564 + }, 565 + "node_modules/agentkeepalive": { 566 + "version": "4.6.0", 567 + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", 568 + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", 569 + "license": "MIT", 570 + "optional": true, 571 + "dependencies": { 572 + "humanize-ms": "^1.2.1" 573 + }, 574 + "engines": { 575 + "node": ">= 8.0.0" 576 + } 577 + }, 578 + "node_modules/aggregate-error": { 579 + "version": "3.1.0", 580 + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 581 + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 582 + "license": "MIT", 583 + "optional": true, 584 + "dependencies": { 585 + "clean-stack": "^2.0.0", 586 + "indent-string": "^4.0.0" 587 + }, 588 + "engines": { 589 + "node": ">=8" 590 + } 591 + }, 592 + "node_modules/ansi-regex": { 593 + "version": "5.0.1", 594 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 595 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 596 + "license": "MIT", 597 + "optional": true, 598 + "engines": { 599 + "node": ">=8" 600 + } 601 + }, 501 602 "node_modules/anymatch": { 502 603 "version": "3.1.3", 503 604 "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", ··· 512 613 "node": ">= 8" 513 614 } 514 615 }, 616 + "node_modules/aproba": { 617 + "version": "2.1.0", 618 + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", 619 + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", 620 + "license": "ISC", 621 + "optional": true 622 + }, 623 + "node_modules/are-we-there-yet": { 624 + "version": "3.0.1", 625 + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", 626 + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", 627 + "deprecated": "This package is no longer supported.", 628 + "license": "ISC", 629 + "optional": true, 630 + "dependencies": { 631 + "delegates": "^1.0.0", 632 + "readable-stream": "^3.6.0" 633 + }, 634 + "engines": { 635 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 636 + } 637 + }, 515 638 "node_modules/async": { 516 639 "version": "3.2.6", 517 640 "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", ··· 530 653 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 531 654 "license": "MIT" 532 655 }, 656 + "node_modules/base64-js": { 657 + "version": "1.5.1", 658 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 659 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 660 + "funding": [ 661 + { 662 + "type": "github", 663 + "url": "https://github.com/sponsors/feross" 664 + }, 665 + { 666 + "type": "patreon", 667 + "url": "https://www.patreon.com/feross" 668 + }, 669 + { 670 + "type": "consulting", 671 + "url": "https://feross.org/support" 672 + } 673 + ], 674 + "license": "MIT" 675 + }, 533 676 "node_modules/binary-extensions": { 534 677 "version": "2.3.0", 535 678 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", ··· 543 686 "url": "https://github.com/sponsors/sindresorhus" 544 687 } 545 688 }, 689 + "node_modules/bindings": { 690 + "version": "1.5.0", 691 + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 692 + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 693 + "license": "MIT", 694 + "dependencies": { 695 + "file-uri-to-path": "1.0.0" 696 + } 697 + }, 698 + "node_modules/bl": { 699 + "version": "4.1.0", 700 + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 701 + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 702 + "license": "MIT", 703 + "dependencies": { 704 + "buffer": "^5.5.0", 705 + "inherits": "^2.0.4", 706 + "readable-stream": "^3.4.0" 707 + } 708 + }, 546 709 "node_modules/body-parser": { 547 710 "version": "2.2.2", 548 711 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", ··· 589 752 "node": ">=8" 590 753 } 591 754 }, 755 + "node_modules/buffer": { 756 + "version": "5.7.1", 757 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 758 + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 759 + "funding": [ 760 + { 761 + "type": "github", 762 + "url": "https://github.com/sponsors/feross" 763 + }, 764 + { 765 + "type": "patreon", 766 + "url": "https://www.patreon.com/feross" 767 + }, 768 + { 769 + "type": "consulting", 770 + "url": "https://feross.org/support" 771 + } 772 + ], 773 + "license": "MIT", 774 + "dependencies": { 775 + "base64-js": "^1.3.1", 776 + "ieee754": "^1.1.13" 777 + } 778 + }, 592 779 "node_modules/bytes": { 593 780 "version": "3.1.2", 594 781 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", ··· 598 785 "node": ">= 0.8" 599 786 } 600 787 }, 788 + "node_modules/cacache": { 789 + "version": "15.3.0", 790 + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", 791 + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", 792 + "license": "ISC", 793 + "optional": true, 794 + "dependencies": { 795 + "@npmcli/fs": "^1.0.0", 796 + "@npmcli/move-file": "^1.0.1", 797 + "chownr": "^2.0.0", 798 + "fs-minipass": "^2.0.0", 799 + "glob": "^7.1.4", 800 + "infer-owner": "^1.0.4", 801 + "lru-cache": "^6.0.0", 802 + "minipass": "^3.1.1", 803 + "minipass-collect": "^1.0.2", 804 + "minipass-flush": "^1.0.5", 805 + "minipass-pipeline": "^1.2.2", 806 + "mkdirp": "^1.0.3", 807 + "p-map": "^4.0.0", 808 + "promise-inflight": "^1.0.1", 809 + "rimraf": "^3.0.2", 810 + "ssri": "^8.0.1", 811 + "tar": "^6.0.2", 812 + "unique-filename": "^1.1.1" 813 + }, 814 + "engines": { 815 + "node": ">= 10" 816 + } 817 + }, 818 + "node_modules/cacache/node_modules/lru-cache": { 819 + "version": "6.0.0", 820 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 821 + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 822 + "license": "ISC", 823 + "optional": true, 824 + "dependencies": { 825 + "yallist": "^4.0.0" 826 + }, 827 + "engines": { 828 + "node": ">=10" 829 + } 830 + }, 601 831 "node_modules/call-bind-apply-helpers": { 602 832 "version": "1.0.2", 603 833 "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", ··· 652 882 "fsevents": "~2.3.2" 653 883 } 654 884 }, 885 + "node_modules/chownr": { 886 + "version": "2.0.0", 887 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 888 + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 889 + "license": "ISC", 890 + "engines": { 891 + "node": ">=10" 892 + } 893 + }, 894 + "node_modules/clean-stack": { 895 + "version": "2.2.0", 896 + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 897 + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 898 + "license": "MIT", 899 + "optional": true, 900 + "engines": { 901 + "node": ">=6" 902 + } 903 + }, 904 + "node_modules/color-support": { 905 + "version": "1.1.3", 906 + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 907 + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 908 + "license": "ISC", 909 + "optional": true, 910 + "bin": { 911 + "color-support": "bin.js" 912 + } 913 + }, 655 914 "node_modules/concat-map": { 656 915 "version": "0.0.1", 657 916 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 658 917 "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 659 - "dev": true, 918 + "devOptional": true, 660 919 "license": "MIT" 920 + }, 921 + "node_modules/connect-sqlite3": { 922 + "version": "0.9.16", 923 + "resolved": "https://registry.npmjs.org/connect-sqlite3/-/connect-sqlite3-0.9.16.tgz", 924 + "integrity": "sha512-2gqo0QmcBBL8p8+eqpBETn7RgM/PaoKvpQGl8PfjEgwlr0VuMYNMxRJRrRCo3KR3fxMYeSsCw2tGNG0JKN9Nvg==", 925 + "dependencies": { 926 + "sqlite3": "^5.0.2" 927 + }, 928 + "engines": { 929 + "node": ">=0.4.x" 930 + } 931 + }, 932 + "node_modules/console-control-strings": { 933 + "version": "1.1.0", 934 + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 935 + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", 936 + "license": "ISC", 937 + "optional": true 661 938 }, 662 939 "node_modules/content-disposition": { 663 940 "version": "1.0.1", ··· 765 1042 } 766 1043 } 767 1044 }, 1045 + "node_modules/decompress-response": { 1046 + "version": "6.0.0", 1047 + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 1048 + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 1049 + "license": "MIT", 1050 + "dependencies": { 1051 + "mimic-response": "^3.1.0" 1052 + }, 1053 + "engines": { 1054 + "node": ">=10" 1055 + }, 1056 + "funding": { 1057 + "url": "https://github.com/sponsors/sindresorhus" 1058 + } 1059 + }, 1060 + "node_modules/deep-extend": { 1061 + "version": "0.6.0", 1062 + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1063 + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1064 + "license": "MIT", 1065 + "engines": { 1066 + "node": ">=4.0.0" 1067 + } 1068 + }, 1069 + "node_modules/delegates": { 1070 + "version": "1.0.0", 1071 + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 1072 + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", 1073 + "license": "MIT", 1074 + "optional": true 1075 + }, 768 1076 "node_modules/depd": { 769 1077 "version": "2.0.0", 770 1078 "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", ··· 830 1138 "node": ">=0.12.18" 831 1139 } 832 1140 }, 1141 + "node_modules/emoji-regex": { 1142 + "version": "8.0.0", 1143 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1144 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1145 + "license": "MIT", 1146 + "optional": true 1147 + }, 833 1148 "node_modules/encodeurl": { 834 1149 "version": "2.0.0", 835 1150 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", ··· 839 1154 "node": ">= 0.8" 840 1155 } 841 1156 }, 1157 + "node_modules/end-of-stream": { 1158 + "version": "1.4.5", 1159 + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", 1160 + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", 1161 + "license": "MIT", 1162 + "dependencies": { 1163 + "once": "^1.4.0" 1164 + } 1165 + }, 1166 + "node_modules/env-paths": { 1167 + "version": "2.2.1", 1168 + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 1169 + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 1170 + "license": "MIT", 1171 + "optional": true, 1172 + "engines": { 1173 + "node": ">=6" 1174 + } 1175 + }, 1176 + "node_modules/err-code": { 1177 + "version": "2.0.3", 1178 + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", 1179 + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", 1180 + "license": "MIT", 1181 + "optional": true 1182 + }, 842 1183 "node_modules/es-define-property": { 843 1184 "version": "1.0.1", 844 1185 "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", ··· 882 1223 "license": "MIT", 883 1224 "engines": { 884 1225 "node": ">= 0.6" 1226 + } 1227 + }, 1228 + "node_modules/expand-template": { 1229 + "version": "2.0.3", 1230 + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 1231 + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 1232 + "license": "(MIT OR WTFPL)", 1233 + "engines": { 1234 + "node": ">=6" 885 1235 } 886 1236 }, 887 1237 "node_modules/express": { ··· 994 1344 "node": "^12.20 || >= 14.13" 995 1345 } 996 1346 }, 1347 + "node_modules/file-uri-to-path": { 1348 + "version": "1.0.0", 1349 + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 1350 + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", 1351 + "license": "MIT" 1352 + }, 997 1353 "node_modules/filelist": { 998 1354 "version": "1.0.4", 999 1355 "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", ··· 1067 1423 "node": ">= 0.8" 1068 1424 } 1069 1425 }, 1426 + "node_modules/fs-constants": { 1427 + "version": "1.0.0", 1428 + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 1429 + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 1430 + "license": "MIT" 1431 + }, 1432 + "node_modules/fs-minipass": { 1433 + "version": "2.1.0", 1434 + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 1435 + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 1436 + "license": "ISC", 1437 + "dependencies": { 1438 + "minipass": "^3.0.0" 1439 + }, 1440 + "engines": { 1441 + "node": ">= 8" 1442 + } 1443 + }, 1444 + "node_modules/fs.realpath": { 1445 + "version": "1.0.0", 1446 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1447 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1448 + "license": "ISC", 1449 + "optional": true 1450 + }, 1070 1451 "node_modules/fsevents": { 1071 1452 "version": "2.3.3", 1072 1453 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", ··· 1091 1472 "url": "https://github.com/sponsors/ljharb" 1092 1473 } 1093 1474 }, 1475 + "node_modules/gauge": { 1476 + "version": "4.0.4", 1477 + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", 1478 + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", 1479 + "deprecated": "This package is no longer supported.", 1480 + "license": "ISC", 1481 + "optional": true, 1482 + "dependencies": { 1483 + "aproba": "^1.0.3 || ^2.0.0", 1484 + "color-support": "^1.1.3", 1485 + "console-control-strings": "^1.1.0", 1486 + "has-unicode": "^2.0.1", 1487 + "signal-exit": "^3.0.7", 1488 + "string-width": "^4.2.3", 1489 + "strip-ansi": "^6.0.1", 1490 + "wide-align": "^1.1.5" 1491 + }, 1492 + "engines": { 1493 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1494 + } 1495 + }, 1094 1496 "node_modules/get-intrinsic": { 1095 1497 "version": "1.3.0", 1096 1498 "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", ··· 1128 1530 "node": ">= 0.4" 1129 1531 } 1130 1532 }, 1533 + "node_modules/github-from-package": { 1534 + "version": "0.0.0", 1535 + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 1536 + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", 1537 + "license": "MIT" 1538 + }, 1539 + "node_modules/glob": { 1540 + "version": "7.2.3", 1541 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1542 + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1543 + "deprecated": "Glob versions prior to v9 are no longer supported", 1544 + "license": "ISC", 1545 + "optional": true, 1546 + "dependencies": { 1547 + "fs.realpath": "^1.0.0", 1548 + "inflight": "^1.0.4", 1549 + "inherits": "2", 1550 + "minimatch": "^3.1.1", 1551 + "once": "^1.3.0", 1552 + "path-is-absolute": "^1.0.0" 1553 + }, 1554 + "engines": { 1555 + "node": "*" 1556 + }, 1557 + "funding": { 1558 + "url": "https://github.com/sponsors/isaacs" 1559 + } 1560 + }, 1131 1561 "node_modules/glob-parent": { 1132 1562 "version": "5.1.2", 1133 1563 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", ··· 1141 1571 "node": ">= 6" 1142 1572 } 1143 1573 }, 1574 + "node_modules/glob/node_modules/brace-expansion": { 1575 + "version": "1.1.12", 1576 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 1577 + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 1578 + "license": "MIT", 1579 + "optional": true, 1580 + "dependencies": { 1581 + "balanced-match": "^1.0.0", 1582 + "concat-map": "0.0.1" 1583 + } 1584 + }, 1585 + "node_modules/glob/node_modules/minimatch": { 1586 + "version": "3.1.2", 1587 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1588 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1589 + "license": "ISC", 1590 + "optional": true, 1591 + "dependencies": { 1592 + "brace-expansion": "^1.1.7" 1593 + }, 1594 + "engines": { 1595 + "node": "*" 1596 + } 1597 + }, 1144 1598 "node_modules/gopd": { 1145 1599 "version": "1.2.0", 1146 1600 "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", ··· 1153 1607 "url": "https://github.com/sponsors/ljharb" 1154 1608 } 1155 1609 }, 1610 + "node_modules/graceful-fs": { 1611 + "version": "4.2.11", 1612 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1613 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1614 + "license": "ISC", 1615 + "optional": true 1616 + }, 1156 1617 "node_modules/has-flag": { 1157 1618 "version": "3.0.0", 1158 1619 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", ··· 1175 1636 "url": "https://github.com/sponsors/ljharb" 1176 1637 } 1177 1638 }, 1639 + "node_modules/has-unicode": { 1640 + "version": "2.0.1", 1641 + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1642 + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", 1643 + "license": "ISC", 1644 + "optional": true 1645 + }, 1178 1646 "node_modules/hasown": { 1179 1647 "version": "2.0.2", 1180 1648 "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", ··· 1187 1655 "node": ">= 0.4" 1188 1656 } 1189 1657 }, 1658 + "node_modules/http-cache-semantics": { 1659 + "version": "4.2.0", 1660 + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", 1661 + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", 1662 + "license": "BSD-2-Clause", 1663 + "optional": true 1664 + }, 1190 1665 "node_modules/http-errors": { 1191 1666 "version": "2.0.1", 1192 1667 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", ··· 1207 1682 "url": "https://opencollective.com/express" 1208 1683 } 1209 1684 }, 1685 + "node_modules/http-proxy-agent": { 1686 + "version": "4.0.1", 1687 + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 1688 + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 1689 + "license": "MIT", 1690 + "optional": true, 1691 + "dependencies": { 1692 + "@tootallnate/once": "1", 1693 + "agent-base": "6", 1694 + "debug": "4" 1695 + }, 1696 + "engines": { 1697 + "node": ">= 6" 1698 + } 1699 + }, 1700 + "node_modules/https-proxy-agent": { 1701 + "version": "5.0.1", 1702 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 1703 + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 1704 + "license": "MIT", 1705 + "optional": true, 1706 + "dependencies": { 1707 + "agent-base": "6", 1708 + "debug": "4" 1709 + }, 1710 + "engines": { 1711 + "node": ">= 6" 1712 + } 1713 + }, 1714 + "node_modules/humanize-ms": { 1715 + "version": "1.2.1", 1716 + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 1717 + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 1718 + "license": "MIT", 1719 + "optional": true, 1720 + "dependencies": { 1721 + "ms": "^2.0.0" 1722 + } 1723 + }, 1210 1724 "node_modules/iconv-lite": { 1211 1725 "version": "0.7.2", 1212 1726 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", ··· 1223 1737 "url": "https://opencollective.com/express" 1224 1738 } 1225 1739 }, 1740 + "node_modules/ieee754": { 1741 + "version": "1.2.1", 1742 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1743 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1744 + "funding": [ 1745 + { 1746 + "type": "github", 1747 + "url": "https://github.com/sponsors/feross" 1748 + }, 1749 + { 1750 + "type": "patreon", 1751 + "url": "https://www.patreon.com/feross" 1752 + }, 1753 + { 1754 + "type": "consulting", 1755 + "url": "https://feross.org/support" 1756 + } 1757 + ], 1758 + "license": "BSD-3-Clause" 1759 + }, 1226 1760 "node_modules/ignore-by-default": { 1227 1761 "version": "1.0.1", 1228 1762 "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", ··· 1230 1764 "dev": true, 1231 1765 "license": "ISC" 1232 1766 }, 1767 + "node_modules/imurmurhash": { 1768 + "version": "0.1.4", 1769 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1770 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1771 + "license": "MIT", 1772 + "optional": true, 1773 + "engines": { 1774 + "node": ">=0.8.19" 1775 + } 1776 + }, 1777 + "node_modules/indent-string": { 1778 + "version": "4.0.0", 1779 + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1780 + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1781 + "license": "MIT", 1782 + "optional": true, 1783 + "engines": { 1784 + "node": ">=8" 1785 + } 1786 + }, 1787 + "node_modules/infer-owner": { 1788 + "version": "1.0.4", 1789 + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", 1790 + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", 1791 + "license": "ISC", 1792 + "optional": true 1793 + }, 1794 + "node_modules/inflight": { 1795 + "version": "1.0.6", 1796 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1797 + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1798 + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 1799 + "license": "ISC", 1800 + "optional": true, 1801 + "dependencies": { 1802 + "once": "^1.3.0", 1803 + "wrappy": "1" 1804 + } 1805 + }, 1233 1806 "node_modules/inherits": { 1234 1807 "version": "2.0.4", 1235 1808 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1236 1809 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1237 1810 "license": "ISC" 1238 1811 }, 1812 + "node_modules/ini": { 1813 + "version": "1.3.8", 1814 + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1815 + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1816 + "license": "ISC" 1817 + }, 1818 + "node_modules/ip-address": { 1819 + "version": "10.1.0", 1820 + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", 1821 + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", 1822 + "license": "MIT", 1823 + "optional": true, 1824 + "engines": { 1825 + "node": ">= 12" 1826 + } 1827 + }, 1239 1828 "node_modules/ipaddr.js": { 1240 1829 "version": "1.9.1", 1241 1830 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", ··· 1268 1857 "node": ">=0.10.0" 1269 1858 } 1270 1859 }, 1860 + "node_modules/is-fullwidth-code-point": { 1861 + "version": "3.0.0", 1862 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1863 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1864 + "license": "MIT", 1865 + "optional": true, 1866 + "engines": { 1867 + "node": ">=8" 1868 + } 1869 + }, 1271 1870 "node_modules/is-glob": { 1272 1871 "version": "4.0.3", 1273 1872 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", ··· 1281 1880 "node": ">=0.10.0" 1282 1881 } 1283 1882 }, 1883 + "node_modules/is-lambda": { 1884 + "version": "1.0.1", 1885 + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", 1886 + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", 1887 + "license": "MIT", 1888 + "optional": true 1889 + }, 1284 1890 "node_modules/is-number": { 1285 1891 "version": "7.0.0", 1286 1892 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", ··· 1296 1902 "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 1297 1903 "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 1298 1904 "license": "MIT" 1905 + }, 1906 + "node_modules/isexe": { 1907 + "version": "2.0.0", 1908 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1909 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1910 + "license": "ISC", 1911 + "optional": true 1299 1912 }, 1300 1913 "node_modules/iso-datestring-validator": { 1301 1914 "version": "2.2.2", ··· 1373 1986 "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1374 1987 "license": "ISC" 1375 1988 }, 1989 + "node_modules/make-fetch-happen": { 1990 + "version": "9.1.0", 1991 + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", 1992 + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", 1993 + "license": "ISC", 1994 + "optional": true, 1995 + "dependencies": { 1996 + "agentkeepalive": "^4.1.3", 1997 + "cacache": "^15.2.0", 1998 + "http-cache-semantics": "^4.1.0", 1999 + "http-proxy-agent": "^4.0.1", 2000 + "https-proxy-agent": "^5.0.0", 2001 + "is-lambda": "^1.0.1", 2002 + "lru-cache": "^6.0.0", 2003 + "minipass": "^3.1.3", 2004 + "minipass-collect": "^1.0.2", 2005 + "minipass-fetch": "^1.3.2", 2006 + "minipass-flush": "^1.0.5", 2007 + "minipass-pipeline": "^1.2.4", 2008 + "negotiator": "^0.6.2", 2009 + "promise-retry": "^2.0.1", 2010 + "socks-proxy-agent": "^6.0.0", 2011 + "ssri": "^8.0.0" 2012 + }, 2013 + "engines": { 2014 + "node": ">= 10" 2015 + } 2016 + }, 2017 + "node_modules/make-fetch-happen/node_modules/lru-cache": { 2018 + "version": "6.0.0", 2019 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2020 + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2021 + "license": "ISC", 2022 + "optional": true, 2023 + "dependencies": { 2024 + "yallist": "^4.0.0" 2025 + }, 2026 + "engines": { 2027 + "node": ">=10" 2028 + } 2029 + }, 2030 + "node_modules/make-fetch-happen/node_modules/negotiator": { 2031 + "version": "0.6.4", 2032 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", 2033 + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", 2034 + "license": "MIT", 2035 + "optional": true, 2036 + "engines": { 2037 + "node": ">= 0.6" 2038 + } 2039 + }, 1376 2040 "node_modules/math-intrinsics": { 1377 2041 "version": "1.1.0", 1378 2042 "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", ··· 1428 2092 "url": "https://opencollective.com/express" 1429 2093 } 1430 2094 }, 2095 + "node_modules/mimic-response": { 2096 + "version": "3.1.0", 2097 + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 2098 + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 2099 + "license": "MIT", 2100 + "engines": { 2101 + "node": ">=10" 2102 + }, 2103 + "funding": { 2104 + "url": "https://github.com/sponsors/sindresorhus" 2105 + } 2106 + }, 1431 2107 "node_modules/minimatch": { 1432 2108 "version": "5.1.6", 1433 2109 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", ··· 1440 2116 "node": ">=10" 1441 2117 } 1442 2118 }, 2119 + "node_modules/minimist": { 2120 + "version": "1.2.8", 2121 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2122 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2123 + "license": "MIT", 2124 + "funding": { 2125 + "url": "https://github.com/sponsors/ljharb" 2126 + } 2127 + }, 2128 + "node_modules/minipass": { 2129 + "version": "3.3.6", 2130 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 2131 + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 2132 + "license": "ISC", 2133 + "dependencies": { 2134 + "yallist": "^4.0.0" 2135 + }, 2136 + "engines": { 2137 + "node": ">=8" 2138 + } 2139 + }, 2140 + "node_modules/minipass-collect": { 2141 + "version": "1.0.2", 2142 + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", 2143 + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", 2144 + "license": "ISC", 2145 + "optional": true, 2146 + "dependencies": { 2147 + "minipass": "^3.0.0" 2148 + }, 2149 + "engines": { 2150 + "node": ">= 8" 2151 + } 2152 + }, 2153 + "node_modules/minipass-fetch": { 2154 + "version": "1.4.1", 2155 + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", 2156 + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", 2157 + "license": "MIT", 2158 + "optional": true, 2159 + "dependencies": { 2160 + "minipass": "^3.1.0", 2161 + "minipass-sized": "^1.0.3", 2162 + "minizlib": "^2.0.0" 2163 + }, 2164 + "engines": { 2165 + "node": ">=8" 2166 + }, 2167 + "optionalDependencies": { 2168 + "encoding": "^0.1.12" 2169 + } 2170 + }, 2171 + "node_modules/minipass-flush": { 2172 + "version": "1.0.5", 2173 + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", 2174 + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", 2175 + "license": "ISC", 2176 + "optional": true, 2177 + "dependencies": { 2178 + "minipass": "^3.0.0" 2179 + }, 2180 + "engines": { 2181 + "node": ">= 8" 2182 + } 2183 + }, 2184 + "node_modules/minipass-pipeline": { 2185 + "version": "1.2.4", 2186 + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", 2187 + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", 2188 + "license": "ISC", 2189 + "optional": true, 2190 + "dependencies": { 2191 + "minipass": "^3.0.0" 2192 + }, 2193 + "engines": { 2194 + "node": ">=8" 2195 + } 2196 + }, 2197 + "node_modules/minipass-sized": { 2198 + "version": "1.0.3", 2199 + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", 2200 + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", 2201 + "license": "ISC", 2202 + "optional": true, 2203 + "dependencies": { 2204 + "minipass": "^3.0.0" 2205 + }, 2206 + "engines": { 2207 + "node": ">=8" 2208 + } 2209 + }, 2210 + "node_modules/minizlib": { 2211 + "version": "2.1.2", 2212 + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 2213 + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 2214 + "license": "MIT", 2215 + "dependencies": { 2216 + "minipass": "^3.0.0", 2217 + "yallist": "^4.0.0" 2218 + }, 2219 + "engines": { 2220 + "node": ">= 8" 2221 + } 2222 + }, 2223 + "node_modules/mkdirp": { 2224 + "version": "1.0.4", 2225 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 2226 + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 2227 + "license": "MIT", 2228 + "bin": { 2229 + "mkdirp": "bin/cmd.js" 2230 + }, 2231 + "engines": { 2232 + "node": ">=10" 2233 + } 2234 + }, 2235 + "node_modules/mkdirp-classic": { 2236 + "version": "0.5.3", 2237 + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 2238 + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", 2239 + "license": "MIT" 2240 + }, 1443 2241 "node_modules/ms": { 1444 2242 "version": "2.1.3", 1445 2243 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", ··· 1452 2250 "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 1453 2251 "license": "(Apache-2.0 AND MIT)" 1454 2252 }, 2253 + "node_modules/napi-build-utils": { 2254 + "version": "2.0.0", 2255 + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", 2256 + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", 2257 + "license": "MIT" 2258 + }, 1455 2259 "node_modules/negotiator": { 1456 2260 "version": "1.0.0", 1457 2261 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", ··· 1461 2265 "node": ">= 0.6" 1462 2266 } 1463 2267 }, 2268 + "node_modules/node-abi": { 2269 + "version": "3.87.0", 2270 + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", 2271 + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", 2272 + "license": "MIT", 2273 + "dependencies": { 2274 + "semver": "^7.3.5" 2275 + }, 2276 + "engines": { 2277 + "node": ">=10" 2278 + } 2279 + }, 2280 + "node_modules/node-addon-api": { 2281 + "version": "7.1.1", 2282 + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", 2283 + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", 2284 + "license": "MIT" 2285 + }, 1464 2286 "node_modules/node-domexception": { 1465 2287 "version": "1.0.0", 1466 2288 "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", ··· 1499 2321 "url": "https://opencollective.com/node-fetch" 1500 2322 } 1501 2323 }, 2324 + "node_modules/node-gyp": { 2325 + "version": "8.4.1", 2326 + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", 2327 + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", 2328 + "license": "MIT", 2329 + "optional": true, 2330 + "dependencies": { 2331 + "env-paths": "^2.2.0", 2332 + "glob": "^7.1.4", 2333 + "graceful-fs": "^4.2.6", 2334 + "make-fetch-happen": "^9.1.0", 2335 + "nopt": "^5.0.0", 2336 + "npmlog": "^6.0.0", 2337 + "rimraf": "^3.0.2", 2338 + "semver": "^7.3.5", 2339 + "tar": "^6.1.2", 2340 + "which": "^2.0.2" 2341 + }, 2342 + "bin": { 2343 + "node-gyp": "bin/node-gyp.js" 2344 + }, 2345 + "engines": { 2346 + "node": ">= 10.12.0" 2347 + } 2348 + }, 1502 2349 "node_modules/nodemon": { 1503 2350 "version": "3.1.11", 1504 2351 "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz", ··· 1552 2399 "node": "*" 1553 2400 } 1554 2401 }, 2402 + "node_modules/nopt": { 2403 + "version": "5.0.0", 2404 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 2405 + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 2406 + "license": "ISC", 2407 + "optional": true, 2408 + "dependencies": { 2409 + "abbrev": "1" 2410 + }, 2411 + "bin": { 2412 + "nopt": "bin/nopt.js" 2413 + }, 2414 + "engines": { 2415 + "node": ">=6" 2416 + } 2417 + }, 1555 2418 "node_modules/normalize-path": { 1556 2419 "version": "3.0.0", 1557 2420 "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", ··· 1562 2425 "node": ">=0.10.0" 1563 2426 } 1564 2427 }, 2428 + "node_modules/npmlog": { 2429 + "version": "6.0.2", 2430 + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", 2431 + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", 2432 + "deprecated": "This package is no longer supported.", 2433 + "license": "ISC", 2434 + "optional": true, 2435 + "dependencies": { 2436 + "are-we-there-yet": "^3.0.0", 2437 + "console-control-strings": "^1.1.0", 2438 + "gauge": "^4.0.3", 2439 + "set-blocking": "^2.0.0" 2440 + }, 2441 + "engines": { 2442 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 2443 + } 2444 + }, 1565 2445 "node_modules/object-inspect": { 1566 2446 "version": "1.13.4", 1567 2447 "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", ··· 1602 2482 "license": "ISC", 1603 2483 "dependencies": { 1604 2484 "wrappy": "1" 2485 + } 2486 + }, 2487 + "node_modules/p-map": { 2488 + "version": "4.0.0", 2489 + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 2490 + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 2491 + "license": "MIT", 2492 + "optional": true, 2493 + "dependencies": { 2494 + "aggregate-error": "^3.0.0" 2495 + }, 2496 + "engines": { 2497 + "node": ">=10" 2498 + }, 2499 + "funding": { 2500 + "url": "https://github.com/sponsors/sindresorhus" 1605 2501 } 1606 2502 }, 1607 2503 "node_modules/parseurl": { ··· 1613 2509 "node": ">= 0.8" 1614 2510 } 1615 2511 }, 2512 + "node_modules/path-is-absolute": { 2513 + "version": "1.0.1", 2514 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2515 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2516 + "license": "MIT", 2517 + "optional": true, 2518 + "engines": { 2519 + "node": ">=0.10.0" 2520 + } 2521 + }, 1616 2522 "node_modules/path-to-regexp": { 1617 2523 "version": "8.3.0", 1618 2524 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", ··· 1642 2548 "url": "https://github.com/sponsors/jonschlinkert" 1643 2549 } 1644 2550 }, 2551 + "node_modules/prebuild-install": { 2552 + "version": "7.1.3", 2553 + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", 2554 + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", 2555 + "license": "MIT", 2556 + "dependencies": { 2557 + "detect-libc": "^2.0.0", 2558 + "expand-template": "^2.0.3", 2559 + "github-from-package": "0.0.0", 2560 + "minimist": "^1.2.3", 2561 + "mkdirp-classic": "^0.5.3", 2562 + "napi-build-utils": "^2.0.0", 2563 + "node-abi": "^3.3.0", 2564 + "pump": "^3.0.0", 2565 + "rc": "^1.2.7", 2566 + "simple-get": "^4.0.0", 2567 + "tar-fs": "^2.0.0", 2568 + "tunnel-agent": "^0.6.0" 2569 + }, 2570 + "bin": { 2571 + "prebuild-install": "bin.js" 2572 + }, 2573 + "engines": { 2574 + "node": ">=10" 2575 + } 2576 + }, 2577 + "node_modules/promise-inflight": { 2578 + "version": "1.0.1", 2579 + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", 2580 + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", 2581 + "license": "ISC", 2582 + "optional": true 2583 + }, 1645 2584 "node_modules/promise-limit": { 1646 2585 "version": "2.7.0", 1647 2586 "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", 1648 2587 "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", 1649 2588 "license": "ISC" 1650 2589 }, 2590 + "node_modules/promise-retry": { 2591 + "version": "2.0.1", 2592 + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", 2593 + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", 2594 + "license": "MIT", 2595 + "optional": true, 2596 + "dependencies": { 2597 + "err-code": "^2.0.2", 2598 + "retry": "^0.12.0" 2599 + }, 2600 + "engines": { 2601 + "node": ">=10" 2602 + } 2603 + }, 1651 2604 "node_modules/proxy-addr": { 1652 2605 "version": "2.0.7", 1653 2606 "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", ··· 1668 2621 "dev": true, 1669 2622 "license": "MIT" 1670 2623 }, 2624 + "node_modules/pump": { 2625 + "version": "3.0.3", 2626 + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", 2627 + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", 2628 + "license": "MIT", 2629 + "dependencies": { 2630 + "end-of-stream": "^1.1.0", 2631 + "once": "^1.3.1" 2632 + } 2633 + }, 1671 2634 "node_modules/qs": { 1672 2635 "version": "6.14.1", 1673 2636 "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", ··· 1716 2679 "node": ">= 0.10" 1717 2680 } 1718 2681 }, 2682 + "node_modules/rc": { 2683 + "version": "1.2.8", 2684 + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2685 + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2686 + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", 2687 + "dependencies": { 2688 + "deep-extend": "^0.6.0", 2689 + "ini": "~1.3.0", 2690 + "minimist": "^1.2.0", 2691 + "strip-json-comments": "~2.0.1" 2692 + }, 2693 + "bin": { 2694 + "rc": "cli.js" 2695 + } 2696 + }, 2697 + "node_modules/readable-stream": { 2698 + "version": "3.6.2", 2699 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 2700 + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 2701 + "license": "MIT", 2702 + "dependencies": { 2703 + "inherits": "^2.0.3", 2704 + "string_decoder": "^1.1.1", 2705 + "util-deprecate": "^1.0.1" 2706 + }, 2707 + "engines": { 2708 + "node": ">= 6" 2709 + } 2710 + }, 1719 2711 "node_modules/readdirp": { 1720 2712 "version": "3.6.0", 1721 2713 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", ··· 1729 2721 "node": ">=8.10.0" 1730 2722 } 1731 2723 }, 2724 + "node_modules/retry": { 2725 + "version": "0.12.0", 2726 + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 2727 + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", 2728 + "license": "MIT", 2729 + "optional": true, 2730 + "engines": { 2731 + "node": ">= 4" 2732 + } 2733 + }, 2734 + "node_modules/rimraf": { 2735 + "version": "3.0.2", 2736 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2737 + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2738 + "deprecated": "Rimraf versions prior to v4 are no longer supported", 2739 + "license": "ISC", 2740 + "optional": true, 2741 + "dependencies": { 2742 + "glob": "^7.1.3" 2743 + }, 2744 + "bin": { 2745 + "rimraf": "bin.js" 2746 + }, 2747 + "funding": { 2748 + "url": "https://github.com/sponsors/isaacs" 2749 + } 2750 + }, 1732 2751 "node_modules/router": { 1733 2752 "version": "2.2.0", 1734 2753 "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", ··· 1775 2794 "version": "7.7.3", 1776 2795 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 1777 2796 "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 1778 - "dev": true, 1779 2797 "license": "ISC", 1780 2798 "bin": { 1781 2799 "semver": "bin/semver.js" ··· 1829 2847 "url": "https://opencollective.com/express" 1830 2848 } 1831 2849 }, 2850 + "node_modules/set-blocking": { 2851 + "version": "2.0.0", 2852 + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2853 + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 2854 + "license": "ISC", 2855 + "optional": true 2856 + }, 1832 2857 "node_modules/setprototypeof": { 1833 2858 "version": "1.2.0", 1834 2859 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", ··· 1907 2932 "url": "https://github.com/sponsors/ljharb" 1908 2933 } 1909 2934 }, 2935 + "node_modules/signal-exit": { 2936 + "version": "3.0.7", 2937 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2938 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2939 + "license": "ISC", 2940 + "optional": true 2941 + }, 2942 + "node_modules/simple-concat": { 2943 + "version": "1.0.1", 2944 + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 2945 + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 2946 + "funding": [ 2947 + { 2948 + "type": "github", 2949 + "url": "https://github.com/sponsors/feross" 2950 + }, 2951 + { 2952 + "type": "patreon", 2953 + "url": "https://www.patreon.com/feross" 2954 + }, 2955 + { 2956 + "type": "consulting", 2957 + "url": "https://feross.org/support" 2958 + } 2959 + ], 2960 + "license": "MIT" 2961 + }, 2962 + "node_modules/simple-get": { 2963 + "version": "4.0.1", 2964 + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", 2965 + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", 2966 + "funding": [ 2967 + { 2968 + "type": "github", 2969 + "url": "https://github.com/sponsors/feross" 2970 + }, 2971 + { 2972 + "type": "patreon", 2973 + "url": "https://www.patreon.com/feross" 2974 + }, 2975 + { 2976 + "type": "consulting", 2977 + "url": "https://feross.org/support" 2978 + } 2979 + ], 2980 + "license": "MIT", 2981 + "dependencies": { 2982 + "decompress-response": "^6.0.0", 2983 + "once": "^1.3.1", 2984 + "simple-concat": "^1.0.0" 2985 + } 2986 + }, 1910 2987 "node_modules/simple-update-notifier": { 1911 2988 "version": "2.0.0", 1912 2989 "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", ··· 1920 2997 "node": ">=10" 1921 2998 } 1922 2999 }, 3000 + "node_modules/smart-buffer": { 3001 + "version": "4.2.0", 3002 + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 3003 + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 3004 + "license": "MIT", 3005 + "optional": true, 3006 + "engines": { 3007 + "node": ">= 6.0.0", 3008 + "npm": ">= 3.0.0" 3009 + } 3010 + }, 3011 + "node_modules/socks": { 3012 + "version": "2.8.7", 3013 + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", 3014 + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", 3015 + "license": "MIT", 3016 + "optional": true, 3017 + "dependencies": { 3018 + "ip-address": "^10.0.1", 3019 + "smart-buffer": "^4.2.0" 3020 + }, 3021 + "engines": { 3022 + "node": ">= 10.0.0", 3023 + "npm": ">= 3.0.0" 3024 + } 3025 + }, 3026 + "node_modules/socks-proxy-agent": { 3027 + "version": "6.2.1", 3028 + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", 3029 + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", 3030 + "license": "MIT", 3031 + "optional": true, 3032 + "dependencies": { 3033 + "agent-base": "^6.0.2", 3034 + "debug": "^4.3.3", 3035 + "socks": "^2.6.2" 3036 + }, 3037 + "engines": { 3038 + "node": ">= 10" 3039 + } 3040 + }, 3041 + "node_modules/sqlite3": { 3042 + "version": "5.1.7", 3043 + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", 3044 + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", 3045 + "hasInstallScript": true, 3046 + "license": "BSD-3-Clause", 3047 + "dependencies": { 3048 + "bindings": "^1.5.0", 3049 + "node-addon-api": "^7.0.0", 3050 + "prebuild-install": "^7.1.1", 3051 + "tar": "^6.1.11" 3052 + }, 3053 + "optionalDependencies": { 3054 + "node-gyp": "8.x" 3055 + }, 3056 + "peerDependencies": { 3057 + "node-gyp": "8.x" 3058 + }, 3059 + "peerDependenciesMeta": { 3060 + "node-gyp": { 3061 + "optional": true 3062 + } 3063 + } 3064 + }, 3065 + "node_modules/ssri": { 3066 + "version": "8.0.1", 3067 + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", 3068 + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", 3069 + "license": "ISC", 3070 + "optional": true, 3071 + "dependencies": { 3072 + "minipass": "^3.1.1" 3073 + }, 3074 + "engines": { 3075 + "node": ">= 8" 3076 + } 3077 + }, 1923 3078 "node_modules/statuses": { 1924 3079 "version": "2.0.2", 1925 3080 "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", ··· 1929 3084 "node": ">= 0.8" 1930 3085 } 1931 3086 }, 3087 + "node_modules/string_decoder": { 3088 + "version": "1.3.0", 3089 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3090 + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3091 + "license": "MIT", 3092 + "dependencies": { 3093 + "safe-buffer": "~5.2.0" 3094 + } 3095 + }, 3096 + "node_modules/string-width": { 3097 + "version": "4.2.3", 3098 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3099 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3100 + "license": "MIT", 3101 + "optional": true, 3102 + "dependencies": { 3103 + "emoji-regex": "^8.0.0", 3104 + "is-fullwidth-code-point": "^3.0.0", 3105 + "strip-ansi": "^6.0.1" 3106 + }, 3107 + "engines": { 3108 + "node": ">=8" 3109 + } 3110 + }, 3111 + "node_modules/strip-ansi": { 3112 + "version": "6.0.1", 3113 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3114 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3115 + "license": "MIT", 3116 + "optional": true, 3117 + "dependencies": { 3118 + "ansi-regex": "^5.0.1" 3119 + }, 3120 + "engines": { 3121 + "node": ">=8" 3122 + } 3123 + }, 3124 + "node_modules/strip-json-comments": { 3125 + "version": "2.0.1", 3126 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3127 + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 3128 + "license": "MIT", 3129 + "engines": { 3130 + "node": ">=0.10.0" 3131 + } 3132 + }, 1932 3133 "node_modules/supports-color": { 1933 3134 "version": "5.5.0", 1934 3135 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ··· 1942 3143 "node": ">=4" 1943 3144 } 1944 3145 }, 3146 + "node_modules/tar": { 3147 + "version": "6.2.1", 3148 + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", 3149 + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", 3150 + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me", 3151 + "license": "ISC", 3152 + "dependencies": { 3153 + "chownr": "^2.0.0", 3154 + "fs-minipass": "^2.0.0", 3155 + "minipass": "^5.0.0", 3156 + "minizlib": "^2.1.1", 3157 + "mkdirp": "^1.0.3", 3158 + "yallist": "^4.0.0" 3159 + }, 3160 + "engines": { 3161 + "node": ">=10" 3162 + } 3163 + }, 3164 + "node_modules/tar-fs": { 3165 + "version": "2.1.4", 3166 + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", 3167 + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", 3168 + "license": "MIT", 3169 + "dependencies": { 3170 + "chownr": "^1.1.1", 3171 + "mkdirp-classic": "^0.5.2", 3172 + "pump": "^3.0.0", 3173 + "tar-stream": "^2.1.4" 3174 + } 3175 + }, 3176 + "node_modules/tar-fs/node_modules/chownr": { 3177 + "version": "1.1.4", 3178 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 3179 + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 3180 + "license": "ISC" 3181 + }, 3182 + "node_modules/tar-stream": { 3183 + "version": "2.2.0", 3184 + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 3185 + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 3186 + "license": "MIT", 3187 + "dependencies": { 3188 + "bl": "^4.0.3", 3189 + "end-of-stream": "^1.4.1", 3190 + "fs-constants": "^1.0.0", 3191 + "inherits": "^2.0.3", 3192 + "readable-stream": "^3.1.1" 3193 + }, 3194 + "engines": { 3195 + "node": ">=6" 3196 + } 3197 + }, 3198 + "node_modules/tar/node_modules/minipass": { 3199 + "version": "5.0.0", 3200 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", 3201 + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", 3202 + "license": "ISC", 3203 + "engines": { 3204 + "node": ">=8" 3205 + } 3206 + }, 1945 3207 "node_modules/tlds": { 1946 3208 "version": "1.261.0", 1947 3209 "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.261.0.tgz", ··· 1995 3257 "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 1996 3258 "license": "0BSD" 1997 3259 }, 3260 + "node_modules/tunnel-agent": { 3261 + "version": "0.6.0", 3262 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3263 + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 3264 + "license": "Apache-2.0", 3265 + "dependencies": { 3266 + "safe-buffer": "^5.0.1" 3267 + }, 3268 + "engines": { 3269 + "node": "*" 3270 + } 3271 + }, 1998 3272 "node_modules/type-is": { 1999 3273 "version": "2.0.1", 2000 3274 "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", ··· 2058 3332 "integrity": "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==", 2059 3333 "license": "MIT" 2060 3334 }, 3335 + "node_modules/unique-filename": { 3336 + "version": "1.1.1", 3337 + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", 3338 + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", 3339 + "license": "ISC", 3340 + "optional": true, 3341 + "dependencies": { 3342 + "unique-slug": "^2.0.0" 3343 + } 3344 + }, 3345 + "node_modules/unique-slug": { 3346 + "version": "2.0.2", 3347 + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", 3348 + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", 3349 + "license": "ISC", 3350 + "optional": true, 3351 + "dependencies": { 3352 + "imurmurhash": "^0.1.4" 3353 + } 3354 + }, 2061 3355 "node_modules/unpipe": { 2062 3356 "version": "1.0.0", 2063 3357 "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", ··· 2066 3360 "engines": { 2067 3361 "node": ">= 0.8" 2068 3362 } 3363 + }, 3364 + "node_modules/util-deprecate": { 3365 + "version": "1.0.2", 3366 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3367 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3368 + "license": "MIT" 2069 3369 }, 2070 3370 "node_modules/vary": { 2071 3371 "version": "1.1.2", ··· 2101 3401 "webidl-conversions": "^3.0.0" 2102 3402 } 2103 3403 }, 3404 + "node_modules/which": { 3405 + "version": "2.0.2", 3406 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3407 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3408 + "license": "ISC", 3409 + "optional": true, 3410 + "dependencies": { 3411 + "isexe": "^2.0.0" 3412 + }, 3413 + "bin": { 3414 + "node-which": "bin/node-which" 3415 + }, 3416 + "engines": { 3417 + "node": ">= 8" 3418 + } 3419 + }, 3420 + "node_modules/wide-align": { 3421 + "version": "1.1.5", 3422 + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 3423 + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 3424 + "license": "ISC", 3425 + "optional": true, 3426 + "dependencies": { 3427 + "string-width": "^1.0.2 || 2 || 3 || 4" 3428 + } 3429 + }, 2104 3430 "node_modules/wrappy": { 2105 3431 "version": "1.0.2", 2106 3432 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", ··· 2127 3453 "optional": true 2128 3454 } 2129 3455 } 3456 + }, 3457 + "node_modules/yallist": { 3458 + "version": "4.0.0", 3459 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3460 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3461 + "license": "ISC" 2130 3462 }, 2131 3463 "node_modules/zod": { 2132 3464 "version": "3.25.76",
+1
package.json
··· 15 15 "@atproto/api": "^0.18.18", 16 16 "@atproto/oauth-client-node": "^0.3.16", 17 17 "@libsql/client": "^0.17.0", 18 + "connect-sqlite3": "^0.9.16", 18 19 "dotenv": "^17.2.3", 19 20 "ejs": "^4.0.1", 20 21 "express": "^5.2.1",