@intent-engine/client 0.1.22 → 0.1.26

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 (76) hide show
  1. package/dist/src/budget.d.ts +6 -4
  2. package/dist/src/budget.js +24 -9
  3. package/dist/src/budget.js.map +1 -1
  4. package/dist/src/client-errors.d.ts +28 -0
  5. package/dist/src/client-errors.js +55 -0
  6. package/dist/src/client-errors.js.map +1 -0
  7. package/dist/src/client-intents.d.ts +12 -0
  8. package/dist/src/client-intents.js +133 -0
  9. package/dist/src/client-intents.js.map +1 -0
  10. package/dist/src/client-reads.d.ts +7 -0
  11. package/dist/src/client-reads.js +61 -0
  12. package/dist/src/client-reads.js.map +1 -0
  13. package/dist/src/client-settle.d.ts +2 -0
  14. package/dist/src/client-settle.js +84 -0
  15. package/dist/src/client-settle.js.map +1 -0
  16. package/dist/src/client-types.d.ts +145 -0
  17. package/dist/src/client-types.js +9 -0
  18. package/dist/src/client-types.js.map +1 -0
  19. package/dist/src/client-watch.d.ts +4 -0
  20. package/dist/src/client-watch.js +97 -0
  21. package/dist/src/client-watch.js.map +1 -0
  22. package/dist/src/client.d.ts +4 -126
  23. package/dist/src/client.js +20 -299
  24. package/dist/src/client.js.map +1 -1
  25. package/dist/src/confirmation.d.ts +11 -0
  26. package/dist/src/confirmation.js +94 -0
  27. package/dist/src/confirmation.js.map +1 -0
  28. package/dist/src/index.d.ts +1 -0
  29. package/dist/src/index.js +1 -0
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/intent-notifications.d.ts +13 -0
  32. package/dist/src/intent-notifications.js +106 -0
  33. package/dist/src/intent-notifications.js.map +1 -0
  34. package/dist/src/job-deliveries.d.ts +40 -0
  35. package/dist/src/job-deliveries.js +92 -0
  36. package/dist/src/job-deliveries.js.map +1 -0
  37. package/dist/src/job-memos.d.ts +16 -0
  38. package/dist/src/job-memos.js +51 -0
  39. package/dist/src/job-memos.js.map +1 -0
  40. package/dist/src/job-origins.d.ts +30 -0
  41. package/dist/src/job-origins.js +53 -0
  42. package/dist/src/job-origins.js.map +1 -0
  43. package/dist/src/job-proofs.d.ts +17 -0
  44. package/dist/src/job-proofs.js +54 -0
  45. package/dist/src/job-proofs.js.map +1 -0
  46. package/dist/src/job-scan.d.ts +20 -0
  47. package/dist/src/job-scan.js +70 -0
  48. package/dist/src/job-scan.js.map +1 -0
  49. package/dist/src/job-specs.d.ts +40 -0
  50. package/dist/src/job-specs.js +107 -0
  51. package/dist/src/job-specs.js.map +1 -0
  52. package/dist/src/jobs.d.ts +6 -0
  53. package/dist/src/jobs.js +7 -0
  54. package/dist/src/jobs.js.map +1 -0
  55. package/dist/src/memoized-transport.d.ts +4 -0
  56. package/dist/src/memoized-transport.js +66 -0
  57. package/dist/src/memoized-transport.js.map +1 -0
  58. package/dist/src/rpc-retry.d.ts +16 -0
  59. package/dist/src/rpc-retry.js +62 -0
  60. package/dist/src/rpc-retry.js.map +1 -0
  61. package/dist/src/rpc-shapes.d.ts +230 -0
  62. package/dist/src/rpc-shapes.js +2 -0
  63. package/dist/src/rpc-shapes.js.map +1 -0
  64. package/dist/src/rpc-transport.d.ts +6 -0
  65. package/dist/src/rpc-transport.js +236 -0
  66. package/dist/src/rpc-transport.js.map +1 -0
  67. package/dist/src/svm.d.ts +1 -1
  68. package/dist/src/svm.js +89 -21
  69. package/dist/src/svm.js.map +1 -1
  70. package/dist/src/transaction-keys.d.ts +6 -0
  71. package/dist/src/transaction-keys.js +19 -0
  72. package/dist/src/transaction-keys.js.map +1 -0
  73. package/dist/src/transport.d.ts +7 -221
  74. package/dist/src/transport.js +6 -464
  75. package/dist/src/transport.js.map +1 -1
  76. package/package.json +16 -5
@@ -1,117 +1,21 @@
1
1
  import { createSolanaRpc } from "@solana/kit";
2
- import { attestedProofMessage, buildCancelIntent, buildCloseIntent, buildCreateIntent, buildExpireIntent, buildFillAttested, buildFillIntent, decodeEvent, decodeParams, escrowAmount, feeBpsFor, findAssociatedTokenAddress, findIntentPda, getIntentDecoder, IntentStatus, Kind, NATIVE_MINT, nextFreeNonce, remainingOf, requiredOut, signEd25519Instruction, splitFees, TOKEN_PROGRAM_ADDRESS, tokenName, } from "@intent-engine/core";
3
- import { getCloseAccountInstruction } from "@solana-program/token";
4
- import { chainTime, createdAccount, loadConfig, loadIntent, loadUser, MissingAccount, mintOf, tokenAmountOf, } from "./accounts.js";
2
+ import { chainTime, loadConfig, loadIntent, loadUser, MissingAccount, mintOf } from "./accounts.js";
5
3
  import { budgeted, simulated } from "./budget.js";
