@intent-engine/client 0.1.26 → 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 (47) 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/client-committee.d.ts +8 -0
  5. package/dist/src/client-committee.js +34 -0
  6. package/dist/src/client-committee.js.map +1 -0
  7. package/dist/src/client-errors.d.ts +5 -0
  8. package/dist/src/client-errors.js +10 -0
  9. package/dist/src/client-errors.js.map +1 -1
  10. package/dist/src/client-intents.js +9 -2
  11. package/dist/src/client-intents.js.map +1 -1
  12. package/dist/src/client-settle.d.ts +7 -2
  13. package/dist/src/client-settle.js +155 -59
  14. package/dist/src/client-settle.js.map +1 -1
  15. package/dist/src/client-types.d.ts +48 -1
  16. package/dist/src/client-types.js.map +1 -1
  17. package/dist/src/client.d.ts +3 -2
  18. package/dist/src/client.js +14 -2
  19. package/dist/src/client.js.map +1 -1
  20. package/dist/src/index.d.ts +2 -0
  21. package/dist/src/index.js +2 -0
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/job-memos.d.ts +2 -1
  24. package/dist/src/job-memos.js +18 -5
  25. package/dist/src/job-memos.js.map +1 -1
  26. package/dist/src/jobs.d.ts +1 -1
  27. package/dist/src/jobs.js +1 -1
  28. package/dist/src/jobs.js.map +1 -1
  29. package/dist/src/reputation.d.ts +53 -0
  30. package/dist/src/reputation.js +176 -0
  31. package/dist/src/reputation.js.map +1 -0
  32. package/dist/src/simple-orders.d.ts +24 -0
  33. package/dist/src/simple-orders.js +101 -0
  34. package/dist/src/simple-orders.js.map +1 -0
  35. package/dist/src/simple-tokens.d.ts +19 -0
  36. package/dist/src/simple-tokens.js +84 -0
  37. package/dist/src/simple-tokens.js.map +1 -0
  38. package/dist/src/simple-types.d.ts +111 -0
  39. package/dist/src/simple-types.js +2 -0
  40. package/dist/src/simple-types.js.map +1 -0
  41. package/dist/src/simple-work.d.ts +12 -0
  42. package/dist/src/simple-work.js +69 -0
  43. package/dist/src/simple-work.js.map +1 -0
  44. package/dist/src/simple.d.ts +6 -0
  45. package/dist/src/simple.js +53 -0
  46. package/dist/src/simple.js.map +1 -0
  47. package/package.json +3 -3
