@intent-engine/client 0.1.23 → 0.1.27

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 (99) hide show
  1. package/dist/src/accounts.d.ts +6 -0
  2. package/dist/src/accounts.js +15 -1
  3. package/dist/src/accounts.js.map +1 -1
  4. package/dist/src/budget.d.ts +6 -4
  5. package/dist/src/budget.js +24 -9
  6. package/dist/src/budget.js.map +1 -1
  7. package/dist/src/client-committee.d.ts +8 -0
  8. package/dist/src/client-committee.js +34 -0
  9. package/dist/src/client-committee.js.map +1 -0
  10. package/dist/src/client-errors.d.ts +33 -0
  11. package/dist/src/client-errors.js +65 -0
  12. package/dist/src/client-errors.js.map +1 -0
  13. package/dist/src/client-intents.d.ts +12 -0
  14. package/dist/src/client-intents.js +140 -0
  15. package/dist/src/client-intents.js.map +1 -0
  16. package/dist/src/client-reads.d.ts +7 -0
  17. package/dist/src/client-reads.js +61 -0
  18. package/dist/src/client-reads.js.map +1 -0
  19. package/dist/src/client-settle.d.ts +7 -0
  20. package/dist/src/client-settle.js +180 -0
  21. package/dist/src/client-settle.js.map +1 -0
  22. package/dist/src/client-types.d.ts +192 -0
  23. package/dist/src/client-types.js +9 -0
  24. package/dist/src/client-types.js.map +1 -0
  25. package/dist/src/client-watch.d.ts +4 -0
  26. package/dist/src/client-watch.js +97 -0
  27. package/dist/src/client-watch.js.map +1 -0
  28. package/dist/src/client.d.ts +5 -140
  29. package/dist/src/client.js +28 -309
  30. package/dist/src/client.js.map +1 -1
  31. package/dist/src/confirmation.d.ts +11 -0
  32. package/dist/src/confirmation.js +94 -0
  33. package/dist/src/confirmation.js.map +1 -0
  34. package/dist/src/index.d.ts +2 -0
  35. package/dist/src/index.js +2 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/intent-notifications.d.ts +13 -0
  38. package/dist/src/intent-notifications.js +106 -0
  39. package/dist/src/intent-notifications.js.map +1 -0
  40. package/dist/src/job-deliveries.d.ts +40 -0
  41. package/dist/src/job-deliveries.js +92 -0
  42. package/dist/src/job-deliveries.js.map +1 -0
  43. package/dist/src/job-memos.d.ts +17 -0
  44. package/dist/src/job-memos.js +64 -0
  45. package/dist/src/job-memos.js.map +1 -0
  46. package/dist/src/job-origins.d.ts +30 -0
  47. package/dist/src/job-origins.js +53 -0
  48. package/dist/src/job-origins.js.map +1 -0
  49. package/dist/src/job-proofs.d.ts +17 -0
  50. package/dist/src/job-proofs.js +54 -0
  51. package/dist/src/job-proofs.js.map +1 -0
  52. package/dist/src/job-scan.d.ts +20 -0
  53. package/dist/src/job-scan.js +70 -0
  54. package/dist/src/job-scan.js.map +1 -0
  55. package/dist/src/job-specs.d.ts +40 -0
  56. package/dist/src/job-specs.js +107 -0
  57. package/dist/src/job-specs.js.map +1 -0
  58. package/dist/src/jobs.d.ts +6 -77
  59. package/dist/src/jobs.js +6 -186
  60. package/dist/src/jobs.js.map +1 -1
  61. package/dist/src/memoized-transport.d.ts +4 -0
  62. package/dist/src/memoized-transport.js +66 -0
  63. package/dist/src/memoized-transport.js.map +1 -0
  64. package/dist/src/reputation.d.ts +53 -0
  65. package/dist/src/reputation.js +176 -0
  66. package/dist/src/reputation.js.map +1 -0
  67. package/dist/src/rpc-retry.d.ts +16 -0
  68. package/dist/src/rpc-retry.js +62 -0
  69. package/dist/src/rpc-retry.js.map +1 -0
  70. package/dist/src/rpc-shapes.d.ts +230 -0
  71. package/dist/src/rpc-shapes.js +2 -0
  72. package/dist/src/rpc-shapes.js.map +1 -0
  73. package/dist/src/rpc-transport.d.ts +6 -0
  74. package/dist/src/rpc-transport.js +236 -0
  75. package/dist/src/rpc-transport.js.map +1 -0
  76. package/dist/src/simple-orders.d.ts +24 -0
  77. package/dist/src/simple-orders.js +101 -0
  78. package/dist/src/simple-orders.js.map +1 -0
  79. package/dist/src/simple-tokens.d.ts +19 -0
  80. package/dist/src/simple-tokens.js +84 -0
  81. package/dist/src/simple-tokens.js.map +1 -0
  82. package/dist/src/simple-types.d.ts +111 -0
  83. package/dist/src/simple-types.js +2 -0
  84. package/dist/src/simple-types.js.map +1 -0
  85. package/dist/src/simple-work.d.ts +12 -0
  86. package/dist/src/simple-work.js +69 -0
  87. package/dist/src/simple-work.js.map +1 -0
  88. package/dist/src/simple.d.ts +6 -0
  89. package/dist/src/simple.js +53 -0
  90. package/dist/src/simple.js.map +1 -0
  91. package/dist/src/svm.js +83 -27
  92. package/dist/src/svm.js.map +1 -1
  93. package/dist/src/transaction-keys.d.ts +6 -0
  94. package/dist/src/transaction-keys.js +19 -0
  95. package/dist/src/transaction-keys.js.map +1 -0
  96. package/dist/src/transport.d.ts +7 -223
  97. package/dist/src/transport.js +6 -467
  98. package/dist/src/transport.js.map +1 -1
  99. package/package.json +17 -6
