@agent-shield/sdk 0.1.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.
Files changed (41) hide show
  1. package/dist/accounts.d.ts +15 -0
  2. package/dist/accounts.d.ts.map +1 -0
  3. package/dist/accounts.js +59 -0
  4. package/dist/accounts.js.map +1 -0
  5. package/dist/client.d.ts +85 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +233 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/composer.d.ts +21 -0
  10. package/dist/composer.d.ts.map +1 -0
  11. package/dist/composer.js +51 -0
  12. package/dist/composer.js.map +1 -0
  13. package/dist/idl-json.d.ts +1299 -0
  14. package/dist/idl-json.d.ts.map +1 -0
  15. package/dist/idl-json.js +2486 -0
  16. package/dist/idl-json.js.map +1 -0
  17. package/dist/idl.d.ts +2475 -0
  18. package/dist/idl.d.ts.map +1 -0
  19. package/dist/idl.js +3 -0
  20. package/dist/idl.js.map +1 -0
  21. package/dist/index.d.ts +9 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +63 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/instructions.d.ts +1130 -0
  26. package/dist/instructions.d.ts.map +1 -0
  27. package/dist/instructions.js +127 -0
  28. package/dist/instructions.js.map +1 -0
  29. package/dist/integrations/flash-trade.d.ts +130 -0
  30. package/dist/integrations/flash-trade.d.ts.map +1 -0
  31. package/dist/integrations/flash-trade.js +170 -0
  32. package/dist/integrations/flash-trade.js.map +1 -0
  33. package/dist/integrations/jupiter.d.ts +131 -0
  34. package/dist/integrations/jupiter.d.ts.map +1 -0
  35. package/dist/integrations/jupiter.js +178 -0
  36. package/dist/integrations/jupiter.js.map +1 -0
  37. package/dist/types.d.ts +129 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +6 -0
  40. package/dist/types.js.map +1 -0
  41. package/package.json +36 -0