@@ -0,0 +1,84 @@
1
+ import { isAddress } from "@solana/kit";
2
+ import { DEVNET_TEST_MINT, formatAmount, NATIVE_MINT, parseAmount, tokenName } from "@intent-engine/core";
3
+ export const CLUSTER_URLS = {
4
+ devnet: "https://api.devnet.solana.com",
5
+ testnet: "https://api.testnet.solana.com",
6
+ mainnet: "https://api.mainnet-beta.solana.com",
7
+ localnet: "http://127.0.0.1:8899",
8
+ };
9
+ export const MAINNET_REFUSED = "this url serves mainnet; pass allowMainnet: true to connect to it";
10
+ export class MainnetNotAllowed extends Error {
11
+ url;
12
+ constructor(url) {
13
+ super(`${url}: ${MAINNET_REFUSED}`);
14
+ this.name = "MainnetNotAllowed";
15
+ this.url = url;
16
+ }
17
+ }
18
+ export function clusterUrl(options) {
19
+ if (options.url !== undefined && options.cluster !== undefined) {
20
+ throw new TypeError("pass cluster or url, not both");
21
+ }
22
+ if (options.url !== undefined) {
23
+ return options.url;
24
+ }
25
+ if (options.cluster === undefined || !(options.cluster in CLUSTER_URLS)) {
26
+ throw new TypeError(`pass url, or cluster as one of ${Object.keys(CLUSTER_URLS).join(", ")}`);
27
+ }
28
+ return CLUSTER_URLS[options.cluster];
29
+ }
30
+ export function mintOfToken(token, url) {
31
+ const name = token.trim();
32
+ if (name.toUpperCase() === "SOL") {
33
+ return NATIVE_MINT;
34
+ }
35
+ if (name.toUpperCase() === "TEST") {
36
+ if (url !== CLUSTER_URLS.devnet) {
37
+ throw new RangeError(`TEST names the devnet test token; on ${url} pass the token's mint address`);
38
+ }
39
+ return DEVNET_TEST_MINT;
40
+ }
41
+ if (!isAddress(name)) {
42
+ throw new RangeError(`${token} is not SOL, TEST or a token mint address`);
43
+ }
44
+ return name;
45
+ }
46
+ export const nameOfMint = (mint) => tokenName(mint) ?? mint;
47
+ export function tokenAmount(text, decimals, field = "amount") {
48
+ let raw;
49
+ try {
50
+ raw = parseAmount(text.trim(), decimals);
51
+ }
52
+ catch (error) {
53
+ throw new RangeError(`${field}: ${error instanceof Error ? error.message : String(error)}`);
54
+ }
55
+ if (raw === 0n) {
56
+ throw new RangeError(`${field}: ${text} must be more than 0`);
57
+ }
58
+ return raw;
59
+ }
60
+ export const wholeTokens = (raw, decimals, mint) => `${formatAmount(raw, decimals)} ${nameOfMint(mint)}`;
61
+ export function secondsOf(value, fallback) {
62
+ if (value === undefined) {
63
+ return fallback;
64
+ }
65
+ if (typeof value === "number" && !Number.isSafeInteger(value)) {
66
+ throw new RangeError(`expiresIn ${value} is not a whole number of seconds`);
67
+ }
68
+ return BigInt(value);
69
+ }
70
+ export function specHashBytes(specHash) {
71
+ if (typeof specHash !== "string") {
72
+ if (specHash.length !== 32) {
73
+ throw new RangeError("specHash must be 32 bytes");
74
+ }
75
+ return Uint8Array.from(specHash);
76
+ }
77
+ const hex = specHash.trim().toLowerCase();
78
+ if (!/^[0-9a-f]{64}$/.test(hex)) {
79
+ throw new RangeError("specHash must be a sha256 as 64 hex digits");
80
+ }
81
+ return Uint8Array.from(hex.match(/../g) ?? [], (pair) => Number.parseInt(pair, 16));
82
+ }
83
+ export const hexOf = (bytes) => Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
84
+ //# sourceMappingURL=simple-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-tokens.js","sourceRoot":"","sources":["../../src/simple-tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import type { Address, Instruction, Signature, TransactionSigner } from "@solana/kit";
2
+ import type { Priority } from "./budget.js";
3
+ import type { Client, WatchCallback, WatchOptions } from "./client-types.js";
4
+ import type { Job } from "./jobs.js";
5
+ import type { Cluster } from "./simple-tokens.js";
6
+ import type { Transport } from "./transport.js";
7
+ export type ConnectOptions = ({
8
+ cluster: Cluster;
9
+ url?: undefined;
10
+ } | {
11
+ url: string;
12
+ cluster?: undefined;
13
+ }) & {
14
+ signer: TransactionSigner;
15
+ transport?: Transport;
16
+ priority?: Priority;
17
+ allowMainnet?: boolean;
18
+ };
19
+ export type Sent = {
20
+ signature: Signature;
21
+ intent?: Address;
22
+ nonce?: bigint;
23
+ summary: string;
24
+ };
25
+ export type Preview = {
26
+ summary: string;
27
+ instructions: Instruction[];
28
+ intent?: Address;
29
+ nonce?: bigint;
30
+ };
31
+ export type PreviewOption = {
32
+ preview?: boolean;
33
+ };
34
+ export type Outcome<I> = I extends {
35
+ preview: true;
36
+ } ? Preview : Sent;
37
+ export type Seconds = number | bigint;
38
+ export type SwapInput = PreviewOption & {
39
+ sell: string;
40
+ amount: string;
41
+ buy: string;
42
+ minReceive: string;
43
+ expiresIn?: Seconds;
44
+ };
45
+ export type LimitInput = PreviewOption & {
46
+ sell: string;
47
+ amount: string;
48
+ buy: string;
49
+ price: string;
50
+ expiresIn?: Seconds;
51
+ };
52
+ export type PayForWorkInput = PreviewOption & {
53
+ amount: string;
54
+ token?: string;
55
+ judge: Address;
56
+ specHash: string | Uint8Array;
57
+ specUrl?: string;
58
+ judgeFee?: string;
59
+ expiresIn?: Seconds;
60
+ recordToken?: string;
61
+ };
62
+ export type DeliverWorkInput = PreviewOption & {
63
+ escrow: Address;
64
+ sha256: string;
65
+ url: string;
66
+ };
67
+ export type ReleaseInput = PreviewOption & {
68
+ escrow: Address;
69
+ to: Address;
70
+ deliveredSha256: string;
71
+ result?: number | bigint;
72
+ };
73
+ export type CancelInput = PreviewOption & ({
74
+ escrow: Address;
75
+ intent?: undefined;
76
+ } | {
77
+ intent: Address;
78
+ escrow?: undefined;
79
+ });
80
+ export type HeldToken = {
81
+ token: string;
82
+ mint: Address;
83
+ account: Address;
84
+ amount: string;
85
+ };
86
+ export type WalletBalance = {
87
+ sol: string;
88
+ tokens: HeldToken[];
89
+ summary: string;
90
+ };
91
+ export type OpenWork = Job & {
92
+ amount: string;
93
+ fee: string;
94
+ token: string;
95
+ };
96
+ export type SimpleClient = {
97
+ readonly url: string;
98
+ readonly signer: TransactionSigner;
99
+ readonly client: Client;
100
+ balance(tokens?: readonly string[]): Promise<WalletBalance>;
101
+ swap<I extends SwapInput>(input: I): Promise<Outcome<I>>;
102
+ limit<I extends LimitInput>(input: I): Promise<Outcome<I>>;
103
+ payForWork<I extends PayForWorkInput>(input: I): Promise<Outcome<I>>;
104
+ findWork(filter?: {
105
+ judge?: Address;
106
+ }): Promise<OpenWork[]>;
107
+ deliver<I extends DeliverWorkInput>(input: I): Promise<Outcome<I>>;
108
+ release<I extends ReleaseInput>(input: I): Promise<Outcome<I>>;
109
+ cancel<I extends CancelInput>(input: I): Promise<Outcome<I>>;
110
+ watch(onChange: WatchCallback, signal: AbortSignal, filter?: WatchOptions): Promise<void>;
111
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=simple-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-types.js","sourceRoot":"","sources":["../../src/simple-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { type Address } from "@solana/kit";
2
+ import { type SimpleContext } from "./simple-orders.js";
3
+ import type { CancelInput, DeliverWorkInput, OpenWork, ReleaseInput } from "./simple-types.js";
4
+ export declare const RELEASE_NEEDS_KEY_PAIR = "release signs the judge's verdict, so connect with a key pair signer";
5
+ export declare function workSends(ctx: SimpleContext): {
6
+ findWork: (filter?: {
7
+ judge?: Address;
8
+ }) => Promise<OpenWork[]>;
9
+ deliver: (input: DeliverWorkInput) => Promise<import("./simple-types.js").Preview | import("./simple-types.js").Sent>;
10
+ release: (input: ReleaseInput) => Promise<import("./simple-types.js").Preview | import("./simple-types.js").Sent>;
11
+ cancel: (input: CancelInput) => Promise<import("./simple-types.js").Preview | import("./simple-types.js").Sent>;
12
+ };
@@ -0,0 +1,69 @@
1
+ import { isKeyPairSigner } from "@solana/kit";
2
+ import { formatAmount, isSha256Hex } from "@intent-engine/core";
3
+ import { NotSettleable } from "./client-errors.js";
4
+ import { intentAt } from "./jobs.js";
5
+ import { outcome } from "./simple-orders.js";
6
+ import { nameOfMint, wholeTokens } from "./simple-tokens.js";
7
+ export const RELEASE_NEEDS_KEY_PAIR = "release signs the judge's verdict, so connect with a key pair signer";
8
+ export function workSends(ctx) {
9
+ const held = async (address) => {
10
+ const intent = await intentAt(ctx.client.transport, address);
11
+ if (intent === null) {
12
+ throw new NotSettleable(address, "is not an intent account of the engine");
13
+ }
14
+ return { intent, mint: await ctx.client.mint(intent.inputMint) };
15
+ };
16
+ const findWork = async (filter = {}) => {
17
+ const jobs = await ctx.client.jobs(filter.judge === undefined ? {} : { attestor: filter.judge });
18
+ return Promise.all(jobs.map(async (job) => {
19
+ const { decimals } = await ctx.client.mint(job.inputMint);
20
+ return { ...job, amount: formatAmount(job.sells, decimals), fee: formatAmount(job.judgeFee, decimals), token: nameOfMint(job.inputMint) };
21
+ }));
22
+ };
23
+ const deliver = async (input) => {
24
+ if (!isSha256Hex(input.sha256.trim().toLowerCase())) {
25
+ throw new RangeError("sha256 must be 64 hex digits");
26
+ }
27
+ const sha256 = input.sha256.trim().toLowerCase();
28
+ const summary = `Deliver work ${sha256} at ${input.url} for escrow ${input.escrow}`;
29
+ return outcome(ctx, input.preview, summary, async (client) => ({
30
+ signature: await client.deliver({ worker: ctx.signer, intent: input.escrow, sha256, url: input.url }),
31
+ }));
32
+ };
33
+ const release = async (input) => {
34
+ const judge = ctx.signer;
35
+ if (!isKeyPairSigner(judge)) {
36
+ throw new TypeError(RELEASE_NEEDS_KEY_PAIR);
37
+ }
38
+ const { intent, mint } = await held(input.escrow);
39
+ const result = BigInt(input.result ?? 1n);
40
+ const summary = `Release escrow ${input.escrow} holding ${wholeTokens(intent.escrowed - intent.filled, mint.decimals, intent.inputMint)} to ${input.to} for work ${input.deliveredSha256.toLowerCase()}`;
41
+ return outcome(ctx, input.preview, summary, async (client) => ({
42
+ signature: await client.settleProof({
43
+ judge,
44
+ owner: intent.owner,
45
+ nonce: intent.nonce,
46
+ payTo: input.to,
47
+ result,
48
+ deliveredSha256: input.deliveredSha256,
49
+ }),
50
+ intent: input.escrow,
51
+ nonce: intent.nonce,
52
+ }));
53
+ };
54
+ const cancel = async (input) => {
55
+ const address = input.escrow ?? input.intent;
56
+ const { intent, mint } = await held(address);
57
+ if (intent.owner !== ctx.signer.address) {
58
+ throw new RangeError(`intent ${address} belongs to ${intent.owner}, not to ${ctx.signer.address}`);
59
+ }
60
+ const summary = `Cancel ${address} and return ${wholeTokens(intent.escrowed - intent.filled, mint.decimals, intent.inputMint)} to ${ctx.signer.address}`;
61
+ return outcome(ctx, input.preview, summary, async (client) => ({
62
+ signature: await client.cancel(ctx.signer, intent.nonce),
63
+ intent: address,
64
+ nonce: intent.nonce,
65
+ }));
66
+ };
67
+ return { findWork, deliver, release, cancel };
68
+ }
69
+ //# sourceMappingURL=simple-work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-work.js","sourceRoot":"","sources":["../../src/simple-work.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ConnectOptions, SimpleClient } from "./simple-types.js";
2
+ export type { CancelInput, ConnectOptions, DeliverWorkInput, HeldToken, LimitInput, OpenWork, Outcome, PayForWorkInput, Preview, ReleaseInput, Seconds, Sent, SimpleClient, SwapInput, WalletBalance, } from "./simple-types.js";
3
+ export { ESCROW_EXPIRES_IN, PREVIEW_SIGNATURE, RECORD_TOKEN_NEEDED } from "./simple-orders.js";
4
+ export { RELEASE_NEEDS_KEY_PAIR } from "./simple-work.js";
5
+ export { type Cluster, CLUSTER_URLS, clusterUrl, MAINNET_REFUSED, MainnetNotAllowed, mintOfToken, tokenAmount, } from "./simple-tokens.js";
6
+ export declare function connect(options: ConnectOptions): Promise<SimpleClient>;
@@ -0,0 +1,53 @@
1
+ import { formatAmount, NATIVE_MINT } from "@intent-engine/core";
2
+ import { createClient } from "./client.js";
3
+ import { MAINNET_GENESIS_HASH } from "./jobs.js";
4
+ import { orderSends } from "./simple-orders.js";
5
+ import { CLUSTER_URLS, clusterUrl, MainnetNotAllowed, mintOfToken, nameOfMint, wholeTokens } from "./simple-tokens.js";
6
+ import { workSends } from "./simple-work.js";
7
+ export { ESCROW_EXPIRES_IN, PREVIEW_SIGNATURE, RECORD_TOKEN_NEEDED } from "./simple-orders.js";
8
+ export { RELEASE_NEEDS_KEY_PAIR } from "./simple-work.js";
9
+ export { CLUSTER_URLS, clusterUrl, MAINNET_REFUSED, MainnetNotAllowed, mintOfToken, tokenAmount, } from "./simple-tokens.js";
10
+ const SOL_DECIMALS = 9;
11
+ export async function connect(options) {
12
+ const url = clusterUrl(options);
13
+ const { signer } = options;
14
+ const clientOptions = {
15
+ url,
16
+ ...(options.transport === undefined ? {} : { transport: options.transport }),
17
+ ...(options.priority === undefined ? {} : { priority: options.priority }),
18
+ };
19
+ const client = createClient(clientOptions);
20
+ if (options.allowMainnet !== true && (await client.transport.genesisHash()) === MAINNET_GENESIS_HASH) {
21
+ throw new MainnetNotAllowed(url);
22
+ }
23
+ const ctx = { url, signer, client, options: clientOptions };
24
+ const { swap, limit, payForWork } = orderSends(ctx);
25
+ const { findWork, deliver, release, cancel } = workSends(ctx);
26
+ const balance = async (tokens) => {
27
+ const named = tokens ?? (url === CLUSTER_URLS.devnet ? ["SOL", "TEST"] : ["SOL"]);
28
+ const mints = [...new Set(named.map((token) => mintOfToken(token, url)))];
29
+ const { sol, tokens: held } = await client.balances(signer.address, mints);
30
+ const listed = held.map(({ mint, account, amount, decimals }) => ({
31
+ token: nameOfMint(mint),
32
+ mint,
33
+ account,
34
+ amount: formatAmount(amount, decimals),
35
+ }));
36
+ const summary = [
37
+ `${wholeTokens(sol, SOL_DECIMALS, NATIVE_MINT)} in ${signer.address}`,
38
+ ...held.map(({ mint, amount, decimals }) => `${wholeTokens(amount, decimals, mint)}${mint === NATIVE_MINT ? " wrapped" : ""}`),
39
+ ].join(", ");
40
+ return { sol: formatAmount(sol, SOL_DECIMALS), tokens: listed, summary };
41
+ };
42
+ const send = { swap, limit, payForWork, deliver, release, cancel };
43
+ return {
44
+ url,
45
+ signer,
46
+ client,
47
+ balance,
48
+ ...send,
49
+ findWork,
50
+ watch: (onChange, signal, filter = { owner: signer.address }) => client.watch(onChange, signal, filter),
51
+ };
52
+ }
53
+ //# sourceMappingURL=simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.js","sourceRoot":"","sources":["../../src/simple.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intent-engine/client",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "Runtime client for the intent engine on Solana: transport, confirmation, account readers and intent notifications",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -37,8 +37,8 @@
37
37
  "dependencies": {
38
38
  "@solana-program/system": "0.14.1",
39
39
  "@solana-program/token": "0.16.1",
40
- "@solana/kit": "^8.4.0",
41
- "@intent-engine/core": "0.1.26"
40
+ "@solana/kit": "8.4.0",
41
+ "@intent-engine/core": "0.1.27"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "litesvm": "^1.5.0"