@visa/cli 4.1.0-rc.2 → 4.1.0-rc.200
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 +200 -226
- package/dist/checkout-engine/adapters/generic.d.ts +88 -0
- package/dist/checkout-engine/adapters/generic.js +526 -0
- package/dist/checkout-engine/adapters/index.d.ts +10 -0
- package/dist/checkout-engine/adapters/index.js +24 -0
- package/dist/checkout-engine/adapters/shopify.d.ts +55 -0
- package/dist/checkout-engine/adapters/shopify.js +514 -0
- package/dist/checkout-engine/adapters/stripe-like.d.ts +10 -0
- package/dist/checkout-engine/adapters/stripe-like.js +21 -0
- package/dist/checkout-engine/amount.d.ts +15 -0
- package/dist/checkout-engine/amount.js +72 -0
- package/dist/checkout-engine/browser-launch.d.ts +46 -0
- package/dist/checkout-engine/browser-launch.js +81 -0
- package/dist/checkout-engine/ceremony.d.ts +64 -0
- package/dist/checkout-engine/ceremony.js +261 -0
- package/dist/checkout-engine/cli-engine.d.ts +315 -0
- package/dist/checkout-engine/cli-engine.js +996 -0
- package/dist/checkout-engine/confirmed-merchants.d.ts +31 -0
- package/dist/checkout-engine/confirmed-merchants.js +165 -0
- package/dist/checkout-engine/detect.d.ts +61 -0
- package/dist/checkout-engine/detect.js +398 -0
- package/dist/checkout-engine/evidence.d.ts +25 -0
- package/dist/checkout-engine/evidence.js +104 -0
- package/dist/checkout-engine/executor.d.ts +215 -0
- package/dist/checkout-engine/executor.js +1520 -0
- package/dist/checkout-engine/hosted-approval.d.ts +195 -0
- package/dist/checkout-engine/hosted-approval.js +498 -0
- package/dist/checkout-engine/index.d.ts +9 -0
- package/dist/checkout-engine/index.js +11 -0
- package/dist/checkout-engine/instrument.d.ts +61 -0
- package/dist/checkout-engine/instrument.js +87 -0
- package/dist/checkout-engine/known-merchants.d.ts +10 -0
- package/dist/checkout-engine/known-merchants.js +38 -0
- package/dist/checkout-engine/live-fill-approval.d.ts +37 -0
- package/dist/checkout-engine/live-fill-approval.js +76 -0
- package/dist/checkout-engine/mandate/card-mandate.d.ts +121 -0
- package/dist/checkout-engine/mandate/card-mandate.js +227 -0
- package/dist/checkout-engine/mandate/mandate-ledger.d.ts +178 -0
- package/dist/checkout-engine/mandate/mandate-ledger.js +395 -0
- package/dist/checkout-engine/mandate.d.ts +25 -0
- package/dist/checkout-engine/mandate.js +100 -0
- package/dist/checkout-engine/outcome.d.ts +30 -0
- package/dist/checkout-engine/outcome.js +225 -0
- package/dist/checkout-engine/owner-only-file.d.ts +19 -0
- package/dist/checkout-engine/owner-only-file.js +41 -0
- package/dist/checkout-engine/package.json +3 -0
- package/dist/checkout-engine/receipt-dir.d.ts +6 -0
- package/dist/checkout-engine/receipt-dir.js +8 -0
- package/dist/checkout-engine/receipt.d.ts +121 -0
- package/dist/checkout-engine/receipt.js +138 -0
- package/dist/checkout-engine/trace-handles.d.ts +8 -0
- package/dist/checkout-engine/trace-handles.js +12 -0
- package/dist/checkout-engine/types.d.ts +52 -0
- package/dist/checkout-engine/types.js +2 -0
- package/dist/checkout-engine/unresolved-charges.d.ts +34 -0
- package/dist/checkout-engine/unresolved-charges.js +125 -0
- package/dist/checkout-engine/vgs-gateway/server-mint-client.d.ts +101 -0
- package/dist/checkout-engine/vgs-gateway/server-mint-client.js +218 -0
- package/dist/checkout-engine/vgs-live-instrument.d.ts +144 -0
- package/dist/checkout-engine/vgs-live-instrument.js +229 -0
- package/dist/checkout-engine/vic-confirmation.d.ts +52 -0
- package/dist/checkout-engine/vic-confirmation.js +45 -0
- package/dist/checkout-engine/web-bot-auth.d.ts +92 -0
- package/dist/checkout-engine/web-bot-auth.js +159 -0
- package/dist/cli.js +721 -445
- package/dist/mcp-apps/ucp-checkout.html +280 -0
- package/dist/mcp-server/index.js +573 -175
- package/dist/skills/pair-visa-agent/RUNTIMES.md +93 -0
- package/dist/skills/pair-visa-agent/SKILL.md +557 -0
- package/dist/skills/pair-visa-agent/scripts/setup.mjs +48 -0
- package/dist/subway-direct.mjs +1 -0
- package/install.ps1 +5 -43
- package/install.sh +5 -37
- package/native/bin/win32-x64/visa-keychain-win.exe +0 -0
- package/package.json +33 -25
- package/server.json +4 -4
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Portable provisioner for the pair-visa-agent skill.
|
|
3
|
+
//
|
|
4
|
+
// Ensures the `visa` CLI is installed so ANY Agent Skills runtime can pair —
|
|
5
|
+
// not just OpenClaw (whose `metadata.openclaw.install` auto-runs). Hermes,
|
|
6
|
+
// Claude Code, and any other agentskills.io-compatible runtime run this bundled
|
|
7
|
+
// script per the standard's `scripts/` execution stage.
|
|
8
|
+
//
|
|
9
|
+
// Safe to run repeatedly: it no-ops when `visa` already resolves. Pinned to @rc
|
|
10
|
+
// because the v4 agent surface is prerelease (the @latest tag predates the
|
|
11
|
+
// `visa agent` commands); drop the tag once 4.1.0 is promoted to latest.
|
|
12
|
+
|
|
13
|
+
import { execSync } from 'node:child_process'
|
|
14
|
+
|
|
15
|
+
function resolves(cmd) {
|
|
16
|
+
try {
|
|
17
|
+
execSync(`${cmd} --version`, { stdio: 'ignore' })
|
|
18
|
+
return true
|
|
19
|
+
} catch {
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (resolves('visa') || resolves('visa-cli')) {
|
|
25
|
+
console.log('✓ visa CLI already installed — nothing to do. Run the pairing flow in SKILL.md.')
|
|
26
|
+
process.exit(0)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
console.log('Installing @visa/cli@rc (the v4 agent surface is prerelease)…')
|
|
30
|
+
try {
|
|
31
|
+
execSync('npm install -g @visa/cli@rc', { stdio: 'inherit' })
|
|
32
|
+
} catch {
|
|
33
|
+
console.error(
|
|
34
|
+
'Global install failed. Try `npm install -g @visa/cli@rc` manually (may need sudo, or set a\n' +
|
|
35
|
+
'user-writable npm prefix: `npm config set prefix ~/.npm-global` and add its `bin` to PATH).'
|
|
36
|
+
)
|
|
37
|
+
process.exit(1)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!resolves('visa') && !resolves('visa-cli')) {
|
|
41
|
+
console.error(
|
|
42
|
+
'Installed, but `visa` is not on PATH. Ensure your npm global bin dir is on PATH\n' +
|
|
43
|
+
'(`npm bin -g` shows it), then re-run this script.'
|
|
44
|
+
)
|
|
45
|
+
process.exit(1)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
console.log('✓ visa CLI ready. Now run the pairing flow in SKILL.md.')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createLibp2p as x}from"libp2p";import{tcp as A}from"@libp2p/tcp";import{noise as E}from"@chainsafe/libp2p-noise";import{yamux as U}from"@chainsafe/libp2p-yamux";import{generateKeyPairFromSeed as b}from"@libp2p/crypto/keys";import{multiaddr as q}from"@multiformats/multiaddr";import{toString as D}from"uint8arrays/to-string";var m=new TextEncoder,R=new TextDecoder;function y(r,e){let n=typeof e=="bigint"?e:BigInt(e);for(;n>0x7fn;)r.push(Number(n&0x7fn|0x80n)),n>>=7n;r.push(Number(n))}function d(r,e){let n=0n,t=0n,o=e;for(;;){let s=r[o++];if(n|=BigInt(s&127)<<t,(s&128)===0)break;t+=7n}return[n,o]}function g(r,e){return r<<3|e}function f(r,e,n){r.push(g(e,2)),y(r,n.length);for(let t of n)r.push(t)}function M(r,e){let n=[];return f(n,1,m.encode(r)),e&&e.length>0&&f(n,2,m.encode(e)),Uint8Array.from(n)}function O(r,e,n){let t=[];return n!==0n&&(t.push(g(1,0)),y(t,n)),f(t,2,M(r,e)),Uint8Array.from(t)}function T(r){let e=[];return f(e,1,m.encode(r)),Uint8Array.from(e)}function P(r,e){let n=[];return e!==0n&&(n.push(g(1,0)),y(n,e)),f(n,3,T(r)),Uint8Array.from(n)}var S="Name not found";function L(r){let e=0,n={success:!1,error:""};for(;e<r.length;){let[t,o]=d(r,e);e=o;let s=Number(t)>>3,i=Number(t)&7;if(s===1&&i===0){let[u,l]=d(r,e);e=l,n.success=u!==0n}else if(s===2&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.error=R.decode(r.subarray(a,c)),e=c}else e=h(r,e,i)}return n}function F(r){let e=0,n={peerId:new Uint8Array(0),error:""};for(;e<r.length;){let[t,o]=d(r,e);e=o;let s=Number(t)>>3,i=Number(t)&7;if(s===1&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.peerId=r.subarray(a,c),e=c}else if(s===2&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.error=R.decode(r.subarray(a,c)),e=c}else e=h(r,e,i)}return n}function h(r,e,n){if(n===0)return d(r,e)[1];if(n===2){let[t,o]=d(r,e);return o+Number(t)}if(n===5)return e+4;if(n===1)return e+8;throw new Error(`unsupported wire type ${n}`)}function v(r){let e=0,n={requestId:0n};for(;e<r.length;){let[t,o]=d(r,e);e=o;let s=Number(t)>>3,i=Number(t)&7;if(s===1&&i===0){let[u,l]=d(r,e);e=l,n.requestId=u}else if(s===13&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.registerNameResponse=L(r.subarray(a,c)),e=c}else if(s===14&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.resolveNameResponse=F(r.subarray(a,c)),e=c}else e=h(r,e,i)}return n}function B(r){let e=new Uint8Array(4+r.length);return new DataView(e.buffer).setUint32(0,r.length,!1),e.set(r,4),e}function w(r){return new DataView(r.buffer,r.byteOffset,4).getUint32(0,!1)}function V(r){if(r.length<4)return{success:!1,error:"short reply (no length prefix)"};let e=w(r.subarray(0,4));return r.length<4+e?{success:!1,error:`truncated frame (have ${r.length-4}, need ${e})`}:v(r.subarray(4,4+e)).registerNameResponse??{success:!1,error:"reply carried no register_name_response"}}function $(r){if(r.length<4)return{peerId:new Uint8Array(0),error:"short reply (no length prefix)"};let e=w(r.subarray(0,4));return r.length<4+e?{peerId:new Uint8Array(0),error:`truncated frame (have ${r.length-4}, need ${e})`}:v(r.subarray(4,4+e)).resolveNameResponse??{peerId:new Uint8Array(0),error:"reply carried no resolve_name_response"}}var k="/subway/p2p/1.0.0",Y=15e3,z=15e3,N=1<<20;function p(r){let e=r.reduce((o,s)=>o+s.length,0),n=new Uint8Array(e),t=0;for(let o of r)n.set(o,t),t+=o.length;return n}async function K(r){let e=[],n=0,t=-1;for await(let o of r){let s=o instanceof Uint8Array?o:o.subarray();if(e.push(s),n+=s.length,n>N)throw new Error("subway: reply exceeded max size");if(t<0&&n>=4&&(t=4+w(p(e).subarray(0,4)),t>N))throw new Error("subway: declared frame exceeds max size");if(t>=0&&n>=t)return p(e).subarray(0,t)}return p(e)}async function _(r){return x({...r?{privateKey:await b("Ed25519",r)}:{},transports:[A()],connectionEncrypters:[E()],streamMuxers:[U()],connectionGater:{denyDialMultiaddr:async()=>!1}})}async function I(r,e,n){let t=await r.dialProtocol(q(e),k,{signal:AbortSignal.timeout(Y)});t.send(B(n));let o;return Promise.race([K(t),new Promise((s,i)=>{o=setTimeout(()=>i(new Error("subway: request timed out")),z)})]).finally(()=>clearTimeout(o))}async function C(r){let e=await _(r.seed);try{let n=await I(e,r.relayMultiaddr,O(r.name,r.binding,r.requestId??1n)),t=V(n);return{success:t.success,error:t.error,peerId:e.peerId.toString()}}finally{await e.stop()}}async function G(r){let e=await _(r.seed);try{let n=await I(e,r.relayMultiaddr,P(r.name,r.requestId??1n)),t=$(n);if(t.peerId.length===0){let o=t.error||"name not found";return{outcome:o===S?"not_found":"lookup_failed",found:!1,peerId:"",error:o}}return{outcome:"found",found:!0,peerId:D(t.peerId,"base58btc"),error:""}}finally{await e.stop()}}export{C as registerDirect,G as resolveDirect};
|
package/install.ps1
CHANGED
|
@@ -108,8 +108,8 @@ try {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
$major = [int]$nodeMatch.Groups['major'].Value
|
|
111
|
-
if ($major -lt
|
|
112
|
-
Write-Host " Node.js $nodeVersion is too old. Version
|
|
111
|
+
if ($major -lt 20) {
|
|
112
|
+
Write-Host " Node.js $nodeVersion is too old. Version 20+ required." -ForegroundColor Red
|
|
113
113
|
Write-Host " Install from https://nodejs.org/ and try again." -ForegroundColor Yellow
|
|
114
114
|
Wait-BeforeExit
|
|
115
115
|
exit 1
|
|
@@ -168,7 +168,6 @@ if ($npmExitCode -ne 0) {
|
|
|
168
168
|
# Verify
|
|
169
169
|
$cliCommandNames = Get-InstalledCliCommands
|
|
170
170
|
$verifiedCommand = $null
|
|
171
|
-
$verifiedCommandPath = $null
|
|
172
171
|
$visaVersion = $null
|
|
173
172
|
|
|
174
173
|
foreach ($commandName in $cliCommandNames) {
|
|
@@ -177,12 +176,9 @@ foreach ($commandName in $cliCommandNames) {
|
|
|
177
176
|
continue
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
# Capture the resolved executable path so the setup hand-off below runs
|
|
181
|
-
# exactly the binary verified here, not a fresh PATH lookup.
|
|
182
179
|
$versionOutput = (& $commandInfo.Source --version 2>$null | Select-Object -First 1)
|
|
183
180
|
if ($LASTEXITCODE -eq 0 -and $versionOutput) {
|
|
184
181
|
$verifiedCommand = $commandName
|
|
185
|
-
$verifiedCommandPath = $commandInfo.Source
|
|
186
182
|
$visaVersion = $versionOutput.Trim()
|
|
187
183
|
break
|
|
188
184
|
}
|
|
@@ -191,46 +187,12 @@ foreach ($commandName in $cliCommandNames) {
|
|
|
191
187
|
Write-Host ""
|
|
192
188
|
if ($verifiedCommand) {
|
|
193
189
|
Write-Host " Visa CLI $visaVersion installed." -ForegroundColor Green
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
# uninterrupted flow. Hardening:
|
|
197
|
-
# * Auto-launch only on an interactive console with input/output/error
|
|
198
|
-
# all attached - setup must prompt and open a browser. Redirected
|
|
199
|
-
# streams and CI fall back to printing the next step.
|
|
200
|
-
# * Invoke $verifiedCommandPath (the path verified just above), not a
|
|
201
|
-
# bare command name re-resolved through PATH.
|
|
202
|
-
# * Pass only the literal "setup" argument - nothing caller-controlled.
|
|
203
|
-
if ($Host.Name -eq 'ConsoleHost' -and -not [Console]::IsInputRedirected -and -not [Console]::IsOutputRedirected -and -not [Console]::IsErrorRedirected -and -not $env:CI) {
|
|
204
|
-
Write-Host ""
|
|
205
|
-
Write-Host " Continuing to setup..." -ForegroundColor Cyan
|
|
206
|
-
Write-Host ""
|
|
207
|
-
try {
|
|
208
|
-
$setupProcess = Start-Process -FilePath $verifiedCommandPath -ArgumentList @('setup') -Wait -NoNewWindow -PassThru -ErrorAction Stop
|
|
209
|
-
} catch {
|
|
210
|
-
Write-Host ""
|
|
211
|
-
Write-Host " Setup could not start. Visa CLI is installed." -ForegroundColor Yellow
|
|
212
|
-
Write-Host " PowerShell error: $($_.Exception.Message)" -ForegroundColor Yellow
|
|
213
|
-
Write-Host " run '$verifiedCommand setup' when you're ready to finish." -ForegroundColor Yellow
|
|
214
|
-
Wait-BeforeExit
|
|
215
|
-
exit 1
|
|
216
|
-
}
|
|
217
|
-
if ($setupProcess.ExitCode -ne 0) {
|
|
218
|
-
Write-Host ""
|
|
219
|
-
Write-Host " Setup exited before completion. Visa CLI is installed." -ForegroundColor Yellow
|
|
220
|
-
Write-Host " run '$verifiedCommand setup' when you're ready to finish." -ForegroundColor Yellow
|
|
221
|
-
Wait-BeforeExit
|
|
222
|
-
exit 1
|
|
223
|
-
}
|
|
224
|
-
exit 0
|
|
225
|
-
} else {
|
|
226
|
-
Write-Host " Run '$verifiedCommand setup' to get started." -ForegroundColor Cyan
|
|
227
|
-
Write-Host " After setup, run /mcp inside Claude Code, not PowerShell, if Claude Code was already open." -ForegroundColor Cyan
|
|
228
|
-
}
|
|
190
|
+
Write-Host " Connect an AI client with: $verifiedCommand connect <client>" -ForegroundColor Cyan
|
|
191
|
+
Write-Host " Then ask your agent to call enroll_agent." -ForegroundColor Cyan
|
|
229
192
|
Write-Host ""
|
|
230
193
|
} else {
|
|
231
194
|
$primaryCommand = $cliCommandNames | Select-Object -First 1
|
|
232
195
|
Write-Host " Installed but '$primaryCommand' was not runnable from PATH yet." -ForegroundColor Yellow
|
|
233
|
-
Write-Host " Close and reopen PowerShell, then run: $primaryCommand
|
|
234
|
-
Write-Host " Run /mcp inside Claude Code after setup if you need to reconnect the MCP server." -ForegroundColor Yellow
|
|
196
|
+
Write-Host " Close and reopen PowerShell, then run: $primaryCommand connect <client>" -ForegroundColor Yellow
|
|
235
197
|
Write-Host ""
|
|
236
198
|
}
|
package/install.sh
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
_visa_install() {
|
|
11
11
|
set -euo pipefail
|
|
12
12
|
|
|
13
|
-
REQUIRED_NODE_MAJOR=
|
|
14
|
-
PACKAGE="@visa/cli"
|
|
13
|
+
REQUIRED_NODE_MAJOR=20
|
|
14
|
+
PACKAGE="@visa/cli@rc"
|
|
15
15
|
|
|
16
16
|
# ── colours (disabled when piped) ─────────────────────────────────────────────
|
|
17
17
|
if [ -t 1 ]; then
|
|
@@ -99,9 +99,6 @@ fi
|
|
|
99
99
|
echo "$NPM_OUTPUT"
|
|
100
100
|
|
|
101
101
|
# ── verify ────────────────────────────────────────────────────────────────────
|
|
102
|
-
# Capture the absolute path resolved here so the setup hand-off below invokes
|
|
103
|
-
# exactly the binary we just verified, instead of re-resolving "visa-cli"
|
|
104
|
-
# through $PATH a second time.
|
|
105
102
|
VISA_BIN=""
|
|
106
103
|
VISA_VERSION=""
|
|
107
104
|
if VISA_BIN="$(command -v visa-cli 2>/dev/null)"; then
|
|
@@ -111,40 +108,11 @@ fi
|
|
|
111
108
|
echo ""
|
|
112
109
|
if [ -n "$VISA_VERSION" ]; then
|
|
113
110
|
ok "Visa CLI ${VISA_VERSION} installed."
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
# * Auto-launch only when output streams are real terminals and setup can
|
|
117
|
-
# read from either stdin or /dev/tty. That keeps `curl ... | bash` usable:
|
|
118
|
-
# the script arrives on stdin, while setup prompts still read from the
|
|
119
|
-
# user's terminal. CI and redirected output print the next step instead.
|
|
120
|
-
# * Invoke "$VISA_BIN" (the path verified just above), never a bare
|
|
121
|
-
# "visa-cli" re-resolved through $PATH at call time.
|
|
122
|
-
# * Pass only the literal "setup" argument — "$@" is never forwarded — so
|
|
123
|
-
# nothing the script's caller controls reaches the installed binary.
|
|
124
|
-
if [ -t 1 ] && [ -t 2 ] && { [ -t 0 ] || [ -r /dev/tty ]; }; then
|
|
125
|
-
echo ""
|
|
126
|
-
info "Continuing to setup..."
|
|
127
|
-
echo ""
|
|
128
|
-
SETUP_EXIT=0
|
|
129
|
-
if [ -t 0 ]; then
|
|
130
|
-
"$VISA_BIN" setup || SETUP_EXIT=$?
|
|
131
|
-
else
|
|
132
|
-
"$VISA_BIN" setup </dev/tty || SETUP_EXIT=$?
|
|
133
|
-
fi
|
|
134
|
-
if [ "$SETUP_EXIT" -ne 0 ]; then
|
|
135
|
-
echo ""
|
|
136
|
-
warn "Setup exited before completion. Visa CLI is installed."
|
|
137
|
-
warn "run 'visa-cli setup' when you're ready to finish."
|
|
138
|
-
exit 1
|
|
139
|
-
fi
|
|
140
|
-
exit 0
|
|
141
|
-
else
|
|
142
|
-
info "Run 'visa-cli setup' to get started."
|
|
143
|
-
info "After setup, run /mcp inside Claude Code, not Terminal, if Claude Code was already open."
|
|
144
|
-
fi
|
|
111
|
+
info "Connect an AI client with: visa-cli connect <client>"
|
|
112
|
+
info "Then ask your agent to call enroll_agent."
|
|
145
113
|
else
|
|
146
114
|
warn "Installed, but 'visa-cli' was not found on PATH."
|
|
147
|
-
warn "
|
|
115
|
+
warn "Restart your shell, then run: visa-cli connect <client>"
|
|
148
116
|
fi
|
|
149
117
|
echo ""
|
|
150
118
|
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visa/cli",
|
|
3
|
-
"version": "4.1.0-rc.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "4.1.0-rc.200",
|
|
4
|
+
"description": "Visa CLI runtime for stable agent identity and separately authorized payment capabilities",
|
|
5
5
|
"bin": {
|
|
6
6
|
"visa-cli": "./bin/visa-cli.js",
|
|
7
7
|
"visa": "./bin/visa-cli.js"
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"sync:server-json": "node scripts/sync-server-json.mjs",
|
|
11
11
|
"check:server-json": "node scripts/sync-server-json.mjs --check",
|
|
12
|
-
"prebuild": "node scripts/sync-server-json.mjs && pnpm --filter @visa/money build && pnpm --filter @visa/crypto build && pnpm --filter subway-sdk build && pnpm --filter @visa-cli/tools build && pnpm --filter @visa/identity build && pnpm --filter @visa/wallet build && pnpm --filter @visa/wallet-tools build",
|
|
12
|
+
"prebuild": "node scripts/sync-server-json.mjs && pnpm --filter @visa/shared build && pnpm --filter @visa/observability build && pnpm --filter @visa/money build && pnpm --filter @visa/crypto build && pnpm --filter subway-sdk build && pnpm --filter @visa-cli/tools build && pnpm --filter @visa/identity build && pnpm --filter @visa/wallet build && pnpm --filter @visa/agent-mail build && pnpm --filter @visa/wallet-tools build && pnpm --filter @visa/checkout-engine build",
|
|
13
13
|
"build": "tsc --noEmit && node esbuild.config.js",
|
|
14
14
|
"prepack": "node scripts/sync-server-json.mjs --check",
|
|
15
15
|
"dev": "tsc --watch",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"test:unit:watch": "jest --config jest.config.js --watch",
|
|
21
21
|
"test:unit:coverage": "jest --config jest.config.js --coverage",
|
|
22
22
|
"test:smoke": "VISA_AUTH_URL=https://auth.visacli.sh jest --config jest.smoke.config.js",
|
|
23
|
+
"test:packed": "node scripts/packed-cli-smoke.mjs",
|
|
23
24
|
"test:integration": "jest --config jest.integration.config.js",
|
|
24
25
|
"test:e2e": "jest --config jest.e2e.config.js",
|
|
25
|
-
"test:catalog-e2e": "jest --config jest.catalog-e2e.config.js",
|
|
26
26
|
"test:all": "npm run test:unit && npm run test:integration && npm run test:e2e",
|
|
27
27
|
"prepublishOnly": "npm run build && npm test",
|
|
28
28
|
"lint": "eslint src/**/*.ts",
|
|
@@ -42,45 +42,54 @@
|
|
|
42
42
|
"author": "Visa Crypto Labs",
|
|
43
43
|
"license": "SEE LICENSE IN LICENSE",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@modelcontextprotocol/
|
|
45
|
+
"@modelcontextprotocol/core": "2.0.0",
|
|
46
|
+
"@modelcontextprotocol/ext-apps": "1.7.5",
|
|
47
|
+
"@modelcontextprotocol/server": "2.0.0",
|
|
48
|
+
"@ucp-js/sdk": "0.4.4",
|
|
46
49
|
"commander": "^12.1.0",
|
|
47
|
-
"
|
|
50
|
+
"punycode": "^2.3.1",
|
|
51
|
+
"zod": "^3.25.76"
|
|
48
52
|
},
|
|
49
53
|
"optionalDependencies": {
|
|
50
|
-
"libp2p": "^3.3.4",
|
|
51
|
-
"@libp2p/tcp": "^11.0.22",
|
|
52
|
-
"@libp2p/crypto": "^5.1.20",
|
|
53
54
|
"@chainsafe/libp2p-noise": "^17.0.0",
|
|
54
55
|
"@chainsafe/libp2p-yamux": "^8.0.1",
|
|
56
|
+
"@libp2p/crypto": "^5.1.22",
|
|
57
|
+
"@libp2p/tcp": "^11.0.26",
|
|
55
58
|
"@multiformats/multiaddr": "^13.0.3",
|
|
59
|
+
"libp2p": "^3.3.8",
|
|
60
|
+
"playwright-core": "^1.48.2",
|
|
56
61
|
"uint8arrays": "^6.1.1"
|
|
57
62
|
},
|
|
58
63
|
"devDependencies": {
|
|
64
|
+
"@changesets/changelog-git": "^0.2.1",
|
|
65
|
+
"@types/express": "^5.0.0",
|
|
66
|
+
"@changesets/cli": "^2.31.1",
|
|
67
|
+
"@types/jest": "^30.0.0",
|
|
68
|
+
"@types/node": "^26.1.0",
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "^8.65.0",
|
|
70
|
+
"@typescript-eslint/parser": "^8.65.0",
|
|
71
|
+
"@visa-cli/tools": "workspace:*",
|
|
72
|
+
"@visa/agent-mail": "workspace:*",
|
|
73
|
+
"@visa/checkout-engine": "workspace:*",
|
|
59
74
|
"@visa/crypto": "workspace:*",
|
|
60
|
-
"
|
|
75
|
+
"@visa/identity": "workspace:*",
|
|
61
76
|
"@visa/money": "workspace:*",
|
|
77
|
+
"@visa/observability": "workspace:*",
|
|
78
|
+
"@visa/shared": "workspace:*",
|
|
62
79
|
"@visa/wallet": "workspace:*",
|
|
63
80
|
"@visa/wallet-tools": "workspace:*",
|
|
64
|
-
"@visa/observability": "workspace:*",
|
|
65
|
-
"@visa-cli/tools": "workspace:*",
|
|
66
|
-
"@changesets/changelog-git": "^0.2.1",
|
|
67
|
-
"@changesets/cli": "^2.31.0",
|
|
68
|
-
"@types/jest": "^30.0.0",
|
|
69
|
-
"@types/node": "^26.1.0",
|
|
70
|
-
"@typescript-eslint/eslint-plugin": "^8.63.0",
|
|
71
|
-
"@typescript-eslint/parser": "^8.63.0",
|
|
72
|
-
"@types/express": "^5.0.0",
|
|
73
81
|
"esbuild": "^0.28.1",
|
|
74
|
-
"express": "^4.21.0",
|
|
75
82
|
"eslint": "^10.0.2",
|
|
76
83
|
"eslint-config-prettier": "^10.1.8",
|
|
84
|
+
"express": "^4.21.0",
|
|
77
85
|
"jest": "^29.7.0",
|
|
78
|
-
"prettier": "^3.9.
|
|
79
|
-
"
|
|
86
|
+
"prettier": "^3.9.6",
|
|
87
|
+
"subway-sdk": "workspace:*",
|
|
88
|
+
"ts-jest": "^29.4.12",
|
|
80
89
|
"typescript": "^5.7.0"
|
|
81
90
|
},
|
|
82
91
|
"engines": {
|
|
83
|
-
"node": ">=
|
|
92
|
+
"node": ">=20.0.0"
|
|
84
93
|
},
|
|
85
94
|
"mcpName": "io.github.visa-crypto-labs/visa-cli",
|
|
86
95
|
"files": [
|
|
@@ -93,7 +102,6 @@
|
|
|
93
102
|
"native/build-win.bat",
|
|
94
103
|
"native/bin/win32-x64/visa-keychain-win.exe",
|
|
95
104
|
"server.json",
|
|
96
|
-
"README.md"
|
|
97
|
-
"LICENSE"
|
|
105
|
+
"README.md"
|
|
98
106
|
]
|
|
99
107
|
}
|
package/server.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.visa-crypto-labs/visa-cli",
|
|
4
|
-
"version": "4.1.0-rc.
|
|
4
|
+
"version": "4.1.0-rc.200",
|
|
5
5
|
"title": "Visa CLI",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "Pair a human-approved agent identity, configure payment capabilities separately, and discover and pay x402 services from your AI coding assistant.",
|
|
7
7
|
"websiteUrl": "https://github.com/Visa-Crypto-Labs/Visa-mono/tree/main/packages/cli#readme",
|
|
8
8
|
"packages": [
|
|
9
9
|
{
|
|
10
10
|
"registryType": "npm",
|
|
11
11
|
"identifier": "@visa/cli",
|
|
12
|
-
"version": "4.1.0-rc.
|
|
12
|
+
"version": "4.1.0-rc.200",
|
|
13
13
|
"transport": {
|
|
14
14
|
"type": "stdio"
|
|
15
15
|
},
|