@neus/sdk 1.1.1 → 1.1.4
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 +191 -206
- package/SECURITY.md +38 -38
- package/cjs/client.cjs +23 -15
- package/cjs/index.cjs +23 -15
- package/cjs/mcp-hosts.cjs +125 -0
- package/cli/neus.mjs +2150 -1895
- package/client.js +32 -17
- package/mcp-hosts.js +121 -0
- package/package.json +147 -142
- package/types.d.ts +39 -8
- package/widgets/README.md +41 -45
- package/widgets/verify-gate/dist/ProofBadge.js +14 -4
- package/widgets/verify-gate/dist/VerifyGate.js +66 -203
package/client.js
CHANGED
|
@@ -1052,23 +1052,22 @@ export class NeusClient {
|
|
|
1052
1052
|
}
|
|
1053
1053
|
};
|
|
1054
1054
|
|
|
1055
|
-
const
|
|
1055
|
+
const isBaseMiniAppWallet = (() => {
|
|
1056
1056
|
if (typeof window === 'undefined') return false;
|
|
1057
1057
|
try {
|
|
1058
1058
|
const w = window;
|
|
1059
|
-
const
|
|
1060
|
-
if (!
|
|
1061
|
-
const
|
|
1062
|
-
if (
|
|
1063
|
-
if (w.
|
|
1064
|
-
if (w.ethereum === provider && fc && fc.context) return true;
|
|
1059
|
+
const mini = w.mini;
|
|
1060
|
+
if (!mini) return false;
|
|
1061
|
+
const miniProvider = mini.wallet || mini.provider;
|
|
1062
|
+
if (miniProvider === provider) return true;
|
|
1063
|
+
if (w.ethereum === provider && mini) return true;
|
|
1065
1064
|
} catch {
|
|
1066
1065
|
void 0;
|
|
1067
1066
|
}
|
|
1068
1067
|
return false;
|
|
1069
1068
|
})();
|
|
1070
1069
|
|
|
1071
|
-
if (
|
|
1070
|
+
if (isBaseMiniAppWallet) {
|
|
1072
1071
|
try {
|
|
1073
1072
|
const hexMsg = toHexUtf8(message);
|
|
1074
1073
|
signature = await provider.request({ method: 'personal_sign', params: [hexMsg, walletAddress] });
|
|
@@ -1482,7 +1481,9 @@ export class NeusClient {
|
|
|
1482
1481
|
|
|
1483
1482
|
const qs = [];
|
|
1484
1483
|
if (options.limit) qs.push(`limit=${encodeURIComponent(String(options.limit))}`);
|
|
1485
|
-
|
|
1484
|
+
const cursorRaw = options.cursor !== null && options.cursor !== undefined ? String(options.cursor).trim() : '';
|
|
1485
|
+
if (cursorRaw) qs.push(`cursor=${encodeURIComponent(cursorRaw)}`);
|
|
1486
|
+
else if (options.offset) qs.push(`offset=${encodeURIComponent(String(options.offset))}`);
|
|
1486
1487
|
if (options.qHash) qs.push(`qHash=${encodeURIComponent(options.qHash.toLowerCase())}`);
|
|
1487
1488
|
|
|
1488
1489
|
const query = qs.length ? `?${qs.join('&')}` : '';
|
|
@@ -1501,7 +1502,11 @@ export class NeusClient {
|
|
|
1501
1502
|
proofs: Array.isArray(proofs) ? proofs : [],
|
|
1502
1503
|
totalCount: response.data?.totalCount ?? proofs.length,
|
|
1503
1504
|
hasMore: Boolean(response.data?.hasMore),
|
|
1504
|
-
nextOffset: response.data?.nextOffset ?? null
|
|
1505
|
+
nextOffset: response.data?.nextOffset ?? null,
|
|
1506
|
+
nextCursor:
|
|
1507
|
+
typeof response.data?.nextCursor === 'string' && response.data.nextCursor.trim()
|
|
1508
|
+
? response.data.nextCursor.trim()
|
|
1509
|
+
: null
|
|
1505
1510
|
};
|
|
1506
1511
|
}
|
|
1507
1512
|
|
|
@@ -1566,7 +1571,9 @@ export class NeusClient {
|
|
|
1566
1571
|
|
|
1567
1572
|
const qs = [];
|
|
1568
1573
|
if (options.limit) qs.push(`limit=${encodeURIComponent(String(options.limit))}`);
|
|
1569
|
-
|
|
1574
|
+
const cursorRaw = options.cursor !== null && options.cursor !== undefined ? String(options.cursor).trim() : '';
|
|
1575
|
+
if (cursorRaw) qs.push(`cursor=${encodeURIComponent(cursorRaw)}`);
|
|
1576
|
+
else if (options.offset) qs.push(`offset=${encodeURIComponent(String(options.offset))}`);
|
|
1570
1577
|
if (options.qHash) qs.push(`qHash=${encodeURIComponent(options.qHash.toLowerCase())}`);
|
|
1571
1578
|
const query = qs.length ? `?${qs.join('&')}` : '';
|
|
1572
1579
|
|
|
@@ -1587,7 +1594,11 @@ export class NeusClient {
|
|
|
1587
1594
|
proofs: Array.isArray(proofs) ? proofs : [],
|
|
1588
1595
|
totalCount: response.data?.totalCount ?? proofs.length,
|
|
1589
1596
|
hasMore: Boolean(response.data?.hasMore),
|
|
1590
|
-
nextOffset: response.data?.nextOffset ?? null
|
|
1597
|
+
nextOffset: response.data?.nextOffset ?? null,
|
|
1598
|
+
nextCursor:
|
|
1599
|
+
typeof response.data?.nextCursor === 'string' && response.data.nextCursor.trim()
|
|
1600
|
+
? response.data.nextCursor.trim()
|
|
1601
|
+
: null
|
|
1591
1602
|
};
|
|
1592
1603
|
}
|
|
1593
1604
|
|
|
@@ -1597,6 +1608,9 @@ export class NeusClient {
|
|
|
1597
1608
|
throw new ValidationError('Valid address is required');
|
|
1598
1609
|
}
|
|
1599
1610
|
|
|
1611
|
+
const gateIdParam = typeof params.gateId === 'string' ? params.gateId.trim() : '';
|
|
1612
|
+
const verifierIds = gateIdParam ? undefined : params.verifierIds;
|
|
1613
|
+
|
|
1600
1614
|
const qs = new URLSearchParams();
|
|
1601
1615
|
qs.set('address', address);
|
|
1602
1616
|
|
|
@@ -1622,7 +1636,8 @@ export class NeusClient {
|
|
|
1622
1636
|
setIfPresent(key, value);
|
|
1623
1637
|
};
|
|
1624
1638
|
|
|
1625
|
-
|
|
1639
|
+
setIfPresent('gateId', gateIdParam);
|
|
1640
|
+
setCsvIfPresent('verifierIds', verifierIds);
|
|
1626
1641
|
setBoolIfPresent('requireAll', params.requireAll);
|
|
1627
1642
|
setIfPresent('minCount', params.minCount);
|
|
1628
1643
|
setIfPresent('sinceDays', params.sinceDays);
|
|
@@ -1693,12 +1708,12 @@ export class NeusClient {
|
|
|
1693
1708
|
}
|
|
1694
1709
|
|
|
1695
1710
|
let mergedHeaders = headersOverride;
|
|
1696
|
-
if (!mergedHeaders) {
|
|
1711
|
+
if (!mergedHeaders && !gateIdParam) {
|
|
1697
1712
|
try {
|
|
1698
1713
|
const sponsorHeaders = await this._resolveSponsorGrantHeaders(
|
|
1699
|
-
Array.isArray(
|
|
1700
|
-
?
|
|
1701
|
-
: (
|
|
1714
|
+
Array.isArray(verifierIds)
|
|
1715
|
+
? verifierIds
|
|
1716
|
+
: (verifierIds ? [verifierIds] : [])
|
|
1702
1717
|
);
|
|
1703
1718
|
if (sponsorHeaders && Object.keys(sponsorHeaders).length > 0) {
|
|
1704
1719
|
mergedHeaders = sponsorHeaders;
|
package/mcp-hosts.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP host install constants shared by the `neus` CLI and product UI.
|
|
3
|
+
* Browser-safe: no Node-only APIs except the Buffer fallback for non-browser tests.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const NEUS_MCP_SERVER_NAME = 'neus';
|
|
7
|
+
export const NEUS_MCP_URL = 'https://mcp.neus.network/mcp';
|
|
8
|
+
export const NEUS_SETUP_CLI = 'npx -y -p @neus/sdk neus setup';
|
|
9
|
+
export const NEUS_AUTH_CLI = 'npx -y -p @neus/sdk neus auth';
|
|
10
|
+
export const NEUS_MCP_SETUP_DOCS_URL = 'https://docs.neus.network/mcp/ide-plugin';
|
|
11
|
+
|
|
12
|
+
/** CLI `neus setup --client` values. */
|
|
13
|
+
export const MCP_INSTALL_CLIENTS = ['claude', 'codex', 'cursor', 'vscode'];
|
|
14
|
+
|
|
15
|
+
/** Product Profile "Open in" hosts. */
|
|
16
|
+
export const MCP_INSTALL_HOSTS = ['cursor', 'claude', 'codex'];
|
|
17
|
+
|
|
18
|
+
export const IDE_HOST_LABELS = {
|
|
19
|
+
cursor: 'Cursor',
|
|
20
|
+
claude: 'Claude Code',
|
|
21
|
+
codex: 'Codex'
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const IDE_HOST_BRAND_LOGOS = {
|
|
25
|
+
cursor: '/images/brandLogos/cursor.svg',
|
|
26
|
+
claude: '/images/brandLogos/anthropic.svg',
|
|
27
|
+
codex: '/images/brandLogos/openai.svg'
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {string | null | undefined} accessKey
|
|
32
|
+
* @returns {{ type: 'http'; url: string; headers?: { Authorization: string } }}
|
|
33
|
+
*/
|
|
34
|
+
export function buildNeusMcpHttpConfig(accessKey) {
|
|
35
|
+
const key = String(accessKey || '').trim();
|
|
36
|
+
return {
|
|
37
|
+
type: 'http',
|
|
38
|
+
url: NEUS_MCP_URL,
|
|
39
|
+
...(key ? { headers: { Authorization: `Bearer ${key}` } } : {})
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param {unknown} value
|
|
45
|
+
* @returns {string}
|
|
46
|
+
*/
|
|
47
|
+
function encodeBase64Json(value) {
|
|
48
|
+
const json = JSON.stringify(value);
|
|
49
|
+
if (typeof globalThis.btoa === 'function') {
|
|
50
|
+
return globalThis.btoa(json);
|
|
51
|
+
}
|
|
52
|
+
return Buffer.from(json, 'utf8').toString('base64');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @param {string | null | undefined} accessKey
|
|
57
|
+
* @returns {string}
|
|
58
|
+
*/
|
|
59
|
+
export function buildCursorMcpInstallUrl(accessKey) {
|
|
60
|
+
const config = buildNeusMcpHttpConfig(accessKey);
|
|
61
|
+
const encoded = encodeBase64Json(config);
|
|
62
|
+
return `cursor://anysphere.cursor-deeplink/mcp/install?name=${encodeURIComponent(NEUS_MCP_SERVER_NAME)}&config=${encodeURIComponent(encoded)}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @param {string | null | undefined} accessKey
|
|
67
|
+
* @returns {string}
|
|
68
|
+
*/
|
|
69
|
+
export function buildVsCodeMcpInstallUrl(accessKey) {
|
|
70
|
+
const payload = {
|
|
71
|
+
name: NEUS_MCP_SERVER_NAME,
|
|
72
|
+
...buildNeusMcpHttpConfig(accessKey)
|
|
73
|
+
};
|
|
74
|
+
return `vscode:mcp/install?${encodeURIComponent(JSON.stringify(payload))}`;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @param {'claude' | 'codex' | 'cursor' | 'vscode'} client
|
|
79
|
+
* @returns {string}
|
|
80
|
+
*/
|
|
81
|
+
export function buildAuthCommandForClient(client) {
|
|
82
|
+
if (client === 'codex') {
|
|
83
|
+
return `${NEUS_AUTH_CLI} --client codex`;
|
|
84
|
+
}
|
|
85
|
+
return NEUS_AUTH_CLI;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @param {'claude' | 'codex' | 'cursor' | 'vscode'} client
|
|
90
|
+
* @param {string | null | undefined} accessKey
|
|
91
|
+
* @returns {string}
|
|
92
|
+
*/
|
|
93
|
+
export function buildSetupCommandForClient(client, accessKey) {
|
|
94
|
+
const key = String(accessKey || '').trim();
|
|
95
|
+
const setup = key
|
|
96
|
+
? `${NEUS_SETUP_CLI} --client ${client} --access-key ${key}`
|
|
97
|
+
: `${NEUS_SETUP_CLI} --client ${client}`;
|
|
98
|
+
if (key) return setup;
|
|
99
|
+
return `${setup}\n${buildAuthCommandForClient(client)}`;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @param {'cursor' | 'claude' | 'codex'} host
|
|
104
|
+
* @param {string | null | undefined} accessKey
|
|
105
|
+
* @returns {string}
|
|
106
|
+
*/
|
|
107
|
+
export function buildSetupCommandForHost(host, accessKey) {
|
|
108
|
+
return buildSetupCommandForClient(host, accessKey);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Cursor supports MCP install deeplinks; Codex uses CLI, not VS Code deeplinks.
|
|
113
|
+
* @param {'cursor' | 'claude' | 'codex'} host
|
|
114
|
+
* @returns {boolean}
|
|
115
|
+
*/
|
|
116
|
+
export function supportsMcpInstallDeeplink(host) {
|
|
117
|
+
if (host !== 'cursor') return false;
|
|
118
|
+
if (typeof navigator === 'undefined') return false;
|
|
119
|
+
const ua = navigator.userAgent || '';
|
|
120
|
+
return !/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);
|
|
121
|
+
}
|
package/package.json
CHANGED
|
@@ -1,142 +1,147 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@neus/sdk",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "NEUS makes trust portable across the internet — so people, apps, and AI agents can prove what is real before access, payout, or execution.",
|
|
5
|
-
"bin": {
|
|
6
|
-
"neus": "cli/neus.mjs"
|
|
7
|
-
},
|
|
8
|
-
"main": "index.js",
|
|
9
|
-
"type": "module",
|
|
10
|
-
"types": "types.d.ts",
|
|
11
|
-
"exports": {
|
|
12
|
-
".": {
|
|
13
|
-
"types": "./types.d.ts",
|
|
14
|
-
"import": "./index.js",
|
|
15
|
-
"require": "./cjs/index.cjs"
|
|
16
|
-
},
|
|
17
|
-
"./client": {
|
|
18
|
-
"types": "./types.d.ts",
|
|
19
|
-
"import": "./client.js",
|
|
20
|
-
"require": "./cjs/client.cjs"
|
|
21
|
-
},
|
|
22
|
-
"./utils": {
|
|
23
|
-
"import": "./utils.js",
|
|
24
|
-
"require": "./cjs/utils.cjs"
|
|
25
|
-
},
|
|
26
|
-
"./errors": {
|
|
27
|
-
"import": "./errors.js",
|
|
28
|
-
"require": "./cjs/errors.cjs"
|
|
29
|
-
},
|
|
30
|
-
"./gates": {
|
|
31
|
-
"import": "./gates.js",
|
|
32
|
-
"require": "./cjs/gates.cjs"
|
|
33
|
-
},
|
|
34
|
-
"./
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"url": "https://github.com/neus/network
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
"
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
"
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"widgets
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
|
|
142
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@neus/sdk",
|
|
3
|
+
"version": "1.1.4",
|
|
4
|
+
"description": "NEUS makes trust portable across the internet — so people, apps, and AI agents can prove what is real before access, payout, or execution.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"neus": "cli/neus.mjs"
|
|
7
|
+
},
|
|
8
|
+
"main": "index.js",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"types": "types.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./types.d.ts",
|
|
14
|
+
"import": "./index.js",
|
|
15
|
+
"require": "./cjs/index.cjs"
|
|
16
|
+
},
|
|
17
|
+
"./client": {
|
|
18
|
+
"types": "./types.d.ts",
|
|
19
|
+
"import": "./client.js",
|
|
20
|
+
"require": "./cjs/client.cjs"
|
|
21
|
+
},
|
|
22
|
+
"./utils": {
|
|
23
|
+
"import": "./utils.js",
|
|
24
|
+
"require": "./cjs/utils.cjs"
|
|
25
|
+
},
|
|
26
|
+
"./errors": {
|
|
27
|
+
"import": "./errors.js",
|
|
28
|
+
"require": "./cjs/errors.cjs"
|
|
29
|
+
},
|
|
30
|
+
"./gates": {
|
|
31
|
+
"import": "./gates.js",
|
|
32
|
+
"require": "./cjs/gates.cjs"
|
|
33
|
+
},
|
|
34
|
+
"./mcp-hosts": {
|
|
35
|
+
"import": "./mcp-hosts.js",
|
|
36
|
+
"require": "./cjs/mcp-hosts.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./widgets": {
|
|
39
|
+
"types": "./types.d.ts",
|
|
40
|
+
"import": "./widgets/index.js",
|
|
41
|
+
"require": "./widgets.cjs"
|
|
42
|
+
},
|
|
43
|
+
"./widgets/verify-gate": {
|
|
44
|
+
"types": "./types.d.ts",
|
|
45
|
+
"import": "./widgets/verify-gate/index.js",
|
|
46
|
+
"require": "./widgets.cjs"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"sideEffects": false,
|
|
50
|
+
"scripts": {
|
|
51
|
+
"test": "npm run build:cjs && vitest run",
|
|
52
|
+
"test:coverage": "vitest run --coverage",
|
|
53
|
+
"lint": "eslint . --ignore-pattern widgets/verify-gate/dist/**",
|
|
54
|
+
"format": "prettier --write \"**/*.js\"",
|
|
55
|
+
"build": "npm run build:widgets && npm run build:cjs",
|
|
56
|
+
"build:widgets": "npx esbuild widgets/verify-gate/VerifyGate.jsx widgets/verify-gate/ProofBadge.jsx --bundle --platform=browser --format=esm --outdir=widgets/verify-gate/dist --jsx=automatic --legal-comments=none --external:react --external:react-dom --external:react/jsx-runtime --external:@neus/sdk/client",
|
|
57
|
+
"build:cjs": "npx esbuild index.js client.js utils.js errors.js gates.js mcp-hosts.js --bundle --platform=node --format=cjs --outdir=cjs --out-extension:.js=.cjs --legal-comments=none --external:ethers --external:@zkpassport/sdk --external:react --external:react-dom --external:react/jsx-runtime",
|
|
58
|
+
"prepack": "npm run build",
|
|
59
|
+
"prepublishOnly": "npm run lint && npm test && npm run build"
|
|
60
|
+
},
|
|
61
|
+
"keywords": [
|
|
62
|
+
"neus",
|
|
63
|
+
"verification",
|
|
64
|
+
"cryptographic-proofs",
|
|
65
|
+
"identity",
|
|
66
|
+
"authentication",
|
|
67
|
+
"blockchain",
|
|
68
|
+
"cross-chain",
|
|
69
|
+
"web3",
|
|
70
|
+
"passwordless",
|
|
71
|
+
"universal-protocol",
|
|
72
|
+
"proof",
|
|
73
|
+
"ownership",
|
|
74
|
+
"sdk",
|
|
75
|
+
"mcp",
|
|
76
|
+
"model-context-protocol",
|
|
77
|
+
"oauth"
|
|
78
|
+
],
|
|
79
|
+
"author": "NEUS Network",
|
|
80
|
+
"license": "Apache-2.0",
|
|
81
|
+
"repository": {
|
|
82
|
+
"type": "git",
|
|
83
|
+
"url": "git+https://github.com/neus/network.git",
|
|
84
|
+
"directory": "sdk"
|
|
85
|
+
},
|
|
86
|
+
"bugs": {
|
|
87
|
+
"url": "https://github.com/neus/network/issues"
|
|
88
|
+
},
|
|
89
|
+
"homepage": "https://neus.network",
|
|
90
|
+
"publishConfig": {
|
|
91
|
+
"access": "public",
|
|
92
|
+
"registry": "https://registry.npmjs.org"
|
|
93
|
+
},
|
|
94
|
+
"engines": {
|
|
95
|
+
"node": ">=20.0.0"
|
|
96
|
+
},
|
|
97
|
+
"peerDependencies": {
|
|
98
|
+
"ethers": "^6.0.0",
|
|
99
|
+
"react": ">=17.0.0",
|
|
100
|
+
"react-dom": ">=17.0.0"
|
|
101
|
+
},
|
|
102
|
+
"peerDependenciesMeta": {
|
|
103
|
+
"@zkpassport/sdk": {
|
|
104
|
+
"optional": true
|
|
105
|
+
},
|
|
106
|
+
"react": {
|
|
107
|
+
"optional": true
|
|
108
|
+
},
|
|
109
|
+
"react-dom": {
|
|
110
|
+
"optional": true
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"optionalDependencies": {
|
|
114
|
+
"@zkpassport/sdk": "^0.14.0"
|
|
115
|
+
},
|
|
116
|
+
"dependencies": {
|
|
117
|
+
"bs58": "^6.0.0"
|
|
118
|
+
},
|
|
119
|
+
"devDependencies": {
|
|
120
|
+
"@vitest/coverage-v8": "^4.1.3",
|
|
121
|
+
"esbuild": "^0.28.0",
|
|
122
|
+
"eslint": "^8.56.0",
|
|
123
|
+
"eslint-plugin-react": "^7.37.2",
|
|
124
|
+
"prettier": "^3.2.0",
|
|
125
|
+
"vitest": "^4.1.3"
|
|
126
|
+
},
|
|
127
|
+
"files": [
|
|
128
|
+
"cli/neus.mjs",
|
|
129
|
+
"mcp-hosts.js",
|
|
130
|
+
"index.js",
|
|
131
|
+
"client.js",
|
|
132
|
+
"utils.js",
|
|
133
|
+
"errors.js",
|
|
134
|
+
"gates.js",
|
|
135
|
+
"sponsor.js",
|
|
136
|
+
"cjs/**",
|
|
137
|
+
"widgets.cjs",
|
|
138
|
+
"types.d.ts",
|
|
139
|
+
"README.md",
|
|
140
|
+
"SECURITY.md",
|
|
141
|
+
"LICENSE",
|
|
142
|
+
"widgets/index.js",
|
|
143
|
+
"widgets/verify-gate/index.js",
|
|
144
|
+
"widgets/verify-gate/dist/VerifyGate.js",
|
|
145
|
+
"widgets/verify-gate/dist/ProofBadge.js"
|
|
146
|
+
]
|
|
147
|
+
}
|
package/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare module '@neus/sdk' {
|
|
1
|
+
declare module '@neus/sdk' {
|
|
2
2
|
export interface Eip1193Provider {
|
|
3
3
|
request(args: { method: string; params?: unknown[] | Record<string, unknown> }): Promise<unknown>;
|
|
4
4
|
}
|
|
@@ -57,18 +57,18 @@ declare module '@neus/sdk' {
|
|
|
57
57
|
|
|
58
58
|
export interface NeusClientConfig {
|
|
59
59
|
apiUrl?: string;
|
|
60
|
-
/** Optional server profile key
|
|
60
|
+
/** Optional server profile key; MCP/CI only. Not required for VerifyGate or gateCheck. */
|
|
61
61
|
apiKey?: string;
|
|
62
62
|
/** Public app attribution id (non-secret). */
|
|
63
63
|
appId?: string;
|
|
64
|
-
/**
|
|
64
|
+
/** Advanced server/app sponsor wallet. Published gate checkout resolves billing from gateId. */
|
|
65
65
|
billingWallet?: string;
|
|
66
66
|
/** Alias for billingWallet. */
|
|
67
67
|
sponsorOrgWallet?: string;
|
|
68
68
|
orgWallet?: string;
|
|
69
69
|
/** Site origin used when issuing billing authorization (defaults to browser origin). */
|
|
70
70
|
appOrigin?: string;
|
|
71
|
-
/**
|
|
71
|
+
/** Advanced server path only; not required for published gate checkout. */
|
|
72
72
|
appLinkQHash?: string;
|
|
73
73
|
paymentSignature?: string;
|
|
74
74
|
extraHeaders?: Record<string, string>;
|
|
@@ -479,6 +479,7 @@ declare module '@neus/sdk' {
|
|
|
479
479
|
export interface GetProofsOptions {
|
|
480
480
|
limit?: number;
|
|
481
481
|
offset?: number;
|
|
482
|
+
cursor?: string;
|
|
482
483
|
chain?: string;
|
|
483
484
|
signatureMethod?: string;
|
|
484
485
|
}
|
|
@@ -489,6 +490,8 @@ declare module '@neus/sdk' {
|
|
|
489
490
|
totalCount: number;
|
|
490
491
|
hasMore: boolean;
|
|
491
492
|
nextOffset?: number | null;
|
|
493
|
+
/** Keyset continuation when the API returns cursor paging (preferred over deep offsets). */
|
|
494
|
+
nextCursor?: string | null;
|
|
492
495
|
}
|
|
493
496
|
|
|
494
497
|
export interface GateRequirement {
|
|
@@ -514,6 +517,8 @@ declare module '@neus/sdk' {
|
|
|
514
517
|
|
|
515
518
|
export interface GateCheckApiParams {
|
|
516
519
|
address: string;
|
|
520
|
+
/** Published gate handle; resolves checks server-side (preferred public path). */
|
|
521
|
+
gateId?: string;
|
|
517
522
|
verifierIds?: string[] | string;
|
|
518
523
|
requireAll?: boolean;
|
|
519
524
|
minCount?: number;
|
|
@@ -879,6 +884,8 @@ declare module '@neus/sdk' {
|
|
|
879
884
|
|
|
880
885
|
declare module '@neus/sdk/widgets' {
|
|
881
886
|
export interface VerifyGateProps {
|
|
887
|
+
/** Published gate checkout handle (default integration path). */
|
|
888
|
+
gateId?: string;
|
|
882
889
|
requiredVerifiers?: string[];
|
|
883
890
|
onVerified?: (result: {
|
|
884
891
|
qHash: string;
|
|
@@ -910,12 +917,8 @@ declare module '@neus/sdk/widgets' {
|
|
|
910
917
|
oauthProvider?: string;
|
|
911
918
|
style?: Record<string, any>;
|
|
912
919
|
children?: any;
|
|
913
|
-
verifierOptions?: Record<string, any>;
|
|
914
|
-
verifierData?: Record<string, any>;
|
|
915
|
-
proofOptions?: Record<string, any>;
|
|
916
920
|
strategy?: 'reuse-or-create' | 'reuse' | 'fresh';
|
|
917
921
|
checkExisting?: boolean;
|
|
918
|
-
maxProofAgeMs?: number;
|
|
919
922
|
allowPrivateReuse?: boolean;
|
|
920
923
|
showBrand?: boolean;
|
|
921
924
|
disabled?: boolean;
|
|
@@ -996,3 +999,31 @@ declare module '@neus/sdk/widgets/verify-gate' {
|
|
|
996
999
|
declare module '@neus/sdk/client' {
|
|
997
1000
|
export { NeusClient } from '@neus/sdk';
|
|
998
1001
|
}
|
|
1002
|
+
|
|
1003
|
+
declare module '@neus/sdk/mcp-hosts' {
|
|
1004
|
+
export type McpInstallClient = 'claude' | 'codex' | 'cursor' | 'vscode';
|
|
1005
|
+
export type McpInstallHost = 'cursor' | 'claude' | 'codex';
|
|
1006
|
+
|
|
1007
|
+
export const NEUS_MCP_SERVER_NAME: string;
|
|
1008
|
+
export const NEUS_MCP_URL: string;
|
|
1009
|
+
export const NEUS_SETUP_CLI: string;
|
|
1010
|
+
export const NEUS_AUTH_CLI: string;
|
|
1011
|
+
export const NEUS_MCP_SETUP_DOCS_URL: string;
|
|
1012
|
+
export const MCP_INSTALL_CLIENTS: McpInstallClient[];
|
|
1013
|
+
export const MCP_INSTALL_HOSTS: McpInstallHost[];
|
|
1014
|
+
export const IDE_HOST_LABELS: Record<McpInstallHost, string>;
|
|
1015
|
+
export const IDE_HOST_BRAND_LOGOS: Record<McpInstallHost, string>;
|
|
1016
|
+
|
|
1017
|
+
export function buildNeusMcpHttpConfig(accessKey?: string | null): {
|
|
1018
|
+
type: 'http';
|
|
1019
|
+
url: string;
|
|
1020
|
+
headers?: { Authorization: string };
|
|
1021
|
+
};
|
|
1022
|
+
|
|
1023
|
+
export function buildCursorMcpInstallUrl(accessKey?: string | null): string;
|
|
1024
|
+
export function buildVsCodeMcpInstallUrl(accessKey?: string | null): string;
|
|
1025
|
+
export function buildAuthCommandForClient(client: McpInstallClient): string;
|
|
1026
|
+
export function buildSetupCommandForClient(client: McpInstallClient, accessKey?: string | null): string;
|
|
1027
|
+
export function buildSetupCommandForHost(host: McpInstallHost, accessKey?: string | null): string;
|
|
1028
|
+
export function supportsMcpInstallDeeplink(host: McpInstallHost): boolean;
|
|
1029
|
+
}
|