@intent-engine/cli 0.1.43 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/src/add-to.d.ts +2 -0
  2. package/dist/src/add-to.js +7 -1
  3. package/dist/src/add-to.js.map +1 -1
  4. package/dist/src/agent/jobs.d.ts +1 -0
  5. package/dist/src/agent/jobs.js +4 -2
  6. package/dist/src/agent/jobs.js.map +1 -1
  7. package/dist/src/agent/problems.js +12 -12
  8. package/dist/src/agent/problems.js.map +1 -1
  9. package/dist/src/agent/wallet/account.d.ts +1 -0
  10. package/dist/src/agent/wallet/account.js +12 -6
  11. package/dist/src/agent/wallet/account.js.map +1 -1
  12. package/dist/src/agent/wallet/delivery.d.ts +2 -1
  13. package/dist/src/agent/wallet/delivery.js +10 -7
  14. package/dist/src/agent/wallet/delivery.js.map +1 -1
  15. package/dist/src/agent/wallet/escrow.d.ts +5 -0
  16. package/dist/src/agent/wallet/escrow.js +85 -22
  17. package/dist/src/agent/wallet/escrow.js.map +1 -1
  18. package/dist/src/agent/wallet/receipt.d.ts +4 -2
  19. package/dist/src/agent/wallet/receipt.js +8 -2
  20. package/dist/src/agent/wallet/receipt.js.map +1 -1
  21. package/dist/src/agent/wallet/unwrap.d.ts +2 -0
  22. package/dist/src/agent/wallet/unwrap.js +10 -3
  23. package/dist/src/agent/wallet/unwrap.js.map +1 -1
  24. package/dist/src/arg-options.d.ts +6 -0
  25. package/dist/src/arg-options.js +2 -1
  26. package/dist/src/arg-options.js.map +1 -1
  27. package/dist/src/arg-usage.js +36 -36
  28. package/dist/src/arg-usage.js.map +1 -1
  29. package/dist/src/command-types.d.ts +1 -0
  30. package/dist/src/monitor-args.d.ts +2 -0
  31. package/dist/src/monitor-args.js +9 -2
  32. package/dist/src/monitor-args.js.map +1 -1
  33. package/dist/src/monitor-fills.d.ts +2 -2
  34. package/dist/src/monitor-fills.js +9 -5
  35. package/dist/src/monitor-fills.js.map +1 -1
  36. package/dist/src/monitor-limits.d.ts +25 -0
  37. package/dist/src/monitor-limits.js +58 -0
  38. package/dist/src/monitor-limits.js.map +1 -0
  39. package/dist/src/monitor.d.ts +6 -1
  40. package/dist/src/monitor.js +50 -27
  41. package/dist/src/monitor.js.map +1 -1
  42. package/dist/src/version.d.ts +1 -1
  43. package/dist/src/version.js +1 -1
  44. package/dist/src/wallet.d.ts +5 -2
  45. package/dist/src/wallet.js +25 -19
  46. package/dist/src/wallet.js.map +1 -1
  47. package/package.json +4 -4
