core

package
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 4, 2026 License: MIT Imports: 45 Imported by: 0

Documentation

Overview

Package core owns Ridu's application contracts and runtime.

Most applications should import the root ridu package, which re-exports the stable authoring surface. Extensions that need the underlying application contract may import core directly, following the same launcher/core split as PocketBase.

Index

Constants

View Source
const (
	// PluginDatabaseAdapterPostgres selects PostgreSQL-specific SQL.
	PluginDatabaseAdapterPostgres = schema.PluginDatabaseAdapterPostgres
	// PluginDatabaseAdapterSQLite selects SQLite-specific SQL.
	PluginDatabaseAdapterSQLite = schema.PluginDatabaseAdapterSQLite
)
View Source
const (
	TaskBackoffFixed       = store.TaskBackoffFixed
	TaskBackoffLinear      = store.TaskBackoffLinear
	TaskBackoffExponential = store.TaskBackoffExponential
)
View Source
const AdminPluginAPIVersion = schema.CurrentAdminPluginAPIVersion

AdminPluginAPIVersion is the build-time contract understood by this Ridu release. Admin packages declare the same value so generated registries can reject incompatible packages before the application is used.

View Source
const FrameworkVersion = "0.1.5"

FrameworkVersion identifies the public Go framework and project-command contract compiled into an application. It is independent from schema manifest and machine protocol versions.

View Source
const (
	// MaxTaskPayloadBytes bounds both durable input and output. Large files and
	// exports belong in object storage with a small durable task reference.
	MaxTaskPayloadBytes = store.MaxTaskPayloadBytes
)
View Source
const PluginAPIVersion = schema.CurrentPluginAPIVersion

PluginAPIVersion is the compiled backend extension contract understood by this Ridu release. It changes only when public plugin capability interfaces become incompatible.

Variables

This section is empty.

Functions

func AbortTask

func AbortTask(code string, cause error) error

AbortTask marks a handler error terminal. It is retained as a dead-letter result until the task's configured retention expires.

func Execute

func Execute(applicationConfig Config, supplied ...ExecuteOption) (result error)

Execute runs the framework-owned project command driver for a generated application. Project commands resolve config without invoking the lazy runtime store factory; the no-argument branch starts the HTTP server.

func Resolve

func Resolve(applicationConfig Config) (schema.Manifest, error)

Resolve applies config transforms in declared plugin order, validates and normalizes the result, and returns an immutable canonical manifest.

func RetryTask

func RetryTask(code string, cause error) error

RetryTask marks a handler error retryable with the definition's backoff.

func RetryTaskAfter

func RetryTaskAfter(code string, cause error, delay time.Duration) error

RetryTaskAfter marks a handler error retryable after at least delay. This is useful for provider rate limits; the persisted definition backoff remains the fallback when delay is not positive.

Types

type APIKey

type APIKey struct {
	ID        string
	Name      string
	Key       string
	CreatedAt time.Time
	ExpiresAt time.Time
}

APIKey is returned only when a new key is created. Key is the bearer secret and cannot be recovered later.

type APIKeyInfo

type APIKeyInfo struct {
	ID         string
	Name       string
	CreatedAt  time.Time
	LastUsedAt time.Time
	ExpiresAt  time.Time
}

APIKeyInfo is safe API-key metadata suitable for account settings UIs.

type AccessCapabilities

type AccessCapabilities struct {
	Operations OperationCapabilities
	Fields     map[string]FieldCapabilities
}

type AccessContext

type AccessContext struct {
	// Context is the request-scoped cancellation and deadline context.
	Context context.Context
	// Operation is the collection operation being evaluated.
	Operation Operation
	// CollectionID is the stable identity of the target collection.
	CollectionID schema.StableID
	// GlobalID is the stable identity of the target global, when applicable.
	GlobalID schema.StableID
	// ID is the requested document ID. It is empty for creates and list reads.
	ID string
	// Actor is the authenticated document, or nil for an anonymous request.
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Data is a detached snapshot of incoming create or update values.
	Data store.Values
	// Local exposes nested operations through the same transaction and access
	// pipeline. Rules must avoid recursively invoking themselves without a guard.
	Local      *LocalAPI
	Locale     schema.LocaleCode
	AllLocales bool
}

AccessContext is the stable, transaction-scoped request context supplied to collection access rules.

type AccessDecision

type AccessDecision struct {
	// contains filtered or unexported fields
}

AccessDecision is immutable. Filter returns a detached query expression snapshot when the decision is filtered.

func Allow

func Allow() AccessDecision

Allow authorizes an operation without a document predicate.

func Deny

func Deny() AccessDecision

Deny rejects an operation.

func Where

func Where(expression query.Expression) AccessDecision

Where requires the supplied predicate to remain attached to the atomic store operation.

func (AccessDecision) Filter

func (decision AccessDecision) Filter() (query.Node, bool)

Filter returns a detached predicate for a filtered decision.

func (AccessDecision) Kind

func (decision AccessDecision) Kind() AccessDecisionKind

Kind reports whether the decision allows, denies, or filters the operation.

type AccessDecisionKind

type AccessDecisionKind string

AccessDecisionKind identifies the result of an access rule.

const (
	AccessAllow AccessDecisionKind = "allow"
	AccessDeny  AccessDecisionKind = "deny"
	AccessWhere AccessDecisionKind = "where"
)

type AccessRule

type AccessRule func(AccessContext) (AccessDecision, error)

AccessRule returns an allow, deny, or filtered decision.

type AdminConfig

type AdminConfig struct {
	// User is the slug of the auth-enabled collection whose sessions may access
	// the admin. It is required when the application has any auth collection.
	User schema.CollectionSlug
	// Localization configures the language and timezone choices for the
	// framework-owned interface. It is independent from content localization.
	Localization AdminLocalizationConfig
}

AdminConfig controls application-level behavior of the framework-owned admin.

type AdminLanguage

type AdminLanguage struct {
	Code              string
	Label             string
	LabelTranslations map[string]string
	RTL               bool
}

AdminLanguage is one translated admin interface available to editors.

type AdminLocalizationConfig

type AdminLocalizationConfig struct {
	Languages       []AdminLanguage
	DefaultLanguage string
	TimeZones       []AdminTimeZone
	DefaultTimeZone string
}

AdminLocalizationConfig declares interface languages and editor timezones. Translation catalogs remain statically imported TypeScript modules and are never serialized into the schema manifest.

type AdminPluginMetadata

type AdminPluginMetadata struct {
	// Package is an installed bare JavaScript package specifier.
	Package string
	// Export is the named AdminPlugin export in Package.
	Export string
	// APIVersion must equal AdminPluginAPIVersion.
	APIVersion uint32
	// PairingVersion changes when backend and admin halves cease to match.
	PairingVersion uint32
	// Routes lists authenticated admin route paths in exact registration order.
	Routes []string
	// Assets lists package-relative static assets in exact registration order.
	Assets []string
}

AdminPluginMetadata describes the statically imported admin half of a compiled backend plugin. Package must be an installed JavaScript package specifier, Export must be its named AdminPlugin export, and PairingVersion must match the admin export. Increment PairingVersion when the backend and admin halves stop being mutually compatible.

type AdminTimeZone

type AdminTimeZone struct {
	ID                string
	Label             string
	LabelTranslations map[string]string
}

AdminTimeZone is one IANA timezone offered by the admin interface.

type AfterCommitDispatcher

type AfterCommitDispatcher interface {
	Dispatch(context.Context, AfterCommitEffect) error
}

AfterCommitDispatcher delivers committed effects immediately or to a durable worker.

type AfterCommitEffect

type AfterCommitEffect struct {
	// Operation identifies the committed operation.
	Operation Operation
	// CollectionID identifies the affected collection.
	CollectionID schema.StableID
	// GlobalID identifies the affected global, when applicable.
	GlobalID schema.StableID
	// DocumentID identifies the affected document.
	DocumentID string
	// Run performs the post-commit side effect.
	Run func(context.Context) error
}

AfterCommitEffect is a committed, named effect that a dispatcher may run immediately or hand to a durable execution boundary.

type App

type App struct {
	// contains filtered or unexported fields
}

App is a resolved Ridu application bound to one document store.

func New

func New(applicationConfig Config, backend store.Store) (*App, error)

func (*App) APIKeys

func (application *App) APIKeys(ctx context.Context, sessionToken string) ([]APIKeyInfo, error)

APIKeys lists safe metadata for the current identity's active API keys.

func (*App) AcquireDocumentLock

func (application *App) AcquireDocumentLock(ctx context.Context, collection, documentID string, takeover bool, identity *AuthIdentity) (DocumentLockState, error)

AcquireDocumentLock creates or refreshes a lease for one exact identity. Takeover replaces another active owner.

func (*App) AuthBootstrapAvailable

func (application *App) AuthBootstrapAvailable(ctx context.Context, collection string) (bool, error)

AuthBootstrapAvailable reports whether the configured admin-user collection still permits Ridu's omitted-policy, one-time anonymous bootstrap. Explicit Create policies and secondary auth collections never use this setup path.

func (*App) AuthInitialized

func (application *App) AuthInitialized(ctx context.Context, collection string) (initialized bool, err error)

AuthInitialized reports whether an active document exists in an auth collection. It intentionally bypasses collection read access so first-run setup can decide whether bootstrap UI is still appropriate without exposing any document data.

func (*App) AuthenticateAPIKey

func (application *App) AuthenticateAPIKey(ctx context.Context, raw string) (store.Document, error)

AuthenticateAPIKey resolves a bearer API key to its user without creating a browser session. Every failure intentionally shares one response.

func (*App) AuthenticateAPIKeyIdentity

func (application *App) AuthenticateAPIKeyIdentity(ctx context.Context, raw string) (AuthIdentity, error)

AuthenticateAPIKeyIdentity resolves a bearer API key to its exact auth collection and current actor document.

func (*App) AuthenticateExternal

func (application *App) AuthenticateExternal(ctx context.Context, headers map[string][]string) (store.Document, error)

AuthenticateExternal runs configured request strategies in deterministic collection and declaration order.

func (*App) AuthenticateExternalIdentity

func (application *App) AuthenticateExternalIdentity(ctx context.Context, headers map[string][]string) (AuthIdentity, error)

AuthenticateExternalIdentity runs configured request strategies and retains the exact auth collection that recognized the request.

func (*App) CancelScheduledPublish

func (application *App) CancelScheduledPublish(ctx context.Context, collection, documentID, jobID string, identity *AuthIdentity) error

CancelScheduledPublish removes a scheduled publish using one exact identity.

func (*App) ChangePassword

func (application *App) ChangePassword(ctx context.Context, sessionToken, currentPassword, nextPassword string) error

ChangePassword verifies the current password, validates the replacement, then atomically replaces the hash and revokes every session and API key.

func (*App) CleanupUploads

func (application *App) CleanupUploads(ctx context.Context, olderThan time.Duration) (ReconcileResult, error)

CleanupUploads deletes the candidates reported by ReconcileUploads. A positive grace period prevents in-flight storage preparation from being mistaken for an orphan before its document transaction commits.

func (*App) CreateAPIKey

func (application *App) CreateAPIKey(ctx context.Context, sessionToken, name string, expiresAt time.Time) (APIKey, error)

CreateAPIKey mints a high-entropy bearer secret for the current identity. The returned Key is available only from this call.

func (*App) CreateAuthUser