4
+ import { intentSends, nonceAfter } from "./client-intents.js";
5
+ import { clientReads } from "./client-reads.js";
6
+ import { proofSettlement } from "./client-settle.js";
7
+ import { WATCH_POLL_MS, WATCH_WAIT_SECONDS } from "./client-types.js";
8
+ import { decoded, watchIntents } from "./client-watch.js";
6
9
  import { explain } from "./errors.js";
7
- import { initUserIfMissing, tokenAccountIfMissing, wrapIfShort } from "./setup.js";
8
- import { changesFrom, intentNotifications, pause, rpcTransport, signatureWatch, } from "./transport.js";
9
- export const DEFAULT_EXPIRES_IN = 3600n;
10
- export const HISTORY_LIMIT = 100;
11
- export const WATCH_POLL_MS = 2_000;
12
- export const WATCH_WAIT_SECONDS = 10;
13
- export class NoFreeNonce extends Error {
14
- owner;
15
- constructor(owner) {
16
- super(`every nonce in the window of ${owner} is used; advance the nonce window first`);
17
- this.name = "NoFreeNonce";
18
- this.owner = owner;
19
- }
20
- }
21
- export class NotSettleable extends Error {
22
- intent;
23
- constructor(intent, reason) {
24
- super(`intent ${intent} ${reason}`);
25
- this.name = "NotSettleable";
26
- this.intent = intent;
27
- }
28
- }
29
- export class NotFillable extends Error {
30
- intent;
31
- constructor(intent, reason) {
32
- super(`intent ${intent} ${reason}`);
33
- this.name = "NotFillable";
34
- this.intent = intent;
35
- }
36
- }
37
- function nonceAfter(owner, user) {
38
- if (user === null) {
39
- return 0n;
40
- }
41
- const next = nextFreeNonce(user);
42
- if (next === null) {
43
- throw new NoFreeNonce(owner);
44
- }
45
- return next;
46
- }
47
- const decoded = ({ address, data }) => ({ address, intent: getIntentDecoder().decode(data) });
10
+ import { deliveriesOf, deliveryInstructions, deliveryRecord, jobsOf, readSpec } from "./jobs.js";
11
+ import { intentNotifications, rpcTransport, signatureWatch } from "./transport.js";
12
+ export { DEFAULT_EXPIRES_IN, EXPIRES_IN_RANGE, HISTORY_LIMIT, MAX_EXPIRES_IN, MIN_EXPIRES_IN, SPEC_URL_NEEDS_PROOF, WATCH_POLL_MS, WATCH_WAIT_SECONDS, } from "./client-types.js";
13
+ export { EscrowExpired, NoFreeNonce, NotFillable, NotSettleable, PayeeMoved, PayToNotWallet } from "./client-errors.js";
48
14
  export function createClient(options) {
49
15
  const { url, priority = 0n, pollMs = WATCH_POLL_MS, resyncSeconds = WATCH_WAIT_SECONDS } = options;
50
16
  const transport = options.transport ?? rpcTransport(createSolanaRpc(url), undefined, signatureWatch(url));
51
17
  const notifications = options.notifications ?? (options.transport === undefined ? intentNotifications(url) : undefined);
52
- const watch = async (onChange, signal, filter = {}) => {
53
- if (signal.aborted) {
54
- return;
55
- }
56
- const seen = new Map();
57
- const fresh = (accounts) => accounts.flatMap((account) => {
58
- const view = decoded(account);
59
- if (filter.owner !== undefined && view.intent.owner !== filter.owner) {
60
- return [];
61
- }
62
- const key = Buffer.from(account.data).toString("base64");
63
- if (seen.get(account.address)?.key === key) {
64
- return [];
65
- }
66
- seen.set(account.address, { key, view });
67
- return [view];
68
- });
69
- let read = false;
70
- const report = (changed, closed, first = false) => {
71
- if ((changed.length > 0 || closed.length > 0 || first) && !signal.aborted) {
72
- onChange(changed, closed);
73
- }
74
- };
75
- const sync = async () => {
76
- const accounts = await transport.intents(filter.owner).catch(() => null);
77
- if (accounts === null) {
78
- return;
79
- }
80
- const present = new Set(accounts.map(({ address }) => address));
81
- const changed = fresh(accounts);
82
- const closed = [...seen].filter(([address]) => !present.has(address)).map(([, { view }]) => view);
83
- for (const { address } of closed) {
84
- seen.delete(address);
85
- }
86
- report(changed, closed, !read);
87
- read = true;
88
- };
89
- if (notifications === undefined) {
90
- while (!signal.aborted) {
91
- await sync();
92
- await pause(pollMs, signal);
93
- }
94
- return;
95
- }
96
- const changes = changesFrom(notifications);
97
- const stop = () => changes.close();
98
- signal.addEventListener("abort", stop, { once: true });
99
- try {
100
- await sync();
101
- let synced = Date.now();
102
- while (!signal.aborted) {
103
- report(fresh((await changes.wait(resyncSeconds)) ?? []), []);
104
- if (!signal.aborted && Date.now() - synced >= resyncSeconds * 1000) {
105
- await sync();
106
- synced = Date.now();
107
- }
108
- }
109
- }
110
- finally {
111
- signal.removeEventListener("abort", stop);
112
- changes.close();
113
- }
114
- };
18
+ const watch = watchIntents(transport, notifications, pollMs, resyncSeconds);
115
19
  const config = async () => (await loadConfig(transport)).config;
116
20
  const send = async (instructions, signer) => (await transport.send(await budgeted(transport, priority, instructions, signer.address), signer));
117
21
  const mints = new Map();
@@ -125,198 +29,10 @@ export function createClient(options) {
125
29
  loading.catch(() => mints.delete(address));
126
30
  return loading;
127
31
  };
128
- const createIntent = async (input) => {
129
- const { signer, params, inputMint, outputMint } = input;
130
- const owner = signer.address;
131
- const [settings, sell, buy, user] = await Promise.all([config(), mint(inputMint), mint(outputMint), loadUser(transport, owner)]);
132
- const nonce = input.nonce ?? nonceAfter(owner, user);
133
- const expiresAt = input.expiresAt ?? (await chainTime(transport)) + (input.expiresIn ?? DEFAULT_EXPIRES_IN);
134
- const recipient = input.receiver ?? owner;
135
- const receiver = await tokenAccountIfMissing(transport, signer, recipient, outputMint, buy.tokenProgram);
136
- const wrap = await wrapIfShort(transport, signer, inputMint, sell.tokenProgram, escrowAmount(params));
137
- const create = await buildCreateIntent({
138
- owner: signer,
139
- treasury: settings.feeRecipient,
140
- maxCreateFee: settings.createFee,
141
- maxBounty: settings.crankBounty,
142
- nonce,
143
- params,
144
- expiresAt,
145
- inputMint,
146
- outputMint,
147
- inputTokenProgram: sell.tokenProgram,
148
- outputTokenProgram: buy.tokenProgram,
149
- ...(recipient === owner ? {} : { receiver: receiver.address, receiverAuthority: recipient }),
150
- });
151
- const register = await initUserIfMissing(user, signer);
152
- const signature = await send([...register, ...receiver.create, ...wrap.instructions, create], signer);
153
- const [intent] = await findIntentPda({ owner, nonce });
154
- return { signature, intent, nonce };
155
- };
156
- const cancel = async (signer, nonce) => {
157
- const { intent } = await loadIntent(transport, signer.address, nonce);
158
- const { tokenProgram } = await mint(intent.inputMint);
159
- const refund = await tokenAccountIfMissing(transport, signer, signer.address, intent.inputMint, tokenProgram);
160
- return send([...refund.create, await buildCancelIntent({ owner: signer, nonce, inputMint: intent.inputMint, tokenProgram })], signer);
161
- };
162
- const unwrap = async (signer) => {
163
- const account = await findAssociatedTokenAddress({ owner: signer.address, mint: NATIVE_MINT, tokenProgram: TOKEN_PROGRAM_ADDRESS });
164
- if ((await createdAccount(transport, account)) === null) {
165
- return null;
166
- }
167
- return send([getCloseAccountInstruction({ account, destination: signer.address, owner: signer })], signer);
168
- };
169
- const history = async (intent, limit = HISTORY_LIMIT) => (await transport.engineTransactions(limit, intent))
170
- .filter(({ failed }) => !failed)
171
- .flatMap(({ signature, slot, blockTime, emitted }) => emitted
172
- .map((data) => decodeEvent(data))
173
- .filter((event) => event !== null && "intent" in event.fields && event.fields.intent === intent)
174
- .reverse()
175
- .map((event) => ({ ...event, signature: signature, slot, blockTime })));
176
- const fillOf = async (intent) => {
177
- const events = await history(intent);
178
- for (const event of events) {
179
- const { signature, slot, blockTime } = event;
180
- if (event.name === "IntentFilled") {
181
- const { solver, delivered, required, fee, net } = event.fields;
182
- return { steps: 1, solver, delivered, required, fee, net, signature, slot, blockTime };
183
- }
184
- if (event.name === "FillEnded") {
185
- const begun = events.find((other) => other.name === "FillBegun" && other.signature === signature);
186
- if (begun?.name === "FillBegun") {
187
- const { solver, delivered, required } = event.fields;
188
- return { steps: 2, solver, delivered, required, fee: begun.fields.fee, net: begun.fields.net, signature, slot, blockTime };
189
- }
190
- }
191
- }
192
- return null;
193
- };
194
- const fill = async (input) => {
195
- const { solver, owner, nonce } = input;
196
- const [{ address, intent: held }, settings] = await Promise.all([loadIntent(transport, owner, nonce), config()]);
197
- if (held.status !== IntentStatus.Open) {
198
- throw new NotFillable(address, "is not open");
199
- }
200
- const params = decodeParams(held.kind, Uint8Array.from(held.params));
201
- if (params.kind === Kind.AttestedResult) {
202
- throw new NotFillable(address, "is an AttestedResult intent, which only its judge settles");
203
- }
204
- const [sell, buy] = await Promise.all([mint(held.inputMint), mint(held.outputMint)]);
205
- const amountIn = input.amountIn ?? remainingOf(held);
206
- const amountOut = input.amountOut ?? requiredOut(params, amountIn, await chainTime(transport));
207
- const kindBps = feeBpsFor(settings, held.kind);
208
- const shares = splitFees(amountIn, kindBps, held.partnerBps, held.partnerCutBps);
209
- const feeRecipient = shares.protocol > 0n ? settings.feeRecipient : undefined;
210
- const partner = shares.partner > 0n ? held.partner : undefined;
211
- const agent = held.agentFee > 0n ? held.rentPayer : undefined;
212
- const paid = (wallet) => tokenAccountIfMissing(transport, solver, wallet, held.inputMint, sell.tokenProgram);
213
- const [solverInput, solverOutput, ...payouts] = await Promise.all([
214
- paid(solver.address),
215
- tokenAccountIfMissing(transport, solver, solver.address, held.outputMint, buy.tokenProgram),
216
- ...[feeRecipient, partner, agent].filter((wallet) => wallet !== undefined).map(paid),
217
- ]);
218
- const filled = await buildFillIntent({
219
- solver,
220
- owner,
221
- nonce,
222
- inputMint: held.inputMint,
223
- outputMint: held.outputMint,
224
- inputTokenProgram: sell.tokenProgram,
225
- outputTokenProgram: buy.tokenProgram,
226
- receiver: held.receiver,
227
- solverInput: solverInput.address,
228
- solverOutput: solverOutput.address,
229
- ...(feeRecipient === undefined ? {} : { feeRecipient }),
230
- ...(partner === undefined ? {} : { partner }),
231
- ...(agent === undefined ? {} : { agent }),
232
- mandate: held.mandate,
233
- amountIn,
234
- amountOut,
235
- maxFeeBps: kindBps + held.partnerBps,
236
- });
237
- const setup = [solverInput, solverOutput, ...payouts].flatMap(({ create }) => create);
238
- const wrap = input.route === undefined ? (await wrapIfShort(transport, solver, held.outputMint, buy.tokenProgram, amountOut)).instructions : [];
239
- return send([...setup, ...wrap, ...(input.route ?? []), filled], solver);
240
- };
241
- const settling = async (cranker, owner, nonce) => {
242
- const { intent } = await loadIntent(transport, owner, nonce);
243
- const { tokenProgram } = await mint(intent.inputMint);
244
- return { ref: { cranker, owner, nonce, inputMint: intent.inputMint, tokenProgram }, rentPayer: intent.rentPayer };
245
- };
246
- const expire = async (cranker, owner, nonce) => {
247
- const { ref } = await settling(cranker, owner, nonce);
248
- const refund = await tokenAccountIfMissing(transport, cranker, owner, ref.inputMint, ref.tokenProgram);
249
- return send([...refund.create, await buildExpireIntent(ref)], cranker);
250
- };
251
- const close = async (cranker, owner, nonce) => {
252
- const { ref, rentPayer } = await settling(cranker, owner, nonce);
253
- return send([await buildCloseIntent({ ...ref, rentPayer })], cranker);
254
- };
255
- const balances = async (owner, mints) => {
256
- const [wallet, tokens] = await Promise.all([
257
- transport.getAccount(owner),
258
- Promise.all(mints.map(async (address) => {
259
- const { decimals, tokenProgram } = await mint(address);
260
- const account = await findAssociatedTokenAddress({ owner, mint: address, tokenProgram });
261
- const amount = tokenAmountOf((await createdAccount(transport, account))?.data ?? null) ?? 0n;
262
- return { mint: address, name: tokenName(address), account, amount, decimals };
263
- })),
264
- ]);
265
- return { sol: wallet?.lamports ?? 0n, tokens };
266
- };
267
- const settleProof = async (input) => {
268
- const { judge, owner, nonce, payTo, result } = input;
269
- const payer = input.payer ?? judge;
270
- const [{ address, intent: held }, settings] = await Promise.all([loadIntent(transport, owner, nonce), config()]);
271
- const params = decodeParams(held.kind, Uint8Array.from(held.params));
272
- if (params.kind !== Kind.AttestedResult) {
273
- throw new NotSettleable(address, "is not an AttestedResult intent");
274
- }
275
- if (params.specHash.every((b) => b === 0)) {
276
- throw new NotSettleable(address, "commits no spec hash, so it is not a proof intent");
277
- }
278
- if (held.status !== IntentStatus.Open) {
279
- throw new NotSettleable(address, "is not open");
280
- }
281
- if (params.attestor !== judge.address) {
282
- throw new NotSettleable(address, `names ${params.attestor} as its judge, not ${judge.address}`);
283
- }
284
- const { tokenProgram } = await mint(held.inputMint);
285
- const account = (wallet) => tokenAccountIfMissing(transport, payer, wallet, held.inputMint, tokenProgram);
286
- const amountIn = held.escrowed - held.filled;
287
- const kindBps = feeBpsFor(settings, held.kind);
288
- const maxFeeBps = kindBps + held.partnerBps;
289
- const shares = splitFees(amountIn - params.judgeFee, kindBps, held.partnerBps, held.partnerCutBps);
290
- const feeRecipient = shares.protocol > 0n ? settings.feeRecipient : undefined;
291
- const partner = shares.partner > 0n ? held.partner : undefined;
292
- const paidJudge = params.judgeFee > 0n ? judge.address : undefined;
293
- const payee = await account(payTo);
294
- const others = await Promise.all([feeRecipient, partner, paidJudge].filter((wallet) => wallet !== undefined).map(account));
295
- const fields = { amountIn, result, maxFeeBps };
296
- const message = await attestedProofMessage(judge.address, {
297
- ...fields,
298
- domain: Uint8Array.from(settings.domain),
299
- intent: address,
300
- payee: payee.address,
301
- filled: held.filled,
302
- revision: held.revision,
303
- specHash: params.specHash,
304
- });
305
- const settle = await buildFillAttested({
306
- ...fields,
307
- solver: judge,
308
- owner,
309
- nonce,
310
- inputMint: held.inputMint,
311
- inputTokenProgram: tokenProgram,
312
- payee: payee.address,
313
- ...(feeRecipient === undefined ? {} : { feeRecipient }),
314
- ...(partner === undefined ? {} : { partner }),
315
- ...(paidJudge === undefined ? {} : { judge: paidJudge }),
316
- });
317
- const setup = [payee, ...others].flatMap(({ create }) => create);
318
- return send([...setup, await signEd25519Instruction(judge, message), settle], payer);
319
- };
32
+ const context = { transport, send, mint, config };
33
+ const { createIntent, cancel, unwrap, fill, expire, close } = intentSends(context);
34
+ const { history, fillOf, balances } = clientReads(context);
35
+ const settleProof = proofSettlement(context);
320
36
  return {
321
37
  url,
322
38
  transport,
@@ -352,6 +68,11 @@ export function createClient(options) {
352
68
  expire,
353
69
  close,
354
70
  balances,
71
+ jobs: (filter = {}) => jobsOf(transport, filter.attestor),
72
+ spec: (intent) => readSpec(transport, options.fetch ?? fetch, intent),
73
+ deliver: async (input) => send((await deliveryInstructions(transport, input)).instructions, input.worker),
74
+ deliveries: ({ judge, intent }) => deliveriesOf(transport, judge, intent),
75
+ deliveryRecord: ({ judge, intent, pages }) => deliveryRecord(transport, judge, intent, pages),
355
76
  };
356
77
  }
357
78
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAgF,MAAM,aAAa,CAAC;AAC1I,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAEf,WAAW,EACX,YAAY,EAEZ,YAAY,EACZ,SAAS,EACT,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAGhB,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,qBAAqB,EACrB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,MAAM,EAEN,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAiB,SAAS,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAoB,OAAO,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EACL,WAAW,EACX,mBAAmB,EAEnB,KAAK,EAGL,YAAY,EAEZ,cAAc,GAEf,MAAM,gBAAgB,CAAC;AA6FxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAM,CAAC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC,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,SAAS,UAAU,CAAC,KAAc,EAAE,IAAwB;IAC1D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAkB,EAAiB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE7H,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,aAAa,GAAG,kBAAkB,EAAE,GAAG,OAAO,CAAC;IACnG,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC,eAAe,CAAC,GAAG,CAAuB,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAChH,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAExH,MAAM,KAAK,GAAG,KAAK,EAAE,QAAuB,EAAE,MAAmB,EAAE,MAAM,GAAwB,EAAE,EAAE,EAAE;QACrG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiD,CAAC;QACtE,MAAM,KAAK,GAAG,CAAC,QAAmC,EAAE,EAAE,CACpD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC3C,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACL,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,MAAM,MAAM,GAAG,CAAC,OAAwB,EAAE,MAAuB,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;YAClF,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAClG,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC;QACd,CAAC,CAAC;QACF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,IAAI,EAAE,CAAC;gBACb,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,IAAI,EAAE,CAAC;YACb,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC;oBACnE,MAAM,IAAI,EAAE,CAAC;oBACb,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,EAAE,YAAoC,EAAE,MAAyB,EAAE,EAAE,CACrF,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAc,CAAC;IAEjH,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,OAAgB,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAC9G,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,EAAE,KAAwB,EAA0B,EAAE;QAC9E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACjI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QAC5G,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACtG,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,QAAQ,CAAC,YAAY;YAC/B,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,SAAS,EAAE,QAAQ,CAAC,WAAW;YAC/B,KAAK;YACL,MAAM;YACN,SAAS;YACT,SAAS;YACT,UAAU;YACV,iBAAiB,EAAE,IAAI,CAAC,YAAY;YACpC,kBAAkB,EAAE,GAAG,CAAC,YAAY;YACpC,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;SAC7F,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QACtG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,EAAE,MAAyB,EAAE,KAAa,EAAE,EAAE;QAChE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxI,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACpI,IAAI,CAAC,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,0BAA0B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7G,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAe,EAAE,KAAK,GAAG,aAAa,EAA2B,EAAE,CACxF,CAAC,MAAM,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;SAC/B,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CACnD,OAAO;SACJ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAuB,CAAC;SACtD,MAAM,CAAC,CAAC,KAAK,EAAwB,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;SACrH,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,SAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CACtF,CAAC;IAEN,MAAM,MAAM,GAAG,KAAK,EAAE,MAAe,EAAwB,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;YAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAClC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC/D,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACzF,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBAClG,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBAChC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;oBACrD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAC7H,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAgB,EAAE,EAAE;QACtC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACvC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,2DAA2D,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,IAAI,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACtH,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACpB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC;YAC3F,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;SACrF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,MAAM;YACN,KAAK;YACL,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,YAAY;YACpC,kBAAkB,EAAE,GAAG,CAAC,YAAY;YACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,WAAW,CAAC,OAAO;YAChC,YAAY,EAAE,YAAY,CAAC,OAAO;YAClC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YAC7C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ;YACR,SAAS;YACT,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU;SACrC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAChJ,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,OAA0B,EAAE,KAAc,EAAE,KAAa,EAAE,EAAE;QACnF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IACpH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,EAAE,OAA0B,EAAE,KAAc,EAAE,KAAa,EAAE,EAAE;QACjF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACvG,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,EAAE,OAA0B,EAAE,KAAc,EAAE,KAAa,EAAE,EAAE;QAChF,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAc,EAAE,KAAyB,EAAqB,EAAE;QACtF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;YAC3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAyB,EAAE;gBACjD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;gBACzF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAChF,CAAC,CAAC,CACH;SACF,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,KAAuB,EAAE,EAAE;QACpD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QACnC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACjH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,CAAC,QAAQ,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACnH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACnG,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3H,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE;YACxD,GAAG,MAAM;YACT,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,GAAG,MAAM;YACT,MAAM,EAAE,KAAK;YACb,KAAK;YACL,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,YAAY;YAC/B,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YAC7C,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC,CAAC;IAEF,OAAO;QACL,GAAG;QACH,SAAS;QACT,MAAM;QACN,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,OAAO,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAC7B,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACpC,GAAG,CAAC,OAAO,CAAC;aACZ,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;QAC3F,OAAO;QACP,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/E,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,CACvC,SAAS,CAAC,SAAS,EAAE,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;QACzG,IAAI;QACJ,KAAK;QACL,OAAO;QACP,IAAI;QACJ,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;QACrC,YAAY;QACZ,MAAM;QACN,MAAM;QACN,WAAW;QACX,IAAI;QACJ,MAAM;QACN,MAAM;QACN,KAAK;QACL,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Signature } from "@solana/kit";
2
+ import type { RpcLike } from "./rpc-shapes.js";
3
+ export declare const CONFIRM_POLLS = 360;
4
+ export type Confirmed = {
5
+ slot?: bigint;
6
+ };
7
+ export type SignatureWatch = (signature: Signature, signal: AbortSignal) => Promise<Confirmed | void>;
8
+ export declare function signatureWatch(url: string): SignatureWatch;
9
+ export declare function heardSlot(signature: Signature, note: unknown): Confirmed;
10
+ export declare function confirm(rpc: RpcLike, signature: Signature, lastValidBlockHeight: bigint, wait?: (ms: number) => Promise<void>, watch?: SignatureWatch): Promise<Confirmed>;
11
+ export declare function confirmSent(rpc: RpcLike, signature: Signature, lastValidBlockHeight: bigint, wait?: (ms: number) => Promise<void>, watch?: SignatureWatch): Promise<Confirmed>;
@@ -0,0 +1,94 @@
1
+ import { inspect } from "node:util";
2
+ import { createSolanaRpcSubscriptions } from "@solana/kit";
3
+ import { socketUrl } from "./intent-notifications.js";
4
+ import { BlockhashExpired, Charged, FailedOnChain, patiently, POLL_MS, sleep } from "./rpc-retry.js";
5
+ export const CONFIRM_POLLS = 360;
6
+ export function signatureWatch(url) {
7
+ const subscriptions = createSolanaRpcSubscriptions(socketUrl(url));
8
+ return async (signature, abortSignal) => {
9
+ const notes = await subscriptions.signatureNotifications(signature, { commitment: "confirmed" }).subscribe({ abortSignal });
10
+ const iterator = notes[Symbol.asyncIterator]();
11
+ const next = await iterator.next();
12
+ if (next.done === true) {
13
+ throw new Error(`the signature subscription for ${signature} ended without a notification`);
14
+ }
15
+ return heardSlot(signature, next.value);
16
+ };
17
+ }
18
+ export function heardSlot(signature, note) {
19
+ const { context, value } = (note ?? {});
20
+ const err = value?.err ?? null;
21
+ if (err !== null) {
22
+ throw new FailedOnChain(`transaction ${signature} failed: ${inspect(err)}`);
23
+ }
24
+ return typeof context?.slot === "bigint" ? { slot: context.slot } : {};
25
+ }
26
+ const never = new Promise(() => undefined);
27
+ export async function confirm(rpc, signature, lastValidBlockHeight, wait = sleep, watch) {
28
+ if (watch === undefined) {
29
+ return polled(rpc, signature, lastValidBlockHeight, wait);
30
+ }
31
+ const controller = new AbortController();
32
+ const heard = watch(signature, controller.signal).then((found) => found ?? {}, (error) => {
33
+ if (error instanceof Charged) {
34
+ throw error;
35
+ }
36
+ return never;
37
+ });
38
+ try {
39
+ return await Promise.race([heard, polled(rpc, signature, lastValidBlockHeight, wait, controller.signal)]);
40
+ }
41
+ finally {
42
+ controller.abort();
43
+ }
44
+ }
45
+ function settled(signature, status) {
46
+ if (!status || (status.confirmationStatus !== "confirmed" && status.confirmationStatus !== "finalized")) {
47
+ return null;
48
+ }
49
+ if (status.err !== null) {
50
+ throw new FailedOnChain(`transaction ${signature} failed: ${inspect(status.err)}`);
51
+ }
52
+ return status.slot === undefined ? {} : { slot: status.slot };
53
+ }
54
+ export async function confirmSent(rpc, signature, lastValidBlockHeight, wait = sleep, watch) {
55
+ try {
56
+ return await confirm(rpc, signature, lastValidBlockHeight, wait, watch);
57
+ }
58
+ catch (error) {
59
+ if (error instanceof Charged || error instanceof BlockhashExpired) {
60
+ throw error;
61
+ }
62
+ throw new Charged(`transaction ${signature} was sent but its confirmation could not be read (${error instanceof Error ? error.message : String(error)}); look the signature up before sending again`);
63
+ }
64
+ }
65
+ async function polled(rpc, signature, lastValidBlockHeight, wait, stop) {
66
+ for (let poll = 1; stop?.aborted !== true; poll++) {
67
+ const [status] = (await patiently(() => rpc.getSignatureStatuses([signature]).send(), wait)).value;
68
+ const confirmed = settled(signature, status);
69
+ if (confirmed !== null) {
70
+ return confirmed;
71
+ }
72
+ const epoch = await patiently(() => rpc.getEpochInfo().send(), wait);
73
+ if (epoch.blockHeight > lastValidBlockHeight) {
74
+ const late = await patiently(() => rpc.getSignatureStatuses([signature], { searchTransactionHistory: true }).send(), wait);
75
+ const [found] = late.value;
76
+ const landed = settled(signature, found);
77
+ if (landed !== null) {
78
+ return landed;
79
+ }
80
+ if (found) {
81
+ throw new Charged(`transaction ${signature} landed but is not confirmed yet; look the signature up before sending again`);
82
+ }
83
+ if (late.context.slot >= epoch.absoluteSlot) {
84
+ throw new BlockhashExpired(`transaction ${signature} expired before confirmation`);
85
+ }
86
+ }
87
+ if (poll >= CONFIRM_POLLS) {
88
+ throw new Charged(`transaction ${signature} was neither confirmed nor expired after ${CONFIRM_POLLS} checks; the node may be stuck, so look the signature up before sending again`);
89
+ }
90
+ await wait(POLL_MS);
91
+ }
92
+ return {};
93
+ }
94
+ //# sourceMappingURL=confirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../../src/confirmation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,4BAA4B,EAAkB,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGrG,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAMjC,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,aAAa,GAAG,4BAA4B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5H,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAoB,EAAE,IAAa;IAC3D,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAgE,CAAC;IACvG,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC;IAC/B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,aAAa,CAAC,eAAe,SAAS,YAAY,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,OAAO,CAAY,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAY,EACZ,SAAoB,EACpB,oBAA4B,EAC5B,IAAI,GAAkC,KAAK,EAC3C,KAAsB;IAEtB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CACpD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,EACtB,CAAC,KAAc,EAAE,EAAE;QACjB,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;IACF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,SAAoB,EAAE,MAAiC;IACtE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,KAAK,WAAW,IAAI,MAAM,CAAC,kBAAkB,KAAK,WAAW,CAAC,EAAE,CAAC;QACxG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,aAAa,CAAC,eAAe,SAAS,YAAY,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAY,EACZ,SAAoB,EACpB,oBAA4B,EAC5B,IAAI,GAAkC,KAAK,EAC3C,KAAsB;IAEtB,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAO,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,OAAO,CACf,eAAe,SAAS,qDAAqD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CACnL,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,GAAY,EACZ,SAAoB,EACpB,oBAA4B,EAC5B,IAAmC,EACnC,IAAkB;IAElB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACnG,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,WAAW,GAAG,oBAAoB,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3H,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,OAAO,CAAC,eAAe,SAAS,8EAA8E,CAAC,CAAC;YAC5H,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC5C,MAAM,IAAI,gBAAgB,CAAC,eAAe,SAAS,8BAA8B,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,OAAO,CACf,eAAe,SAAS,4CAA4C,aAAa,+EAA+E,CACjK,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -2,5 +2,6 @@ export * from "./accounts.js";
2
2
  export * from "./budget.js";
