From 469eea4e2f834364f79e972269eafbfd48651a8c Mon Sep 17 00:00:00 2001 From: ImBenji Date: Fri, 2 Jan 2026 12:08:48 +0000 Subject: [PATCH] Implement v2 API for stateful sessions and add engagement metrics support --- .gitignore | 1 + .idea/dataSources.xml | 12 ++++++++++++ api.js | 9 +++++++++ package-lock.json | 23 +++++++++++++++++++++++ package.json | 5 +++-- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 .idea/dataSources.xml diff --git a/.gitignore b/.gitignore index 620d045..f7e7dbb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules/ cache/ +data/ *.png .env .DS_Store diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..7f52b2c --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:$PROJECT_DIR$/data/sessions.db + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/api.js b/api.js index 47cfef6..3611b41 100644 --- a/api.js +++ b/api.js @@ -1,4 +1,5 @@ const express = require('express'); +const cors = require('cors'); const fs = require('fs'); const path = require('path'); const crypto = require('crypto'); @@ -18,6 +19,14 @@ if (!fs.existsSync(CACHE_DIR)) { app.use(express.json({ limit: '1gb' })); app.use(express.urlencoded({ limit: '1gb', extended: true })); +// enable CORS for all routes +app.use(cors({ + origin: '*', + methods: ['GET', 'POST', 'PATCH', 'DELETE', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization'], + credentials: false +})); + // Request logging middleware app.use((req, res, next) => { // skip logging health checks diff --git a/package-lock.json b/package-lock.json index 3069bcd..d7e0486 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "better-sqlite3": "^11.0.0", + "cors": "^2.8.5", "express": "^4.18.2", "puppeteer": "^23.0.0" } @@ -527,6 +528,19 @@ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -1445,6 +1459,15 @@ "node": ">=10" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", diff --git a/package.json b/package.json index a254e73..f160e64 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,9 @@ "license": "ISC", "type": "commonjs", "dependencies": { - "puppeteer": "^23.0.0", + "better-sqlite3": "^11.0.0", + "cors": "^2.8.5", "express": "^4.18.2", - "better-sqlite3": "^11.0.0" + "puppeteer": "^23.0.0" } }