func (application *App) CreateAuthUser(ctx context.Context, collection string, values store.Values, password string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

CreateAuthUser creates an auth document and its private password credential atomically through the ordinary create operation pipeline.

func (*App) CreateAuthUserForTransport

func (application *App) CreateAuthUserForTransport(ctx context.Context, collection string, values store.Values, password string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

CreateAuthUserForTransport applies the safe anonymous first-user default used by framework transports. When Create access is omitted, exactly one anonymous caller may initialize the configured admin-user collection; other auth collections remain closed. Authenticated callers and collections with an explicit Create rule retain ordinary authored access behavior, including intentional public registration.

func (*App) CreateAuthUserForTransportWithOptions

func (application *App) CreateAuthUserForTransportWithOptions(ctx context.Context, collection string, values store.Values, password string, options MutationOptions) (store.Document, error)

CreateAuthUserForTransportWithOptions is the selection-aware transport form of CreateAuthUserForTransport.

func (*App) CreateAuthUserWithOptions

func (application *App) CreateAuthUserWithOptions(ctx context.Context, collection string, values store.Values, password string, options MutationOptions) (store.Document, error)

CreateAuthUserWithOptions creates an auth document and credential atomically while allowing a transport to populate the returned user safely.

func (*App) CreateCollectionPreviewToken

func (application *App) CreateCollectionPreviewToken(ctx context.Context, collection, documentID string, identity *AuthIdentity) (PreviewToken, error)

CreateCollectionPreviewToken mints a short-lived capability after proving the exact authenticated actor can read the configured preview document.

func (*App) CreateGlobalPreviewToken

func (application *App) CreateGlobalPreviewToken(ctx context.Context, slug string, identity *AuthIdentity) (PreviewToken, error)

CreateGlobalPreviewToken mints a short-lived capability for one configured draft global and one exact authenticated actor.

func (*App) DeletePreference

func (application *App) DeletePreference(ctx context.Context, identity *AuthIdentity, key string) error

DeletePreference removes one preference owned by the exact authenticated identity.

func (*App) DocumentLock

func (application *App) DocumentLock(ctx context.Context, collection, documentID string, identity *AuthIdentity) (DocumentLockState, error)

DocumentLock returns an access-checked current lock for one exact identity.

func (*App) Duplicate

func (application *App) Duplicate(ctx context.Context, collection, id string, overrides store.Values, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

Duplicate creates an access-checked document copy. Upload collections also receive fresh storage keys for the original object and every derived image size so either document can later be deleted independently.

func (*App) DuplicateForIdentity

func (application *App) DuplicateForIdentity(ctx context.Context, collection, id string, overrides store.Values, identity *AuthIdentity, localeOptions ...LocaleOptions) (store.Document, error)

DuplicateForIdentity duplicates through one exact authenticated collection identity. A nil identity remains anonymous.

func (*App) DuplicateWithOptions

func (application *App) DuplicateWithOptions(ctx context.Context, collection, id string, overrides store.Values, options MutationOptions) (store.Document, error)

DuplicateWithOptions preserves exact actor identity and response selection while duplicating ordinary or upload documents.

func (*App) FindCollectionPreview

func (application *App) FindCollectionPreview(ctx context.Context, token, collection, documentID string) (store.Document, error)

FindCollectionPreview resolves a scoped token and re-runs the ordinary read operation so current access predicates, field redaction, and hooks still apply.

func (*App) FindGlobalPreview

func (application *App) FindGlobalPreview(ctx context.Context, token, slug string) (store.Document, error)

FindGlobalPreview resolves a scoped token through the same global read engine.

func (*App) ForceUnlock

func (application *App) ForceUnlock(ctx context.Context, collection, id string, identity *AuthIdentity) error

ForceUnlock clears an account lock for an exact authenticated identity.

func (*App) Handler

func (application *App) Handler(options HandlerOptions) http.Handler

Handler returns the application HTTP API and embedded admin handler.

func (*App) Local

func (application *App) Local() *LocalAPI

func (*App) Login

func (application *App) Login(ctx context.Context, collection, email, password string) (AuthSession, error)

Login authenticates with the built-in local strategy.

func (*App) LoginWithOptions

func (application *App) LoginWithOptions(ctx context.Context, collection, email, password string, options LoginOptions) (AuthSession, error)

LoginWithOptions authenticates and records safe client metadata with the resulting session. Credential failures intentionally share one response.

func (*App) Logout

func (application *App) Logout(ctx context.Context, token string) error

Logout revokes the current token. Repeating logout is safe.

func (*App) LogoutAll

func (application *App) LogoutAll(ctx context.Context, token string) error

LogoutAll revokes every session owned by the current identity.

func (*App) Manifest

func (application *App) Manifest() schema.Manifest

func (*App) OpenUpload

func (application *App) OpenUpload(ctx context.Context, collection, key string, actor *store.Document) (io.ReadCloser, storage.Object, error)

func (*App) OpenUploadForIdentity

func (application *App) OpenUploadForIdentity(ctx context.Context, collection, key string, identity *AuthIdentity) (io.ReadCloser, storage.Object, error)

OpenUploadForIdentity opens an upload through one exact authenticated collection identity. A nil identity remains anonymous.

func (*App) OpenUploadWithOptions

func (application *App) OpenUploadWithOptions(ctx context.Context, collection, key string, options FindOptions) (io.ReadCloser, storage.Object, error)

OpenUploadWithOptions preserves exact actor identity while proving that the requested object belongs to an access-visible upload document.

func (*App) Preference

func (application *App) Preference(ctx context.Context, identity *AuthIdentity, key string) (json.RawMessage, error)

Preference reads one preference owned by the exact authenticated identity.

func (*App) PruneExpiredAuth

func (application *App) PruneExpiredAuth(ctx context.Context, limit int) (store.AuthPruneResult, error)

PruneExpiredAuth removes one bounded batch of expired sessions and API keys. Production Execute workers call this automatically for stores that implement store.AuthMaintenanceStore; the explicit method is useful to dedicated worker processes and adapter conformance tests.

func (*App) ReconcileUploads

func (application *App) ReconcileUploads(ctx context.Context, olderThan time.Duration) (ReconcileResult, error)

ReconcileUploads reports unreferenced application-owned objects older than the safety window without deleting them. Reconciliation uses an ACL-independent store snapshot.

func (*App) ReleaseDocumentLock

func (application *App) ReleaseDocumentLock(ctx context.Context, collection, documentID string, identity *AuthIdentity) error

ReleaseDocumentLock removes only the exact authenticated identity's lease.

func (*App) RequestPasswordReset

func (application *App) RequestPasswordReset(ctx context.Context, collection, identity string) error

RequestPasswordReset issues a single-use token and passes it to the application-owned delivery callback. Unknown identities are intentionally a successful no-op so callers cannot enumerate accounts.

func (*App) RequestVerification

func (application *App) RequestVerification(ctx context.Context, collection, identity string) error

RequestVerification replaces any outstanding verification token and sends a new one. Unknown and already-verified identities are successful no-ops.

func (*App) ResetPassword

func (application *App) ResetPassword(ctx context.Context, collection, token, password string) error

ResetPassword consumes a password-reset token exactly once, replaces the hash, clears lockout state, and revokes every session and API key in one store transaction.

func (*App) ResetPreferences

func (application *App) ResetPreferences(ctx context.Context, identity *AuthIdentity) error

ResetPreferences deletes every preference owned by the exact authenticated identity.

func (*App) RevokeAPIKey

func (application *App) RevokeAPIKey(ctx context.Context, sessionToken, id string) error

RevokeAPIKey deletes one key only when it belongs to the current identity.

func (*App) RevokePreviewToken

func (application *App) RevokePreviewToken(ctx context.Context, raw string, identity *AuthIdentity) error

RevokePreviewToken removes one capability only when it belongs to the exact currently authenticated collection actor. Missing or expired tokens are treated as already revoked.

func (*App) RevokeSession

func (application *App) RevokeSession(ctx context.Context, token, sessionID string) error

RevokeSession revokes one session only when it belongs to the current user.

func (*App) RotateSession

func (application *App) RotateSession(ctx context.Context, token string) (AuthSession, error)

RotateSession atomically replaces a session bearer token without extending its absolute lifetime. The old token is invalid as soon as this returns.

func (*App) RunScheduledPublishes

func (application *App) RunScheduledPublishes(ctx context.Context, limit int, actor *store.Document) (int, error)

func (*App) RunTasks

func (application *App) RunTasks(ctx context.Context, limit int) (TaskRunSummary, error)

RunTasks claims and executes one bounded batch. Concurrent callers are safe; the store lease is the authority and handlers remain at-least-once.

func (*App) SchedulePublish

func (application *App) SchedulePublish(ctx context.Context, collection, documentID string, runAt time.Time, expectedRevision int, identity *AuthIdentity) (store.ScheduledPublish, error)

SchedulePublish queues a publish for one exact authenticated identity. A nil identity preserves anonymous scheduling when collection access allows it.

func (*App) ScheduledPublishes

func (application *App) ScheduledPublishes(ctx context.Context, collection, documentID string, identity *AuthIdentity) ([]store.ScheduledPublish, error)

ScheduledPublishes lists scheduled publishes using one exact identity.

func (*App) Session

func (application *App) Session(ctx context.Context, token string) (AuthSession, error)

Session resolves an opaque token to its current identity.

func (*App) Sessions

func (application *App) Sessions(ctx context.Context, token string) ([]AuthSessionInfo, error)

Sessions lists every unexpired session owned by the current identity.

func (*App) SetPassword

func (application *App) SetPassword(ctx context.Context, collection, userID, password string) error

SetPassword validates and replaces a local password. Every existing session is revoked after the new hash is durably stored.

func (*App) SetPreference

func (application *App) SetPreference(ctx context.Context, identity *AuthIdentity, key string, value json.RawMessage) (json.RawMessage, error)

SetPreference writes one preference owned by the exact authenticated identity.

func (*App) UnlockAuthUser

func (application *App) UnlockAuthUser(ctx context.Context, collection, identity string, actorIdentity *AuthIdentity) error

UnlockAuthUser selects an account by its configured identity and unlocks it for an exact authenticated identity. Missing users remain indistinguishable from denied access.

func (*App) UpdateUploadImage

func (application *App) UpdateUploadImage(ctx context.Context, collection, id string, input UpdateUploadImageInput) (store.Document, error)

UpdateUploadImage regenerates configured image sizes around a new focal point, then commits their metadata through the ordinary operation engine.

func (*App) UpdateUploadImageForIdentity

func (application *App) UpdateUploadImageForIdentity(ctx context.Context, collection, id string, input UpdateUploadImageInput, identity *AuthIdentity) (store.Document, error)

UpdateUploadImageForIdentity regenerates image variants for one exact authenticated collection identity. A nil identity remains anonymous.

func (*App) Upload

func (application *App) Upload(ctx context.Context, collection string, input UploadInput) (store.Document, error)

func (*App) UploadForIdentity

func (application *App) UploadForIdentity(ctx context.Context, collection string, input UploadInput, identity *AuthIdentity) (store.Document, error)

UploadForIdentity stores a file for one exact authenticated collection identity. A nil identity remains anonymous.

func (*App) UploadFromURL

func (application *App) UploadFromURL(ctx context.Context, collection string, input RemoteUploadInput) (store.Document, error)

UploadFromURL safely downloads a public HTTP(S) asset before passing it through the same MIME, size, storage, access, validation, and hook pipeline as a multipart upload.

func (*App) UploadFromURLForIdentity

func (application *App) UploadFromURLForIdentity(ctx context.Context, collection string, input RemoteUploadInput, identity *AuthIdentity) (store.Document, error)

UploadFromURLForIdentity fetches and stores a remote file for one exact authenticated collection identity. Identity is rechecked before networking.

func (*App) VerifyEmail

func (application *App) VerifyEmail(ctx context.Context, collection, token string) error

VerifyEmail consumes a verification token exactly once.

type AuditEvent

type AuditEvent struct {
	// Time is when the event occurred.
	Time time.Time
	// RequestID correlates the event with logs and observations.
	RequestID string
	// ClientIP is the resolved direct or trusted-forwarded client address.
	ClientIP string
	// Action names the operation, such as login, create, or delete.
	Action string
	// Collection is the affected collection slug when applicable.
	Collection string
	// DocumentID is the affected document identity when applicable.
	DocumentID string
	// ActorID is the authenticated document identity when available.
	ActorID string
	// ActorCollection disambiguates ActorID across auth collections.
	ActorCollection schema.CollectionSlug
}

AuditEvent describes one security-relevant action handled by the API.

type AuthAccess

type AuthAccess struct {
	Login         AuthAccessRule
	PasswordReset AuthAccessRule
	Verification  AuthAccessRule
	APIKey        AuthAccessRule
	Session       AuthAccessRule
}

AuthAccess defines authorization that is specific to authentication rather than document CRUD. Nil rules allow the operation.

type AuthAccessRule

type AuthAccessRule func(AuthContext) (bool, error)

AuthAccessRule allows or denies one auth operation.

type AuthConfig

type AuthConfig struct {
	// SessionDuration is how long a login remains valid. Zero defaults to 24 hours.
	SessionDuration time.Duration
	// Password controls local password validation and hashing. Zero values use
	// the secure framework defaults documented on PasswordPolicy.
	Password PasswordPolicy
	// MaxLoginAttempts is the number of consecutive credential failures allowed
	// before the account is temporarily locked. Zero defaults to 5; a negative
	// value disables account lockout.
	MaxLoginAttempts int
	// LockDuration is how long an account remains locked after MaxLoginAttempts.
	// Zero defaults to 10 minutes.
	LockDuration time.Duration
	// PasswordReset enables the forgot/reset-password flow when Send is set.
	// The raw single-use token is delivered only to this trusted callback.
	PasswordReset PasswordResetConfig
	// Verify enables email verification. When non-nil, newly provisioned
	// credentials cannot log in until a verification token is consumed.
	Verify *VerifyEmailConfig
	// APIKeys allows users to mint revocable, session-independent bearer
	// credentials. API keys are disabled by default.
	APIKeys bool
	// Access contains authorization rules for auth operations that are not CRUD.
	Access AuthAccess
	// Hooks contains authentication lifecycle callbacks.
	Hooks AuthHooks
	// Strategies adds application-owned request authentication in declaration order.
	Strategies []AuthStrategy
}

AuthConfig controls session behavior for an auth-enabled collection.

type AuthContext

type AuthContext struct {
	Context      context.Context
	Operation    AuthOperation
	CollectionID schema.StableID
	User         *store.Document
	Identity     string
	IPAddress    string
	UserAgent    string
	Local        *LocalAPI
}

AuthContext is passed to auth-specific access rules and hooks. Secrets such as passwords, session tokens, reset tokens, and API keys are never included.

type AuthHook

type AuthHook func(AuthContext) error

AuthHook runs at a documented authentication lifecycle boundary.

type AuthHooks

type AuthHooks struct {
	BeforeLogin          []AuthHook
	AfterLogin           []AuthHook
	AfterMe              []AuthHook
	BeforeLogout         []AuthHook
	AfterLogout          []AuthHook
	BeforeRefresh        []AuthHook
	AfterRefresh         []AuthHook
	BeforeForgotPassword []AuthHook
	AfterForgotPassword  []AuthHook
	BeforePasswordReset  []AuthHook
	AfterPasswordReset   []AuthHook
	BeforeVerification   []AuthHook
	AfterVerification    []AuthHook
	BeforeAPIKey         []AuthHook
	AfterAPIKey          []AuthHook
}

AuthHooks defines auth-specific lifecycle callbacks. Before hooks can reject an operation; if an after-login or after-refresh hook fails, the newly issued credential is revoked before the error is returned.

type AuthIdentity

type AuthIdentity struct {
	Collection schema.CollectionSlug
	Actor      store.Document
	// PreviewEpoch is an opaque lifecycle snapshot captured before transport
	// authentication. Zero lets direct Go callers snapshot at mint entry.
	PreviewEpoch uint64
}

AuthIdentity identifies one authenticated document without relying on a document ID being globally unique across auth-enabled collections.

type AuthOperation

type AuthOperation string

AuthOperation identifies an authentication lifecycle boundary.

const (
	AuthOperationLogin             AuthOperation = "login"
	AuthOperationMe                AuthOperation = "me"
	AuthOperationLogout            AuthOperation = "logout"
	AuthOperationRefresh           AuthOperation = "refresh"
	AuthOperationPasswordReset     AuthOperation = "password_reset"
	AuthOperationForgotPassword    AuthOperation = "forgot_password"
	AuthOperationEmailVerification AuthOperation = "email_verification"
	AuthOperationAPIKey            AuthOperation = "api_key"
	AuthOperationExternalStrategy  AuthOperation = "external_strategy"
)

type AuthSession

type AuthSession struct {
	// ID is the non-secret identifier used to manage this session.
	ID string
	// Token is the opaque credential accepted by session-aware transports.
	Token string
	// Collection is the auth-enabled collection that owns the identity.
	Collection schema.CollectionSlug
	// User is the current document from Collection.
	User store.Document
	// ExpiresAt is the absolute UTC expiry time.
	ExpiresAt time.Time
}

AuthSession is one authenticated identity and its session metadata.

type AuthSessionInfo

type AuthSessionInfo struct {
	ID         string
	CreatedAt  time.Time
	LastSeenAt time.Time
	ExpiresAt  time.Time
	IPAddress  string
	UserAgent  string
	Current    bool
}

AuthSessionInfo is safe session metadata shown to an authenticated user. It never contains the bearer token or its digest.

type AuthStrategy

type AuthStrategy struct {
	// Name is a stable lowercase kebab-case identifier used in diagnostics.
	Name string
	// Authenticate returns Authenticated false when the request does not belong
	// to this strategy. It must not return raw credentials or untrusted user data.
	Authenticate func(AuthStrategyContext) (AuthStrategyResult, error)
}

AuthStrategy integrates an application-owned identity provider. Strategies run in declaration order after built-in session and API-key authentication.

type AuthStrategyContext

type AuthStrategyContext struct {
	Context      context.Context
	CollectionID schema.StableID
	Headers      map[string][]string
	Local        *LocalAPI
}

AuthStrategyContext contains normalized request headers for a custom authentication strategy. Header names are canonicalized by net/http.

type AuthStrategyResult

type AuthStrategyResult struct {
	Authenticated bool
	UserID        string
}

AuthStrategyResult reports whether a strategy recognized the request. A matched result must identify a user in the strategy's auth collection.

type BoundTypedCollection

type BoundTypedCollection[Document, Create, Update any] struct {
	// contains filtered or unexported fields
}

BoundTypedCollection is a typed view of one collection on a LocalAPI.

func (BoundTypedCollection[Document, Create, Update]) Create

func (collection BoundTypedCollection[Document, Create, Update]) Create(ctx context.Context, input Create, actor *store.Document) (Document, error)

func (BoundTypedCollection[Document, Create, Update]) Delete

func (collection BoundTypedCollection[Document, Create, Update]) Delete(ctx context.Context, id string, actor *store.Document) (Document, error)

func (BoundTypedCollection[Document, Create, Update]) Find

func (collection BoundTypedCollection[Document, Create, Update]) Find(ctx context.Context, id string, actor *store.Document) (Document, error)

func (BoundTypedCollection[Document, Create, Update]) Import

func (collection BoundTypedCollection[Document, Create, Update]) Import(ctx context.Context, input Create, options ImportOptions, actor *store.Document) (Document, error)

func (BoundTypedCollection[Document, Create, Update]) List

func (collection BoundTypedCollection[Document, Create, Update]) List(ctx context.Context, options TypedListOptions) (TypedPage[Document], error)

func (BoundTypedCollection[Document, Create, Update]) Update

func (collection BoundTypedCollection[Document, Create, Update]) Update(ctx context.Context, id string, input Update, actor *store.Document) (Document, error)

func (BoundTypedCollection[Document, Create, Update]) UpdateRevision

func (collection BoundTypedCollection[Document, Create, Update]) UpdateRevision(ctx context.Context, id string, input Update, expectedRevision int, actor *store.Document) (Document, error)

type BoundTypedGlobal

type BoundTypedGlobal[Document, Update any] struct {
	// contains filtered or unexported fields
}

BoundTypedGlobal is a typed view of one singleton on a LocalAPI.

func (BoundTypedGlobal[Document, Update]) Find

func (global BoundTypedGlobal[Document, Update]) Find(ctx context.Context, actor *store.Document) (Document, error)

func (BoundTypedGlobal[Document, Update]) Publish

func (global BoundTypedGlobal[Document, Update]) Publish(ctx context.Context, expectedRevision int, actor *store.Document) (Document, error)

func (BoundTypedGlobal[Document, Update]) Restore

func (global BoundTypedGlobal[Document, Update]) Restore(ctx context.Context, revision, expectedRevision int, actor *store.Document) (Document, error)

func (BoundTypedGlobal[Document, Update]) RestoreAsDraft

func (global BoundTypedGlobal[Document, Update]) RestoreAsDraft(ctx context.Context, revision, expectedRevision int, actor *store.Document) (Document, error)

func (BoundTypedGlobal[Document, Update]) Unpublish

func (global BoundTypedGlobal[Document, Update]) Unpublish(ctx context.Context, expectedRevision int, actor *store.Document) (Document, error)

func (BoundTypedGlobal[Document, Update]) Update

func (global BoundTypedGlobal[Document, Update]) Update(ctx context.Context, input Update, expectedRevision int, actor *store.Document) (Document, error)

type CapabilityOptions

type CapabilityOptions struct {
	Data            store.Values
	Actor           *store.Document
	ActorCollection schema.CollectionSlug
	TrashOnly       bool
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
	AllLocales      bool
}

CapabilityOptions describes one side-effect-free access evaluation.

type Collection

type Collection struct {
	// Slug is the URL-safe collection name used by APIs, relationships, and the admin.
	Slug schema.CollectionSlug
	// Labels override the singular and plural names shown to authors.
	Labels CollectionLabels
	// Admin configures collection presentation and editorial organization.
	Admin CollectionAdmin
	// Fields defines the collection's stored values and admin presentation.
	Fields []field.Definition
	// Indexes defines ordered multi-field indexes. Unique indexes enforce tuple
	// uniqueness while allowing multiple rows containing null.
	Indexes []CollectionIndex
	// Auth enables identities, passwords, and sessions for this collection.
	Auth bool
	// AuthConfig customizes behavior that applies when Auth is enabled.
	AuthConfig AuthConfig
	// Upload enables file metadata and storage behavior for this collection.
	Upload bool
	// UploadConfig customizes validation, privacy, and image variants for uploads.
	UploadConfig UploadConfig
	// Versions enables document revisions for this collection.
	Versions bool
	// Trash keeps deleted documents recoverable until they are permanently deleted.
	Trash bool
	// LockDocuments coordinates exclusive document editing with timeout and takeover.
	LockDocuments bool
	// DocumentLockConfig customizes lock expiry when LockDocuments is enabled.
	DocumentLockConfig DocumentLockConfig
	// VersionConfig customizes drafts, retention, and autosave behavior.
	VersionConfig VersionConfig
	// Access defines collection-level authorization for each operation.
	Access CollectionAccess
	// FieldAccess maps field paths to field-level read and write authorization.
	FieldAccess map[string]FieldAccess
	// FieldHooks maps field paths to lifecycle hooks scoped to those values.
	FieldHooks map[string]CollectionHooks
	// Hooks defines collection-wide lifecycle behavior.
	Hooks CollectionHooks
	// Computed resolves virtual field values after an operation has produced a document.
	Computed map[string]Computed
	// Endpoints declares custom HTTP endpoints below
	// /api/collections/<slug>. They run before matching built-in collection
	// routes for the same method.
	Endpoints []Endpoint
}

Collection defines one document collection in authoring configuration.

type CollectionAccess

type CollectionAccess struct {
	// Admin controls whether an authenticated user from this auth collection may
	// enter the framework admin. It accepts only Allow or Deny and defaults to
	// Allow when omitted.
	Admin AccessRule
	// Create controls document creation.
	Create AccessRule
	// Read controls individual and list reads and may return a Where decision.
	Read AccessRule
	// ReadVersions controls version-history reads and may return a Where
	// decision. When omitted, Read is used.
	ReadVersions AccessRule
	// Update controls document updates and may return a Where decision.
	Update AccessRule
	// Publish controls publishing and atomic published-document edits. When
	// omitted, Update is used so existing policies remain coherent.
	Publish AccessRule
	// Unpublish controls moving a published document back to draft. When
	// omitted, Update is used.
	Unpublish AccessRule
	// Delete controls document deletion and may return a Where decision.
	Delete AccessRule
	// Unlock controls takeover of another editor's active document lock. When
	// omitted, Update is used so existing collection policies remain coherent.
	Unlock AccessRule
}

CollectionAccess groups the independently configurable collection rules.

type CollectionAdmin

type CollectionAdmin struct {
	UseAsTitle              string
	DefaultColumns          []string
	Group                   string
	GroupTranslations       map[string]string
	Description             string
	DescriptionTranslations map[string]string
	FolderField             string
	ParentField             string
	LivePreview             LivePreviewConfig
}

CollectionAdmin is serializable presentation metadata consumed by the framework admin.

type CollectionHooks

type CollectionHooks struct {
	// BeforeDuplicate runs after the source is access-checked and copied but before validation.
	BeforeDuplicate []Hook
	// BeforeValidate runs before field validation.
	BeforeValidate []Hook
	// BeforeChange runs after validation for create, duplicate, update, publish, and unpublish.
	BeforeChange []Hook
	// BeforeOperation runs after validation but before persistence.
	BeforeOperation []Hook
	// BeforeRead runs before one or many documents are read.
	BeforeRead []Hook
	// BeforeDelete runs after the original document is loaded but before deletion.
	BeforeDelete []Hook
	// AfterChange runs inside the transaction after a changed document is persisted.
	AfterChange []Hook
	// AfterRead runs after computed values resolve and before field redaction.
	AfterRead []Hook
	// AfterDelete runs inside the transaction after deletion or trashing.
	AfterDelete []Hook
	// AfterOperation runs inside the transaction after persistence.
	AfterOperation []Hook
	// AfterError runs when an operation associated with this resource fails.
	AfterError []Hook
	// AfterCommit runs only after the transaction commits successfully.
	AfterCommit []Hook
}

CollectionHooks establishes deterministic hook phases without prematurely defining document mutation contracts.

type CollectionIndex

type CollectionIndex struct {
	Fields []string
	Unique bool
}

CollectionIndex defines one ordered compound database index. Fields are dot-separated paths through non-repeated groups.

type CollectionLabels

type CollectionLabels struct {
	// Singular is used when referring to one document.
	Singular string
	// SingularTranslations overrides Singular for configured admin languages.
	SingularTranslations map[string]string
	// Plural is used in navigation and collection lists.
	Plural string
	// PluralTranslations overrides Plural for configured admin languages.
	PluralTranslations map[string]string
}

CollectionLabels overrides author-facing collection names.

type Computed

type Computed func(ComputedContext) (store.Value, error)

Computed resolves one virtual field. Its result is validated against the field's declared type.

type ComputedContext

type ComputedContext struct {
	Context      context.Context
	Operation    Operation
	CollectionID schema.StableID
	GlobalID     schema.StableID
	Actor        *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	Document        store.Document
	Local           *LocalAPI
	Locale          schema.LocaleCode
	AllLocales      bool
}

ComputedContext contains the trusted runtime inputs available to a virtual field resolver.

type Config

type Config struct {
	// Name is the author-facing application name shown by framework tooling.
	Name string
	// NameTranslations overrides Name for configured admin interface languages.
	NameTranslations map[string]string
	// Admin configures the framework-owned administration interface.
	Admin AdminConfig
	// Localization configures content locales. The zero value disables content
	// localization without affecting admin interface language.
	Localization LocalizationConfig
	// AllowIDOnCreate lets ordinary create operations accept a caller-supplied
	// canonical string ID. It is disabled by default; migration imports retain
	// their separate identity-preserving path regardless of this setting.
	AllowIDOnCreate bool
	// Collections declares every document collection owned by the application.
	Collections []Collection
	// Globals declares singleton documents with their own API and admin routes.
	Globals []Global
	// Endpoints declares application-level custom HTTP endpoints below /api.
	// Handlers are anonymous by default and must enforce their own policy.
	Endpoints []Endpoint
	// Tasks registers compiled durable task handlers. Executable handlers are
	// runtime-only and are intentionally excluded from the schema manifest.
	Tasks []TaskDefinition
	// Hooks observes application-wide lifecycle failures.
	Hooks RootHooks
	// Plugins lists compiled extensions in deterministic execution order.
	Plugins []Plugin
	// AfterCommit dispatches effects only after a successful transaction commits.
	AfterCommit AfterCommitDispatcher
	// Storage provides the application-wide object-storage adapter when App is
	// constructed directly with New. Applications run through Execute should
	// prefer WithUploadStorage so external clients are opened only at runtime.
	// Storage is never serialized into the schema manifest.
	Storage storage.Backend
	// StorageNamespace is the stable, deployment-owned prefix for upload objects.
	// It must remain unchanged when the display Name changes and must be unique
	// among applications sharing one backend.
	StorageNamespace string
	// contains filtered or unexported fields
}

Config is executable application-owned Ridu configuration. Resolve applies compiled plugin transforms to a defensive copy before final validation.

type ConfigTransformer

type ConfigTransformer interface {
	Plugin
	TransformConfig(Config) (Config, error)
}

ConfigTransformer is the Phase 1 plugin capability for contributing or transforming authoring config before final validation. Implementations receive and return defensive copies; transform order is the Config.Plugins declaration order.

type DescriptorProvider

type DescriptorProvider interface {
	Plugin
	Descriptor() PluginDescriptor
}

DescriptorProvider opts a plugin into versioned generation, migration, and compatibility tooling. Plugins exposing any advanced capability must provide a descriptor; key-only plugins remain supported for config transforms and validators that need no build metadata.

type DistinctOptions

type DistinctOptions struct {
	// Field names the authored scalar, singular relationship, singular upload,
	// or document ID whose unique values should be returned.
	Field query.Path
	// Where remains atomic with the collection read-access predicate.
	Where query.Expression
	// Page is one-based. Zero selects the first page.
	Page int
	// Limit follows ordinary Ridu list bounds and defaults.
	Limit int
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Draft follows List semantics for versioned collections.
	Draft *bool
	// TrashOnly returns values from deleted documents and requires trash support.
	TrashOnly       bool
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
}

DistinctOptions controls one access-checked unique-value read. The initial contract intentionally supports one direct singular stored field and normal ascending field order; it is not a general aggregation API.

type DocumentLockConfig

type DocumentLockConfig struct {
	Duration time.Duration
}

DocumentLockConfig controls persisted authoring locks.

type DocumentLockState

type DocumentLockState struct {
	Lock        *store.DocumentLock
	Owned       bool
	Acquired    bool
	CanTakeOver bool
}

DocumentLockState describes the current authoring lease for one document.

type Endpoint

type Endpoint struct {
	// Method is one supported HTTP method. Matching is case-insensitive during
	// config resolution and the manifest stores its uppercase form.
	Method string
	// Path begins with / and may contain named :parameter segments.
	Path string
	// Summary appears in the generated OpenAPI operation. When empty, Ridu
	// supplies a deterministic generic summary.
	Summary string
	// MaxBodyBytes bounds the raw request body before Handler receives it. Zero
	// inherits HandlerOptions.MaxBodyBytes; a negative value opts trusted
	// streaming code out of that bound.
	MaxBodyBytes int64
	// Handler is trusted compiled application code and is never serialized.
	Handler EndpointHandler
}

Endpoint is one application-authored, method-specific HTTP endpoint. Root endpoints are mounted below /api; collection and global endpoints are mounted below their resource route. Path uses Payload-familiar named segments such as /:id/tracking.

Custom endpoints are not authorized automatically. Handler must enforce any endpoint-specific policy before performing work. Local remains access-controlled unless the application explicitly chooses an override on an individual local operation.

type EndpointContext

type EndpointContext struct {
	Writer  http.ResponseWriter
	Request *http.Request
	// RequestID is the framework request ID also returned in X-Request-ID.
	RequestID string
	// ClientIP is resolved through the configured trusted-proxy policy.
	ClientIP string
	// RouteParams contains decoded named path parameters.
	RouteParams map[string]string
	// Collection identifies the owning collection endpoint, when applicable.
	Collection schema.CollectionSlug
	// Global identifies the owning global endpoint, when applicable.
	Global schema.CollectionSlug
	// Actor is the authenticated user, or nil for an anonymous request.
	Actor *store.Document
	// ActorCollection identifies the auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Local enters the same access-controlled operation engine as REST and the
	// generated SDK.
	Local *LocalAPI
	// AdmitAuthAttempt applies the distributed authentication-attempt policy for
	// endpoints implementing an authentication flow.
	AdmitAuthAttempt func(context.Context, string, string) error
	// ReportError records a stable code and sends trusted detail to
	// HandlerOptions.RequestError without exposing it to the client.
	ReportError func(error, string)
}

EndpointContext exposes one matched custom endpoint request.

type EndpointHandler

type EndpointHandler func(EndpointContext)

EndpointHandler handles one trusted compiled custom endpoint.

type EndpointProvider

type EndpointProvider interface {
	Plugin
	Endpoints() []PluginEndpoint
}

EndpointProvider contributes exact REST endpoints under the provider's namespaced /api/plugins/<key>/ prefix.

type ExecuteOption

type ExecuteOption func(*executeOptions)

func WithAddress

func WithAddress(address string) ExecuteOption

WithAddress configures the HTTP listen address independently from the document-store adapter. The default is :8080.

func WithHandlerOptions

func WithHandlerOptions(handler HandlerOptions) ExecuteOption

WithHandlerOptions customizes the framework HTTP handler, including the generated application's embedded admin assets.

func WithProjectMigrations

func WithProjectMigrations(driver migration.ProjectDriver) ExecuteOption

WithProjectMigrations registers the selected adapter's compiled migration callbacks for the private project-command path. The driver is never used by manifest generation or the ordinary HTTP runtime.

func WithServerOptions

func WithServerOptions(server ServerOptions) ExecuteOption

WithServerOptions customizes production socket and drain bounds without replacing Ridu's framework-owned http.Server lifecycle.

func WithStore

func WithStore(factory StoreFactory) ExecuteOption

WithStore configures the singular document-store adapter used by the operation engine. The factory is invoked only by the server runtime.

func WithUploadStorage

func WithUploadStorage(factory StorageFactory) ExecuteOption

WithUploadStorage configures upload bytes lazily so manifest generation never touches the filesystem or network.

type FieldAccess

type FieldAccess struct {
	// Create controls whether the field may be supplied during creation.
	Create FieldAccessRule
	// Read controls whether the field is visible in returned documents.
	Read FieldAccessRule
	// Update controls whether the field may be changed.
	Update FieldAccessRule
}

FieldAccess groups independently configurable field-level rules.

type FieldAccessContext

type FieldAccessContext struct {
	// Context is the request-scoped cancellation and deadline context.
	Context context.Context
	// Operation is the create, read, update, or delete being evaluated.
	Operation Operation
	// CollectionID is the stable identity of the containing collection.
	CollectionID schema.StableID
	// GlobalID is the stable identity of the containing global, when applicable.
	GlobalID schema.StableID
	// ID is the current document ID. It is empty during creation.
	ID string
	// Path is the authored path of the field being evaluated.
	Path string
	// RuntimePath identifies the concrete value occurrence, including array or
	// block indexes. It equals Path for non-repeating fields.
	RuntimePath string
	// Actor is the authenticated document, or nil for an anonymous request.
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Data contains incoming values for a write operation.
	Data store.Values
	// Value is the submitted value for a write or stored value for a read.
	Value store.Value
	// SiblingData contains the nearest containing object's values. Mutating this
	// detached snapshot does not mutate the operation input.
	SiblingData store.Values
	// Document is the existing or result document when available.
	Document *store.Document
	// Original is the persisted document before an update when available.
	Original *store.Document
	// Local exposes nested operations through the same transaction and access
	// pipeline. Rules must avoid recursively invoking themselves without a guard.
	Local *LocalAPI
	// Locale is the selected content locale. It is empty only when localization is disabled.
	Locale schema.LocaleCode
	// AllLocales reports that locale-keyed values were requested.
	AllLocales bool
}

FieldAccessContext is evaluated inside the operation transaction for one authored field path. Returning false prevents writes or redacts reads.

type FieldAccessRule

type FieldAccessRule func(FieldAccessContext) (bool, error)

FieldAccessRule authorizes one field operation; false redacts reads and rejects writes.

type FieldCapabilities

type FieldCapabilities struct {
	Read   bool
	Create bool
	Update bool
}

type FieldValidatorProvider

type FieldValidatorProvider interface {
	Plugin
	FieldValidators() map[string]PluginFieldValidator
}

FieldValidatorProvider is a focused runtime capability for plugin-owned value contracts. Keys must match manifest plugin field keys.

type FindOptions

type FindOptions struct {
	// Select is nil for all authored fields. A non-nil empty slice returns only
	// document metadata.
	Select   []query.Path
	Populate []query.Population
	// OutputFields limits computed and inverse-join resolution independently
	// from Select. Nil resolves all; a non-nil empty slice resolves none.
	OutputFields []query.Path
	// Draft explicitly includes draft documents when true or restricts reads to
	// published documents when false. Nil preserves the Local API default.
	Draft           *bool
	Actor           *store.Document
	ActorCollection schema.CollectionSlug
	TrashOnly       bool
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
	AllLocales      bool
}

FindOptions controls projection, relationship population, localization, and authorization for one document read.

type GenerationProvider

type GenerationProvider interface {
	Plugin
	GeneratedArtifacts(PluginGenerationContext) ([]PluginGeneratedArtifact, error)
}

GenerationProvider contributes requested deterministic build artifacts that require executable plugin configuration and therefore cannot be reconstructed from the serializable manifest alone. Providers do not run unless ridu.toml maps one of their artifacts to a destination.

type Global

type Global struct {
	// Slug is the URL-safe global name used by APIs and the admin.
	Slug schema.CollectionSlug
	// Label overrides the author-facing name shown in navigation and headings.
	Label string
	// LabelTranslations overrides Label for configured admin interface languages.
	LabelTranslations map[string]string
	// Admin is serializable presentation metadata consumed by the framework admin.
	Admin GlobalAdmin
	// Fields defines the global's stored values and admin presentation.
	Fields []field.Definition
	// Versions enables revisions for this global.
	Versions bool
	// VersionConfig customizes drafts, retention, and autosave behavior.
	VersionConfig VersionConfig
	// Access defines read and update authorization.
	Access GlobalAccess
	// FieldAccess maps field paths to field-level read and update authorization.
	FieldAccess map[string]FieldAccess
	// FieldHooks maps field paths to lifecycle hooks scoped to those values.
	FieldHooks map[string]CollectionHooks
	// Hooks defines global-wide lifecycle behavior.
	Hooks CollectionHooks
	// Computed resolves virtual field values after an operation has produced the singleton.
	Computed map[string]Computed
	// Endpoints declares custom HTTP endpoints below /api/globals/<slug>.
	// They run before matching built-in global routes for the same method.
	Endpoints []Endpoint
}

Global defines one singleton document in authoring configuration.

type GlobalAccess

type GlobalAccess struct {
	// Read controls global reads and may return a Where decision.
	Read AccessRule
	// ReadVersions controls version-history reads and may return a Where decision.
	// When omitted, Read is used.
	ReadVersions AccessRule
	// Update controls global updates and may return a Where decision for an
	// existing singleton.
	Update AccessRule
	// Publish controls publishing and atomic published-global edits. When
	// omitted, Update is used.
	Publish AccessRule
	// Unpublish controls moving a published global back to draft. When omitted,
	// Update is used.
	Unpublish AccessRule
}

GlobalAccess groups the independently configurable singleton rules. Filtered decisions are applied atomically to the persisted singleton or version snapshot. A singleton's first update requires Allow because no persisted row exists for a filtered decision to authorize.

type GlobalAdmin

type GlobalAdmin struct {
	Group                   string
	GroupTranslations       map[string]string
	Description             string
	DescriptionTranslations map[string]string
	LivePreview             LivePreviewConfig
}

GlobalAdmin customizes global presentation without affecting authorization.

type HandlerOptions

type HandlerOptions struct {

	// AdminAssets overrides the framework's embedded admin asset filesystem.
	AdminAssets fs.FS
	// MaxBodyBytes limits decoded request bodies. Zero uses the framework default.
	MaxBodyBytes int64
	// SecureCookies restricts auth cookies to HTTPS requests.
	SecureCookies bool
	// AllowedOrigins lists browser origins permitted by CORS.
	AllowedOrigins []string
	// AllowedRequestHeaders appends application-owned CORS request headers to
	// Ridu's SDK headers. Invalid HTTP token names are ignored.
	AllowedRequestHeaders []string
	// AllowedHosts restricts the HTTP Host header. Entries are exact hostnames
	// with an optional port; an entry without a port accepts any port. Empty
	// accepts every syntactically valid host for development. Production
	// deployments should set their public hostnames.
	AllowedHosts []string
	// TrustedProxyCIDRs lists proxies whose forwarded client addresses are trusted.
	TrustedProxyCIDRs []string
	// AuthRateLimit is the maximum auth attempts per identity and client window.
	AuthRateLimit int
	// AuthRateWindow is the duration over which AuthRateLimit is enforced.
	AuthRateWindow time.Duration
	// Audit receives security-relevant application events.
	Audit func(AuditEvent)
	// Observe receives timing and status metadata for completed requests.
	Observe func(RequestObservation)
	// RequestError receives trusted diagnostic detail for internal failures and
	// recovered panics. The HTTP response remains redacted.
	RequestError func(RequestErrorEvent)
	// RequestTimeout limits request execution. Zero uses the framework default;
	// a negative duration disables the handler deadline for streaming plugins.
	RequestTimeout time.Duration
	// ReadinessChecks add application/plugin dependencies to /readyz. Checks
	// must be read-only, repeatable, and honor Context cancellation.
	ReadinessChecks []ReadinessCheck
	// ReadinessTimeout bounds the complete database, storage, and custom
	// readiness probe. Zero uses five seconds; a negative duration disables it.
	ReadinessTimeout time.Duration
	// ContentSecurityPolicy overrides the framework admin policy. Empty uses a
	// conservative default compatible with live-preview frames.
	ContentSecurityPolicy string
	// DisableContentSecurityPolicy explicitly disables the admin CSP when an
	// upstream gateway owns it.
	DisableContentSecurityPolicy bool
	// StrictTransportSecurity is emitted verbatim when non-empty. Configure it
	// only when every public request is HTTPS, normally at the TLS terminator.
	StrictTransportSecurity string
	// TaskInterval controls how often the durable task queues are polled. Zero
	// uses the framework default.
	TaskInterval time.Duration
	// TaskBatch limits durable task leases claimed during one polling cycle.
	TaskBatch int
	// TaskQueues optionally restricts this process to named queues. An empty
	// list consumes every queue, including unknown task slugs so they can be
	// moved to a stable terminal failure.
	TaskQueues []string
	// TaskLeaseDuration is extended by heartbeats while a handler is running.
	TaskLeaseDuration time.Duration
	// TaskHeartbeatInterval must remain shorter than TaskLeaseDuration.
	TaskHeartbeatInterval time.Duration
	// TaskPruneBatch bounds terminal records removed after their retention.
	TaskPruneBatch int
	// AuthPruneBatch bounds expired sessions and API keys removed from each
	// durable credential family during one background maintenance cycle.
	AuthPruneBatch int
	// JobError receives failures from scheduled background work.
	JobError func(error)
	// contains filtered or unexported fields
}

HandlerOptions configures the HTTP API, embedded admin, and background job runner.

type Hook

type Hook func(HookContext) error

Hook is one operation lifecycle callback.

type HookContext

type HookContext struct {
	// Context is the request-scoped cancellation and deadline context.
	Context context.Context
	// Operation is the lifecycle operation currently running.
	Operation Operation
	// CollectionID is the stable identity of the target collection.
	CollectionID schema.StableID
	// GlobalID is the stable identity of the target global, when applicable.
	GlobalID schema.StableID
	// Actor is the authenticated document, or nil for an anonymous operation.
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Data contains mutable incoming values before persistence.
	Data store.Values
	// Document is the current operation result when available.
	Document *store.Document
	// Original is the persisted document before an update or delete.
	Original *store.Document
	// Local exposes nested operations through the same operation engine.
	Local *LocalAPI
	// FieldPath is set when a hook is registered for a specific field.
	FieldPath string
	// Error is set only for after-error hooks and preserves the original failure.
	Error      error
	Locale     schema.LocaleCode
	AllLocales bool
}

HookContext contains stable operation identity. Typed document input and result contracts arrive with the operation engine rather than using any.

type HookProvider

type HookProvider interface {
	Plugin
	Hooks() []PluginHookContribution
}

HookProvider contributes compiled lifecycle hooks without mutating authoring config through a generic transformer.

type ImageSize

type ImageSize struct {
	// Name is the stable key used to address the generated variant.
	Name string
	// Width is the target width in pixels.
	Width int
	// Height is the target height in pixels.
	Height int
	// Fit controls resizing and must be either "cover" or "contain".
	Fit string
}

ImageSize describes one derived image variant for an upload collection.

type ImportOptions

type ImportOptions struct {
	// ID preserves the source document identity.
	ID string
	// Status preserves the source draft or published status.
	Status store.Status
	// CreatedAt preserves the source creation timestamp.
	CreatedAt time.Time
	// UpdatedAt preserves the source modification timestamp.
	UpdatedAt time.Time
}

ImportOptions preserves source identity and timestamps during a migration.

type Input

type Input[T any] struct {
	// contains filtered or unexported fields
}

Input is an outbound presence marker for nullable generated mutation fields. A nil *Input omits the field, Set sends a concrete value, and Null sends explicit JSON null when the generated typed local API converts its input to store values. Input intentionally implements only json.Marshaler; generated mutation structs are not general-purpose JSON decode DTOs.

func Null

func Null[T any]() *Input[T]

Null constructs a present generated mutation field whose JSON value is null.

func Set

func Set[T any](value T) *Input[T]

Set constructs a present generated mutation field with value.

func (Input[T]) MarshalJSON

func (input Input[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler. Nil *Input fields are omitted by the generated parent struct's omitempty tag before this method is called.

type JoinMutationResult

type JoinMutationResult struct {
	Document store.Document
	Added    int
	Removed  int
}

JoinMutationResult reports the refreshed source document and applied deltas from one atomic inverse relationship mutation.

type ListOptions

type ListOptions struct {
	// Where filters documents before pagination and remains atomic with access predicates.
	Where query.Expression
	// Page is the one-based result page. Zero selects the first page.
	Page int
	// Limit is the maximum documents returned per page.
	Limit int
	// Sort orders results by authored field paths.
	Sort []query.Sort
	// Select restricts returned document fields.
	Select []query.Path
	// Populate expands configured relationship paths.
	Populate []query.Population
	// OutputFields limits computed and inverse-join resolution without
	// projecting away stored fields. Nil resolves all output fields; a non-nil
	// empty slice resolves none.
	OutputFields []query.Path
	// Draft explicitly includes draft documents when true or restricts reads to
	// published documents when false. Nil preserves the Local API default.
	Draft *bool
	// Actor is the authenticated document used by access rules.
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// TrashOnly returns deleted documents and is valid only for trash-enabled collections.
	TrashOnly bool
	// Locale selects one configured content locale. Empty uses the application default.
	Locale schema.LocaleCode
	// FallbackLocales replaces the locale's configured fallback chain when non-nil.
	FallbackLocales []schema.LocaleCode
	// DisableFallback requires an exact value in Locale.
	DisableFallback bool
	// AllLocales returns locale-keyed values for localized fields.
	AllLocales bool
}

ListOptions controls filtering, pagination, projection, and authorization for a list read.

type ListWindowOptions

type ListWindowOptions struct {
	Index           query.Path
	LowerBound      string
	UpperBound      string
	Limit           int
	Select          []query.Path
	Actor           *store.Document
	ActorCollection schema.CollectionSlug
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
	AllLocales      bool
}

ListWindowOptions controls a count-free bounded unique-index range read for background work. Index must name one direct, unique, indexed text field. LowerBound is inclusive and UpperBound is exclusive. Unlike ListOptions it has no arbitrary filter, access predicate, page offset, or relationship population. Production adapters use the unique index to fetch only Limit plus one overflow sentinel and do not compute a total.

type LivePreviewConfig

type LivePreviewConfig struct {
	URL         string
	Breakpoints []PreviewBreakpoint
}

LivePreviewConfig exposes a same- or cross-origin frontend inside the document editor. URL is a serializable template and may contain {id}, {collection}, and {field:path.to.value} placeholders that the admin resolves from the current draft.

type LocalAPI

type LocalAPI struct {
	// contains filtered or unexported fields
}

LocalAPI enters the same operation engine used by HTTP and jobs.

func (*LocalAPI) BulkDelete

func (local *LocalAPI) BulkDelete(ctx context.Context, collection string, ids []string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

BulkDelete atomically deletes or trashes every selected document.

func (*LocalAPI) BulkDeletePermanent

func (local *LocalAPI) BulkDeletePermanent(ctx context.Context, collection string, ids []string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

BulkDeletePermanent atomically permanently deletes selected trashed documents.

func (*LocalAPI) BulkPublish

func (local *LocalAPI) BulkPublish(ctx context.Context, collection string, ids []string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

BulkPublish atomically publishes every selected versioned document.

func (*LocalAPI) BulkRestoreDeleted

func (local *LocalAPI) BulkRestoreDeleted(ctx context.Context, collection string, ids []string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

BulkRestoreDeleted atomically restores selected documents from trash.

func (*LocalAPI) BulkUnpublish

func (local *LocalAPI) BulkUnpublish(ctx context.Context, collection string, ids []string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

BulkUnpublish atomically returns every selected versioned document to draft.

func (*LocalAPI) BulkUpdate

func (local *LocalAPI) BulkUpdate(ctx context.Context, collection string, ids []string, values store.Values, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

BulkUpdate atomically applies the same partial values to every document.

func (*LocalAPI) Capabilities

func (local *LocalAPI) Capabilities(ctx context.Context, collection, id string, options CapabilityOptions) (AccessCapabilities, error)

Capabilities evaluates collection, document, and field access without running hooks, validation, or a mutation.

func (*LocalAPI) CopyGlobalLocale

func (local *LocalAPI) CopyGlobalLocale(ctx context.Context, slug string, source, target schema.LocaleCode, expectedRevision int, actor *store.Document) (store.Document, error)

CopyGlobalLocale copies readable localized singleton values between locales.

func (*LocalAPI) CopyGlobalLocaleWithOptions

func (local *LocalAPI) CopyGlobalLocaleWithOptions(ctx context.Context, slug string, source, target schema.LocaleCode, options MutationOptions) (store.Document, error)

func (*LocalAPI) CopyLocale

func (local *LocalAPI) CopyLocale(ctx context.Context, collection, id string, source, target schema.LocaleCode, expectedRevision int, actor *store.Document) (store.Document, error)

CopyLocale copies readable localized values between two locales while enforcing source read and destination update access independently. A copy into published content also requires and runs the publish lifecycle.

func (*LocalAPI) CopyLocaleWithOptions

func (local *LocalAPI) CopyLocaleWithOptions(ctx context.Context, collection, id string, source, target schema.LocaleCode, options MutationOptions) (store.Document, error)

CopyLocaleWithOptions preserves the exact authenticated collection identity for both the source read and destination mutation lifecycle.

func (*LocalAPI) Create

func (local *LocalAPI) Create(ctx context.Context, collection string, values store.Values, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) CreateWithOptions

func (local *LocalAPI) CreateWithOptions(ctx context.Context, collection string, values store.Values, options MutationOptions) (store.Document, error)

CreateWithOptions creates a document and applies the requested bounded population plan to the response inside the write transaction.

func (*LocalAPI) Delete

func (local *LocalAPI) Delete(ctx context.Context, collection, id string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) DeletePermanent

func (local *LocalAPI) DeletePermanent(ctx context.Context, collection, id string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

DeletePermanent irreversibly removes a document that is already in trash.

func (*LocalAPI) DeletePermanentWithOptions

func (local *LocalAPI) DeletePermanentWithOptions(ctx context.Context, collection, id string, options MutationOptions) (store.Document, error)

func (*LocalAPI) DeleteWithOptions

func (local *LocalAPI) DeleteWithOptions(ctx context.Context, collection, id string, options MutationOptions) (store.Document, error)

func (*LocalAPI) Distinct

func (local *LocalAPI) Distinct(ctx context.Context, collection string, options DistinctOptions) (store.DistinctPage, error)

Distinct returns paginated unique values for one direct field. Collection access and Where are composed in the adapter query, and field read access is checked before any value is selected.

func (*LocalAPI) Duplicate

func (local *LocalAPI) Duplicate(ctx context.Context, collection, id string, overrides store.Values, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

Duplicate creates a new document from an access-checked source. Overrides are applied before create validation and duplicate-aware hooks run.

func (*LocalAPI) DuplicateWithOptions

func (local *LocalAPI) DuplicateWithOptions(ctx context.Context, collection, id string, overrides store.Values, options MutationOptions) (store.Document, error)

DuplicateWithOptions duplicates a document and populates the returned copy inside the write transaction.

func (*LocalAPI) EmptyTrash

func (local *LocalAPI) EmptyTrash(ctx context.Context, collection string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Document, error)

EmptyTrash permanently deletes every accessible trashed document in one bounded atomic batch.

func (*LocalAPI) Find

func (local *LocalAPI) Find(ctx context.Context, collection, id string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) FindWithOptions

func (local *LocalAPI) FindWithOptions(ctx context.Context, collection, id string, options FindOptions) (store.Document, error)

FindWithOptions reads one document through the operation engine with a transport-owned projection and population plan.

func (*LocalAPI) Global

func (local *LocalAPI) Global(ctx context.Context, slug string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

Global reads one singleton through the same access, hook, validation, and transaction engine used by collections.

func (*LocalAPI) GlobalVersion

func (local *LocalAPI) GlobalVersion(ctx context.Context, slug string, revision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Version, error)

GlobalVersion returns one authorized retained singleton revision.

func (*LocalAPI) GlobalVersionWithOptions

func (local *LocalAPI) GlobalVersionWithOptions(ctx context.Context, slug string, revision int, options FindOptions) (store.Version, error)

func (*LocalAPI) GlobalVersions

func (local *LocalAPI) GlobalVersions(ctx context.Context, slug string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Version, error)

GlobalVersions returns retained revisions for a versioned global.

func (*LocalAPI) GlobalVersionsWithOptions

func (local *LocalAPI) GlobalVersionsWithOptions(ctx context.Context, slug string, options FindOptions) ([]store.Version, error)

func (*LocalAPI) GlobalWithOptions

func (local *LocalAPI) GlobalWithOptions(ctx context.Context, slug string, options FindOptions) (store.Document, error)

GlobalWithOptions reads a singleton with transport-owned projection and population through the ordinary operation engine.

func (*LocalAPI) Import

func (local *LocalAPI) Import(ctx context.Context, collection string, values store.Values, options ImportOptions, actor *store.Document) (store.Document, error)

Import creates a document with a migration-owned stable ID while still running ordinary access, validation, hooks, transaction, and version logic.

func (*LocalAPI) List

func (local *LocalAPI) List(ctx context.Context, collection string, options ListOptions) (store.Page, error)

func (*LocalAPI) ListWindow

func (local *LocalAPI) ListWindow(ctx context.Context, collection string, options ListWindowOptions) (store.Window, error)

ListWindow reads at most Limit documents from one unique-index range without a total count or offset. Collection read access must resolve to Allow so an adapter can preserve the physical index bound. The configured store must implement the optional store.WindowTransaction capability.

func (*LocalAPI) MutateJoin

func (local *LocalAPI) MutateJoin(ctx context.Context, collection, id, field string, additions, removals []string, actor *store.Document, localeOptions ...LocaleOptions) (JoinMutationResult, error)

MutateJoin atomically applies explicit additions and removals to one configured inverse relationship. Deltas avoid treating a limited join view as the complete relation set.

func (*LocalAPI) MutateJoinWithOptions

func (local *LocalAPI) MutateJoinWithOptions(ctx context.Context, collection, id, field string, additions, removals []string, options MutationOptions) (JoinMutationResult, error)

MutateJoinWithOptions preserves the exact authenticated collection identity while applying inverse relationship deltas.

func (*LocalAPI) Publish

func (local *LocalAPI) Publish(ctx context.Context, collection, id string, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) PublishChanges

func (local *LocalAPI) PublishChanges(ctx context.Context, collection, id string, values store.Values, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

PublishChanges atomically applies values and publishes the resulting document through both update access and the publish access rule and lifecycle.

func (*LocalAPI) PublishChangesWithOptions

func (local *LocalAPI) PublishChangesWithOptions(ctx context.Context, collection, id string, values store.Values, options MutationOptions) (store.Document, error)

func (*LocalAPI) PublishGlobal

func (local *LocalAPI) PublishGlobal(ctx context.Context, slug string, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

PublishGlobal publishes a versioned global.

func (*LocalAPI) PublishGlobalChanges

func (local *LocalAPI) PublishGlobalChanges(ctx context.Context, slug string, values store.Values, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

PublishGlobalChanges atomically applies values and publishes the resulting global through both update access and the publish access rule and lifecycle.

func (*LocalAPI) PublishGlobalChangesWithOptions

func (local *LocalAPI) PublishGlobalChangesWithOptions(ctx context.Context, slug string, values store.Values, options MutationOptions) (store.Document, error)

func (*LocalAPI) PublishGlobalWithOptions

func (local *LocalAPI) PublishGlobalWithOptions(ctx context.Context, slug string, options MutationOptions) (store.Document, error)

func (*LocalAPI) PublishWithOptions

func (local *LocalAPI) PublishWithOptions(ctx context.Context, collection, id string, options MutationOptions) (store.Document, error)

func (*LocalAPI) Restore

func (local *LocalAPI) Restore(ctx context.Context, collection, id string, revision, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) RestoreAsDraft

func (local *LocalAPI) RestoreAsDraft(ctx context.Context, collection, id string, revision, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

RestoreAsDraft restores a retained revision while explicitly keeping the current document unpublished.

func (*LocalAPI) RestoreDeleted

func (local *LocalAPI) RestoreDeleted(ctx context.Context, collection, id string, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

RestoreDeleted moves a trashed document back into ordinary collection reads.

func (*LocalAPI) RestoreDeletedWithOptions

func (local *LocalAPI) RestoreDeletedWithOptions(ctx context.Context, collection, id string, options MutationOptions) (store.Document, error)

func (*LocalAPI) RestoreGlobal

func (local *LocalAPI) RestoreGlobal(ctx context.Context, slug string, revision, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

RestoreGlobal restores a retained global revision.

func (*LocalAPI) RestoreGlobalAsDraft

func (local *LocalAPI) RestoreGlobalAsDraft(ctx context.Context, slug string, revision, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

RestoreGlobalAsDraft restores a retained global revision without publishing it.

func (*LocalAPI) RestoreGlobalVersionWithOptions

func (local *LocalAPI) RestoreGlobalVersionWithOptions(ctx context.Context, slug string, revision int, draft bool, options MutationOptions) (store.Document, error)

func (*LocalAPI) RestoreVersionWithOptions

func (local *LocalAPI) RestoreVersionWithOptions(ctx context.Context, collection, id string, revision int, draft bool, options MutationOptions) (store.Document, error)

RestoreVersionWithOptions restores a retained revision and populates the returned document in the update transaction.

func (*LocalAPI) Unpublish

func (local *LocalAPI) Unpublish(ctx context.Context, collection, id string, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) UnpublishGlobal

func (local *LocalAPI) UnpublishGlobal(ctx context.Context, slug string, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

UnpublishGlobal moves a versioned global back to draft status.

func (*LocalAPI) UnpublishGlobalWithOptions

func (local *LocalAPI) UnpublishGlobalWithOptions(ctx context.Context, slug string, options MutationOptions) (store.Document, error)

func (*LocalAPI) UnpublishWithOptions

func (local *LocalAPI) UnpublishWithOptions(ctx context.Context, collection, id string, options MutationOptions) (store.Document, error)

func (*LocalAPI) Update

func (local *LocalAPI) Update(ctx context.Context, collection, id string, values store.Values, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) UpdateGlobal

func (local *LocalAPI) UpdateGlobal(ctx context.Context, slug string, values store.Values, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

UpdateGlobal creates the singleton on its first update and updates it thereafter.

func (*LocalAPI) UpdateGlobalWithOptions

func (local *LocalAPI) UpdateGlobalWithOptions(ctx context.Context, slug string, values store.Values, options MutationOptions) (store.Document, error)

UpdateGlobalWithOptions updates a singleton and populates its response in the same write transaction.

func (*LocalAPI) UpdateRevision

func (local *LocalAPI) UpdateRevision(ctx context.Context, collection, id string, values store.Values, expectedRevision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Document, error)

func (*LocalAPI) UpdateWithOptions

func (local *LocalAPI) UpdateWithOptions(ctx context.Context, collection, id string, values store.Values, options MutationOptions) (store.Document, error)

UpdateWithOptions updates a document and applies the requested bounded population plan to the response inside the write transaction.

func (*LocalAPI) Version

func (local *LocalAPI) Version(ctx context.Context, collection, id string, revision int, actor *store.Document, localeOptions ...LocaleOptions) (store.Version, error)

Version returns one authorized retained revision.

func (*LocalAPI) VersionWithOptions

func (local *LocalAPI) VersionWithOptions(ctx context.Context, collection, id string, revision int, options FindOptions) (store.Version, error)

VersionWithOptions preserves the exact authenticated collection identity while reading one retained revision.

func (*LocalAPI) Versions

func (local *LocalAPI) Versions(ctx context.Context, collection, id string, actor *store.Document, localeOptions ...LocaleOptions) ([]store.Version, error)

func (*LocalAPI) VersionsWithOptions

func (local *LocalAPI) VersionsWithOptions(ctx context.Context, collection, id string, options FindOptions) ([]store.Version, error)

VersionsWithOptions preserves the exact authenticated collection identity while reading retained revisions.

type Locale

type Locale struct {
	Code            schema.LocaleCode
	Label           string
	RTL             bool
	FallbackLocales []schema.LocaleCode
}

Locale declares one content locale and its ordered fallback chain.

type LocaleAvailability

type LocaleAvailability func(LocaleAvailabilityContext) ([]schema.LocaleCode, error)

LocaleAvailability dynamically limits content locales shown to one author.

type LocaleAvailabilityContext

type LocaleAvailabilityContext struct {
	Context         context.Context
	Actor           *store.Document
	ActorCollection schema.CollectionSlug
	Local           *LocalAPI
}

LocaleAvailabilityContext is the request-scoped input to AvailableLocales.

type LocaleOptions

type LocaleOptions struct {
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
	AllLocales      bool
}

LocaleOptions selects localized content for single-document operations.

type LocalizationConfig

type LocalizationConfig struct {
	Locales         []Locale
	DefaultLocale   schema.LocaleCode
	DisableFallback bool
	// AvailableLocales may reduce the locale list exposed to an admin request.
	// It does not weaken API validation or authorization and is never serialized.
	AvailableLocales LocaleAvailability
}

LocalizationConfig declares the application's content locales. Fallback is enabled by default; set DisableFallback to require exact locale values.

type LoginOptions

type LoginOptions struct {
	// IPAddress is the direct or trusted-forwarded client address.
	IPAddress string
	// UserAgent is the untrusted client user-agent string.
	UserAgent string
}

LoginOptions carries transport metadata recorded with a new session.

type MutationOptions

type MutationOptions struct {
	// ID supplies a caller-owned document ID for create operations when
	// Config.AllowIDOnCreate is enabled. Other mutations ignore it.
	ID               string
	Actor            *store.Document
	ActorCollection  schema.CollectionSlug
	ExpectedRevision int
	Populate         []query.Population
	// OutputFields limits computed and inverse-join resolution in the returned
	// document. Nil resolves all; a non-nil empty slice resolves none.
	OutputFields []query.Path
	// Draft selects draft (true) or published (false) status for versioned
	// creates. Updates preserve status so publish and unpublish hooks cannot be bypassed.
	Draft           *bool
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
	AllLocales      bool
}

MutationOptions controls authorization, optimistic concurrency, localization, and selection-driven population for one document write. Populate affects only the returned document; it never changes validation or storage behavior.

type NonNullInput

type NonNullInput[T any] struct {
	// contains filtered or unexported fields
}

NonNullInput is an outbound value marker for generated mutation fields whose Go representation can otherwise encode JSON null even though the schema does not allow null. NonNull constructs a required value and SetNonNull constructs an omittable present value. JSON encoding fails instead of emitting null for a nil slice, nil map, nil interface, or null json.RawMessage.

NonNullInput intentionally implements only json.Marshaler; generated mutation structs are not general-purpose JSON decode DTOs.

func NonNull

func NonNull[T any](value T) NonNullInput[T]

NonNull constructs a non-omittable generated mutation value.

func SetNonNull

func SetNonNull[T any](value T) *NonNullInput[T]

SetNonNull constructs an omittable generated mutation value that is present.

func (NonNullInput[T]) MarshalJSON

func (input NonNullInput[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler and rejects an encoded JSON null.

type Operation

type Operation string

Operation identifies a document operation at access and hook boundaries.

const (
	OperationCreate          Operation = "create"
	OperationDuplicate       Operation = "duplicate"
	OperationAdmin           Operation = "admin"
	OperationRead            Operation = "read"
	OperationReadVersions    Operation = "read-versions"
	OperationUpdate          Operation = "update"
	OperationDelete          Operation = "delete"
	OperationRestoreDeleted  Operation = "restore-deleted"
	OperationDeletePermanent Operation = "delete-permanent"
	OperationPublish         Operation = "publish"
	OperationUnpublish       Operation = "unpublish"
	OperationUnlock          Operation = "unlock"
)

type OperationCapabilities

type OperationCapabilities struct {
	Admin           bool
	Create          bool
	Read            bool
	ReadVersions    bool
	Update          bool
	Delete          bool
	Duplicate       bool
	Publish         bool
	Unpublish       bool
	RestoreDeleted  bool
	DeletePermanent bool
	SelectAll       bool
	Unlock          bool
}

OperationCapabilities is a non-secret permission summary. It deliberately excludes executable rules and filtered-access predicates.

type OperationError

type OperationError = operationengine.Error

type PasswordPolicy

type PasswordPolicy struct {
	// MinLength is the minimum password length in Unicode code points. Zero
	// defaults to 8.
	MinLength int
	// MaxBytes is the maximum UTF-8 encoded password length. Zero defaults to 72,
	// bcrypt's safe input limit.
	MaxBytes int
	// BcryptCost controls bcrypt work. Zero uses bcrypt.DefaultCost. Increasing
	// it transparently upgrades older hashes after a successful login. Values
	// above 16 are rejected because they can make startup and login impractical.
	BcryptCost int
	// Validate adds application-specific password rules. Return a user-safe error
	// explaining how the candidate must change.
	Validate func(password string) error
}

PasswordPolicy controls the built-in local password strategy.

Ridu deliberately defaults to length-based validation instead of mandatory character classes. Applications needing breached-password checks or other product-specific rules can provide Validate; it executes only in the trusted Go runtime and is never serialized into the schema manifest.

type PasswordResetConfig

type PasswordResetConfig struct {
	// TokenDuration is the lifetime of a reset token. Zero defaults to one hour.
	TokenDuration time.Duration
	// Send delivers a newly issued token. It should enqueue or send the message
	// before returning; returning an error prevents a success response.
	Send func(context.Context, PasswordResetNotification) error
}

PasswordResetConfig configures password-recovery delivery.

type PasswordResetNotification

type PasswordResetNotification struct {
	Collection schema.CollectionSlug
	User       store.Document
	Token      string
	ExpiresAt  time.Time
}

PasswordResetNotification contains the secret needed to construct an application-owned reset link. Token is shown once and must never be logged.

type Plugin

type Plugin interface {
	Key() string
}

Plugin is compiled, trusted application code with a stable manifest key. Focused capability interfaces extend it without growing one universal bag of optional methods.

type PluginDatabaseAdapter

type PluginDatabaseAdapter = schema.PluginDatabaseAdapter

PluginDatabaseAdapter identifies one database dialect supported by a plugin's exceptional private-schema contribution.

type PluginDatabaseContribution

type PluginDatabaseContribution struct {
	Adapter    PluginDatabaseAdapter
	Migrations []PluginMigration
	Tables     []string
}

PluginDatabaseContribution is one explicitly adapter-scoped private-schema bundle. It is an escape hatch for database features that cannot be modeled as ordinary Ridu collections or fields; its SQL is never treated as portable.

type PluginDescriptor

type PluginDescriptor struct {
	// Version is the plugin's complete semantic release without a leading v.
	Version string
	// GoPackage is the canonical import path that provides the plugin.
	GoPackage string
	// APIVersion must equal PluginAPIVersion for this Ridu release.
	APIVersion uint32
	// Ridu limits the framework releases allowed to compile this plugin.
	Ridu RiduCompatibility
	// Admin describes the optional statically bundled admin half.
	Admin *AdminPluginMetadata
	// FieldTypes maps every reusable plugin field to generated public types.
	FieldTypes []PluginFieldType
	// DatabaseContributions contains exceptional, adapter-specific private
	// database state. Ordinary plugin data should be added as collections or
	// fields through ConfigTransformer instead.
	DatabaseContributions []PluginDatabaseContribution
}

PluginDescriptor is deterministic public metadata for one compiled plugin. It is copied into the canonical manifest so generators, migration planning, the admin build, and compatibility tooling all inspect the same declaration. Executable hooks, handlers, validators, and secrets never belong here.

type PluginEndpoint

type PluginEndpoint struct {
	// Method is an exact supported HTTP method such as GET or POST.
	Method string
	// Path is relative to the plugin's namespaced API prefix.
	Path string
	// Summary appears in generated OpenAPI.
	Summary string
	// MaxBodyBytes bounds the raw request body before Handler receives it. Zero
	// inherits HandlerOptions.MaxBodyBytes; a negative value explicitly opts a
	// trusted streaming endpoint out of that byte bound.
	MaxBodyBytes int64
	// Handler is trusted compiled endpoint code.
	Handler PluginEndpointHandler
}

PluginEndpoint is one exact, method-specific HTTP endpoint. Path is relative to /api/plugins/<plugin-key>/ and must not contain traversal segments.

type PluginEndpointContext

type PluginEndpointContext struct {
	// Writer receives the endpoint response.
	Writer http.ResponseWriter
	// Request is the original namespaced HTTP request.
	Request *http.Request
	// ClientIP is the direct or trusted-forwarded client address resolved by
	// the framework HTTP boundary. Authentication transports should use this
	// value instead of interpreting forwarding headers independently.
	ClientIP string
	// Actor is the authenticated user, or nil for an anonymous request.
	Actor *store.Document
	// ActorCollection identifies the auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Local enters the same access-controlled operation engine as other APIs.
	Local *LocalAPI
	// AdmitAuthAttempt applies the application's distributed IP and identity
	// admission policy. Authentication transports must call it before work that
	// can be amplified by aliases or repeated requests.
	AdmitAuthAttempt func(context.Context, string, string) error
	// ReportError records a stable transport error code and sends trusted error
	// detail to HandlerOptions.RequestError without exposing it to the client.
	// Plugins that implement their own error envelopes should call this for
	// internal failures. Passing nil records only Code in request observations.
	ReportError func(error, string)
}

PluginEndpointContext exposes the authenticated actor and access-controlled local API while retaining ordinary net/http request and response contracts.

type PluginEndpointHandler

type PluginEndpointHandler func(PluginEndpointContext)

PluginEndpointHandler handles one trusted compiled plugin endpoint.

type PluginFieldType

type PluginFieldType struct {
	// Key matches the PluginField key stored in the schema manifest.
	Key string
	// TypeScriptPackage exports the named output, input, and where types.
	TypeScriptPackage string
	// TypeScriptOutput is the stored document value type export.
	TypeScriptOutput string
	// TypeScriptInput is the create and update value type export.
	TypeScriptInput string
	// TypeScriptWhere is the optional query operand type export.
	TypeScriptWhere string
	// GoPackage and GoType optionally name the generated Go model type.
	GoPackage string
	// GoType is an exported type in GoPackage; both Go fields are optional together.
	GoType string
	// JSONSchema is the deterministic OpenAPI 3.1 schema for one field value.
	JSONSchema []byte
}

PluginFieldType gives generated contracts exact types for a plugin-owned field. TypeScript names are imported with `import type`; GoPackage and GoType are optional and fall back to encoding/json.RawMessage when omitted.

type PluginFieldValidationContext

type PluginFieldValidationContext struct {
	// Field is the resolved manifest definition owned by the plugin.
	Field schema.Field
	// RuntimePath identifies this concrete value occurrence. Unlike Field.Path,
	// it includes array and block indexes and omits block schema discriminators.
	RuntimePath string
	// Value is the candidate document value to validate.
	Value store.Value
}

PluginFieldValidationContext supplies a resolved plugin field and candidate value.

type PluginFieldValidator

type PluginFieldValidator func(PluginFieldValidationContext) []schema.Issue

PluginFieldValidator returns path-aware issues for a plugin-owned value.

type PluginGeneratedArtifact

type PluginGeneratedArtifact struct {
	Name    string
	Content []byte
}

PluginGeneratedArtifact is one deterministic, plugin-owned generated file. Name is scoped beneath the provider's plugin key; the portable CLI owns the project-relative destination and atomic installation of Content.

type PluginGenerationContext

type PluginGenerationContext struct {
	Manifest schema.Manifest
}

PluginGenerationContext supplies immutable schema state to a compiled plugin while the application project command is producing generated files. Generation runs without a store, storage backend, or network listener.

type PluginHookContribution

type PluginHookContribution struct {
	// Collection identifies the collection receiving Hooks.
	Collection schema.CollectionSlug
	// FieldPath optionally limits Hooks to one canonical field path.
	FieldPath string
	// Hooks are appended after application-authored hooks.
	Hooks CollectionHooks
}

PluginHookContribution appends hooks to one resolved collection or field. Contributions run in Config.Plugins order after application-authored hooks.

type PluginMigration

type PluginMigration struct {
	// Version starts at 1 and increments without gaps.
	Version uint32
	// Name is a stable lowercase kebab-case review label.
	Name string
	// UpSQL executes in order when entering Version.
	UpSQL []string
	// DownSQL executes in order when leaving Version.
	DownSQL []string
}

PluginMigration is one contiguous, reversible adapter-specific transition. Version migrates from Version-1 to Version. Statements are copied into the immutable migration artifact and checksum-verified before execution.

type PluginTransport

type PluginTransport struct {
	Method       string
	Path         string
	Summary      string
	MaxBodyBytes int64
	Handler      PluginEndpointHandler
}

PluginTransport is one exact application-level HTTP transport. Unlike PluginEndpoint, Path is absolute and is not placed below a plugin namespace. It exists for established protocol locations such as /api/graphql, not for ordinary plugin REST endpoints.

type PluginTransportContext

type PluginTransportContext struct {
	Manifest schema.Manifest
	Local    *LocalAPI
	// App exposes public authentication and other application-owned operations
	// that do not belong to LocalAPI. It is fully initialized before binding.
	App *App
}

PluginTransportContext binds one protocol transport to the fully resolved application runtime. The manifest is immutable and Local enters the same access-controlled operation engine as REST and jobs.

type PreviewBreakpoint

type PreviewBreakpoint struct {
	Name              string
	Label             string
	LabelTranslations map[string]string
	Width             int
	Height            int
}

PreviewBreakpoint is one named authoring viewport offered by live preview.

type PreviewToken

type PreviewToken struct {
	Token      string
	Resource   string
	Slug       string
	DocumentID string
	ExpiresAt  time.Time
}

PreviewToken is a short-lived, read-only credential scoped to one preview target. It is safe to hand to a separately deployed preview frontend instead of an admin session.

type ReadinessCheck

type ReadinessCheck func(context.Context) error

ReadinessCheck verifies one required production dependency.

type ReconcileResult

type ReconcileResult struct {
	// Scanned is the number of stored objects inspected.
	Scanned int
	// Candidates is the number of unreferenced objects older than the safety window.
	Candidates int
	// Deleted is the number of unreferenced objects removed.
	Deleted int
}

ReconcileResult summarizes an upload-storage reconciliation pass.

type RemoteUploadInput

type RemoteUploadInput struct {
	URL             string
	Data            store.Values
	Actor           *store.Document
	ActorCollection schema.CollectionSlug
	Locale          LocaleOptions
}

RemoteUploadInput identifies an HTTP(S) asset and its document metadata.

type RequestErrorEvent

type RequestErrorEvent struct {
	Time      time.Time
	RequestID string
	Method    string
	Path      string
	Error     error
	Panic     bool
	Stack     string
}

RequestErrorEvent carries trusted internal diagnostics. Error may contain dependency detail and must not be forwarded to an untrusted client.

type RequestObservation

type RequestObservation struct {
	// Time is when the observation was recorded.
	Time time.Time
	// RequestID correlates the observation with audit events and logs.
	RequestID string
	// Method is the HTTP request method.
	Method string
	// Path is the requested URL path.
	Path string
	// Status is the HTTP response status code.
	Status int
	// ErrorCode is the stable public Ridu code for a failed request.
	ErrorCode string
	// ResponseBytes is the number of response-body bytes written.
	ResponseBytes int64
	// Duration is the total handler execution time.
	Duration time.Duration
}

RequestObservation contains transport-level timing and response metadata.

type RiduCompatibility

type RiduCompatibility struct {
	// Minimum is the oldest supported Ridu semantic version, inclusive.
	Minimum string
	// MaximumExclusive is the optional first unsupported Ridu version.
	MaximumExclusive string
}

RiduCompatibility declares the supported framework-version interval. MaximumExclusive is optional; an empty maximum leaves the upper bound open.

type RootHooks

type RootHooks struct {
	AfterError []Hook
}

RootHooks observes application-wide failures that may happen before a resource resolves.

type ServerOptions

type ServerOptions struct {
	ReadHeaderTimeout   time.Duration
	ReadTimeout         time.Duration
	WriteTimeout        time.Duration
	IdleTimeout         time.Duration
	MaxHeaderBytes      int
	ShutdownTimeout     time.Duration
	WorkerDrainTimeout  time.Duration
	ReadinessDrainDelay time.Duration
	// AllowUnverifiableReadiness permits Execute with custom database or upload
	// adapters that cannot prove readiness. It is an explicit production safety
	// escape hatch; official adapters do not require it.
	AllowUnverifiableReadiness bool
	// SkipReadinessPreflight lets a development server bind before dependency
	// verification. Its /readyz probe still checks database connectivity,
	// storage, and custom checks, but permits an unapplied migration ledger
	// while ridu dev owns non-destructive schema synchronization.
	SkipReadinessPreflight bool
}

ServerOptions configures production socket bounds and graceful drain. Zero values use Ridu's conservative defaults; a negative timeout explicitly disables that individual bound for a known streaming requirement.

type StorageFactory

type StorageFactory func(context.Context) (storage.Backend, error)

StorageFactory lazily opens an object-storage adapter for upload bytes. It is runtime infrastructure, not a Plugin and never contributes secrets to the schema manifest. Execute closes a returned adapter before the document store when it implements Close() or Close() error.

type StoreFactory

type StoreFactory func(context.Context) (store.Store, error)

StoreFactory lazily opens the application's singular document-store adapter. Project commands never call it, which keeps schema discovery and generation independent from database connectivity. Execute closes a returned adapter at shutdown when it implements Close() or Close() error.

type TaskBackoff

type TaskBackoff = store.TaskBackoff

type TaskContext

type TaskContext struct {
	Context context.Context
	ID      string
	Attempt int
	Local   *LocalAPI
	// contains filtered or unexported fields
}

TaskContext describes one leased attempt. Local is the same access, validation, hook, and transaction entry point used by HTTP and application code; tasks do not receive a privileged document path.

type TaskDefinition

type TaskDefinition interface {
	TaskSlug() string
	// contains filtered or unexported methods
}

TaskDefinition is the non-generic configuration boundary used by Config. Only values returned by NewTask can implement it, so serialized input can never select or supply executable code.

type TaskEnqueueOptions

type TaskEnqueueOptions struct {
	RunAt          time.Time
	Queue          string
	ConcurrencyKey string
	Target         *store.DocumentReference
	RequestedBy    *store.DocumentReference
}

TaskEnqueueOptions schedules one future execution and optionally supplies a queue, concurrency key, target, and requesting identity. A concurrency key serializes active leases within its queue. Target/requester references are lifecycle-safe and are removed if either owning document is hard-deleted.

type TaskError

type TaskError struct {
	Code    TaskErrorCode
	Message string
	Cause   error
}

TaskError is a stable local boundary error.

func (*TaskError) Error

func (err *TaskError) Error() string

func (*TaskError) Unwrap

func (err *TaskError) Unwrap() error

type TaskErrorCode

type TaskErrorCode string

TaskErrorCode is stable for local callers and persisted task failures.

const (
	TaskErrorNotRegistered TaskErrorCode = "task_not_registered"
	TaskErrorUnavailable   TaskErrorCode = "task_unavailable"
	TaskErrorInvalidInput  TaskErrorCode = "task_input_invalid"
	TaskErrorInvalidOutput TaskErrorCode = "task_output_invalid"
	TaskErrorNotFound      TaskErrorCode = "task_not_found"
	TaskErrorStoreFailed   TaskErrorCode = "task_store_failed"
	TaskErrorLeaseLost     TaskErrorCode = "task_lease_lost"
)

type TaskHandler

type TaskHandler[Input, Output any] func(TaskContext, Input) (Output, error)

TaskHandler receives typed data and a request-scoped view of the ordinary local operation engine. Handlers must honor Context cancellation. They may be invoked more than once after a process crash or lease expiry and must therefore make external side effects idempotent.

type TaskOption

type TaskOption func(*taskConfig)

TaskOption configures persisted execution policy or runtime-only admission recovery for one compiled task definition.

func TaskAdmissionReconciler

func TaskAdmissionReconciler(reconcile TaskReconciler) TaskOption

TaskAdmissionReconciler registers recovery for a domain commit-to-enqueue gap. It is runtime-only and is never serialized into the schema manifest or persisted task records.

func TaskQueue

func TaskQueue(queue string) TaskOption

TaskQueue selects the default worker queue for this task definition.

func TaskRetention

func TaskRetention(retention time.Duration) TaskOption

TaskRetention controls how long terminal task status/output remains inspectable before bounded worker pruning removes it.

func TaskRetries

func TaskRetries(maxAttempts int, delay, maxDelay time.Duration, backoff TaskBackoff) TaskOption

TaskRetries configures total attempts and deterministic retry delay. The first attempt counts toward maxAttempts. maxDelay caps linear/exponential growth and must be at least delay.

func TaskTimeout

func TaskTimeout(timeout time.Duration) TaskOption

TaskTimeout limits one handler attempt. Cancellation is cooperative, as it is for ordinary Go contexts; a handler that ignores Context can delay drain.

type TaskReceipt

type TaskReceipt[Output any] struct {
	ID    string
	Slug  string
	Queue string
	RunAt time.Time
}

TaskReceipt is the stable typed handle returned after durable admission.

type TaskReconciler

type TaskReconciler func(context.Context, *App) error

TaskReconciler repairs durable application state that should have admitted a task but may have missed enqueueing it because the process stopped after the state commit. It runs before every task claim cycle, including Execute's first worker cycle. Implementations must be bounded, idempotent, and safe to run concurrently in multiple application instances.

type TaskResult

type TaskResult[Output any] struct {
	ID            string
	Slug          string
	Queue         string
	State         store.TaskState
	Attempts      int
	MaxAttempts   int
	LastErrorCode string
	LastError     string
	CreatedAt     time.Time
	UpdatedAt     time.Time
	CompletedAt   *time.Time
	Output        Output
	HasOutput     bool
}

TaskResult is a typed local status view. HasOutput distinguishes a valid zero/null output from a task that has not succeeded.

type TaskRunSummary

type TaskRunSummary struct {
	Claimed   int
	Succeeded int
	Retried   int
	Failed    int
	Released  int
	Pruned    int
}

TaskRunSummary describes one bounded claim cycle. Handler failures are persisted as retry/dead-letter state and do not become infrastructure errors.

type TransportProvider

type TransportProvider interface {
	Plugin
	BindTransports(PluginTransportContext) ([]PluginTransport, error)
}

TransportProvider binds an optional compiled protocol after the manifest and operation engine are ready. Binding happens once during New; transports must not lazily rebuild schema state per request.

type TypedCollection

type TypedCollection[Document, Create, Update any] struct {
	// contains filtered or unexported fields
}

TypedCollection is a generated collection definition that can be bound to an application's LocalAPI. It adds compile-time application models without creating a privileged data path.

func NewTypedCollection

func NewTypedCollection[Document, Create, Update any](slug string) TypedCollection[Document, Create, Update]

NewTypedCollection constructs a generated typed collection definition.

func (TypedCollection[Document, Create, Update]) Slug

func (collection TypedCollection[Document, Create, Update]) Slug() string

Slug returns the collection's public API address.

func (TypedCollection[Document, Create, Update]) With

func (collection TypedCollection[Document, Create, Update]) With(local *LocalAPI) BoundTypedCollection[Document, Create, Update]

With binds a generated collection definition to a running application.

type TypedGlobal

type TypedGlobal[Document, Update any] struct {
	// contains filtered or unexported fields
}

TypedGlobal is a generated singleton definition that can be bound to an application's LocalAPI without creating a privileged data path.

func NewTypedGlobal

func NewTypedGlobal[Document, Update any](slug string) TypedGlobal[Document, Update]

NewTypedGlobal constructs a generated typed global definition.

func (TypedGlobal[Document, Update]) Slug

func (global TypedGlobal[Document, Update]) Slug() string

Slug returns the global's public API address.

func (TypedGlobal[Document, Update]) With

func (global TypedGlobal[Document, Update]) With(local *LocalAPI) BoundTypedGlobal[Document, Update]

With binds a generated global definition to a running application.

type TypedListOptions

type TypedListOptions struct {
	Where           query.Expression
	Page            int
	Limit           int
	Sort            []query.Sort
	Select          []query.Path
	OutputFields    []query.Path
	Draft           *bool
	Actor           *store.Document
	ActorCollection schema.CollectionSlug
	TrashOnly       bool
	Locale          schema.LocaleCode
	FallbackLocales []schema.LocaleCode
	DisableFallback bool
}

TypedListOptions is the subset of ListOptions whose response shape can be represented by a generated Go document model. Population and all-locale reads intentionally remain on LocalAPI: both change field value shapes at runtime and therefore cannot be decoded into one static Document type.

type TypedPage

type TypedPage[Document any] struct {
	Documents []Document
	Page      int
	Limit     int
	Total     int
}

TypedPage is the typed equivalent of store.Page.

type TypedTask

type TypedTask[Input, Output any] struct {
	// contains filtered or unexported fields
}

TypedTask is one compiled, typed task definition. Add it to Config.Tasks, then use Enqueue, Result, and Cancel from trusted application code.

func NewTask

func NewTask[Input, Output any](slug string, handler TaskHandler[Input, Output], options ...TaskOption) TypedTask[Input, Output]

NewTask defines a compiled task handler. Validation is deterministic during Resolve/New so the constructor remains convenient in ordinary Go config.

func (TypedTask[Input, Output]) Cancel

func (task TypedTask[Input, Output]) Cancel(ctx context.Context, application *App, id string) error

Cancel atomically prevents a queued task from starting and fences a running attempt so its later heartbeat/completion cannot win.

func (TypedTask[Input, Output]) Enqueue

func (task TypedTask[Input, Output]) Enqueue(ctx context.Context, application *App, input Input, options TaskEnqueueOptions) (TaskReceipt[Output], error)

Enqueue validates and durably stores typed input. The task must be the same slug/type contract registered in the running application's Config.Tasks.

func (TypedTask[Input, Output]) Result

func (task TypedTask[Input, Output]) Result(ctx context.Context, application *App, id string) (TaskResult[Output], error)

Result loads and decodes one task created by this typed definition.

func (TypedTask[Input, Output]) TaskSlug

func (task TypedTask[Input, Output]) TaskSlug() string

type UpdateUploadImageInput

type UpdateUploadImageInput struct {
	// FocalX is the horizontal focal coordinate from 0 (left) to 100 (right).
	FocalX float64
	// FocalY is the vertical focal coordinate from 0 (top) to 100 (bottom).
	FocalY float64
	// CropX and CropY are the top-left of an optional normalized crop rectangle.
	CropX float64
	CropY float64
	// CropWidth and CropHeight are zero to clear the crop, otherwise each must
	// be positive and the rectangle must remain within the original image.
	CropWidth  float64
	CropHeight float64
	// ExpectedRevision rejects changes based on a stale document revision.
	ExpectedRevision int
	// Actor is the authenticated document used by read and update access rules.
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
}

UpdateUploadImageInput controls focal-point-aware regeneration of an image upload's configured variants.

type UploadConfig

type UploadConfig struct {
	// MaxFileSize is the maximum accepted upload size in bytes. Zero uses the
	// framework default; values above 256 MiB are rejected so one request cannot
	// bypass the process-wide upload work budget.
	MaxFileSize int64
	// MimeTypes restricts uploads to the listed media types. Empty accepts any supported type.
	MimeTypes []string
	// Private requires authorized delivery instead of exposing storage objects publicly.
	Private bool
	// ImageSizes declares derived image variants generated from supported image uploads.
	ImageSizes []ImageSize
}

UploadConfig controls validation and storage behavior for an upload collection.

type UploadInput

type UploadInput struct {
	// Filename is the original client-supplied file name.
	Filename string
	// Reader provides the uploaded bytes.
	Reader io.Reader
	// Data contains application-owned upload document fields.
	Data store.Values
	// Actor is the authenticated document used by access rules.
	Actor *store.Document
	// ActorCollection identifies the exact auth collection that owns Actor.
	ActorCollection schema.CollectionSlug
	// Locale selects the content locale for application-owned upload metadata.
	Locale LocaleOptions
}

UploadInput contains a file and document metadata for an upload operation.

type VerifyEmailConfig

type VerifyEmailConfig struct {
	// TokenDuration is the lifetime of a verification token. Zero defaults to 24 hours.
	TokenDuration time.Duration
	// Send delivers a newly issued verification token.
	Send func(context.Context, VerifyEmailNotification) error
}

VerifyEmailConfig configures mandatory identity verification.

type VerifyEmailNotification

type VerifyEmailNotification struct {
	Collection schema.CollectionSlug
	User       store.Document
	Token      string
	ExpiresAt  time.Time
}

VerifyEmailNotification contains the secret needed to construct an application-owned verification link. Token is shown once and must not be logged.

type VersionConfig

type VersionConfig struct {
	// Drafts allows unpublished document states.
	Drafts bool
	// MaxPerDocument limits retained revisions per document. Zero uses the framework default.
	MaxPerDocument int
	// AutosaveInterval controls draft autosave frequency. Zero disables autosave.
	AutosaveInterval time.Duration
}

VersionConfig controls revision and draft behavior for a versioned collection.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL