@truenorth-ai/cli 0.1.0
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/README.md +212 -0
- package/bin/truenorth.js +2 -0
- package/dist/api/client.d.ts +4 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +34 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/tools.d.ts +4 -0
- package/dist/api/tools.d.ts.map +1 -0
- package/dist/api/tools.js +25 -0
- package/dist/api/tools.js.map +1 -0
- package/dist/commands/call.d.ts +3 -0
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +27 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/defi.d.ts +3 -0
- package/dist/commands/defi.d.ts.map +1 -0
- package/dist/commands/defi.js +47 -0
- package/dist/commands/defi.js.map +1 -0
- package/dist/commands/derivatives.d.ts +3 -0
- package/dist/commands/derivatives.d.ts.map +1 -0
- package/dist/commands/derivatives.js +27 -0
- package/dist/commands/derivatives.js.map +1 -0
- package/dist/commands/events.d.ts +3 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +28 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/kol.d.ts +3 -0
- package/dist/commands/kol.d.ts.map +1 -0
- package/dist/commands/kol.js +66 -0
- package/dist/commands/kol.js.map +1 -0
- package/dist/commands/market-info.d.ts +3 -0
- package/dist/commands/market-info.d.ts.map +1 -0
- package/dist/commands/market-info.js +27 -0
- package/dist/commands/market-info.js.map +1 -0
- package/dist/commands/meme.d.ts +3 -0
- package/dist/commands/meme.d.ts.map +1 -0
- package/dist/commands/meme.js +108 -0
- package/dist/commands/meme.js.map +1 -0
- package/dist/commands/perps.d.ts +3 -0
- package/dist/commands/perps.d.ts.map +1 -0
- package/dist/commands/perps.js +36 -0
- package/dist/commands/perps.js.map +1 -0
- package/dist/commands/polymarket.d.ts +3 -0
- package/dist/commands/polymarket.d.ts.map +1 -0
- package/dist/commands/polymarket.js +32 -0
- package/dist/commands/polymarket.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +27 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +66 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/technical.d.ts +3 -0
- package/dist/commands/technical.d.ts.map +1 -0
- package/dist/commands/technical.js +55 -0
- package/dist/commands/technical.js.map +1 -0
- package/dist/commands/tools.d.ts +3 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +68 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/trending.d.ts +3 -0
- package/dist/commands/trending.d.ts.map +1 -0
- package/dist/commands/trending.js +31 -0
- package/dist/commands/trending.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +20 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +221 -0
- package/dist/utils.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
import { loadConfig } from "../config.js";
|
|
5
|
+
export function registerMemeCommand(program) {
|
|
6
|
+
const meme = program
|
|
7
|
+
.command("meme")
|
|
8
|
+
.description("Meme token analysis suite");
|
|
9
|
+
// ── meme discover ──
|
|
10
|
+
const discover = meme.command("discover").description("Discover meme tokens").option("--limit <n>", "Number of results");
|
|
11
|
+
addJsonOption(discover);
|
|
12
|
+
discover.action(wrapAction(async (_opts) => {
|
|
13
|
+
const opts = _opts;
|
|
14
|
+
const config = loadConfig();
|
|
15
|
+
const args = {};
|
|
16
|
+
if (opts.limit)
|
|
17
|
+
args.limit = parseInt(opts.limit, 10);
|
|
18
|
+
else
|
|
19
|
+
args.limit = config.defaultLimit;
|
|
20
|
+
const spinner = startSpinner("Discovering meme tokens…");
|
|
21
|
+
const result = await executeTool("meme_discovery", args);
|
|
22
|
+
spinner.stop();
|
|
23
|
+
if (isJsonMode(opts)) {
|
|
24
|
+
printJson(result);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log(chalk.bold(`\n Meme Discovery ${formatDuration(result.durationMs)}\n`));
|
|
28
|
+
formatResult(result.result);
|
|
29
|
+
console.log();
|
|
30
|
+
}));
|
|
31
|
+
// ── meme safety ──
|
|
32
|
+
const safety = meme.command("safety <address>").description("Meme project safeguards check").option("--network-id <net>", "Network ID (e.g. solana, ethereum)");
|
|
33
|
+
addJsonOption(safety);
|
|
34
|
+
safety.action(wrapAction(async (address, _opts) => {
|
|
35
|
+
const opts = _opts;
|
|
36
|
+
const args = { token_address: address };
|
|
37
|
+
if (opts.networkId)
|
|
38
|
+
args.network_id = opts.networkId;
|
|
39
|
+
const spinner = startSpinner(`Checking safeguards for ${chalk.cyan(address)}…`);
|
|
40
|
+
const result = await executeTool("meme_project_safeguards", args);
|
|
41
|
+
spinner.stop();
|
|
42
|
+
if (isJsonMode(opts)) {
|
|
43
|
+
printJson(result);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.bold(`\n Meme Safety: ${chalk.cyan(address)} ${formatDuration(result.durationMs)}\n`));
|
|
47
|
+
formatResult(result.result);
|
|
48
|
+
console.log();
|
|
49
|
+
}));
|
|
50
|
+
// ── meme pulse ──
|
|
51
|
+
const pulse = meme.command("pulse <address>").description("Meme market pulse").option("--network-id <net>", "Network ID");
|
|
52
|
+
addJsonOption(pulse);
|
|
53
|
+
pulse.action(wrapAction(async (address, _opts) => {
|
|
54
|
+
const opts = _opts;
|
|
55
|
+
const args = { token_address: address };
|
|
56
|
+
if (opts.networkId)
|
|
57
|
+
args.network_id = opts.networkId;
|
|
58
|
+
const spinner = startSpinner(`Fetching market pulse for ${chalk.cyan(address)}…`);
|
|
59
|
+
const result = await executeTool("meme_market_pulse", args);
|
|
60
|
+
spinner.stop();
|
|
61
|
+
if (isJsonMode(opts)) {
|
|
62
|
+
printJson(result);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
console.log(chalk.bold(`\n Meme Market Pulse: ${chalk.cyan(address)} ${formatDuration(result.durationMs)}\n`));
|
|
66
|
+
formatResult(result.result);
|
|
67
|
+
console.log();
|
|
68
|
+
}));
|
|
69
|
+
// ── meme social ──
|
|
70
|
+
const social = meme.command("social <address>").description("Meme social momentum").option("--network-id <net>", "Network ID");
|
|
71
|
+
addJsonOption(social);
|
|
72
|
+
social.action(wrapAction(async (address, _opts) => {
|
|
73
|
+
const opts = _opts;
|
|
74
|
+
const args = { token_address: address };
|
|
75
|
+
if (opts.networkId)
|
|
76
|
+
args.network_id = opts.networkId;
|
|
77
|
+
const spinner = startSpinner(`Analyzing social momentum for ${chalk.cyan(address)}…`);
|
|
78
|
+
const result = await executeTool("meme_social_momentum", args);
|
|
79
|
+
spinner.stop();
|
|
80
|
+
if (isJsonMode(opts)) {
|
|
81
|
+
printJson(result);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
console.log(chalk.bold(`\n Meme Social Momentum: ${chalk.cyan(address)} ${formatDuration(result.durationMs)}\n`));
|
|
85
|
+
formatResult(result.result);
|
|
86
|
+
console.log();
|
|
87
|
+
}));
|
|
88
|
+
// ── meme narrative ──
|
|
89
|
+
const narrative = meme.command("narrative <address>").description("Meme token narrative analysis").option("--network-id <net>", "Network ID");
|
|
90
|
+
addJsonOption(narrative);
|
|
91
|
+
narrative.action(wrapAction(async (address, _opts) => {
|
|
92
|
+
const opts = _opts;
|
|
93
|
+
const args = { token_address: address };
|
|
94
|
+
if (opts.networkId)
|
|
95
|
+
args.network_id = opts.networkId;
|
|
96
|
+
const spinner = startSpinner(`Analyzing narrative for ${chalk.cyan(address)}…`);
|
|
97
|
+
const result = await executeTool("meme_token_narrative", args);
|
|
98
|
+
spinner.stop();
|
|
99
|
+
if (isJsonMode(opts)) {
|
|
100
|
+
printJson(result);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
console.log(chalk.bold(`\n Meme Token Narrative: ${chalk.cyan(address)} ${formatDuration(result.durationMs)}\n`));
|
|
104
|
+
formatResult(result.result);
|
|
105
|
+
console.log();
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=meme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meme.js","sourceRoot":"","sources":["../../src/commands/meme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perps.d.ts","sourceRoot":"","sources":["../../src/commands/perps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B3D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
export function registerPerpsCommand(program) {
|
|
5
|
+
const cmd = program
|
|
6
|
+
.command("risk")
|
|
7
|
+
.description("Liquidation risk analysis")
|
|
8
|
+
.option("--token <token>", "Token name")
|
|
9
|
+
.option("--dir <direction>", "Position direction (long/short)")
|
|
10
|
+
.option("--price <price>", "Entry price")
|
|
11
|
+
.option("--liq <price>", "Liquidation price");
|
|
12
|
+
addJsonOption(cmd);
|
|
13
|
+
cmd.action(wrapAction(async (_opts) => {
|
|
14
|
+
const opts = _opts;
|
|
15
|
+
const args = {};
|
|
16
|
+
if (opts.token)
|
|
17
|
+
args.token = opts.token;
|
|
18
|
+
if (opts.dir)
|
|
19
|
+
args.direction = opts.dir;
|
|
20
|
+
if (opts.price)
|
|
21
|
+
args.entry_price = parseFloat(opts.price);
|
|
22
|
+
if (opts.liq)
|
|
23
|
+
args.liquidation_price = parseFloat(opts.liq);
|
|
24
|
+
const spinner = startSpinner("Analyzing liquidation risk…");
|
|
25
|
+
const result = await executeTool("liquidation_risk", args);
|
|
26
|
+
spinner.stop();
|
|
27
|
+
if (isJsonMode(opts)) {
|
|
28
|
+
printJson(result);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
console.log(chalk.bold(`\n Liquidation Risk ${formatDuration(result.durationMs)}\n`));
|
|
32
|
+
formatResult(result.result);
|
|
33
|
+
console.log();
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=perps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perps.js","sourceRoot":"","sources":["../../src/commands/perps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3H,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;IAEhD,aAAa,CAAC,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC,MAAM,CACR,UAAU,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC;QAEtE,MAAM,OAAO,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polymarket.d.ts","sourceRoot":"","sources":["../../src/commands/polymarket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BhE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
export function registerPolymarketCommand(program) {
|
|
5
|
+
const cmd = program
|
|
6
|
+
.command("polymarket [query]")
|
|
7
|
+
.description("Polymarket prediction market insights")
|
|
8
|
+
.option("--type <type>", "Market type filter (e.g. crypto)")
|
|
9
|
+
.option("--token <token>", "Token to filter by");
|
|
10
|
+
addJsonOption(cmd);
|
|
11
|
+
cmd.action(wrapAction(async (query, _opts) => {
|
|
12
|
+
const opts = _opts;
|
|
13
|
+
const args = {};
|
|
14
|
+
if (query)
|
|
15
|
+
args.query = query;
|
|
16
|
+
if (opts.type)
|
|
17
|
+
args.type = opts.type;
|
|
18
|
+
if (opts.token)
|
|
19
|
+
args.token = opts.token;
|
|
20
|
+
const spinner = startSpinner("Fetching Polymarket insights…");
|
|
21
|
+
const result = await executeTool("polymarket_insight", args);
|
|
22
|
+
spinner.stop();
|
|
23
|
+
if (isJsonMode(opts)) {
|
|
24
|
+
printJson(result);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log(chalk.bold(`\n Polymarket Insights ${formatDuration(result.durationMs)}\n`));
|
|
28
|
+
formatResult(result.result);
|
|
29
|
+
console.log();
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=polymarket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polymarket.js","sourceRoot":"","sources":["../../src/commands/polymarket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3H,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IAEnD,aAAa,CAAC,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC,MAAM,CACR,UAAU,CAAC,KAAK,EAAE,KAAc,EAAE,KAAc,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAe,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAExC,MAAM,OAAO,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyB1D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
export function registerScanCommand(program) {
|
|
5
|
+
const cmd = program
|
|
6
|
+
.command("scan <token>")
|
|
7
|
+
.description("Comprehensive token analysis (combo scan)")
|
|
8
|
+
.option("--token-address <addr>", "Token address (overrides positional)");
|
|
9
|
+
addJsonOption(cmd);
|
|
10
|
+
cmd.action(wrapAction(async (token, _opts) => {
|
|
11
|
+
const opts = _opts;
|
|
12
|
+
const args = {
|
|
13
|
+
token_address: opts.tokenAddress ?? token,
|
|
14
|
+
};
|
|
15
|
+
const spinner = startSpinner(`Scanning ${chalk.cyan(args.token_address)}…`);
|
|
16
|
+
const result = await executeTool("combo_token_analysis", args);
|
|
17
|
+
spinner.stop();
|
|
18
|
+
if (isJsonMode(opts)) {
|
|
19
|
+
printJson(result);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
console.log(chalk.bold(`\n Token Scan: ${chalk.cyan(args.token_address)} ${formatDuration(result.durationMs)}\n`));
|
|
23
|
+
formatResult(result.result);
|
|
24
|
+
console.log();
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3H,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,wBAAwB,EAAE,sCAAsC,CAAC,CAAC;IAE5E,aAAa,CAAC,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC,MAAM,CACR,UAAU,CAAC,KAAK,EAAE,KAAc,EAAE,KAAc,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,MAAM,IAAI,GAA4B;YACpC,aAAa,EAAG,IAAI,CAAC,YAAuB,IAAK,KAAgB;SAClE,CAAC;QAEF,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAuB,CAAC,GAAG,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAuB,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9H,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE5D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
export function registerSearchCommand(program) {
|
|
5
|
+
// ── perf (performance_scanner) ──
|
|
6
|
+
const perf = program
|
|
7
|
+
.command("perf")
|
|
8
|
+
.description("Token performance scanner")
|
|
9
|
+
.option("--top <n>", "Number of top tokens");
|
|
10
|
+
addJsonOption(perf);
|
|
11
|
+
perf.action(wrapAction(async (_opts) => {
|
|
12
|
+
const opts = _opts;
|
|
13
|
+
const args = {};
|
|
14
|
+
if (opts.top)
|
|
15
|
+
args.top = parseInt(opts.top, 10);
|
|
16
|
+
const spinner = startSpinner("Scanning performance…");
|
|
17
|
+
const result = await executeTool("performance_scanner", args);
|
|
18
|
+
spinner.stop();
|
|
19
|
+
if (isJsonMode(opts)) {
|
|
20
|
+
printJson(result);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
console.log(chalk.bold(`\n Performance Scanner ${formatDuration(result.durationMs)}\n`));
|
|
24
|
+
formatResult(result.result);
|
|
25
|
+
console.log();
|
|
26
|
+
}));
|
|
27
|
+
// ── unlock (token_unlock) ──
|
|
28
|
+
const unlock = program
|
|
29
|
+
.command("unlock <token>")
|
|
30
|
+
.description("Token unlock schedule");
|
|
31
|
+
addJsonOption(unlock);
|
|
32
|
+
unlock.action(wrapAction(async (token, _opts) => {
|
|
33
|
+
const opts = _opts;
|
|
34
|
+
const args = { token: token };
|
|
35
|
+
const spinner = startSpinner(`Fetching unlock schedule for ${chalk.cyan(token)}…`);
|
|
36
|
+
const result = await executeTool("token_unlock", args);
|
|
37
|
+
spinner.stop();
|
|
38
|
+
if (isJsonMode(opts)) {
|
|
39
|
+
printJson(result);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.bold(`\n Token Unlock: ${chalk.cyan(token)} ${formatDuration(result.durationMs)}\n`));
|
|
43
|
+
formatResult(result.result);
|
|
44
|
+
console.log();
|
|
45
|
+
}));
|
|
46
|
+
// ── ner (ner_detection) ──
|
|
47
|
+
const ner = program
|
|
48
|
+
.command("ner <text>")
|
|
49
|
+
.description("Named entity recognition for crypto text");
|
|
50
|
+
addJsonOption(ner);
|
|
51
|
+
ner.action(wrapAction(async (text, _opts) => {
|
|
52
|
+
const opts = _opts;
|
|
53
|
+
const args = { text: text };
|
|
54
|
+
const spinner = startSpinner("Detecting entities…");
|
|
55
|
+
const result = await executeTool("ner_detection", args);
|
|
56
|
+
spinner.stop();
|
|
57
|
+
if (isJsonMode(opts)) {
|
|
58
|
+
printJson(result);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
console.log(chalk.bold(`\n NER Detection ${formatDuration(result.durationMs)}\n`));
|
|
62
|
+
formatResult(result.result);
|
|
63
|
+
console.log();
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical.d.ts","sourceRoot":"","sources":["../../src/commands/technical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgE/D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
import { loadConfig } from "../config.js";
|
|
5
|
+
export function registerTechnicalCommand(program) {
|
|
6
|
+
const cmd = program
|
|
7
|
+
.command("ta <token>")
|
|
8
|
+
.description("Technical analysis for a token")
|
|
9
|
+
.option("--timeframe <tf>", "Timeframe (e.g. 1h, 4h, 1d)")
|
|
10
|
+
.option("--token-address <addr>", "Token address (overrides positional)");
|
|
11
|
+
addJsonOption(cmd);
|
|
12
|
+
cmd.action(wrapAction(async (token, _opts) => {
|
|
13
|
+
const opts = _opts;
|
|
14
|
+
const config = loadConfig();
|
|
15
|
+
const args = {
|
|
16
|
+
token_address: opts.tokenAddress ?? token,
|
|
17
|
+
timeframe: opts.timeframe ?? config.defaultTimeframe,
|
|
18
|
+
};
|
|
19
|
+
const spinner = startSpinner(`Analyzing ${chalk.cyan(args.token_address)}…`);
|
|
20
|
+
const result = await executeTool("technical_analysis", args);
|
|
21
|
+
spinner.stop();
|
|
22
|
+
if (isJsonMode(opts)) {
|
|
23
|
+
printJson(result);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(chalk.bold(`\n Technical Analysis: ${chalk.cyan(args.token_address)} ${formatDuration(result.durationMs)}\n`));
|
|
27
|
+
formatResult(result.result);
|
|
28
|
+
console.log();
|
|
29
|
+
}));
|
|
30
|
+
// kline command
|
|
31
|
+
const klineCmd = program
|
|
32
|
+
.command("kline <token>")
|
|
33
|
+
.description("Kline/candlestick analysis for a token")
|
|
34
|
+
.option("--timeframe <tf>", "Timeframe (e.g. 1h, 4h, 1d)");
|
|
35
|
+
addJsonOption(klineCmd);
|
|
36
|
+
klineCmd.action(wrapAction(async (token, _opts) => {
|
|
37
|
+
const opts = _opts;
|
|
38
|
+
const config = loadConfig();
|
|
39
|
+
const args = {
|
|
40
|
+
token_address: token,
|
|
41
|
+
timeframe: opts.timeframe ?? config.defaultTimeframe,
|
|
42
|
+
};
|
|
43
|
+
const spinner = startSpinner(`Fetching kline for ${chalk.cyan(token)}…`);
|
|
44
|
+
const result = await executeTool("kline_analysis", args);
|
|
45
|
+
spinner.stop();
|
|
46
|
+
if (isJsonMode(opts)) {
|
|
47
|
+
printJson(result);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
console.log(chalk.bold(`\n Kline Analysis: ${chalk.cyan(token)} ${formatDuration(result.durationMs)}\n`));
|
|
51
|
+
formatResult(result.result);
|
|
52
|
+
console.log();
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=technical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical.js","sourceRoot":"","sources":["../../src/commands/technical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsE3D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { getToolList } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, makeTable, truncate, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
function getParamCount(tool) {
|
|
5
|
+
return Object.keys(tool.inputSchema.properties ?? {}).length;
|
|
6
|
+
}
|
|
7
|
+
export function registerToolsCommand(program) {
|
|
8
|
+
const cmd = program
|
|
9
|
+
.command("tools")
|
|
10
|
+
.description("List all available analysis tools")
|
|
11
|
+
.option("--verbose", "Show full descriptions and input schemas")
|
|
12
|
+
.option("--filter <keyword>", "Filter tools by name or description");
|
|
13
|
+
addJsonOption(cmd);
|
|
14
|
+
cmd.action(wrapAction(async (_opts) => {
|
|
15
|
+
const opts = _opts;
|
|
16
|
+
const spinner = startSpinner("Fetching tools…");
|
|
17
|
+
const tools = await getToolList();
|
|
18
|
+
spinner.stop();
|
|
19
|
+
let filtered = tools;
|
|
20
|
+
if (opts.filter) {
|
|
21
|
+
const kw = String(opts.filter).toLowerCase();
|
|
22
|
+
filtered = tools.filter((t) => t.name.toLowerCase().includes(kw) || t.description.toLowerCase().includes(kw));
|
|
23
|
+
}
|
|
24
|
+
if (isJsonMode(opts)) {
|
|
25
|
+
printJson(filtered);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (filtered.length === 0) {
|
|
29
|
+
console.log(chalk.yellow("No tools found."));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(chalk.bold(`\n Available Tools (${filtered.length})\n`));
|
|
33
|
+
if (opts.verbose) {
|
|
34
|
+
for (const tool of filtered) {
|
|
35
|
+
console.log(chalk.cyan.bold(` ${tool.name}`));
|
|
36
|
+
console.log(chalk.white(` ${tool.description}`));
|
|
37
|
+
const props = tool.inputSchema.properties ?? {};
|
|
38
|
+
const required = tool.inputSchema.required ?? [];
|
|
39
|
+
const propKeys = Object.keys(props);
|
|
40
|
+
if (propKeys.length > 0) {
|
|
41
|
+
console.log(chalk.dim(" Parameters:"));
|
|
42
|
+
for (const pName of propKeys) {
|
|
43
|
+
const p = props[pName];
|
|
44
|
+
const isReq = required.includes(pName);
|
|
45
|
+
const req = isReq ? chalk.red("*") : " ";
|
|
46
|
+
const def = p.default !== undefined ? chalk.dim(` (default: ${p.default})`) : "";
|
|
47
|
+
const enums = p.enum ? chalk.dim(` [${p.enum.join(", ")}]`) : "";
|
|
48
|
+
const pType = p.type ?? "any";
|
|
49
|
+
console.log(` ${req} ${chalk.yellow(pName)} ${chalk.dim(pType)}${def}${enums}`);
|
|
50
|
+
if (p.description) {
|
|
51
|
+
console.log(` ${chalk.dim(p.description)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
console.log();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const rows = filtered.map((t) => [
|
|
60
|
+
chalk.yellow(t.name),
|
|
61
|
+
truncate(t.description, 60),
|
|
62
|
+
chalk.dim(String(getParamCount(t))),
|
|
63
|
+
]);
|
|
64
|
+
console.log(makeTable(["Tool", "Description", "Params"], rows));
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trending.d.ts","sourceRoot":"","sources":["../../src/commands/trending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B9D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { executeTool } from "../api/tools.js";
|
|
3
|
+
import { startSpinner, formatResult, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption } from "../utils.js";
|
|
4
|
+
import { loadConfig } from "../config.js";
|
|
5
|
+
export function registerTrendingCommand(program) {
|
|
6
|
+
const cmd = program
|
|
7
|
+
.command("trending")
|
|
8
|
+
.description("Discover trending tokens")
|
|
9
|
+
.option("--limit <n>", "Number of results");
|
|
10
|
+
addJsonOption(cmd);
|
|
11
|
+
cmd.action(wrapAction(async (_opts) => {
|
|
12
|
+
const opts = _opts;
|
|
13
|
+
const config = loadConfig();
|
|
14
|
+
const args = {};
|
|
15
|
+
if (opts.limit)
|
|
16
|
+
args.limit = parseInt(opts.limit, 10);
|
|
17
|
+
else
|
|
18
|
+
args.limit = config.defaultLimit;
|
|
19
|
+
const spinner = startSpinner("Discovering trending tokens…");
|
|
20
|
+
const result = await executeTool("trending_discovery", args);
|
|
21
|
+
spinner.stop();
|
|
22
|
+
if (isJsonMode(opts)) {
|
|
23
|
+
printJson(result);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(chalk.bold(`\n Trending Tokens ${formatDuration(result.durationMs)}\n`));
|
|
27
|
+
formatResult(result.result);
|
|
28
|
+
console.log();
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=trending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trending.js","sourceRoot":"","sources":["../../src/commands/trending.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAE9C,aAAa,CAAC,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC,MAAM,CACR,UAAU,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;;YAC3D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QAEtC,MAAM,OAAO,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3D,wBAAgB,UAAU,IAAI,QAAQ,CAUrC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAK1D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { DEFAULT_CONFIG } from "./types.js";
|
|
5
|
+
const CONFIG_DIR = join(homedir(), ".truenorth");
|
|
6
|
+
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
7
|
+
export function loadConfig() {
|
|
8
|
+
try {
|
|
9
|
+
if (existsSync(CONFIG_FILE)) {
|
|
10
|
+
const raw = readFileSync(CONFIG_FILE, "utf-8");
|
|
11
|
+
return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Fall through to defaults
|
|
16
|
+
}
|
|
17
|
+
return { ...DEFAULT_CONFIG };
|
|
18
|
+
}
|
|
19
|
+
export function saveConfig(config) {
|
|
20
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
21
|
+
const current = loadConfig();
|
|
22
|
+
const merged = { ...current, ...config };
|
|
23
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2) + "\n");
|
|
24
|
+
}
|
|
25
|
+
export function getBaseUrl() {
|
|
26
|
+
return process.env.TN_BASE_URL ?? loadConfig().baseUrl;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB;IAClD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IACzC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC;AACzD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|