3
3
  export * from "./client.js";
4
4
  export * from "./errors.js";
5
+ export * from "./jobs.js";
5
6
  export * from "./setup.js";
6
7
  export * from "./transport.js";
package/dist/src/index.js CHANGED
@@ -2,6 +2,7 @@ export * from "./accounts.js";
2
2
  export * from "./budget.js";
3
3
  export * from "./client.js";
4
4
  export * from "./errors.js";
5
+ export * from "./jobs.js";
5
6
  export * from "./setup.js";
6
7
  export * from "./transport.js";
7
8
  //# 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,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,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,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ProgramAccount } from "./rpc-shapes.js";
2
+ export type IntentChanges = {
3
+ wait(seconds: number): Promise<ProgramAccount[] | null>;
4
+ close(): void;
5
+ slot?(): bigint | undefined;
6
+ };
7
+ export type Notifications = (signal: AbortSignal) => Promise<AsyncIterable<unknown>>;
8
+ export declare function socketUrl(url: string): string;
9
+ export declare function intentNotifications(url: string): Notifications;
10
+ export declare function changedAccount(note: unknown): ProgramAccount | null;
11
+ export declare const RECONNECT_MS: readonly number[];
12
+ export declare function pause(ms: number, signal: AbortSignal): Promise<void>;
13
+ export declare function changesFrom(notifications: Notifications, reconnect?: readonly number[]): IntentChanges;
@@ -0,0 +1,106 @@
1
+ import { createSolanaRpcSubscriptions, getBase58Decoder, } from "@solana/kit";
2
+ import { getIntentDiscriminatorBytes, getIntentSize, INTENT_ENGINE_PROGRAM_ADDRESS } from "@intent-engine/core";
3
+ export function socketUrl(url) {
4
+ const parsed = new URL(url);
5
+ parsed.protocol = parsed.protocol === "http:" ? "ws:" : "wss:";
6
+ if (parsed.port === "8899") {
7
+ parsed.port = "8900";
8
+ }
9
+ return parsed.toString();
10
+ }
11
+ export function intentNotifications(url) {
12
+ const subscriptions = createSolanaRpcSubscriptions(socketUrl(url));
13
+ return (abortSignal) => subscriptions
14
+ .programNotifications(INTENT_ENGINE_PROGRAM_ADDRESS, {
15
+ commitment: "confirmed",
16
+ encoding: "base64",
17
+ filters: [
18
+ { dataSize: BigInt(getIntentSize()) },
19
+ { memcmp: { offset: 0n, bytes: getBase58Decoder().decode(getIntentDiscriminatorBytes()), encoding: "base58" } },
20
+ ],
21
+ })
22
+ .subscribe({ abortSignal });
23
+ }
24
+ export function changedAccount(note) {
25
+ const value = note?.value;
26
+ const data = value?.account?.data;
27
+ if (typeof value?.pubkey !== "string" || !Array.isArray(data) || typeof data[0] !== "string") {
28
+ return null;
29
+ }
30
+ return { address: value.pubkey, data: new Uint8Array(Buffer.from(data[0], "base64")) };
31
+ }
32
+ export const RECONNECT_MS = [1_000, 2_000, 5_000, 10_000, 30_000];
33
+ export function pause(ms, signal) {
34
+ return new Promise((resolve) => {
35
+ const stop = () => {
36
+ clearTimeout(timer);
37
+ resolve();
38
+ };
39
+ const timer = setTimeout(() => {
40
+ signal.removeEventListener("abort", stop);
41
+ resolve();
42
+ }, ms);
43
+ signal.addEventListener("abort", stop, { once: true });
44
+ });
45
+ }
46
+ export function changesFrom(notifications, reconnect = RECONNECT_MS) {
47
+ const controller = new AbortController();
48
+ const pending = new Map();
49
+ let wake;
50
+ let highest;
51
+ const drain = () => {
52
+ const changed = [...pending].map(([address, data]) => ({ address, data }));
53
+ pending.clear();
54
+ return changed;
55
+ };
56
+ let failures = 0;
57
+ const consume = async () => {
58
+ const iterator = (await notifications(controller.signal))[Symbol.asyncIterator]();
59
+ for (let next = await iterator.next(); next.done !== true; next = await iterator.next()) {
60
+ failures = 0;
61
+ const changed = changedAccount(next.value);
62
+ if (changed !== null) {
63
+ const slot = next.value.context?.slot;
64
+ if (typeof slot === "bigint" && (highest === undefined || slot > highest)) {
65
+ highest = slot;
66
+ }
67
+ pending.set(changed.address, changed.data);
68
+ wake?.();
69
+ }
70
+ }
71
+ };
72
+ const listen = async () => {
73
+ while (!controller.signal.aborted) {
74
+ await consume().catch(() => undefined);
75
+ if (controller.signal.aborted) {
76
+ return;
77
+ }
78
+ await pause(reconnect[Math.min(failures, reconnect.length - 1)] ?? 0, controller.signal);
79
+ failures++;
80
+ }
81
+ };
82
+ void listen();
83
+ return {
84
+ wait: (seconds) => new Promise((resolve) => {
85
+ if (pending.size > 0) {
86
+ resolve(drain());
87
+ return;
88
+ }
89
+ const timer = setTimeout(() => {
90
+ wake = undefined;
91
+ resolve([]);
92
+ }, seconds * 1000);
93
+ wake = () => {
94
+ clearTimeout(timer);
95
+ wake = undefined;
96
+ resolve(drain());
97
+ };
98
+ }),
99
+ close: () => {
100
+ wake?.();
101
+ controller.abort();
102
+ },
103
+ slot: () => highest,
104
+ };
105
+ }
106
+ //# sourceMappingURL=intent-notifications.js.map