dorkfuncli 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +6 -0
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +163 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.js +124 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/config/configFile.d.ts +6 -0
- package/dist/config/configFile.js +43 -0
- package/dist/config/configFile.js.map +1 -0
- package/dist/config/defaults.d.ts +10 -0
- package/dist/config/defaults.js +19 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/resolve.d.ts +3 -0
- package/dist/config/resolve.js +24 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/runtime.d.ts +3 -0
- package/dist/config/runtime.js +13 -0
- package/dist/config/runtime.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/transport/httpClient.d.ts +13 -0
- package/dist/transport/httpClient.js +91 -0
- package/dist/transport/httpClient.js.map +1 -0
- package/dist/transport/wsClient.d.ts +30 -0
- package/dist/transport/wsClient.js +196 -0
- package/dist/transport/wsClient.js.map +1 -0
- package/dist/tui/App.d.ts +6 -0
- package/dist/tui/App.js +40 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/ChatPanel.d.ts +12 -0
- package/dist/tui/components/ChatPanel.js +18 -0
- package/dist/tui/components/ChatPanel.js.map +1 -0
- package/dist/tui/components/ColoredBoard.d.ts +7 -0
- package/dist/tui/components/ColoredBoard.js +73 -0
- package/dist/tui/components/ColoredBoard.js.map +1 -0
- package/dist/tui/components/PlayerInfo.d.ts +10 -0
- package/dist/tui/components/PlayerInfo.js +10 -0
- package/dist/tui/components/PlayerInfo.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +7 -0
- package/dist/tui/components/StatusBar.js +13 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/TicTacToeBoard.d.ts +6 -0
- package/dist/tui/components/TicTacToeBoard.js +19 -0
- package/dist/tui/components/TicTacToeBoard.js.map +1 -0
- package/dist/tui/hooks/useEnsNames.d.ts +5 -0
- package/dist/tui/hooks/useEnsNames.js +33 -0
- package/dist/tui/hooks/useEnsNames.js.map +1 -0
- package/dist/tui/screens/GameBoard.d.ts +10 -0
- package/dist/tui/screens/GameBoard.js +245 -0
- package/dist/tui/screens/GameBoard.js.map +1 -0
- package/dist/tui/screens/GameOver.d.ts +10 -0
- package/dist/tui/screens/GameOver.js +21 -0
- package/dist/tui/screens/GameOver.js.map +1 -0
- package/dist/tui/screens/Leaderboard.d.ts +5 -0
- package/dist/tui/screens/Leaderboard.js +102 -0
- package/dist/tui/screens/Leaderboard.js.map +1 -0
- package/dist/tui/screens/Lobby.d.ts +8 -0
- package/dist/tui/screens/Lobby.js +113 -0
- package/dist/tui/screens/Lobby.js.map +1 -0
- package/dist/tui/screens/Matchmaking.d.ts +9 -0
- package/dist/tui/screens/Matchmaking.js +66 -0
- package/dist/tui/screens/Matchmaking.js.map +1 -0
- package/dist/tui/screens/WatchGame.d.ts +7 -0
- package/dist/tui/screens/WatchGame.js +99 -0
- package/dist/tui/screens/WatchGame.js.map +1 -0
- package/dist/tui/screens/WatchList.d.ts +6 -0
- package/dist/tui/screens/WatchList.js +49 -0
- package/dist/tui/screens/WatchList.js.map +1 -0
- package/dist/tui/theme.d.ts +30 -0
- package/dist/tui/theme.js +31 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/wallet/signer.d.ts +13 -0
- package/dist/wallet/signer.js +41 -0
- package/dist/wallet/signer.js.map +1 -0
- package/package.json +43 -0
- package/play-agents.cjs +444 -0
- package/src/commands/agent.ts +175 -0
- package/src/commands/config.ts +162 -0
- package/src/config/configFile.ts +55 -0
- package/src/config/defaults.ts +28 -0
- package/src/config/index.ts +15 -0
- package/src/config/resolve.ts +33 -0
- package/src/config/runtime.ts +18 -0
- package/src/index.ts +237 -0
- package/src/transport/httpClient.ts +104 -0
- package/src/transport/wsClient.ts +214 -0
- package/src/tui/App.tsx +130 -0
- package/src/tui/components/ChatPanel.tsx +53 -0
- package/src/tui/components/ColoredBoard.tsx +98 -0
- package/src/tui/components/PlayerInfo.tsx +31 -0
- package/src/tui/components/StatusBar.tsx +35 -0
- package/src/tui/hooks/useEnsNames.ts +35 -0
- package/src/tui/screens/GameBoard.tsx +434 -0
- package/src/tui/screens/GameOver.tsx +83 -0
- package/src/tui/screens/Leaderboard.tsx +196 -0
- package/src/tui/screens/Lobby.tsx +197 -0
- package/src/tui/screens/Matchmaking.tsx +107 -0
- package/src/tui/screens/WatchGame.tsx +182 -0
- package/src/tui/screens/WatchList.tsx +99 -0
- package/src/tui/theme.ts +31 -0
- package/src/wallet/signer.ts +54 -0
- package/tsconfig.json +17 -0
package/.env.example
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { parseEther, formatEther } from "ethers";
|
|
2
|
+
import { DorkAgent } from "@dorkfun/agent-sdk";
|
|
3
|
+
import { initConfig, getConfig } from "../config/index.js";
|
|
4
|
+
import { getAddress, signMessage, sendEscrowDeposit } from "../wallet/signer.js";
|
|
5
|
+
function formatBoard(board) {
|
|
6
|
+
if (!board || board.length !== 9)
|
|
7
|
+
return "";
|
|
8
|
+
const rows = [];
|
|
9
|
+
for (let r = 0; r < 3; r++) {
|
|
10
|
+
rows.push(board
|
|
11
|
+
.slice(r * 3, r * 3 + 3)
|
|
12
|
+
.map((c) => c || ".")
|
|
13
|
+
.join(" "));
|
|
14
|
+
}
|
|
15
|
+
return rows.join(" | ");
|
|
16
|
+
}
|
|
17
|
+
function log(tag, message) {
|
|
18
|
+
const ts = new Date().toISOString().slice(11, 19);
|
|
19
|
+
console.log(`${ts} [${tag.padEnd(5)}] ${message}`);
|
|
20
|
+
}
|
|
21
|
+
class RandomStrategy {
|
|
22
|
+
delay;
|
|
23
|
+
gameId;
|
|
24
|
+
constructor(gameId, delay) {
|
|
25
|
+
this.delay = delay;
|
|
26
|
+
this.gameId = gameId;
|
|
27
|
+
}
|
|
28
|
+
chooseAction(ctx) {
|
|
29
|
+
const idx = Math.floor(Math.random() * ctx.legalActions.length);
|
|
30
|
+
return ctx.legalActions[idx];
|
|
31
|
+
}
|
|
32
|
+
onStateUpdate(ctx) {
|
|
33
|
+
const pub = ctx.observation.publicData;
|
|
34
|
+
const board = pub.board;
|
|
35
|
+
const turnLabel = ctx.yourTurn ? "Your turn" : "Opponent's turn";
|
|
36
|
+
if (board) {
|
|
37
|
+
log("state", `Turn ${ctx.turnNumber} | ${turnLabel} | ${formatBoard(board)}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
log("state", `Turn ${ctx.turnNumber} | ${turnLabel}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function registerAgentCommand(program) {
|
|
45
|
+
program
|
|
46
|
+
.command("agent")
|
|
47
|
+
.description("Play games headlessly with a built-in random agent")
|
|
48
|
+
.option("-g, --game <gameId>", "Game to play", "tictactoe")
|
|
49
|
+
.option("-n, --count <N>", "Number of games to play", "1")
|
|
50
|
+
.option("--delay <ms>", "Delay between moves in ms", "0")
|
|
51
|
+
.option("--stake <ETH>", "Stake amount in ETH (e.g. 0.01 for 0.01 ETH, 1 for 1 ETH)")
|
|
52
|
+
.option("--private", "Create a private match")
|
|
53
|
+
.option("--invite <code>", "Join a private match by invite code")
|
|
54
|
+
.action(async (opts) => {
|
|
55
|
+
await initConfig();
|
|
56
|
+
const config = getConfig();
|
|
57
|
+
const address = getAddress();
|
|
58
|
+
const count = parseInt(opts.count, 10) || 1;
|
|
59
|
+
const delay = parseInt(opts.delay, 10) || 0;
|
|
60
|
+
// Convert ETH input to wei for the protocol
|
|
61
|
+
let stakeWei;
|
|
62
|
+
if (opts.stake) {
|
|
63
|
+
try {
|
|
64
|
+
stakeWei = parseEther(opts.stake).toString();
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
log("error", `Invalid stake amount: "${opts.stake}". Use a decimal ETH value (e.g. 0.01, 1.5)`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
log("init", `Player: ${address}`);
|
|
72
|
+
log("init", `Server: ${config.serverUrl}`);
|
|
73
|
+
log("init", `Game: ${opts.game} | Count: ${count} | Delay: ${delay}ms`);
|
|
74
|
+
if (stakeWei) {
|
|
75
|
+
log("init", `Stake: ${opts.stake} ETH (${stakeWei} wei)`);
|
|
76
|
+
}
|
|
77
|
+
const agent = new DorkAgent({
|
|
78
|
+
serverUrl: config.serverUrl,
|
|
79
|
+
wsUrl: config.wsUrl,
|
|
80
|
+
playerId: address,
|
|
81
|
+
signMessage,
|
|
82
|
+
});
|
|
83
|
+
// Clean shutdown on Ctrl+C
|
|
84
|
+
process.on("SIGINT", () => {
|
|
85
|
+
log("exit", "Shutting down...");
|
|
86
|
+
agent.close();
|
|
87
|
+
process.exit(0);
|
|
88
|
+
});
|
|
89
|
+
let wins = 0;
|
|
90
|
+
let losses = 0;
|
|
91
|
+
let draws = 0;
|
|
92
|
+
for (let i = 0; i < count; i++) {
|
|
93
|
+
if (count > 1) {
|
|
94
|
+
log("match", `--- Game ${i + 1} of ${count} ---`);
|
|
95
|
+
}
|
|
96
|
+
const strategy = new RandomStrategy(opts.game, delay);
|
|
97
|
+
try {
|
|
98
|
+
// Check for active match to reconnect to before starting a new one
|
|
99
|
+
const reconnected = await agent.reconnect(strategy, {
|
|
100
|
+
moveDelay: delay,
|
|
101
|
+
onLog: log,
|
|
102
|
+
});
|
|
103
|
+
if (reconnected) {
|
|
104
|
+
if (reconnected.draw)
|
|
105
|
+
draws++;
|
|
106
|
+
else if (reconnected.didWin)
|
|
107
|
+
wins++;
|
|
108
|
+
else
|
|
109
|
+
losses++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// Build deposit handler for staked matches
|
|
113
|
+
const depositHandler = stakeWei
|
|
114
|
+
? async (escrow) => {
|
|
115
|
+
log("stake", `Depositing ${formatEther(escrow.stakeWei)} ETH to escrow ${escrow.address}...`);
|
|
116
|
+
return sendEscrowDeposit(escrow);
|
|
117
|
+
}
|
|
118
|
+
: undefined;
|
|
119
|
+
let result;
|
|
120
|
+
if (opts.invite) {
|
|
121
|
+
result = await agent.playPrivate(opts.game, strategy, {
|
|
122
|
+
inviteCode: opts.invite,
|
|
123
|
+
moveDelay: delay,
|
|
124
|
+
onLog: log,
|
|
125
|
+
stakeWei,
|
|
126
|
+
sendDeposit: depositHandler,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
else if (opts.private) {
|
|
130
|
+
result = await agent.playPrivate(opts.game, strategy, {
|
|
131
|
+
moveDelay: delay,
|
|
132
|
+
onLog: log,
|
|
133
|
+
stakeWei,
|
|
134
|
+
sendDeposit: depositHandler,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
result = await agent.play(opts.game, strategy, {
|
|
139
|
+
moveDelay: delay,
|
|
140
|
+
onLog: log,
|
|
141
|
+
stakeWei,
|
|
142
|
+
sendDeposit: depositHandler,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (result.draw)
|
|
146
|
+
draws++;
|
|
147
|
+
else if (result.didWin)
|
|
148
|
+
wins++;
|
|
149
|
+
else
|
|
150
|
+
losses++;
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
log("error", err.message);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (count > 1) {
|
|
158
|
+
log("done", `Results: ${wins}W / ${losses}L / ${draws}D (${count} games)`);
|
|
159
|
+
}
|
|
160
|
+
process.exit(0);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
import { randomBytes } from "node:crypto";
|
|
3
|
+
import { resolveConfig, readConfigFile, updateConfigFile, writeConfigFile, getConfigPath, CONFIG_KEYS, DEFAULTS, ENV_MAP, } from "../config/index.js";
|
|
4
|
+
function createPrompter() {
|
|
5
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
6
|
+
let closed = false;
|
|
7
|
+
rl.once("close", () => {
|
|
8
|
+
closed = true;
|
|
9
|
+
});
|
|
10
|
+
return {
|
|
11
|
+
ask(prompt) {
|
|
12
|
+
if (closed)
|
|
13
|
+
return Promise.resolve("");
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
rl.question(prompt, (answer) => resolve(answer));
|
|
16
|
+
rl.once("close", () => resolve(""));
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
close() {
|
|
20
|
+
if (!closed)
|
|
21
|
+
rl.close();
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function registerConfigCommand(program) {
|
|
26
|
+
const configCmd = program
|
|
27
|
+
.command("config")
|
|
28
|
+
.description("Manage CLI configuration (~/.dork/config.json)");
|
|
29
|
+
configCmd.action(async () => {
|
|
30
|
+
await runWizard();
|
|
31
|
+
});
|
|
32
|
+
configCmd
|
|
33
|
+
.command("set <key> <value>")
|
|
34
|
+
.description("Set a config value")
|
|
35
|
+
.action(async (key, value) => {
|
|
36
|
+
if (!isValidKey(key)) {
|
|
37
|
+
console.error(`Unknown config key: "${key}". Valid keys: ${CONFIG_KEYS.join(", ")}`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
await updateConfigFile(key, value);
|
|
41
|
+
const display = key === "privateKey" ? maskKey(value) : value;
|
|
42
|
+
console.log(`Set ${key} = ${display}`);
|
|
43
|
+
});
|
|
44
|
+
configCmd
|
|
45
|
+
.command("get <key>")
|
|
46
|
+
.description("Get a config value")
|
|
47
|
+
.action(async (key) => {
|
|
48
|
+
if (!isValidKey(key)) {
|
|
49
|
+
console.error(`Unknown config key: "${key}". Valid keys: ${CONFIG_KEYS.join(", ")}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const resolved = await resolveConfig();
|
|
53
|
+
console.log(resolved[key]);
|
|
54
|
+
});
|
|
55
|
+
configCmd
|
|
56
|
+
.command("list")
|
|
57
|
+
.description("List all config values with sources")
|
|
58
|
+
.action(async () => {
|
|
59
|
+
await printConfigList();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export async function runWizard() {
|
|
63
|
+
const existing = await readConfigFile();
|
|
64
|
+
const prompter = createPrompter();
|
|
65
|
+
console.log("\nDork CLI Configuration");
|
|
66
|
+
console.log("──────────────────────\n");
|
|
67
|
+
try {
|
|
68
|
+
const serverUrl = await prompter.ask(`Server URL [${existing.serverUrl || DEFAULTS.serverUrl}]: `);
|
|
69
|
+
const wsUrl = await prompter.ask(`WebSocket URL [${existing.wsUrl || DEFAULTS.wsUrl}]: `);
|
|
70
|
+
const privateKeyInput = await prompter.ask(`Private key [enter to generate new]: `);
|
|
71
|
+
const data = {
|
|
72
|
+
...existing,
|
|
73
|
+
serverUrl: serverUrl.trim() || existing.serverUrl || DEFAULTS.serverUrl,
|
|
74
|
+
wsUrl: wsUrl.trim() || existing.wsUrl || DEFAULTS.wsUrl,
|
|
75
|
+
};
|
|
76
|
+
if (privateKeyInput.trim()) {
|
|
77
|
+
data.privateKey = privateKeyInput.trim();
|
|
78
|
+
}
|
|
79
|
+
else if (!existing.privateKey) {
|
|
80
|
+
data.privateKey = "0x" + randomBytes(32).toString("hex");
|
|
81
|
+
console.log(`\nGenerated new private key: ${maskKey(data.privateKey)}`);
|
|
82
|
+
}
|
|
83
|
+
await writeConfigFile(data);
|
|
84
|
+
console.log(`\nConfig saved to ${getConfigPath()}\n`);
|
|
85
|
+
const resolved = await resolveConfig();
|
|
86
|
+
for (const key of CONFIG_KEYS) {
|
|
87
|
+
const value = key === "privateKey" ? maskKey(resolved[key]) : resolved[key];
|
|
88
|
+
console.log(` ${key}: ${value}`);
|
|
89
|
+
}
|
|
90
|
+
console.log("");
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
prompter.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function printConfigList() {
|
|
97
|
+
const resolved = await resolveConfig();
|
|
98
|
+
const fileData = await readConfigFile();
|
|
99
|
+
console.log(`\nConfig file: ${getConfigPath()}`);
|
|
100
|
+
console.log("──────────────────────────────────────");
|
|
101
|
+
for (const key of CONFIG_KEYS) {
|
|
102
|
+
const value = key === "privateKey" ? maskKey(resolved[key]) : resolved[key];
|
|
103
|
+
const source = getSource(key, fileData);
|
|
104
|
+
console.log(` ${key}: ${value} (${source})`);
|
|
105
|
+
}
|
|
106
|
+
console.log("");
|
|
107
|
+
}
|
|
108
|
+
function isValidKey(key) {
|
|
109
|
+
return CONFIG_KEYS.includes(key);
|
|
110
|
+
}
|
|
111
|
+
function maskKey(key) {
|
|
112
|
+
if (!key || key.length < 10)
|
|
113
|
+
return key ? "****" : "(not set)";
|
|
114
|
+
return key.slice(0, 6) + "..." + key.slice(-4);
|
|
115
|
+
}
|
|
116
|
+
function getSource(key, fileData) {
|
|
117
|
+
const envVal = process.env[ENV_MAP[key]];
|
|
118
|
+
if (envVal !== undefined && envVal !== "")
|
|
119
|
+
return `env: ${ENV_MAP[key]}`;
|
|
120
|
+
if (fileData[key] !== undefined && fileData[key] !== "")
|
|
121
|
+
return "config file";
|
|
122
|
+
return "default";
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ConfigData } from "./defaults.js";
|
|
2
|
+
export declare function getConfigDir(): string;
|
|
3
|
+
export declare function getConfigPath(): string;
|
|
4
|
+
export declare function readConfigFile(): Promise<Partial<ConfigData>>;
|
|
5
|
+
export declare function writeConfigFile(data: Partial<ConfigData>): Promise<void>;
|
|
6
|
+
export declare function updateConfigFile(key: keyof ConfigData, value: string): Promise<Partial<ConfigData>>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const CONFIG_DIR = join(homedir(), ".dork");
|
|
5
|
+
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
6
|
+
export function getConfigDir() {
|
|
7
|
+
return CONFIG_DIR;
|
|
8
|
+
}
|
|
9
|
+
export function getConfigPath() {
|
|
10
|
+
return CONFIG_PATH;
|
|
11
|
+
}
|
|
12
|
+
export async function readConfigFile() {
|
|
13
|
+
try {
|
|
14
|
+
const raw = await readFile(CONFIG_PATH, "utf-8");
|
|
15
|
+
const parsed = JSON.parse(raw);
|
|
16
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
return parsed;
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
if (err.code === "ENOENT") {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
if (err instanceof SyntaxError) {
|
|
26
|
+
console.error(`Warning: ${CONFIG_PATH} is malformed and was ignored. ` +
|
|
27
|
+
`Run "dork config" to recreate it.`);
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export async function writeConfigFile(data) {
|
|
34
|
+
await mkdir(CONFIG_DIR, { recursive: true });
|
|
35
|
+
await writeFile(CONFIG_PATH, JSON.stringify(data, null, 2) + "\n", "utf-8");
|
|
36
|
+
}
|
|
37
|
+
export async function updateConfigFile(key, value) {
|
|
38
|
+
const existing = await readConfigFile();
|
|
39
|
+
existing[key] = value;
|
|
40
|
+
await writeConfigFile(existing);
|
|
41
|
+
return existing;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=configFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configFile.js","sourceRoot":"","sources":["../../src/config/configFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAA6B,CAAC;IACvC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CACX,YAAY,WAAW,iCAAiC;gBACtD,mCAAmC,CACtC,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAyB;IAEzB,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAqB,EACrB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ConfigData {
|
|
2
|
+
serverUrl: string;
|
|
3
|
+
wsUrl: string;
|
|
4
|
+
privateKey: string;
|
|
5
|
+
/** RPC URL for on-chain deposit transactions */
|
|
6
|
+
rpcUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const CONFIG_KEYS: (keyof ConfigData)[];
|
|
9
|
+
export declare const DEFAULTS: ConfigData;
|
|
10
|
+
export declare const ENV_MAP: Record<keyof ConfigData, string>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const CONFIG_KEYS = [
|
|
2
|
+
"serverUrl",
|
|
3
|
+
"wsUrl",
|
|
4
|
+
"privateKey",
|
|
5
|
+
"rpcUrl",
|
|
6
|
+
];
|
|
7
|
+
export const DEFAULTS = {
|
|
8
|
+
serverUrl: "https://engine.dork.fun",
|
|
9
|
+
wsUrl: "wss://engine.dork.fun",
|
|
10
|
+
privateKey: "",
|
|
11
|
+
rpcUrl: "https://eth.llamarpc.com",
|
|
12
|
+
};
|
|
13
|
+
export const ENV_MAP = {
|
|
14
|
+
serverUrl: "SERVER_URL",
|
|
15
|
+
wsUrl: "SERVER_WS_URL",
|
|
16
|
+
privateKey: "PRIVATE_KEY",
|
|
17
|
+
rpcUrl: "RPC_URL",
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAe;IAClC,SAAS,EAAE,yBAAyB;IACpC,KAAK,EAAE,uBAAuB;IAC9B,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,0BAA0B;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAqC;IACvD,SAAS,EAAE,YAAY;IACvB,KAAK,EAAE,eAAe;IACtB,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,SAAS;CAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ConfigData, CONFIG_KEYS, DEFAULTS, ENV_MAP, } from "./defaults.js";
|
|
2
|
+
export { readConfigFile, writeConfigFile, updateConfigFile, getConfigDir, getConfigPath, } from "./configFile.js";
|
|
3
|
+
export { resolveConfig, setCliOverride } from "./resolve.js";
|
|
4
|
+
export { initConfig, getConfig } from "./runtime.js";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CONFIG_KEYS, DEFAULTS, ENV_MAP, } from "./defaults.js";
|
|
2
|
+
export { readConfigFile, writeConfigFile, updateConfigFile, getConfigDir, getConfigPath, } from "./configFile.js";
|
|
3
|
+
export { resolveConfig, setCliOverride } from "./resolve.js";
|
|
4
|
+
export { initConfig, getConfig } from "./runtime.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,QAAQ,EACR,OAAO,GACR,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DEFAULTS, ENV_MAP, CONFIG_KEYS } from "./defaults.js";
|
|
2
|
+
import { readConfigFile } from "./configFile.js";
|
|
3
|
+
const cliOverrides = {};
|
|
4
|
+
export function setCliOverride(key, value) {
|
|
5
|
+
cliOverrides[key] = value;
|
|
6
|
+
}
|
|
7
|
+
export async function resolveConfig() {
|
|
8
|
+
const fileConfig = await readConfigFile();
|
|
9
|
+
const resolved = { ...DEFAULTS };
|
|
10
|
+
for (const key of CONFIG_KEYS) {
|
|
11
|
+
if (fileConfig[key] !== undefined && fileConfig[key] !== "") {
|
|
12
|
+
resolved[key] = fileConfig[key];
|
|
13
|
+
}
|
|
14
|
+
const envVal = process.env[ENV_MAP[key]];
|
|
15
|
+
if (envVal !== undefined && envVal !== "") {
|
|
16
|
+
resolved[key] = envVal;
|
|
17
|
+
}
|
|
18
|
+
if (cliOverrides[key] !== undefined && cliOverrides[key] !== "") {
|
|
19
|
+
resolved[key] = cliOverrides[key];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return resolved;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,YAAY,GAAwB,EAAE,CAAC;AAE7C,MAAM,UAAU,cAAc,CAC5B,GAAM,EACN,KAAoB;IAEpB,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAe,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE7C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5D,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAE,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACzB,CAAC;QAED,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YAChE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { resolveConfig } from "./resolve.js";
|
|
2
|
+
let _config = null;
|
|
3
|
+
export async function initConfig() {
|
|
4
|
+
_config = await resolveConfig();
|
|
5
|
+
return _config;
|
|
6
|
+
}
|
|
7
|
+
export function getConfig() {
|
|
8
|
+
if (!_config) {
|
|
9
|
+
throw new Error("Config not initialized. Call initConfig() before accessing config.");
|
|
10
|
+
}
|
|
11
|
+
return _config;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,IAAI,OAAO,GAAsB,IAAI,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,uBAAuB;IAC5D,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,qBAAqB;IACzD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;CAC1C,CAAC"}
|
package/dist/index.d.ts
ADDED