veilioexchange 0.1.0 → 0.3.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 (70) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +21 -21
  3. package/README.md +225 -113
  4. package/dist/cjs/auth.d.ts +15 -0
  5. package/dist/cjs/auth.d.ts.map +1 -1
  6. package/dist/cjs/auth.js +32 -0
  7. package/dist/cjs/auth.js.map +1 -1
  8. package/dist/cjs/deployments.js +2 -2
  9. package/dist/cjs/index.d.ts +260 -6
  10. package/dist/cjs/index.d.ts.map +1 -1
  11. package/dist/cjs/index.js +221 -62
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/servicesApi.d.ts +86 -0
  14. package/dist/cjs/servicesApi.d.ts.map +1 -0
  15. package/dist/cjs/servicesApi.js +177 -0
  16. package/dist/cjs/servicesApi.js.map +1 -0
  17. package/dist/cjs/solana/auction.d.ts +230 -0
  18. package/dist/cjs/solana/auction.d.ts.map +1 -0
  19. package/dist/cjs/solana/auction.js +546 -0
  20. package/dist/cjs/solana/auction.js.map +1 -0
  21. package/dist/cjs/solana/client.d.ts +100 -0
  22. package/dist/cjs/solana/client.d.ts.map +1 -0
  23. package/dist/cjs/solana/client.js +368 -0
  24. package/dist/cjs/solana/client.js.map +1 -0
  25. package/dist/cjs/solana/escrow.d.ts +193 -0
  26. package/dist/cjs/solana/escrow.d.ts.map +1 -0
  27. package/dist/cjs/solana/escrow.js +463 -0
  28. package/dist/cjs/solana/escrow.js.map +1 -0
  29. package/dist/cjs/solana/index.d.ts +9 -0
  30. package/dist/cjs/solana/index.d.ts.map +1 -0
  31. package/dist/cjs/solana/index.js +35 -0
  32. package/dist/cjs/solana/index.js.map +1 -0
  33. package/dist/cjs/solana/registry.d.ts +112 -0
  34. package/dist/cjs/solana/registry.d.ts.map +1 -0
  35. package/dist/cjs/solana/registry.js +305 -0
  36. package/dist/cjs/solana/registry.js.map +1 -0
  37. package/dist/esm/auth.d.ts +15 -0
  38. package/dist/esm/auth.d.ts.map +1 -1
  39. package/dist/esm/auth.js +28 -0
  40. package/dist/esm/auth.js.map +1 -1
  41. package/dist/esm/deployments.js +2 -2
  42. package/dist/esm/index.d.ts +260 -6
  43. package/dist/esm/index.d.ts.map +1 -1
  44. package/dist/esm/index.js +218 -61
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/servicesApi.d.ts +86 -0
  47. package/dist/esm/servicesApi.d.ts.map +1 -0
  48. package/dist/esm/servicesApi.js +174 -0
  49. package/dist/esm/servicesApi.js.map +1 -0
  50. package/dist/esm/solana/auction.d.ts +230 -0
  51. package/dist/esm/solana/auction.d.ts.map +1 -0
  52. package/dist/esm/solana/auction.js +523 -0
  53. package/dist/esm/solana/auction.js.map +1 -0
  54. package/dist/esm/solana/client.d.ts +100 -0
  55. package/dist/esm/solana/client.d.ts.map +1 -0
  56. package/dist/esm/solana/client.js +361 -0
  57. package/dist/esm/solana/client.js.map +1 -0
  58. package/dist/esm/solana/escrow.d.ts +193 -0
  59. package/dist/esm/solana/escrow.d.ts.map +1 -0
  60. package/dist/esm/solana/escrow.js +444 -0
  61. package/dist/esm/solana/escrow.js.map +1 -0
  62. package/dist/esm/solana/index.d.ts +9 -0
  63. package/dist/esm/solana/index.d.ts.map +1 -0
  64. package/dist/esm/solana/index.js +9 -0
  65. package/dist/esm/solana/index.js.map +1 -0
  66. package/dist/esm/solana/registry.d.ts +112 -0
  67. package/dist/esm/solana/registry.d.ts.map +1 -0
  68. package/dist/esm/solana/registry.js +289 -0
  69. package/dist/esm/solana/registry.js.map +1 -0
  70. package/package.json +82 -55
