@intent-engine/client 0.1.41 → 0.1.43

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 (84) hide show
  1. package/dist/src/accounts.d.ts +13 -2
  2. package/dist/src/accounts.js +25 -8
  3. package/dist/src/accounts.js.map +1 -1
  4. package/dist/src/client-claims.d.ts +21 -1
  5. package/dist/src/client-claims.js +32 -4
  6. package/dist/src/client-claims.js.map +1 -1
  7. package/dist/src/client-committee.d.ts +4 -0
  8. package/dist/src/client-committee.js +14 -2
  9. package/dist/src/client-committee.js.map +1 -1
  10. package/dist/src/client-errors.d.ts +6 -0
  11. package/dist/src/client-errors.js +13 -0
  12. package/dist/src/client-errors.js.map +1 -1
  13. package/dist/src/client-intents.js +8 -4
  14. package/dist/src/client-intents.js.map +1 -1
  15. package/dist/src/client-reads.js +3 -3
  16. package/dist/src/client-reads.js.map +1 -1
  17. package/dist/src/client-settle.d.ts +5 -1
  18. package/dist/src/client-settle.js +41 -10
  19. package/dist/src/client-settle.js.map +1 -1
  20. package/dist/src/client-types.d.ts +18 -4
  21. package/dist/src/client-types.js.map +1 -1
  22. package/dist/src/client.d.ts +5 -4
  23. package/dist/src/client.js +9 -5
  24. package/dist/src/client.js.map +1 -1
  25. package/dist/src/confirm-release.d.ts +6 -2
  26. package/dist/src/confirm-release.js +19 -4
  27. package/dist/src/confirm-release.js.map +1 -1
  28. package/dist/src/delivery-openings.d.ts +84 -0
  29. package/dist/src/delivery-openings.js +162 -0
  30. package/dist/src/delivery-openings.js.map +1 -0
  31. package/dist/src/funding.js +16 -12
  32. package/dist/src/funding.js.map +1 -1
  33. package/dist/src/index.d.ts +1 -0
  34. package/dist/src/index.js +1 -0
  35. package/dist/src/index.js.map +1 -1
  36. package/dist/src/job-deliveries.d.ts +49 -5
  37. package/dist/src/job-deliveries.js +128 -21
  38. package/dist/src/job-deliveries.js.map +1 -1
  39. package/dist/src/job-memos.d.ts +5 -2
  40. package/dist/src/job-memos.js +16 -12
  41. package/dist/src/job-memos.js.map +1 -1
  42. package/dist/src/job-origins.d.ts +2 -2
  43. package/dist/src/job-origins.js +2 -2
  44. package/dist/src/job-origins.js.map +1 -1
  45. package/dist/src/job-pay.js +2 -2
  46. package/dist/src/job-pay.js.map +1 -1
  47. package/dist/src/job-proofs.js +3 -3
  48. package/dist/src/job-proofs.js.map +1 -1
  49. package/dist/src/job-scan.d.ts +6 -1
  50. package/dist/src/job-scan.js +13 -0
  51. package/dist/src/job-scan.js.map +1 -1
  52. package/dist/src/job-specs.d.ts +1 -0
  53. package/dist/src/job-specs.js +1 -0
  54. package/dist/src/job-specs.js.map +1 -1
  55. package/dist/src/jobs.d.ts +3 -2
  56. package/dist/src/jobs.js +3 -2
  57. package/dist/src/jobs.js.map +1 -1
  58. package/dist/src/ledger.d.ts +11 -4
  59. package/dist/src/ledger.js +46 -2
  60. package/dist/src/ledger.js.map +1 -1
  61. package/dist/src/release-reads.d.ts +8 -1
  62. package/dist/src/release-reads.js +34 -1
  63. package/dist/src/release-reads.js.map +1 -1
  64. package/dist/src/reputation.d.ts +16 -0
  65. package/dist/src/reputation.js +110 -36
  66. package/dist/src/reputation.js.map +1 -1
  67. package/dist/src/rpc-shapes.d.ts +7 -0
  68. package/dist/src/rpc-transport.js +14 -3
  69. package/dist/src/rpc-transport.js.map +1 -1
  70. package/dist/src/simple-work.d.ts +1 -1
  71. package/dist/src/simple-work.js +3 -3
  72. package/dist/src/simple-work.js.map +1 -1
  73. package/dist/src/svm.js +3 -1
  74. package/dist/src/svm.js.map +1 -1
  75. package/dist/src/transaction-keys.d.ts +5 -1
  76. package/dist/src/transaction-keys.js +67 -13
  77. package/dist/src/transaction-keys.js.map +1 -1
  78. package/dist/src/trust.d.ts +1 -0
  79. package/dist/src/trust.js +43 -28
  80. package/dist/src/trust.js.map +1 -1
  81. package/dist/src/unopened.d.ts +53 -0
  82. package/dist/src/unopened.js +169 -0
  83. package/dist/src/unopened.js.map +1 -0
  84. package/package.json +3 -2
