@haven_ai/sdk 0.10.0-alpha.0 → 0.11.0-alpha.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 -5
- package/dist/{base64-CiR5BJhk.d.cts → base64-D4VZhgUg.d.ts} +2 -2
- package/dist/{base64-CxkinHPQ.d.ts → base64-DR4Gl8cD.d.cts} +2 -2
- package/dist/{chunk-EWTHDEIW.js → chunk-34YJQFCM.js} +3 -3
- package/dist/{chunk-EWTHDEIW.js.map → chunk-34YJQFCM.js.map} +1 -1
- package/dist/{chunk-6LEXYQ7J.cjs → chunk-DXBAN4SN.cjs} +4 -4
- package/dist/{chunk-6LEXYQ7J.cjs.map → chunk-DXBAN4SN.cjs.map} +1 -1
- package/dist/{chunk-TD2PHUYP.js → chunk-I7SL4A6X.js} +19 -3
- package/dist/chunk-I7SL4A6X.js.map +1 -0
- package/dist/{chunk-22FJ4JQO.cjs → chunk-IKQIIMM6.cjs} +35 -35
- package/dist/{chunk-22FJ4JQO.cjs.map → chunk-IKQIIMM6.cjs.map} +1 -1
- package/dist/{chunk-H37YVYZA.cjs → chunk-MZKLAHBK.cjs} +19 -3
- package/dist/chunk-MZKLAHBK.cjs.map +1 -0
- package/dist/{chunk-MLUWABVT.js → chunk-ZDJ55LR7.js} +4 -4
- package/dist/{chunk-MLUWABVT.js.map → chunk-ZDJ55LR7.js.map} +1 -1
- package/dist/edge.cjs +93 -93
- package/dist/edge.d.cts +4 -4
- package/dist/edge.d.ts +4 -4
- package/dist/edge.js +4 -4
- package/dist/index.cjs +755 -450
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +55 -26
- package/dist/index.d.ts +55 -26
- package/dist/index.js +439 -134
- package/dist/index.js.map +1 -1
- package/dist/{receipt-Cg9a5Seq.d.ts → receipt-CbD8L0WL.d.ts} +1 -1
- package/dist/{receipt-q7ez8Zb2.d.cts → receipt-_bWCELEH.d.cts} +1 -1
- package/dist/test-support.cjs +21 -21
- package/dist/test-support.d.cts +2 -2
- package/dist/test-support.d.ts +2 -2
- package/dist/test-support.js +2 -2
- package/dist/{types-BKgqzvnk.d.cts → types-DKmvjXK6.d.cts} +65 -10
- package/dist/{types-BKgqzvnk.d.ts → types-DKmvjXK6.d.ts} +65 -10
- package/package.json +1 -1
- package/dist/chunk-H37YVYZA.cjs.map +0 -1
- package/dist/chunk-TD2PHUYP.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkMZKLAHBK_cjs = require('./chunk-MZKLAHBK.cjs');
|
|
4
4
|
var viem = require('viem');
|
|
5
5
|
var crypto = require('crypto');
|
|
6
6
|
var secp256k1 = require('@noble/curves/secp256k1');
|
|
7
7
|
var accounts = require('viem/accounts');
|
|
8
8
|
|
|
9
9
|
var TYPED_DATA_NOT_ALLOWED = "TYPED_DATA_NOT_ALLOWED";
|
|
10
|
-
var HavenTypedDataRefusedError = class extends
|
|
10
|
+
var HavenTypedDataRefusedError = class extends chunkMZKLAHBK_cjs.HavenSigningError {
|
|
11
11
|
constructor(message) {
|
|
12
12
|
super(message);
|
|
13
13
|
this.code = TYPED_DATA_NOT_ALLOWED;
|
|
@@ -48,7 +48,7 @@ function assertBoundDirectPaymentUserOp(typedData, delegateAddress) {
|
|
|
48
48
|
`This signer only signs direct payments on chains the delegation rail has pinned contracts for (${[...DIRECT_PAYMENT_CHAIN_IDS].join(", ")}); this typed data names chain ${String(domain.chainId)}. Refusing.`
|
|
49
49
|
);
|
|
50
50
|
}
|
|
51
|
-
const ownAccount =
|
|
51
|
+
const ownAccount = chunkMZKLAHBK_cjs.deriveDelegateAccountAddress(delegateAddress);
|
|
52
52
|
const sender = typeof message.sender === "string" ? message.sender : "";
|
|
53
53
|
if (sender.toLowerCase() !== ownAccount.toLowerCase()) {
|
|
54
54
|
throw new HavenTypedDataRefusedError(
|
|
@@ -78,9 +78,9 @@ function assertBoundDirectPaymentUserOp(typedData, delegateAddress) {
|
|
|
78
78
|
"This UserOperation's execute() call does not re-encode to the exact callData bytes (trailing or non-canonical bytes). Refusing."
|
|
79
79
|
);
|
|
80
80
|
}
|
|
81
|
-
if (decoded.target.toLowerCase() !==
|
|
81
|
+
if (decoded.target.toLowerCase() !== chunkMZKLAHBK_cjs.DELEGATION_MANAGER.toLowerCase()) {
|
|
82
82
|
throw new HavenTypedDataRefusedError(
|
|
83
|
-
`This UserOperation's execute() calls ${decoded.target}, not the DelegationManager (${
|
|
83
|
+
`This UserOperation's execute() calls ${decoded.target}, not the DelegationManager (${chunkMZKLAHBK_cjs.DELEGATION_MANAGER}). A direct payment only ever redeems the agent's own budget delegation \u2014 refusing what looks like a self-call (e.g. transferOwnership, updateSigners, upgradeToAndCall) or a call to an unrelated contract.`
|
|
84
84
|
);
|
|
85
85
|
}
|
|
86
86
|
if (decoded.value !== 0n) {
|
|
@@ -89,20 +89,20 @@ function assertBoundDirectPaymentUserOp(typedData, delegateAddress) {
|
|
|
89
89
|
);
|
|
90
90
|
}
|
|
91
91
|
try {
|
|
92
|
-
|
|
92
|
+
chunkMZKLAHBK_cjs.assertRedeemsOwnBudgetDelegation(decoded.callData, ownAccount);
|
|
93
93
|
} catch (err) {
|
|
94
94
|
throw new HavenTypedDataRefusedError(err instanceof Error ? err.message : String(err));
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
function assertOwnSettlementChild(typedData, expectation, delegateAddress) {
|
|
98
98
|
try {
|
|
99
|
-
|
|
99
|
+
chunkMZKLAHBK_cjs.verifySettlementChild(typedData, {
|
|
100
100
|
...expectation,
|
|
101
|
-
delegatorAccount:
|
|
101
|
+
delegatorAccount: chunkMZKLAHBK_cjs.deriveDelegateAccountAddress(delegateAddress)
|
|
102
102
|
});
|
|
103
103
|
} catch (err) {
|
|
104
104
|
if (err instanceof HavenTypedDataRefusedError) throw err;
|
|
105
|
-
if (err instanceof
|
|
105
|
+
if (err instanceof chunkMZKLAHBK_cjs.HavenSigningError) throw new HavenTypedDataRefusedError(err.message);
|
|
106
106
|
throw new HavenTypedDataRefusedError(
|
|
107
107
|
`Refusing to sign the x402 settlement child: it is malformed (${err instanceof Error ? err.message : String(err)}).`
|
|
108
108
|
);
|
|
@@ -131,7 +131,7 @@ function assertFundingLegPaysDelegate(typedData, expected) {
|
|
|
131
131
|
try {
|
|
132
132
|
const { args: executeArgs } = viem.decodeFunctionData({ abi: EXECUTE_ABI, data: message.callData });
|
|
133
133
|
const inner = executeArgs[0].callData;
|
|
134
|
-
const { args } = viem.decodeFunctionData({ abi:
|
|
134
|
+
const { args } = viem.decodeFunctionData({ abi: chunkMZKLAHBK_cjs.REDEEM_DELEGATIONS_ABI, data: inner });
|
|
135
135
|
const executions = args[2];
|
|
136
136
|
executionCallData = executions[0];
|
|
137
137
|
} catch {
|
|
@@ -250,7 +250,7 @@ var TRANSFER_WITH_AUTHORIZATION_TYPES = {
|
|
|
250
250
|
function sweepUsdcAddress(chainId) {
|
|
251
251
|
const address = USDC_ADDRESS_BY_CHAIN[chainId];
|
|
252
252
|
if (!address) {
|
|
253
|
-
throw new
|
|
253
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError(
|
|
254
254
|
`Sweep is not supported on chain ${chainId}. Supported: ${SWEEPABLE_CHAIN_IDS.join(", ")}.`
|
|
255
255
|
);
|
|
256
256
|
}
|
|
@@ -259,7 +259,7 @@ function sweepUsdcAddress(chainId) {
|
|
|
259
259
|
function sweepUsdcDomain(chainId) {
|
|
260
260
|
const domain = USDC_EIP712_DOMAIN_BY_CHAIN[chainId];
|
|
261
261
|
if (!domain) {
|
|
262
|
-
throw new
|
|
262
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError(
|
|
263
263
|
`Sweep is not supported on chain ${chainId}. Supported: ${SWEEPABLE_CHAIN_IDS.join(", ")}.`
|
|
264
264
|
);
|
|
265
265
|
}
|
|
@@ -272,12 +272,12 @@ function buildSweepTypedData(auth) {
|
|
|
272
272
|
const domain = sweepUsdcDomain(auth.chainId);
|
|
273
273
|
const expectedToken = sweepUsdcAddress(auth.chainId);
|
|
274
274
|
if (!sameAddress(auth.token, expectedToken)) {
|
|
275
|
-
throw new
|
|
275
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError(
|
|
276
276
|
`Sweep token ${auth.token} is not the canonical USDC contract for chain ${auth.chainId}.`
|
|
277
277
|
);
|
|
278
278
|
}
|
|
279
279
|
if (!/^0x[0-9a-fA-F]{64}$/.test(auth.nonce)) {
|
|
280
|
-
throw new
|
|
280
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError("Sweep nonce must be a 0x-prefixed 32-byte hex string.");
|
|
281
281
|
}
|
|
282
282
|
return {
|
|
283
283
|
domain,
|
|
@@ -782,7 +782,7 @@ function stableStringify2(value) {
|
|
|
782
782
|
}
|
|
783
783
|
|
|
784
784
|
// src/client-identity.ts
|
|
785
|
-
var SDK_VERSION = "0.
|
|
785
|
+
var SDK_VERSION = "0.11.0-alpha.0";
|
|
786
786
|
var HAVEN_CLIENT_HEADER = "X-Haven-Client";
|
|
787
787
|
function havenClientIdentity(pkg, version) {
|
|
788
788
|
return `${pkg}/${version}`;
|
|
@@ -815,7 +815,7 @@ function addressFromKey(privateKey) {
|
|
|
815
815
|
try {
|
|
816
816
|
return accounts.privateKeyToAddress(`0x${hexBytes(privateKey, 32, "private key")}`);
|
|
817
817
|
} catch (err) {
|
|
818
|
-
throw new
|
|
818
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError(
|
|
819
819
|
`Invalid private key: ${err instanceof Error ? err.message : String(err)}`
|
|
820
820
|
);
|
|
821
821
|
}
|
|
@@ -829,7 +829,7 @@ function signHash(privateKey, hash) {
|
|
|
829
829
|
yParity: recovery
|
|
830
830
|
});
|
|
831
831
|
} catch (err) {
|
|
832
|
-
throw new
|
|
832
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError(
|
|
833
833
|
`Failed to sign hash: ${err instanceof Error ? err.message : String(err)}`
|
|
834
834
|
);
|
|
835
835
|
}
|
|
@@ -865,7 +865,7 @@ var TAX_DECLARATION_TYPES = {
|
|
|
865
865
|
var X_TAX_DECLARATION_HEADER = "X-Tax-Declaration";
|
|
866
866
|
function validateContent(content) {
|
|
867
867
|
if (typeof content !== "object" || content === null || Array.isArray(content)) {
|
|
868
|
-
throw new
|
|
868
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError("Tax declaration content must be an object.");
|
|
869
869
|
}
|
|
870
870
|
const record = content;
|
|
871
871
|
for (const field of ["principalId", "principalAttributionHash"]) {
|
|
@@ -918,7 +918,7 @@ function taxPrincipalId(network, delegateAddress) {
|
|
|
918
918
|
if (network.startsWith("eip155:")) {
|
|
919
919
|
return `did:pkh:${network}:${delegateAddress}`;
|
|
920
920
|
}
|
|
921
|
-
const chainId =
|
|
921
|
+
const chainId = chunkMZKLAHBK_cjs.chainIdForNetwork(network);
|
|
922
922
|
if (chainId === void 0) {
|
|
923
923
|
throw new TaxDeclarationRefusedError(
|
|
924
924
|
`The accepted payment option's network '${network}' is not a CAIP-2 eip155 chain this SDK can name; refusing to build a tax principal without the settlement network.`
|
|
@@ -963,12 +963,12 @@ function addressFromKeyForTax(delegateKey) {
|
|
|
963
963
|
try {
|
|
964
964
|
return addressFromKey(delegateKey);
|
|
965
965
|
} catch (err) {
|
|
966
|
-
throw new
|
|
966
|
+
throw new chunkMZKLAHBK_cjs.HavenSigningError(
|
|
967
967
|
`Invalid delegate key for tax declaration signing: ${err instanceof Error ? err.message : String(err)}`
|
|
968
968
|
);
|
|
969
969
|
}
|
|
970
970
|
}
|
|
971
|
-
var TaxDeclarationRefusedError = class extends
|
|
971
|
+
var TaxDeclarationRefusedError = class extends chunkMZKLAHBK_cjs.HavenSigningError {
|
|
972
972
|
code = "TAX_DECLARATION_REFUSED";
|
|
973
973
|
constructor(message) {
|
|
974
974
|
super(message);
|
|
@@ -1124,10 +1124,10 @@ function assertOwnTaskChild(typedData, expected, delegateAddress, now = Date.now
|
|
|
1124
1124
|
if (td?.primaryType !== "Delegation") {
|
|
1125
1125
|
refuseTaskChild("it is not a Delegation payload", `primaryType was '${String(td?.primaryType)}'.`);
|
|
1126
1126
|
}
|
|
1127
|
-
if (!same(td.domain?.verifyingContract,
|
|
1127
|
+
if (!same(td.domain?.verifyingContract, chunkMZKLAHBK_cjs.DELEGATION_MANAGER)) {
|
|
1128
1128
|
refuseTaskChild(
|
|
1129
1129
|
"the EIP-712 domain names an unknown DelegationManager",
|
|
1130
|
-
`Expected ${
|
|
1130
|
+
`Expected ${chunkMZKLAHBK_cjs.DELEGATION_MANAGER}, got ${td.domain?.verifyingContract}.`
|
|
1131
1131
|
);
|
|
1132
1132
|
}
|
|
1133
1133
|
if (td.domain?.name !== DELEGATION_DOMAIN_NAME || td.domain?.version !== DELEGATION_DOMAIN_VERSION) {
|
|
@@ -1155,7 +1155,7 @@ function assertOwnTaskChild(typedData, expected, delegateAddress, now = Date.now
|
|
|
1155
1155
|
`Expected chain ${expected.chainId}; the child says ${td.domain?.chainId}.`
|
|
1156
1156
|
);
|
|
1157
1157
|
}
|
|
1158
|
-
const ownAccount =
|
|
1158
|
+
const ownAccount = chunkMZKLAHBK_cjs.deriveDelegateAccountAddress(delegateAddress);
|
|
1159
1159
|
const delegator = td.message?.delegator;
|
|
1160
1160
|
if (typeof delegator !== "string" || !same(delegator, ownAccount)) {
|
|
1161
1161
|
refuseTaskChild(
|
|
@@ -1174,7 +1174,7 @@ function assertOwnTaskChild(typedData, expected, delegateAddress, now = Date.now
|
|
|
1174
1174
|
if (typeof authority !== "string" || !/^0x[0-9a-fA-F]{64}$/.test(authority)) {
|
|
1175
1175
|
refuseTaskChild("its authority is not a 32-byte delegation hash", `Got ${String(authority)}.`);
|
|
1176
1176
|
}
|
|
1177
|
-
if (authority.toLowerCase() ===
|
|
1177
|
+
if (authority.toLowerCase() === chunkMZKLAHBK_cjs.ROOT_AUTHORITY) {
|
|
1178
1178
|
refuseTaskChild(
|
|
1179
1179
|
"it is a ROOT delegation, not a re-delegation of the agent budget",
|
|
1180
1180
|
"A task budget always chains under the agent budget delegation."
|
|
@@ -1187,7 +1187,7 @@ function assertOwnTaskChild(typedData, expected, delegateAddress, now = Date.now
|
|
|
1187
1187
|
);
|
|
1188
1188
|
}
|
|
1189
1189
|
const caveats = td.message?.caveats ?? [];
|
|
1190
|
-
const transfer = findCaveat(caveats,
|
|
1190
|
+
const transfer = findCaveat(caveats, chunkMZKLAHBK_cjs.CAVEAT_ENFORCERS.erc20TransferAmount);
|
|
1191
1191
|
if (!transfer) {
|
|
1192
1192
|
refuseTaskChild(
|
|
1193
1193
|
"it has no ERC-20 transfer-amount caveat",
|
|
@@ -1205,7 +1205,7 @@ function assertOwnTaskChild(typedData, expected, delegateAddress, now = Date.now
|
|
|
1205
1205
|
`Expected ${expected.maxAmountAtomic}; the child allows ${amount.toString()}.`
|
|
1206
1206
|
);
|
|
1207
1207
|
}
|
|
1208
|
-
const timestamp = findCaveat(caveats,
|
|
1208
|
+
const timestamp = findCaveat(caveats, chunkMZKLAHBK_cjs.CAVEAT_ENFORCERS.timestamp);
|
|
1209
1209
|
if (!timestamp) {
|
|
1210
1210
|
refuseTaskChild("it never expires", "A task-budget child without a timestamp caveat is open-ended.");
|
|
1211
1211
|
}
|
|
@@ -1226,7 +1226,7 @@ function assertOwnTaskChild(typedData, expected, delegateAddress, now = Date.now
|
|
|
1226
1226
|
`Expected ${expected.expiresAt}; the child says ${beforeThreshold}.`
|
|
1227
1227
|
);
|
|
1228
1228
|
}
|
|
1229
|
-
const calldata = findCaveat(caveats,
|
|
1229
|
+
const calldata = findCaveat(caveats, chunkMZKLAHBK_cjs.CAVEAT_ENFORCERS.allowedCalldata);
|
|
1230
1230
|
if (expected.recipientAddress) {
|
|
1231
1231
|
if (!calldata) {
|
|
1232
1232
|
refuseTaskChild(
|
|
@@ -1263,7 +1263,7 @@ var DISABLE_DELEGATION_ABI = [
|
|
|
1263
1263
|
{
|
|
1264
1264
|
type: "function",
|
|
1265
1265
|
name: "disableDelegation",
|
|
1266
|
-
inputs: [{ name: "delegation", type: "tuple", components:
|
|
1266
|
+
inputs: [{ name: "delegation", type: "tuple", components: chunkMZKLAHBK_cjs.DELEGATION_TUPLE_COMPONENTS }],
|
|
1267
1267
|
outputs: [],
|
|
1268
1268
|
stateMutability: "nonpayable"
|
|
1269
1269
|
}
|
|
@@ -1282,7 +1282,7 @@ function assertOwnTaskBudgetCloseUserOp(typedData, expected, delegateAddress) {
|
|
|
1282
1282
|
`This signer only signs a task-budget close on chains the delegation rail has pinned contracts for (${[...DIRECT_PAYMENT_CHAIN_IDS].join(", ")}); this typed data names chain ${String(domain.chainId)}. Refusing.`
|
|
1283
1283
|
);
|
|
1284
1284
|
}
|
|
1285
|
-
const ownAccount =
|
|
1285
|
+
const ownAccount = chunkMZKLAHBK_cjs.deriveDelegateAccountAddress(delegateAddress);
|
|
1286
1286
|
const sender = typeof message.sender === "string" ? message.sender : "";
|
|
1287
1287
|
if (sender.toLowerCase() !== ownAccount.toLowerCase()) {
|
|
1288
1288
|
throw new HavenTypedDataRefusedError(
|
|
@@ -1305,9 +1305,9 @@ function assertOwnTaskBudgetCloseUserOp(typedData, expected, delegateAddress) {
|
|
|
1305
1305
|
"This close UserOperation's execute() call does not re-encode to the exact callData bytes (trailing or non-canonical bytes). Refusing."
|
|
1306
1306
|
);
|
|
1307
1307
|
}
|
|
1308
|
-
if (decoded.target.toLowerCase() !==
|
|
1308
|
+
if (decoded.target.toLowerCase() !== chunkMZKLAHBK_cjs.DELEGATION_MANAGER.toLowerCase()) {
|
|
1309
1309
|
throw new HavenTypedDataRefusedError(
|
|
1310
|
-
`This close UserOperation's execute() calls ${decoded.target}, not the DelegationManager (${
|
|
1310
|
+
`This close UserOperation's execute() calls ${decoded.target}, not the DelegationManager (${chunkMZKLAHBK_cjs.DELEGATION_MANAGER}). Refusing what looks like a self-call or a call to an unrelated contract.`
|
|
1311
1311
|
);
|
|
1312
1312
|
}
|
|
1313
1313
|
if (decoded.value !== 0n) {
|
|
@@ -1344,7 +1344,7 @@ function assertOwnTaskBudgetCloseUserOp(typedData, expected, delegateAddress) {
|
|
|
1344
1344
|
`This close UserOperation disables a delegation granted to ${delegation.delegate}, not this signer's own account (${ownAccount}) \u2014 a task-budget child is always self-delegated. Refusing.`
|
|
1345
1345
|
);
|
|
1346
1346
|
}
|
|
1347
|
-
if (delegation.authority.toLowerCase() ===
|
|
1347
|
+
if (delegation.authority.toLowerCase() === chunkMZKLAHBK_cjs.ROOT_AUTHORITY) {
|
|
1348
1348
|
throw new HavenTypedDataRefusedError(
|
|
1349
1349
|
"This close UserOperation disables a ROOT delegation, not a re-delegation of the agent budget. A task-budget child always chains under the agent budget delegation. Refusing."
|
|
1350
1350
|
);
|
|
@@ -1477,5 +1477,5 @@ exports.x402PaymentHeaderNamesFor = x402PaymentHeaderNamesFor;
|
|
|
1477
1477
|
exports.x402PaymentHeaderNamesSent = x402PaymentHeaderNamesSent;
|
|
1478
1478
|
exports.x402RetryHeadersFor = x402RetryHeadersFor;
|
|
1479
1479
|
exports.x402V2PaymentEnvelope = x402V2PaymentEnvelope;
|
|
1480
|
-
//# sourceMappingURL=chunk-
|
|
1481
|
-
//# sourceMappingURL=chunk-
|
|
1480
|
+
//# sourceMappingURL=chunk-IKQIIMM6.cjs.map
|
|
1481
|
+
//# sourceMappingURL=chunk-IKQIIMM6.cjs.map
|