-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcontext.ts
69 lines (59 loc) · 1.7 KB
/
context.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { SDK } from "codechain-sdk";
import * as sqlite3 from "sqlite3";
import * as Twit from "twit";
import { ServerConfig } from "./logic/config";
import { createTwit } from "./logic/sns";
import { Worker } from "./logic/worker";
import { initialize as dbInitialize } from "./model/initialize";
let database = sqlite3.Database;
if (process.env.NODE_ENV !== "production") {
database = sqlite3.verbose().Database;
}
export interface Context {
codechainSDK: SDK;
config: ServerConfig;
db: sqlite3.Database;
twit: Twit;
worker: Worker;
}
export async function createContext(): Promise<Context> {
const config = require("config") as ServerConfig;
const codechainSDK = new SDK({
server: config.codechainURL,
networkId: config.networkId
});
const db = await new Promise<sqlite3.Database>((resolve, reject) => {
const dbFileName =
process.env.NODE_ENV === "production" ? "faucet.db" : ":memory:";
const newDB = new database(dbFileName, (err: Error) => {
if (err) {
reject(err);
return;
}
resolve(newDB);
});
});
await dbInitialize(db);
const twit = createTwit(config);
const worker = new Worker();
worker.start().catch(console.error);
return {
codechainSDK,
config,
db,
twit,
worker
};
}
export async function closeContext(context: Context): Promise<void> {
await new Promise<void>((resolve, reject) => {
context.db.close(err => {
if (err) {
reject(err);
return;
}
resolve();
});
});
await context.worker.stop();
}