upmind/provision-provider-domain-names
Laravel package that plugs domain provisioning into Upmind's provisioning framework. It supplies a provider implementation for registering, renewing, transferring and managing domains, with hooks for contacts, nameservers, DNS records and TLD-specific rules, making registrar integrations faster to b...
composer require <vendor>/<package> and publish the config (php artisan vendor:publish --tag="<package>-config"). Most of the day-to-day surface area lives in config/<package>.php and in src/Providers/*.src/Providers/RealtimeRegister/ first. Each provider is a thin adapter around the registrar API; the surrounding manager/facade/dispatcher is where Laravel integration happens.config/services.php (or the package config) rather than .env-reading inside provider classes, and set the sandbox/base URL for local work..si domain through Realtime Register — check availability, build contacts, call register()/transfer() with an explicit period, and persist the resulting order/domain reference.$registrar = DomainRegistrar::provider('realtime-register');
$registrar->register(
domain: 'example.si',
period: 1, // years — see gotchas on provider quirks
contacts: $contacts,
);
.si technical-contact rule (no organization field) should be handled inside the provider adapter, not in your controller — keep the TLD-specific branching out of app code.period on register/transfer; keep your own contract stable so future provider fixes don't ripple into your callsites.DomainOrder row with a unique key, and guard against double-submits — the registrar is not your source of truth for idempotency.// app/Services/DomainRegistration.php
public function register(string $domain, int $years): DomainOrder
{
return DB::transaction(function () use ($domain, $years) {
$order = DomainOrder::firstOrCreate(
['domain' => $domain, 'action' => 'register'],
['years' => $years, 'status' => 'pending'],
);
dispatch(new SubmitRegistration($order));
return $order;
});
}
period on register/transfer. Pin the version in composer.json and add a test asserting the period actually reaches the provider payload (Http::assertSent), not just that the call succeeded..si technical contact no longer sends organization. If you were relying on that field being propagated (e.g., matching contacts by exact payload), your assertions or reconciliation logic may need updating. Build contacts against the adapter's rules, not a universal schema.supports('dnssec')) behind a small interface rather than instanceof checks scattered in controllers.register are the dangerous case — reconcile against the registrar's order status before retrying, or you risk double billing.env() directly instead of config(), it breaks under php artisan config:cache. Confirm your credentials land in config files.tests/Fixtures/realtime-register/*.json set of real sandbox responses and replay them in unit tests — this is the cheapest way to catch the next provider-side quirk like the period fix.How can I help you explore Laravel packages today?