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.
Files changed (110) hide show
  1. package/.env.example +6 -0
  2. package/dist/commands/agent.d.ts +2 -0
  3. package/dist/commands/agent.js +163 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/config.d.ts +3 -0
  6. package/dist/commands/config.js +124 -0
  7. package/dist/commands/config.js.map +1 -0
  8. package/dist/config/configFile.d.ts +6 -0
  9. package/dist/config/configFile.js +43 -0
  10. package/dist/config/configFile.js.map +1 -0
  11. package/dist/config/defaults.d.ts +10 -0
  12. package/dist/config/defaults.js +19 -0
  13. package/dist/config/defaults.js.map +1 -0
  14. package/dist/config/index.d.ts +4 -0
  15. package/dist/config/index.js +5 -0
  16. package/dist/config/index.js.map +1 -0
  17. package/dist/config/resolve.d.ts +3 -0
  18. package/dist/config/resolve.js +24 -0
  19. package/dist/config/resolve.js.map +1 -0
  20. package/dist/config/runtime.d.ts +3 -0
  21. package/dist/config/runtime.js +13 -0
  22. package/dist/config/runtime.js.map +1 -0
  23. package/dist/config.d.ts +6 -0
  24. package/dist/config.js +6 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +230 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/transport/httpClient.d.ts +13 -0
  30. package/dist/transport/httpClient.js +91 -0
  31. package/dist/transport/httpClient.js.map +1 -0
  32. package/dist/transport/wsClient.d.ts +30 -0
  33. package/dist/transport/wsClient.js +196 -0
  34. package/dist/transport/wsClient.js.map +1 -0
  35. package/dist/tui/App.d.ts +6 -0
  36. package/dist/tui/App.js +40 -0
  37. package/dist/tui/App.js.map +1 -0
  38. package/dist/tui/components/ChatPanel.d.ts +12 -0
  39. package/dist/tui/components/ChatPanel.js +18 -0
  40. package/dist/tui/components/ChatPanel.js.map +1 -0
  41. package/dist/tui/components/ColoredBoard.d.ts +7 -0
  42. package/dist/tui/components/ColoredBoard.js +73 -0
  43. package/dist/tui/components/ColoredBoard.js.map +1 -0
  44. package/dist/tui/components/PlayerInfo.d.ts +10 -0
  45. package/dist/tui/components/PlayerInfo.js +10 -0
  46. package/dist/tui/components/PlayerInfo.js.map +1 -0
  47. package/dist/tui/components/StatusBar.d.ts +7 -0
  48. package/dist/tui/components/StatusBar.js +13 -0
  49. package/dist/tui/components/StatusBar.js.map +1 -0
  50. package/dist/tui/components/TicTacToeBoard.d.ts +6 -0
  51. package/dist/tui/components/TicTacToeBoard.js +19 -0
  52. package/dist/tui/components/TicTacToeBoard.js.map +1 -0
  53. package/dist/tui/hooks/useEnsNames.d.ts +5 -0
  54. package/dist/tui/hooks/useEnsNames.js +33 -0
  55. package/dist/tui/hooks/useEnsNames.js.map +1 -0
  56. package/dist/tui/screens/GameBoard.d.ts +10 -0
  57. package/dist/tui/screens/GameBoard.js +245 -0
  58. package/dist/tui/screens/GameBoard.js.map +1 -0
  59. package/dist/tui/screens/GameOver.d.ts +10 -0
  60. package/dist/tui/screens/GameOver.js +21 -0
  61. package/dist/tui/screens/GameOver.js.map +1 -0
  62. package/dist/tui/screens/Leaderboard.d.ts +5 -0
  63. package/dist/tui/screens/Leaderboard.js +102 -0
  64. package/dist/tui/screens/Leaderboard.js.map +1 -0
  65. package/dist/tui/screens/Lobby.d.ts +8 -0
  66. package/dist/tui/screens/Lobby.js +113 -0
  67. package/dist/tui/screens/Lobby.js.map +1 -0
  68. package/dist/tui/screens/Matchmaking.d.ts +9 -0
  69. package/dist/tui/screens/Matchmaking.js +66 -0
  70. package/dist/tui/screens/Matchmaking.js.map +1 -0
  71. package/dist/tui/screens/WatchGame.d.ts +7 -0
  72. package/dist/tui/screens/WatchGame.js +99 -0
  73. package/dist/tui/screens/WatchGame.js.map +1 -0
  74. package/dist/tui/screens/WatchList.d.ts +6 -0
  75. package/dist/tui/screens/WatchList.js +49 -0
  76. package/dist/tui/screens/WatchList.js.map +1 -0
  77. package/dist/tui/theme.d.ts +30 -0
  78. package/dist/tui/theme.js +31 -0
  79. package/dist/tui/theme.js.map +1 -0
  80. package/dist/wallet/signer.d.ts +13 -0
  81. package/dist/wallet/signer.js +41 -0
  82. package/dist/wallet/signer.js.map +1 -0
  83. package/package.json +43 -0
  84. package/play-agents.cjs +444 -0
  85. package/src/commands/agent.ts +175 -0
  86. package/src/commands/config.ts +162 -0
  87. package/src/config/configFile.ts +55 -0
  88. package/src/config/defaults.ts +28 -0
  89. package/src/config/index.ts +15 -0
  90. package/src/config/resolve.ts +33 -0
  91. package/src/config/runtime.ts +18 -0
  92. package/src/index.ts +237 -0
  93. package/src/transport/httpClient.ts +104 -0
  94. package/src/transport/wsClient.ts +214 -0
  95. package/src/tui/App.tsx +130 -0
  96. package/src/tui/components/ChatPanel.tsx +53 -0
  97. package/src/tui/components/ColoredBoard.tsx +98 -0
  98. package/src/tui/components/PlayerInfo.tsx +31 -0
  99. package/src/tui/components/StatusBar.tsx +35 -0
  100. package/src/tui/hooks/useEnsNames.ts +35 -0
  101. package/src/tui/screens/GameBoard.tsx +434 -0
  102. package/src/tui/screens/GameOver.tsx +83 -0
  103. package/src/tui/screens/Leaderboard.tsx +196 -0
  104. package/src/tui/screens/Lobby.tsx +197 -0
  105. package/src/tui/screens/Matchmaking.tsx +107 -0
  106. package/src/tui/screens/WatchGame.tsx +182 -0
  107. package/src/tui/screens/WatchList.tsx +99 -0
  108. package/src/tui/theme.ts +31 -0
  109. package/src/wallet/signer.ts +54 -0
  110. package/tsconfig.json +17 -0
