@temporalabs/treasury 0.1.1 → 0.1.2

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 (74) hide show
  1. package/NOTICE +4 -2
  2. package/README.md +68 -44
  3. package/THIRD_PARTY_NOTICES.connect-page.md +7420 -0
  4. package/THIRD_PARTY_NOTICES.md +4 -196
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.js +220 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/client.d.ts +224 -239
  9. package/dist/client.js +147 -25
  10. package/dist/client.js.map +1 -1
  11. package/dist/config/earn.d.ts +33 -12
  12. package/dist/config/earn.js +33 -12
  13. package/dist/config/earn.js.map +1 -1
  14. package/dist/connect/ack.d.ts +59 -0
  15. package/dist/connect/ack.js +111 -0
  16. package/dist/connect/ack.js.map +1 -0
  17. package/dist/connect/commands.d.ts +78 -0
  18. package/dist/connect/commands.js +411 -0
  19. package/dist/connect/commands.js.map +1 -0
  20. package/dist/connect/config.d.ts +22 -0
  21. package/dist/connect/config.js +33 -0
  22. package/dist/connect/config.js.map +1 -0
  23. package/dist/connect/gate.d.ts +37 -0
  24. package/dist/connect/gate.js +115 -0
  25. package/dist/connect/gate.js.map +1 -0
  26. package/dist/connect/http.d.ts +54 -0
  27. package/dist/connect/http.js +205 -0
  28. package/dist/connect/http.js.map +1 -0
  29. package/dist/connect/open.d.ts +2 -0
  30. package/dist/connect/open.js +35 -0
  31. package/dist/connect/open.js.map +1 -0
  32. package/dist/connect/page.d.ts +5 -0
  33. package/dist/connect/page.js +69 -0
  34. package/dist/connect/page.js.map +1 -0
  35. package/dist/connect/session.d.ts +16 -0
  36. package/dist/connect/session.js +73 -0
  37. package/dist/connect/session.js.map +1 -0
  38. package/dist/connect/verify.d.ts +37 -0
  39. package/dist/connect/verify.js +89 -0
  40. package/dist/connect/verify.js.map +1 -0
  41. package/dist/connect-page.js +5141 -0
  42. package/dist/disclosures.d.ts +21 -6
  43. package/dist/disclosures.js +32 -7
  44. package/dist/disclosures.js.map +1 -1
  45. package/dist/earn/commands.d.ts +46 -0
  46. package/dist/earn/commands.js +483 -0
  47. package/dist/earn/commands.js.map +1 -0
  48. package/dist/links.d.ts +2 -0
  49. package/dist/links.js +38 -14
  50. package/dist/links.js.map +1 -1
  51. package/dist/position.d.ts +7 -5
  52. package/dist/position.js +35 -18
  53. package/dist/position.js.map +1 -1
  54. package/dist/preflight.d.ts +9 -0
  55. package/dist/preflight.js +14 -3
  56. package/dist/preflight.js.map +1 -1
  57. package/dist/quote.js +24 -7
  58. package/dist/quote.js.map +1 -1
  59. package/dist/redact.d.ts +3 -3
  60. package/dist/redact.js +3 -3
  61. package/dist/redact.js.map +1 -1
  62. package/dist/registry-schema.d.ts +5 -5
  63. package/dist/registry-schema.js +30 -16
  64. package/dist/registry-schema.js.map +1 -1
  65. package/dist/registry.d.ts +29 -6
  66. package/dist/registry.js +76 -13
  67. package/dist/registry.js.map +1 -1
  68. package/dist/{mcp-server.mjs → treasury.mjs} +29276 -44702
  69. package/dist/version.js +1 -1
  70. package/package.json +5 -5
  71. package/registry/vaults.json +105 -4
  72. package/dist/mcp/server.d.ts +0 -8
  73. package/dist/mcp/server.js +0 -368
  74. package/dist/mcp/server.js.map +0 -1
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Did the transaction on chain do what was confirmed? Read from the RECEIPT, never from the
3
+ * transaction envelope, because a smart-account wallet does not send the call itself: it wraps it in
4
+ * a batch that a relayer submits, so `tx.from` and `tx.to` name the relayer and a delegation contract
5
+ * (measured 2026-10-03 on Base: a MetaMask 7702 account, its call executed inside DelegationManager,
6
+ * plus a 0.06 USDC transfer to a third address in the same batch).
7
+ *
8
+ * So the evidence is the event the vault or token itself emits for the connected account — an
9
+ * `Approval`, `Deposit` or `Withdraw` naming that account and that amount — and every OTHER
10
+ * movement of the asset out of the account in the same transaction is reported beside it, never
11
+ * folded into a "matched".
12
+ */
13
+ import { type Address, type Hex } from "viem";
14
+ import type { ReadClient } from "../client.js";
15
+ import type { Admitted } from "./gate.js";
16
+ export interface Verdict {
17
+ /**
18
+ * `matched`: the expected event is there and nothing else left the account.
19
+ * `extra_transfer`: the expected event is there AND the account also sent the asset elsewhere in
20
+ * the same transaction (`alsoMoved`) — tell the operator; it was not part of the call.
21
+ * `mismatch`: the transaction succeeded but the expected event is missing.
22
+ * `reverted`: the transaction failed on chain; nothing it was meant to do happened.
23
+ * `unverified`: no receipt within the wait.
24
+ */
25
+ verified: "matched" | "extra_transfer" | "mismatch" | "reverted" | "unverified";
26
+ detail?: string;
27
+ alsoMoved?: {
28
+ to: string;
29
+ amountRaw: string;
30
+ }[];
31
+ }
32
+ export declare function verifyLanded(client: Pick<ReadClient, "getTransactionReceipt">, hash: Hex, call: Admitted, account: Address, opts?: {
33
+ attempts?: number;
34
+ delayMs?: number;
35
+ deadline?: number;
36
+ notBefore?: bigint;
37
+ }): Promise<Verdict>;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Did the transaction on chain do what was confirmed? Read from the RECEIPT, never from the
3
+ * transaction envelope, because a smart-account wallet does not send the call itself: it wraps it in
4
+ * a batch that a relayer submits, so `tx.from` and `tx.to` name the relayer and a delegation contract
5
+ * (measured 2026-10-03 on Base: a MetaMask 7702 account, its call executed inside DelegationManager,
6
+ * plus a 0.06 USDC transfer to a third address in the same batch).
7
+ *
8
+ * So the evidence is the event the vault or token itself emits for the connected account — an
9
+ * `Approval`, `Deposit` or `Withdraw` naming that account and that amount — and every OTHER
10
+ * movement of the asset out of the account in the same transaction is reported beside it, never
11
+ * folded into a "matched".
12
+ */
13
+ import { getAddress, parseAbiItem, parseEventLogs } from "viem";
14
+ const approvalEvent = parseAbiItem("event Approval(address indexed owner, address indexed spender, uint256 value)");
15
+ const transferEvent = parseAbiItem("event Transfer(address indexed from, address indexed to, uint256 value)");
16
+ const depositEvent = parseAbiItem("event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)");
17
+ const withdrawEvent = parseAbiItem("event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)");
18
+ const same = (a, b) => getAddress(a) === getAddress(b);
19
+ export async function verifyLanded(client, hash, call, account, opts = {}) {
20
+ const attempts = opts.attempts ?? 30;
21
+ const delayMs = opts.delayMs ?? 2_000;
22
+ let receipt;
23
+ // `deadline` (epoch ms) stops the wait when the flow's own time limit is up.
24
+ for (let i = 0; i < attempts && !receipt && (opts.deadline === undefined || Date.now() < opts.deadline); i++) {
25
+ try {
26
+ receipt = await client.getTransactionReceipt({ hash });
27
+ }
28
+ catch {
29
+ await new Promise((r) => setTimeout(r, delayMs));
30
+ }
31
+ }
32
+ if (!receipt)
33
+ return { verified: "unverified", detail: `no receipt for ${hash} in time; look it up on the explorer before retrying anything` };
34
+ if (receipt.status !== "success")
35
+ return { verified: "reverted", detail: `${hash} reverted on chain; nothing it was meant to do happened` };
36
+ // `notBefore`: the chain head when the confirm flow started. A receipt mined in that block or earlier
37
+ // is an older transaction of the same shape, not one this flow sent.
38
+ if (opts.notBefore !== undefined && receipt.blockNumber <= opts.notBefore) {
39
+ return { verified: "mismatch", detail: `${hash} was mined in block ${receipt.blockNumber}, which already existed when this confirm flow started (at block ${opts.notBefore}); it is not a transaction from this flow` };
40
+ }
41
+ const vault = call.vault.address;
42
+ const asset = call.vault.asset.address;
43
+ const logs = receipt.logs;
44
+ const fromAsset = logs.filter((l) => same(l.address, asset));
45
+ const fromVault = logs.filter((l) => same(l.address, vault));
46
+ let found = false;
47
+ if (call.kind === "approve") {
48
+ found = parseEventLogs({ abi: [approvalEvent], logs: fromAsset }).some((e) => same(e.args.owner, account) && same(e.args.spender, vault) && e.args.value === call.amount);
49
+ }
50
+ else if (call.kind === "deposit") {
51
+ found = parseEventLogs({ abi: [depositEvent], logs: fromVault }).some((e) => same(e.args.owner, account) && e.args.assets === call.amount);
52
+ }
53
+ else {
54
+ found = parseEventLogs({ abi: [withdrawEvent], logs: fromVault }).some((e) => same(e.args.owner, account) &&
55
+ same(e.args.receiver, account) &&
56
+ (call.kind === "withdraw" ? e.args.assets === call.amount : e.args.shares === call.amount));
57
+ }
58
+ // Every movement of the asset OUT of the account that the call itself does not explain. A deposit
59
+ // legitimately moves exactly `amount` to the vault; nothing else should move.
60
+ const expectedPull = call.kind === "deposit" ? call.amount : 0n;
61
+ let pullSeen = false;
62
+ const alsoMoved = [];
63
+ for (const t of parseEventLogs({ abi: [transferEvent], logs: fromAsset })) {
64
+ if (!same(t.args.from, account))
65
+ continue;
66
+ if (!pullSeen && expectedPull > 0n && same(t.args.to, vault) && t.args.value === expectedPull) {
67
+ pullSeen = true;
68
+ continue;
69
+ }
70
+ alsoMoved.push({ to: getAddress(t.args.to), amountRaw: t.args.value.toString() });
71
+ }
72
+ const what = `${call.kind} ${call.amount} raw units on ${call.vault.symbol}`;
73
+ if (!found) {
74
+ return {
75
+ verified: "mismatch",
76
+ detail: `${hash} succeeded, but carries no ${call.kind === "approve" ? "Approval" : call.kind === "deposit" ? "Deposit" : "Withdraw"} event for ${account} matching ${what}. Stop: what landed is not what was confirmed.`,
77
+ ...(alsoMoved.length ? { alsoMoved } : {}),
78
+ };
79
+ }
80
+ if (alsoMoved.length) {
81
+ return {
82
+ verified: "extra_transfer",
83
+ detail: `${what} landed as confirmed, and in the same transaction the account also sent ${call.vault.asset.symbol} elsewhere (alsoMoved). That was not part of the call — often a wallet's own fee for paying gas in tokens. Tell the operator.`,
84
+ alsoMoved,
85
+ };
86
+ }
87
+ return { verified: "matched" };
88
+ }
89
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/connect/verify.ts"],"names":[],"mappings":"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"}