148 lines
4.0 KiB
TypeScript
Raw Normal View History

2021-09-29 18:39:32 -05:00
// import { sqlite3, open } from 'sqlite3';
2021-09-30 10:56:01 -05:00
// var sqlite3 = require("sqlite3").verbose();
// import "sqlite3";
import * as sqlite from 'sqlite3';
const sqlite3 = sqlite.verbose();
2021-09-29 18:39:32 -05:00
import { Response } from './eip_processor';
2021-09-30 18:33:10 -05:00
const DB_PATH = './data/snapshot.db';
2021-09-29 18:39:32 -05:00
2021-09-30 14:06:59 -05:00
export interface DBRecord {
snapshot_id: number;
event_address: string;
event_signature: string;
eip712_doc: string;
peer_id: string;
timestamp: number;
eip_validation: boolean;
ts_validation: boolean;
signed_response: string;
}
2021-09-29 18:39:32 -05:00
// db handler
2021-09-30 18:33:10 -05:00
export function get_db(db_path: string): sqlite.Database {
2021-09-29 18:39:32 -05:00
var db_path = db_path;
if (db_path === null) {
db_path = ':memory';
}
2021-09-29 23:37:01 -05:00
var db = new sqlite3.Database(db_path, (err: any) => {
2021-09-29 18:39:32 -05:00
if (err) {
return console.error("failure to get sqlite: ", err.message);
}
});
2021-09-30 10:56:01 -05:00
console.dir(db);
2021-09-29 18:39:32 -05:00
return db;
}
2021-09-30 10:56:01 -05:00
export async function create_table(db: sqlite.Database) {
2021-09-29 23:37:01 -05:00
const stmt = `create table if not exists snapshot (
2021-09-30 10:56:01 -05:00
snapshot_id integer primary key,
event_address text,
event_signature text,
eip712_doc blob,
peer_id text,
timestamp integer,
eip_validation boolean,
ts_validation boolean,
2021-09-29 18:39:32 -05:00
signed_response text
)`;
2021-09-30 10:56:01 -05:00
let promise = new Promise<void>((resolve, reject) => db.run(stmt, (res: sqlite.RunResult, err: Error) => {
console.dir(res);
if (err !== null) {
resolve()
} else {
reject(err)
}
}));
return promise;
2021-09-29 18:39:32 -05:00
db.run(stmt);
}
2021-09-30 10:56:01 -05:00
export function insert_event(db: any, eip_obj: any, response_obj: Response, signed_msg: string) {
2021-09-29 23:37:01 -05:00
const stmt = `insert into snapshot values (?,?,?,?,?,?,?,?,?)`;
2021-09-30 10:56:01 -05:00
// const stmt = `insert into snapshot values (?)`;
2021-09-29 23:37:01 -05:00
var cursor = db.prepare(stmt);
2021-09-30 10:56:01 -05:00
var vals = [eip_obj.data.message.snapshot, eip_obj.address, eip_obj.sig, JSON.stringify(eip_obj.data), response_obj.peer_id, response_obj.timestamp, response_obj.eip_validation, response_obj.ts_validation, signed_msg];
// var vals = [1];
2021-09-29 23:37:01 -05:00
for (let v of vals) {
console.log(typeof (v));
}
cursor.run(stmt, vals, function (err: any) {
2021-09-29 18:39:32 -05:00
if (err) {
2021-09-29 23:37:01 -05:00
return console.log("insert error: ", err.message);
2021-09-29 18:39:32 -05:00
}
// console.log(`A row has been inserted with row id: ${this.lastID}`);
// console.log(`A row has been inserted with row id: ${db.}`);
});
2021-09-29 23:37:01 -05:00
cursor.finalize();
2021-09-29 18:39:32 -05:00
}
2021-09-29 23:37:01 -05:00
2021-09-30 18:33:10 -05:00
// export function select_event(snapshot_id: number): DBRecord {
export function select_event(snapshot_id: number): any {
// todo: adding request log
var db = get_db(DB_PATH);
const stmt = 'select * from from snapshot where snapshot_id=?'
db.get(stmt, [snapshot_id], (err, row) => {
db.close();
if (err) {
return console.error(err.message);
}
return row
? console.log(row)
: console.log(`No record found for snapshot id: ${snapshot_id}`);
});
// db.close();
};
// export function select_events(): Array<DBRecord> {
export function select_events(): any {
var db = get_db(DB_PATH);
// todo: add pagination
const stmt = 'select * from from snapshot limit ?';
var response_arr: Array<DBRecord>;
db.all(stmt, [100], (err, rows) => {
if (err) {
// todo: no good, change that.
return [];
}
for (var row of rows) {
const _row: DBRecord = row;
response_arr.push(_row);
};
return response_arr;
});
db.close();
}
2021-09-29 23:37:01 -05:00
/*
var db = new sqlite3.Database(DB_PATH);
db.serialize(function () {
const create_stmt = "CREATE TABLE lorem (info TEXT)";
db.run(create_stmt);
const ins_stmt = "INSERT INTO lorem VALUES (?)";
var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
for (var i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
db.each("SELECT rowid AS id, info FROM lorem", function (err: any, row: any) {
console.log(row.id + ": " + row.info);
});
});
*/