This commit is contained in:
seb
2026-10-12 22:32:21 +02:00
parent 28e62093b3
commit 8a8aeaedd7
21 changed files with 786 additions and 4 deletions

View File

@@ -19,13 +19,23 @@ function normalizeParamValue(value) {
return value;
}
function bindParams(params) {
return Object.fromEntries(
function bindParams(params, sql = null) {
const bound = Object.fromEntries(
Object.entries(params).map(([key, value]) => [
key.replace(/^[@:$]/, ''),
normalizeParamValue(value),
]),
);
if (typeof sql === 'string') {
const matches = sql.matchAll(/[@:$]([a-zA-Z0-9_]+)/g);
for (const match of matches) {
const name = match[1];
if (!(name in bound)) {
bound[name] = null;
}
}
}
return bound;
}
function normalizeInsertId(value) {
@@ -227,7 +237,7 @@ export class BetterSqlite3Executor {
/** @returns {Promise<import('../provider.js').QueryResult>} */
async query(sql, params = {}) {
const statement = this.db.prepare(sql);
const bindings = bindParams(params);
const bindings = bindParams(params, sql);
if (statement.reader) {
const rows = statement.all(bindings);

View File

@@ -0,0 +1,16 @@
import * as source from '../../mssql/queries/mcp.js';
import { translateQueries } from './translate.js';
const queries = translateQueries(source, 'mcp');
export const {
INSERT_CLIENT,
GET_CLIENT,
LIST_CLIENTS,
DELETE_CLIENT,
INSERT_AUTH_CODE,
GET_AUTH_CODE,
CONSUME_AUTH_CODE,
INSERT_REFRESH_TOKEN,
GET_REFRESH_TOKEN,
REVOKE_REFRESH_TOKEN,
} = queries;

View File

@@ -845,6 +845,50 @@ CREATE TABLE IF NOT EXISTS package (
);
`;
export const INIT_MCP_CLIENT = `
CREATE TABLE IF NOT EXISTS mcp_client (
id INTEGER PRIMARY KEY AUTOINCREMENT,
client_id TEXT NOT NULL UNIQUE,
client_secret TEXT,
client_name TEXT NOT NULL,
redirect_uris TEXT NOT NULL,
grant_types TEXT,
response_types TEXT,
scope TEXT,
created_at TEXT NOT NULL DEFAULT (${UTC_NOW})
);
`;
export const INIT_MCP_AUTH_CODE = `
CREATE TABLE IF NOT EXISTS mcp_auth_code (
code TEXT PRIMARY KEY,
client_id TEXT NOT NULL,
google_auth_id INTEGER NOT NULL,
redirect_uri TEXT NOT NULL,
code_challenge TEXT NOT NULL,
code_challenge_method TEXT NOT NULL,
scope TEXT,
expires_at TEXT NOT NULL,
used INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
FOREIGN KEY (google_auth_id) REFERENCES google_auth(id) ON DELETE CASCADE
);
`;
export const INIT_MCP_TOKEN = `
CREATE TABLE IF NOT EXISTS mcp_token (
id INTEGER PRIMARY KEY AUTOINCREMENT,
refresh_token TEXT NOT NULL UNIQUE,
client_id TEXT NOT NULL,
google_auth_id INTEGER NOT NULL,
scope TEXT,
expires_at TEXT NOT NULL,
revoked INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
FOREIGN KEY (google_auth_id) REFERENCES google_auth(id) ON DELETE CASCADE
);
`;
/** DDL scripts in dependency order for SQLite schema initialization. */
export const SCHEMA_SCRIPTS = [
INIT_META,
@@ -909,4 +953,7 @@ export const SCHEMA_SCRIPTS = [
INIT_PAYMENT,
INIT_SHIPPING,
INIT_PACKAGE,
INIT_MCP_CLIENT,
INIT_MCP_AUTH_CODE,
INIT_MCP_TOKEN,
];