@synteq/cli 0.2.0 → 1.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.
- package/dist/api/client.d.ts +362 -5
- package/dist/api/client.js +559 -44
- package/dist/api/client.js.map +1 -1
- package/dist/api/factory.js +5 -2
- package/dist/api/factory.js.map +1 -1
- package/dist/api/types.d.ts +892 -3
- package/dist/apps-support/deploy.d.ts +197 -0
- package/dist/apps-support/deploy.js +639 -0
- package/dist/apps-support/deploy.js.map +1 -0
- package/dist/apps-support/dotenv.d.ts +67 -0
- package/dist/apps-support/dotenv.js +136 -0
- package/dist/apps-support/dotenv.js.map +1 -0
- package/dist/apps-support/env-rollout.d.ts +18 -0
- package/dist/apps-support/env-rollout.js +52 -0
- package/dist/apps-support/env-rollout.js.map +1 -0
- package/dist/apps-support/git.d.ts +14 -0
- package/dist/apps-support/git.js +25 -0
- package/dist/apps-support/git.js.map +1 -0
- package/dist/apps-support/link.d.ts +25 -0
- package/dist/apps-support/link.js +39 -0
- package/dist/apps-support/link.js.map +1 -0
- package/dist/apps-support/log-stream.d.ts +25 -0
- package/dist/apps-support/log-stream.js +85 -0
- package/dist/apps-support/log-stream.js.map +1 -0
- package/dist/apps-support/paid-app.d.ts +64 -0
- package/dist/apps-support/paid-app.js +195 -0
- package/dist/apps-support/paid-app.js.map +1 -0
- package/dist/apps-support/plans.d.ts +44 -0
- package/dist/apps-support/plans.js +43 -0
- package/dist/apps-support/plans.js.map +1 -0
- package/dist/apps-support/resolve.d.ts +10 -0
- package/dist/apps-support/resolve.js +53 -0
- package/dist/apps-support/resolve.js.map +1 -0
- package/dist/apps-support/time.d.ts +20 -0
- package/dist/apps-support/time.js +82 -0
- package/dist/apps-support/time.js.map +1 -0
- package/dist/auth/scope.js +4 -0
- package/dist/auth/scope.js.map +1 -1
- package/dist/auth/tokens.d.ts +3 -0
- package/dist/auth/tokens.js +6 -4
- package/dist/auth/tokens.js.map +1 -1
- package/dist/base/command.d.ts +35 -0
- package/dist/base/command.js +87 -4
- package/dist/base/command.js.map +1 -1
- package/dist/commands/agents.d.ts +10 -0
- package/dist/commands/agents.js +53 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/api.d.ts +0 -1
- package/dist/commands/api.js +6 -5
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/app/deployment/list.d.ts +14 -0
- package/dist/commands/app/deployment/list.js +45 -0
- package/dist/commands/app/deployment/list.js.map +1 -0
- package/dist/commands/app/deployment/rollback.d.ts +18 -0
- package/dist/commands/app/deployment/rollback.js +57 -0
- package/dist/commands/app/deployment/rollback.js.map +1 -0
- package/dist/commands/app/deployment/show.d.ts +26 -0
- package/dist/commands/app/deployment/show.js +98 -0
- package/dist/commands/app/deployment/show.js.map +1 -0
- package/dist/commands/app/domain/add.d.ts +17 -0
- package/dist/commands/app/domain/add.js +59 -0
- package/dist/commands/app/domain/add.js.map +1 -0
- package/dist/commands/app/domain/list.d.ts +14 -0
- package/dist/commands/app/domain/list.js +42 -0
- package/dist/commands/app/domain/list.js.map +1 -0
- package/dist/commands/app/domain/remove.d.ts +16 -0
- package/dist/commands/app/domain/remove.js +51 -0
- package/dist/commands/app/domain/remove.js.map +1 -0
- package/dist/commands/app/domain/verify.d.ts +15 -0
- package/dist/commands/app/domain/verify.js +39 -0
- package/dist/commands/app/domain/verify.js.map +1 -0
- package/dist/commands/app/env/add.d.ts +22 -0
- package/dist/commands/app/env/add.js +103 -0
- package/dist/commands/app/env/add.js.map +1 -0
- package/dist/commands/app/env/list.d.ts +17 -0
- package/dist/commands/app/env/list.js +40 -0
- package/dist/commands/app/env/list.js.map +1 -0
- package/dist/commands/app/env/reveal.d.ts +17 -0
- package/dist/commands/app/env/reveal.js +40 -0
- package/dist/commands/app/env/reveal.js.map +1 -0
- package/dist/commands/app/env/rm.d.ts +16 -0
- package/dist/commands/app/env/rm.js +48 -0
- package/dist/commands/app/env/rm.js.map +1 -0
- package/dist/commands/app/health.d.ts +14 -0
- package/dist/commands/app/health.js +40 -0
- package/dist/commands/app/health.js.map +1 -0
- package/dist/commands/app/index.d.ts +6 -0
- package/dist/commands/app/index.js +7 -0
- package/dist/commands/app/index.js.map +1 -0
- package/dist/commands/app/link.d.ts +22 -0
- package/dist/commands/app/link.js +31 -0
- package/dist/commands/app/link.js.map +1 -0
- package/dist/commands/app/logs.d.ts +25 -0
- package/dist/commands/app/logs.js +121 -0
- package/dist/commands/app/logs.js.map +1 -0
- package/dist/commands/app/metrics.d.ts +21 -0
- package/dist/commands/app/metrics.js +123 -0
- package/dist/commands/app/metrics.js.map +1 -0
- package/dist/commands/app/plan/change.d.ts +18 -0
- package/dist/commands/app/plan/change.js +79 -0
- package/dist/commands/app/plan/change.js.map +1 -0
- package/dist/commands/app/plan/show.d.ts +14 -0
- package/dist/commands/app/plan/show.js +40 -0
- package/dist/commands/app/plan/show.js.map +1 -0
- package/dist/commands/app/settings/set.d.ts +25 -0
- package/dist/commands/app/settings/set.js +96 -0
- package/dist/commands/app/settings/set.js.map +1 -0
- package/dist/commands/app/settings/show.d.ts +14 -0
- package/dist/commands/app/settings/show.js +48 -0
- package/dist/commands/app/settings/show.js.map +1 -0
- package/dist/commands/app/unlink.d.ts +8 -0
- package/dist/commands/app/unlink.js +25 -0
- package/dist/commands/app/unlink.js.map +1 -0
- package/dist/commands/apps/create.d.ts +26 -0
- package/dist/commands/apps/create.js +91 -0
- package/dist/commands/apps/create.js.map +1 -0
- package/dist/commands/apps/list.d.ts +17 -0
- package/dist/commands/apps/list.js +56 -0
- package/dist/commands/apps/list.js.map +1 -0
- package/dist/commands/baremetal/activity.d.ts +14 -0
- package/dist/commands/baremetal/activity.js +53 -0
- package/dist/commands/baremetal/activity.js.map +1 -0
- package/dist/commands/baremetal/bandwidth.d.ts +10 -0
- package/dist/commands/baremetal/bandwidth.js +86 -0
- package/dist/commands/baremetal/bandwidth.js.map +1 -0
- package/dist/commands/baremetal/console.d.ts +20 -0
- package/dist/commands/baremetal/console.js +72 -0
- package/dist/commands/baremetal/console.js.map +1 -0
- package/dist/commands/baremetal/details.d.ts +11 -0
- package/dist/commands/baremetal/details.js +116 -0
- package/dist/commands/baremetal/details.js.map +1 -0
- package/dist/commands/baremetal/index.d.ts +5 -0
- package/dist/commands/baremetal/index.js +6 -0
- package/dist/commands/baremetal/index.js.map +1 -0
- package/dist/commands/baremetal/install-password.d.ts +14 -0
- package/dist/commands/baremetal/install-password.js +80 -0
- package/dist/commands/baremetal/install-password.js.map +1 -0
- package/dist/commands/baremetal/list.d.ts +11 -0
- package/dist/commands/baremetal/list.js +59 -0
- package/dist/commands/baremetal/list.js.map +1 -0
- package/dist/commands/baremetal/order.d.ts +34 -0
- package/dist/commands/baremetal/order.js +394 -0
- package/dist/commands/baremetal/order.js.map +1 -0
- package/dist/commands/baremetal/power.d.ts +18 -0
- package/dist/commands/baremetal/power.js +168 -0
- package/dist/commands/baremetal/power.js.map +1 -0
- package/dist/commands/baremetal/reinstall.d.ts +21 -0
- package/dist/commands/baremetal/reinstall.js +168 -0
- package/dist/commands/baremetal/reinstall.js.map +1 -0
- package/dist/commands/config/profile/add.d.ts +11 -0
- package/dist/commands/config/profile/add.js +51 -0
- package/dist/commands/config/profile/add.js.map +1 -0
- package/dist/commands/config/profile/list.d.ts +7 -0
- package/dist/commands/config/profile/list.js +29 -0
- package/dist/commands/config/profile/list.js.map +1 -0
- package/dist/commands/config/profile/remove.d.ts +11 -0
- package/dist/commands/config/profile/remove.js +35 -0
- package/dist/commands/config/profile/remove.js.map +1 -0
- package/dist/commands/config/profile/use.d.ts +10 -0
- package/dist/commands/config/profile/use.js +44 -0
- package/dist/commands/config/profile/use.js.map +1 -0
- package/dist/commands/config/show.js +4 -1
- package/dist/commands/config/show.js.map +1 -1
- package/dist/commands/credits/add.js +2 -2
- package/dist/commands/credits/add.js.map +1 -1
- package/dist/commands/credits/index.js +5 -1
- package/dist/commands/credits/index.js.map +1 -1
- package/dist/commands/deploy.d.ts +51 -0
- package/dist/commands/deploy.js +515 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/function/create.d.ts +29 -0
- package/dist/commands/function/create.js +113 -0
- package/dist/commands/function/create.js.map +1 -0
- package/dist/commands/function/credits/add.d.ts +29 -0
- package/dist/commands/function/credits/add.js +209 -0
- package/dist/commands/function/credits/add.js.map +1 -0
- package/dist/commands/function/credits/auto-reload.d.ts +27 -0
- package/dist/commands/function/credits/auto-reload.js +107 -0
- package/dist/commands/function/credits/auto-reload.js.map +1 -0
- package/dist/commands/function/credits/index.d.ts +22 -0
- package/dist/commands/function/credits/index.js +80 -0
- package/dist/commands/function/credits/index.js.map +1 -0
- package/dist/commands/function/cron/add.d.ts +19 -0
- package/dist/commands/function/cron/add.js +74 -0
- package/dist/commands/function/cron/add.js.map +1 -0
- package/dist/commands/function/cron/list.d.ts +12 -0
- package/dist/commands/function/cron/list.js +55 -0
- package/dist/commands/function/cron/list.js.map +1 -0
- package/dist/commands/function/cron/rm.d.ts +17 -0
- package/dist/commands/function/cron/rm.js +73 -0
- package/dist/commands/function/cron/rm.js.map +1 -0
- package/dist/commands/function/cron/run.d.ts +16 -0
- package/dist/commands/function/cron/run.js +59 -0
- package/dist/commands/function/cron/run.js.map +1 -0
- package/dist/commands/function/cron/update.d.ts +21 -0
- package/dist/commands/function/cron/update.js +87 -0
- package/dist/commands/function/cron/update.js.map +1 -0
- package/dist/commands/function/delete.d.ts +23 -0
- package/dist/commands/function/delete.js +90 -0
- package/dist/commands/function/delete.js.map +1 -0
- package/dist/commands/function/deploy.d.ts +64 -0
- package/dist/commands/function/deploy.js +616 -0
- package/dist/commands/function/deploy.js.map +1 -0
- package/dist/commands/function/env/list.d.ts +12 -0
- package/dist/commands/function/env/list.js +46 -0
- package/dist/commands/function/env/list.js.map +1 -0
- package/dist/commands/function/env/reveal.d.ts +21 -0
- package/dist/commands/function/env/reveal.js +54 -0
- package/dist/commands/function/env/reveal.js.map +1 -0
- package/dist/commands/function/env/rm.d.ts +17 -0
- package/dist/commands/function/env/rm.js +62 -0
- package/dist/commands/function/env/rm.js.map +1 -0
- package/dist/commands/function/env/set.d.ts +28 -0
- package/dist/commands/function/env/set.js +124 -0
- package/dist/commands/function/env/set.js.map +1 -0
- package/dist/commands/function/index.d.ts +14 -0
- package/dist/commands/function/index.js +11 -0
- package/dist/commands/function/index.js.map +1 -0
- package/dist/commands/function/init.d.ts +48 -0
- package/dist/commands/function/init.js +277 -0
- package/dist/commands/function/init.js.map +1 -0
- package/dist/commands/function/invoke.d.ts +29 -0
- package/dist/commands/function/invoke.js +138 -0
- package/dist/commands/function/invoke.js.map +1 -0
- package/dist/commands/function/link.d.ts +23 -0
- package/dist/commands/function/link.js +80 -0
- package/dist/commands/function/link.js.map +1 -0
- package/dist/commands/function/list.d.ts +16 -0
- package/dist/commands/function/list.js +55 -0
- package/dist/commands/function/list.js.map +1 -0
- package/dist/commands/function/logs.d.ts +29 -0
- package/dist/commands/function/logs.js +171 -0
- package/dist/commands/function/logs.js.map +1 -0
- package/dist/commands/function/pause.d.ts +19 -0
- package/dist/commands/function/pause.js +50 -0
- package/dist/commands/function/pause.js.map +1 -0
- package/dist/commands/function/releases.d.ts +15 -0
- package/dist/commands/function/releases.js +62 -0
- package/dist/commands/function/releases.js.map +1 -0
- package/dist/commands/function/resume.d.ts +16 -0
- package/dist/commands/function/resume.js +47 -0
- package/dist/commands/function/resume.js.map +1 -0
- package/dist/commands/function/rollback.d.ts +18 -0
- package/dist/commands/function/rollback.js +69 -0
- package/dist/commands/function/rollback.js.map +1 -0
- package/dist/commands/function/settings/set.d.ts +23 -0
- package/dist/commands/function/settings/set.js +119 -0
- package/dist/commands/function/settings/set.js.map +1 -0
- package/dist/commands/function/show.d.ts +15 -0
- package/dist/commands/function/show.js +80 -0
- package/dist/commands/function/show.js.map +1 -0
- package/dist/commands/function/unlink.d.ts +9 -0
- package/dist/commands/function/unlink.js +34 -0
- package/dist/commands/function/unlink.js.map +1 -0
- package/dist/commands/link.d.ts +82 -0
- package/dist/commands/link.js +532 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.js +9 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/order.js +3 -1
- package/dist/commands/order.js.map +1 -1
- package/dist/commands/payments/methods/delete.js +2 -2
- package/dist/commands/payments/methods/delete.js.map +1 -1
- package/dist/commands/resources.js +50 -7
- package/dist/commands/resources.js.map +1 -1
- package/dist/commands/status.d.ts +12 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/storage/detach.js +1 -1
- package/dist/commands/storage/detach.js.map +1 -1
- package/dist/commands/storage/list.js +6 -2
- package/dist/commands/storage/list.js.map +1 -1
- package/dist/commands/storage/order.d.ts +2 -0
- package/dist/commands/storage/order.js +100 -18
- package/dist/commands/storage/order.js.map +1 -1
- package/dist/commands/storage/resize.js +19 -6
- package/dist/commands/storage/resize.js.map +1 -1
- package/dist/commands/tickets/create.d.ts +2 -0
- package/dist/commands/tickets/create.js +40 -1
- package/dist/commands/tickets/create.js.map +1 -1
- package/dist/commands/tickets/download.d.ts +18 -0
- package/dist/commands/tickets/download.js +138 -0
- package/dist/commands/tickets/download.js.map +1 -0
- package/dist/commands/tickets/list.js +13 -7
- package/dist/commands/tickets/list.js.map +1 -1
- package/dist/commands/tickets/reply.d.ts +2 -0
- package/dist/commands/tickets/reply.js +33 -4
- package/dist/commands/tickets/reply.js.map +1 -1
- package/dist/commands/vds/order.js +72 -7
- package/dist/commands/vds/order.js.map +1 -1
- package/dist/commands/vps/console.js +14 -6
- package/dist/commands/vps/console.js.map +1 -1
- package/dist/commands/vps/details.js +7 -1
- package/dist/commands/vps/details.js.map +1 -1
- package/dist/commands/vps/ip/add.js +76 -9
- package/dist/commands/vps/ip/add.js.map +1 -1
- package/dist/commands/vps/list.js +13 -4
- package/dist/commands/vps/list.js.map +1 -1
- package/dist/commands/vps/order.d.ts +19 -0
- package/dist/commands/vps/order.js +179 -23
- package/dist/commands/vps/order.js.map +1 -1
- package/dist/commands/vps/power.js +2 -2
- package/dist/commands/vps/power.js.map +1 -1
- package/dist/commands/vps/reinstall.js +2 -2
- package/dist/commands/vps/reinstall.js.map +1 -1
- package/dist/commands/vps/resize.js +36 -13
- package/dist/commands/vps/resize.js.map +1 -1
- package/dist/commands/whoami.d.ts +5 -0
- package/dist/commands/whoami.js +8 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config/paths.d.ts +1 -1
- package/dist/config/paths.js +6 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/store.d.ts +58 -0
- package/dist/config/store.js +84 -2
- package/dist/config/store.js.map +1 -1
- package/dist/functions-support/credits.d.ts +64 -0
- package/dist/functions-support/credits.js +181 -0
- package/dist/functions-support/credits.js.map +1 -0
- package/dist/functions-support/cron.d.ts +17 -0
- package/dist/functions-support/cron.js +99 -0
- package/dist/functions-support/cron.js.map +1 -0
- package/dist/functions-support/env.d.ts +23 -0
- package/dist/functions-support/env.js +44 -0
- package/dist/functions-support/env.js.map +1 -0
- package/dist/functions-support/link.d.ts +25 -0
- package/dist/functions-support/link.js +51 -0
- package/dist/functions-support/link.js.map +1 -0
- package/dist/functions-support/poll.d.ts +40 -0
- package/dist/functions-support/poll.js +109 -0
- package/dist/functions-support/poll.js.map +1 -0
- package/dist/functions-support/resolve.d.ts +3 -0
- package/dist/functions-support/resolve.js +31 -0
- package/dist/functions-support/resolve.js.map +1 -0
- package/dist/functions-support/runtime.d.ts +30 -0
- package/dist/functions-support/runtime.js +52 -0
- package/dist/functions-support/runtime.js.map +1 -0
- package/dist/functions-support/source.d.ts +92 -0
- package/dist/functions-support/source.js +343 -0
- package/dist/functions-support/source.js.map +1 -0
- package/dist/help/scope-aware-help.js +10 -1
- package/dist/help/scope-aware-help.js.map +1 -1
- package/dist/tui/App.js +10 -25
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/components/Menu.d.ts +3 -1
- package/dist/tui/components/Menu.js +7 -3
- package/dist/tui/components/Menu.js.map +1 -1
- package/dist/tui/router.d.ts +1 -1
- package/dist/tui/router.js.map +1 -1
- package/dist/tui/screens/Billing.js +56 -4
- package/dist/tui/screens/Billing.js.map +1 -1
- package/dist/tui/screens/Dashboard.js +8 -7
- package/dist/tui/screens/Dashboard.js.map +1 -1
- package/dist/tui/screens/Deploy.d.ts +2 -0
- package/dist/tui/screens/Deploy.js +912 -0
- package/dist/tui/screens/Deploy.js.map +1 -0
- package/dist/tui/screens/Order.js +359 -26
- package/dist/tui/screens/Order.js.map +1 -1
- package/dist/tui/screens/Resources.js +273 -31
- package/dist/tui/screens/Resources.js.map +1 -1
- package/dist/tui/screens/Tickets.js +18 -6
- package/dist/tui/screens/Tickets.js.map +1 -1
- package/dist/tui/screens/deployPreset.d.ts +20 -0
- package/dist/tui/screens/deployPreset.js +11 -0
- package/dist/tui/screens/deployPreset.js.map +1 -0
- package/dist/tui/screens/resources/AppDetail.d.ts +7 -0
- package/dist/tui/screens/resources/AppDetail.js +810 -0
- package/dist/tui/screens/resources/AppDetail.js.map +1 -0
- package/dist/tui/screens/resources/FunctionDetail.d.ts +7 -0
- package/dist/tui/screens/resources/FunctionDetail.js +751 -0
- package/dist/tui/screens/resources/FunctionDetail.js.map +1 -0
- package/dist/ui/attach.d.ts +15 -0
- package/dist/ui/attach.js +63 -0
- package/dist/ui/attach.js.map +1 -0
- package/dist/ui/baremetal-resolve.d.ts +10 -0
- package/dist/ui/baremetal-resolve.js +50 -0
- package/dist/ui/baremetal-resolve.js.map +1 -0
- package/dist/ui/confirm.js +1 -1
- package/dist/ui/confirm.js.map +1 -1
- package/dist/ui/cycle.d.ts +66 -0
- package/dist/ui/cycle.js +96 -0
- package/dist/ui/cycle.js.map +1 -0
- package/dist/ui/deploy-ui.d.ts +75 -0
- package/dist/ui/deploy-ui.js +243 -0
- package/dist/ui/deploy-ui.js.map +1 -0
- package/dist/ui/order-result.d.ts +4 -0
- package/dist/ui/order-result.js +32 -0
- package/dist/ui/order-result.js.map +1 -0
- package/dist/ui/payment-gate.d.ts +26 -0
- package/dist/ui/payment-gate.js +70 -0
- package/dist/ui/payment-gate.js.map +1 -0
- package/dist/ui/payment.js +10 -3
- package/dist/ui/payment.js.map +1 -1
- package/dist/ui/portal.d.ts +1 -1
- package/dist/ui/portal.js +7 -2
- package/dist/ui/portal.js.map +1 -1
- package/dist/ui/project-resolve.d.ts +25 -0
- package/dist/ui/project-resolve.js +31 -0
- package/dist/ui/project-resolve.js.map +1 -0
- package/dist/ui/render-mode.d.ts +5 -0
- package/dist/ui/render-mode.js +1 -1
- package/dist/ui/render-mode.js.map +1 -1
- package/dist/ui/resource-detail.js +0 -3
- package/dist/ui/resource-detail.js.map +1 -1
- package/dist/ui/resource-resolve.d.ts +9 -2
- package/dist/ui/resource-resolve.js +11 -4
- package/dist/ui/resource-resolve.js.map +1 -1
- package/dist/ui/spinner.d.ts +10 -1
- package/dist/ui/spinner.js +12 -3
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/table.d.ts +7 -0
- package/dist/ui/table.js +11 -0
- package/dist/ui/table.js.map +1 -1
- package/dist/ui/tax.d.ts +10 -0
- package/dist/ui/tax.js +31 -0
- package/dist/ui/tax.js.map +1 -0
- package/dist/ui/ticket-resolve.d.ts +9 -1
- package/dist/ui/ticket-resolve.js +13 -2
- package/dist/ui/ticket-resolve.js.map +1 -1
- package/dist/ui/volume-resolve.js +4 -1
- package/dist/ui/volume-resolve.js.map +1 -1
- package/dist/ui/wait.d.ts +4 -0
- package/dist/ui/wait.js +7 -2
- package/dist/ui/wait.js.map +1 -1
- package/dist/ui/wizard.d.ts +2 -1
- package/dist/ui/wizard.js +1 -1
- package/dist/ui/wizard.js.map +1 -1
- package/dist/version-check-bin.js +2 -2
- package/dist/version-check-bin.js.map +1 -1
- package/dist/version-check.d.ts +5 -0
- package/dist/version-check.js +6 -1
- package/dist/version-check.js.map +1 -1
- package/package.json +53 -6
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
2
|
+
/** `synteq function cron add "<schedule>"` — create a cron trigger.
|
|
3
|
+
* Backend: POST /functions/{id}/triggers/cron. */
|
|
4
|
+
export default class FunctionCronAdd extends BaseCommand {
|
|
5
|
+
static apiKeyScope: string;
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static args: {
|
|
9
|
+
target: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
10
|
+
schedule: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
static flags: {
|
|
13
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
retries: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
disabled: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
3
|
+
import { resolveLinkedFunction } from "../../../functions-support/link.js";
|
|
4
|
+
import { normalizeSchedule, shortTriggerId } from "../../../functions-support/cron.js";
|
|
5
|
+
import { withSpinner } from "../../../ui/spinner.js";
|
|
6
|
+
import { ok, dim } from "../../../ui/glyphs.js";
|
|
7
|
+
/** `synteq function cron add "<schedule>"` — create a cron trigger.
|
|
8
|
+
* Backend: POST /functions/{id}/triggers/cron. */
|
|
9
|
+
export default class FunctionCronAdd extends BaseCommand {
|
|
10
|
+
static apiKeyScope = "none";
|
|
11
|
+
static description = "Add a cron trigger to a function. The schedule is a 5-field cron expression in UTC; each firing is an ordinary invocation (metered and logged like any other).";
|
|
12
|
+
static examples = [
|
|
13
|
+
'<%= config.bin %> function cron add "*/15 * * * *" # bare: linked function',
|
|
14
|
+
'<%= config.bin %> function cron add "0 9 * * 1-5" --description "weekday report" --name my-fn',
|
|
15
|
+
'<%= config.bin %> function cron add "0 * * * *" --retries 2 --disabled --name my-fn -o json',
|
|
16
|
+
];
|
|
17
|
+
static args = {
|
|
18
|
+
target: Args.string({ required: false, description: "Function slug or id (optional; default: the directory's linked function or --name)." }),
|
|
19
|
+
schedule: Args.string({
|
|
20
|
+
required: false,
|
|
21
|
+
description: 'Cron expression, quoted: "minute hour day-of-month month day-of-week" (UTC).',
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
static flags = {
|
|
25
|
+
name: Flags.string({
|
|
26
|
+
description: "Function slug (or uuid) (default: this directory's linked function).",
|
|
27
|
+
}),
|
|
28
|
+
description: Flags.string({ char: "d", description: "What this trigger is for." }),
|
|
29
|
+
retries: Flags.integer({
|
|
30
|
+
description: "Re-fire a failed run this many times (0-2).",
|
|
31
|
+
min: 0,
|
|
32
|
+
max: 2,
|
|
33
|
+
default: 0,
|
|
34
|
+
}),
|
|
35
|
+
disabled: Flags.boolean({ description: "Create the trigger switched off." }),
|
|
36
|
+
};
|
|
37
|
+
async run() {
|
|
38
|
+
await this.initClients();
|
|
39
|
+
const { args, flags: rawFlags } = await this.parse(FunctionCronAdd);
|
|
40
|
+
const [target, scheduleArg] = this.positional(args.target, args.schedule, "schedule");
|
|
41
|
+
const flags = { ...rawFlags, name: target ?? rawFlags.name };
|
|
42
|
+
try {
|
|
43
|
+
let schedule;
|
|
44
|
+
try {
|
|
45
|
+
schedule = normalizeSchedule(scheduleArg);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
this.error(e.message, { exit: 1 });
|
|
49
|
+
}
|
|
50
|
+
const { fn, clients } = await resolveLinkedFunction(this.clients, flags).catch((e) => {
|
|
51
|
+
if (e instanceof Error && !("status" in e))
|
|
52
|
+
this.error(e.message, { exit: 1 });
|
|
53
|
+
throw e;
|
|
54
|
+
});
|
|
55
|
+
this.clients = clients;
|
|
56
|
+
const trigger = await withSpinner("Adding cron trigger", () => this.clients.api.functions.createCronTrigger(fn.id, {
|
|
57
|
+
schedule,
|
|
58
|
+
enabled: !flags.disabled,
|
|
59
|
+
retries: flags.retries,
|
|
60
|
+
description: flags.description ?? null,
|
|
61
|
+
}));
|
|
62
|
+
this.emit(trigger, () => {
|
|
63
|
+
this.log(ok(`Added cron trigger ${shortTriggerId(trigger.id)} to ${fn.slug}: ${trigger.schedule} (UTC).`));
|
|
64
|
+
if (!trigger.enabled) {
|
|
65
|
+
this.log(dim(` Created disabled. Enable it: synteq function cron update ${shortTriggerId(trigger.id)} --enable`));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
this.fail(err);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/function/cron/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
2
|
+
/** `synteq function cron list` — a function's cron triggers.
|
|
3
|
+
* Backend: GET /functions/{id}/triggers/cron. */
|
|
4
|
+
export default class FunctionCronList extends BaseCommand {
|
|
5
|
+
static apiKeyScope: string;
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
3
|
+
import { resolveLinkedFunction } from "../../../functions-support/link.js";
|
|
4
|
+
import { shortTriggerId } from "../../../functions-support/cron.js";
|
|
5
|
+
import { withSpinner } from "../../../ui/spinner.js";
|
|
6
|
+
import { renderTable } from "../../../ui/table.js";
|
|
7
|
+
import { dim } from "../../../ui/glyphs.js";
|
|
8
|
+
/** `synteq function cron list` — a function's cron triggers.
|
|
9
|
+
* Backend: GET /functions/{id}/triggers/cron. */
|
|
10
|
+
export default class FunctionCronList extends BaseCommand {
|
|
11
|
+
static apiKeyScope = "none";
|
|
12
|
+
static description = "List a function's cron triggers (schedules are UTC).";
|
|
13
|
+
static examples = [
|
|
14
|
+
"<%= config.bin %> function cron list # bare: this directory's linked function",
|
|
15
|
+
"<%= config.bin %> function cron list --name my-fn",
|
|
16
|
+
"<%= config.bin %> function cron list --name my-fn -o json",
|
|
17
|
+
];
|
|
18
|
+
static flags = {
|
|
19
|
+
name: Flags.string({
|
|
20
|
+
description: "Function slug (or uuid) (default: this directory's linked function).",
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
await this.initClients();
|
|
25
|
+
const { flags } = await this.parse(FunctionCronList);
|
|
26
|
+
try {
|
|
27
|
+
const { fn, clients } = await resolveLinkedFunction(this.clients, flags).catch((e) => {
|
|
28
|
+
if (e instanceof Error && !("status" in e))
|
|
29
|
+
this.error(e.message, { exit: 1 });
|
|
30
|
+
throw e;
|
|
31
|
+
});
|
|
32
|
+
this.clients = clients;
|
|
33
|
+
const triggers = await withSpinner("Loading cron triggers", () => this.clients.api.functions.cronTriggers(fn.id));
|
|
34
|
+
this.emit(triggers, () => {
|
|
35
|
+
if (triggers.length === 0) {
|
|
36
|
+
this.log(`No cron triggers. Add one: synteq function cron add "*/15 * * * *" --name ${fn.slug}`);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.log(renderTable(["ID", "SCHEDULE (UTC)", "ENABLED", "RETRIES", "LAST RUN", "LAST STATUS", "DESCRIPTION"], triggers.map((t) => [
|
|
40
|
+
shortTriggerId(t.id),
|
|
41
|
+
t.schedule,
|
|
42
|
+
t.enabled ? "yes" : dim("no"),
|
|
43
|
+
String(t.retries),
|
|
44
|
+
t.lastRunAt ? dim(t.lastRunAt) : dim("never"),
|
|
45
|
+
t.lastStatus ?? "",
|
|
46
|
+
t.description ?? "",
|
|
47
|
+
])));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
this.fail(err);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/function/cron/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
2
|
+
/** `synteq function cron rm <trigger>` — delete a cron trigger.
|
|
3
|
+
* Backend: DELETE /functions/{id}/triggers/cron/{triggerId}. */
|
|
4
|
+
export default class FunctionCronRm extends BaseCommand {
|
|
5
|
+
static apiKeyScope: string;
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static args: {
|
|
9
|
+
target: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
10
|
+
trigger: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
static flags: {
|
|
13
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
3
|
+
import { resolveLinkedFunction } from "../../../functions-support/link.js";
|
|
4
|
+
import { resolveTrigger, shortTriggerId } from "../../../functions-support/cron.js";
|
|
5
|
+
import { isInteractive, confirmAction } from "../../../ui/wizard.js";
|
|
6
|
+
import { ok } from "../../../ui/glyphs.js";
|
|
7
|
+
/** `synteq function cron rm <trigger>` — delete a cron trigger.
|
|
8
|
+
* Backend: DELETE /functions/{id}/triggers/cron/{triggerId}. */
|
|
9
|
+
export default class FunctionCronRm extends BaseCommand {
|
|
10
|
+
static apiKeyScope = "none";
|
|
11
|
+
static description = "Delete a cron trigger. To pause one instead, use `function cron update <id> --disable`.";
|
|
12
|
+
static examples = [
|
|
13
|
+
"<%= config.bin %> function cron rm 3f9a1c2e # bare: linked function",
|
|
14
|
+
"<%= config.bin %> function cron rm 3f9a1c2e --name my-fn --yes",
|
|
15
|
+
"<%= config.bin %> function cron rm 3f9a1c2e --name my-fn --yes -o json",
|
|
16
|
+
];
|
|
17
|
+
static args = {
|
|
18
|
+
target: Args.string({ required: false, description: "Function slug or id (optional; default: the directory's linked function or --name)." }),
|
|
19
|
+
trigger: Args.string({
|
|
20
|
+
required: false,
|
|
21
|
+
description: "Trigger id — the short id from `function cron list`, or the full uuid.",
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
static flags = {
|
|
25
|
+
name: Flags.string({
|
|
26
|
+
description: "Function slug (or uuid) (default: this directory's linked function).",
|
|
27
|
+
}),
|
|
28
|
+
yes: Flags.boolean({
|
|
29
|
+
char: "y",
|
|
30
|
+
description: "Skip the confirmation prompt (required for non-interactive use).",
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
async run() {
|
|
34
|
+
await this.initClients();
|
|
35
|
+
const { args, flags: rawFlags } = await this.parse(FunctionCronRm);
|
|
36
|
+
const [target, trigger] = this.positional(args.target, args.trigger, "trigger");
|
|
37
|
+
const flags = { ...rawFlags, name: target ?? rawFlags.name };
|
|
38
|
+
try {
|
|
39
|
+
const { fn, clients } = await resolveLinkedFunction(this.clients, flags).catch((e) => {
|
|
40
|
+
if (e instanceof Error && !("status" in e))
|
|
41
|
+
this.error(e.message, { exit: 1 });
|
|
42
|
+
throw e;
|
|
43
|
+
});
|
|
44
|
+
this.clients = clients;
|
|
45
|
+
const triggers = await this.clients.api.functions.cronTriggers(fn.id);
|
|
46
|
+
let target;
|
|
47
|
+
try {
|
|
48
|
+
target = resolveTrigger(triggers, trigger);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
this.error(e.message, { exit: 1 });
|
|
52
|
+
}
|
|
53
|
+
if (!flags.yes) {
|
|
54
|
+
if (!(isInteractive() && this.outputFormat === "table")) {
|
|
55
|
+
this.error("Refusing to delete without --yes in a non-interactive session.", { exit: 1 });
|
|
56
|
+
}
|
|
57
|
+
const go = await confirmAction(`Delete cron trigger "${target.schedule}" from ${fn.slug}?`, false);
|
|
58
|
+
if (!go) {
|
|
59
|
+
this.log("Aborted.");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await this.clients.api.functions.deleteCronTrigger(fn.id, target.id);
|
|
64
|
+
this.emit({ functionId: fn.id, triggerId: target.id, removed: true }, () => {
|
|
65
|
+
this.log(ok(`Deleted cron trigger ${shortTriggerId(target.id)} (${target.schedule}) from ${fn.slug}.`));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
this.fail(err);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=rm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.js","sourceRoot":"","sources":["../../../../src/commands/function/cron/rm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
2
|
+
/** `synteq function cron run <trigger>` — fire a cron trigger now.
|
|
3
|
+
* Backend: POST /functions/{id}/triggers/cron/{triggerId}/run. */
|
|
4
|
+
export default class FunctionCronRun extends BaseCommand {
|
|
5
|
+
static apiKeyScope: string;
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static args: {
|
|
9
|
+
target: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
10
|
+
trigger: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
static flags: {
|
|
13
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
3
|
+
import { resolveLinkedFunction } from "../../../functions-support/link.js";
|
|
4
|
+
import { resolveTrigger, shortTriggerId } from "../../../functions-support/cron.js";
|
|
5
|
+
import { withSpinner } from "../../../ui/spinner.js";
|
|
6
|
+
import { ok, dim } from "../../../ui/glyphs.js";
|
|
7
|
+
/** `synteq function cron run <trigger>` — fire a cron trigger now.
|
|
8
|
+
* Backend: POST /functions/{id}/triggers/cron/{triggerId}/run. */
|
|
9
|
+
export default class FunctionCronRun extends BaseCommand {
|
|
10
|
+
static apiKeyScope = "none";
|
|
11
|
+
static description = "Fire a cron trigger now, outside its schedule. It is a real invocation: metered, logged, and it updates the trigger's last-run status.";
|
|
12
|
+
static examples = [
|
|
13
|
+
"<%= config.bin %> function cron run 3f9a1c2e # bare: linked function",
|
|
14
|
+
"<%= config.bin %> function cron run 3f9a1c2e --name my-fn -o json",
|
|
15
|
+
];
|
|
16
|
+
static args = {
|
|
17
|
+
target: Args.string({ required: false, description: "Function slug or id (optional; default: the directory's linked function or --name)." }),
|
|
18
|
+
trigger: Args.string({
|
|
19
|
+
required: false,
|
|
20
|
+
description: "Trigger id — the short id from `function cron list`, or the full uuid.",
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
static flags = {
|
|
24
|
+
name: Flags.string({
|
|
25
|
+
description: "Function slug (or uuid) (default: this directory's linked function).",
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
async run() {
|
|
29
|
+
await this.initClients();
|
|
30
|
+
const { args, flags: rawFlags } = await this.parse(FunctionCronRun);
|
|
31
|
+
const [target, trigger] = this.positional(args.target, args.trigger, "trigger");
|
|
32
|
+
const flags = { ...rawFlags, name: target ?? rawFlags.name };
|
|
33
|
+
try {
|
|
34
|
+
const { fn, clients } = await resolveLinkedFunction(this.clients, flags).catch((e) => {
|
|
35
|
+
if (e instanceof Error && !("status" in e))
|
|
36
|
+
this.error(e.message, { exit: 1 });
|
|
37
|
+
throw e;
|
|
38
|
+
});
|
|
39
|
+
this.clients = clients;
|
|
40
|
+
const triggers = await this.clients.api.functions.cronTriggers(fn.id);
|
|
41
|
+
let target;
|
|
42
|
+
try {
|
|
43
|
+
target = resolveTrigger(triggers, trigger);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
this.error(e.message, { exit: 1 });
|
|
47
|
+
}
|
|
48
|
+
const result = await withSpinner("Running cron trigger", () => this.clients.api.functions.runCronTrigger(fn.id, target.id));
|
|
49
|
+
this.emit(result, () => {
|
|
50
|
+
this.log(ok(`Fired cron trigger ${shortTriggerId(result.id)} on ${fn.slug}: ${result.lastStatus ?? "sent"}.`));
|
|
51
|
+
this.log(dim(` See the run: synteq function logs --name ${fn.slug}`));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
this.fail(err);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/function/cron/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
2
|
+
/** `synteq function cron update <trigger>` — edit a cron trigger.
|
|
3
|
+
* Backend: PATCH /functions/{id}/triggers/cron/{triggerId}. */
|
|
4
|
+
export default class FunctionCronUpdate extends BaseCommand {
|
|
5
|
+
static apiKeyScope: string;
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static args: {
|
|
9
|
+
target: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
10
|
+
trigger: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
static flags: {
|
|
13
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
schedule: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
retries: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
enable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
disable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
};
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../../base/command.js";
|
|
3
|
+
import { resolveLinkedFunction } from "../../../functions-support/link.js";
|
|
4
|
+
import { normalizeSchedule, resolveTrigger, shortTriggerId } from "../../../functions-support/cron.js";
|
|
5
|
+
import { withSpinner } from "../../../ui/spinner.js";
|
|
6
|
+
import { ok } from "../../../ui/glyphs.js";
|
|
7
|
+
/** `synteq function cron update <trigger>` — edit a cron trigger.
|
|
8
|
+
* Backend: PATCH /functions/{id}/triggers/cron/{triggerId}. */
|
|
9
|
+
export default class FunctionCronUpdate extends BaseCommand {
|
|
10
|
+
static apiKeyScope = "none";
|
|
11
|
+
static description = "Edit a cron trigger: schedule, description, retries, or switch it on/off. Only the flags you pass change.";
|
|
12
|
+
static examples = [
|
|
13
|
+
"<%= config.bin %> function cron update 3f9a1c2e --disable # bare: linked function",
|
|
14
|
+
'<%= config.bin %> function cron update 3f9a1c2e --schedule "0 */6 * * *" --name my-fn',
|
|
15
|
+
'<%= config.bin %> function cron update 3f9a1c2e --description "nightly sync" --retries 1 --name my-fn -o json',
|
|
16
|
+
];
|
|
17
|
+
static args = {
|
|
18
|
+
target: Args.string({ required: false, description: "Function slug or id (optional; default: the directory's linked function or --name)." }),
|
|
19
|
+
trigger: Args.string({
|
|
20
|
+
required: false,
|
|
21
|
+
description: "Trigger id — the short id from `function cron list`, or the full uuid.",
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
static flags = {
|
|
25
|
+
name: Flags.string({
|
|
26
|
+
description: "Function slug (or uuid) (default: this directory's linked function).",
|
|
27
|
+
}),
|
|
28
|
+
schedule: Flags.string({ char: "s", description: "New cron expression, quoted (UTC)." }),
|
|
29
|
+
description: Flags.string({ char: "d", description: "New description." }),
|
|
30
|
+
retries: Flags.integer({ description: "Re-fire a failed run this many times (0-2).", min: 0, max: 2 }),
|
|
31
|
+
enable: Flags.boolean({ description: "Switch the trigger on.", exclusive: ["disable"] }),
|
|
32
|
+
disable: Flags.boolean({ description: "Switch the trigger off (it stays listed).", exclusive: ["enable"] }),
|
|
33
|
+
};
|
|
34
|
+
async run() {
|
|
35
|
+
await this.initClients();
|
|
36
|
+
const { args, flags: rawFlags } = await this.parse(FunctionCronUpdate);
|
|
37
|
+
const [target, trigger] = this.positional(args.target, args.trigger, "trigger");
|
|
38
|
+
const flags = { ...rawFlags, name: target ?? rawFlags.name };
|
|
39
|
+
try {
|
|
40
|
+
const body = {};
|
|
41
|
+
if (flags.schedule !== undefined) {
|
|
42
|
+
try {
|
|
43
|
+
body.schedule = normalizeSchedule(flags.schedule);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
this.error(e.message, { exit: 1 });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (flags.description !== undefined)
|
|
50
|
+
body.description = flags.description;
|
|
51
|
+
if (flags.retries !== undefined)
|
|
52
|
+
body.retries = flags.retries;
|
|
53
|
+
if (flags.enable)
|
|
54
|
+
body.enabled = true;
|
|
55
|
+
if (flags.disable)
|
|
56
|
+
body.enabled = false;
|
|
57
|
+
if (Object.keys(body).length === 0) {
|
|
58
|
+
this.error("Nothing to change — pass --schedule, --description, --retries, --enable or --disable.", {
|
|
59
|
+
exit: 1,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const { fn, clients } = await resolveLinkedFunction(this.clients, flags).catch((e) => {
|
|
63
|
+
if (e instanceof Error && !("status" in e))
|
|
64
|
+
this.error(e.message, { exit: 1 });
|
|
65
|
+
throw e;
|
|
66
|
+
});
|
|
67
|
+
this.clients = clients;
|
|
68
|
+
const triggers = await this.clients.api.functions.cronTriggers(fn.id);
|
|
69
|
+
let target;
|
|
70
|
+
try {
|
|
71
|
+
target = resolveTrigger(triggers, trigger);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
this.error(e.message, { exit: 1 });
|
|
75
|
+
}
|
|
76
|
+
const updated = await withSpinner("Updating cron trigger", () => this.clients.api.functions.updateCronTrigger(fn.id, target.id, body));
|
|
77
|
+
this.emit(updated, () => {
|
|
78
|
+
this.log(ok(`Updated cron trigger ${shortTriggerId(updated.id)} on ${fn.slug}: ${updated.schedule} (UTC), ` +
|
|
79
|
+
`${updated.enabled ? "enabled" : "disabled"}, retries ${updated.retries}.`));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
this.fail(err);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/function/cron/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseCommand } from "../../base/command.js";
|
|
2
|
+
/** `synteq function delete` — destroy a function. Backend: DELETE /functions/{id},
|
|
3
|
+
* which the API allows only once the function has been PAUSED for 14 days
|
|
4
|
+
* (start the clock with `synteq function pause`; before that the API answers
|
|
5
|
+
* 409 naming the date, and this command surfaces that as-is).
|
|
6
|
+
* Irreversible, so a TTY has to retype the slug; --yes skips that retype,
|
|
7
|
+
* but the password step-up below still needs a terminal — there is no fully
|
|
8
|
+
* scripted path.
|
|
9
|
+
* Any directory link pointing at the function is dropped too, so a later
|
|
10
|
+
* `synteq function deploy` in that tree doesn't 404 against a dead id. */
|
|
11
|
+
export default class FunctionDelete extends BaseCommand {
|
|
12
|
+
static apiKeyScope: string;
|
|
13
|
+
static description: string;
|
|
14
|
+
static examples: string[];
|
|
15
|
+
static args: {
|
|
16
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
17
|
+
};
|
|
18
|
+
static flags: {
|
|
19
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../base/command.js";
|
|
3
|
+
import { resolveLinkedFunction } from "../../functions-support/link.js";
|
|
4
|
+
import { linkKind } from "../../config/store.js";
|
|
5
|
+
import { withSpinner } from "../../ui/spinner.js";
|
|
6
|
+
import { isInteractive, promptSecret, promptString } from "../../ui/wizard.js";
|
|
7
|
+
import { ok, dim } from "../../ui/glyphs.js";
|
|
8
|
+
/** `synteq function delete` — destroy a function. Backend: DELETE /functions/{id},
|
|
9
|
+
* which the API allows only once the function has been PAUSED for 14 days
|
|
10
|
+
* (start the clock with `synteq function pause`; before that the API answers
|
|
11
|
+
* 409 naming the date, and this command surfaces that as-is).
|
|
12
|
+
* Irreversible, so a TTY has to retype the slug; --yes skips that retype,
|
|
13
|
+
* but the password step-up below still needs a terminal — there is no fully
|
|
14
|
+
* scripted path.
|
|
15
|
+
* Any directory link pointing at the function is dropped too, so a later
|
|
16
|
+
* `synteq function deploy` in that tree doesn't 404 against a dead id. */
|
|
17
|
+
export default class FunctionDelete extends BaseCommand {
|
|
18
|
+
static apiKeyScope = "none";
|
|
19
|
+
static description = "Delete a function (paused for 14 days first) and forget any directory linked to it.";
|
|
20
|
+
static examples = [
|
|
21
|
+
"<%= config.bin %> function delete my-fn",
|
|
22
|
+
"<%= config.bin %> function delete my-fn --yes # skip the retype-the-slug step; the password is still asked for",
|
|
23
|
+
"<%= config.bin %> function delete my-fn --yes -o json",
|
|
24
|
+
];
|
|
25
|
+
static args = {
|
|
26
|
+
name: Args.string({
|
|
27
|
+
description: "Function slug (or uuid). Omit to use this directory's linked function.",
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
static flags = {
|
|
31
|
+
name: Flags.string({
|
|
32
|
+
description: "Function slug (or uuid) — the flag form of the positional arg.",
|
|
33
|
+
}),
|
|
34
|
+
yes: Flags.boolean({
|
|
35
|
+
char: "y",
|
|
36
|
+
description: "Skip the type-the-slug confirmation. The account password is still prompted for, so a terminal is required either way.",
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
async run() {
|
|
40
|
+
await this.initClients();
|
|
41
|
+
const { args, flags } = await this.parse(FunctionDelete);
|
|
42
|
+
try {
|
|
43
|
+
const { fn, clients } = await resolveLinkedFunction(this.clients, {
|
|
44
|
+
...flags,
|
|
45
|
+
name: args.name ?? flags.name,
|
|
46
|
+
}).catch((e) => {
|
|
47
|
+
if (e instanceof Error && !("status" in e))
|
|
48
|
+
this.error(e.message, { exit: 1 });
|
|
49
|
+
throw e;
|
|
50
|
+
});
|
|
51
|
+
this.clients = clients;
|
|
52
|
+
if (!flags.yes) {
|
|
53
|
+
if (!isInteractive() || this.outputFormat !== "table") {
|
|
54
|
+
this.error("Refusing to delete without a confirmation. Re-run with --yes.", { exit: 1 });
|
|
55
|
+
}
|
|
56
|
+
this.log(`This permanently deletes ${fn.slug} (${fn.hostname}) and its releases.`);
|
|
57
|
+
const typed = await promptString(`Type "${fn.slug}" to confirm`, { allowEmpty: true });
|
|
58
|
+
if (typed.trim() !== fn.slug) {
|
|
59
|
+
this.log("Aborted.");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// The API verifies the account password on a delete (step-up); a
|
|
64
|
+
// password never rides in argv or a flag, so this needs a terminal.
|
|
65
|
+
if (!isInteractive()) {
|
|
66
|
+
this.error("Deleting a function needs your password, which can only be typed at a terminal.", { exit: 1 });
|
|
67
|
+
}
|
|
68
|
+
const password = await promptSecret("Your account password");
|
|
69
|
+
await withSpinner(`Deleting ${fn.slug}`, () => this.clients.api.functions.delete(fn.id, password));
|
|
70
|
+
// Drop every directory link that pointed at this function.
|
|
71
|
+
const links = this.clients.config.get().links ?? {};
|
|
72
|
+
const unlinked = [];
|
|
73
|
+
for (const [dir, link] of Object.entries(links)) {
|
|
74
|
+
if (linkKind(link) === "function" && link.app_id === fn.id) {
|
|
75
|
+
this.clients.config.removeLink(dir);
|
|
76
|
+
unlinked.push(dir);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.emit({ id: fn.id, slug: fn.slug, deleted: true, unlinked }, () => {
|
|
80
|
+
this.log(ok(`Deleted ${fn.slug}.`));
|
|
81
|
+
for (const dir of unlinked)
|
|
82
|
+
this.log(dim(` Unlinked ${dir}.`));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
this.fail(err);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/function/delete.ts"],"names":[],"mappings":"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"}
|