Laravel Cloudflare

PHP MIT

Complete Laravel Cloudflare API SDK for managing DNS records, zones, cache, SSL, firewall rules, workers, analytics, and Cloudflare services with a fluent Laravel-first developer experience.

Stars
2
Forks
0
Downloads
N/A
Open Issues
0
Files main

Repository Files

Loading file structure...
src/Managers/WorkerScriptManager.php
<?php

namespace Vendor\Cloudflare\Managers;

use Vendor\Cloudflare\Collections\WorkerScriptCollection;
use Vendor\Cloudflare\DTOs\WorkerScript;

class WorkerScriptManager extends AbstractManager
{
    public function all(string $accountId)
    {
        $response = $this->getRequest("accounts/{$accountId}/workers/scripts");

        return $this->hydrate($response, function (array $data) {
            $items = array_map(fn (array $item) => WorkerScript::fromArray($item), $data['result'] ?? []);

            return new WorkerScriptCollection($items);
        });
    }

    public function get(string $accountId)
    {
        return $this->all($accountId);
    }

    public function find(string $accountId, string $name)
    {
        $response = $this->getRequest("accounts/{$accountId}/workers/scripts/{$name}");

        return $this->hydrate($response, function (array $data) {
            return WorkerScript::fromArray($data['result'] ?? []);
        });
    }

    public function upload(string $accountId, string $name, string $scriptContent, array $metadata = [])
    {
        $options = [
            'headers' => ['Content-Type' => 'application/javascript'],
            'body' => $scriptContent,
        ];
        if (! empty($metadata)) {
            $options = [
                'multipart' => [
                    [
                        'name' => 'metadata',
                        'contents' => json_encode($metadata),
                        'headers' => ['Content-Type' => 'application/json'],
                    ],
                    [
                        'name' => 'script',
                        'contents' => $scriptContent,
                        'headers' => ['Content-Type' => 'application/javascript'],
                    ],
                ],
            ];
        }
        $response = $this->client->request('PUT', "accounts/{$accountId}/workers/scripts/{$name}", $options);

        return $this->hydrate($response, function (array $data) {
            return WorkerScript::fromArray($data['result'] ?? []);
        });
    }

    public function delete(string $accountId, string $name)
    {
        return $this->deleteRequest("accounts/{$accountId}/workers/scripts/{$name}");
    }

    public function getSettings(string $accountId, string $name)
    {
        return $this->getRequest("accounts/{$accountId}/workers/scripts/{$name}/settings");
    }

    public function updateSettings(string $accountId, string $name, array $settings)
    {
        return $this->patchRequest("accounts/{$accountId}/workers/scripts/{$name}/settings", $settings);
    }
}