@@ -0,0 +1,100 @@
1
+ import { Connection, Keypair, PublicKey, Transaction, type Commitment } from '@solana/web3.js';
2
+ import { type DecodedAuctionConfig, type DecodedAuctionState } from './auction.js';
3
+ import { type DecodedSolanaEscrowConfig, type DecodedSolanaEscrowOrder } from './escrow.js';
4
+ /** Anything that can sign a legacy Transaction: a Phantom provider, a wallet adapter, or keypairSigner(). */
5
+ export interface SolanaSigner {
6
+ publicKey: PublicKey;
7
+ signTransaction<T extends Transaction>(transaction: T): Promise<T>;
8
+ }
9
+ /** Wraps a Keypair (e.g. an agent's devnet key) as a SolanaSigner. */
10
+ export declare function keypairSigner(keypair: Keypair): SolanaSigner;
11
+ export interface VeilioSolanaClientOptions {
12
+ connection: Connection;
13
+ signer?: SolanaSigner;
14
+ auctionProgramId?: string;
15
+ escrowProgramId?: string;
16
+ commitment?: Commitment;
17
+ /**
18
+ * Default dispute reviewer for `deposit()` when the input omits `reviewer`. Use the VEILIO
19
+ * platform reviewer wallet published for your deployment.
20
+ */
21
+ platformReviewer?: string;
22
+ /** Default fee recipient for `deposit()` when the input omits `feeRecipient`. */
23
+ platformFeeRecipient?: string;
24
+ }
25
+ /** Everything needed to reveal a Solana sealed bid. Persist it (salt included) in encrypted storage. */
26
+ export interface SolanaPreparedBid {
27
+ auctionId: string;
28
+ bidder: string;
29
+ maxBidLamports: string;
30
+ /** 32-byte salt, hex. Losing it makes the bid impossible to reveal. */
31
+ salt: string;
32
+ /** SHA-256 commitment, hex. */
33
+ commitment: string;
34
+ programId: string;
35
+ }
36
+ /**
37
+ * SECURITY NOTE: the upgraded `veilio-service-escrow` program takes the reviewer, fee recipient and
38
+ * fee rate from its global `EscrowConfig` PDA and ignores the values passed at deposit time.
39
+ * `deposit()` reads that config and uses it when it exists. Before the upgrade (no config account)
40
+ * the program stores whatever the buyer passes, so the SDK falls back to the client's
41
+ * `platformReviewer` / `platformFeeRecipient` options and refuses a reviewer equal to the buyer or
42
+ * seller. Sellers should check `getEscrowOrder(id).reviewer` before starting work.
43
+ */
44
+ export interface SolanaEscrowDepositInput {
45
+ orderId: string;
46
+ seller: string;
47
+ /**
48
+ * Wallet that can resolve disputes. Defaults to the client's `platformReviewer`.
49
+ * Must be a real signer (never a program ID) and must not be the buyer or seller.
50
+ */
51
+ reviewer?: string;
52
+ /** Defaults to the client's `platformFeeRecipient`. */
53
+ feeRecipient?: string;
54
+ amountSol: string;
55
+ /** Unix seconds. */
56
+ deadline: number;
57
+ }
58
+ /**
59
+ * Encodes an order ID into the 32-byte seed the escrow program expects.
60
+ * Accepts a 64-char hex string as-is; otherwise UTF-8 bytes right-padded with zeros
61
+ * (same encoding the EVM escrow uses), up to 32 bytes.
62
+ */
63
+ export declare function toSolanaOrderId(orderId: string): string;
64
+ /** Converts a decimal SOL string to lamports without floating-point rounding. */
65
+ export declare function solToLamports(sol: string): bigint;
66
+ /**
67
+ * Validates a base58 address. A lowercased address often still decodes to 32 bytes, so it would
68
+ * silently point at the wrong account; real addresses with no uppercase letter are vanishingly rare.
69
+ */
70
+ export declare function assertSolanaAddress(label: string, value: string): void;
71
+ /**
72
+ * High-level client for VEILIO on Solana Devnet: sealed-bid auctions and service escrow.
73
+ * Node.js 18+ (uses node:crypto and Buffer).
74
+ */
75
+ export declare function createVeilioSolanaClient(options: VeilioSolanaClientOptions): {
76
+ auctionProgramId: string;
77
+ escrowProgramId: string;
78
+ getAuctionConfig: () => Promise<DecodedAuctionConfig | null>;
79
+ getAuction: (auctionId: bigint | number | string) => Promise<DecodedAuctionState | null>;
80
+ listAuctions: () => Promise<Array<DecodedAuctionState & {
81
+ address: string;
82
+ }>>;
83
+ prepareBid: (auctionId: bigint | number | string, maxBidSol: string) => SolanaPreparedBid;
84
+ commitBid: (prepared: SolanaPreparedBid, depositSol: string) => Promise<string>;
85
+ revealBid: (prepared: SolanaPreparedBid) => Promise<string>;
86
+ settleAuction: (auctionId: bigint | number | string) => Promise<string>;
87
+ acceptDataset: (auctionId: bigint | number | string, seller: string) => Promise<string>;
88
+ requestRefund: (auctionId: bigint | number | string, evidenceHash: string | Uint8Array) => Promise<string>;
89
+ finalizeInspectionTimeout: (auctionId: bigint | number | string) => Promise<string>;
90
+ finalizeRefundTimeout: (auctionId: bigint | number | string) => Promise<string>;
91
+ claimRefund: (auctionId: bigint | number | string) => Promise<string>;
92
+ getEscrowConfig: () => Promise<DecodedSolanaEscrowConfig | null>;
93
+ getEscrowOrder: (orderId: string) => Promise<DecodedSolanaEscrowOrder | null>;
94
+ deposit: (input: SolanaEscrowDepositInput) => Promise<string>;
95
+ submitDelivery: (orderId: string, deliverableReference: string) => Promise<string>;
96
+ releaseFunds: (orderId: string) => Promise<string>;
97
+ refund: (orderId: string, reason: string) => Promise<string>;
98
+ dispute: (orderId: string, reason: string) => Promise<string>;
99
+ };
100
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/solana/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keypairSigner = keypairSigner;
4
+ exports.toSolanaOrderId = toSolanaOrderId;
5
+ exports.solToLamports = solToLamports;
6
+ exports.assertSolanaAddress = assertSolanaAddress;
7
+ exports.createVeilioSolanaClient = createVeilioSolanaClient;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ const errors_js_1 = require("../errors.js");
11
+ const auction_js_1 = require("./auction.js");
12
+ const escrow_js_1 = require("./escrow.js");
13
+ const registry_js_1 = require("./registry.js");
14
+ /** Wraps a Keypair (e.g. an agent's devnet key) as a SolanaSigner. */
15
+ function keypairSigner(keypair) {
16
+ return {
17
+ publicKey: keypair.publicKey,
18
+ async signTransaction(transaction) {
19
+ transaction.partialSign(keypair);
20
+ return transaction;
21
+ },
22
+ };
23
+ }
24
+ /**
25
+ * Encodes an order ID into the 32-byte seed the escrow program expects.
26
+ * Accepts a 64-char hex string as-is; otherwise UTF-8 bytes right-padded with zeros
27
+ * (same encoding the EVM escrow uses), up to 32 bytes.
28
+ */
29
+ function toSolanaOrderId(orderId) {
30
+ const hex = orderId.startsWith('0x') ? orderId.slice(2) : orderId;
31
+ if (/^[0-9a-fA-F]{64}$/.test(hex))
32
+ return hex.toLowerCase();
33
+ const bytes = Buffer.from(orderId, 'utf8');
34
+ if (bytes.length === 0 || bytes.length > 32) {
35
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'orderId must be 1 to 32 bytes of UTF-8, or 32 bytes of hex.' });
36
+ }
37
+ return Buffer.concat([bytes, Buffer.alloc(32 - bytes.length)]).toString('hex');
38
+ }
39
+ /** Converts a decimal SOL string to lamports without floating-point rounding. */
40
+ function solToLamports(sol) {
41
+ const trimmed = sol.trim();
42
+ if (!/^\d+(\.\d{1,9})?$/.test(trimmed)) {
43
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: `Invalid SOL amount: "${sol}" (max 9 decimals).` });
44
+ }
45
+ const [whole, fraction = ''] = trimmed.split('.');
46
+ return BigInt(whole) * BigInt(web3_js_1.LAMPORTS_PER_SOL) + BigInt(fraction.padEnd(9, '0'));
47
+ }
48
+ /**
49
+ * Validates a base58 address. A lowercased address often still decodes to 32 bytes, so it would
50
+ * silently point at the wrong account; real addresses with no uppercase letter are vanishingly rare.
51
+ */
52
+ function assertSolanaAddress(label, value) {
53
+ let valid = true;
54
+ try {
55
+ new web3_js_1.PublicKey(value);
56
+ }
57
+ catch {
58
+ valid = false;
59
+ }
60
+ if (!valid || value === value.toLowerCase()) {
61
+ throw new errors_js_1.VeilioSdkError({
62
+ code: 'INVALID_INPUT',
63
+ message: `${label} is not a valid Solana address. Base58 is case-sensitive: never lowercase it.`,
64
+ });
65
+ }
66
+ }
67
+ function toTransactionInstruction(ix) {
68
+ return new web3_js_1.TransactionInstruction({
69
+ programId: new web3_js_1.PublicKey(ix.programId),
70
+ keys: ix.accounts.map((meta) => ({
71
+ pubkey: new web3_js_1.PublicKey(meta.pubkey),
72
+ isSigner: meta.isSigner,
73
+ isWritable: meta.isWritable,
74
+ })),
75
+ data: Buffer.from(ix.data),
76
+ });
77
+ }
78
+ /**
79
+ * High-level client for VEILIO on Solana Devnet: sealed-bid auctions and service escrow.
80
+ * Node.js 18+ (uses node:crypto and Buffer).
81
+ */
82
+ function createVeilioSolanaClient(options) {
83
+ const { connection } = options;
84
+ const commitment = options.commitment ?? 'confirmed';
85
+ const auctionProgramId = options.auctionProgramId ?? auction_js_1.DEFAULT_SOLANA_AUCTION_PROGRAM_ID;
86
+ const escrowProgramId = options.escrowProgramId ?? escrow_js_1.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
87
+ function requireSigner() {
88
+ if (!options.signer) {
89
+ throw new errors_js_1.VeilioSdkError({ code: 'WALLET_REQUIRED', message: 'A Solana signer is required to send transactions.' });
90
+ }
91
+ return options.signer;
92
+ }
93
+ async function send(ix) {
94
+ const signer = requireSigner();
95
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash(commitment);
96
+ const tx = new web3_js_1.Transaction({ feePayer: signer.publicKey, blockhash, lastValidBlockHeight }).add(toTransactionInstruction(ix));
97
+ const signed = await signer.signTransaction(tx);
98
+ const signature = await connection.sendRawTransaction(signed.serialize());
99
+ const result = await connection.confirmTransaction({ signature, blockhash, lastValidBlockHeight }, commitment);
100
+ if (result.value.err) {
101
+ throw new errors_js_1.VeilioSdkError({
102
+ code: 'TRANSACTION_REVERTED',
103
+ message: `Solana transaction failed: ${JSON.stringify(result.value.err)}`,
104
+ context: { signature },
105
+ });
106
+ }
107
+ return signature;
108
+ }
109
+ // ---------------------------------------------------------------- Auctions
110
+ /** Global AuctionConfig (platform refund reviewer), or null before the program upgrade. */
111
+ async function getAuctionConfig() {
112
+ const { pda } = (0, auction_js_1.findAuctionConfigPda)(auctionProgramId);
113
+ const account = await connection.getAccountInfo(new web3_js_1.PublicKey(pda), commitment);
114
+ return account ? (0, auction_js_1.decodeAuctionConfigAccount)(account.data) : null;
115
+ }
116
+ async function getAuction(auctionId) {
117
+ const { pda } = (0, auction_js_1.findAuctionPda)(BigInt(auctionId), auctionProgramId);
118
+ const account = await connection.getAccountInfo(new web3_js_1.PublicKey(pda), commitment);
119
+ return account ? (0, auction_js_1.decodeAuctionStateAccount)(account.data) : null;
120
+ }
121
+ async function listAuctions() {
122
+ const discriminator = (0, registry_js_1.encodeBase58)((0, registry_js_1.getAnchorDiscriminator)('account', 'AuctionStateAccount'));
123
+ const accounts = await connection.getProgramAccounts(new web3_js_1.PublicKey(auctionProgramId), {
124
+ commitment,
125
+ filters: [{ memcmp: { offset: 0, bytes: discriminator } }],
126
+ });
127
+ const auctions = [];
128
+ for (const { pubkey, account } of accounts) {
129
+ try {
130
+ auctions.push({ ...(0, auction_js_1.decodeAuctionStateAccount)(account.data), address: pubkey.toBase58() });
131
+ }
132
+ catch {
133
+ // Skip accounts from an older layout instead of failing the whole listing.
134
+ }
135
+ }
136
+ return auctions.sort((a, b) => Number(b.auctionId - a.auctionId));
137
+ }
138
+ function prepareBid(auctionId, maxBidSol) {
139
+ const bidder = requireSigner().publicKey.toBase58();
140
+ const id = BigInt(auctionId);
141
+ const maxBidLamports = solToLamports(maxBidSol);
142
+ if (id < 0n || maxBidLamports <= 0n) {
143
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'auctionId must be >= 0 and maxBid must be positive.' });
144
+ }
145
+ const salt = (0, node_crypto_1.randomBytes)(32);
146
+ const { pda: auctionPda } = (0, auction_js_1.findAuctionPda)(id, auctionProgramId);
147
+ const commitmentHash = (0, auction_js_1.computeSealedBidCommitment)({ auctionPubkey: auctionPda, bidderPubkey: bidder, maxBidLamports, salt });
148
+ return {
149
+ auctionId: id.toString(),
150
+ bidder,
151
+ maxBidLamports: maxBidLamports.toString(),
152
+ salt: salt.toString('hex'),
153
+ commitment: commitmentHash.toString('hex'),
154
+ programId: auctionProgramId,
155
+ };
156
+ }
157
+ /** Commits the sealed bid. Deposit must cover the max bid; over-deposit to hide your ceiling. */
158
+ async function commitBid(prepared, depositSol) {
159
+ const depositLamports = solToLamports(depositSol);
160
+ if (depositLamports < BigInt(prepared.maxBidLamports)) {
161
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'Deposit must cover the maximum bid.' });
162
+ }
163
+ return send((0, auction_js_1.createCommitBidInstruction)({
164
+ programId: prepared.programId,
165
+ auctionId: BigInt(prepared.auctionId),
166
+ bidder: prepared.bidder,
167
+ commitment: Buffer.from(prepared.commitment, 'hex'),
168
+ depositLamports,
169
+ }));
170
+ }
171
+ async function revealBid(prepared) {
172
+ return send((0, auction_js_1.createRevealBidInstruction)({
173
+ programId: prepared.programId,
174
+ auctionId: BigInt(prepared.auctionId),
175
+ bidder: prepared.bidder,
176
+ maxBidLamports: BigInt(prepared.maxBidLamports),
177
+ salt: Buffer.from(prepared.salt, 'hex'),
178
+ }));
179
+ }
180
+ /** Winner accepts the asset during inspection, releasing payment to the seller. */
181
+ async function acceptDataset(auctionId, seller) {
182
+ return send((0, auction_js_1.createAcceptDatasetInstruction)({
183
+ programId: auctionProgramId,
184
+ auctionId: BigInt(auctionId),
185
+ seller,
186
+ winner: requireSigner().publicKey.toBase58(),
187
+ }));
188
+ }
189
+ /** Losing bidders reclaim their deposit after settlement. */
190
+ async function claimRefund(auctionId) {
191
+ return send((0, auction_js_1.createClaimRefundInstruction)({
192
+ programId: auctionProgramId,
193
+ auctionId: BigInt(auctionId),
194
+ bidder: requireSigner().publicKey.toBase58(),
195
+ }));
196
+ }
197
+ async function requireAuction(auctionId) {
198
+ const auction = await getAuction(auctionId);
199
+ if (!auction) {
200
+ throw new errors_js_1.VeilioSdkError({ code: 'NOT_FOUND', message: `Auction ${auctionId} not found on Solana.` });
201
+ }
202
+ return auction;
203
+ }
204
+ /** Anyone: closes the reveal phase after reveal_end_time (Inspection with a winner, else Completed). */
205
+ async function settleAuction(auctionId) {
206
+ requireSigner();
207
+ return send((0, auction_js_1.createSettleAuctionInstruction)({ programId: auctionProgramId, auctionId: BigInt(auctionId) }));
208
+ }
209
+ /**
210
+ * Winner disputes the asset during inspection. `evidenceHash` is 32 bytes (hex string or bytes),
211
+ * e.g. sha256 of your evidence bundle. The auction reviewer then calls review_refund; if it does
212
+ * not act within 7 days the winner can call `finalizeRefundTimeout`.
213
+ */
214
+ async function requestRefund(auctionId, evidenceHash) {
215
+ const hash = typeof evidenceHash === 'string' ? Buffer.from(evidenceHash.replace(/^0x/, ''), 'hex') : Buffer.from(evidenceHash);
216
+ if (hash.length !== 32 || hash.every((b) => b === 0)) {
217
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'evidenceHash must be 32 non-zero bytes (64 hex chars).' });
218
+ }
219
+ return send((0, auction_js_1.createRequestRefundInstruction)({
220
+ programId: auctionProgramId,
221
+ auctionId: BigInt(auctionId),
222
+ winner: requireSigner().publicKey.toBase58(),
223
+ evidenceHash: hash,
224
+ }));
225
+ }
226
+ /** Anyone: pays the seller once inspection ended without a refund request. Accounts are read from the auction. */
227
+ async function finalizeInspectionTimeout(auctionId) {
228
+ const caller = requireSigner().publicKey.toBase58();
229
+ const auction = await requireAuction(auctionId);
230
+ if (auction.state !== auction_js_1.SolanaAuctionState.Inspection) {
231
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'Auction is not in Inspection.' });
232
+ }
233
+ return send((0, auction_js_1.createFinalizeInspectionTimeoutInstruction)({
234
+ programId: auctionProgramId,
235
+ auctionId: BigInt(auctionId),
236
+ seller: auction.seller,
237
+ winner: auction.highestBidder,
238
+ caller,
239
+ }));
240
+ }
241
+ /** Winner: refunds itself when the reviewer has not resolved a refund request within 7 days. */
242
+ async function finalizeRefundTimeout(auctionId) {
243
+ return send((0, auction_js_1.createFinalizeRefundTimeoutInstruction)({
244
+ programId: auctionProgramId,
245
+ auctionId: BigInt(auctionId),
246
+ winner: requireSigner().publicKey.toBase58(),
247
+ }));
248
+ }
249
+ // ---------------------------------------------------------- Service escrow
250
+ async function getEscrowOrder(orderId) {
251
+ const { pda } = (0, escrow_js_1.findEscrowOrderPda)(toSolanaOrderId(orderId), escrowProgramId);
252
+ const account = await connection.getAccountInfo(new web3_js_1.PublicKey(pda), commitment);
253
+ return account ? (0, escrow_js_1.decodeEscrowOrderAccount)(account.data) : null;
254
+ }
255
+ /** Global EscrowConfig (platform reviewer, fee recipient, fee bps), or null before the program upgrade. */
256
+ async function getEscrowConfig() {
257
+ const { pda } = (0, escrow_js_1.findEscrowConfigPda)(escrowProgramId);
258
+ const account = await connection.getAccountInfo(new web3_js_1.PublicKey(pda), commitment);
259
+ return account ? (0, escrow_js_1.decodeEscrowConfigAccount)(account.data) : null;
260
+ }
261
+ async function deposit(input) {
262
+ const buyer = requireSigner().publicKey.toBase58();
263
+ // The upgraded program snapshots the on-chain config and ignores the passed values.
264
+ const config = await getEscrowConfig();
265
+ const reviewer = config?.reviewer ?? input.reviewer ?? options.platformReviewer;
266
+ const feeRecipient = config?.feeRecipient ?? input.feeRecipient ?? options.platformFeeRecipient;
267
+ if (!reviewer || !feeRecipient) {
268
+ throw new errors_js_1.VeilioSdkError({
269
+ code: 'INVALID_CONFIG',
270
+ message: 'reviewer and feeRecipient are required: pass them, or set platformReviewer / platformFeeRecipient on createVeilioSolanaClient().',
271
+ });
272
+ }
273
+ if (reviewer === escrowProgramId || reviewer === auctionProgramId) {
274
+ throw new errors_js_1.VeilioSdkError({
275
+ code: 'INVALID_INPUT',
276
+ message: 'reviewer must be a wallet that can sign; a program ID can never resolve a dispute.',
277
+ });
278
+ }
279
+ for (const [label, value] of [['seller', input.seller], ['reviewer', reviewer], ['feeRecipient', feeRecipient]]) {
280
+ assertSolanaAddress(label, value);
281
+ }
282
+ if (reviewer === buyer || reviewer === input.seller) {
283
+ throw new errors_js_1.VeilioSdkError({
284
+ code: 'INVALID_INPUT',
285
+ message: 'reviewer must be an independent wallet (the platform reviewer), not the buyer or seller.',
286
+ });
287
+ }
288
+ if (input.deadline <= Math.floor(Date.now() / 1000)) {
289
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'Deadline must be in the future.' });
290
+ }
291
+ return send((0, escrow_js_1.createDepositServiceOrderInstruction)({
292
+ programId: escrowProgramId,
293
+ buyer,
294
+ seller: input.seller,
295
+ reviewer,
296
+ feeRecipient,
297
+ orderId: toSolanaOrderId(input.orderId),
298
+ amountLamports: solToLamports(input.amountSol),
299
+ deadline: input.deadline,
300
+ }));
301
+ }
302
+ async function submitDelivery(orderId, deliverableReference) {
303
+ return send((0, escrow_js_1.createSubmitDeliveryInstruction)({
304
+ programId: escrowProgramId,
305
+ seller: requireSigner().publicKey.toBase58(),
306
+ orderId: toSolanaOrderId(orderId),
307
+ deliverableReference,
308
+ }));
309
+ }
310
+ /** Buyer releases escrow to the seller (5% fee to feeRecipient). Accounts are read from the order. */
311
+ async function releaseFunds(orderId) {
312
+ const order = await getEscrowOrder(orderId);
313
+ if (!order)
314
+ throw new errors_js_1.VeilioSdkError({ code: 'NOT_FOUND', message: `Escrow order ${orderId} not found on Solana.` });
315
+ return send((0, escrow_js_1.createReleaseFundsInstruction)({
316
+ programId: escrowProgramId,
317
+ buyer: requireSigner().publicKey.toBase58(),
318
+ seller: order.seller,
319
+ feeRecipient: order.feeRecipient,
320
+ orderId: toSolanaOrderId(orderId),
321
+ }));
322
+ }
323
+ /** Seller cancellation, or buyer refund after the deadline. Fee-free. */
324
+ async function refund(orderId, reason) {
325
+ const order = await getEscrowOrder(orderId);
326
+ if (!order)
327
+ throw new errors_js_1.VeilioSdkError({ code: 'NOT_FOUND', message: `Escrow order ${orderId} not found on Solana.` });
328
+ return send((0, escrow_js_1.createCancelOrRefundInstruction)({
329
+ programId: escrowProgramId,
330
+ caller: requireSigner().publicKey.toBase58(),
331
+ buyer: order.buyer,
332
+ orderId: toSolanaOrderId(orderId),
333
+ reason,
334
+ }));
335
+ }
336
+ async function dispute(orderId, reason) {
337
+ return send((0, escrow_js_1.createDisputeOrderInstruction)({
338
+ programId: escrowProgramId,
339
+ caller: requireSigner().publicKey.toBase58(),
340
+ orderId: toSolanaOrderId(orderId),
341
+ reason,
342
+ }));
343
+ }
344
+ return {
345
+ auctionProgramId,
346
+ escrowProgramId,
347
+ getAuctionConfig,
348
+ getAuction,
349
+ listAuctions,
350
+ prepareBid,
351
+ commitBid,
352
+ revealBid,
353
+ settleAuction,
354
+ acceptDataset,
355
+ requestRefund,
356
+ finalizeInspectionTimeout,
357
+ finalizeRefundTimeout,
358
+ claimRefund,
359
+ getEscrowConfig,
360
+ getEscrowOrder,
361
+ deposit,
362
+ submitDelivery,
363
+ releaseFunds,
364
+ refund,
365
+ dispute,
366
+ };
367
+ }
368
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/solana/client.ts"],"names":[],"mappings":"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"}