Both sentinels had the identical message "user not found", making them
indistinguishable in logs and error responses. Rename the auth variant
to "auth user not found" so debugging and error matching are unambiguous.
When TidyUsers removes an AuthUser with unverified email and no login
after 7 days, the corresponding User record was left orphaned in the
database. Now DeleteUser is called before dropping the AuthUser.
Add click-to-collapse and double-click-to-solo behavior on group
headers in ZoneList, with a chevron indicator. Collapsed state is
persisted in localStorage and cleared on login/logout.
Refresh the overall visual design across the frontend: floating labels
and centered card layout for auth pages, animated sidebar+results view
for the resolver, polished dropdown menus, toasts, and feedback widget,
and cleaner global styles (navbar shadow, border, transitions).
Switch ServiceMeta.Domain, ServiceMeta.Ttl, ServiceMeta.NbResources,
and ZoneMeta.DefaultTTL from binding:"required" to validate:"required".
This keeps them marked as required in the OpenAPI spec (swaggo reads
both tags) without gin rejecting valid zero values (0 for uint32,
"" for root domain).
CreateDomain now takes a DomainCreationInput and returns the created
Domain, so the controller no longer needs to construct an intermediate
Domain struct and the response includes the server-assigned fields.
Fixes: https://github.com/happyDomain/happydomain/issues/44
Avoid potential panics from nil or missing fields when migrating SRV
records by using comma-ok type assertions and guarding against empty
name/proto values.
The InMemoryStorage struct carried per-entity maps and fields that were
never used: all storage goes through the generic KV data map. Strip the
struct down to just mu + data, and update tests to use
inmemory.Instantiate() instead of manually wrapping with kv.NewKVDatabase.
openapi-ts v0.95.0 now requires a valid tsconfig chain to resolve.
Since tsconfig.json extends .svelte-kit/tsconfig.json which is generated,
we need to run svelte-kit sync first to create it.
Replace `any` with precise types (unknown, Record<string, any>, specific
interfaces) in props, function signatures, and index signatures. Introduce
ServiceWithValue to bridge SDK's HappydnsService.Service from unknown to
its runtime shape. Simplify updateDomain to take explicit id + body params.
Replace $state + $effect pattern with $derived for localDomains to properly react to prop changes. Also reformat genGroups signature and sort callback indentation.
Replace hand-written interfaces with types derived from SDK-generated types
(alias, Required<>, Omit<> & extend) so the two type systems stay in sync.
This eliminates all `as any` casts and reduces `as unknown as` casts from 13
to 9 in the API wrapper layer.
Introduce dedicated input types (DomainUpdateInput, SessionInput) to limit
writable fields on update endpoints, and add binding:required tags across
model structs to improve validation and Swagger documentation accuracy.
Propagate context.Context as first parameter through all provider and
domain usecase interface methods that didn't already have it. This is
a prerequisite for the upcoming secret management layer, which needs
request-scoped context to carry session-derived encryption keys.
Replace sha256.Sum224 (SHA-224 algorithm) with SHA-256 truncated to 28
bytes, matching what RFCs 7929 and 8162 actually specify and what the
frontend was already computing correctly. Also wrap GetRecords errors
with the service type name for easier diagnosis.
Fix panic on DS records by importing dnscontrol rtype package
For record types registered in rtypecontrol.Func, bypass dnsrr.RRtoRC and
call rtypecontrol.NewRecordConfigFromStruct directly, passing the record as
the struct argument. This ensures correct handling of modern rtypes (DS, RP,
etc.) without relying on dnsrr's internal dispatch. Legacy types fall back to
the existing dnsrr.RRtoRC path.
Import _ "github.com/StackExchange/dnscontrol/v4/pkg/rtype" to trigger
init() registration of DS and RP as modern types. Without this import,
dnsrr.RRtoRC would panic with "DS should be handled as modern type".
The ProviderMessage does not contain necesseraly all
metadata. Moreover some metadata shouldn't be updated (Owner, Id,
...). So keep the modifications to the minimum.
Introduce a new adapter layer that allows happyDomain to use providers
from the libdns ecosystem alongside the existing dnscontrol providers.
The adapter implements ProviderActuator by converting between miekg/dns
and libdns record formats, reusing the existing DNSControl diff engine
for computing corrections, and generating executable correction functions
that call libdns Append/Delete/Set methods.
For providers that manage SOA serials (like AXFRDDNS), re-fetch the
zone after applying corrections to capture the real published state.
The snapshot and WIP zone's Origin service are both updated with the
actual serial.
This is gated on a new "manages-soa-serial" capability, preserving
the existing behavior for providers that abstract SOA handling.
Closes: https://github.com/happyDomain/happydomain/issues/35
Extract DomainTableRow and ProviderLink components from the monolithic
Table.svelte, which was mixing table structure, provider name resolution,
row navigation, and action button logic into a single component.