@@ -0,0 +1,162 @@
1
+ import { getAddressDecoder } from "@solana/kit";
2
+ import { getTransferSolInstruction } from "@solana-program/system";
3
+ import { MAX_OPENED_SALTS, openingMemo } from "@intent-engine/core";
4
+ import { deliveriesIn, deliverySalt, earlier, opensWith, openingsIn, saltCheckOf } from "./job-deliveries.js";
5
+ import { HISTORY_LIMIT } from "./client-types.js";
6
+ import { memoInstruction, recordedRelease } from "./job-memos.js";
7
+ import { releaseOf, splitClaim } from "./release-reads.js";
8
+ import { lifecycleDeliveries } from "./job-origins.js";
9
+ import { transactionAt } from "./job-scan.js";
10
+ const TOKEN_ACCOUNT_HEAD = 64;
11
+ const ordered = (a, b) => (earlier(a, b) ? -1 : earlier(b, a) ? 1 : 0);
12
+ const ownSalt = (delivery) => (delivery.salt !== "" && saltCheckOf(delivery.salt) === delivery.check ? delivery.salt : null);
13
+ export function earlierSalts(deliveries, payee) {
14
+ return deliveries
15
+ .filter((delivery) => delivery.intent === payee.intent && earlier(delivery, payee))
16
+ .sort(ordered)
17
+ .map(ownSalt);
18
+ }
19
+ export function openingsOf(intent, salts) {
20
+ return Array.from({ length: Math.ceil(salts.length / MAX_OPENED_SALTS) }, (_, i) => ({ intent, salts: salts.slice(i * MAX_OPENED_SALTS, (i + 1) * MAX_OPENED_SALTS) }));
21
+ }
22
+ export function judgeOpenings(deliveries, payee) {
23
+ return openingsOf(payee.intent, earlierSalts(deliveries, payee));
24
+ }
25
+ export function unitedSalts(lists) {
26
+ const length = lists.reduce((most, list) => Math.max(most, list.length), 0);
27
+ return Array.from({ length }, (_, i) => lists.map((list) => list[i] ?? null).find((salt) => salt !== null) ?? null);
28
+ }
29
+ export function openingInstructions(signer, attestor, opening) {
30
+ const notified = [...new Set([opening.intent, attestor])].filter((to) => to !== signer.address);
31
+ return [
32
+ memoInstruction(signer, openingMemo(opening)),
33
+ ...notified.map((destination) => getTransferSolInstruction({ source: signer, destination, amount: 0n })),
34
+ ];
35
+ }
36
+ export async function paidWalletsOf(transport, { event, transaction }, intent) {
37
+ if (event.name === "IntentSplit") {
38
+ const claim = splitClaim(transaction, intent);
39
+ return claim === null ? null : [...claim.recipients];
40
+ }
41
+ if (event.name !== "IntentAttested") {
42
+ return null;
43
+ }
44
+ const payee = event.fields.payee;
45
+ const recorded = transaction.tokens?.find(({ account }) => account === payee)?.owner;
46
+ if (recorded !== undefined) {
47
+ return [recorded];
48
+ }
49
+ const held = await transport.getAccount(payee);
50
+ return held === null || held.data.length < TOKEN_ACCOUNT_HEAD ? null : [getAddressDecoder().decode(held.data.subarray(32, TOKEN_ACCOUNT_HEAD))];
51
+ }
52
+ export function publishedSalts(delivery, openings) {
53
+ const salts = openings.flatMap(({ opening }) => {
54
+ if (opening.intent !== delivery.intent) {
55
+ return [];
56
+ }
57
+ return "announcement" in opening ? (opening.announcement === delivery.signature ? [opening.salt] : []) : opening.salts;
58
+ });
59
+ return [...new Set(salts.filter((salt) => salt !== null && saltCheckOf(salt) === delivery.check))];
60
+ }
61
+ export function refutingAmong(deliveries, openings, payee, sha256, paid) {
62
+ let refutedBy = null;
63
+ for (const delivery of deliveries) {
64
+ const counts = delivery.intent === payee.intent && !paid.includes(delivery.worker) && earlier(delivery, payee);
65
+ if (counts && publishedSalts(delivery, openings).some((open) => opensWith(delivery, open, sha256)) && (refutedBy === null || earlier(delivery, refutedBy))) {
66
+ refutedBy = delivery;
67
+ }
68
+ }
69
+ return refutedBy;
70
+ }
71
+ export function releaseStanding(deliveries, openings, recorded, payees) {
72
+ const { sha256, salt } = recorded;
73
+ let payee = null;
74
+ for (const delivery of salt === undefined || payees === null ? [] : deliveries) {
75
+ if (opensWith(delivery, salt ?? "", sha256) && payees?.includes(delivery.worker) === true && (payee === null || earlier(delivery, payee))) {
76
+ payee = delivery;
77
+ }
78
+ }
79
+ if (payee === null || payees === null) {
80
+ return { valid: false, payee: null, refutedBy: null };
81
+ }
82
+ const refutedBy = refutingAmong(deliveries, openings, payee, sha256, payees);
83
+ return { valid: true, payee: { ...payee, sha256, salt: salt ?? "" }, refutedBy: refutedBy === null ? null : { ...refutedBy, sha256 } };
84
+ }
85
+ export async function refutationIn(transport, transactions, payee, sha256, paid = [], judged) {
86
+ const { intent } = payee;
87
+ let complete = true;
88
+ const failed = () => {
89
+ complete = false;
90
+ return null;
91
+ };
92
+ const own = openingsIn(transactions, new Set([intent]));
93
+ const named = own.flatMap(({ opening }) => ("announcement" in opening && opening.announcement !== payee.signature ? [opening] : []));
94
+ const fetched = [];
95
+ for (const opening of named) {
96
+ const announced = await transactionAt(transport, opening.announcement, intent).catch(failed);
97
+ complete &&= announced?.unread !== true;
98
+ fetched.push(...(announced === null ? [] : deliveriesIn([announced], new Set([intent]))).filter(({ signature }) => signature === opening.announcement));
99
+ }
100
+ const record = judged === undefined
101
+ ? null
102
+ : await lifecycleDeliveries(transport, judged.attestor, { intent, createdAt: judged.createdAt, from: null, to: judged.to }).catch(failed);
103
+ const deliveries = [...fetched, ...(record?.deliveries ?? [])];
104
+ return { refutedBy: refutingAmong(deliveries, [...own, ...(record?.openings ?? [])], payee, sha256, paid)?.signature ?? null, complete };
105
+ }
106
+ export async function refutedIn(transport, transactions, payee, sha256, paid = [], judged) {
107
+ return (await refutationIn(transport, transactions, payee, sha256, paid, judged)).refutedBy;
108
+ }
109
+ export const notOpened = (announcement, worker, intent, sha256) => `the transaction ${announcement} holds no announcement by ${worker} for intent ${intent} that its salt opens to the sha256 ${sha256}; nothing was sent`;
110
+ export async function selfOpeningInstructions(transport, input) {
111
+ const { worker, intent, attestor, announcement } = input;
112
+ const sha256 = input.sha256.toLowerCase();
113
+ const salt = await deliverySalt(worker, intent, sha256, input.saltSignature);
114
+ const announced = await transactionAt(transport, announcement, attestor);
115
+ const own = (announced === null ? [] : deliveriesIn([announced], new Set([intent]))).find((delivery) => delivery.worker === worker.address && opensWith(delivery, salt, sha256));
116
+ if (own === undefined) {
117
+ throw new RangeError(notOpened(announcement, worker.address, intent, sha256));
118
+ }
119
+ return { salt, instructions: openingInstructions(worker, attestor, { intent, announcement, salt }) };
120
+ }
121
+ export async function releaseStandingOf(transport, target) {
122
+ const { intent, attestor, release, recorded } = target;
123
+ if (recorded.salt === undefined) {
124
+ return { valid: false, refutedBy: null, complete: true };
125
+ }
126
+ const record = await lifecycleDeliveries(transport, attestor, { intent, createdAt: target.createdAt ?? null, from: target.from ?? null, to: release.slot });
127
+ const standing = releaseStanding(record.deliveries, record.openings, recorded, target.payees);
128
+ return { valid: standing.valid, refutedBy: standing.refutedBy?.signature ?? null, complete: record.complete };
129
+ }
130
+ export async function recordedStanding(transport, intent, record, history = HISTORY_LIMIT) {
131
+ const transactions = await transport.engineTransactions(history, intent);
132
+ const release = releaseOf(transactions, intent);
133
+ if (release === undefined || (release.event.name !== "IntentAttested" && release.event.name !== "IntentSplit")) {
134
+ return null;
135
+ }
136
+ const recorded = recordedRelease(transactions, release.transaction, release.event.fields.attestor);
137
+ if (recorded === null) {
138
+ return null;
139
+ }
140
+ const payees = await paidWalletsOf(transport, release, intent);
141
+ const standing = releaseStanding(record.deliveries, [...record.openings, ...openingsIn(transactions, new Set([intent]))], recorded, payees);
142
+ return {
143
+ signature: release.transaction.signature,
144
+ ...recorded,
145
+ valid: standing.valid,
146
+ refutedBy: standing.refutedBy?.signature ?? null,
147
+ };
148
+ }
149
+ export async function releaseStandingAt(transport, intent, signature, created, history = HISTORY_LIMIT) {
150
+ const transactions = await transport.engineTransactions(history, intent);
151
+ const release = releaseOf(transactions.filter((transaction) => transaction.signature === signature), intent);
152
+ if (release === undefined || (release.event.name !== "IntentAttested" && release.event.name !== "IntentSplit")) {
153
+ return null;
154
+ }
155
+ const recorded = recordedRelease(transactions, release.transaction, release.event.fields.attestor);
156
+ if (recorded === null) {
157
+ return null;
158
+ }
159
+ const payees = await paidWalletsOf(transport, release, intent);
160
+ return releaseStandingOf(transport, { intent, attestor: release.event.fields.attestor, release: release.transaction, recorded, payees, ...created });
161
+ }
162
+ //# sourceMappingURL=delivery-openings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-openings.js","sourceRoot":"","sources":["../../src/delivery-openings.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { SIGNATURE_PAGE } from "./job-scan.js";
1
+ import { SIGNATURE_PAGE, signaturePage } from "./job-scan.js";
2
2
  import { TRANSACTION_FETCHES } from "./transport.js";
