@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
@@ -0,0 +1,40 @@
1
+ import type { Address } from "@solana/kit";
2
+ import { type Transport } from "./transport.js";
3
+ export declare const SPEC_SCAN = 10;
4
+ export declare const MAINNET_GENESIS_HASH = "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d";
5
+ export declare const DEVNET_GENESIS_HASH = "EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG";
6
+ export declare const TESTNET_GENESIS_HASH = "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsfY";
7
+ export declare const PUBLIC_GENESIS_HASHES: ReadonlySet<string>;
8
+ export declare const MAX_SPEC_BYTES = 1048576;
9
+ export declare const SPEC_TIMEOUT_MS = 10000;
10
+ export declare const PLAIN_HTTP_ON_PUBLIC = "is a plain http url, which a public cluster may not use";
11
+ export declare function plainHttpOnPublic(transport: Transport, url: string): Promise<boolean>;
12
+ export type Job = {
13
+ intent: Address;
14
+ owner: Address;
15
+ nonce: bigint;
16
+ attestor: Address;
17
+ specHash: string;
18
+ specUrl: string | null;
19
+ sells: bigint;
20
+ judgeFee: bigint;
21
+ inputMint: Address;
22
+ expiresAt: bigint;
23
+ };
24
+ export type Spec = {
25
+ url: string;
26
+ text: string;
27
+ sha256: string;
28
+ matches: boolean;
29
+ };
30
+ export type SpecFetch = (url: string, init: {
31
+ redirect: "error";
32
+ signal: AbortSignal;
33
+ }) => Promise<Response>;
34
+ export declare class SpecUnreadable extends Error {
35
+ readonly url: string;
36
+ constructor(url: string, reason: string);
37
+ }
38
+ export declare function specUrlOf(transport: Transport, intent: Address, createdAt?: bigint): Promise<string | null>;
39
+ export declare function jobsOf(transport: Transport, attestor?: Address): Promise<Job[]>;
40
+ export declare function readSpec(transport: Transport, get: SpecFetch, intent: Address): Promise<Spec | null>;
@@ -0,0 +1,107 @@
1
+ import { createHash } from "node:crypto";
2
+ import { parseSpecMemo, remainingOf, SPEC_MEMO_PREFIX } from "@intent-engine/core";
3
+ import { createdIn, hex, openProofEscrows, proofAt } from "./job-proofs.js";
4
+ import { MEMOS_PER_TRANSACTION, scan } from "./job-scan.js";
5
+ import { TRANSACTION_FETCHES } from "./transport.js";
6
+ export const SPEC_SCAN = 10;
7
+ export const MAINNET_GENESIS_HASH = "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d";
8
+ export const DEVNET_GENESIS_HASH = "EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG";
9
+ export const TESTNET_GENESIS_HASH = "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsfY";
10
+ export const PUBLIC_GENESIS_HASHES = new Set([MAINNET_GENESIS_HASH, DEVNET_GENESIS_HASH, TESTNET_GENESIS_HASH]);
11
+ export const MAX_SPEC_BYTES = 1_048_576;
12
+ export const SPEC_TIMEOUT_MS = 10_000;
13
+ export const PLAIN_HTTP_ON_PUBLIC = "is a plain http url, which a public cluster may not use";
14
+ export async function plainHttpOnPublic(transport, url) {
15
+ let protocol;
16
+ try {
17
+ protocol = new URL(url).protocol;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ return protocol === "http:" && PUBLIC_GENESIS_HASHES.has(await transport.genesisHash());
23
+ }
24
+ export class SpecUnreadable extends Error {
25
+ url;
26
+ constructor(url, reason) {
27
+ super(`the spec at ${url} ${reason}`);
28
+ this.name = "SpecUnreadable";
29
+ this.url = url;
30
+ }
31
+ }
32
+ export async function specUrlOf(transport, intent, createdAt) {
33
+ const floor = createdAt ?? (await proofAt(transport, intent))?.intent.createdAt ?? null;
34
+ const created = (transaction) => !transaction.failed && createdIn(transaction.emitted, intent);
35
+ const { transactions } = await scan(transport, intent, { floor, memo: SPEC_MEMO_PREFIX, until: created });
36
+ const tx = transactions.find(created);
37
+ if (tx === undefined) {
38
+ return null;
39
+ }
40
+ const urls = new Set((tx.memos ?? [])
41
+ .slice(0, MEMOS_PER_TRANSACTION)
42
+ .map(parseSpecMemo)
43
+ .flatMap((memo) => (memo === null ? [] : [memo.url])));
44
+ return urls.size === 1 ? ([...urls][0] ?? null) : null;
45
+ }
46
+ export async function jobsOf(transport, attestor) {
47
+ const proofs = await openProofEscrows(transport, attestor);
48
+ const urls = [];
49
+ for (let at = 0; at < proofs.length; at += TRANSACTION_FETCHES) {
50
+ urls.push(...(await Promise.all(proofs.slice(at, at + TRANSACTION_FETCHES).map(({ address, intent }) => specUrlOf(transport, address, intent.createdAt)))));
51
+ }
52
+ return proofs.map(({ address, intent, params }, i) => ({
53
+ intent: address,
54
+ owner: intent.owner,
55
+ nonce: intent.nonce,
56
+ attestor: params.attestor,
57
+ specHash: hex(params.specHash),
58
+ specUrl: urls[i] ?? null,
59
+ sells: remainingOf(intent),
60
+ judgeFee: params.judgeFee,
61
+ inputMint: intent.inputMint,
62
+ expiresAt: intent.expiresAt,
63
+ }));
64
+ }
65
+ async function discarded(response) {
66
+ await response.body?.cancel().catch(() => undefined);
67
+ }
68
+ async function bounded(response, url) {
69
+ if (!response.ok) {
70
+ await discarded(response);
71
+ throw new SpecUnreadable(url, `answered ${response.status}`);
72
+ }
73
+ const declared = Number(response.headers.get("content-length") ?? "0");
74
+ if (declared > MAX_SPEC_BYTES) {
75
+ await discarded(response);
76
+ throw new SpecUnreadable(url, `is larger than ${MAX_SPEC_BYTES} bytes`);
77
+ }
78
+ const reader = response.body?.getReader();
79
+ const chunks = [];
80
+ let size = 0;
81
+ for (let next = await reader?.read(); next !== undefined && next.done !== true; next = await reader?.read()) {
82
+ size += next.value.length;
83
+ if (size > MAX_SPEC_BYTES) {
84
+ await reader?.cancel();
85
+ throw new SpecUnreadable(url, `is larger than ${MAX_SPEC_BYTES} bytes`);
86
+ }
87
+ chunks.push(next.value);
88
+ }
89
+ return Buffer.concat(chunks);
90
+ }
91
+ export async function readSpec(transport, get, intent) {
92
+ const proof = await proofAt(transport, intent);
93
+ if (proof === null) {
94
+ return null;
95
+ }
96
+ const url = await specUrlOf(transport, intent, proof.intent.createdAt);
97
+ if (url === null) {
98
+ return null;
99
+ }
100
+ if (await plainHttpOnPublic(transport, url)) {
101
+ throw new SpecUnreadable(url, PLAIN_HTTP_ON_PUBLIC);
102
+ }
103
+ const bytes = await bounded(await get(url, { redirect: "error", signal: AbortSignal.timeout(SPEC_TIMEOUT_MS) }), url);
104
+ const sha256 = createHash("sha256").update(bytes).digest("hex");
105
+ return { url, text: new TextDecoder().decode(bytes), sha256, matches: sha256 === hex(proof.params.specHash) };
106
+ }
107
+ //# sourceMappingURL=job-specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-specs.js","sourceRoot":"","sources":["../../src/job-specs.ts"],"names":[],"mappings":"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"}
@@ -1,77 +1,6 @@
1
- import { type Address, type Instruction, type Signature, type TransactionSigner } from "@solana/kit";
2
- import { type AttestedResultParams, type Intent } from "@intent-engine/core";
3
- import { type Transport } from "./transport.js";
4
- export declare const JOBS_LIMIT = 50;
5
- export declare const SPEC_SCAN = 10;
6
- export declare const DELIVERY_SCAN = 100;
7
- export declare const MEMOS_PER_TRANSACTION = 8;
8
- export declare const MAX_SPEC_BYTES = 1048576;
9
- export declare const SPEC_TIMEOUT_MS = 10000;
10
- export type Job = {
11
- intent: Address;
12
- owner: Address;
13
- nonce: bigint;
14
- attestor: Address;
15
- specHash: string;
16
- specUrl: string | null;
17
- sells: bigint;
18
- judgeFee: bigint;
19
- inputMint: Address;
20
- expiresAt: bigint;
21
- };
22
- export type Spec = {
23
- url: string;
24
- text: string;
25
- sha256: string;
26
- matches: boolean;
27
- };
28
- export type DeliverInput = {
29
- worker: TransactionSigner;
30
- intent: Address;
31
- sha256: string;
32
- url: string;
33
- };
34
- export type Delivery = {
35
- intent: Address;
36
- worker: Address;
37
- sha256: string;
38
- url: string;
39
- signature: Signature;
40
- slot: bigint;
41
- blockTime: bigint | null;
42
- };
43
- export type Announcement = {
44
- sha256: string;
45
- first: Delivery;
46
- copies: number;
47
- };
48
- export type SpecFetch = (url: string, init: {
49
- redirect: "error";
50
- signal: AbortSignal;
51
- }) => Promise<Response>;
52
- export declare class NotDeliverable extends Error {
53
- readonly intent: Address;
54
- constructor(intent: Address, reason: string);
55
- }
56
- export declare class SpecUnreadable extends Error {
57
- readonly url: string;
58
- constructor(url: string, reason: string);
59
- }
60
- type Proof = {
61
- address: Address;
62
- intent: Intent;
63
- params: AttestedResultParams;
64
- };
65
- export declare function openProofEscrows(transport: Transport, attestor?: Address): Promise<Proof[]>;
66
- export declare function specUrlOf(transport: Transport, intent: Address): Promise<string | null>;
67
- export declare function jobsOf(transport: Transport, attestor?: Address): Promise<Job[]>;
68
- export declare function readSpec(transport: Transport, get: SpecFetch, intent: Address): Promise<Spec | null>;
69
- export declare function memoInstruction(signer: TransactionSigner, text: string): Instruction;
70
- export declare function deliveryInstructions(transport: Transport, input: DeliverInput): Promise<{
71
- attestor: Address;
72
- instructions: Instruction[];
73
- }>;
74
- export declare function deliveriesOf(transport: Transport, judge: Address, intent?: Address): Promise<Delivery[]>;
75
- export declare function firstDelivery(deliveries: readonly Delivery[], sha256: string): Delivery | null;
76
- export declare function announcements(deliveries: readonly Delivery[]): Announcement[];
77
- export {};
1
+ export { DELIVERY_PAGES, DELIVERY_SCAN, MEMOS_PER_TRANSACTION, type Scan, scan, type ScanOptions, SIGNATURE_PAGE, transactionAt, } from "./job-scan.js";
2
+ export { createdAtOf, creationSlotOf, historyCovers, intentAt, JOBS_LIMIT, openProofEscrows } from "./job-proofs.js";
3
+ export { DEVNET_GENESIS_HASH, type Job, jobsOf, MAINNET_GENESIS_HASH, MAX_SPEC_BYTES, PLAIN_HTTP_ON_PUBLIC, plainHttpOnPublic, PUBLIC_GENESIS_HASHES, readSpec, type Spec, type SpecFetch, SPEC_SCAN, SPEC_TIMEOUT_MS, SpecUnreadable, specUrlOf, TESTNET_GENESIS_HASH, } from "./job-specs.js";
4
+ export { type FollowUp, followUpInstructions, followUpMemo, followUpOf, memoInstruction, memosSignedBy, parseFollowUpMemo, recordedDelivery, releaseSigners, RELEASE_MARK, } from "./job-memos.js";
5
+ export { type Announcement, announcements, type DeliverInput, deliveriesOf, type Delivery, deliveryInstructions, deliveryRecord, type DeliveryRecord, firstDelivery, NotDeliverable, } from "./job-deliveries.js";
6
+ export { creationProof, type EngineCall, engineCalls, escrowOrigin, type EscrowOrigin, type EscrowProof, type Lifecycle, lifecycleDeliveries, originDeliveries, } from "./job-origins.js";
package/dist/src/jobs.js CHANGED
@@ -1,187 +1,7 @@
1
- import { createHash } from "node:crypto";
2
- import { AccountRole } from "@solana/kit";
3
- import { getTransferSolInstruction } from "@solana-program/system";
4
- import { decodeEvent, decodeParams, deliveryMemo, getIntentDecoder, getIntentDiscriminatorBytes, getIntentSize, INTENT_ENGINE_PROGRAM_ADDRESS, IntentStatus, Kind, DELIVERY_MEMO_PREFIX, parseDeliveryMemo, parseSpecMemo, remainingOf, SPEC_MEMO_PREFIX, } from "@intent-engine/core";
5
- import { chainTime, createdAccount } from "./accounts.js";
6
- import { MEMO_PROGRAM_ADDRESS, TRANSACTION_FETCHES } from "./transport.js";
7
- export const JOBS_LIMIT = 50;
8
- export const SPEC_SCAN = 10;
9
- export const DELIVERY_SCAN = 100;
10
- export const MEMOS_PER_TRANSACTION = 8;
11
- export const MAX_SPEC_BYTES = 1_048_576;
12
- export const SPEC_TIMEOUT_MS = 10_000;
13
- export class NotDeliverable extends Error {
14
- intent;
15
- constructor(intent, reason) {
16
- super(`intent ${intent} ${reason}`);
17
- this.name = "NotDeliverable";
18
- this.intent = intent;
19
- }
20
- }
21
- export class SpecUnreadable extends Error {
22
- url;
23
- constructor(url, reason) {
24
- super(`the spec at ${url} ${reason}`);
25
- this.name = "SpecUnreadable";
26
- this.url = url;
27
- }
28
- }
29
- const hex = (bytes) => Buffer.from(bytes).toString("hex");
30
- function proofOf(address, intent) {
31
- const params = decodeParams(intent.kind, Uint8Array.from(intent.params));
32
- return params.kind === Kind.AttestedResult && params.specHash.some((b) => b !== 0) ? { address, intent, params } : null;
33
- }
34
- async function proofAt(transport, address) {
35
- const view = await createdAccount(transport, address);
36
- const tag = getIntentDiscriminatorBytes();
37
- if (view === null || view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS || view.data.length !== getIntentSize() || !tag.every((b, i) => view.data[i] === b)) {
38
- return null;
39
- }
40
- return proofOf(address, getIntentDecoder().decode(view.data));
41
- }
42
- export async function openProofEscrows(transport, attestor) {
43
- const [accounts, now] = await Promise.all([transport.intents(), chainTime(transport)]);
44
- return accounts
45
- .map(({ address, data }) => proofOf(address, getIntentDecoder().decode(data)))
46
- .filter((proof) => proof !== null &&
47
- proof.intent.status === IntentStatus.Open &&
48
- proof.intent.expiresAt > now &&
49
- (attestor === undefined || proof.params.attestor === attestor))
50
- .sort((a, b) => (a.intent.expiresAt === b.intent.expiresAt ? 0 : a.intent.expiresAt > b.intent.expiresAt ? -1 : 1))
51
- .slice(0, JOBS_LIMIT);
52
- }
53
- const createdIn = (emitted, intent) => emitted.some((data) => {
54
- const event = decodeEvent(data);
55
- return event?.name === "IntentCreated" && "intent" in event.fields && event.fields.intent === intent;
56
- });
57
- export async function specUrlOf(transport, intent) {
58
- for (const tx of await transport.engineTransactions(SPEC_SCAN, intent, SPEC_MEMO_PREFIX)) {
59
- if (tx.failed || !createdIn(tx.emitted, intent)) {
60
- continue;
61
- }
62
- const urls = new Set((tx.memos ?? [])
63
- .slice(0, MEMOS_PER_TRANSACTION)
64
- .map(parseSpecMemo)
65
- .flatMap((memo) => (memo === null ? [] : [memo.url])));
66
- return urls.size === 1 ? ([...urls][0] ?? null) : null;
67
- }
68
- return null;
69
- }
70
- export async function jobsOf(transport, attestor) {
71
- const proofs = await openProofEscrows(transport, attestor);
72
- const urls = [];
73
- for (let at = 0; at < proofs.length; at += TRANSACTION_FETCHES) {
74
- urls.push(...(await Promise.all(proofs.slice(at, at + TRANSACTION_FETCHES).map(({ address }) => specUrlOf(transport, address)))));
75
- }
76
- return proofs.map(({ address, intent, params }, i) => ({
77
- intent: address,
78
- owner: intent.owner,
79
- nonce: intent.nonce,
80
- attestor: params.attestor,
81
- specHash: hex(params.specHash),
82
- specUrl: urls[i] ?? null,
83
- sells: remainingOf(intent),
84
- judgeFee: params.judgeFee,
85
- inputMint: intent.inputMint,
86
- expiresAt: intent.expiresAt,
87
- }));
88
- }
89
- async function bounded(response, url) {
90
- if (!response.ok) {
91
- throw new SpecUnreadable(url, `answered ${response.status}`);
92
- }
93
- const declared = Number(response.headers.get("content-length") ?? "0");
94
- if (declared > MAX_SPEC_BYTES) {
95
- throw new SpecUnreadable(url, `is larger than ${MAX_SPEC_BYTES} bytes`);
96
- }
97
- const reader = response.body?.getReader();
98
- const chunks = [];
99
- let size = 0;
100
- for (let next = await reader?.read(); next !== undefined && next.done !== true; next = await reader?.read()) {
101
- size += next.value.length;
102
- if (size > MAX_SPEC_BYTES) {
103
- await reader?.cancel();
104
- throw new SpecUnreadable(url, `is larger than ${MAX_SPEC_BYTES} bytes`);
105
- }
106
- chunks.push(next.value);
107
- }
108
- return Buffer.concat(chunks);
109
- }
110
- export async function readSpec(transport, get, intent) {
111
- const proof = await proofAt(transport, intent);
112
- if (proof === null) {
113
- return null;
114
- }
115
- const url = await specUrlOf(transport, intent);
116
- if (url === null) {
117
- return null;
118
- }
119
- const bytes = await bounded(await get(url, { redirect: "error", signal: AbortSignal.timeout(SPEC_TIMEOUT_MS) }), url);
120
- const sha256 = createHash("sha256").update(bytes).digest("hex");
121
- return { url, text: new TextDecoder().decode(bytes), sha256, matches: sha256 === hex(proof.params.specHash) };
122
- }
123
- export function memoInstruction(signer, text) {
124
- const meta = { address: signer.address, role: AccountRole.READONLY_SIGNER, signer };
125
- return { programAddress: MEMO_PROGRAM_ADDRESS, accounts: [meta], data: new TextEncoder().encode(text) };
126
- }
127
- export async function deliveryInstructions(transport, input) {
128
- const { worker, intent } = input;
129
- const memo = deliveryMemo({ intent, sha256: input.sha256, url: input.url });
130
- const [proof, now] = await Promise.all([proofAt(transport, intent), chainTime(transport)]);
131
- if (proof === null) {
132
- throw new NotDeliverable(intent, "is not a proof escrow: an AttestedResult intent that commits a spec hash");
133
- }
134
- if (proof.intent.status !== IntentStatus.Open || proof.intent.expiresAt <= now) {
135
- throw new NotDeliverable(intent, "is no longer open");
136
- }
137
- const attestor = proof.params.attestor;
138
- return {
139
- attestor,
140
- instructions: [memoInstruction(worker, memo), getTransferSolInstruction({ source: worker, destination: attestor, amount: 0n })],
141
- };
142
- }
143
- export async function deliveriesOf(transport, judge, intent) {
144
- let judged;
145
- if (intent === undefined) {
146
- judged = new Set((await openProofEscrows(transport, judge)).map(({ address }) => address));
147
- }
148
- else {
149
- const proof = await proofAt(transport, intent);
150
- judged = new Set(proof !== null && proof.params.attestor === judge ? [intent] : []);
151
- }
152
- if (judged.size === 0) {
153
- return [];
154
- }
155
- return (await transport.engineTransactions(DELIVERY_SCAN, judge, DELIVERY_MEMO_PREFIX)).flatMap(({ signature, slot, blockTime, failed, memos, feePayer }) => failed || feePayer === undefined
156
- ? []
157
- : (memos ?? [])
158
- .slice(0, MEMOS_PER_TRANSACTION)
159
- .map(parseDeliveryMemo)
160
- .flatMap((memo) => memo === null || !judged.has(memo.intent)
161
- ? []
162
- : [{ ...memo, worker: feePayer, signature: signature, slot, blockTime }]));
163
- }
164
- const earlier = (a, b) => a.slot < b.slot || (a.slot === b.slot && a.signature < b.signature);
165
- export function firstDelivery(deliveries, sha256) {
166
- let first = null;
167
- for (const delivery of deliveries) {
168
- if (delivery.sha256 === sha256 && (first === null || earlier(delivery, first))) {
169
- first = delivery;
170
- }
171
- }
172
- return first;
173
- }
174
- export function announcements(deliveries) {
175
- const hashes = [...new Set(deliveries.map(({ sha256 }) => sha256))];
176
- return hashes
177
- .flatMap((sha256) => {
178
- const first = firstDelivery(deliveries, sha256);
179
- if (first === null) {
180
- return [];
181
- }
182
- const others = new Set(deliveries.filter((d) => d.sha256 === sha256 && d.worker !== first.worker).map(({ worker }) => worker));
183
- return [{ sha256, first, copies: others.size }];
184
- })
185
- .sort((a, b) => (earlier(a.first, b.first) ? -1 : earlier(b.first, a.first) ? 1 : 0));
186
- }
1
+ export { DELIVERY_PAGES, DELIVERY_SCAN, MEMOS_PER_TRANSACTION, scan, SIGNATURE_PAGE, transactionAt, } from "./job-scan.js";
2
+ export { createdAtOf, creationSlotOf, historyCovers, intentAt, JOBS_LIMIT, openProofEscrows } from "./job-proofs.js";
3
+ export { DEVNET_GENESIS_HASH, jobsOf, MAINNET_GENESIS_HASH, MAX_SPEC_BYTES, PLAIN_HTTP_ON_PUBLIC, plainHttpOnPublic, PUBLIC_GENESIS_HASHES, readSpec, SPEC_SCAN, SPEC_TIMEOUT_MS, SpecUnreadable, specUrlOf, TESTNET_GENESIS_HASH, } from "./job-specs.js";
4
+ export { followUpInstructions, followUpMemo, followUpOf, memoInstruction, memosSignedBy, parseFollowUpMemo, recordedDelivery, releaseSigners, RELEASE_MARK, } from "./job-memos.js";
5
+ export { announcements, deliveriesOf, deliveryInstructions, deliveryRecord, firstDelivery, NotDeliverable, } from "./job-deliveries.js";
6
+ export { creationProof, engineCalls, escrowOrigin, lifecycleDeliveries, originDeliveries, } from "./job-origins.js";
187
7
  //# sourceMappingURL=jobs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,EACb,qBAAqB,EAErB,IAAI,EAEJ,cAAc,EACd,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrH,OAAO,EACL,mBAAmB,EAEnB,MAAM,EACN,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,QAAQ,EAGR,SAAS,EACT,eAAe,EACf,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,aAAa,EAEb,YAAY,EAEZ,oBAAoB,EACpB,cAAc,EAEd,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EAEb,WAAW,EACX,YAAY,EAIZ,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Transport } from "./rpc-shapes.js";
2
+ export declare function boundMembers<T extends object>(inner: T): T;
3
+ export declare const unmemoized: (transport: Transport) => Transport;
4
+ export declare function memoized(inner: Transport): Transport;
@@ -0,0 +1,66 @@
1
+ export function boundMembers(inner) {
2
+ const members = {};
3
+ for (let at = inner; at !== null && at !== Object.prototype; at = Object.getPrototypeOf(at)) {
4
+ for (const key of Reflect.ownKeys(at)) {
5
+ if (key === "constructor" || Object.prototype.hasOwnProperty.call(members, key)) {
6
+ continue;
7
+ }
8
+ const value = Reflect.get(inner, key);
9
+ members[key] = typeof value === "function" ? value.bind(inner) : value;
10
+ }
11
+ }
12
+ return members;
13
+ }
14
+ const MEMOIZED = Symbol("memoized");
15
+ const UNDERLYING = Symbol("underlying");
16
+ export const unmemoized = (transport) => transport[UNDERLYING] ?? transport;
17
+ export function memoized(inner) {
18
+ if (inner[MEMOIZED] === true) {
19
+ return inner;
20
+ }
21
+ const members = boundMembers(inner);
22
+ const seen = new Map();
23
+ const keep = (address, pending) => {
24
+ seen.set(address, pending);
25
+ pending.catch(() => {
26
+ if (seen.get(address) === pending) {
27
+ seen.delete(address);
28
+ }
29
+ });
30
+ return pending;
31
+ };
32
+ const getAccount = (address) => seen.get(address) ?? keep(address, members.getAccount(address));
33
+ const warm = async (addresses) => {
34
+ const missing = [...new Set(addresses)].filter((address) => !seen.has(address));
35
+ if (missing.length === 0) {
36
+ return;
37
+ }
38
+ const fetched = members.getAccounts(missing);
39
+ missing.forEach((address, i) => keep(address, fetched.then((views) => views[i] ?? null)));
40
+ await fetched;
41
+ };
42
+ const writing = (write) => async (...args) => {
43
+ try {
44
+ return await write(...args);
45
+ }
46
+ finally {
47
+ seen.clear();
48
+ }
49
+ };
50
+ return {
51
+ ...members,
52
+ [MEMOIZED]: true,
53
+ [UNDERLYING]: inner,
54
+ getAccount,
55
+ send: writing(members.send),
56
+ sendWire: writing(members.sendWire),
57
+ submitWire: writing(members.submitWire),
58
+ airdrop: writing(members.airdrop),
59
+ getAccounts: async (addresses) => {
60
+ await warm(addresses);
61
+ return Promise.all(addresses.map(getAccount));
62
+ },
63
+ warm,
64
+ };
65
+ }
66
+ //# sourceMappingURL=memoized-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoized-transport.js","sourceRoot":"","sources":["../../src/memoized-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { Address, Instruction, Signature, TransactionSigner } from "@solana/kit";
2
+ import type { Transport } from "./transport.js";
3
+ export type WorkOutcome = "paid" | "paid-other" | "refunded" | "open" | "unknown";
4
+ export type WorkRecord = {
5
+ intent: Address;
6
+ sha256: string;
7
+ announced: Signature;
8
+ slot: bigint;
9
+ blockTime: bigint | null;
10
+ outcome: WorkOutcome;
11
+ owner?: Address;
12
+ attestor?: Address;
13
+ committee?: Address[];
14
+ mint?: Address;
15
+ earned?: bigint;
16
+ release?: Signature;
17
+ selfDealt: boolean;
18
+ feedback?: number;
19
+ };
20
+ export type Earned = {
21
+ mint: Address;
22
+ amount: bigint;
23
+ };
24
+ export type Reputation = {
25
+ wallet: Address;
26
+ complete: boolean;
27
+ announced: number;
28
+ paid: number;
29
+ selfDealt: number;
30
+ payers: number;
31
+ judges: number;
32
+ committeeJudged: number;
33
+ earned: Earned[];
34
+ feedback: {
35
+ count: number;
36
+ average: number | null;
37
+ };
38
+ first: bigint | null;
39
+ last: bigint | null;
40
+ records: WorkRecord[];
41
+ };
42
+ export type ReputationOptions = {
43
+ pages?: number;
44
+ history?: number;
45
+ };
46
+ export declare function reputationOf(transport: Transport, wallet: Address, options?: ReputationOptions): Promise<Reputation>;
47
+ export type FeedbackInput = {
48
+ owner: TransactionSigner;
49
+ intent: Address;
50
+ score: number;
51
+ note?: string;
52
+ };
53
+ export declare function feedbackInstructions(transport: Transport, input: FeedbackInput, history?: number): Promise<Instruction[]>;