(args)
| 611 | } |
| 612 | |
| 613 | function buildDateQuery(args) { |
| 614 | const parts = []; |
| 615 | if (args.after) parts.push(`after:${args.after}`); |
| 616 | if (args.before) parts.push(`before:${args.before}`); |
| 617 | if (parts.length) return parts.join(" "); |
| 618 | |
| 619 | const now = new Date(); |
| 620 | let after; |
| 621 | switch (args.window) { |
| 622 | case "24h": after = new Date(now.getTime() - 24 * 3600 * 1000); break; |
| 623 | case "7d": after = new Date(now.getTime() - 7 * 24 * 3600 * 1000); break; |
| 624 | case "30d": after = new Date(now.getTime() - 30 * 24 * 3600 * 1000); break; |
| 625 | case "90d": after = new Date(now.getTime() - 90 * 24 * 3600 * 1000); break; |
| 626 | case "1y": after = new Date(now.getTime() - 365 * 24 * 3600 * 1000); break; |
| 627 | case "all": return ""; |
| 628 | default: |
| 629 | console.error(`Unknown window: ${args.window}. Use 24h, 7d, 30d, 90d, 1y, all, or --after=YYYY/MM/DD.`); |
| 630 | process.exit(1); |
| 631 | } |
| 632 | const y = after.getFullYear(); |
| 633 | const m = String(after.getMonth() + 1).padStart(2, "0"); |
| 634 | const d = String(after.getDate()).padStart(2, "0"); |
| 635 | return `after:${y}/${m}/${d}`; |
| 636 | } |
| 637 | |
| 638 | async function listMessagesForLabel(accessToken, label, query, limit) { |
| 639 | const messages = []; |
no outgoing calls
no test coverage detected
searching dependent graphs…