3
3
  export const FUNDING_PAGES = 2;
4
4
  export const FUNDING_READS = 16;
@@ -12,12 +12,12 @@ async function listedOldestFirst(transport, wallet) {
12
12
  const listed = [];
13
13
  let before;
14
14
  for (let page = 1; page <= FUNDING_PAGES; page++) {
15
- const found = await signaturesOf.call(transport, wallet, SIGNATURE_PAGE, before);
16
- listed.push(...found);
17
- if (found.length < SIGNATURE_PAGE) {
15
+ const found = await signaturePage(transport, signaturesOf, wallet, SIGNATURE_PAGE, before);
16
+ listed.push(...found.listed);
17
+ if (found.last) {
18
18
  return listed.filter(({ failed }) => !failed).reverse();
19
19
  }
20
- before = found[found.length - 1]?.signature;
20
+ before = found.listed[found.listed.length - 1]?.signature;
21
21
  }
22
22
  return BUSY;
23
23
  }
@@ -38,9 +38,11 @@ async function readFunder(transport, wallet, covered) {
38
38
  if (transactionsOf === undefined || oldest === null) {
39
39
  return { funder: null, complete: false };
40
40
  }
41
- const reads = oldest.slice(0, FUNDING_READS);
42
- for (let at = 0; at < reads.length; at += TRANSACTION_FETCHES) {
43
- const batch = reads.slice(at, at + TRANSACTION_FETCHES);
41
+ let reads = 0;
42
+ let at = 0;
43
+ while (at < oldest.length && reads < FUNDING_READS) {
44
+ const batch = oldest.slice(at, at + TRANSACTION_FETCHES);
45
+ at += batch.length;
44
46
  const found = await transactionsOf.call(transport, batch);
45
47
  if (found.length < batch.length) {
46
48
  return { funder: null, complete: false };
@@ -49,13 +51,15 @@ async function readFunder(transport, wallet, covered) {
49
51
  if (transaction.unread === true) {
50
52
  return { funder: null, complete: false };
51
53
  }
52
- const into = transaction.transfers?.find(({ from, to, lamports }) => to === wallet && from !== wallet && lamports > 0n);
53
- if (into !== undefined) {
54
- return { funder: into.from, complete: await covered() };
54
+ const into = (transaction.transfers ?? []).filter(({ from, to }) => to === wallet && from !== wallet);
55
+ const funding = into.find(({ lamports }) => lamports > 0n);
56
+ if (funding !== undefined) {
57
+ return { funder: funding.from, complete: await covered() };
55
58
  }
59
+ reads += into.length === 0 ? 1 : 0;
56
60
  }
57
61
  }
58
- return { funder: null, complete: oldest.length <= FUNDING_READS && (await covered()) };
62
+ return { funder: null, complete: at >= oldest.length && (await covered()) };
59
63
  }
60
64
  export function fundingLookup(transport, covered) {
61
65
  const known = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/funding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAwB,mBAAmB,EAAkB,MAAM,gBAAgB,CAAC;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAQ9B,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,KAAK,UAAU,iBAAiB,CAAC,SAAoB,EAAE,MAAe;IACpE,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACnC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,MAA0B,CAAC;IAC/B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAoB,EAAE,MAAe,EAAE,OAA+B;IACzG,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,SAAoB,EAAE,MAAe,EAAE,OAA+B;IAC9F,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChG,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,cAAc,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAC7C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,mBAAmB,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,mBAAmB,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE,CAAC;YAChC,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC3C,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC;YACxH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,EAAE,EAAE,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,aAAa,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAoB,EAAE,OAA+B;IACjF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAqB,EAAE,KAAc,EAAE,MAAe;IACnF,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/funding.ts"],"names":[],"mappings":"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"}
@@ -12,3 +12,4 @@ export * from "./setup.js";
12
12
  export * from "./simple.js";
13
13
  export * from "./transport.js";
14
14
  export * from "./trust.js";
15
+ export * from "./unopened.js";
package/dist/src/index.js CHANGED
@@ -12,4 +12,5 @@ export * from "./setup.js";
12
12
  export * from "./simple.js";
13
13
  export * from "./transport.js";
14
14
  export * from "./trust.js";
15
+ export * from "./unopened.js";
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -1,17 +1,29 @@
1
- import type { Address, Instruction, Signature, TransactionSigner } from "@solana/kit";
2
- import type { Transport } from "./transport.js";
1
+ import { type Address, type Instruction, type Signature, type TransactionSigner } from "@solana/kit";
2
+ import { type DeliveryOpener, type Opening, type SealedKey } from "@intent-engine/core";
3
+ import type { EngineTransaction, Transport } from "./transport.js";
3
4
  export type DeliverInput = {
4
5
  worker: TransactionSigner;
5
6
  intent: Address;
6
7
  sha256: string;
7
8
  url: string;
9
+ saltSignature?: Uint8Array;
10
+ };
11
+ export type SealedFor = {
12
+ wallet: Address;
13
+ kind: SealedKey;
14
+ key: string;
8
15
  };
9
16
  export type DeliveryPlan = {
10
17
  attestor: Address;
11
18
  instructions: Instruction[];
12
19
  commitment: string;
20
+ check: string;
21
+ salt: string;
13
22
  sealedTo: Address[];
23
+ sealedKeys: SealedKey[];
24
+ sealedFor: SealedFor[];
14
25
  };
26
+ export type DeliveryOpeners = DeliveryOpener | readonly DeliveryOpener[];
15
27
  export type Delivery = {
16
28
  intent: Address;
17
29
  worker: Address;
@@ -21,10 +33,19 @@ export type Delivery = {
21
33
  slot: bigint;
22
34
  blockTime: bigint | null;
23
35
  commitment: string;
36
+ check: string;
37
+ salt: string;
24
38
  sealed: string;
25
39
  };
40
+ export type PublishedOpening = {
41
+ opening: Opening;
42
+ signature: string;
43
+ slot: bigint;
44
+ by: Address;
45
+ };
26
46
  export type DeliveryRecord = {
27
47
  deliveries: Delivery[];
48
+ openings: PublishedOpening[];
28
49
  complete: boolean;
29
50
  pages: number;
30
51
  };
@@ -32,11 +53,34 @@ export declare class NotDeliverable extends Error {
32
53
  readonly intent: Address;
33
54
  constructor(intent: Address, reason: string);
34
55
  }
56
+ export declare const cannotSignMessages: (worker: Address) => string;
57
+ export declare class NoMessageSigner extends Error {
58
+ readonly worker: Address;
59
+ constructor(worker: Address);
60
+ }
61
+ export declare const saltSignatureRefused: (worker: Address) => string;
62
+ export declare class BadSaltSignature extends Error {
63
+ readonly worker: Address;
64
+ constructor(worker: Address);
65
+ }
66
+ export declare function deliverySalt(worker: TransactionSigner, intent: Address, sha256: string, saltSignature?: Uint8Array): Promise<string>;
35
67
  export declare function deliveryInstructions(transport: Transport, input: DeliverInput): Promise<DeliveryPlan>;
36
- export declare function deliveryRecord(transport: Transport, judge: Address, intent?: Address, pages?: number, keypair?: Uint8Array): Promise<DeliveryRecord>;
37
- export declare function judgedDeliveries(transport: Transport, judge: Address, judged: ReadonlySet<Address>, floor: bigint | null, covered: () => Promise<boolean>, pages: number, keypair?: Uint8Array): Promise<DeliveryRecord>;
68
+ export declare function deliveryRecord(transport: Transport, judge: Address, intent?: Address, pages?: number, keypair?: DeliveryOpeners): Promise<DeliveryRecord>;
69
+ export declare function openingsIn(transactions: readonly EngineTransaction[], judged?: ReadonlySet<Address>): PublishedOpening[];
70
+ export declare function deliveriesIn(transactions: readonly EngineTransaction[], judged?: ReadonlySet<Address>): Delivery[];
71
+ export declare function judgedDeliveries(transport: Transport, judge: Address, judged: ReadonlySet<Address>, floor: bigint | null, covered: () => Promise<boolean>, pages: number, keypair?: DeliveryOpeners): Promise<DeliveryRecord>;
72
+ export declare function openersOf(keys: DeliveryOpeners | undefined): readonly DeliveryOpener[];
38
73
  export declare function deliveriesOf(transport: Transport, judge: Address, intent?: Address): Promise<Delivery[]>;
39
- export declare function commitmentOf(intent: Address, worker: Address, sha256: string): string;
74
+ export declare const earlier: (a: {
75
+ slot: bigint;
76
+ signature: string;
77
+ }, b: {
78
+ slot: bigint;
79
+ signature: string;
80
+ }) => boolean;
81
+ export declare function commitmentOf(intent: Address, worker: Address, salt: string, sha256: string): string;
82
+ export declare function saltCheckOf(salt: string): string;
83
+ export declare function opensWith(delivery: Delivery, salt: string, sha256: string): boolean;
40
84
  export declare function announces(delivery: Delivery, sha256: string): boolean;
41
85
  export declare function withWork(delivery: Delivery, sha256: string): Delivery | null;
42
86
  export declare function firstDelivery(deliveries: readonly Delivery[], sha256: string): Delivery | null;
@@ -1,7 +1,10 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { createSignableMessage, getPublicKeyFromAddress, isMessagePartialSigner, verifySignature, } from "@solana/kit";
2
3
  import { getTransferSolInstruction } from "@solana-program/system";
3
- import { commitmentPreimage, deliveryCommitment, deliveryMemoV2, DELIVERY_V2_MEMO_PREFIX, IntentStatus, isMemoUrl, isSha256Hex, MEMO_URL_RULE, openUrl, parseDeliveryMemoV2, sealUrl, } from "@intent-engine/core";
4
+ import { AccountVersionError, commitmentPreimage, deliveryKeyOf, DELIVERY_MEMO_MARK, encryptionKeyText, isEncryptionKeyText, deliveryMemo, IntentStatus, isMemoUrl, isSaltHex, isSha256Hex, MEMO_URL_RULE, openDelivery, parseDeliveryMemo, parseEncryptionKey, parseOpeningMemo, saltCheckPreimage, saltMessage, saltOfSignature, sealDelivery, sealedKeys, x25519PublicOf, } from "@intent-engine/core";
4
5
  import { chainTime } from "./accounts.js";
6
+ import { isDevice } from "./ledger.js";
7
+ import { loadProfile } from "./client-claims.js";
5
8
  import { loadCommittee } from "./client-committee.js";
6
9
  import { memoInstruction } from "./job-memos.js";
7
10
  import { historyCovers, openProofEscrows, proofAt } from "./job-proofs.js";
@@ -15,6 +18,63 @@ export class NotDeliverable extends Error {
15
18
  this.intent = intent;
16
19
  }
17
20
  }
21
+ export const cannotSignMessages = (worker) => `the wallet ${worker} cannot sign messages, and a delivery derives its salt from the wallet's own signature over the intent and the work's sha256; announce with a key file or a wallet that signs messages; nothing was sent`;
22
+ export class NoMessageSigner extends Error {
23
+ worker;
24
+ constructor(worker) {
25
+ super(cannotSignMessages(worker));
26
+ this.name = "NoMessageSigner";
27
+ this.worker = worker;
28
+ }
29
+ }
30
+ export const saltSignatureRefused = (worker) => `the salt signature is not ${worker}'s ed25519 signature of the salt message for this intent and sha256; nothing was sent`;
31
+ export class BadSaltSignature extends Error {
32
+ worker;
33
+ constructor(worker) {
34
+ super(saltSignatureRefused(worker));
35
+ this.name = "BadSaltSignature";
36
+ this.worker = worker;
37
+ }
38
+ }
39
+ async function signedBy(worker, signature, message) {
40
+ if (signature.length !== 64) {
41
+ return false;
42
+ }
43
+ try {
44
+ return await verifySignature(await getPublicKeyFromAddress(worker), signature, message);
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ export async function deliverySalt(worker, intent, sha256, saltSignature) {
51
+ const message = saltMessage(intent, sha256);
52
+ if (saltSignature !== undefined) {
53
+ if (!(await signedBy(worker.address, saltSignature, message))) {
54
+ throw new BadSaltSignature(worker.address);
55
+ }
56
+ return saltOfSignature(saltSignature);
57
+ }
58
+ if (!isMessagePartialSigner(worker) || isDevice(worker)) {
59
+ throw new NoMessageSigner(worker.address);
60
+ }
61
+ const [signed] = await worker.signMessages([createSignableMessage(message)]);
62
+ const signature = signed?.[worker.address];
63
+ if (signature === undefined || signature.length !== 64) {
64
+ throw new NoMessageSigner(worker.address);
65
+ }
66
+ return saltOfSignature(signature);
67
+ }
68
+ async function recipientOf(transport, wallet) {
69
+ const profile = await loadProfile(transport, wallet).catch((error) => {
70
+ if (error instanceof AccountVersionError) {
71
+ return null;
72
+ }
73
+ throw error;
74
+ });
75
+ const key = profile?.encryptionKey ?? null;
76
+ return { wallet, encryptionKey: key === null || !isEncryptionKeyText(key) ? null : parseEncryptionKey(key) };
77
+ }
18
78
  export async function deliveryInstructions(transport, input) {
19
79
  const { worker, intent } = input;
20
80
  const sha256 = input.sha256.toLowerCase();
@@ -34,9 +94,18 @@ export async function deliveryInstructions(transport, input) {
34
94
  const attestor = proof.params.attestor;
35
95
  const notify = getTransferSolInstruction({ source: worker, destination: attestor, amount: 0n });
36
96
  const sealedTo = [...((await loadCommittee(transport, attestor))?.members ?? [attestor])];
37
- const commitment = await deliveryCommitment({ intent, worker: worker.address, sha256 });
38
- const blob = await sealUrl(input.url, sealedTo, intent);
39
- return { attestor, instructions: [memoInstruction(worker, deliveryMemoV2({ intent, commitment, blob })), notify], commitment, sealedTo };
97
+ const salt = await deliverySalt(worker, intent, sha256, input.saltSignature);
98
+ const commitment = commitmentOf(intent, worker.address, salt, sha256);
99
+ const check = saltCheckOf(salt);
100
+ const recipients = await Promise.all(sealedTo.map((wallet) => recipientOf(transport, wallet)));
101
+ const blob = await sealDelivery({ salt, url: input.url }, recipients, intent);
102
+ const instructions = [memoInstruction(worker, deliveryMemo({ intent, commitment, check, blob })), notify];
103
+ const kinds = sealedKeys(blob) ?? [];
104
+ const sealedFor = recipients.map(({ wallet, encryptionKey }, at) => {
105
+ const kind = kinds[at] ?? "wallet";
106
+ return { wallet, kind, key: encryptionKeyText(kind === "profile" && encryptionKey !== null ? encryptionKey : x25519PublicOf(wallet)) };
107
+ });
108
+ return { attestor, instructions, commitment, check, salt, sealedTo, sealedKeys: kinds, sealedFor };
40
109
  }
41
110
  export async function deliveryRecord(transport, judge, intent, pages = DELIVERY_PAGES, keypair) {
42
111
  let proofs;
@@ -49,41 +118,79 @@ export async function deliveryRecord(transport, judge, intent, pages = DELIVERY_
49
118
  }
50
119
  const [first] = proofs;
51
120
  if (first === undefined) {
52
- return { deliveries: [], complete: true, pages: 0 };
121
+ return { deliveries: [], openings: [], complete: true, pages: 0 };
53
122
  }
54
123
  const judged = new Set(proofs.map(({ address }) => address));
55
124
  const oldest = proofs.reduce((low, proof) => (proof.intent.createdAt < low.intent.createdAt ? proof : low), first);
56
125
  const floor = oldest.intent.createdAt;
57
126
  return judgedDeliveries(transport, judge, judged, floor, () => historyCovers(transport, oldest.address, floor), pages, keypair);
58
127
  }
59
- export async function judgedDeliveries(transport, judge, judged, floor, covered, pages, keypair) {
60
- const scanned = await scan(transport, judge, { floor, memo: DELIVERY_V2_MEMO_PREFIX, pages, covered });
61
- const { transactions, complete } = scanned;
62
- const found = transactions.flatMap(({ signature, slot, blockTime, failed, memos, feePayer }) => failed || feePayer === undefined
128
+ export function openingsIn(transactions, judged) {
129
+ return transactions.flatMap(({ signature, slot, failed, memos, feePayer }) => failed || feePayer === undefined
130
+ ? []
131
+ : (memos ?? []).slice(0, MEMOS_PER_TRANSACTION).flatMap((text) => {
132
+ const opening = parseOpeningMemo(text);
133
+ return opening === null || (judged !== undefined && !judged.has(opening.intent)) ? [] : [{ opening, signature, slot, by: feePayer }];
134
+ }));
135
+ }
136
+ export function deliveriesIn(transactions, judged) {
137
+ return transactions.flatMap(({ signature, slot, blockTime, failed, memos, feePayer }) => failed || feePayer === undefined
63
138
  ? []
64
139
  : (memos ?? []).slice(0, MEMOS_PER_TRANSACTION).flatMap((text) => {
65
140
  const at = { worker: feePayer, signature: signature, slot, blockTime };
66
- const sealed = parseDeliveryMemoV2(text);
67
- return sealed === null || !judged.has(sealed.intent)
141
+ const sealed = parseDeliveryMemo(text);
142
+ return sealed === null || (judged !== undefined && !judged.has(sealed.intent))
68
143
  ? []
69
- : [{ intent: sealed.intent, sha256: "", url: "", ...at, commitment: sealed.commitment, sealed: sealed.blob }];
144
+ : [{ intent: sealed.intent, sha256: "", url: "", ...at, commitment: sealed.commitment, check: sealed.check, salt: "", sealed: sealed.blob }];
70
145
  }));
71
- const deliveries = keypair === undefined ? found : await Promise.all(found.map((delivery) => opened(delivery, keypair)));
72
- return { deliveries, complete: complete && !transactions.some(({ unread }) => unread === true), pages: scanned.pages };
73
146
  }
74
- async function opened(delivery, keypair) {
75
- const url = await openUrl(delivery.sealed, keypair, delivery.intent).catch(() => null);
76
- return url === null ? delivery : { ...delivery, url };
147
+ export async function judgedDeliveries(transport, judge, judged, floor, covered, pages, keypair) {
148
+ const scanned = await scan(transport, judge, { floor, memo: DELIVERY_MEMO_MARK, pages, covered });
149
+ const { transactions, complete } = scanned;
150
+ const found = deliveriesIn(transactions, judged);
151
+ const keys = await Promise.all(openersOf(keypair).map(deliveryKeyOf));
152
+ const deliveries = keys.length === 0 ? found : await Promise.all(found.map((delivery) => opened(delivery, keys)));
153
+ return {
154
+ deliveries,
155
+ openings: openingsIn(transactions, judged),
156
+ complete: complete && !transactions.some(({ unread }) => unread === true),
157
+ pages: scanned.pages,
158
+ };
159
+ }
160
+ export function openersOf(keys) {
161
+ if (keys === undefined) {
162
+ return [];
163
+ }
164
+ return keys instanceof Uint8Array || !Array.isArray(keys) ? [keys] : keys;
165
+ }
166
+ async function opened(delivery, keys) {
167
+ let open = null;
168
+ for (const key of keys) {
169
+ open ??= await openDelivery(delivery.sealed, key, delivery.intent).catch(() => null);
170
+ }
171
+ if (open === null) {
172
+ return delivery;
173
+ }
174
+ return saltCheckOf(open.salt) === delivery.check ? { ...delivery, url: open.url, salt: open.salt } : { ...delivery, url: open.url };
77
175
  }
78
176
  export async function deliveriesOf(transport, judge, intent) {
79
177
  return (await deliveryRecord(transport, judge, intent)).deliveries;
80
178
  }
81
- const earlier = (a, b) => a.slot < b.slot || (a.slot === b.slot && a.signature < b.signature);
82
- export function commitmentOf(intent, worker, sha256) {
83
- return createHash("sha256").update(commitmentPreimage({ intent, worker, sha256 })).digest("hex");
179
+ export const earlier = (a, b) => a.slot < b.slot || (a.slot === b.slot && a.signature < b.signature);
180
+ export function commitmentOf(intent, worker, salt, sha256) {
181
+ return createHash("sha256").update(commitmentPreimage({ intent, worker, salt, sha256 })).digest("hex");
182
+ }
183
+ export function saltCheckOf(salt) {
184
+ return createHash("sha256").update(saltCheckPreimage(salt)).digest("hex").slice(0, 32);
185
+ }
186
+ export function opensWith(delivery, salt, sha256) {
187
+ return (isSaltHex(salt) &&
188
+ isSha256Hex(sha256) &&
189
+ delivery.check === saltCheckOf(salt) &&
190
+ delivery.commitment === commitmentOf(delivery.intent, delivery.worker, salt, sha256));
84
191
  }
85
192
  export function announces(delivery, sha256) {
86
- return isSha256Hex(sha256) && delivery.commitment === commitmentOf(delivery.intent, delivery.worker, sha256);
193
+ return opensWith(delivery, delivery.salt, sha256);
87
194
  }
88
195
  export function withWork(delivery, sha256) {
89
196
  return announces(delivery, sha256) ? { ...delivery, sha256 } : null;
@@ -1 +1 @@
1
- {"version":3,"file":"job-deliveries.js","sourceRoot":"","sources":["../../src/job-deliveries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-deliveries.js","sourceRoot":"","sources":["../../src/job-deliveries.ts"],"names":[],"mappings":"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"}