All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Repairs projects where notify account was created but Resend domain
provisioning (steps 7-9) failed — e.g., RESEND_API_KEY not yet
configured at project creation time.
- ProvisionNotifyDomain in port.NotifyProvisioner interface
- Provisioner.ProvisionNotifyDomain: creates Resend domain for existing
notify host, upserts DKIM/SPF DNS records in Cloudflare, kicks off
async verification via verifyWithRetry
- POST /projects/{id}/notify/provision handler:
- reads NOTIFY_HOST from credential store (fails if not set)
- rejects if NOTIFY_RESEND_DOMAIN_ID already present (use /verify)
- stores returned domain ID as NOTIFY_RESEND_DOMAIN_ID credential
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.9 KiB
Go
40 lines
1.9 KiB
Go
package port
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/orchard9/rdev/internal/domain"
|
|
)
|
|
|
|
// NotifyProvisioner manages per-project email delivery on the notify service.
|
|
// Each project gets its own isolated sending host (mail.{slug}.threesix.ai),
|
|
// Resend domain with DKIM/SPF, and a dedicated notify account with send key.
|
|
type NotifyProvisioner interface {
|
|
// CreateProjectNotify provisions a notify host, Resend domain, DNS records,
|
|
// and account with send key for the project.
|
|
CreateProjectNotify(ctx context.Context, projectID, slug string) (*domain.NotifyCredentials, error)
|
|
|
|
// DeleteProjectNotify removes all notify resources for a project:
|
|
// the notify account, the per-project host, the Resend domain, and DNS records.
|
|
DeleteProjectNotify(ctx context.Context, projectID, slug, resendDomainID string) error
|
|
|
|
// GetProjectNotify returns notify credentials for a project, or nil if not provisioned.
|
|
GetProjectNotify(ctx context.Context, projectID string) (*domain.NotifyCredentials, error)
|
|
|
|
// TestConnection verifies the admin API key and notify service are reachable.
|
|
TestConnection(ctx context.Context) error
|
|
|
|
// VerifyProjectNotify triggers Resend domain verification for the given resend domain ID.
|
|
// Should be called after DNS records have had time to propagate.
|
|
VerifyProjectNotify(ctx context.Context, projectID, resendDomainID string) error
|
|
|
|
// GetNotifyDomainStatus returns the Resend verification status for the project's email domain.
|
|
GetNotifyDomainStatus(ctx context.Context, host, resendDomainID string) (*domain.NotifyDomainStatus, error)
|
|
|
|
// ProvisionNotifyDomain creates the Resend domain for an existing notify host,
|
|
// adds DKIM/SPF DNS records, and starts async verification.
|
|
// Use this to repair projects where steps 7-9 of CreateProjectNotify failed.
|
|
// Returns the Resend domain ID for storage in the credential store.
|
|
ProvisionNotifyDomain(ctx context.Context, projectID, host string) (resendDomainID string, err error)
|
|
}
|