@@ -1,4 +1,5 @@
1
1
  import { type Address } from "@solana/kit";
2
+ import { type MintCap } from "@intent-engine/core";
2
3
  import type { AccountView, Transport } from "./transport.js";
3
4
  export declare const SYSTEM_PROGRAM_ADDRESS: Address;
4
5
  export declare function createdAccount(transport: Transport, address: Address): Promise<AccountView | null>;
@@ -19,6 +20,11 @@ export declare function loadConfig(transport: Transport): Promise<{
19
20
  address: Address<string>;
20
21
  config: import("@intent-engine/core").Config;
21
22
  }>;
23
+ export declare function loadMintCap(transport: Transport, mint: Address): Promise<{
24
+ address: Address;
25
+ cap: MintCap;
26
+ } | null>;
27
+ export declare function mintCapOf(transport: Transport, mint: Address): Promise<Address | undefined>;
22
28
  export type NonceWindow = {
23
29
  nonceBase: bigint;
24
30
  nonceBitmap: readonly bigint[];
@@ -1,5 +1,5 @@
1
1
  import { getBase58Encoder } from "@solana/kit";
2
- import { findConfigPda, findIntentPda, findUserStatePda, getConfigDecoder, getConfigDiscriminatorBytes, getIntentDecoder, getIntentDiscriminatorBytes, getUserStateDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, TOKEN_2022_PROGRAM_ADDRESS, TOKEN_PROGRAM_ADDRESS, } from "@intent-engine/core";
2
+ import { decodeMintCapData, findConfigPda, findIntentPda, findMintCapAddress, findUserStatePda, getConfigDecoder, getConfigDiscriminatorBytes, getIntentDecoder, getIntentDiscriminatorBytes, getUserStateDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, isMintCapData, TOKEN_2022_PROGRAM_ADDRESS, TOKEN_PROGRAM_ADDRESS, } from "@intent-engine/core";
3
3
  export const SYSTEM_PROGRAM_ADDRESS = "11111111111111111111111111111111";
4
4
  export async function createdAccount(transport, address) {
5
5
  const view = await transport.getAccount(address);
@@ -42,6 +42,20 @@ export async function loadConfig(transport) {
42
42
  const data = await engineAccount(transport, address, getConfigDiscriminatorBytes(), "config");
43
43
  return { address, config: getConfigDecoder().decode(data) };
44
44
  }
45
+ export async function loadMintCap(transport, mint) {
46
+ const address = await findMintCapAddress(mint);
47
+ const view = await createdAccount(transport, address);
48
+ if (view === null) {
49
+ return null;
50
+ }
51
+ if (view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS || !isMintCapData(view.data)) {
52
+ throw new Error(`${address} is not an engine mint cap`);
53
+ }
54
+ return { address, cap: decodeMintCapData(view.data) };
55
+ }
56
+ export async function mintCapOf(transport, mint) {
57
+ return (await loadMintCap(transport, mint))?.address;
58
+ }
45
59
  export async function loadUser(transport, owner) {
46
60
  const [address] = await findUserStatePda({ owner });
47
61
  const view = await createdAccount(transport, address);
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/accounts.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { type Address, type Instruction } from "@solana/kit";
2
- import type { Simulation, Transport } from "./transport.js";
2
+ import { type LookupTables, type Simulation, type Transport } from "./transport.js";
3
3
  export type Priority = bigint | "auto";
4
4
  export declare const AUTO_PERCENTILE = 75n;
5
5
  export declare const AUTO_PRICE_CAP = 10000000n;
6
+ export declare const PACKET_DATA_SIZE = 1232;
6
7
  export declare function percentile(fees: readonly bigint[], rank: bigint): bigint;
7
8
  export declare function writableAccounts(instructions: readonly Instruction[]): Address[];
8
9
  export declare function priceOf(transport: Transport, priority: Priority, instructions: readonly Instruction[]): Promise<bigint>;
9
- export declare function simulated(transport: Transport, instructions: readonly Instruction[], feePayer: Address): Promise<Simulation>;
10
- export declare function unitsOf(transport: Transport, instructions: readonly Instruction[], feePayer: Address): Promise<bigint | null>;
11
- export declare function budgeted(transport: Transport, priority: Priority, instructions: readonly Instruction[], feePayer: Address): Promise<Instruction[]>;
10
+ export declare function transactionBytes(transport: Transport, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<number>;
11
+ export declare function simulated(transport: Transport, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<Simulation>;
12
+ export declare function unitsOf(transport: Transport, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<bigint | null>;
13
+ export declare function budgeted(transport: Transport, priority: Priority, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<Instruction[]>;
12
14
  export declare function withPriority(inner: Transport, priority: Priority): Transport;
@@ -1,7 +1,9 @@
1
- import { appendTransactionMessageInstructions, createTransactionMessage, getBase64EncodedWireTransaction, isWritableRole, partiallySignTransactionMessageWithSigners, pipe, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/kit";
1
+ import { appendTransactionMessageInstructions, compileTransaction, compressTransactionMessageUsingAddressLookupTables, createTransactionMessage, getBase64EncodedWireTransaction, getTransactionEncoder, isWritableRole, pipe, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/kit";
2
2
  import { COMPUTE_BUDGET_ADDRESS, computeUnitLimit, computeUnitPrice, headroom, MAX_COMPUTE_UNITS } from "@intent-engine/core";
3
+ import { boundMembers } from "./transport.js";
3
4
  export const AUTO_PERCENTILE = 75n;
4
5
  export const AUTO_PRICE_CAP = 10000000n;
6
+ export const PACKET_DATA_SIZE = 1_232;
5
7
  export function percentile(fees, rank) {
6
8
  const sorted = [...fees].sort((a, b) => Number(a - b));
7
9
  if (sorted.length === 0) {
@@ -28,28 +30,41 @@ export async function priceOf(transport, priority, instructions) {
28
30
  const suggested = percentile(await transport.recentFees(writableAccounts(instructions)), AUTO_PERCENTILE);
29
31
  return suggested < AUTO_PRICE_CAP ? suggested : AUTO_PRICE_CAP;
30
32
  }
31
- export async function simulated(transport, instructions, feePayer) {
33
+ async function compiled(transport, instructions, feePayer, tables) {
32
34
  const latest = await transport.latestBlockhash();
33
35
  const message = pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayer(feePayer, m), (m) => setTransactionMessageLifetimeUsingBlockhash(latest, m), (m) => appendTransactionMessageInstructions(instructions, m));
34
- return transport.simulate(getBase64EncodedWireTransaction(await partiallySignTransactionMessageWithSigners(message)));
36
+ const compressed = tables === undefined || Object.keys(tables).length === 0 ? message : compressTransactionMessageUsingAddressLookupTables(message, tables);
37
+ const built = compileTransaction(compressed);
38
+ const signatures = Object.fromEntries(Object.keys(built.signatures).map((signer) => [signer, new Uint8Array(64)]));
39
+ return { ...built, signatures };
35
40
  }
36
- export async function unitsOf(transport, instructions, feePayer) {
37
- const simulation = await simulated(transport, instructions, feePayer);
41
+ export async function transactionBytes(transport, instructions, feePayer, tables) {
42
+ return getTransactionEncoder().encode(await compiled(transport, instructions, feePayer, tables)).length;
43
+ }
44
+ export async function simulated(transport, instructions, feePayer, tables) {
45
+ return transport.simulate(getBase64EncodedWireTransaction(await compiled(transport, instructions, feePayer, tables)));
46
+ }
47
+ export async function unitsOf(transport, instructions, feePayer, tables) {
48
+ const simulation = await simulated(transport, instructions, feePayer, tables);
38
49
  return simulation.err === null ? simulation.unitsConsumed : null;
39
50
  }
40
- export async function budgeted(transport, priority, instructions, feePayer) {
51
+ export async function budgeted(transport, priority, instructions, feePayer, tables) {
41
52
  if (instructions.some((ix) => ix.programAddress === COMPUTE_BUDGET_ADDRESS)) {
42
53
  return [...instructions];
43
54
  }
44
55
  const price = await priceOf(transport, priority, instructions);
45
56
  const head = price > 0n ? [computeUnitPrice(price)] : [];
46
- const consumed = await unitsOf(transport, [...instructions, computeUnitLimit(MAX_COMPUTE_UNITS), ...head], feePayer);
57
+ const trial = [...instructions, computeUnitLimit(MAX_COMPUTE_UNITS), ...head];
58
+ if ((await transactionBytes(transport, trial, feePayer, tables)) > PACKET_DATA_SIZE) {
59
+ return trial;
60
+ }
61
+ const consumed = await unitsOf(transport, trial, feePayer, tables);
47
62
  return [...instructions, computeUnitLimit(consumed === null ? MAX_COMPUTE_UNITS : headroom(consumed)), ...head];
48
63
  }
49
64
  export function withPriority(inner, priority) {
50
- const budget = (instructions, feePayer) => budgeted(inner, priority, instructions, feePayer);
65
+ const budget = (instructions, feePayer, tables) => budgeted(inner, priority, instructions, feePayer, tables);
51
66
  return {
52
- ...inner,
67
+ ...boundMembers(inner),
53
68
  budget,
54
69
  send: async (instructions, payer) => inner.send(await budget(instructions, payer.address), payer),
55
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oCAAoC,EACpC,wBAAwB,EACxB,+BAA+B,EAE/B,cAAc,EACd,0CAA0C,EAC1C,IAAI,EACJ,6BAA6B,EAC7B,2CAA2C,GAC5C,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK9H,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAW,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,IAAuB,EAAE,IAAY;IAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAoC;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,SAAoB,EAAE,QAAkB,EAAE,YAAoC;IAC1G,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAC1G,OAAO,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAoB,EACpB,YAAoC,EACpC,QAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAClB,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACxC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,QAAQ,EAAE,CAAC,CAAC,EACjD,CAAC,CAAC,EAAE,EAAE,CAAC,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,EAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,oCAAoC,CAAC,YAAY,EAAE,CAAC,CAAC,CAC7D,CAAC;IACF,OAAO,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CAAC,MAAM,0CAA0C,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAoB,EACpB,YAAoC,EACpC,QAAiB;IAEjB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACtE,OAAO,UAAU,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,SAAoB,EACpB,QAAkB,EAClB,YAAoC,EACpC,QAAiB;IAEjB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,KAAK,sBAAsB,CAAC,EAAE,CAAC;QAC5E,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,YAAY,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrH,OAAO,CAAC,GAAG,YAAY,EAAE,gBAAgB,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAgB,EAAE,QAAkB;IAC/D,MAAM,MAAM,GAAG,CAAC,YAAoC,EAAE,QAAiB,EAAE,EAAE,CACzE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpD,OAAO;QACL,GAAG,KAAK;QACR,MAAM;QACN,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;KAClG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Address } from "@solana/kit";
2
+ import type { ClientContext, CommitteeView, CreateCommitteeInput, CreatedCommittee } from "./client-types.js";
3
+ import type { Transport } from "./transport.js";
4
+ export declare function loadCommittee(transport: Transport, address: Address): Promise<CommitteeView | null>;
5
+ export declare function committeeSends({ transport, send }: ClientContext): {
6
+ createCommittee: (input: CreateCommitteeInput) => Promise<CreatedCommittee>;
7
+ committee: (address: Address) => Promise<CommitteeView | null>;
8
+ };
@@ -0,0 +1,34 @@
1
+ import { buildCreateCommittee, COMMITTEE_DISCRIMINATOR, committeeOf, getCommitteeDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, } from "@intent-engine/core";
2
+ import { createdAccount } from "./accounts.js";
3
+ export async function loadCommittee(transport, address) {
4
+ const view = await createdAccount(transport, address);
5
+ if (view === null ||
6
+ view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS ||
7
+ !COMMITTEE_DISCRIMINATOR.every((b, i) => view.data[i] === b)) {
8
+ return null;
9
+ }
10
+ const stored = getCommitteeDecoder().decode(view.data);
11
+ const members = stored.members.slice(0, stored.count);
12
+ const terms = { members, threshold: stored.threshold, feeWallet: stored.feeWallet };
13
+ const derived = await committeeOf(terms);
14
+ if (derived.address !== address) {
15
+ throw new Error(`${address} holds a committee whose contents address ${derived.address}`);
16
+ }
17
+ return { ...terms, address, id: derived.id, createdAt: stored.createdAt };
18
+ }
19
+ export function committeeSends({ transport, send }) {
20
+ const createCommittee = async (input) => {
21
+ const { committee, instruction } = await buildCreateCommittee({
22
+ payer: input.payer,
23
+ members: input.members,
24
+ threshold: input.threshold,
25
+ feeWallet: input.feeWallet,
26
+ });
27
+ if ((await loadCommittee(transport, committee.address)) !== null) {
28
+ return { committee: committee.address, signature: null };
29
+ }
30
+ return { committee: committee.address, signature: await send([instruction], input.payer) };
31
+ };
32
+ return { createCommittee, committee: (address) => loadCommittee(transport, address) };
33
+ }
34
+ //# sourceMappingURL=client-committee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-committee.js","sourceRoot":"","sources":["../../src/client-committee.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAoB,EAAE,OAAgB;IACxE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,IACE,IAAI,KAAK,IAAI;QACb,IAAI,CAAC,KAAK,KAAK,6BAA6B;QAC5C,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,6CAA6C,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAiB;IAC/D,MAAM,eAAe,GAAG,KAAK,EAAE,KAA2B,EAA6B,EAAE;QACvF,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC;YAC5D,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACjE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7F,CAAC,CAAC;IACF,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AACjG,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { Address } from "@solana/kit";
2
+ export declare class NoFreeNonce extends Error {
3
+ readonly owner: Address;
4
+ constructor(owner: Address);
5
+ }
6
+ export declare class NotSettleable extends Error {
7
+ readonly intent: Address;
8
+ constructor(intent: Address, reason: string);
9
+ }
10
+ export declare class NotFillable extends Error {
11
+ readonly intent: Address;
12
+ constructor(intent: Address, reason: string);
13
+ }
14
+ export declare class PayToNotWallet extends Error {
15
+ readonly payTo: Address;
16
+ readonly program: Address;
17
+ constructor(payTo: Address, program: Address);
18
+ }
19
+ export declare class PayeeMoved extends Error {
20
+ readonly payTo: Address;
21
+ readonly account: Address;
22
+ constructor(payTo: Address, account: Address);
23
+ }
24
+ export declare class EscrowExpired extends Error {
25
+ readonly intent: Address;
26
+ readonly expiresAt: bigint;
27
+ constructor(intent: Address, expiresAt: bigint);
28
+ }
29
+ export declare class VoteRejected extends Error {
30
+ readonly member: Address;
31
+ readonly intent: Address;
32
+ constructor(member: Address, intent: Address);
33
+ }
@@ -0,0 +1,65 @@
1
+ export class NoFreeNonce extends Error {
2
+ owner;
3
+ constructor(owner) {
4
+ super(`every nonce in the window of ${owner} is used; advance the nonce window first`);
5
+ this.name = "NoFreeNonce";
6
+ this.owner = owner;
7
+ }
8
+ }
9
+ export class NotSettleable extends Error {
10
+ intent;
11
+ constructor(intent, reason) {
12
+ super(`intent ${intent} ${reason}`);
13
+ this.name = "NotSettleable";
14
+ this.intent = intent;
15
+ }
16
+ }
17
+ export class NotFillable extends Error {
18
+ intent;
19
+ constructor(intent, reason) {
20
+ super(`intent ${intent} ${reason}`);
21
+ this.name = "NotFillable";
22
+ this.intent = intent;
23
+ }
24
+ }
25
+ export class PayToNotWallet extends Error {
26
+ payTo;
27
+ program;
28
+ constructor(payTo, program) {
29
+ super(`payTo ${payTo} belongs to the program ${program}, not to a wallet, so nothing paid to it could be spent; give a wallet address`);
30
+ this.name = "PayToNotWallet";
31
+ this.payTo = payTo;
32
+ this.program = program;
33
+ }
34
+ }
35
+ export class PayeeMoved extends Error {
36
+ payTo;
37
+ account;
38
+ constructor(payTo, account) {
39
+ super(`the token account ${account} of payTo ${payTo} is no longer held by ${payTo} for this mint, so a release to it would not reach ${payTo}`);
40
+ this.name = "PayeeMoved";
41
+ this.payTo = payTo;
42
+ this.account = account;
43
+ }
44
+ }
45
+ export class EscrowExpired extends Error {
46
+ intent;
47
+ expiresAt;
48
+ constructor(intent, expiresAt) {
49
+ super(`intent ${intent} expired at ${expiresAt}; its owner gets it back instead`);
50
+ this.name = "EscrowExpired";
51
+ this.intent = intent;
52
+ this.expiresAt = expiresAt;
53
+ }
54
+ }
55
+ export class VoteRejected extends Error {
56
+ member;
57
+ intent;
58
+ constructor(member, intent) {
59
+ super(`the vote of ${member} is not a valid committee signature over the release of ${intent}`);
60
+ this.name = "VoteRejected";
61
+ this.member = member;
62
+ this.intent = intent;
63
+ }
64
+ }
65
+ //# sourceMappingURL=client-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-errors.js","sourceRoot":"","sources":["../../src/client-errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,KAAK,CAAU;IAExB,YAAY,KAAc;QACxB,KAAK,CAAC,gCAAgC,KAAK,0CAA0C,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAU;IAEzB,YAAY,MAAe,EAAE,MAAc;QACzC,KAAK,CAAC,UAAU,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAU;IAEzB,YAAY,MAAe,EAAE,MAAc;QACzC,KAAK,CAAC,UAAU,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,KAAK,CAAU;IACf,OAAO,CAAU;IAE1B,YAAY,KAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,SAAS,KAAK,2BAA2B,OAAO,gFAAgF,CAAC,CAAC;QACxI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,KAAK,CAAU;IACf,OAAO,CAAU;IAE1B,YAAY,KAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,qBAAqB,OAAO,aAAa,KAAK,yBAAyB,KAAK,sDAAsD,KAAK,EAAE,CAAC,CAAC;QACjJ,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAU;IAChB,SAAS,CAAS;IAE3B,YAAY,MAAe,EAAE,SAAiB;QAC5C,KAAK,CAAC,UAAU,MAAM,eAAe,SAAS,kCAAkC,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,MAAM,CAAU;IAChB,MAAM,CAAU;IAEzB,YAAY,MAAe,EAAE,MAAe;QAC1C,KAAK,CAAC,eAAe,MAAM,2DAA2D,MAAM,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { Address, TransactionSigner } from "@solana/kit";
2
+ import { type NonceWindow } from "./accounts.js";
3
+ import { type ClientContext, type CreatedIntent, type CreateIntentInput, type FillInput } from "./client-types.js";
4
+ export declare function nonceAfter(owner: Address, user: NonceWindow | null): bigint;
5
+ export declare function intentSends({ transport, send, mint, config }: ClientContext): {
6
+ createIntent: (input: CreateIntentInput) => Promise<CreatedIntent>;
7
+ cancel: (signer: TransactionSigner, nonce: bigint) => Promise<import("@solana/kit").Signature>;
8
+ unwrap: (signer: TransactionSigner) => Promise<import("@solana/kit").Signature | null>;
9
+ fill: (input: FillInput) => Promise<import("@solana/kit").Signature>;
10
+ expire: (cranker: TransactionSigner, owner: Address, nonce: bigint) => Promise<import("@solana/kit").Signature>;
11
+ close: (cranker: TransactionSigner, owner: Address, nonce: bigint) => Promise<import("@solana/kit").Signature>;
12
+ };
@@ -0,0 +1,140 @@
1
+ import { buildCancelIntent, buildCloseIntent, buildCreateIntent, buildExpireIntent, buildFillIntent, decodeParams, escrowAmount, feeBpsFor, findAssociatedTokenAddress, findIntentPda, IntentStatus, Kind, NATIVE_MINT, nextFreeNonce, remainingOf, requiredOut, specMemo, splitFees, TOKEN_PROGRAM_ADDRESS, } from "@intent-engine/core";
2
+ import { getCloseAccountInstruction } from "@solana-program/token";
3
+ import { chainTime, createdAccount, loadIntent, loadUser, mintCapOf } from "./accounts.js";
4
+ import { NoFreeNonce, NotFillable } from "./client-errors.js";
5
+ import { DEFAULT_EXPIRES_IN, EXPIRES_IN_RANGE, MAX_EXPIRES_IN, MIN_EXPIRES_IN, SPEC_URL_NEEDS_PROOF, } from "./client-types.js";
6
+ import { memoInstruction, PLAIN_HTTP_ON_PUBLIC, plainHttpOnPublic } from "./jobs.js";
7
+ import { initUserIfMissing, tokenAccountIfMissing, wrapIfShort } from "./setup.js";
8
+ export function nonceAfter(owner, user) {
9
+ if (user === null) {
10
+ return 0n;
11
+ }
12
+ const next = nextFreeNonce(user);
13
+ if (next === null) {
14
+ throw new NoFreeNonce(owner);
15
+ }
16
+ return next;
17
+ }
18
+ export function intentSends({ transport, send, mint, config }) {
19
+ const createIntent = async (input) => {
20
+ const { signer, params, inputMint, outputMint } = input;
21
+ const owner = signer.address;
22
+ if (input.specUrl !== undefined && (params.kind !== Kind.AttestedResult || params.specHash.every((b) => b === 0))) {
23
+ throw new RangeError(SPEC_URL_NEEDS_PROOF);
24
+ }
25
+ if (input.expiresIn !== undefined && (input.expiresIn < MIN_EXPIRES_IN || input.expiresIn > MAX_EXPIRES_IN)) {
26
+ throw new RangeError(EXPIRES_IN_RANGE);
27
+ }
28
+ const published = input.specUrl === undefined ? [] : [memoInstruction(signer, specMemo(input.specUrl))];
29
+ if (input.specUrl !== undefined && (await plainHttpOnPublic(transport, input.specUrl))) {
30
+ throw new RangeError(`the spec url ${input.specUrl} ${PLAIN_HTTP_ON_PUBLIC}`);
31
+ }
32
+ const [settings, sell, buy, user, mintCap] = await Promise.all([
33
+ config(),
34
+ mint(inputMint),
35
+ mint(outputMint),
36
+ loadUser(transport, owner),
37
+ mintCapOf(transport, inputMint),
38
+ ]);
39
+ const nonce = input.nonce ?? nonceAfter(owner, user);
40
+ const expiresAt = input.expiresAt ?? (await chainTime(transport)) + (input.expiresIn ?? DEFAULT_EXPIRES_IN);
41
+ const recipient = input.receiver ?? owner;
42
+ const receiver = await tokenAccountIfMissing(transport, signer, recipient, outputMint, buy.tokenProgram);
43
+ const wrap = await wrapIfShort(transport, signer, inputMint, sell.tokenProgram, escrowAmount(params));
44
+ const create = await buildCreateIntent({
45
+ owner: signer,
46
+ treasury: settings.feeRecipient,
47
+ maxCreateFee: settings.createFee,
48
+ maxBounty: settings.crankBounty,
49
+ nonce,
50
+ params,
51
+ expiresAt,
52
+ inputMint,
53
+ outputMint,
54
+ inputTokenProgram: sell.tokenProgram,
55
+ outputTokenProgram: buy.tokenProgram,
56
+ ...(recipient === owner ? {} : { receiver: receiver.address, receiverAuthority: recipient }),
57
+ ...(mintCap === undefined ? {} : { mintCap }),
58
+ });
59
+ const register = await initUserIfMissing(user, signer);
60
+ const signature = await send([...register, ...receiver.create, ...wrap.instructions, create, ...published], signer);
61
+ const [intent] = await findIntentPda({ owner, nonce });
62
+ return { signature, intent, nonce };
63
+ };
64
+ const cancel = async (signer, nonce) => {
65
+ const { intent } = await loadIntent(transport, signer.address, nonce);
66
+ const { tokenProgram } = await mint(intent.inputMint);
67
+ const refund = await tokenAccountIfMissing(transport, signer, signer.address, intent.inputMint, tokenProgram);
68
+ return send([...refund.create, await buildCancelIntent({ owner: signer, nonce, inputMint: intent.inputMint, tokenProgram })], signer);
69
+ };
70
+ const unwrap = async (signer) => {
71
+ const account = await findAssociatedTokenAddress({ owner: signer.address, mint: NATIVE_MINT, tokenProgram: TOKEN_PROGRAM_ADDRESS });
72
+ if ((await createdAccount(transport, account)) === null) {
73
+ return null;
74
+ }
75
+ return send([getCloseAccountInstruction({ account, destination: signer.address, owner: signer })], signer);
76
+ };
77
+ const fill = async (input) => {
78
+ const { solver, owner, nonce } = input;
79
+ const [{ address, intent: held }, settings] = await Promise.all([loadIntent(transport, owner, nonce), config()]);
80
+ if (held.status !== IntentStatus.Open) {
81
+ throw new NotFillable(address, "is not open");
82
+ }
83
+ const params = decodeParams(held.kind, Uint8Array.from(held.params));
84
+ if (params.kind === Kind.AttestedResult) {
85
+ throw new NotFillable(address, "is an AttestedResult intent, which only its judge settles");
86
+ }
87
+ const [sell, buy] = await Promise.all([mint(held.inputMint), mint(held.outputMint)]);
88
+ const amountIn = input.amountIn ?? remainingOf(held);
89
+ const amountOut = input.amountOut ?? requiredOut(params, amountIn, await chainTime(transport));
90
+ const kindBps = feeBpsFor(settings, held.kind);
91
+ const shares = splitFees(amountIn, kindBps, held.partnerBps, held.partnerCutBps);
92
+ const feeRecipient = shares.protocol > 0n ? settings.feeRecipient : undefined;
93
+ const partner = shares.partner > 0n ? held.partner : undefined;
94
+ const agent = held.agentFee > 0n ? held.rentPayer : undefined;
95
+ const paid = (wallet) => tokenAccountIfMissing(transport, solver, wallet, held.inputMint, sell.tokenProgram);
96
+ const [solverInput, solverOutput, ...payouts] = await Promise.all([
97
+ paid(solver.address),
98
+ tokenAccountIfMissing(transport, solver, solver.address, held.outputMint, buy.tokenProgram),
99
+ ...[feeRecipient, partner, agent].filter((wallet) => wallet !== undefined).map(paid),
100
+ ]);
101
+ const filled = await buildFillIntent({
102
+ solver,
103
+ owner,
104
+ nonce,
105
+ inputMint: held.inputMint,
106
+ outputMint: held.outputMint,
107
+ inputTokenProgram: sell.tokenProgram,
108
+ outputTokenProgram: buy.tokenProgram,
109
+ receiver: held.receiver,
110
+ solverInput: solverInput.address,
111
+ solverOutput: solverOutput.address,
112
+ ...(feeRecipient === undefined ? {} : { feeRecipient }),
113
+ ...(partner === undefined ? {} : { partner }),
114
+ ...(agent === undefined ? {} : { agent }),
115
+ mandate: held.mandate,
116
+ amountIn,
117
+ amountOut,
118
+ maxFeeBps: kindBps + held.partnerBps,
119
+ });
120
+ const setup = [solverInput, solverOutput, ...payouts].flatMap(({ create }) => create);
121
+ const wrap = input.route === undefined ? (await wrapIfShort(transport, solver, held.outputMint, buy.tokenProgram, amountOut)).instructions : [];
122
+ return send([...setup, ...wrap, ...(input.route ?? []), filled], solver);
123
+ };
124
+ const settling = async (cranker, owner, nonce) => {
125
+ const { intent } = await loadIntent(transport, owner, nonce);
126
+ const { tokenProgram } = await mint(intent.inputMint);
127
+ return { ref: { cranker, owner, nonce, inputMint: intent.inputMint, tokenProgram }, rentPayer: intent.rentPayer };
128
+ };
129
+ const expire = async (cranker, owner, nonce) => {
130
+ const { ref } = await settling(cranker, owner, nonce);
131
+ const refund = await tokenAccountIfMissing(transport, cranker, owner, ref.inputMint, ref.tokenProgram);
132
+ return send([...refund.create, await buildExpireIntent(ref)], cranker);
133
+ };
134
+ const close = async (cranker, owner, nonce) => {
135
+ const { ref, rentPayer } = await settling(cranker, owner, nonce);
136
+ return send([await buildCloseIntent({ ...ref, rentPayer })], cranker);
137
+ };
138
+ return { createIntent, cancel, unwrap, fill, expire, close };
139
+ }
140
+ //# sourceMappingURL=client-intents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-intents.js","sourceRoot":"","sources":["../../src/client-intents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Address } from "@solana/kit";
2
+ import { type Balances, type ClientContext, type Fill, type HistoryEvent } from "./client-types.js";
3
+ export declare function clientReads({ transport, mint }: ClientContext): {
4
+ history: (intent: Address, limit?: number) => Promise<HistoryEvent[]>;
5
+ fillOf: (intent: Address) => Promise<Fill | null>;
6
+ balances: (owner: Address, mints: readonly Address[]) => Promise<Balances>;
7
+ };
@@ -0,0 +1,61 @@
1
+ import { decodeEvent, findAssociatedTokenAddress, tokenName } from "@intent-engine/core";
2
+ import { createdAccount, tokenAmountOf } from "./accounts.js";
3
+ import { HISTORY_LIMIT } from "./client-types.js";
4
+ import { createdAtOf, recordedDelivery, scan } from "./jobs.js";
5
+ const FILL_EVENTS = new Set(["IntentFilled", "FillEnded"]);
6
+ function eventsIn(transactions, intent) {
7
+ return transactions
8
+ .filter(({ failed }) => !failed)
9
+ .flatMap(({ signature, slot, blockTime, emitted }) => emitted
10
+ .map((data) => decodeEvent(data))
11
+ .filter((event) => event !== null && "intent" in event.fields && event.fields.intent === intent)
12
+ .reverse()
13
+ .map((event) => ({ ...event, signature: signature, slot, blockTime })));
14
+ }
15
+ const fillIn = (intent) => (transaction) => eventsIn([transaction], intent).some(({ name }) => FILL_EVENTS.has(name));
16
+ export function clientReads({ transport, mint }) {
17
+ const history = async (intent, limit = HISTORY_LIMIT) => {
18
+ const transactions = await transport.engineTransactions(limit, intent);
19
+ return eventsIn(transactions, intent).map((event) => {
20
+ if (event.name !== "IntentAttested" && event.name !== "IntentSplit") {
21
+ return event;
22
+ }
23
+ const release = transactions.find(({ signature }) => signature === event.signature);
24
+ const recorded = release === undefined ? null : recordedDelivery(transactions, release, event.fields.attestor);
25
+ return recorded === null ? event : { ...event, deliveredSha256: recorded };
26
+ });
27
+ };
28
+ const fillOf = async (intent) => {
29
+ const floor = await createdAtOf(transport, intent);
30
+ const events = eventsIn((await scan(transport, intent, { floor, until: fillIn(intent) })).transactions, intent);
31
+ for (const event of events) {
32
+ const { signature, slot, blockTime } = event;
33
+ if (event.name === "IntentFilled") {
34
+ const { solver, delivered, required, fee, net } = event.fields;
35
+ return { steps: 1, solver, delivered, required, fee, net, signature, slot, blockTime };
36
+ }
37
+ if (event.name === "FillEnded") {
38
+ const begun = events.find((other) => other.name === "FillBegun" && other.signature === signature);
39
+ if (begun?.name === "FillBegun") {
40
+ const { solver, delivered, required } = event.fields;
41
+ return { steps: 2, solver, delivered, required, fee: begun.fields.fee, net: begun.fields.net, signature, slot, blockTime };
42
+ }
43
+ }
44
+ }
45
+ return null;
46
+ };
47
+ const balances = async (owner, mints) => {
48
+ const [wallet, tokens] = await Promise.all([
49
+ transport.getAccount(owner),
50
+ Promise.all(mints.map(async (address) => {
51
+ const { decimals, tokenProgram } = await mint(address);
52
+ const account = await findAssociatedTokenAddress({ owner, mint: address, tokenProgram });
53
+ const amount = tokenAmountOf((await createdAccount(transport, account))?.data ?? null) ?? 0n;
54
+ return { mint: address, name: tokenName(address), account, amount, decimals };
55
+ })),
56
+ ]);
57
+ return { sol: wallet?.lamports ?? 0n, tokens };
58
+ };
59
+ return { history, fillOf, balances };
60
+ }
61
+ //# sourceMappingURL=client-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-reads.js","sourceRoot":"","sources":["../../src/client-reads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { BallotInput, ClientContext, CommitteeBallot, CommitteeRelease, SettleCommitteeInput, SettleProofInput } from "./client-types.js";
2
+ export declare function proofSettlement(context: ClientContext): (input: SettleProofInput) => Promise<import("@solana/kit").Signature>;
3
+ export declare function committeeSettlement(context: ClientContext): {
4
+ committeeBallot: (input: BallotInput) => Promise<CommitteeBallot>;
5
+ prepareCommitteeRelease: (input: SettleCommitteeInput) => Promise<CommitteeRelease>;
6
+ settleCommittee: (input: SettleCommitteeInput) => Promise<import("@solana/kit").Signature>;
7
+ };