1package cloudflare 2 3import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "net/http" 8 "time" 9 10 "github.com/pkg/errors" 11) 12 13// WorkerCronTriggerResponse represents the response from the Worker cron trigger 14// API endpoint. 15type WorkerCronTriggerResponse struct { 16 Response 17 Result WorkerCronTriggerSchedules `json:"result"` 18} 19 20// WorkerCronTriggerSchedules contains the schedule of Worker cron triggers. 21type WorkerCronTriggerSchedules struct { 22 Schedules []WorkerCronTrigger `json:"schedules"` 23} 24 25// WorkerCronTrigger holds an individual cron schedule for a worker. 26type WorkerCronTrigger struct { 27 Cron string `json:"cron"` 28 CreatedOn *time.Time `json:"created_on,omitempty"` 29 ModifiedOn *time.Time `json:"modified_on,omitempty"` 30} 31 32// ListWorkerCronTriggers fetches all available cron triggers for a single Worker 33// script. 34// 35// API reference: https://api.cloudflare.com/#worker-cron-trigger-get-cron-triggers 36func (api *API) ListWorkerCronTriggers(ctx context.Context, scriptName string) ([]WorkerCronTrigger, error) { 37 if err := api.checkAccountID(); err != nil { 38 return []WorkerCronTrigger{}, err 39 } 40 41 uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s/schedules", api.AccountID, scriptName) 42 res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil) 43 if err != nil { 44 return []WorkerCronTrigger{}, err 45 } 46 47 result := WorkerCronTriggerResponse{} 48 if err := json.Unmarshal(res, &result); err != nil { 49 return []WorkerCronTrigger{}, errors.Wrap(err, errUnmarshalError) 50 } 51 52 return result.Result.Schedules, err 53} 54 55// UpdateWorkerCronTriggers updates a single schedule for a Worker cron trigger. 56// 57// API reference: https://api.cloudflare.com/#worker-cron-trigger-update-cron-triggers 58func (api *API) UpdateWorkerCronTriggers(ctx context.Context, scriptName string, crons []WorkerCronTrigger) ([]WorkerCronTrigger, error) { 59 if err := api.checkAccountID(); err != nil { 60 return []WorkerCronTrigger{}, err 61 } 62 63 uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s/schedules", api.AccountID, scriptName) 64 res, err := api.makeRequestContext(ctx, http.MethodPut, uri, crons) 65 if err != nil { 66 return []WorkerCronTrigger{}, err 67 } 68 69 result := WorkerCronTriggerResponse{} 70 if err := json.Unmarshal(res, &result); err != nil { 71 return []WorkerCronTrigger{}, errors.Wrap(err, errUnmarshalError) 72 } 73 74 return result.Result.Schedules, err 75} 76