package/.env.example ADDED
@@ -0,0 +1,6 @@
1
+ # Server endpoints
2
+ SERVER_URL=https://engine.dork.fun
3
+ SERVER_WS_URL=wss://engine.dork.fun
4
+
5
+ # Wallet identity (Ethereum private key, hex with 0x prefix)
6
+ PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAgentCommand(program: Command): void;
@@ -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,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerConfigCommand(program: Command): void;
3
+ export declare function runWizard(): Promise<void>;
@@ -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,3 @@
1
+ import { ConfigData } from "./defaults.js";
2
+ export declare function setCliOverride<K extends keyof ConfigData>(key: K, value: ConfigData[K]): void;
3
+ export declare function resolveConfig(): Promise<ConfigData>;
@@ -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,3 @@
1
+ import { ConfigData } from "./defaults.js";
2
+ export declare function initConfig(): Promise<ConfigData>;
3
+ export declare function getConfig(): ConfigData;
@@ -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"}
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ serverUrl: string;
3
+ wsUrl: string;
4
+ privateKey: string;
5
+ };
6
+ export default _default;
package/dist/config.js ADDED
@@ -0,0 +1,6 @@
1
+ export default {
2
+ serverUrl: process.env.SERVER_URL || "http://localhost:8080",
3
+ wsUrl: process.env.SERVER_WS_URL || "ws://localhost:8080",
4
+ privateKey: process.env.PRIVATE_KEY || "",
5
+ };
6
+ //# sourceMappingURL=config.js.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};