@ironwallet/mcp-server 1.0.0 → 1.0.2
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 +16 -9
- package/assets/logo-mark.png +0 -0
- package/dist/api/swap.d.ts +1 -1
- package/dist/api/swap.js +1 -1
- package/dist/config.d.ts +16 -12
- package/dist/config.js +59 -31
- package/dist/config.js.map +1 -1
- package/dist/device-fingerprint.d.ts +18 -0
- package/dist/device-fingerprint.js +81 -0
- package/dist/device-fingerprint.js.map +1 -0
- package/dist/keystore/store.js +3 -7
- package/dist/keystore/store.js.map +1 -1
- package/dist/local-secrets.d.ts +2 -2
- package/dist/local-secrets.js +5 -9
- package/dist/local-secrets.js.map +1 -1
- package/dist/networks.d.ts +5 -0
- package/dist/networks.js +21 -0
- package/dist/networks.js.map +1 -0
- package/dist/policy.d.ts +3 -1
- package/dist/policy.js +6 -0
- package/dist/policy.js.map +1 -1
- package/dist/qr/deposit-qr.d.ts +17 -0
- package/dist/qr/deposit-qr.js +203 -0
- package/dist/qr/deposit-qr.js.map +1 -0
- package/dist/qr/font.d.ts +6 -0
- package/dist/qr/font.js +79 -0
- package/dist/qr/font.js.map +1 -0
- package/dist/restrict-private-file.d.ts +9 -0
- package/dist/restrict-private-file.js +53 -0
- package/dist/restrict-private-file.js.map +1 -0
- package/dist/server.js +14 -8
- package/dist/server.js.map +1 -1
- package/dist/tools/definitions.d.ts +40 -0
- package/dist/tools/definitions.js +219 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/helpers.d.ts +20 -6
- package/dist/tools/helpers.js +10 -4
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/swap.d.ts +1 -1
- package/dist/tools/swap.js +9 -75
- package/dist/tools/swap.js.map +1 -1
- package/dist/tools/transfer.d.ts +1 -1
- package/dist/tools/transfer.js +7 -54
- package/dist/tools/transfer.js.map +1 -1
- package/dist/tools/wallets.js +56 -24
- package/dist/tools/wallets.js.map +1 -1
- package/dist/wallet/derive.d.ts +1 -1
- package/dist/wallet/derive.js +1 -1
- package/dist/web/manager.js +104 -34
- package/dist/web/manager.js.map +1 -1
- package/package.json +43 -4
- package/server.json +23 -0
- package/tools.json +573 -0
package/dist/policy.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* When `policy.enabled` is set, both `send_transfer` and `execute_swap` check it
|
|
4
4
|
* before signing.
|
|
5
5
|
*/
|
|
6
|
-
import type { WalletEntry } from "./keystore/types.js";
|
|
6
|
+
import type { WalletEntry, WalletPolicy } from "./keystore/types.js";
|
|
7
7
|
import type { NetworkId } from "./config.js";
|
|
8
8
|
export interface PolicyCheck {
|
|
9
9
|
kind: "transfer" | "swap";
|
|
@@ -18,5 +18,7 @@ export interface PolicyCheck {
|
|
|
18
18
|
* Returns < 0 if a < b, 0 if equal, > 0 if a > b.
|
|
19
19
|
*/
|
|
20
20
|
export declare function compareDecimalAmount(a: string, b: string): number;
|
|
21
|
+
/** Always-present policy for `list_wallets` (`enabled: false` when unset). */
|
|
22
|
+
export declare function listWalletPolicy(policy: WalletPolicy | undefined): WalletPolicy;
|
|
21
23
|
/** Throws with a clear message if the operation violates the wallet policy. */
|
|
22
24
|
export declare function enforcePolicy(entry: WalletEntry, check: PolicyCheck): void;
|
package/dist/policy.js
CHANGED
|
@@ -29,6 +29,12 @@ function parseNonNegativeDecimal(raw) {
|
|
|
29
29
|
const [intPart, fracPart = ""] = t.split(".");
|
|
30
30
|
return { int: BigInt(intPart), frac: fracPart };
|
|
31
31
|
}
|
|
32
|
+
/** Always-present policy for `list_wallets` (`enabled: false` when unset). */
|
|
33
|
+
export function listWalletPolicy(policy) {
|
|
34
|
+
if (!policy || !policy.enabled)
|
|
35
|
+
return { enabled: false };
|
|
36
|
+
return policy;
|
|
37
|
+
}
|
|
32
38
|
/** Throws with a clear message if the operation violates the wallet policy. */
|
|
33
39
|
export function enforcePolicy(entry, check) {
|
|
34
40
|
const policy = entry.policy;
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deposit QR: payment URI in the code, IW mark in the middle, address under it.
|
|
3
|
+
*/
|
|
4
|
+
import { type NetworkId } from "../config.js";
|
|
5
|
+
export interface DepositTarget {
|
|
6
|
+
network: NetworkId;
|
|
7
|
+
address: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function depositPayload(network: string, address: string): string;
|
|
10
|
+
/** Local manager PNG for one deposit target (`ensureManager()` base URL). */
|
|
11
|
+
export declare function depositQrUrl(baseUrl: string, network: string, address: string): string;
|
|
12
|
+
/** One row per unique address; EVM chains share a key so they collapse. */
|
|
13
|
+
export declare function uniqueDepositTargets(addresses: Record<string, string>): DepositTarget[];
|
|
14
|
+
/** Targets for one QR (a named network) or one per unique address. */
|
|
15
|
+
export declare function selectDepositTargets(addresses: Record<string, string>, network?: NetworkId): DepositTarget[];
|
|
16
|
+
export declare function walletOwnsDeposit(addresses: Record<string, string>, network: string, address: string): boolean;
|
|
17
|
+
export declare function renderDepositQrPng(address: string, payload: string): Promise<Buffer>;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deposit QR: payment URI in the code, IW mark in the middle, address under it.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import QRCode from "qrcode";
|
|
8
|
+
import { PNG } from "pngjs";
|
|
9
|
+
import { ALL_NETWORKS, isEvmNetwork } from "../config.js";
|
|
10
|
+
import { GLYPH_H, GLYPH_W, glyph } from "./font.js";
|
|
11
|
+
const QR_PX = 440;
|
|
12
|
+
const TEXT_SCALE = 2;
|
|
13
|
+
const FOOTER_PX = 56;
|
|
14
|
+
const LOGO_RATIO = 0.2;
|
|
15
|
+
const TEXT = [0x1b, 0x20, 0x28, 0xff];
|
|
16
|
+
const WHITE = [0xff, 0xff, 0xff, 0xff];
|
|
17
|
+
const PAGE = [0xfa, 0xfa, 0xfa, 0xff];
|
|
18
|
+
export function depositPayload(network, address) {
|
|
19
|
+
const a = address.trim();
|
|
20
|
+
switch (network) {
|
|
21
|
+
case "bitcoin":
|
|
22
|
+
return `bitcoin:${a}`;
|
|
23
|
+
case "litecoin":
|
|
24
|
+
return `litecoin:${a}`;
|
|
25
|
+
case "doge":
|
|
26
|
+
return `dogecoin:${a}`;
|
|
27
|
+
case "tron":
|
|
28
|
+
return `tron:${a}`;
|
|
29
|
+
case "solana":
|
|
30
|
+
return `solana:${a}`;
|
|
31
|
+
case "ton":
|
|
32
|
+
return `ton://transfer/${encodeURIComponent(a)}`;
|
|
33
|
+
case "xrp":
|
|
34
|
+
return `xrpl:${a}`;
|
|
35
|
+
default:
|
|
36
|
+
if (isEvmNetwork(network))
|
|
37
|
+
return `ethereum:${a}`;
|
|
38
|
+
return a;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Local manager PNG for one deposit target (`ensureManager()` base URL). */
|
|
42
|
+
export function depositQrUrl(baseUrl, network, address) {
|
|
43
|
+
const root = baseUrl.replace(/\/$/, "");
|
|
44
|
+
return `${root}/qr?network=${encodeURIComponent(network)}&address=${encodeURIComponent(address)}`;
|
|
45
|
+
}
|
|
46
|
+
/** One row per unique address; EVM chains share a key so they collapse. */
|
|
47
|
+
export function uniqueDepositTargets(addresses) {
|
|
48
|
+
const seen = new Set();
|
|
49
|
+
const out = [];
|
|
50
|
+
const order = [
|
|
51
|
+
...ALL_NETWORKS,
|
|
52
|
+
...Object.keys(addresses).filter((k) => !ALL_NETWORKS.includes(k)),
|
|
53
|
+
];
|
|
54
|
+
for (const net of order) {
|
|
55
|
+
const address = addresses[net];
|
|
56
|
+
if (!address || seen.has(address))
|
|
57
|
+
continue;
|
|
58
|
+
seen.add(address);
|
|
59
|
+
out.push({ network: net, address });
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
/** Targets for one QR (a named network) or one per unique address. */
|
|
64
|
+
export function selectDepositTargets(addresses, network) {
|
|
65
|
+
if (network) {
|
|
66
|
+
const address = addresses[network];
|
|
67
|
+
if (!address)
|
|
68
|
+
throw new Error(`Wallet has no ${network} address.`);
|
|
69
|
+
return [{ network, address }];
|
|
70
|
+
}
|
|
71
|
+
const targets = uniqueDepositTargets(addresses);
|
|
72
|
+
if (!targets.length)
|
|
73
|
+
throw new Error("Wallet has no addresses.");
|
|
74
|
+
return targets;
|
|
75
|
+
}
|
|
76
|
+
export function walletOwnsDeposit(addresses, network, address) {
|
|
77
|
+
return Boolean(network && address && addresses[network] === address);
|
|
78
|
+
}
|
|
79
|
+
function logoPath() {
|
|
80
|
+
return join(dirname(fileURLToPath(import.meta.url)), "..", "..", "assets", "logo-mark.png");
|
|
81
|
+
}
|
|
82
|
+
function setPx(img, x, y, rgba) {
|
|
83
|
+
if (x < 0 || y < 0 || x >= img.width || y >= img.height)
|
|
84
|
+
return;
|
|
85
|
+
const i = (img.width * y + x) << 2;
|
|
86
|
+
img.data[i] = rgba[0];
|
|
87
|
+
img.data[i + 1] = rgba[1];
|
|
88
|
+
img.data[i + 2] = rgba[2];
|
|
89
|
+
img.data[i + 3] = rgba[3];
|
|
90
|
+
}
|
|
91
|
+
function fillRect(img, x, y, w, h, rgba) {
|
|
92
|
+
for (let yy = y; yy < y + h; yy++) {
|
|
93
|
+
for (let xx = x; xx < x + w; xx++)
|
|
94
|
+
setPx(img, xx, yy, rgba);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function fillRoundRect(img, x, y, w, h, r, rgba) {
|
|
98
|
+
const rr = Math.max(0, Math.min(r, Math.floor(Math.min(w, h) / 2)));
|
|
99
|
+
for (let yy = y; yy < y + h; yy++) {
|
|
100
|
+
for (let xx = x; xx < x + w; xx++) {
|
|
101
|
+
const dx = xx < x + rr ? x + rr - xx : xx >= x + w - rr ? xx - (x + w - 1 - rr) : 0;
|
|
102
|
+
const dy = yy < y + rr ? y + rr - yy : yy >= y + h - rr ? yy - (y + h - 1 - rr) : 0;
|
|
103
|
+
if (dx && dy && dx * dx + dy * dy > rr * rr)
|
|
104
|
+
continue;
|
|
105
|
+
setPx(img, xx, yy, rgba);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function blitScaled(dst, src, dx, dy, dw, dh) {
|
|
110
|
+
for (let y = 0; y < dh; y++) {
|
|
111
|
+
const sy = Math.min(src.height - 1, Math.floor((y * src.height) / dh));
|
|
112
|
+
for (let x = 0; x < dw; x++) {
|
|
113
|
+
const sx = Math.min(src.width - 1, Math.floor((x * src.width) / dw));
|
|
114
|
+
const si = (src.width * sy + sx) << 2;
|
|
115
|
+
const a = src.data[si + 3];
|
|
116
|
+
if (a === 0)
|
|
117
|
+
continue;
|
|
118
|
+
if (a === 255) {
|
|
119
|
+
setPx(dst, dx + x, dy + y, [
|
|
120
|
+
src.data[si],
|
|
121
|
+
src.data[si + 1],
|
|
122
|
+
src.data[si + 2],
|
|
123
|
+
255,
|
|
124
|
+
]);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const di = (dst.width * (dy + y) + (dx + x)) << 2;
|
|
128
|
+
const inv = 255 - a;
|
|
129
|
+
dst.data[di] = (src.data[si] * a + dst.data[di] * inv) / 255;
|
|
130
|
+
dst.data[di + 1] = (src.data[si + 1] * a + dst.data[di + 1] * inv) / 255;
|
|
131
|
+
dst.data[di + 2] = (src.data[si + 2] * a + dst.data[di + 2] * inv) / 255;
|
|
132
|
+
dst.data[di + 3] = 255;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function wrapText(text, maxChars) {
|
|
137
|
+
if (text.length <= maxChars)
|
|
138
|
+
return [text];
|
|
139
|
+
const lines = [];
|
|
140
|
+
for (let i = 0; i < text.length; i += maxChars)
|
|
141
|
+
lines.push(text.slice(i, i + maxChars));
|
|
142
|
+
return lines;
|
|
143
|
+
}
|
|
144
|
+
function drawTextLine(img, text, x, y, scale) {
|
|
145
|
+
let cx = x;
|
|
146
|
+
for (const ch of text) {
|
|
147
|
+
const rows = glyph(ch);
|
|
148
|
+
for (let gy = 0; gy < GLYPH_H; gy++) {
|
|
149
|
+
const bits = rows[gy] ?? 0;
|
|
150
|
+
for (let gx = 0; gx < GLYPH_W; gx++) {
|
|
151
|
+
if (bits & (1 << (GLYPH_W - 1 - gx))) {
|
|
152
|
+
fillRect(img, cx + gx * scale, y + gy * scale, scale, scale, TEXT);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
cx += (GLYPH_W + 1) * scale;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function drawCenteredLines(img, text, top, scale) {
|
|
160
|
+
const charW = (GLYPH_W + 1) * scale;
|
|
161
|
+
const maxChars = Math.max(8, Math.floor((img.width - 24) / charW));
|
|
162
|
+
const lines = wrapText(text, maxChars);
|
|
163
|
+
const lineH = (GLYPH_H + 2) * scale;
|
|
164
|
+
let y = top;
|
|
165
|
+
for (const line of lines) {
|
|
166
|
+
const w = line.length * charW - scale;
|
|
167
|
+
const x = Math.max(12, Math.floor((img.width - w) / 2));
|
|
168
|
+
drawTextLine(img, line, x, y, scale);
|
|
169
|
+
y += lineH;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export async function renderDepositQrPng(address, payload) {
|
|
173
|
+
const qrBuf = await QRCode.toBuffer(payload, {
|
|
174
|
+
errorCorrectionLevel: "H",
|
|
175
|
+
type: "png",
|
|
176
|
+
margin: 2,
|
|
177
|
+
width: QR_PX,
|
|
178
|
+
color: { dark: "#1B2028", light: "#FFFFFF" },
|
|
179
|
+
});
|
|
180
|
+
const qr = PNG.sync.read(qrBuf);
|
|
181
|
+
const logo = PNG.sync.read(readFileSync(logoPath()));
|
|
182
|
+
const charW = (GLYPH_W + 1) * TEXT_SCALE;
|
|
183
|
+
const width = Math.max(QR_PX, address.length * charW + 24);
|
|
184
|
+
const height = QR_PX + FOOTER_PX;
|
|
185
|
+
const out = new PNG({ width, height });
|
|
186
|
+
fillRect(out, 0, 0, out.width, out.height, PAGE);
|
|
187
|
+
const ox = Math.floor((width - qr.width) / 2);
|
|
188
|
+
for (let y = 0; y < qr.height; y++) {
|
|
189
|
+
for (let x = 0; x < qr.width; x++) {
|
|
190
|
+
const si = (qr.width * y + x) << 2;
|
|
191
|
+
setPx(out, ox + x, y, [qr.data[si], qr.data[si + 1], qr.data[si + 2], 255]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const logoBox = Math.round(QR_PX * LOGO_RATIO);
|
|
195
|
+
const pad = Math.round(logoBox * 0.18);
|
|
196
|
+
const lx = ox + Math.round((QR_PX - logoBox) / 2);
|
|
197
|
+
const ly = Math.round((QR_PX - logoBox) / 2);
|
|
198
|
+
fillRoundRect(out, lx - pad, ly - pad, logoBox + pad * 2, logoBox + pad * 2, pad, WHITE);
|
|
199
|
+
blitScaled(out, logo, lx, ly, logoBox, logoBox);
|
|
200
|
+
drawCenteredLines(out, address, QR_PX + 18, TEXT_SCALE);
|
|
201
|
+
return PNG.sync.write(out);
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=deposit-qr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deposit-qr.js","sourceRoot":"","sources":["../../src/qr/deposit-qr.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAC/C,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAChD,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAO/C,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAe;IAC7D,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,YAAY,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,EAAE,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,kBAAkB,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB;YACE,IAAI,YAAY,CAAC,OAAoB,CAAC;gBAAE,OAAO,YAAY,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAe,EAAE,OAAe;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,GAAG,IAAI,eAAe,kBAAkB,CAAC,OAAO,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAClC,SAAiC;IAEjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG;QACZ,GAAG,YAAY;QACf,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAc,CAAC,CAAC;KAChF,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,SAAS;QAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,oBAAoB,CAClC,SAAiC,EACjC,OAAmB;IAEnB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,WAAW,CAAC,CAAC;QACnE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAAiC,EACjC,OAAe,EACf,OAAe;IAEf,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,KAAK,CAAC,GAAQ,EAAE,CAAS,EAAE,CAAS,EAAE,IAAuB;IACpE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO;IAChE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,QAAQ,CACf,GAAQ,EACR,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,IAAuB;IAEvB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QAClC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE;YAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,GAAQ,EACR,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,IAAuB;IAEvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QAClC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;gBAAE,SAAS;YACtD,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IACpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;oBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBAChB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBAChB,GAAG;iBACJ,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB;IAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACxF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa;IAC/E,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;gBACpC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QACD,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAW,EAAE,KAAa;IAC3E,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACpC,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC,IAAI,KAAK,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAe;IACvE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;QAC3C,oBAAoB,EAAE,GAAG;QACzB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KAC7C,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,aAAa,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACzF,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAExD,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/qr/font.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 5×7 bitmap glyphs for deposit-QR captions. Bits 4..0 are left..right.
|
|
3
|
+
*/
|
|
4
|
+
const G = {
|
|
5
|
+
" ": [0, 0, 0, 0, 0, 0, 0],
|
|
6
|
+
"-": [0, 0, 0, 0b01110, 0, 0, 0],
|
|
7
|
+
"_": [0, 0, 0, 0, 0, 0, 0b11111],
|
|
8
|
+
".": [0, 0, 0, 0, 0, 0b00100, 0],
|
|
9
|
+
":": [0, 0b00100, 0, 0, 0b00100, 0, 0],
|
|
10
|
+
"/": [0b00001, 0b00010, 0b00010, 0b00100, 0b01000, 0b01000, 0b10000],
|
|
11
|
+
"0": [0b01110, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b01110],
|
|
12
|
+
"1": [0b00100, 0b01100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110],
|
|
13
|
+
"2": [0b01110, 0b10001, 0b00001, 0b00010, 0b00100, 0b01000, 0b11111],
|
|
14
|
+
"3": [0b01110, 0b10001, 0b00001, 0b00110, 0b00001, 0b10001, 0b01110],
|
|
15
|
+
"4": [0b00010, 0b00110, 0b01010, 0b10010, 0b11111, 0b00010, 0b00010],
|
|
16
|
+
"5": [0b11111, 0b10000, 0b11110, 0b00001, 0b00001, 0b10001, 0b01110],
|
|
17
|
+
"6": [0b00110, 0b01000, 0b10000, 0b11110, 0b10001, 0b10001, 0b01110],
|
|
18
|
+
"7": [0b11111, 0b00001, 0b00010, 0b00100, 0b01000, 0b01000, 0b01000],
|
|
19
|
+
"8": [0b01110, 0b10001, 0b10001, 0b01110, 0b10001, 0b10001, 0b01110],
|
|
20
|
+
"9": [0b01110, 0b10001, 0b10001, 0b01111, 0b00001, 0b00010, 0b01100],
|
|
21
|
+
A: [0b01110, 0b10001, 0b10001, 0b11111, 0b10001, 0b10001, 0b10001],
|
|
22
|
+
B: [0b11110, 0b10001, 0b10001, 0b11110, 0b10001, 0b10001, 0b11110],
|
|
23
|
+
C: [0b01110, 0b10001, 0b10000, 0b10000, 0b10000, 0b10001, 0b01110],
|
|
24
|
+
D: [0b11110, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b11110],
|
|
25
|
+
E: [0b11111, 0b10000, 0b10000, 0b11110, 0b10000, 0b10000, 0b11111],
|
|
26
|
+
F: [0b11111, 0b10000, 0b10000, 0b11110, 0b10000, 0b10000, 0b10000],
|
|
27
|
+
G: [0b01110, 0b10001, 0b10000, 0b10111, 0b10001, 0b10001, 0b01110],
|
|
28
|
+
H: [0b10001, 0b10001, 0b10001, 0b11111, 0b10001, 0b10001, 0b10001],
|
|
29
|
+
I: [0b01110, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110],
|
|
30
|
+
J: [0b00001, 0b00001, 0b00001, 0b00001, 0b10001, 0b10001, 0b01110],
|
|
31
|
+
K: [0b10001, 0b10010, 0b10100, 0b11000, 0b10100, 0b10010, 0b10001],
|
|
32
|
+
L: [0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b11111],
|
|
33
|
+
M: [0b10001, 0b11011, 0b10101, 0b10101, 0b10001, 0b10001, 0b10001],
|
|
34
|
+
N: [0b10001, 0b11001, 0b10101, 0b10011, 0b10001, 0b10001, 0b10001],
|
|
35
|
+
O: [0b01110, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01110],
|
|
36
|
+
P: [0b11110, 0b10001, 0b10001, 0b11110, 0b10000, 0b10000, 0b10000],
|
|
37
|
+
Q: [0b01110, 0b10001, 0b10001, 0b10001, 0b10101, 0b10010, 0b01101],
|
|
38
|
+
R: [0b11110, 0b10001, 0b10001, 0b11110, 0b10100, 0b10010, 0b10001],
|
|
39
|
+
S: [0b01111, 0b10000, 0b10000, 0b01110, 0b00001, 0b00001, 0b11110],
|
|
40
|
+
T: [0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100],
|
|
41
|
+
U: [0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01110],
|
|
42
|
+
V: [0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01010, 0b00100],
|
|
43
|
+
W: [0b10001, 0b10001, 0b10001, 0b10101, 0b10101, 0b10101, 0b01010],
|
|
44
|
+
X: [0b10001, 0b10001, 0b01010, 0b00100, 0b01010, 0b10001, 0b10001],
|
|
45
|
+
Y: [0b10001, 0b10001, 0b01010, 0b00100, 0b00100, 0b00100, 0b00100],
|
|
46
|
+
Z: [0b11111, 0b00001, 0b00010, 0b00100, 0b01000, 0b10000, 0b11111],
|
|
47
|
+
a: [0, 0, 0b01110, 0b00001, 0b01111, 0b10001, 0b01111],
|
|
48
|
+
b: [0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b10001, 0b11110],
|
|
49
|
+
c: [0, 0, 0b01110, 0b10000, 0b10000, 0b10001, 0b01110],
|
|
50
|
+
d: [0b00001, 0b00001, 0b01111, 0b10001, 0b10001, 0b10001, 0b01111],
|
|
51
|
+
e: [0, 0, 0b01110, 0b10001, 0b11111, 0b10000, 0b01110],
|
|
52
|
+
f: [0b00110, 0b01001, 0b01000, 0b11100, 0b01000, 0b01000, 0b01000],
|
|
53
|
+
g: [0, 0, 0b01111, 0b10001, 0b01111, 0b00001, 0b01110],
|
|
54
|
+
h: [0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b10001, 0b10001],
|
|
55
|
+
i: [0b00100, 0, 0b01100, 0b00100, 0b00100, 0b00100, 0b01110],
|
|
56
|
+
j: [0b00010, 0, 0b00110, 0b00010, 0b00010, 0b10010, 0b01100],
|
|
57
|
+
k: [0b10000, 0b10000, 0b10010, 0b10100, 0b11000, 0b10100, 0b10010],
|
|
58
|
+
l: [0b01100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110],
|
|
59
|
+
m: [0, 0, 0b11010, 0b10101, 0b10101, 0b10101, 0b10101],
|
|
60
|
+
n: [0, 0, 0b11110, 0b10001, 0b10001, 0b10001, 0b10001],
|
|
61
|
+
o: [0, 0, 0b01110, 0b10001, 0b10001, 0b10001, 0b01110],
|
|
62
|
+
p: [0, 0, 0b11110, 0b10001, 0b11110, 0b10000, 0b10000],
|
|
63
|
+
q: [0, 0, 0b01111, 0b10001, 0b01111, 0b00001, 0b00001],
|
|
64
|
+
r: [0, 0, 0b10110, 0b11000, 0b10000, 0b10000, 0b10000],
|
|
65
|
+
s: [0, 0, 0b01111, 0b10000, 0b01110, 0b00001, 0b11110],
|
|
66
|
+
t: [0b01000, 0b01000, 0b11100, 0b01000, 0b01000, 0b01001, 0b00110],
|
|
67
|
+
u: [0, 0, 0b10001, 0b10001, 0b10001, 0b10011, 0b01101],
|
|
68
|
+
v: [0, 0, 0b10001, 0b10001, 0b10001, 0b01010, 0b00100],
|
|
69
|
+
w: [0, 0, 0b10001, 0b10001, 0b10101, 0b10101, 0b01010],
|
|
70
|
+
x: [0, 0, 0b10001, 0b01010, 0b00100, 0b01010, 0b10001],
|
|
71
|
+
y: [0, 0, 0b10001, 0b10001, 0b01111, 0b00001, 0b01110],
|
|
72
|
+
z: [0, 0, 0b11111, 0b00010, 0b00100, 0b01000, 0b11111],
|
|
73
|
+
};
|
|
74
|
+
export const GLYPH_W = 5;
|
|
75
|
+
export const GLYPH_H = 7;
|
|
76
|
+
export function glyph(ch) {
|
|
77
|
+
return G[ch] ?? G["-"] ?? [0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111];
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=font.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font.js","sourceRoot":"","sources":["../../src/qr/font.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,GAA6B;IAClC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAC5D,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAC5D,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AAEzB,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5F,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner-only access for files under ~/.ironwallet-mcp/.
|
|
3
|
+
* POSIX: chmod 0600. Windows: NTFS ACL via icacls (chmod is a no-op there).
|
|
4
|
+
* Best-effort: a failed chmod/icacls must not block keystore or secret writes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function windowsIcaclsPath(systemRoot?: string | undefined): string;
|
|
7
|
+
export declare function windowsIcaclsArgs(filePath: string, username: string): string[];
|
|
8
|
+
export declare function resolveWindowsUsername(osUsername?: string | undefined, envUsername?: string | undefined): string;
|
|
9
|
+
export declare function restrictPrivateFile(filePath: string): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner-only access for files under ~/.ironwallet-mcp/.
|
|
3
|
+
* POSIX: chmod 0600. Windows: NTFS ACL via icacls (chmod is a no-op there).
|
|
4
|
+
* Best-effort: a failed chmod/icacls must not block keystore or secret writes.
|
|
5
|
+
*/
|
|
6
|
+
import { execFileSync } from "node:child_process";
|
|
7
|
+
import { chmodSync } from "node:fs";
|
|
8
|
+
import { userInfo } from "node:os";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
export function windowsIcaclsPath(systemRoot = process.env.SystemRoot || process.env.WINDIR) {
|
|
11
|
+
return join(systemRoot || "C:\\Windows", "System32", "icacls.exe");
|
|
12
|
+
}
|
|
13
|
+
export function windowsIcaclsArgs(filePath, username) {
|
|
14
|
+
return [filePath, "/inheritance:r", "/grant:r", `${username}:F`];
|
|
15
|
+
}
|
|
16
|
+
export function resolveWindowsUsername(osUsername = safeOsUsername(), envUsername = process.env.USERNAME) {
|
|
17
|
+
const fromOs = osUsername?.trim();
|
|
18
|
+
if (fromOs)
|
|
19
|
+
return fromOs;
|
|
20
|
+
return envUsername?.trim() ?? "";
|
|
21
|
+
}
|
|
22
|
+
function safeOsUsername() {
|
|
23
|
+
try {
|
|
24
|
+
return userInfo().username;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function restrictPrivateFile(filePath) {
|
|
31
|
+
if (process.platform === "win32") {
|
|
32
|
+
try {
|
|
33
|
+
const username = resolveWindowsUsername();
|
|
34
|
+
if (!username)
|
|
35
|
+
return;
|
|
36
|
+
execFileSync(windowsIcaclsPath(), windowsIcaclsArgs(filePath, username), {
|
|
37
|
+
windowsHide: true,
|
|
38
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// missing icacls, AppLocker, Controlled Folder Access, bad account name
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
chmodSync(filePath, 0o600);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// best effort on filesystems without POSIX perms
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=restrict-private-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restrict-private-file.js","sourceRoot":"","sources":["../src/restrict-private-file.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,iBAAiB,CAC/B,aAAiC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;IAE7E,OAAO,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAClE,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,QAAQ,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,aAAiC,cAAc,EAAE,EACjD,cAAkC,OAAO,CAAC,GAAG,CAAC,QAAQ;IAEtD,MAAM,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,YAAY,CAAC,iBAAiB,EAAE,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACvE,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -10,27 +10,33 @@ import { getConfig, packageVersion } from "./config.js";
|
|
|
10
10
|
import { logStartupBanner } from "./log.js";
|
|
11
11
|
export async function serve() {
|
|
12
12
|
const cfg = getConfig();
|
|
13
|
+
const instructions = [
|
|
14
|
+
"Non-custodial IronWallet. Seed phrases stay encrypted on the host and never leave this machine. The agent can retrieve balances, sign locally, transfer tokens, and swap across 10+ networks. There is no extra confirmation UI. Prefer a dedicated wallet with limited balance.",
|
|
15
|
+
"Never print, request, or invent recovery phrases or private keys. No tool accepts or returns a seed. Create/import/backup only via create_wallets backup_url or open_wallet_manager in the local browser.",
|
|
16
|
+
"If there is no wallet yet, create_wallets or open_wallet_manager first.",
|
|
17
|
+
"Deposit QR: get_deposit_qr (pass network for one chain). Try to show the PNG in chat. If the host does not render it, open qr_url in the local browser and give the address. The wallet manager also has a QR button next to each address.",
|
|
18
|
+
"Transfer: list_wallets / get_balance → estimate_transfer (optional) → send_transfer. On timeout poll get_operation_status; do not resubmit blindly. send_transfer may reduce the amount so the fee fits.",
|
|
19
|
+
"Swap: list_swap_networks → list_swap_assets (copy network/symbol/address/decimals from the catalog; do not invent token addresses; omit address only for native coins) → estimate_swap or execute_swap. Quotes expire. maxMode: true sells as much as the service allows. After execute, poll get_swap_status; if execute times out, poll before retrying.",
|
|
20
|
+
];
|
|
21
|
+
if (cfg.readOnly) {
|
|
22
|
+
instructions.push("This server is read-only (IW_READ_ONLY). send_transfer and execute_swap are disabled. Balances, estimates, and lists still work.");
|
|
23
|
+
}
|
|
13
24
|
const server = new McpServer({
|
|
14
25
|
name: "ironwallet",
|
|
15
26
|
version: packageVersion(),
|
|
16
27
|
}, {
|
|
17
|
-
instructions:
|
|
18
|
-
"Local Ironwallet hot wallet. Keys never leave this machine. There is no extra confirmation UI. Prefer a dedicated wallet with limited balance.",
|
|
19
|
-
"Never print, request, or invent recovery phrases or private keys. No tool accepts or returns a seed. Create/import/backup only via create_wallets backup_url or open_wallet_manager in the local browser.",
|
|
20
|
-
"If there is no wallet yet, create_wallets or open_wallet_manager first.",
|
|
21
|
-
"Transfer: list_wallets / get_balance → estimate_transfer (optional) → send_transfer. On timeout poll get_operation_status; do not resubmit blindly. send_transfer may reduce the amount so the fee fits.",
|
|
22
|
-
"Swap: list_swap_networks → list_swap_assets (copy network/symbol/address/decimals from the catalog; do not invent token addresses; omit address only for native coins) → estimate_swap or execute_swap. Quotes expire. maxMode: true sells as much as the service allows. After execute, poll get_swap_status; if execute times out, poll before retrying.",
|
|
23
|
-
].join("\n"),
|
|
28
|
+
instructions: instructions.join("\n"),
|
|
24
29
|
});
|
|
25
30
|
registerTools(server);
|
|
26
31
|
// Never write logs to stdout — that stream carries the JSON-RPC protocol.
|
|
27
|
-
process.stderr.write(`[ironwallet-mcp] starting (relay=${cfg.relayUrl})\n`);
|
|
32
|
+
process.stderr.write(`[ironwallet-mcp] starting (relay=${cfg.relayUrl}${cfg.readOnly ? ", readOnly" : ""})\n`);
|
|
28
33
|
logStartupBanner({
|
|
29
34
|
relayUrl: cfg.relayUrl,
|
|
30
35
|
httpTimeoutMs: cfg.httpTimeoutMs,
|
|
31
36
|
httpForwardTimeoutMs: cfg.httpForwardTimeoutMs,
|
|
32
37
|
httpRetries: cfg.httpRetries,
|
|
33
38
|
keystoreDir: cfg.keystoreDir,
|
|
39
|
+
readOnly: cfg.readOnly,
|
|
34
40
|
});
|
|
35
41
|
const transport = new StdioServerTransport();
|
|
36
42
|
await server.connect(transport);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,cAAc,EAAE;KAC1B,EACD;QACE,YAAY,EAAE
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,YAAY,GAAG;QACnB,kRAAkR;QAClR,2MAA2M;QAC3M,yEAAyE;QACzE,4OAA4O;QAC5O,0MAA0M;QAC1M,4VAA4V;KAC7V,CAAC;IACF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,YAAY,CAAC,IAAI,CACf,kIAAkI,CACnI,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,cAAc,EAAE;KAC1B,EACD;QACE,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;KACtC,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CACzF,CAAC;IACF,gBAAgB,CAAC;QACf,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;QAC9C,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool catalog: Zod input schemas plus the short docs fields used in
|
|
3
|
+
* README / skill tables. Handlers stay in wallets.ts / transfer.ts / swap.ts.
|
|
4
|
+
* `tools.json` is generated from this file — do not edit that JSON by hand.
|
|
5
|
+
*/
|
|
6
|
+
import { z, type ZodRawShape } from "zod";
|
|
7
|
+
export declare const networkEnum: z.ZodEnum<["ethereum" | "bsc" | "polygon" | "base" | "arbitrum" | "optimism" | "avalanche" | "tron" | "bitcoin" | "litecoin" | "doge" | "solana" | "ton" | "xrp", ...("ethereum" | "bsc" | "polygon" | "base" | "arbitrum" | "optimism" | "avalanche" | "tron" | "bitcoin" | "litecoin" | "doge" | "solana" | "ton" | "xrp")[]]>;
|
|
8
|
+
export declare const swapAssetInputSchema: z.ZodObject<{
|
|
9
|
+
network: z.ZodString;
|
|
10
|
+
symbol: z.ZodString;
|
|
11
|
+
address: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
12
|
+
decimals: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
symbol: string;
|
|
15
|
+
network: string;
|
|
16
|
+
address?: string | null | undefined;
|
|
17
|
+
decimals?: number | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
symbol: string;
|
|
20
|
+
network: string;
|
|
21
|
+
address?: string | null | undefined;
|
|
22
|
+
decimals?: number | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export interface ToolDefinition {
|
|
25
|
+
name: string;
|
|
26
|
+
title: string;
|
|
27
|
+
description: string;
|
|
28
|
+
/** One-line purpose for markdown tool tables. */
|
|
29
|
+
purpose: string;
|
|
30
|
+
movesFunds: boolean;
|
|
31
|
+
inputSchema: ZodRawShape;
|
|
32
|
+
}
|
|
33
|
+
export declare const TOOL_DEFINITIONS: ToolDefinition[];
|
|
34
|
+
export declare function toolDefinition(name: string): ToolDefinition;
|
|
35
|
+
/** Fields passed to `server.registerTool` (docs-only keys stripped). */
|
|
36
|
+
export declare function mcpToolConfig(def: ToolDefinition): {
|
|
37
|
+
title: string;
|
|
38
|
+
description: string;
|
|
39
|
+
inputSchema: ZodRawShape;
|
|
40
|
+
};
|