@@ -0,0 +1,15 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { BN, Program } from "@coral-xyz/anchor";
3
+ import type { AgentShield, AgentVaultAccount, PolicyConfigAccount, SpendTrackerAccount, SessionAuthorityAccount } from "./types";
4
+ export declare function getVaultPDA(owner: PublicKey, vaultId: BN, programId?: PublicKey): [PublicKey, number];
5
+ export declare function getPolicyPDA(vault: PublicKey, programId?: PublicKey): [PublicKey, number];
6
+ export declare function getTrackerPDA(vault: PublicKey, programId?: PublicKey): [PublicKey, number];
7
+ export declare function getSessionPDA(vault: PublicKey, agent: PublicKey, programId?: PublicKey): [PublicKey, number];
8
+ export declare function fetchVault(program: Program<AgentShield>, owner: PublicKey, vaultId: BN): Promise<AgentVaultAccount>;
9
+ export declare function fetchPolicy(program: Program<AgentShield>, vault: PublicKey): Promise<PolicyConfigAccount>;
10
+ export declare function fetchTracker(program: Program<AgentShield>, vault: PublicKey): Promise<SpendTrackerAccount>;
11
+ export declare function fetchSession(program: Program<AgentShield>, vault: PublicKey, agent: PublicKey): Promise<SessionAuthorityAccount>;
12
+ export declare function fetchVaultByAddress(program: Program<AgentShield>, address: PublicKey): Promise<AgentVaultAccount>;
13
+ export declare function fetchPolicyByAddress(program: Program<AgentShield>, address: PublicKey): Promise<PolicyConfigAccount>;
14
+ export declare function fetchTrackerByAddress(program: Program<AgentShield>, address: PublicKey): Promise<SpendTrackerAccount>;
15
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAKjB,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,EAAE,EACX,SAAS,GAAE,SAAmC,GAC7C,CAAC,SAAS,EAAE,MAAM,CAAC,CASrB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,SAAmC,GAC7C,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,SAAmC,GAC7C,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,SAAmC,GAC7C,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAID,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,EAAE,GACV,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,uBAAuB,CAAC,CAKlC;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAI5B;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAI9B"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVaultPDA = getVaultPDA;
4
+ exports.getPolicyPDA = getPolicyPDA;
5
+ exports.getTrackerPDA = getTrackerPDA;
6
+ exports.getSessionPDA = getSessionPDA;
7
+ exports.fetchVault = fetchVault;
8
+ exports.fetchPolicy = fetchPolicy;
9
+ exports.fetchTracker = fetchTracker;
10
+ exports.fetchSession = fetchSession;
11
+ exports.fetchVaultByAddress = fetchVaultByAddress;
12
+ exports.fetchPolicyByAddress = fetchPolicyByAddress;
13
+ exports.fetchTrackerByAddress = fetchTrackerByAddress;
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ const types_1 = require("./types");
16
+ // --- PDA Derivation ---
17
+ function getVaultPDA(owner, vaultId, programId = types_1.AGENT_SHIELD_PROGRAM_ID) {
18
+ return web3_js_1.PublicKey.findProgramAddressSync([
19
+ Buffer.from("vault"),
20
+ owner.toBuffer(),
21
+ vaultId.toArrayLike(Buffer, "le", 8),
22
+ ], programId);
23
+ }
24
+ function getPolicyPDA(vault, programId = types_1.AGENT_SHIELD_PROGRAM_ID) {
25
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("policy"), vault.toBuffer()], programId);
26
+ }
27
+ function getTrackerPDA(vault, programId = types_1.AGENT_SHIELD_PROGRAM_ID) {
28
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("tracker"), vault.toBuffer()], programId);
29
+ }
30
+ function getSessionPDA(vault, agent, programId = types_1.AGENT_SHIELD_PROGRAM_ID) {
31
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("session"), vault.toBuffer(), agent.toBuffer()], programId);
32
+ }
33
+ // --- Account Fetching ---
34
+ async function fetchVault(program, owner, vaultId) {
35
+ const [vaultPda] = getVaultPDA(owner, vaultId, program.programId);
36
+ return (await program.account.agentVault.fetch(vaultPda));
37
+ }
38
+ async function fetchPolicy(program, vault) {
39
+ const [policyPda] = getPolicyPDA(vault, program.programId);
40
+ return (await program.account.policyConfig.fetch(policyPda));
41
+ }
42
+ async function fetchTracker(program, vault) {
43
+ const [trackerPda] = getTrackerPDA(vault, program.programId);
44
+ return (await program.account.spendTracker.fetch(trackerPda));
45
+ }
46
+ async function fetchSession(program, vault, agent) {
47
+ const [sessionPda] = getSessionPDA(vault, agent, program.programId);
48
+ return (await program.account.sessionAuthority.fetch(sessionPda));
49
+ }
50
+ async function fetchVaultByAddress(program, address) {
51
+ return (await program.account.agentVault.fetch(address));
52
+ }
53
+ async function fetchPolicyByAddress(program, address) {
54
+ return (await program.account.policyConfig.fetch(address));
55
+ }
56
+ async function fetchTrackerByAddress(program, address) {
57
+ return (await program.account.spendTracker.fetch(address));
58
+ }
59
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { PublicKey, Connection, TransactionInstruction, VersionedTransaction, Signer } from "@solana/web3.js";
2
+ import { AnchorProvider, BN, Program, Wallet } from "@coral-xyz/anchor";
3
+ import type { AgentShield, AgentVaultAccount, PolicyConfigAccount, SpendTrackerAccount, InitializeVaultParams, UpdatePolicyParams, AuthorizeParams, ComposeActionParams } from "./types";
4
+ import { type JupiterQuoteParams, type JupiterQuoteResponse, type JupiterSwapParams } from "./integrations/jupiter";
5
+ import { type FlashTradeConfig, type FlashOpenPositionParams, type FlashClosePositionParams, type FlashIncreasePositionParams, type FlashDecreasePositionParams, type FlashTradeResult } from "./integrations/flash-trade";
6
+ import { PerpetualsClient, PoolConfig } from "flash-sdk";
7
+ export declare class AgentShieldClient {
8
+ readonly program: Program<AgentShield>;
9
+ readonly provider: AnchorProvider;
10
+ constructor(connection: Connection, wallet: Wallet, programId?: PublicKey, idl?: any);
11
+ getVaultPDA(owner: PublicKey, vaultId: BN): [PublicKey, number];
12
+ getPolicyPDA(vault: PublicKey): [PublicKey, number];
13
+ getTrackerPDA(vault: PublicKey): [PublicKey, number];
14
+ getSessionPDA(vault: PublicKey, agent: PublicKey): [PublicKey, number];
15
+ fetchVault(owner: PublicKey, vaultId: BN): Promise<AgentVaultAccount>;
16
+ fetchVaultByAddress(address: PublicKey): Promise<AgentVaultAccount>;
17
+ fetchPolicy(vault: PublicKey): Promise<PolicyConfigAccount>;
18
+ fetchPolicyByAddress(address: PublicKey): Promise<PolicyConfigAccount>;
19
+ fetchTracker(vault: PublicKey): Promise<SpendTrackerAccount>;
20
+ fetchTrackerByAddress(address: PublicKey): Promise<SpendTrackerAccount>;
21
+ createVault(params: InitializeVaultParams): Promise<string>;
22
+ deposit(vault: PublicKey, mint: PublicKey, amount: BN): Promise<string>;
23
+ registerAgent(vault: PublicKey, agent: PublicKey): Promise<string>;
24
+ updatePolicy(vault: PublicKey, params: UpdatePolicyParams): Promise<string>;
25
+ authorizeAction(vault: PublicKey, params: AuthorizeParams): Promise<string>;
26
+ finalizeSession(vault: PublicKey, agent: PublicKey, success: boolean, vaultTokenAccount?: PublicKey | null, feeDestinationTokenAccount?: PublicKey | null): Promise<string>;
27
+ revokeAgent(vault: PublicKey): Promise<string>;
28
+ reactivateVault(vault: PublicKey, newAgent?: PublicKey | null): Promise<string>;
29
+ withdraw(vault: PublicKey, mint: PublicKey, amount: BN): Promise<string>;
30
+ closeVault(vault: PublicKey): Promise<string>;
31
+ composePermittedAction(params: ComposeActionParams, computeUnits?: number): Promise<TransactionInstruction[]>;
32
+ composePermittedTransaction(params: ComposeActionParams, computeUnits?: number): Promise<VersionedTransaction>;
33
+ composePermittedSwap(params: Omit<ComposeActionParams, "actionType">, computeUnits?: number): Promise<TransactionInstruction[]>;
34
+ /**
35
+ * Compose a permitted action, sign, and send in one call.
36
+ * Returns the transaction signature.
37
+ */
38
+ composeAndSend(params: ComposeActionParams, signers?: Signer[], computeUnits?: number): Promise<string>;
39
+ /**
40
+ * Fetch a swap quote from Jupiter V6 API.
41
+ */
42
+ getJupiterQuote(params: JupiterQuoteParams): Promise<JupiterQuoteResponse>;
43
+ /**
44
+ * Build an unsigned VersionedTransaction for a Jupiter swap through AgentShield.
45
+ *
46
+ * Composes: [ComputeBudget, ValidateAndAuthorize, ...JupiterIxs, FinalizeSession]
47
+ */
48
+ jupiterSwap(params: JupiterSwapParams): Promise<VersionedTransaction>;
49
+ /**
50
+ * Compose a Jupiter swap, sign, send, and confirm in one call.
51
+ * Returns the transaction signature.
52
+ */
53
+ executeJupiterSwap(params: JupiterSwapParams, signers?: Signer[]): Promise<string>;
54
+ private _perpClient;
55
+ private _poolConfig;
56
+ /**
57
+ * Create (or return cached) Flash Trade PerpetualsClient.
58
+ */
59
+ createFlashTradeClient(config?: Partial<FlashTradeConfig>): PerpetualsClient;
60
+ /**
61
+ * Get (or return cached) Flash Trade PoolConfig.
62
+ */
63
+ getFlashPoolConfig(poolName?: string, cluster?: "mainnet-beta" | "devnet"): PoolConfig;
64
+ /**
65
+ * Compose a Flash Trade open position through AgentShield.
66
+ */
67
+ flashTradeOpen(params: FlashOpenPositionParams, poolConfig?: PoolConfig): Promise<FlashTradeResult>;
68
+ /**
69
+ * Compose a Flash Trade close position through AgentShield.
70
+ */
71
+ flashTradeClose(params: FlashClosePositionParams, poolConfig?: PoolConfig): Promise<FlashTradeResult>;
72
+ /**
73
+ * Compose a Flash Trade increase position through AgentShield.
74
+ */
75
+ flashTradeIncrease(params: FlashIncreasePositionParams, poolConfig?: PoolConfig): Promise<FlashTradeResult>;
76
+ /**
77
+ * Compose a Flash Trade decrease position through AgentShield.
78
+ */
79
+ flashTradeDecrease(params: FlashDecreasePositionParams, poolConfig?: PoolConfig): Promise<FlashTradeResult>;
80
+ /**
81
+ * Compose a Flash Trade action, sign, send, and confirm in one call.
82
+ */
83
+ executeFlashTrade(result: FlashTradeResult, agent: PublicKey, signers?: Signer[]): Promise<string>;
84
+ }
85
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentShieldClient = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const anchor_1 = require("@coral-xyz/anchor");
6
+ const accounts_1 = require("./accounts");
7
+ const instructions_1 = require("./instructions");
8
+ const composer_1 = require("./composer");
9
+ const jupiter_1 = require("./integrations/jupiter");
10
+ const flash_trade_1 = require("./integrations/flash-trade");
11
+ const idl_json_1 = require("./idl-json");
12
+ class AgentShieldClient {
13
+ constructor(connection, wallet, programId, idl) {
14
+ // --- Flash Trade Integration ---
15
+ this._perpClient = null;
16
+ this._poolConfig = null;
17
+ this.provider = new anchor_1.AnchorProvider(connection, wallet, {
18
+ commitment: "confirmed",
19
+ });
20
+ const resolvedIdl = idl ?? idl_json_1.IDL;
21
+ if (programId) {
22
+ resolvedIdl.address = programId.toBase58();
23
+ }
24
+ this.program = new anchor_1.Program(resolvedIdl, this.provider);
25
+ }
26
+ // --- PDA Helpers ---
27
+ getVaultPDA(owner, vaultId) {
28
+ return (0, accounts_1.getVaultPDA)(owner, vaultId, this.program.programId);
29
+ }
30
+ getPolicyPDA(vault) {
31
+ return (0, accounts_1.getPolicyPDA)(vault, this.program.programId);
32
+ }
33
+ getTrackerPDA(vault) {
34
+ return (0, accounts_1.getTrackerPDA)(vault, this.program.programId);
35
+ }
36
+ getSessionPDA(vault, agent) {
37
+ return (0, accounts_1.getSessionPDA)(vault, agent, this.program.programId);
38
+ }
39
+ // --- Account Fetching ---
40
+ async fetchVault(owner, vaultId) {
41
+ return (0, accounts_1.fetchVault)(this.program, owner, vaultId);
42
+ }
43
+ async fetchVaultByAddress(address) {
44
+ return (0, accounts_1.fetchVaultByAddress)(this.program, address);
45
+ }
46
+ async fetchPolicy(vault) {
47
+ return (0, accounts_1.fetchPolicy)(this.program, vault);
48
+ }
49
+ async fetchPolicyByAddress(address) {
50
+ return (0, accounts_1.fetchPolicyByAddress)(this.program, address);
51
+ }
52
+ async fetchTracker(vault) {
53
+ return (0, accounts_1.fetchTracker)(this.program, vault);
54
+ }
55
+ async fetchTrackerByAddress(address) {
56
+ return (0, accounts_1.fetchTrackerByAddress)(this.program, address);
57
+ }
58
+ // --- Instruction Execution (sends + confirms) ---
59
+ async createVault(params) {
60
+ const owner = this.provider.wallet.publicKey;
61
+ return (0, instructions_1.buildInitializeVault)(this.program, owner, params).rpc();
62
+ }
63
+ async deposit(vault, mint, amount) {
64
+ const owner = this.provider.wallet.publicKey;
65
+ return (0, instructions_1.buildDepositFunds)(this.program, owner, vault, mint, amount).rpc();
66
+ }
67
+ async registerAgent(vault, agent) {
68
+ const owner = this.provider.wallet.publicKey;
69
+ return (0, instructions_1.buildRegisterAgent)(this.program, owner, vault, agent).rpc();
70
+ }
71
+ async updatePolicy(vault, params) {
72
+ const owner = this.provider.wallet.publicKey;
73
+ return (0, instructions_1.buildUpdatePolicy)(this.program, owner, vault, params).rpc();
74
+ }
75
+ async authorizeAction(vault, params) {
76
+ const agent = this.provider.wallet.publicKey;
77
+ return (0, instructions_1.buildValidateAndAuthorize)(this.program, agent, vault, params).rpc();
78
+ }
79
+ async finalizeSession(vault, agent, success, vaultTokenAccount, feeDestinationTokenAccount) {
80
+ const payer = this.provider.wallet.publicKey;
81
+ return (0, instructions_1.buildFinalizeSession)(this.program, payer, vault, agent, success, vaultTokenAccount, feeDestinationTokenAccount).rpc();
82
+ }
83
+ async revokeAgent(vault) {
84
+ const owner = this.provider.wallet.publicKey;
85
+ return (0, instructions_1.buildRevokeAgent)(this.program, owner, vault).rpc();
86
+ }
87
+ async reactivateVault(vault, newAgent) {
88
+ const owner = this.provider.wallet.publicKey;
89
+ return (0, instructions_1.buildReactivateVault)(this.program, owner, vault, newAgent).rpc();
90
+ }
91
+ async withdraw(vault, mint, amount) {
92
+ const owner = this.provider.wallet.publicKey;
93
+ return (0, instructions_1.buildWithdrawFunds)(this.program, owner, vault, mint, amount).rpc();
94
+ }
95
+ async closeVault(vault) {
96
+ const owner = this.provider.wallet.publicKey;
97
+ return (0, instructions_1.buildCloseVault)(this.program, owner, vault).rpc();
98
+ }
99
+ // --- Composition ---
100
+ async composePermittedAction(params, computeUnits) {
101
+ return (0, composer_1.composePermittedAction)(this.program, params, computeUnits);
102
+ }
103
+ async composePermittedTransaction(params, computeUnits) {
104
+ return (0, composer_1.composePermittedTransaction)(this.program, this.provider.connection, params, computeUnits);
105
+ }
106
+ async composePermittedSwap(params, computeUnits) {
107
+ return (0, composer_1.composePermittedSwap)(this.program, params, computeUnits);
108
+ }
109
+ /**
110
+ * Compose a permitted action, sign, and send in one call.
111
+ * Returns the transaction signature.
112
+ */
113
+ async composeAndSend(params, signers, computeUnits) {
114
+ const instructions = await this.composePermittedAction(params, computeUnits);
115
+ const { blockhash, lastValidBlockHeight } = await this.provider.connection.getLatestBlockhash();
116
+ const messageV0 = new web3_js_1.TransactionMessage({
117
+ payerKey: params.agent,
118
+ recentBlockhash: blockhash,
119
+ instructions,
120
+ }).compileToV0Message();
121
+ const tx = new web3_js_1.VersionedTransaction(messageV0);
122
+ if (signers && signers.length > 0) {
123
+ tx.sign(signers);
124
+ }
125
+ const signed = await this.provider.wallet.signTransaction(tx);
126
+ const sig = await this.provider.connection.sendRawTransaction(signed.serialize());
127
+ await this.provider.connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, "confirmed");
128
+ return sig;
129
+ }
130
+ // --- Jupiter Integration ---
131
+ /**
132
+ * Fetch a swap quote from Jupiter V6 API.
133
+ */
134
+ async getJupiterQuote(params) {
135
+ return (0, jupiter_1.fetchJupiterQuote)(params);
136
+ }
137
+ /**
138
+ * Build an unsigned VersionedTransaction for a Jupiter swap through AgentShield.
139
+ *
140
+ * Composes: [ComputeBudget, ValidateAndAuthorize, ...JupiterIxs, FinalizeSession]
141
+ */
142
+ async jupiterSwap(params) {
143
+ return (0, jupiter_1.composeJupiterSwapTransaction)(this.program, this.provider.connection, params);
144
+ }
145
+ /**
146
+ * Compose a Jupiter swap, sign, send, and confirm in one call.
147
+ * Returns the transaction signature.
148
+ */
149
+ async executeJupiterSwap(params, signers) {
150
+ const { instructions, addressLookupTables } = await (0, jupiter_1.composeJupiterSwap)(this.program, this.provider.connection, params);
151
+ const { blockhash, lastValidBlockHeight } = await this.provider.connection.getLatestBlockhash();
152
+ const messageV0 = new web3_js_1.TransactionMessage({
153
+ payerKey: params.agent,
154
+ recentBlockhash: blockhash,
155
+ instructions,
156
+ }).compileToV0Message(addressLookupTables);
157
+ const tx = new web3_js_1.VersionedTransaction(messageV0);
158
+ if (signers && signers.length > 0) {
159
+ tx.sign(signers);
160
+ }
161
+ const signed = await this.provider.wallet.signTransaction(tx);
162
+ const sig = await this.provider.connection.sendRawTransaction(signed.serialize());
163
+ await this.provider.connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, "confirmed");
164
+ return sig;
165
+ }
166
+ /**
167
+ * Create (or return cached) Flash Trade PerpetualsClient.
168
+ */
169
+ createFlashTradeClient(config) {
170
+ if (!this._perpClient) {
171
+ this._perpClient = (0, flash_trade_1.createFlashTradeClient)(this.provider, config);
172
+ }
173
+ return this._perpClient;
174
+ }
175
+ /**
176
+ * Get (or return cached) Flash Trade PoolConfig.
177
+ */
178
+ getFlashPoolConfig(poolName = "Crypto.1", cluster = "mainnet-beta") {
179
+ if (!this._poolConfig) {
180
+ this._poolConfig = (0, flash_trade_1.getPoolConfig)(poolName, cluster);
181
+ }
182
+ return this._poolConfig;
183
+ }
184
+ /**
185
+ * Compose a Flash Trade open position through AgentShield.
186
+ */
187
+ async flashTradeOpen(params, poolConfig) {
188
+ const perpClient = this.createFlashTradeClient();
189
+ const config = poolConfig ?? this.getFlashPoolConfig();
190
+ return (0, flash_trade_1.composeFlashTradeOpen)(this.program, perpClient, config, params);
191
+ }
192
+ /**
193
+ * Compose a Flash Trade close position through AgentShield.
194
+ */
195
+ async flashTradeClose(params, poolConfig) {
196
+ const perpClient = this.createFlashTradeClient();
197
+ const config = poolConfig ?? this.getFlashPoolConfig();
198
+ return (0, flash_trade_1.composeFlashTradeClose)(this.program, perpClient, config, params);
199
+ }
200
+ /**
201
+ * Compose a Flash Trade increase position through AgentShield.
202
+ */
203
+ async flashTradeIncrease(params, poolConfig) {
204
+ const perpClient = this.createFlashTradeClient();
205
+ const config = poolConfig ?? this.getFlashPoolConfig();
206
+ return (0, flash_trade_1.composeFlashTradeIncrease)(this.program, perpClient, config, params);
207
+ }
208
+ /**
209
+ * Compose a Flash Trade decrease position through AgentShield.
210
+ */
211
+ async flashTradeDecrease(params, poolConfig) {
212
+ const perpClient = this.createFlashTradeClient();
213
+ const config = poolConfig ?? this.getFlashPoolConfig();
214
+ return (0, flash_trade_1.composeFlashTradeDecrease)(this.program, perpClient, config, params);
215
+ }
216
+ /**
217
+ * Compose a Flash Trade action, sign, send, and confirm in one call.
218
+ */
219
+ async executeFlashTrade(result, agent, signers) {
220
+ const tx = await (0, flash_trade_1.composeFlashTradeTransaction)(this.provider.connection, agent, result);
221
+ const allSigners = [...(result.additionalSigners || []), ...(signers || [])];
222
+ if (allSigners.length > 0) {
223
+ tx.sign(allSigners);
224
+ }
225
+ const signed = await this.provider.wallet.signTransaction(tx);
226
+ const sig = await this.provider.connection.sendRawTransaction(signed.serialize());
227
+ const { blockhash, lastValidBlockHeight } = await this.provider.connection.getLatestBlockhash();
228
+ await this.provider.connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, "confirmed");
229
+ return sig;
230
+ }
231
+ }
232
+ exports.AgentShieldClient = AgentShieldClient;
233
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAAA,6CAQyB;AACzB,8CAAwE;AAWxE,yCAWoB;AACpB,iDAWwB;AACxB,yCAIoB;AACpB,oDAOgC;AAChC,4DAcoC;AAEpC,yCAAmD;AAEnD,MAAa,iBAAiB;IAI5B,YACE,UAAsB,EACtB,MAAc,EACd,SAAqB,EACrB,GAAS;QAyPX,kCAAkC;QAE1B,gBAAW,GAA4B,IAAI,CAAC;QAC5C,gBAAW,GAAsB,IAAI,CAAC;QA1P5C,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAc,CAAC,UAAU,EAAE,MAAM,EAAE;YACrD,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,GAAG,IAAI,cAAc,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAO,CACxB,WAAW,EACX,IAAI,CAAC,QAAQ,CACP,CAAC;IACX,CAAC;IAED,sBAAsB;IAEtB,WAAW,CAAC,KAAgB,EAAE,OAAW;QACvC,OAAO,IAAA,sBAAW,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,YAAY,CAAC,KAAgB;QAC3B,OAAO,IAAA,uBAAY,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,aAAa,CAAC,KAAgB;QAC5B,OAAO,IAAA,wBAAa,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,aAAa,CAAC,KAAgB,EAAE,KAAgB;QAC9C,OAAO,IAAA,wBAAa,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,2BAA2B;IAE3B,KAAK,CAAC,UAAU,CAAC,KAAgB,EAAE,OAAW;QAC5C,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAkB;QAC1C,OAAO,IAAA,8BAAmB,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAgB;QAChC,OAAO,IAAA,sBAAW,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAAkB;QAC3C,OAAO,IAAA,+BAAoB,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAgB;QACjC,OAAO,IAAA,uBAAY,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,OAAkB;QAC5C,OAAO,IAAA,gCAAqB,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,mDAAmD;IAEnD,KAAK,CAAC,WAAW,CAAC,MAA6B;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,mCAAoB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAgB,EAAE,IAAe,EAAE,MAAU;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,gCAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAgB,EAAE,KAAgB;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,iCAAkB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAgB,EAAE,MAA0B;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,gCAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAgB,EAAE,MAAuB;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,wCAAyB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAgB,EAChB,KAAgB,EAChB,OAAgB,EAChB,iBAAoC,EACpC,0BAA6C;QAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,mCAAoB,EACzB,IAAI,CAAC,OAAO,EACZ,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,EACP,iBAAiB,EACjB,0BAA0B,CAC3B,CAAC,GAAG,EAAE,CAAC;IACV,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAgB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,+BAAgB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAgB,EAAE,QAA2B;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,mCAAoB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAgB,EAAE,IAAe,EAAE,MAAU;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,iCAAkB,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAgB;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAA,8BAAe,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3D,CAAC;IAED,sBAAsB;IAEtB,KAAK,CAAC,sBAAsB,CAC1B,MAA2B,EAC3B,YAAqB;QAErB,OAAO,IAAA,iCAAsB,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,MAA2B,EAC3B,YAAqB;QAErB,OAAO,IAAA,sCAA2B,EAChC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB,MAAM,EACN,YAAY,CACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAA+C,EAC/C,YAAqB;QAErB,OAAO,IAAA,+BAAoB,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAClB,MAA2B,EAC3B,OAAkB,EAClB,YAAqB;QAErB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC7E,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,GACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAEtD,MAAM,SAAS,GAAG,IAAI,4BAAkB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,KAAK;YACtB,eAAe,EAAE,SAAS;YAC1B,YAAY;SACb,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAExB,MAAM,EAAE,GAAG,IAAI,8BAAoB,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAC/C,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,EACnD,WAAW,CACZ,CAAC;QAEF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,8BAA8B;IAE9B;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAA0B;QAC9C,OAAO,IAAA,2BAAiB,EAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,MAAyB;QACzC,OAAO,IAAA,uCAA6B,EAClC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB,MAAM,CACP,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CACtB,MAAyB,EACzB,OAAkB;QAElB,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,MAAM,IAAA,4BAAkB,EACpE,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB,MAAM,CACP,CAAC;QAEF,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,GACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAEtD,MAAM,SAAS,GAAG,IAAI,4BAAkB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,KAAK;YACtB,eAAe,EAAE,SAAS;YAC1B,YAAY;SACb,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QAE3C,MAAM,EAAE,GAAG,IAAI,8BAAoB,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAC/C,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,EACnD,WAAW,CACZ,CAAC;QAEF,OAAO,GAAG,CAAC;IACb,CAAC;IAOD;;OAEG;IACH,sBAAsB,CAAC,MAAkC;QACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAA,oCAAuB,EAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,WAAmB,UAAU,EAC7B,UAAqC,cAAc;QAEnD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAA,2BAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,MAA+B,EAC/B,UAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvD,OAAO,IAAA,mCAAqB,EAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,MAAgC,EAChC,UAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvD,OAAO,IAAA,oCAAsB,EAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,MAAmC,EACnC,UAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvD,OAAO,IAAA,uCAAyB,EAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,MAAmC,EACnC,UAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvD,OAAO,IAAA,uCAAyB,EAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAAwB,EACxB,KAAgB,EAChB,OAAkB;QAElB,MAAM,EAAE,GAAG,MAAM,IAAA,0CAA4B,EAC3C,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB,KAAK,EACL,MAAM,CACP,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClF,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,GACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAC/C,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,EACnD,WAAW,CACZ,CAAC;QAEF,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA3WD,8CA2WC"}
@@ -0,0 +1,21 @@
1
+ import { TransactionInstruction, VersionedTransaction, Connection } from "@solana/web3.js";
2
+ import { Program } from "@coral-xyz/anchor";
3
+ import type { AgentShield, ComposeActionParams } from "./types";
4
+ /**
5
+ * Build an atomic composed transaction:
6
+ * [ComputeBudget, ValidateAndAuthorize, ...defiInstructions, FinalizeSession]
7
+ *
8
+ * All instructions succeed or all revert atomically.
9
+ */
10
+ export declare function composePermittedAction(program: Program<AgentShield>, params: ComposeActionParams, computeUnits?: number): Promise<TransactionInstruction[]>;
11
+ /**
12
+ * Build and return a VersionedTransaction for a composed permitted action.
13
+ * The transaction is NOT signed — caller must sign with the agent keypair.
14
+ */
15
+ export declare function composePermittedTransaction(program: Program<AgentShield>, connection: Connection, params: ComposeActionParams, computeUnits?: number): Promise<VersionedTransaction>;
16
+ /**
17
+ * Convenience: compose a swap action specifically.
18
+ * Wraps composePermittedAction with actionType = { swap: {} }.
19
+ */
20
+ export declare function composePermittedSwap(program: Program<AgentShield>, params: Omit<ComposeActionParams, "actionType">, computeUnits?: number): Promise<TransactionInstruction[]>;
21
+ //# sourceMappingURL=composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../src/composer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EAEtB,oBAAoB,EAEpB,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAMhE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,MAAM,EAAE,mBAAmB,EAC3B,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAwBnC;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,mBAAmB,EAC3B,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAW/B;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAC/C,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAMnC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.composePermittedAction = composePermittedAction;
4
+ exports.composePermittedTransaction = composePermittedTransaction;
5
+ exports.composePermittedSwap = composePermittedSwap;
6
+ const web3_js_1 = require("@solana/web3.js");
7
+ const instructions_1 = require("./instructions");
8
+ /** Default compute budget for composed transactions (1.4M CU) */
9
+ const DEFAULT_COMPUTE_UNITS = 1400000;
10
+ /**
11
+ * Build an atomic composed transaction:
12
+ * [ComputeBudget, ValidateAndAuthorize, ...defiInstructions, FinalizeSession]
13
+ *
14
+ * All instructions succeed or all revert atomically.
15
+ */
16
+ async function composePermittedAction(program, params, computeUnits = DEFAULT_COMPUTE_UNITS) {
17
+ const computeBudgetIx = web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
18
+ units: computeUnits,
19
+ });
20
+ const validateIx = await (0, instructions_1.buildValidateAndAuthorize)(program, params.agent, params.vault, {
21
+ actionType: params.actionType,
22
+ tokenMint: params.tokenMint,
23
+ amount: params.amount,
24
+ targetProtocol: params.targetProtocol,
25
+ leverageBps: params.leverageBps,
26
+ }).instruction();
27
+ const finalizeIx = await (0, instructions_1.buildFinalizeSession)(program, params.agent, params.vault, params.agent, params.success ?? true, params.vaultTokenAccount, params.feeDestinationTokenAccount).instruction();
28
+ return [computeBudgetIx, validateIx, ...params.defiInstructions, finalizeIx];
29
+ }
30
+ /**
31
+ * Build and return a VersionedTransaction for a composed permitted action.
32
+ * The transaction is NOT signed — caller must sign with the agent keypair.
33
+ */
34
+ async function composePermittedTransaction(program, connection, params, computeUnits = DEFAULT_COMPUTE_UNITS) {
35
+ const instructions = await composePermittedAction(program, params, computeUnits);
36
+ const { blockhash } = await connection.getLatestBlockhash();
37
+ const messageV0 = new web3_js_1.TransactionMessage({
38
+ payerKey: params.agent,
39
+ recentBlockhash: blockhash,
40
+ instructions,
41
+ }).compileToV0Message();
42
+ return new web3_js_1.VersionedTransaction(messageV0);
43
+ }
44
+ /**
45
+ * Convenience: compose a swap action specifically.
46
+ * Wraps composePermittedAction with actionType = { swap: {} }.
47
+ */
48
+ async function composePermittedSwap(program, params, computeUnits = DEFAULT_COMPUTE_UNITS) {
49
+ return composePermittedAction(program, { ...params, actionType: { swap: {} } }, computeUnits);
50
+ }
51
+ //# sourceMappingURL=composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.js","sourceRoot":"","sources":["../src/composer.ts"],"names":[],"mappings":";;AAqBA,wDA4BC;AAMD,kEAgBC;AAMD,oDAUC;AAvFD,6CAOyB;AAGzB,iDAAiF;AAEjF,iEAAiE;AACjE,MAAM,qBAAqB,GAAG,OAAS,CAAC;AAExC;;;;;GAKG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAA6B,EAC7B,MAA2B,EAC3B,eAAuB,qBAAqB;IAE5C,MAAM,eAAe,GAAG,8BAAoB,CAAC,mBAAmB,CAAC;QAC/D,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,IAAA,wCAAyB,EAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;QACtF,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjB,MAAM,UAAU,GAAG,MAAM,IAAA,mCAAoB,EAC3C,OAAO,EACP,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,OAAO,IAAI,IAAI,EACtB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,0BAA0B,CAClC,CAAC,WAAW,EAAE,CAAC;IAEhB,OAAO,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,2BAA2B,CAC/C,OAA6B,EAC7B,UAAsB,EACtB,MAA2B,EAC3B,eAAuB,qBAAqB;IAE5C,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACjF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAE5D,MAAM,SAAS,GAAG,IAAI,4BAAkB,CAAC;QACvC,QAAQ,EAAE,MAAM,CAAC,KAAK;QACtB,eAAe,EAAE,SAAS;QAC1B,YAAY;KACb,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAExB,OAAO,IAAI,8BAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAA6B,EAC7B,MAA+C,EAC/C,eAAuB,qBAAqB;IAE5C,OAAO,sBAAsB,CAC3B,OAAO,EACP,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EACvC,YAAY,CACb,CAAC;AACJ,CAAC"}