You are building two CLI scripts in TypeScript using Viem.
Maker script (`make-order.ts`):
- Constructs an AugustusRFQ OTC order: sell `srcAmount` of `srcToken` for at least `destAmount` of `destToken`, expires at a configurable timestamp, partial fills allowed. Limit orders are Delta orders; use this RFQ flow only for OTC settlement.
- Signs the EIP-712 typed data with the maker's private key.
- Outputs the order JSON + signature to stdout (the taker can pick this up via stdin or a side-channel).
Taker script (`fill-order.ts`):
- Reads the maker's order + signature from stdin.
- Validates the signature recovers to the maker's address.
- Approves `srcToken` and `destToken` to the AugustusRFQ contract if not already approved.
- Submits the fill on-chain via the AugustusRFQ `fillOrderNFT` or equivalent method, supporting partial fill `fillAmount`.
Requirements:
- Read the AugustusRFQ contract address per chain from `/resources/chains-and-contracts`.
- Validate `order.expiry > now()` before submitting.
- Catch and surface the common revert reasons (insufficient allowance, expired, already filled).
Reference these docs and follow them exactly:
- https://velora.xyz/docs/api-reference/rfq/overview
- https://velora.xyz/docs/resources/chains-and-contracts
- https://velora.xyz/docs/resources/security/audits/augustus-rfq
Do NOT submit a fill without re-validating signature and expiry against the on-chain block timestamp. Do NOT skip the partial-fill amount check (taker could fill more than the maker intended otherwise).