@qinisolabs/qiniso 0.3.0 → 0.4.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 +3 -3
- package/dist/{chunk-LVM6GAIC.js → chunk-RMLPG7ZB.js} +300 -1
- package/dist/http.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +21 -1
- package/dist/server.js +1 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
*Verified, trustworthy data tools for AI agents. "Qiniso" means "truth" in Zulu.*
|
|
10
10
|
|
|
11
|
-
[Website](https://qinisolabs.github.io/qiniso/) · [GitHub](https://github.com/qinisolabs/qiniso) · [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=qiniso)
|
|
11
|
+
[Website](https://qinisolabs.github.io/qiniso/) · [npm](https://www.npmjs.com/package/@qinisolabs/qiniso) · [GitHub](https://github.com/qinisolabs/qiniso) · [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=qiniso)
|
|
12
12
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
@@ -48,7 +48,7 @@ https://qiniso.qinisolabs.workers.dev/mcp
|
|
|
48
48
|
|
|
49
49
|
Or run it locally over stdio: `npx -p @qinisolabs/qiniso qiniso-mcp`.
|
|
50
50
|
|
|
51
|
-
## What it verifies —
|
|
51
|
+
## What it verifies — 47 tools across 8 domains
|
|
52
52
|
|
|
53
53
|
| Domain | Checks |
|
|
54
54
|
| --- | --- |
|
|
@@ -56,7 +56,7 @@ Or run it locally over stdio: `npx -p @qinisolabs/qiniso qiniso-mcp`.
|
|
|
56
56
|
| **Web / network** | TLD & domain (IANA root zone), IP, UUID, URL, email |
|
|
57
57
|
| **Finance** | ISIN, CUSIP, SEDOL, LEI, US ABA routing |
|
|
58
58
|
| **Crypto** | Ethereum (EIP-55), Bitcoin (Base58Check / Bech32) addresses |
|
|
59
|
-
| **National & tax IDs** | Brazil CPF/CNPJ, South Africa ID, Spain DNI/NIE, India Aadhaar, EU/UK VAT |
|
|
59
|
+
| **National & tax IDs** | Brazil CPF/CNPJ, South Africa ID, Spain DNI/NIE, India Aadhaar, Italy Codice Fiscale, Poland PESEL, Netherlands BSN, Belgium NRN, Sweden personnummer, Norway fødselsnummer, Finland HETU, Portugal NIF, Turkey TCKN, China Resident ID, EU/UK VAT |
|
|
60
60
|
| **Academic** | ISBN-10, ISSN, ORCID |
|
|
61
61
|
| **Locale** | Phone (global), date parsing, currency, holidays (~200 countries), UK VAT-by-date |
|
|
62
62
|
| **Addresses** | UK/US address parsing |
|
|
@@ -1336,6 +1336,225 @@ function validateAadhaar(input) {
|
|
|
1336
1336
|
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (Verhoeff)."] };
|
|
1337
1337
|
}
|
|
1338
1338
|
|
|
1339
|
+
// ../national-id/dist/italy.js
|
|
1340
|
+
var ODD = [1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23];
|
|
1341
|
+
var cval = (c) => c >= "0" && c <= "9" ? c.charCodeAt(0) - 48 : c.charCodeAt(0) - 65;
|
|
1342
|
+
function validateCodiceFiscale(input) {
|
|
1343
|
+
const s = input.toUpperCase().replace(/\s/g, "");
|
|
1344
|
+
const base = {
|
|
1345
|
+
input,
|
|
1346
|
+
normalized: s,
|
|
1347
|
+
valid: false,
|
|
1348
|
+
country: "IT",
|
|
1349
|
+
idType: "Codice Fiscale",
|
|
1350
|
+
errors: []
|
|
1351
|
+
};
|
|
1352
|
+
if (!/^[A-Z0-9]{15}[A-Z]$/.test(s)) {
|
|
1353
|
+
return { ...base, errors: ["Codice Fiscale must be 15 alphanumerics followed by a letter check character."] };
|
|
1354
|
+
}
|
|
1355
|
+
let sum = 0;
|
|
1356
|
+
for (let i = 0; i < 15; i++) {
|
|
1357
|
+
const v = cval(s[i]);
|
|
1358
|
+
sum += i % 2 === 0 ? ODD[v] : v;
|
|
1359
|
+
}
|
|
1360
|
+
const expected = String.fromCharCode(65 + sum % 26);
|
|
1361
|
+
const ok = expected === s[15];
|
|
1362
|
+
return { ...base, valid: ok, errors: ok ? [] : [`Check character failed (mod-26): expected '${expected}'.`] };
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
// ../national-id/dist/poland.js
|
|
1366
|
+
function validatePesel(input) {
|
|
1367
|
+
const clean = input.replace(/\D/g, "");
|
|
1368
|
+
const base = { input, normalized: clean, valid: false, country: "PL", idType: "PESEL", errors: [] };
|
|
1369
|
+
if (clean.length !== 11)
|
|
1370
|
+
return { ...base, errors: ["PESEL must be 11 digits."] };
|
|
1371
|
+
const d = clean.split("").map(Number);
|
|
1372
|
+
const w = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];
|
|
1373
|
+
let sum = 0;
|
|
1374
|
+
for (let i = 0; i < 10; i++)
|
|
1375
|
+
sum += w[i] * d[i];
|
|
1376
|
+
const check = (10 - sum % 10) % 10;
|
|
1377
|
+
const ok = check === d[10];
|
|
1378
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (PESEL weighted mod-10)."] };
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
// ../national-id/dist/netherlands.js
|
|
1382
|
+
function validateBsn(input) {
|
|
1383
|
+
let clean = input.replace(/\D/g, "");
|
|
1384
|
+
if (clean.length === 8)
|
|
1385
|
+
clean = "0" + clean;
|
|
1386
|
+
const base = { input, normalized: clean, valid: false, country: "NL", idType: "BSN", errors: [] };
|
|
1387
|
+
if (!/^\d{9}$/.test(clean))
|
|
1388
|
+
return { ...base, errors: ["BSN must be 8 or 9 digits."] };
|
|
1389
|
+
const d = clean.split("").map(Number);
|
|
1390
|
+
if (d.every((x) => x === 0))
|
|
1391
|
+
return { ...base, errors: ["Invalid BSN (all zeros)."] };
|
|
1392
|
+
let sum = 0;
|
|
1393
|
+
for (let i = 0; i < 8; i++)
|
|
1394
|
+
sum += (9 - i) * d[i];
|
|
1395
|
+
sum -= d[8];
|
|
1396
|
+
const ok = sum % 11 === 0;
|
|
1397
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (BSN 11-test)."] };
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
// ../national-id/dist/belgium.js
|
|
1401
|
+
function validateBeNrn(input) {
|
|
1402
|
+
const clean = input.replace(/\D/g, "");
|
|
1403
|
+
const base = {
|
|
1404
|
+
input,
|
|
1405
|
+
normalized: clean,
|
|
1406
|
+
valid: false,
|
|
1407
|
+
country: "BE",
|
|
1408
|
+
idType: "National Register Number",
|
|
1409
|
+
errors: []
|
|
1410
|
+
};
|
|
1411
|
+
if (clean.length !== 11)
|
|
1412
|
+
return { ...base, errors: ["Belgian NRN must be 11 digits."] };
|
|
1413
|
+
const d = clean.split("").map(Number);
|
|
1414
|
+
const last2 = d[9] * 10 + d[10];
|
|
1415
|
+
const baseNum = Number(clean.slice(0, 9));
|
|
1416
|
+
const c19 = 97 - baseNum % 97;
|
|
1417
|
+
const c20 = 97 - (2e9 + baseNum) % 97;
|
|
1418
|
+
const ok = last2 === c19 || last2 === c20;
|
|
1419
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (NRN mod-97)."] };
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
// ../national-id/dist/portugal.js
|
|
1423
|
+
function validateNifPt(input) {
|
|
1424
|
+
const clean = input.replace(/\D/g, "");
|
|
1425
|
+
const base = { input, normalized: clean, valid: false, country: "PT", idType: "NIF", errors: [] };
|
|
1426
|
+
if (clean.length !== 9)
|
|
1427
|
+
return { ...base, errors: ["Portuguese NIF must be 9 digits."] };
|
|
1428
|
+
const d = clean.split("").map(Number);
|
|
1429
|
+
let sum = 0;
|
|
1430
|
+
for (let i = 0; i < 8; i++)
|
|
1431
|
+
sum += d[i] * (9 - i);
|
|
1432
|
+
const r = sum % 11;
|
|
1433
|
+
const check = r < 2 ? 0 : 11 - r;
|
|
1434
|
+
const ok = check === d[8];
|
|
1435
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (NIF mod-11)."] };
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
// ../national-id/dist/turkey.js
|
|
1439
|
+
function validateTckn(input) {
|
|
1440
|
+
const clean = input.replace(/\D/g, "");
|
|
1441
|
+
const base = { input, normalized: clean, valid: false, country: "TR", idType: "TCKN", errors: [] };
|
|
1442
|
+
if (clean.length !== 11)
|
|
1443
|
+
return { ...base, errors: ["TCKN must be 11 digits."] };
|
|
1444
|
+
const d = clean.split("").map(Number);
|
|
1445
|
+
if (d[0] === 0)
|
|
1446
|
+
return { ...base, errors: ["TCKN cannot start with 0."] };
|
|
1447
|
+
const odd = d[0] + d[2] + d[4] + d[6] + d[8];
|
|
1448
|
+
const even = d[1] + d[3] + d[5] + d[7];
|
|
1449
|
+
const d10 = ((odd * 7 - even) % 10 + 10) % 10;
|
|
1450
|
+
let sum = 0;
|
|
1451
|
+
for (let i = 0; i < 10; i++)
|
|
1452
|
+
sum += d[i];
|
|
1453
|
+
const d11 = sum % 10;
|
|
1454
|
+
const ok = d10 === d[9] && d11 === d[10];
|
|
1455
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (TCKN check digits)."] };
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1458
|
+
// ../national-id/dist/china.js
|
|
1459
|
+
function validateChinaRic(input) {
|
|
1460
|
+
const s = input.toUpperCase().replace(/\s/g, "");
|
|
1461
|
+
const base = {
|
|
1462
|
+
input,
|
|
1463
|
+
normalized: s,
|
|
1464
|
+
valid: false,
|
|
1465
|
+
country: "CN",
|
|
1466
|
+
idType: "Resident Identity Card",
|
|
1467
|
+
errors: []
|
|
1468
|
+
};
|
|
1469
|
+
if (!/^\d{17}[0-9X]$/.test(s)) {
|
|
1470
|
+
return { ...base, errors: ["Chinese ID must be 17 digits followed by a check character (0-9 or X)."] };
|
|
1471
|
+
}
|
|
1472
|
+
const w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
1473
|
+
const map = "10X98765432";
|
|
1474
|
+
let sum = 0;
|
|
1475
|
+
for (let i = 0; i < 17; i++)
|
|
1476
|
+
sum += w[i] * (s.charCodeAt(i) - 48);
|
|
1477
|
+
const expected = map[sum % 11];
|
|
1478
|
+
const ok = expected === s[17];
|
|
1479
|
+
return { ...base, valid: ok, errors: ok ? [] : [`Check character failed (ISO 7064 MOD 11-2): expected '${expected}'.`] };
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
// ../national-id/dist/nordics.js
|
|
1483
|
+
function validatePersonnummer(input) {
|
|
1484
|
+
const digits2 = input.replace(/[+\-\s]/g, "");
|
|
1485
|
+
const base = {
|
|
1486
|
+
input,
|
|
1487
|
+
normalized: digits2,
|
|
1488
|
+
valid: false,
|
|
1489
|
+
country: "SE",
|
|
1490
|
+
idType: "Personnummer",
|
|
1491
|
+
errors: []
|
|
1492
|
+
};
|
|
1493
|
+
if (!/^\d{10}$|^\d{12}$/.test(digits2))
|
|
1494
|
+
return { ...base, errors: ["Personnummer must be 10 or 12 digits."] };
|
|
1495
|
+
const ten = digits2.length === 12 ? digits2.slice(2) : digits2;
|
|
1496
|
+
const d = ten.split("").map(Number);
|
|
1497
|
+
let sum = 0;
|
|
1498
|
+
let dbl = true;
|
|
1499
|
+
for (let i = 0; i < 10; i++) {
|
|
1500
|
+
let x = d[i];
|
|
1501
|
+
if (dbl) {
|
|
1502
|
+
x *= 2;
|
|
1503
|
+
if (x > 9)
|
|
1504
|
+
x -= 9;
|
|
1505
|
+
}
|
|
1506
|
+
sum += x;
|
|
1507
|
+
dbl = !dbl;
|
|
1508
|
+
}
|
|
1509
|
+
const ok = sum % 10 === 0;
|
|
1510
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (Luhn)."] };
|
|
1511
|
+
}
|
|
1512
|
+
function validateFodselsnummer(input) {
|
|
1513
|
+
const clean = input.replace(/\D/g, "");
|
|
1514
|
+
const base = {
|
|
1515
|
+
input,
|
|
1516
|
+
normalized: clean,
|
|
1517
|
+
valid: false,
|
|
1518
|
+
country: "NO",
|
|
1519
|
+
idType: "F\xF8dselsnummer",
|
|
1520
|
+
errors: []
|
|
1521
|
+
};
|
|
1522
|
+
if (clean.length !== 11)
|
|
1523
|
+
return { ...base, errors: ["F\xF8dselsnummer must be 11 digits."] };
|
|
1524
|
+
const d = clean.split("").map(Number);
|
|
1525
|
+
const w1 = [3, 7, 6, 1, 8, 9, 4, 5, 2];
|
|
1526
|
+
let s1 = 0;
|
|
1527
|
+
for (let i = 0; i < 9; i++)
|
|
1528
|
+
s1 += w1[i] * d[i];
|
|
1529
|
+
let k1 = 11 - s1 % 11;
|
|
1530
|
+
if (k1 === 11)
|
|
1531
|
+
k1 = 0;
|
|
1532
|
+
if (k1 === 10 || k1 !== d[9])
|
|
1533
|
+
return { ...base, errors: ["First control digit failed (mod-11)."] };
|
|
1534
|
+
const w2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
|
|
1535
|
+
let s2 = 0;
|
|
1536
|
+
for (let i = 0; i < 9; i++)
|
|
1537
|
+
s2 += w2[i] * d[i];
|
|
1538
|
+
s2 += w2[9] * k1;
|
|
1539
|
+
let k2 = 11 - s2 % 11;
|
|
1540
|
+
if (k2 === 11)
|
|
1541
|
+
k2 = 0;
|
|
1542
|
+
const ok = k2 !== 10 && k2 === d[10];
|
|
1543
|
+
return { ...base, valid: ok, errors: ok ? [] : ["Second control digit failed (mod-11)."] };
|
|
1544
|
+
}
|
|
1545
|
+
var HETU = "0123456789ABCDEFHJKLMNPRSTUVWXY";
|
|
1546
|
+
function validateHetu(input) {
|
|
1547
|
+
const s = input.toUpperCase().trim();
|
|
1548
|
+
const base = { input, normalized: s, valid: false, country: "FI", idType: "Henkil\xF6tunnus", errors: [] };
|
|
1549
|
+
const m = s.match(/^(\d{6})([+\-A-FYXWVU])(\d{3})([0-9A-Y])$/);
|
|
1550
|
+
if (!m)
|
|
1551
|
+
return { ...base, errors: ["HETU must be DDMMYY + century sign + 3 digits + check character."] };
|
|
1552
|
+
const num = Number(m[1] + m[3]);
|
|
1553
|
+
const expected = HETU[num % 31];
|
|
1554
|
+
const ok = expected === m[4];
|
|
1555
|
+
return { ...base, valid: ok, errors: ok ? [] : [`Check character failed (mod-31): expected '${expected}'.`] };
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1339
1558
|
// ../academic/dist/isbn10.js
|
|
1340
1559
|
function validateIsbn10(input) {
|
|
1341
1560
|
const s = input.replace(/[\s-]/g, "").toUpperCase();
|
|
@@ -2014,6 +2233,76 @@ var TOOLS = [
|
|
|
2014
2233
|
argDescription: "The 12-digit Aadhaar number (spaces ignored).",
|
|
2015
2234
|
run: (v) => validateAadhaar(v)
|
|
2016
2235
|
},
|
|
2236
|
+
{
|
|
2237
|
+
name: "validate_codice_fiscale",
|
|
2238
|
+
description: "USE THIS to verify an Italian Codice Fiscale (personal tax code) before relying on it \u2014 do not guess the final check letter. Checks the 16-character format and the mod-26 check character. Validates structure only; does NOT confirm the code is registered with the Agenzia delle Entrate.",
|
|
2239
|
+
argName: "code",
|
|
2240
|
+
argDescription: "The 16-character Codice Fiscale (spaces ignored, case-insensitive).",
|
|
2241
|
+
run: (v) => validateCodiceFiscale(v)
|
|
2242
|
+
},
|
|
2243
|
+
{
|
|
2244
|
+
name: "validate_pesel",
|
|
2245
|
+
description: "USE THIS to verify a Polish PESEL (national identification number) before relying on it \u2014 never assume 11 digits are valid. Checks the weighted mod-10 check digit. Call this for KYC/onboarding of Polish individuals.",
|
|
2246
|
+
argName: "pesel",
|
|
2247
|
+
argDescription: "The 11-digit PESEL (spaces/dashes ignored).",
|
|
2248
|
+
run: (v) => validatePesel(v)
|
|
2249
|
+
},
|
|
2250
|
+
{
|
|
2251
|
+
name: "validate_bsn",
|
|
2252
|
+
description: "USE THIS to verify a Dutch BSN (burgerservicenummer / citizen service number) before relying on it. Checks the 8\u20139 digit form and the '11-test' (elfproef) checksum. Validates structure only; does NOT confirm the number is issued.",
|
|
2253
|
+
argName: "bsn",
|
|
2254
|
+
argDescription: "The 8- or 9-digit BSN (spaces/dots ignored).",
|
|
2255
|
+
run: (v) => validateBsn(v)
|
|
2256
|
+
},
|
|
2257
|
+
{
|
|
2258
|
+
name: "validate_be_nrn",
|
|
2259
|
+
description: "USE THIS to verify a Belgian National Register Number (Rijksregisternummer / Num\xE9ro de Registre National) before relying on it. Checks the 11-digit form and the mod-97 check (handling the born-from-2000 rule). Validates structure only.",
|
|
2260
|
+
argName: "nrn",
|
|
2261
|
+
argDescription: "The 11-digit Belgian National Register Number (punctuation ignored).",
|
|
2262
|
+
run: (v) => validateBeNrn(v)
|
|
2263
|
+
},
|
|
2264
|
+
{
|
|
2265
|
+
name: "validate_personnummer",
|
|
2266
|
+
description: "USE THIS to verify a Swedish personnummer (personal identity number) before relying on it \u2014 never assume the digits are valid. Accepts the 10- or 12-digit form and checks the Luhn check digit. Validates structure only; does NOT confirm the number is registered.",
|
|
2267
|
+
argName: "personnummer",
|
|
2268
|
+
argDescription: "The Swedish personnummer (10 or 12 digits; +/-/spaces ignored).",
|
|
2269
|
+
run: (v) => validatePersonnummer(v)
|
|
2270
|
+
},
|
|
2271
|
+
{
|
|
2272
|
+
name: "validate_fodselsnummer",
|
|
2273
|
+
description: "USE THIS to verify a Norwegian f\xF8dselsnummer (national identity number) before relying on it. Checks the 11-digit form and both mod-11 control digits. Validates structure only; does NOT confirm the number is registered.",
|
|
2274
|
+
argName: "fodselsnummer",
|
|
2275
|
+
argDescription: "The 11-digit Norwegian f\xF8dselsnummer (spaces ignored).",
|
|
2276
|
+
run: (v) => validateFodselsnummer(v)
|
|
2277
|
+
},
|
|
2278
|
+
{
|
|
2279
|
+
name: "validate_hetu",
|
|
2280
|
+
description: "USE THIS to verify a Finnish henkil\xF6tunnus (HETU / personal identity code) before relying on it \u2014 do not guess the check character. Checks the DDMMYY + century sign + individual number + mod-31 check character. Validates structure only.",
|
|
2281
|
+
argName: "hetu",
|
|
2282
|
+
argDescription: "The Finnish HETU, e.g. 131052-308T (case-insensitive).",
|
|
2283
|
+
run: (v) => validateHetu(v)
|
|
2284
|
+
},
|
|
2285
|
+
{
|
|
2286
|
+
name: "validate_nif_pt",
|
|
2287
|
+
description: "USE THIS to verify a Portuguese NIF (N\xFAmero de Identifica\xE7\xE3o Fiscal / tax number) before invoicing or onboarding \u2014 never assume 9 digits are valid. Checks the mod-11 check digit. For the Spanish tax ID use validate_dni.",
|
|
2288
|
+
argName: "nif",
|
|
2289
|
+
argDescription: "The 9-digit Portuguese NIF (spaces ignored).",
|
|
2290
|
+
run: (v) => validateNifPt(v)
|
|
2291
|
+
},
|
|
2292
|
+
{
|
|
2293
|
+
name: "validate_tckn",
|
|
2294
|
+
description: "USE THIS to verify a Turkish T.C. Kimlik No (TCKN / national identity number) before relying on it \u2014 never assume 11 digits are valid. Checks both algorithmic check digits and the leading-digit rule. Validates structure only; does NOT confirm the number is registered.",
|
|
2295
|
+
argName: "tckn",
|
|
2296
|
+
argDescription: "The 11-digit TCKN (spaces ignored).",
|
|
2297
|
+
run: (v) => validateTckn(v)
|
|
2298
|
+
},
|
|
2299
|
+
{
|
|
2300
|
+
name: "validate_china_ric",
|
|
2301
|
+
description: "USE THIS to verify a Chinese Resident Identity Card number (\u5C45\u6C11\u8EAB\u4EFD\u8BC1) before relying on it \u2014 do not guess the check character. Checks the 18-character form and the ISO 7064 MOD 11-2 check character (which may be 'X'). Validates structure only; does NOT confirm the number is registered.",
|
|
2302
|
+
argName: "id",
|
|
2303
|
+
argDescription: "The 18-character Chinese Resident ID (17 digits + check 0-9 or X).",
|
|
2304
|
+
run: (v) => validateChinaRic(v)
|
|
2305
|
+
},
|
|
2017
2306
|
{
|
|
2018
2307
|
name: "validate_isbn10",
|
|
2019
2308
|
description: "USE THIS to verify an ISBN-10 (older book identifier) instead of trusting 10 characters. Checks the mod-11 check digit (which may be 'X'). For 13-digit ISBNs use validate_isbn.",
|
|
@@ -2109,7 +2398,7 @@ var TOOLS = [
|
|
|
2109
2398
|
runArgs: (a) => validateVat(a.vat ?? "", a.country)
|
|
2110
2399
|
}
|
|
2111
2400
|
];
|
|
2112
|
-
var SERVER_INFO = { name: "qiniso", version: "0.
|
|
2401
|
+
var SERVER_INFO = { name: "qiniso", version: "0.4.0" };
|
|
2113
2402
|
var DEFAULT_PROTOCOL = "2025-06-18";
|
|
2114
2403
|
function argList(t) {
|
|
2115
2404
|
return t.args ?? [{ name: t.argName, description: t.argDescription }];
|
|
@@ -2227,6 +2516,16 @@ export {
|
|
|
2227
2516
|
verhoeffValid,
|
|
2228
2517
|
verhoeffGenerate,
|
|
2229
2518
|
validateAadhaar,
|
|
2519
|
+
validateCodiceFiscale,
|
|
2520
|
+
validatePesel,
|
|
2521
|
+
validateBsn,
|
|
2522
|
+
validateBeNrn,
|
|
2523
|
+
validateNifPt,
|
|
2524
|
+
validateTckn,
|
|
2525
|
+
validateChinaRic,
|
|
2526
|
+
validatePersonnummer,
|
|
2527
|
+
validateFodselsnummer,
|
|
2528
|
+
validateHetu,
|
|
2230
2529
|
validateIsbn10,
|
|
2231
2530
|
validateIssn,
|
|
2232
2531
|
validateOrcid,
|
package/dist/http.js
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -24,17 +24,23 @@ import {
|
|
|
24
24
|
supportedIbanCountries,
|
|
25
25
|
validateAadhaar,
|
|
26
26
|
validateAba,
|
|
27
|
+
validateBeNrn,
|
|
28
|
+
validateBsn,
|
|
27
29
|
validateBtcAddress,
|
|
28
30
|
validateCard,
|
|
31
|
+
validateChinaRic,
|
|
29
32
|
validateCnpj,
|
|
33
|
+
validateCodiceFiscale,
|
|
30
34
|
validateCpf,
|
|
31
35
|
validateCusip,
|
|
32
36
|
validateDni,
|
|
33
37
|
validateDomain,
|
|
34
38
|
validateEmail,
|
|
35
39
|
validateEthAddress,
|
|
40
|
+
validateFodselsnummer,
|
|
36
41
|
validateGln,
|
|
37
42
|
validateGtin,
|
|
43
|
+
validateHetu,
|
|
38
44
|
validateIban,
|
|
39
45
|
validateImei,
|
|
40
46
|
validateIp,
|
|
@@ -43,11 +49,15 @@ import {
|
|
|
43
49
|
validateIsin,
|
|
44
50
|
validateIssn,
|
|
45
51
|
validateLei,
|
|
52
|
+
validateNifPt,
|
|
46
53
|
validateOrcid,
|
|
54
|
+
validatePersonnummer,
|
|
55
|
+
validatePesel,
|
|
47
56
|
validatePhone,
|
|
48
57
|
validateSaId,
|
|
49
58
|
validateSedol,
|
|
50
59
|
validateSscc,
|
|
60
|
+
validateTckn,
|
|
51
61
|
validateTld,
|
|
52
62
|
validateUrl,
|
|
53
63
|
validateUuid,
|
|
@@ -57,7 +67,7 @@ import {
|
|
|
57
67
|
verhoeffGenerate,
|
|
58
68
|
verhoeffValid,
|
|
59
69
|
vinCheckDigit
|
|
60
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-RMLPG7ZB.js";
|
|
61
71
|
export {
|
|
62
72
|
SERVER_INFO,
|
|
63
73
|
TOOLS,
|
|
@@ -84,17 +94,23 @@ export {
|
|
|
84
94
|
supportedIbanCountries,
|
|
85
95
|
validateAadhaar,
|
|
86
96
|
validateAba,
|
|
97
|
+
validateBeNrn,
|
|
98
|
+
validateBsn,
|
|
87
99
|
validateBtcAddress,
|
|
88
100
|
validateCard,
|
|
101
|
+
validateChinaRic,
|
|
89
102
|
validateCnpj,
|
|
103
|
+
validateCodiceFiscale,
|
|
90
104
|
validateCpf,
|
|
91
105
|
validateCusip,
|
|
92
106
|
validateDni,
|
|
93
107
|
validateDomain,
|
|
94
108
|
validateEmail,
|
|
95
109
|
validateEthAddress,
|
|
110
|
+
validateFodselsnummer,
|
|
96
111
|
validateGln,
|
|
97
112
|
validateGtin,
|
|
113
|
+
validateHetu,
|
|
98
114
|
validateIban,
|
|
99
115
|
validateImei,
|
|
100
116
|
validateIp,
|
|
@@ -103,11 +119,15 @@ export {
|
|
|
103
119
|
validateIsin,
|
|
104
120
|
validateIssn,
|
|
105
121
|
validateLei,
|
|
122
|
+
validateNifPt,
|
|
106
123
|
validateOrcid,
|
|
124
|
+
validatePersonnummer,
|
|
125
|
+
validatePesel,
|
|
107
126
|
validatePhone,
|
|
108
127
|
validateSaId,
|
|
109
128
|
validateSedol,
|
|
110
129
|
validateSscc,
|
|
130
|
+
validateTckn,
|
|
111
131
|
validateTld,
|
|
112
132
|
validateUrl,
|
|
113
133
|
validateUuid,
|
package/dist/server.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qinisolabs/qiniso",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"mcpName": "io.github.qinisolabs/qiniso",
|
|
5
5
|
"description": "The deterministic fact-verification layer for AI agents — verify identifiers, locale and more against authoritative ground truth.",
|
|
6
6
|
"homepage": "https://qinisolabs.github.io/qiniso/",
|
|
@@ -48,7 +48,12 @@
|
|
|
48
48
|
"upc",
|
|
49
49
|
"ean",
|
|
50
50
|
"iban",
|
|
51
|
-
"vat"
|
|
51
|
+
"vat",
|
|
52
|
+
"national-id",
|
|
53
|
+
"kyc",
|
|
54
|
+
"pesel",
|
|
55
|
+
"codice-fiscale",
|
|
56
|
+
"tckn"
|
|
52
57
|
],
|
|
53
58
|
"license": "Apache-2.0",
|
|
54
59
|
"author": "Qiniso",
|