@@ -12,53 +12,53 @@ export const SHAPES = {
12
12
  pda: "--owner <address> --nonce <n>",
13
13
  hash: "--artifact <file or directory>",
14
14
  seal: "--file <file> --to <wallet,...> --out <file>",
15
- unseal: "--file <sealed file> --keypair <file> --out <file>",
15
+ unseal: "--file <sealed file> [--keypair <file>] --out <file>",
16
16
  spec: "--intent <escrow address> [--keypair <file>] [--out <file>]",
17
17
  show: "config | intent --owner <address> --nonce <n> | mint-cap --mint <mint>",
18
18
  domain: "",
19
19
  mcp: "[--wallet [--wallet-per-trade <token=amount,...>] [--wallet-per-hour <token=amount,...>] [--all-tools]] [--relayer <keypair> --relay-fee <mint=amount,...> [--relay-max-lamports] [--relay-max-ttl] [--relay-per-hour] [--relay-hourly-lamports]] [--agent <keypair> --agent-owners <address,...> [--agent-hourly-lamports]] [--fee-payer <key file, with --wallet>] [--encryption-keypair <encryption key file, with --wallet> ...] [--confirm-url <cluster> | --no-confirm-url]",
20
20
  quote: "--owner <address> --nonce <n> [--at <unix>]",
21
- cancel: "--keypair <file> --nonce <n> [--close] [--yes]",
22
- expire: "--keypair <file> --owner <address> --nonce <n> [--yes]",
23
- close: "--keypair <file> --owner <address> --nonce <n> [--yes]",
24
- "advance-nonce": "--keypair <file> --base <n>",
25
- "close-legacy": "--keypair <payer> --address <account> [--yes]",
26
- migrate: "--keypair <payer> (--address <account> | --all) [--yes]",
27
- "advance-epoch": "--keypair <file>",
28
- "init-config": "(--keypair <file> [--yes] | --authority <address>) --guardian --fee-recipient --fee-bps --kinds [--flags create|fill|all]",
29
- "update-config": "(--keypair <file> [--yes] | --authority <address>) and any of --guardian --fee-recipient --fee-bps --kinds --fill-disabled",
30
- "propose-admin": "(--keypair <file> [--yes] | --authority <address>) --new-admin <address>",
31
- "accept-admin": "(--keypair <file> [--yes] | --authority <address>)",
32
- "set-mint-cap": "(--keypair <file> [--yes] | --authority <address>) --mint <mint> --max-per-order <raw> --window-cap <raw> --window-secs <n> [--total-limit <raw>]",
33
- "set-caps-required": "on|off (--keypair <file> [--yes] | --authority <address>)",
34
- "set-committee-floor": "(--keypair <file> [--yes] | --authority <address>) --mint <mint> --floor <raw>",
35
- "raise-pause": "(--keypair <file> [--yes] | --authority <address>) --flags create|fill|all",
36
- "lower-pause": "(--keypair <file> [--yes] | --authority <address>) --flags create|fill|all",
37
- "set-economics": "(--keypair <file> [--yes] | --authority <address>) --bounty --create-fee [--kind-fees] [--partner-cut]",
38
- solve: "--keypair <file> [--inventory <input mint>:<output mint>=<out>/<in>,... [--inventory-owner <address>]] [--jupiter <url> | --issue <input mint>:<output mint>=<out>/<in>,...] --min-profit <output mint=raw,...> [--sol-value <mint>=<raw>/<lamports>,...] [--target-profit <output mint=raw,...> [--patience <seconds>]] [--priority-fee <micro-lamports|auto>] [--max-fee-bps <n>] [--max-sol-cost <SOL>] [--max-rent <SOL>] [--slippage-bps <n>] [--jito <url> [--tip <lamports>] [--bundle-size <n>]] [--route-program <program the aggregator swaps through>] [--lookup-table <address,...>] [--concurrency <n>] [--watch [--interval <seconds>] [--quote-ttl <seconds>] [--stats]] [--confirm-url <cluster>]",
21
+ cancel: "[--keypair <file>] --nonce <n> [--close] [--yes]",
22
+ expire: "[--keypair <file>] --owner <address> --nonce <n> [--yes]",
23
+ close: "[--keypair <file>] --owner <address> --nonce <n> [--yes]",
24
+ "advance-nonce": "[--keypair <file>] --base <n>",
25
+ "close-legacy": "[--keypair <payer>] --address <account> [--yes]",
26
+ migrate: "[--keypair <payer>] (--address <account> | --all) [--yes]",
27
+ "advance-epoch": "[--keypair <file>]",
28
+ "init-config": "([--keypair <file>] [--yes] | --authority <address>) --guardian --fee-recipient --fee-bps --kinds [--flags create|fill|all]",
29
+ "update-config": "([--keypair <file>] [--yes] | --authority <address>) and any of --guardian --fee-recipient --fee-bps --kinds --fill-disabled",
30
+ "propose-admin": "([--keypair <file>] [--yes] | --authority <address>) --new-admin <address>",
31
+ "accept-admin": "([--keypair <file>] [--yes] | --authority <address>)",
32
+ "set-mint-cap": "([--keypair <file>] [--yes] | --authority <address>) --mint <mint> --max-per-order <raw> --window-cap <raw> --window-secs <n> [--total-limit <raw>]",
33
+ "set-caps-required": "on|off ([--keypair <file>] [--yes] | --authority <address>)",
34
+ "set-committee-floor": "([--keypair <file>] [--yes] | --authority <address>) --mint <mint> --floor <raw>",
35
+ "raise-pause": "([--keypair <file>] [--yes] | --authority <address>) --flags create|fill|all",
36
+ "lower-pause": "([--keypair <file>] [--yes] | --authority <address>) --flags create|fill|all",
37
+ "set-economics": "([--keypair <file>] [--yes] | --authority <address>) --bounty --create-fee [--kind-fees] [--partner-cut]",
38
+ solve: "[--keypair <file>] [--inventory <input mint>:<output mint>=<out>/<in>,... [--inventory-owner <address>]] [--jupiter <url> | --issue <input mint>:<output mint>=<out>/<in>,...] --min-profit <output mint=raw,...> [--sol-value <mint>=<raw>/<lamports>,...] [--target-profit <output mint=raw,...> [--patience <seconds>]] [--priority-fee <micro-lamports|auto>] [--max-fee-bps <n>] [--max-sol-cost <SOL>] [--max-rent <SOL>] [--slippage-bps <n>] [--jito <url> [--tip <lamports>] [--bundle-size <n>]] [--route-program <program the aggregator swaps through>] [--lookup-table <address,...>] [--concurrency <n>] [--watch [--interval <seconds>] [--quote-ttl <seconds>] [--stats]] [--confirm-url <cluster>]",
39
39
  "solver-table": "--solver <address> --mints <mint,...>",
40
- solver: "float --keypair <owner file> --delegate <solver address> --mint <mint> --amount <amount> [--units tokens|raw] [--yes] | float show --owner <address> --delegate <solver address> [--mints <mint,...>] | float revoke --keypair <owner file> --mint <mint> [--yes]",
41
- crank: "--keypair <file> [--dry-run] [--fund-accounts]",
42
- treasury: "[--mints <mint,...>] [--create --mints <mint,...> --keypair <payer file> [--yes]]",
40
+ solver: "float [--keypair <owner file>] --delegate <solver address> --mint <mint> --amount <amount> [--units tokens|raw] [--yes] | float show --owner <address> --delegate <solver address> [--mints <mint,...>] | float revoke [--keypair <owner file>] --mint <mint> [--yes]",
41
+ crank: "[--keypair <file>] [--dry-run] [--fund-accounts]",
42
+ treasury: "[--mints <mint,...>] [--create --mints <mint,...> [--keypair <payer file>] [--yes]]",
43
43
  events: "[--limit <n>] [--follow [--interval <seconds>]]",
44
44
  jobs: "[--attestor <address>] [--mint <SOL, TEST or mint>] [--min-pay <tokens>] [--unclaimed]",
45
- deliver: "--keypair <worker file> --intent <address> (--artifact <file or directory> | --sha256 <64 hex>) --work-url <https url> [--yes]",
45
+ deliver: "[--keypair <worker file>] --intent <address> (--artifact <file or directory> | --sha256 <64 hex>) --work-url <https url> [--yes]",
46
46
  deliveries: "--attestor <address> --intent <address> [--max-pages <n>] [--judge-keypair <judge or member file>] [--encryption-keypair <encryption key file> ...]",
47
47
  receipt: "--owner <address> --nonce <n> [--sha256 <64 hex>] [--release <signature>]",
48
- "record-delivery": "--keypair <judge file> --owner <address> --nonce <n> --sha256 <64 hex> [--release <signature>] [--yes]",
48
+ "record-delivery": "[--keypair <judge file>] --owner <address> --nonce <n> --sha256 <64 hex> [--release <signature>] [--yes]",
49
49
  reputation: "--worker <address> [--max-pages <n>] [--reader <address> [--seed <address>]...]",
50
- feedback: "--keypair <owner file> --intent <address> --score <0 to 100> [--note <sha256 of a note>] [--yes]",
51
- committee: "create --keypair <payer file> --members <address,...> --threshold <n> --fee-wallet <address> [--yes] | show --committee <address> | vote --keypair <member file> --owner <address> --nonce <n> --pay-to <wallet> --result <n> [--out <file>] [--yes] | release --keypair <solver file> --vote <file> [--vote <file> ...] [--sha256 <64 hex>] [--confirm-url <cluster> | --no-confirm-url] [--yes]",
52
- claims: "show --owner <address> --nonce <n> | open --keypair <owner file> --nonce <n> --max-secs <seconds> --stake <SOL> [--yes] | take --keypair <worker file> --owner <address> --nonce <n> --secs <seconds> [--yes] | drop --keypair <worker file> --owner <address> --nonce <n> [--yes] | settle --keypair <payer file> --owner <address> --nonce <n> [--yes] | standby --keypair <worker file> --owner <address> --nonce <n> --secs <seconds> [--yes] | leave --keypair <file> --owner <address> --nonce <n> [--seq <n>] [--yes] | advance --keypair <payer file> --owner <address> --nonce <n> [--yes]",
53
- profile: "show --wallet <address> | set --keypair <file> --skills <tag,...> --endpoint <https url> [--doc-url <https url> --doc-sha256 <64 hex>] [--encryption-key <base58> | --encryption-key none] [--yes] | close --keypair <file> [--yes] | encryption-key new --out <file>",
54
- judge: "--keypair <judge file> --owner <address> --nonce <n> --spec <file> (--artifact <file or directory> | --watch [--interval <seconds>]) (--run <command> | --sandbox viper) [--pay-to <wallet>] [--result <n>] [--timeout <seconds>] [--verdict <file>] [--max-pages <n>] [--check <file or directory>] [--sandbox docker|viper|none] [--sandbox-image <name>@sha256:<64 hex>] [--sandbox-memory <n>m|<n>g] [--sandbox-cpus <n>] [--plain-node] [--fee-payer <key file, with a Ledger --keypair>] [--encryption-keypair <encryption key file> ...] [--confirm-url <cluster> | --no-confirm-url] [--yes] | digest --owner <address> --nonce <n> --pay-to <wallet> [--result <n>]",
55
- create: `swap|limit|dutch|attested --keypair <file> --input-mint --output-mint (--expires-at | --expires-in) ${ORDER_SHAPE} [--nonce <n>] [--pay-to <wallet>] ${PARTNER_SHAPE} [--units tokens|raw] [--yes]; attested takes [--spec-hash <64 hex> [--judge-fee <amount>] [--spec-url <https url>]] to make a proof escrow`,
56
- list: "--owner <address> or --keypair <file>; --owner wins when both are given",
57
- mandate: `grant --keypair <file> --agent --input-mint --output-mint --kinds --per-intent --total --max-intents --max-ttl --valid-for --floor-out --floor-in [--agent-fee] ${PARTNER_SHAPE} [--id] [--units tokens|raw] [--yes] | show --agent (--owner <address> | --keypair <file>) [--id] | revoke --keypair <file> --agent [--id] [--yes] | use swap|limit|dutch --keypair <file> --owner (--expires-at | --expires-in) ${MANDATE_ORDER_SHAPE} [--id] [--nonce <n>] [--units tokens|raw] [--yes]`,
58
- approve: "--keypair <file> --mint <mint> --amount <amount> [--units tokens|raw] [--yes]",
59
- "revoke-approval": "--keypair <file> --mint <mint> [--yes]",
60
- monitor: `--expect <baseline file> [--interval <seconds>] [--max-fill <mint>=<raw amount>]... [--max-fills <count>] [--webhook <https url>] [--once] | --write-baseline <file>; prints each alert as one JSON line; with --once it exits 0 when nothing alerted and ${EXIT_ALERTED} when anything did`,
61
- signed: `prepare swap|limit|dutch|attested --keypair <file> --out <file> --input-mint --output-mint (--expires-at | --expires-in) ${ORDER_SHAPE} [--nonce <n>] [--submit-within <seconds>] [--relayer-fee] ${PARTNER_SHAPE} [--units tokens|raw] [--yes] | submit --keypair <relayer file> --file <file> [--yes]`,
50
+ feedback: "[--keypair <owner file>] --intent <address> --score <0 to 100> [--note <sha256 of a note>] [--yes]",
51
+ committee: "create [--keypair <payer file>] --members <address,...> --threshold <n> --fee-wallet <address> [--yes] | show --committee <address> | vote [--keypair <member file>] --owner <address> --nonce <n> --pay-to <wallet> --result <n> [--out <file>] [--yes] | release [--keypair <solver file>] --vote <file> [--vote <file> ...] [--sha256 <64 hex>] [--confirm-url <cluster> | --no-confirm-url] [--yes]",
52
+ claims: "show --owner <address> --nonce <n> | open [--keypair <owner file>] --nonce <n> --max-secs <seconds> --stake <SOL> [--yes] | take [--keypair <worker file>] --owner <address> --nonce <n> --secs <seconds> [--yes] | drop [--keypair <worker file>] --owner <address> --nonce <n> [--yes] | settle [--keypair <payer file>] --owner <address> --nonce <n> [--yes] | standby [--keypair <worker file>] --owner <address> --nonce <n> --secs <seconds> [--yes] | leave [--keypair <file>] --owner <address> --nonce <n> [--seq <n>] [--yes] | advance [--keypair <payer file>] --owner <address> --nonce <n> [--yes]",
53
+ profile: "show --wallet <address> | set [--keypair <file>] --skills <tag,...> --endpoint <https url> [--doc-url <https url> --doc-sha256 <64 hex>] [--encryption-key <base58> | --encryption-key none] [--yes] | close [--keypair <file>] [--yes] | encryption-key new --out <file>",
54
+ judge: "[--keypair <judge file>] --owner <address> --nonce <n> --spec <file> (--artifact <file or directory> | --watch [--interval <seconds>]) (--run <command> | --sandbox viper) [--pay-to <wallet>] [--result <n>] [--timeout <seconds>] [--verdict <file>] [--max-pages <n>] [--check <file or directory>] [--sandbox docker|viper|none] [--sandbox-image <name>@sha256:<64 hex>] [--sandbox-memory <n>m|<n>g] [--sandbox-cpus <n>] [--plain-node] [--fee-payer <key file, with a Ledger --keypair>] [--encryption-keypair <encryption key file> ...] [--confirm-url <cluster> | --no-confirm-url] [--yes] | digest --owner <address> --nonce <n> --pay-to <wallet> [--result <n>]",
55
+ create: `swap|limit|dutch|attested [--keypair <file>] --input-mint --output-mint (--expires-at | --expires-in) ${ORDER_SHAPE} [--nonce <n>] [--pay-to <wallet>] ${PARTNER_SHAPE} [--units tokens|raw] [--yes]; attested takes [--spec-hash <64 hex> [--judge-fee <amount>] [--spec-url <https url>]] to make a proof escrow`,
56
+ list: "[--owner <address> | --keypair <file>]; --owner wins when both are given",
57
+ mandate: `grant [--keypair <file>] --agent --input-mint --output-mint --kinds --per-intent --total --max-intents --max-ttl --valid-for --floor-out --floor-in [--agent-fee] ${PARTNER_SHAPE} [--id] [--units tokens|raw] [--yes] | show --agent [--owner <address> | --keypair <file>] [--id] | revoke [--keypair <file>] --agent [--id] [--yes] | use swap|limit|dutch [--keypair <file>] --owner (--expires-at | --expires-in) ${MANDATE_ORDER_SHAPE} [--id] [--nonce <n>] [--units tokens|raw] [--yes]`,
58
+ approve: "[--keypair <file>] --mint <mint> --amount <amount> [--units tokens|raw] [--yes]",
59
+ "revoke-approval": "[--keypair <file>] --mint <mint> [--yes]",
60
+ monitor: `--expect <baseline file> [--interval <seconds>] [--max-fill <mint>=<raw amount>]... [--max-fills <count>] [--webhook <https url>] [--once [--since <seconds>]] | --write-baseline <file>; prints each alert as one JSON line; with --once it reads fills of the last --since seconds, the interval by default, and exits 0 when nothing alerted and ${EXIT_ALERTED} when anything did`,
61
+ signed: `prepare swap|limit|dutch|attested [--keypair <file>] --out <file> --input-mint --output-mint (--expires-at | --expires-in) ${ORDER_SHAPE} [--nonce <n>] [--submit-within <seconds>] [--relayer-fee] ${PARTNER_SHAPE} [--units tokens|raw] [--yes] | submit --keypair <relayer file> --file <file> [--yes]`,
62
62
  };
