anki-mcp-http 0.22.3 → 0.22.5
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.
|
@@ -85,17 +85,39 @@ class MediaUrlInvalidError extends Error {
|
|
|
85
85
|
}
|
|
86
86
|
exports.MediaUrlInvalidError = MediaUrlInvalidError;
|
|
87
87
|
const DEFAULT_ALLOWED_PREFIXES = ["image/", "audio/", "video/"];
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
]);
|
|
88
|
+
const ALLOWED_RANGE = "unicast";
|
|
89
|
+
function isPublicUnicast(addr) {
|
|
90
|
+
return addr.range() === ALLOWED_RANGE;
|
|
91
|
+
}
|
|
92
|
+
function isIPv4CompatibleAddress(ipv6) {
|
|
93
|
+
return ipv6.parts.slice(0, 6).every((part) => part === 0);
|
|
94
|
+
}
|
|
95
|
+
function extractEmbeddedIPv4(ipv6) {
|
|
96
|
+
const high = ipv6.parts[6];
|
|
97
|
+
const low = ipv6.parts[7];
|
|
98
|
+
return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);
|
|
99
|
+
}
|
|
100
|
+
function parseTargetAddress(ip) {
|
|
101
|
+
if (!ipaddr.isValid(ip))
|
|
102
|
+
return null;
|
|
103
|
+
let addr = ipaddr.parse(ip);
|
|
104
|
+
if (addr instanceof ipaddr.IPv6) {
|
|
105
|
+
if (addr.isIPv4MappedAddress())
|
|
106
|
+
addr = addr.toIPv4Address();
|
|
107
|
+
else if (isIPv4CompatibleAddress(addr))
|
|
108
|
+
addr = extractEmbeddedIPv4(addr);
|
|
109
|
+
}
|
|
110
|
+
return addr;
|
|
111
|
+
}
|
|
112
|
+
function assertAddressAllowed(ip) {
|
|
113
|
+
const addr = parseTargetAddress(ip);
|
|
114
|
+
if (!addr || !isPublicUnicast(addr)) {
|
|
115
|
+
throw new MediaUrlBlockedError();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function normalizeIp(value) {
|
|
119
|
+
return parseTargetAddress(value)?.toString() ?? null;
|
|
120
|
+
}
|
|
99
121
|
function validateMediaFilePath(filePath, config = {}) {
|
|
100
122
|
if (filePath.includes("\0")) {
|
|
101
123
|
throw new MediaFileTypeError();
|
|
@@ -136,36 +158,34 @@ async function validateMediaUrl(input, config = {}) {
|
|
|
136
158
|
const hostnameForLookup = hostname.startsWith("[") && hostname.endsWith("]")
|
|
137
159
|
? hostname.slice(1, -1)
|
|
138
160
|
: hostname;
|
|
139
|
-
let
|
|
161
|
+
let resolved;
|
|
140
162
|
try {
|
|
141
|
-
|
|
142
|
-
resolvedIp = result.address;
|
|
163
|
+
resolved = await dns.promises.lookup(hostnameForLookup, { all: true });
|
|
143
164
|
}
|
|
144
165
|
catch {
|
|
145
166
|
throw new MediaUrlInvalidError();
|
|
146
167
|
}
|
|
168
|
+
if (resolved.length === 0) {
|
|
169
|
+
throw new MediaUrlInvalidError();
|
|
170
|
+
}
|
|
171
|
+
const resolvedIp = resolved[0].address;
|
|
147
172
|
if (config.allowedHosts && config.allowedHosts.length > 0) {
|
|
148
|
-
const
|
|
149
|
-
|
|
173
|
+
const allowedHosts = config.allowedHosts;
|
|
174
|
+
const hostnameAllowed = allowedHosts.includes(hostname) ||
|
|
175
|
+
allowedHosts.includes(hostnameForLookup);
|
|
176
|
+
const allowedIps = allowedHosts
|
|
177
|
+
.map(normalizeIp)
|
|
178
|
+
.filter((ip) => ip !== null);
|
|
179
|
+
const allIpsAllowed = resolved.every(({ address }) => {
|
|
180
|
+
const normalized = normalizeIp(address);
|
|
181
|
+
return normalized !== null && allowedIps.includes(normalized);
|
|
182
|
+
});
|
|
183
|
+
if (hostnameAllowed || allIpsAllowed) {
|
|
150
184
|
return { hostname, resolvedIp };
|
|
151
185
|
}
|
|
152
186
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
addr = ipaddr.parse(resolvedIp);
|
|
156
|
-
}
|
|
157
|
-
catch {
|
|
158
|
-
throw new MediaUrlBlockedError();
|
|
159
|
-
}
|
|
160
|
-
if (addr.kind() === "ipv6") {
|
|
161
|
-
const ipv6 = addr;
|
|
162
|
-
if (ipv6.isIPv4MappedAddress()) {
|
|
163
|
-
addr = ipv6.toIPv4Address();
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
const range = addr.range();
|
|
167
|
-
if (BLOCKED_RANGES.has(range)) {
|
|
168
|
-
throw new MediaUrlBlockedError();
|
|
187
|
+
for (const { address } of resolved) {
|
|
188
|
+
assertAddressAllowed(address);
|
|
169
189
|
}
|
|
170
190
|
return { hostname, resolvedIp };
|
|
171
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-validation.utils.js","sourceRoot":"","sources":["../../../src/mcp/utils/media-validation.utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"media-validation.utils.js","sourceRoot":"","sources":["../../../src/mcp/utils/media-validation.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "anki-mcp-http",
|
|
3
3
|
"mcpName": "ai.ankimcp/anki-mcp-server",
|
|
4
|
-
"version": "0.22.
|
|
4
|
+
"version": "0.22.5",
|
|
5
5
|
"description": "Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards",
|
|
6
6
|
"author": "Anatoly Tarnavsky",
|
|
7
7
|
"private": false,
|
|
@@ -57,13 +57,13 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
60
|
-
"@nestjs/common": "^11.1.
|
|
60
|
+
"@nestjs/common": "^11.1.28",
|
|
61
61
|
"@nestjs/config": "^4.0.4",
|
|
62
|
-
"@nestjs/core": "11.1.
|
|
62
|
+
"@nestjs/core": "11.1.28",
|
|
63
63
|
"@nestjs/jwt": "^11.0.2",
|
|
64
64
|
"@nestjs/passport": "^11.0.5",
|
|
65
|
-
"@nestjs/platform-express": "^11.1.
|
|
66
|
-
"@rekog/mcp-nest": "^1.9.
|
|
65
|
+
"@nestjs/platform-express": "^11.1.28",
|
|
66
|
+
"@rekog/mcp-nest": "^1.9.11",
|
|
67
67
|
"async-mutex": "^0.5.0",
|
|
68
68
|
"commander": "^15.0.0",
|
|
69
69
|
"ipaddr.js": "^2.4.0",
|
|
@@ -80,34 +80,34 @@
|
|
|
80
80
|
"unified": "^11.0.5",
|
|
81
81
|
"unist-util-visit": "^5.1.0",
|
|
82
82
|
"update-notifier": "^7.3.1",
|
|
83
|
-
"ws": "^8.21.
|
|
83
|
+
"ws": "^8.21.1",
|
|
84
84
|
"zod": "^4.4.3",
|
|
85
85
|
"zod-to-json-schema": "^3.25.2"
|
|
86
86
|
},
|
|
87
87
|
"devDependencies": {
|
|
88
88
|
"@anthropic-ai/mcpb": "^2.1.2",
|
|
89
|
-
"@eslint/eslintrc": "^3.3.
|
|
89
|
+
"@eslint/eslintrc": "^3.3.6",
|
|
90
90
|
"@eslint/js": "^10.0.1",
|
|
91
|
-
"@modelcontextprotocol/inspector": "^0.
|
|
92
|
-
"@nestjs/cli": "^11.0.
|
|
91
|
+
"@modelcontextprotocol/inspector": "^1.0.0",
|
|
92
|
+
"@nestjs/cli": "^11.0.24",
|
|
93
93
|
"@nestjs/schematics": "^11.1.0",
|
|
94
|
-
"@nestjs/testing": "^11.1.
|
|
94
|
+
"@nestjs/testing": "^11.1.28",
|
|
95
95
|
"@types/express": "^5.0.6",
|
|
96
96
|
"@types/jest": "^30.0.0",
|
|
97
97
|
"@types/jsonwebtoken": "^9.0.10",
|
|
98
98
|
"@types/mdast": "^4.0.4",
|
|
99
|
-
"@types/node": "^26.
|
|
100
|
-
"@types/supertest": "^7.2.
|
|
99
|
+
"@types/node": "^26.1.1",
|
|
100
|
+
"@types/supertest": "^7.2.1",
|
|
101
101
|
"@types/update-notifier": "^6.0.8",
|
|
102
102
|
"@types/ws": "^8.18.1",
|
|
103
|
-
"eslint": "^10.
|
|
103
|
+
"eslint": "^10.7.0",
|
|
104
104
|
"eslint-config-prettier": "^10.1.8",
|
|
105
105
|
"eslint-plugin-prettier": "^5.5.6",
|
|
106
106
|
"globals": "^17.7.0",
|
|
107
107
|
"husky": "^9.1.7",
|
|
108
108
|
"jest": "^30.4.2",
|
|
109
|
-
"prettier": "^3.9.
|
|
110
|
-
"sharp": "^0.35.
|
|
109
|
+
"prettier": "^3.9.6",
|
|
110
|
+
"sharp": "^0.35.3",
|
|
111
111
|
"source-map-support": "^0.5.21",
|
|
112
112
|
"supertest": "^7.2.2",
|
|
113
113
|
"ts-jest": "^29.4.11",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"ts-node": "^10.9.2",
|
|
116
116
|
"tsconfig-paths": "^4.2.0",
|
|
117
117
|
"typescript": "^6.0.3",
|
|
118
|
-
"typescript-eslint": "^8.
|
|
118
|
+
"typescript-eslint": "^8.65.0"
|
|
119
119
|
},
|
|
120
120
|
"jest": {
|
|
121
121
|
"moduleFileExtensions": [
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
],
|
|
169
169
|
"forceExit": true
|
|
170
170
|
},
|
|
171
|
-
"packageManager": "npm@
|
|
171
|
+
"packageManager": "npm@12.0.1",
|
|
172
172
|
"engines": {
|
|
173
173
|
"node": ">=22.12.0"
|
|
174
174
|
},
|