@subly_fi/pay 0.5.0 → 0.6.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 +8 -4
- package/dist/cli.js +4 -2
- package/dist/deposit.js +49 -8
- package/dist/pay.js +26 -9
- package/dist/setup-link.js +1494 -0
- package/dist/setup-status.js +27 -0
- package/dist/withdraw.js +32 -8
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/setup-status.ts
|
|
2
|
+
function fail(message) {
|
|
3
|
+
process.stderr.write(`${message}
|
|
4
|
+
`);
|
|
5
|
+
process.exit(1);
|
|
6
|
+
}
|
|
7
|
+
var arg = process.argv[2];
|
|
8
|
+
if (arg === void 0) {
|
|
9
|
+
fail("Usage: pay setup-status <st_sessionId | setupUrl>");
|
|
10
|
+
}
|
|
11
|
+
var match = arg.match(/st_[0-9a-f]+/i);
|
|
12
|
+
if (match === null) {
|
|
13
|
+
fail(`no session id (st_...) found in: ${arg}`);
|
|
14
|
+
}
|
|
15
|
+
var sessionId = match[0];
|
|
16
|
+
var relayerBaseUrl = process.env.SUBLY_RELAYER_URL ?? process.env.SUBLY_FACILITATOR_URL ?? "https://api.demo.sublyfi.com";
|
|
17
|
+
var response = await fetch(
|
|
18
|
+
`${relayerBaseUrl}/v1/setup-sessions/${encodeURIComponent(sessionId)}`
|
|
19
|
+
);
|
|
20
|
+
var text = await response.text();
|
|
21
|
+
if (response.status !== 200) {
|
|
22
|
+
process.stdout.write(`${text}
|
|
23
|
+
`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
process.stdout.write(`${text}
|
|
27
|
+
`);
|
package/dist/withdraw.js
CHANGED
|
@@ -1058,26 +1058,26 @@ var VaultFlowClient = class {
|
|
|
1058
1058
|
* up and used automatically before surfacing deposit_approval_required.
|
|
1059
1059
|
*/
|
|
1060
1060
|
async deposit(input) {
|
|
1061
|
-
let
|
|
1061
|
+
let approvalId2 = input.approvalId;
|
|
1062
1062
|
let prepared;
|
|
1063
1063
|
try {
|
|
1064
1064
|
prepared = await this.postJson("prepare", "/v1/deposits/prepare", {
|
|
1065
1065
|
wallet: this.signer.walletAddress,
|
|
1066
1066
|
amountRawUsdc: input.amountRawUsdc.toString(),
|
|
1067
|
-
...
|
|
1067
|
+
...approvalId2 === void 0 ? {} : { approvalId: approvalId2 }
|
|
1068
1068
|
});
|
|
1069
1069
|
} catch (error) {
|
|
1070
|
-
if (!(error instanceof VaultFlowClientError) || error.code !== "deposit_approval_required" ||
|
|
1070
|
+
if (!(error instanceof VaultFlowClientError) || error.code !== "deposit_approval_required" || approvalId2 !== void 0) {
|
|
1071
1071
|
throw error;
|
|
1072
1072
|
}
|
|
1073
|
-
|
|
1074
|
-
if (
|
|
1073
|
+
approvalId2 = await this.findApprovedDepositApproval(input.amountRawUsdc);
|
|
1074
|
+
if (approvalId2 === void 0) {
|
|
1075
1075
|
throw error;
|
|
1076
1076
|
}
|
|
1077
1077
|
prepared = await this.postJson("prepare", "/v1/deposits/prepare", {
|
|
1078
1078
|
wallet: this.signer.walletAddress,
|
|
1079
1079
|
amountRawUsdc: input.amountRawUsdc.toString(),
|
|
1080
|
-
approvalId
|
|
1080
|
+
approvalId: approvalId2
|
|
1081
1081
|
});
|
|
1082
1082
|
}
|
|
1083
1083
|
const signed = await this.signer.signDeposit({
|
|
@@ -1423,9 +1423,13 @@ var relayerBaseUrl = process.env.SUBLY_RELAYER_URL ?? process.env.SUBLY_FACILITA
|
|
|
1423
1423
|
var amountRawUsdc = process.argv[2];
|
|
1424
1424
|
if (amountRawUsdc === void 0 || !/^[1-9]\d*$/.test(amountRawUsdc)) {
|
|
1425
1425
|
fail(
|
|
1426
|
-
"Usage:
|
|
1426
|
+
"Usage: pay withdraw <amountRawUsdc> [apr_<approvalId>] (positive integer, e.g. 1000000 = 1 USDC)"
|
|
1427
1427
|
);
|
|
1428
1428
|
}
|
|
1429
|
+
var approvalId = process.argv[3];
|
|
1430
|
+
if (approvalId !== void 0 && !/^apr_[0-9a-f]+$/i.test(approvalId)) {
|
|
1431
|
+
fail(`unrecognized argument: ${approvalId} (expected apr_<approvalId>)`);
|
|
1432
|
+
}
|
|
1429
1433
|
var keyPairSigner = await loadKeyPairSigner({
|
|
1430
1434
|
base58Secret: process.env.SUBLY_DEMO_AGENT_KEYPAIR,
|
|
1431
1435
|
jsonFilePath: process.env.SUBLY_DEMO_AGENT_KEYPAIR_PATH,
|
|
@@ -1449,10 +1453,30 @@ console.log(
|
|
|
1449
1453
|
var submitted;
|
|
1450
1454
|
try {
|
|
1451
1455
|
submitted = await vaultFlows.withdraw({
|
|
1452
|
-
amountRawUsdc: BigInt(amountRawUsdc)
|
|
1456
|
+
amountRawUsdc: BigInt(amountRawUsdc),
|
|
1457
|
+
...approvalId === void 0 ? {} : { approvalId }
|
|
1453
1458
|
});
|
|
1454
1459
|
} catch (error) {
|
|
1455
1460
|
if (error instanceof VaultFlowClientError) {
|
|
1461
|
+
if (error.code === "withdrawal_approval_required") {
|
|
1462
|
+
const details = error.errorDetails ?? {};
|
|
1463
|
+
process.stdout.write(
|
|
1464
|
+
`${JSON.stringify(
|
|
1465
|
+
{
|
|
1466
|
+
ok: false,
|
|
1467
|
+
approvalRequired: true,
|
|
1468
|
+
approvalId: details.approvalId ?? null,
|
|
1469
|
+
approveUrl: details.approveUrl ?? null,
|
|
1470
|
+
expiresAtMs: details.expiresAtMs ?? null,
|
|
1471
|
+
message: `This withdrawal needs the owner's approval. Paste approveUrl to the user; once they approve, retry: pay withdraw ${amountRawUsdc} ${details.approvalId ?? "<approvalId>"}`
|
|
1472
|
+
},
|
|
1473
|
+
null,
|
|
1474
|
+
2
|
|
1475
|
+
)}
|
|
1476
|
+
`
|
|
1477
|
+
);
|
|
1478
|
+
process.exit(1);
|
|
1479
|
+
}
|
|
1456
1480
|
fail(`[withdraw] ${error.step} failed: ${error.message}`);
|
|
1457
1481
|
}
|
|
1458
1482
|
throw error;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subly_fi/pay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Subly client: pay compatible standard x402 Solana USDC exact APIs from Kamino vault yield — the seller needs no Subly integration. Ships an MCP server and a one-shot pay/deposit CLI; non-custodial (signs locally with your own key).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|