63
63
  export function usageOf(verb) {
64
64
  const known = verb !== undefined && ACCEPTS[verb] !== undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"arg-usage.js","sourceRoot":"","sources":["../../src/arg-usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arg-usage.js","sourceRoot":"","sources":["../../src/arg-usage.ts"],"names":[],"mappings":"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"}
@@ -419,6 +419,7 @@ export type Command = {
419
419
  });
420
420
  export type MonitorSpec = {
421
421
  interval: number;
422
+ since: number;
422
423
  maxFill: ReadonlyMap<Address, bigint>;
423
424
  maxFills: number | null;
424
425
  webhook: string | null;
@@ -5,7 +5,9 @@ export declare const MONITOR_INTERVAL = 30;
5
5
  export declare const MIN_MONITOR_INTERVAL = 5;
6
6
  export declare const MAX_MONITOR_INTERVAL = 3600;
7
7
  export declare const MAX_MONITOR_FILLS = 999;
8
+ export declare const MAX_MONITOR_SINCE = 86400;
8
9
  export declare const MONITOR_NEEDS_BASELINE = "monitor needs --expect <baseline file>; write one first with monitor --write-baseline <file> after checking the current config and program are the ones you intend";
9
10
  export declare const BASELINE_ALONE = "--write-baseline writes the current values and exits, so it takes no other monitor option but --url";
11
+ export declare const SINCE_NEEDS_ONCE = "--since sets how far back --once reads fills, so it needs --once";
10
12
  export declare const MAX_FILL_FORMAT = "--max-fill takes <mint>=<raw amount>, once per input mint";
11
13
  export declare function monitorOf(remote: Remote, values: Values): Command;
@@ -5,8 +5,10 @@ export const MONITOR_INTERVAL = 30;
5
5
  export const MIN_MONITOR_INTERVAL = 5;
6
6
  export const MAX_MONITOR_INTERVAL = 3_600;
7
7
  export const MAX_MONITOR_FILLS = 999;
8
+ export const MAX_MONITOR_SINCE = 86_400;
8
9
  export const MONITOR_NEEDS_BASELINE = "monitor needs --expect <baseline file>; write one first with monitor --write-baseline <file> after checking the current config and program are the ones you intend";
9
10
  export const BASELINE_ALONE = "--write-baseline writes the current values and exits, so it takes no other monitor option but --url";
11
+ export const SINCE_NEEDS_ONCE = "--since sets how far back --once reads fills, so it needs --once";
10
12
  export const MAX_FILL_FORMAT = "--max-fill takes <mint>=<raw amount>, once per input mint";
11
13
  function maxFills(entries, url) {
12
14
  const limits = new Map();
@@ -28,7 +30,7 @@ function maxFills(entries, url) {
28
30
  return limits;
29
31
  }
30
32
  export function monitorOf(remote, values) {
31
- const watching = [values.expect, values.interval, values["max-fill"], values["max-fills"], values.webhook, values.once];
33
+ const watching = [values.expect, values.interval, values["max-fill"], values["max-fills"], values.webhook, values.once, values.since];
32
34
  const write = values["write-baseline"];
33
35
  if (write !== undefined) {
34
36
  if (watching.some((v) => v !== undefined)) {
@@ -42,12 +44,17 @@ export function monitorOf(remote, values) {
42
44
  if (values.webhook !== undefined) {
43
45
  https(values.webhook, "webhook");
44
46
  }
47
+ if (values.since !== undefined && values.once !== true) {
48
+ throw new UsageError(SINCE_NEEDS_ONCE);
49
+ }
50
+ const interval = parseBounded(values.interval ?? String(MONITOR_INTERVAL), "interval", MAX_MONITOR_INTERVAL, MIN_MONITOR_INTERVAL);
45
51
  return {
46
52
  name: "monitor",
47
53
  ...remote,
48
54
  baseline: values.expect,
49
55
  watch: {
50
- interval: parseBounded(values.interval ?? String(MONITOR_INTERVAL), "interval", MAX_MONITOR_INTERVAL, MIN_MONITOR_INTERVAL),
56
+ interval,
57
+ since: values.since === undefined ? interval : parseBounded(values.since, "since", MAX_MONITOR_SINCE, 1),
51
58
  maxFill: maxFills(values["max-fill"] ?? [], remote.url),
52
59
  maxFills: values["max-fills"] === undefined ? null : parseBounded(values["max-fills"], "max-fills", MAX_MONITOR_FILLS),
53
60
  webhook: values.webhook ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"monitor-args.js","sourceRoot":"","sources":["../../src/monitor-args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monitor-args.js","sourceRoot":"","sources":["../../src/monitor-args.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,6 @@ export type SeenFill = {
8
8
  };
9
9
  export declare function fillsIn(transactions: readonly EngineTransaction[]): {
10
10
  fills: SeenFill[];
11
- created: Map<Address, Address>;
11
+ known: Map<Address, Address>;
12
12
  };
13
- export declare function inputMintsOf(transport: Transport, fills: readonly SeenFill[], created: ReadonlyMap<Address, Address>): Promise<Map<Address, Address>>;
13
+ export declare function inputMintsOf(transport: Transport, fills: readonly SeenFill[], known: ReadonlyMap<Address, Address>): Promise<Map<Address, Address>>;
@@ -2,7 +2,7 @@ import { decodeEvent, getIntentDecoder, INTENT_ENGINE_PROGRAM_ADDRESS } from "@i
2
2
  const PAID_IN_ONE_STEP = new Set(["IntentFilled", "IntentAttested", "IntentSplit"]);
3
3
  export function fillsIn(transactions) {
4
4
  const fills = [];
5
- const created = new Map();
5
+ const known = new Map();
6
6
  for (const tx of transactions) {
7
7
  if (tx.failed) {
8
8
  continue;
@@ -15,7 +15,7 @@ export function fillsIn(transactions) {
15
15
  const fields = event.fields;
16
16
  const intent = fields["intent"];
17
17
  if (event.name === "IntentCreated") {
18
- created.set(intent, fields["inputMint"]);
18
+ known.set(intent, fields["inputMint"]);
19
19
  }
20
20
  if (event.name === "FillBegun") {
21
21
  begun.set(intent, fields["amountIn"]);
@@ -27,13 +27,17 @@ export function fillsIn(transactions) {
27
27
  : undefined;
28
28
  if (amountIn !== undefined) {
29
29
  fills.push({ signature: tx.signature, slot: tx.slot, intent, amountIn: amountIn ?? 0n });
30
+ const vault = tx.tokens?.find((held) => held.owner === intent);
31
+ if (vault !== undefined && !known.has(intent)) {
32
+ known.set(intent, vault.mint);
33
+ }
30
34
  }
31
35
  }
32
36
  }
33
- return { fills, created };
37
+ return { fills, known };
34
38
  }
35
- export async function inputMintsOf(transport, fills, created) {
36
- const mints = new Map(created);
39
+ export async function inputMintsOf(transport, fills, known) {
40
+ const mints = new Map(known);
37
41
  const unknown = [...new Set(fills.map((f) => f.intent).filter((intent) => !mints.has(intent)))];
38
42
  if (unknown.length === 0) {
39
43
  return mints;
@@ -1 +1 @@
1
- {"version":3,"file":"monitor-fills.js","sourceRoot":"","sources":["../../src/monitor-fills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monitor-fills.js","sourceRoot":"","sources":["../../src/monitor-fills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type Config } from "@intent-engine/core";
2
+ import type { EngineAccountFilter, Transport } from "@intent-engine/client";
3
+ export declare const CAP_LIMITS: readonly ["maxPerOrder", "windowCap", "windowSecs", "totalLimit"];
4
+ type CapLimit = (typeof CAP_LIMITS)[number];
5
+ export type CapLimits = Record<CapLimit, string | number>;
6
+ export type Floors = Record<string, string>;
7
+ export type MintCaps = Record<string, CapLimits>;
8
+ export declare const MINT_CAP_FILTER: EngineAccountFilter;
9
+ export declare const NO_FLOOR = "0";
10
+ export declare const CANNOT_LIST = "this connection cannot list program accounts, so the monitor cannot read every mint cap";
11
+ export declare function floorsOf(config: Pick<Config, "floorMints" | "floorAmounts">): Floors;
12
+ export declare function mintCapsOf(transport: Transport): Promise<MintCaps>;
13
+ export declare function isFloors(v: unknown): v is Floors;
14
+ export declare function isMintCaps(v: unknown): v is MintCaps;
15
+ export type LimitChange = {
16
+ key: string;
17
+ kind: "committee-floor" | "mint-cap-limit";
18
+ field: string;
19
+ mint: string;
20
+ expected: unknown;
21
+ observed: unknown;
22
+ };
23
+ export declare function floorChanges(baseline: Floors, now: Floors): LimitChange[];
24
+ export declare function capChanges(baseline: MintCaps, now: MintCaps, missing: string): LimitChange[];
25
+ export {};
@@ -0,0 +1,58 @@
1
+ import { committeeFloors, decodeMintCapData, getMintCapSize, isMintCapData, MINT_CAP_DISCRIMINATOR, } from "@intent-engine/core";
2
+ export const CAP_LIMITS = ["maxPerOrder", "windowCap", "windowSecs", "totalLimit"];
3
+ export const MINT_CAP_FILTER = { discriminator: MINT_CAP_DISCRIMINATOR, dataSize: getMintCapSize() };
4
+ export const NO_FLOOR = "0";
5
+ export const CANNOT_LIST = "this connection cannot list program accounts, so the monitor cannot read every mint cap";
6
+ const sortedKeys = (record) => Object.fromEntries(Object.entries(record).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
7
+ export function floorsOf(config) {
8
+ return sortedKeys(Object.fromEntries(committeeFloors(config).map(({ mint, floor }) => [mint, floor.toString()])));
9
+ }
10
+ export async function mintCapsOf(transport) {
11
+ if (transport.engineAccounts === undefined) {
12
+ throw new Error(CANNOT_LIST);
13
+ }
14
+ const caps = {};
15
+ for (const account of await transport.engineAccounts(MINT_CAP_FILTER)) {
16
+ if (!isMintCapData(account.data)) {
17
+ continue;
18
+ }
19
+ const cap = decodeMintCapData(account.data);
20
+ caps[cap.mint] = {
21
+ maxPerOrder: cap.maxPerOrder.toString(),
22
+ windowCap: cap.windowCap.toString(),
23
+ windowSecs: cap.windowSecs,
24
+ totalLimit: cap.totalLimit.toString(),
25
+ };
26
+ }
27
+ return sortedKeys(caps);
28
+ }
29
+ const ADDRESS = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
30
+ const RAW = /^\d+$/;
31
+ const isRecord = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
32
+ export function isFloors(v) {
33
+ return isRecord(v) && Object.entries(v).every(([mint, floor]) => ADDRESS.test(mint) && typeof floor === "string" && RAW.test(floor));
34
+ }
35
+ export function isMintCaps(v) {
36
+ return (isRecord(v) &&
37
+ Object.entries(v).every(([mint, cap]) => ADDRESS.test(mint) &&
38
+ isRecord(cap) &&
39
+ Object.keys(cap).length === CAP_LIMITS.length &&
40
+ CAP_LIMITS.every((field) => (field === "windowSecs" ? Number.isInteger(cap[field]) : typeof cap[field] === "string" && RAW.test(cap[field])))));
41
+ }
42
+ export function floorChanges(baseline, now) {
43
+ const mints = Object.keys(sortedKeys({ ...baseline, ...now }));
44
+ return mints.flatMap((mint) => {
45
+ const expected = baseline[mint] ?? NO_FLOOR;
46
+ const observed = now[mint] ?? NO_FLOOR;
47
+ return expected === observed ? [] : [{ key: `committeeFloor.${mint}`, kind: "committee-floor", field: "floor", mint, expected, observed }];
48
+ });
49
+ }
50
+ export function capChanges(baseline, now, missing) {
51
+ const mints = Object.keys(sortedKeys({ ...baseline, ...now }));
52
+ return mints.flatMap((mint) => CAP_LIMITS.flatMap((field) => {
53
+ const expected = baseline[mint]?.[field] ?? missing;
54
+ const observed = now[mint]?.[field] ?? missing;
55
+ return expected === observed ? [] : [{ key: `mintCapLimit.${mint}.${field}`, kind: "mint-cap-limit", field, mint, expected, observed }];
56
+ }));
57
+ }
58
+ //# sourceMappingURL=monitor-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-limits.js","sourceRoot":"","sources":["../../src/monitor-limits.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type Address } from "@solana/kit";
2
2
  import { type Transport } from "@intent-engine/client";
3
3
  import type { MonitorSpec } from "./command-types.js";
4
+ import { type Floors, type MintCaps } from "./monitor-limits.js";
4
5
  import type { Runtime } from "./runtime.js";
5
6
  export declare const LOADER: Address;
6
7
  export declare const PROGRAM_DATA_HEADER = 45;
@@ -13,16 +14,20 @@ type ConfigValues = Record<ConfigField, Value>;
13
14
  export type Baseline = {
14
15
  program: Address;
15
16
  config: ConfigValues;
17
+ committeeFloors: Floors;
18
+ mintCaps: MintCaps;
16
19
  upgradeAuthority: string;
17
20
  programHash: string;
18
21
  };
19
22
  export type Snapshot = {
20
23
  slot: bigint;
21
24
  config: ConfigValues | null;
25
+ committeeFloors: Floors | null;
26
+ mintCaps: MintCaps;
22
27
  upgradeAuthority: string | null;
23
28
  programHash: string | null;
24
29
  };
25
- export type AlertKind = "config" | "upgrade-authority" | "program-hash" | "fill-amount" | "fill-rate" | "mint-cap" | "rpc";
30
+ export type AlertKind = "config" | "upgrade-authority" | "program-hash" | "fill-amount" | "fill-rate" | "mint-cap" | "committee-floor" | "mint-cap-limit" | "rpc";
26
31
  export type Alert = {
27
32
  kind: AlertKind;
28
33
  field: string;
@@ -4,6 +4,7 @@ import { findConfigPda, findProgramDataAddress, getConfigDecoder, getConfigDiscr
4
4
  import { CLOCK_SYSVAR, loadMintCap } from "@intent-engine/client";
5
5
  import { UsageError } from "./arg-values.js";
6
6
  import { fillsIn, inputMintsOf } from "./monitor-fills.js";
7
+ import { capChanges, floorChanges, floorsOf, isFloors, isMintCaps, mintCapsOf } from "./monitor-limits.js";
7
8
  import { printableLines, redactUrl, render } from "./render.js";
8
9
  export const LOADER = "BPFLoaderUpgradeab1e11111111111111111111111";
9
10
  export const PROGRAM_DATA_HEADER = 45;
@@ -33,36 +34,38 @@ export const baselineExists = (file) => `${file} already exists; --write-baselin
33
34
  export const notABaseline = (file) => `--expect ${file} is not a monitor baseline; write one with monitor --write-baseline <file>`;
34
35
  export const otherProgram = (file, program) => `--expect ${file} is a baseline for program ${program}, not ${INTENT_ENGINE_PROGRAM_ADDRESS}; write a new one with monitor --write-baseline <file>`;
35
36
  const sameBytes = (a, b) => a.length === b.length && Array.from(a).every((x, i) => x === b[i]);
36
- function configValues(view) {
37
+ function decodedConfig(view) {
37
38
  const discriminator = getConfigDiscriminatorBytes();
38
39
  if (view === null || view === undefined || view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS || !sameBytes(view.data.subarray(0, discriminator.length), discriminator)) {
39
40
  return null;
40
41
  }
41
42
  try {
42
- const c = getConfigDecoder().decode(view.data);
43
- return {
44
- admin: c.admin,
45
- pendingAdmin: c.pendingAdmin,
46
- guardian: c.guardian,
47
- feeRecipient: c.feeRecipient,
48
- feeBps: c.feeBps,
49
- kindFeeMask: c.kindFeeMask,
50
- kindFeeBps: [...c.kindFeeBps],
51
- partnerCutBps: c.partnerCutBps,
52
- crankBounty: c.crankBounty,
53
- createFee: c.createFee,
54
- enabledKinds: c.enabledKinds.toString(),
55
- fillDisabledKinds: c.fillDisabledKinds.toString(),
56
- paused: c.paused,
57
- capsRequired: c.capsRequired,
58
- version: c.version,
59
- domain: [...c.domain],
60
- };
43
+ return getConfigDecoder().decode(view.data);
61
44
  }
62
45
  catch {
63
46
  return null;
64
47
  }
65
48
  }
49
+ function configValues(c) {
50
+ return {
51
+ admin: c.admin,
52
+ pendingAdmin: c.pendingAdmin,
53
+ guardian: c.guardian,
54
+ feeRecipient: c.feeRecipient,
55
+ feeBps: c.feeBps,
56
+ kindFeeMask: c.kindFeeMask,
57
+ kindFeeBps: [...c.kindFeeBps],
58
+ partnerCutBps: c.partnerCutBps,
59
+ crankBounty: c.crankBounty,
60
+ createFee: c.createFee,
61
+ enabledKinds: c.enabledKinds.toString(),
62
+ fillDisabledKinds: c.fillDisabledKinds.toString(),
63
+ paused: c.paused,
64
+ capsRequired: c.capsRequired,
65
+ version: c.version,
66
+ domain: [...c.domain],
67
+ };
68
+ }
66
69
  export function executableHash(data) {
67
70
  let end = data.length;
68
71
  while (end > PROGRAM_DATA_HEADER && data[end - 1] === 0) {
@@ -92,13 +95,27 @@ export async function snapshot(transport) {
92
95
  throw new Error("the node returned no clock, so it cannot say which slot it has reached");
93
96
  }
94
97
  const slot = new DataView(clock.data.buffer, clock.data.byteOffset, clock.data.byteLength).getBigUint64(0, true);
95
- return { slot, config: configValues(config), ...programState(program, data, programData) };
98
+ const decoded = decodedConfig(config);
99
+ return {
100
+ slot,
101
+ config: decoded === null ? null : configValues(decoded),
102
+ committeeFloors: decoded === null ? null : floorsOf(decoded),
103
+ mintCaps: await mintCapsOf(transport),
104
+ ...programState(program, data, programData),
105
+ };
96
106
  }
97
107
  export function baselineOf(now) {
98
- if (now.config === null || now.upgradeAuthority === null || now.programHash === null) {
108
+ if (now.config === null || now.committeeFloors === null || now.upgradeAuthority === null || now.programHash === null) {
99
109
  throw new Error(`cannot write a baseline: the config or the upgradeable program ${INTENT_ENGINE_PROGRAM_ADDRESS} is missing on this cluster`);
100
110
  }
101
- return { program: INTENT_ENGINE_PROGRAM_ADDRESS, config: now.config, upgradeAuthority: now.upgradeAuthority, programHash: now.programHash };
111
+ return {
112
+ program: INTENT_ENGINE_PROGRAM_ADDRESS,
113
+ config: now.config,
114
+ committeeFloors: now.committeeFloors,
115
+ mintCaps: now.mintCaps,
116
+ upgradeAuthority: now.upgradeAuthority,
117
+ programHash: now.programHash,
118
+ };
102
119
  }
103
120
  const isValue = (v) => typeof v === "string" || (typeof v === "number" && Number.isInteger(v)) || (Array.isArray(v) && v.every((x) => Number.isInteger(x)));
104
121
  export function parseBaseline(text, file) {
@@ -120,7 +137,9 @@ export function parseBaseline(text, file) {
120
137
  config === null ||
121
138
  typeof config !== "object" ||
122
139
  Object.keys(config).length !== CONFIG_FIELDS.length ||
123
- !CONFIG_FIELDS.every((field) => isValue(config[field]))) {
140
+ !CONFIG_FIELDS.every((field) => isValue(config[field])) ||
141
+ !isFloors(b.committeeFloors) ||
142
+ !isMintCaps(b.mintCaps)) {
124
143
  throw new UsageError(notABaseline(file));
125
144
  }
126
145
  if (b.program !== INTENT_ENGINE_PROGRAM_ADDRESS) {
@@ -185,6 +204,10 @@ function differences(baseline, now) {
185
204
  compare(`config.${field}`, "config", field, baseline.config[field], now.config[field]);
186
205
  }
187
206
  }
207
+ const limits = [...(now.committeeFloors === null ? [] : floorChanges(baseline.committeeFloors, now.committeeFloors)), ...capChanges(baseline.mintCaps, now.mintCaps, MISSING)];
208
+ for (const { key, kind, field, mint, expected, observed } of limits) {
209
+ found.push({ key, alert: { kind, field, expected, observed, slot, mint } });
210
+ }
188
211
  compare("upgradeAuthority", "upgrade-authority", "upgradeAuthority", baseline.upgradeAuthority, now.upgradeAuthority ?? MISSING);
189
212
  compare("programHash", "program-hash", "programHash", baseline.programHash, now.programHash ?? MISSING);
190
213
  return found;
@@ -228,10 +251,10 @@ async function fillAlerts(transport, spec, state, since) {
228
251
  const seen = state.seen;
229
252
  const fresh = fetched.filter((tx) => (seen === null ? tx.blockTime !== null && tx.blockTime >= since : !seen.has(tx.signature)));
230
253
  state.seen = new Set([...(seen ?? []), ...fetched.map((tx) => tx.signature)].slice(-limit * 4));
231
- const { fills, created } = fillsIn(fresh);
254
+ const { fills, known } = fillsIn(fresh);
232
255
  const alerts = [];
233
256
  if (spec.maxFill.size > 0 && fills.length > 0) {
234
- const mints = await inputMintsOf(transport, fills, created);
257
+ const mints = await inputMintsOf(transport, fills, known);
235
258
  for (const fill of fills) {
236
259
  const mint = mints.get(fill.intent);
237
260
  const cap = mint === undefined ? undefined : spec.maxFill.get(mint);
@@ -267,7 +290,7 @@ export async function checkOnce(transport, baseline, spec, state, now, url) {
267
290
  alerts = [
268
291
  ...stateAlerts([...differences(baseline, current), ...(await capFindings(transport, spec, current.slot))], state),
269
292
  ...slotAlerts(current, state),
270
- ...(await fillAlerts(transport, spec, state, now - BigInt(spec.interval))),
293
+ ...(await fillAlerts(transport, spec, state, now - BigInt(spec.since))),
271
294
  ];
272
295
  }
273
296
  catch (error) {