mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-11-28 18:11:17 +02:00
811 lines
39 KiB
Go
811 lines
39 KiB
Go
// Package core is the backbone of PocketBase.
|
|
//
|
|
// It defines the main PocketBase App interface and its base implementation.
|
|
package core
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/daos"
|
|
"github.com/pocketbase/pocketbase/models/settings"
|
|
"github.com/pocketbase/pocketbase/tools/filesystem"
|
|
"github.com/pocketbase/pocketbase/tools/hook"
|
|
"github.com/pocketbase/pocketbase/tools/mailer"
|
|
"github.com/pocketbase/pocketbase/tools/store"
|
|
"github.com/pocketbase/pocketbase/tools/subscriptions"
|
|
)
|
|
|
|
// App defines the main PocketBase app interface.
|
|
type App interface {
|
|
// Deprecated:
|
|
// This method may get removed in the near future.
|
|
// It is recommended to access the app db instance from app.Dao().DB() or
|
|
// if you want more flexibility - app.Dao().ConcurrentDB() and app.Dao().NonconcurrentDB().
|
|
//
|
|
// DB returns the default app database instance.
|
|
DB() *dbx.DB
|
|
|
|
// Dao returns the default app Dao instance.
|
|
//
|
|
// This Dao could operate only on the tables and models
|
|
// associated with the default app database. For example,
|
|
// trying to access the request logs table will result in error.
|
|
Dao() *daos.Dao
|
|
|
|
// Deprecated:
|
|
// This method may get removed in the near future.
|
|
// It is recommended to access the logs db instance from app.LogsDao().DB() or
|
|
// if you want more flexibility - app.LogsDao().ConcurrentDB() and app.LogsDao().NonconcurrentDB().
|
|
//
|
|
// LogsDB returns the app logs database instance.
|
|
LogsDB() *dbx.DB
|
|
|
|
// LogsDao returns the app logs Dao instance.
|
|
//
|
|
// This Dao could operate only on the tables and models
|
|
// associated with the logs database. For example, trying to access
|
|
// the users table from LogsDao will result in error.
|
|
LogsDao() *daos.Dao
|
|
|
|
// DataDir returns the app data directory path.
|
|
DataDir() string
|
|
|
|
// EncryptionEnv returns the name of the app secret env key
|
|
// (used for settings encryption).
|
|
EncryptionEnv() string
|
|
|
|
// IsDebug returns whether the app is in debug mode
|
|
// (showing more detailed error logs, executed sql statements, etc.).
|
|
IsDebug() bool
|
|
|
|
// Settings returns the loaded app settings.
|
|
Settings() *settings.Settings
|
|
|
|
// Cache returns the app internal cache store.
|
|
Cache() *store.Store[any]
|
|
|
|
// SubscriptionsBroker returns the app realtime subscriptions broker instance.
|
|
SubscriptionsBroker() *subscriptions.Broker
|
|
|
|
// NewMailClient creates and returns a configured app mail client.
|
|
NewMailClient() mailer.Mailer
|
|
|
|
// NewFilesystem creates and returns a configured filesystem.System instance
|
|
// for managing regular app files (eg. collection uploads).
|
|
//
|
|
// NB! Make sure to call Close() on the returned result
|
|
// after you are done working with it.
|
|
NewFilesystem() (*filesystem.System, error)
|
|
|
|
// NewBackupsFilesystem creates and returns a configured filesystem.System instance
|
|
// for managing app backups.
|
|
//
|
|
// NB! Make sure to call Close() on the returned result
|
|
// after you are done working with it.
|
|
NewBackupsFilesystem() (*filesystem.System, error)
|
|
|
|
// RefreshSettings reinitializes and reloads the stored application settings.
|
|
RefreshSettings() error
|
|
|
|
// IsBootstrapped checks if the application was initialized
|
|
// (aka. whether Bootstrap() was called).
|
|
IsBootstrapped() bool
|
|
|
|
// Bootstrap takes care for initializing the application
|
|
// (open db connections, load settings, etc.).
|
|
//
|
|
// It will call ResetBootstrapState() if the application was already bootstrapped.
|
|
Bootstrap() error
|
|
|
|
// ResetBootstrapState takes care for releasing initialized app resources
|
|
// (eg. closing db connections).
|
|
ResetBootstrapState() error
|
|
|
|
// CreateBackup creates a new backup of the current app pb_data directory.
|
|
//
|
|
// Backups can be stored on S3 if it is configured in app.Settings().Backups.
|
|
//
|
|
// Please refer to the godoc of the specific core.App implementation
|
|
// for details on the backup procedures.
|
|
CreateBackup(ctx context.Context, name string) error
|
|
|
|
// RestoreBackup restores the backup with the specified name and restarts
|
|
// the current running application process.
|
|
//
|
|
// The safely perform the restore it is recommended to have free disk space
|
|
// for at least 2x the size of the restored pb_data backup.
|
|
//
|
|
// Please refer to the godoc of the specific core.App implementation
|
|
// for details on the restore procedures.
|
|
//
|
|
// NB! This feature is experimental and currently is expected to work only on UNIX based systems.
|
|
RestoreBackup(ctx context.Context, name string) error
|
|
|
|
// Restart restarts the current running application process.
|
|
//
|
|
// Currently it is relying on execve so it is supported only on UNIX based systems.
|
|
Restart() error
|
|
|
|
// ---------------------------------------------------------------
|
|
// App event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnBeforeBootstrap hook is triggered before initializing the main
|
|
// application resources (eg. before db open and initial settings load).
|
|
OnBeforeBootstrap() *hook.Hook[*BootstrapEvent]
|
|
|
|
// OnAfterBootstrap hook is triggered after initializing the main
|
|
// application resources (eg. after db open and initial settings load).
|
|
OnAfterBootstrap() *hook.Hook[*BootstrapEvent]
|
|
|
|
// OnBeforeServe hook is triggered before serving the internal router (echo),
|
|
// allowing you to adjust its options and attach new routes or middlewares.
|
|
OnBeforeServe() *hook.Hook[*ServeEvent]
|
|
|
|
// OnBeforeApiError hook is triggered right before sending an error API
|
|
// response to the client, allowing you to further modify the error data
|
|
// or to return a completely different API response.
|
|
OnBeforeApiError() *hook.Hook[*ApiErrorEvent]
|
|
|
|
// OnAfterApiError hook is triggered right after sending an error API
|
|
// response to the client.
|
|
// It could be used to log the final API error in external services.
|
|
OnAfterApiError() *hook.Hook[*ApiErrorEvent]
|
|
|
|
// OnTerminate hook is triggered when the app is in the process
|
|
// of being terminated (eg. on SIGTERM signal).
|
|
OnTerminate() *hook.Hook[*TerminateEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Dao event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnModelBeforeCreate hook is triggered before inserting a new
|
|
// model in the DB, allowing you to modify or validate the stored data.
|
|
//
|
|
// If the optional "tags" list (table names and/or the Collection id for Record models)
|
|
// is specified, then all event handlers registered via the created hook
|
|
// will be triggered and called only if their event data origin matches the tags.
|
|
OnModelBeforeCreate(tags ...string) *hook.TaggedHook[*ModelEvent]
|
|
|
|
// OnModelAfterCreate hook is triggered after successfully
|
|
// inserting a new model in the DB.
|
|
//
|
|
// If the optional "tags" list (table names and/or the Collection id for Record models)
|
|
// is specified, then all event handlers registered via the created hook
|
|
// will be triggered and called only if their event data origin matches the tags.
|
|
OnModelAfterCreate(tags ...string) *hook.TaggedHook[*ModelEvent]
|
|
|
|
// OnModelBeforeUpdate hook is triggered before updating existing
|
|
// model in the DB, allowing you to modify or validate the stored data.
|
|
//
|
|
// If the optional "tags" list (table names and/or the Collection id for Record models)
|
|
// is specified, then all event handlers registered via the created hook
|
|
// will be triggered and called only if their event data origin matches the tags.
|
|
OnModelBeforeUpdate(tags ...string) *hook.TaggedHook[*ModelEvent]
|
|
|
|
// OnModelAfterUpdate hook is triggered after successfully updating
|
|
// existing model in the DB.
|
|
//
|
|
// If the optional "tags" list (table names and/or the Collection id for Record models)
|
|
// is specified, then all event handlers registered via the created hook
|
|
// will be triggered and called only if their event data origin matches the tags.
|
|
OnModelAfterUpdate(tags ...string) *hook.TaggedHook[*ModelEvent]
|
|
|
|
// OnModelBeforeDelete hook is triggered before deleting an
|
|
// existing model from the DB.
|
|
//
|
|
// If the optional "tags" list (table names and/or the Collection id for Record models)
|
|
// is specified, then all event handlers registered via the created hook
|
|
// will be triggered and called only if their event data origin matches the tags.
|
|
OnModelBeforeDelete(tags ...string) *hook.TaggedHook[*ModelEvent]
|
|
|
|
// OnModelAfterDelete hook is triggered after successfully deleting an
|
|
// existing model from the DB.
|
|
//
|
|
// If the optional "tags" list (table names and/or the Collection id for Record models)
|
|
// is specified, then all event handlers registered via the created hook
|
|
// will be triggered and called only if their event data origin matches the tags.
|
|
OnModelAfterDelete(tags ...string) *hook.TaggedHook[*ModelEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Mailer event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnMailerBeforeAdminResetPasswordSend hook is triggered right
|
|
// before sending a password reset email to an admin, allowing you
|
|
// to inspect and customize the email message that is being sent.
|
|
OnMailerBeforeAdminResetPasswordSend() *hook.Hook[*MailerAdminEvent]
|
|
|
|
// OnMailerAfterAdminResetPasswordSend hook is triggered after
|
|
// admin password reset email was successfully sent.
|
|
OnMailerAfterAdminResetPasswordSend() *hook.Hook[*MailerAdminEvent]
|
|
|
|
// OnMailerBeforeRecordResetPasswordSend hook is triggered right
|
|
// before sending a password reset email to an auth record, allowing
|
|
// you to inspect and customize the email message that is being sent.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnMailerBeforeRecordResetPasswordSend(tags ...string) *hook.TaggedHook[*MailerRecordEvent]
|
|
|
|
// OnMailerAfterRecordResetPasswordSend hook is triggered after
|
|
// an auth record password reset email was successfully sent.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnMailerAfterRecordResetPasswordSend(tags ...string) *hook.TaggedHook[*MailerRecordEvent]
|
|
|
|
// OnMailerBeforeRecordVerificationSend hook is triggered right
|
|
// before sending a verification email to an auth record, allowing
|
|
// you to inspect and customize the email message that is being sent.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnMailerBeforeRecordVerificationSend(tags ...string) *hook.TaggedHook[*MailerRecordEvent]
|
|
|
|
// OnMailerAfterRecordVerificationSend hook is triggered after a
|
|
// verification email was successfully sent to an auth record.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnMailerAfterRecordVerificationSend(tags ...string) *hook.TaggedHook[*MailerRecordEvent]
|
|
|
|
// OnMailerBeforeRecordChangeEmailSend hook is triggered right before
|
|
// sending a confirmation new address email to an auth record, allowing
|
|
// you to inspect and customize the email message that is being sent.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnMailerBeforeRecordChangeEmailSend(tags ...string) *hook.TaggedHook[*MailerRecordEvent]
|
|
|
|
// OnMailerAfterRecordChangeEmailSend hook is triggered after a
|
|
// verification email was successfully sent to an auth record.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnMailerAfterRecordChangeEmailSend(tags ...string) *hook.TaggedHook[*MailerRecordEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Realtime API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnRealtimeConnectRequest hook is triggered right before establishing
|
|
// the SSE client connection.
|
|
OnRealtimeConnectRequest() *hook.Hook[*RealtimeConnectEvent]
|
|
|
|
// OnRealtimeDisconnectRequest hook is triggered on disconnected/interrupted
|
|
// SSE client connection.
|
|
OnRealtimeDisconnectRequest() *hook.Hook[*RealtimeDisconnectEvent]
|
|
|
|
// OnRealtimeBeforeMessage hook is triggered right before sending
|
|
// an SSE message to a client.
|
|
//
|
|
// Returning [hook.StopPropagation] will prevent sending the message.
|
|
// Returning any other non-nil error will close the realtime connection.
|
|
OnRealtimeBeforeMessageSend() *hook.Hook[*RealtimeMessageEvent]
|
|
|
|
// OnRealtimeBeforeMessage hook is triggered right after sending
|
|
// an SSE message to a client.
|
|
OnRealtimeAfterMessageSend() *hook.Hook[*RealtimeMessageEvent]
|
|
|
|
// OnRealtimeBeforeSubscribeRequest hook is triggered before changing
|
|
// the client subscriptions, allowing you to further validate and
|
|
// modify the submitted change.
|
|
OnRealtimeBeforeSubscribeRequest() *hook.Hook[*RealtimeSubscribeEvent]
|
|
|
|
// OnRealtimeAfterSubscribeRequest hook is triggered after the client
|
|
// subscriptions were successfully changed.
|
|
OnRealtimeAfterSubscribeRequest() *hook.Hook[*RealtimeSubscribeEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Settings API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnSettingsListRequest hook is triggered on each successful
|
|
// API Settings list request.
|
|
//
|
|
// Could be used to validate or modify the response before
|
|
// returning it to the client.
|
|
OnSettingsListRequest() *hook.Hook[*SettingsListEvent]
|
|
|
|
// OnSettingsBeforeUpdateRequest hook is triggered before each API
|
|
// Settings update request (after request data load and before settings persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or
|
|
// implement completely different persistence behavior.
|
|
OnSettingsBeforeUpdateRequest() *hook.Hook[*SettingsUpdateEvent]
|
|
|
|
// OnSettingsAfterUpdateRequest hook is triggered after each
|
|
// successful API Settings update request.
|
|
OnSettingsAfterUpdateRequest() *hook.Hook[*SettingsUpdateEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// File API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnFileDownloadRequest hook is triggered before each API File download request.
|
|
//
|
|
// Could be used to validate or modify the file response before
|
|
// returning it to the client.
|
|
OnFileDownloadRequest(tags ...string) *hook.TaggedHook[*FileDownloadEvent]
|
|
|
|
// OnFileBeforeTokenRequest hook is triggered before each file
|
|
// token API request.
|
|
//
|
|
// If no token or model was submitted, e.Model and e.Token will be empty,
|
|
// allowing you to implement your own custom model file auth implementation.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnFileBeforeTokenRequest(tags ...string) *hook.TaggedHook[*FileTokenEvent]
|
|
|
|
// OnFileAfterTokenRequest hook is triggered after each
|
|
// successful file token API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnFileAfterTokenRequest(tags ...string) *hook.TaggedHook[*FileTokenEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Admin API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnAdminsListRequest hook is triggered on each API Admins list request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
OnAdminsListRequest() *hook.Hook[*AdminsListEvent]
|
|
|
|
// OnAdminViewRequest hook is triggered on each API Admin view request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
OnAdminViewRequest() *hook.Hook[*AdminViewEvent]
|
|
|
|
// OnAdminBeforeCreateRequest hook is triggered before each API
|
|
// Admin create request (after request data load and before model persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
OnAdminBeforeCreateRequest() *hook.Hook[*AdminCreateEvent]
|
|
|
|
// OnAdminAfterCreateRequest hook is triggered after each
|
|
// successful API Admin create request.
|
|
OnAdminAfterCreateRequest() *hook.Hook[*AdminCreateEvent]
|
|
|
|
// OnAdminBeforeUpdateRequest hook is triggered before each API
|
|
// Admin update request (after request data load and before model persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
OnAdminBeforeUpdateRequest() *hook.Hook[*AdminUpdateEvent]
|
|
|
|
// OnAdminAfterUpdateRequest hook is triggered after each
|
|
// successful API Admin update request.
|
|
OnAdminAfterUpdateRequest() *hook.Hook[*AdminUpdateEvent]
|
|
|
|
// OnAdminBeforeDeleteRequest hook is triggered before each API
|
|
// Admin delete request (after model load and before actual deletion).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different delete behavior.
|
|
OnAdminBeforeDeleteRequest() *hook.Hook[*AdminDeleteEvent]
|
|
|
|
// OnAdminAfterDeleteRequest hook is triggered after each
|
|
// successful API Admin delete request.
|
|
OnAdminAfterDeleteRequest() *hook.Hook[*AdminDeleteEvent]
|
|
|
|
// OnAdminAuthRequest hook is triggered on each successful API Admin
|
|
// authentication request (sign-in, token refresh, etc.).
|
|
//
|
|
// Could be used to additionally validate or modify the
|
|
// authenticated admin data and token.
|
|
OnAdminAuthRequest() *hook.Hook[*AdminAuthEvent]
|
|
|
|
// OnAdminBeforeAuthWithPasswordRequest hook is triggered before each Admin
|
|
// auth with password API request (after request data load and before password validation).
|
|
//
|
|
// Could be used to implement for example a custom password validation
|
|
// or to locate a different Admin identity (by assigning [AdminAuthWithPasswordEvent.Admin]).
|
|
OnAdminBeforeAuthWithPasswordRequest() *hook.Hook[*AdminAuthWithPasswordEvent]
|
|
|
|
// OnAdminAfterAuthWithPasswordRequest hook is triggered after each
|
|
// successful Admin auth with password API request.
|
|
OnAdminAfterAuthWithPasswordRequest() *hook.Hook[*AdminAuthWithPasswordEvent]
|
|
|
|
// OnAdminBeforeAuthRefreshRequest hook is triggered before each Admin
|
|
// auth refresh API request (right before generating a new auth token).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different auth refresh behavior.
|
|
OnAdminBeforeAuthRefreshRequest() *hook.Hook[*AdminAuthRefreshEvent]
|
|
|
|
// OnAdminAfterAuthRefreshRequest hook is triggered after each
|
|
// successful auth refresh API request (right after generating a new auth token).
|
|
OnAdminAfterAuthRefreshRequest() *hook.Hook[*AdminAuthRefreshEvent]
|
|
|
|
// OnAdminBeforeRequestPasswordResetRequest hook is triggered before each Admin
|
|
// request password reset API request (after request data load and before sending the reset email).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different password reset behavior.
|
|
OnAdminBeforeRequestPasswordResetRequest() *hook.Hook[*AdminRequestPasswordResetEvent]
|
|
|
|
// OnAdminAfterRequestPasswordResetRequest hook is triggered after each
|
|
// successful request password reset API request.
|
|
OnAdminAfterRequestPasswordResetRequest() *hook.Hook[*AdminRequestPasswordResetEvent]
|
|
|
|
// OnAdminBeforeConfirmPasswordResetRequest hook is triggered before each Admin
|
|
// confirm password reset API request (after request data load and before persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
OnAdminBeforeConfirmPasswordResetRequest() *hook.Hook[*AdminConfirmPasswordResetEvent]
|
|
|
|
// OnAdminAfterConfirmPasswordResetRequest hook is triggered after each
|
|
// successful confirm password reset API request.
|
|
OnAdminAfterConfirmPasswordResetRequest() *hook.Hook[*AdminConfirmPasswordResetEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Record Auth API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnRecordAuthRequest hook is triggered on each successful API
|
|
// record authentication request (sign-in, token refresh, etc.).
|
|
//
|
|
// Could be used to additionally validate or modify the authenticated
|
|
// record data and token.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAuthRequest(tags ...string) *hook.TaggedHook[*RecordAuthEvent]
|
|
|
|
// OnRecordBeforeAuthWithPasswordRequest hook is triggered before each Record
|
|
// auth with password API request (after request data load and before password validation).
|
|
//
|
|
// Could be used to implement for example a custom password validation
|
|
// or to locate a different Record model (by reassigning [RecordAuthWithPasswordEvent.Record]).
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeAuthWithPasswordRequest(tags ...string) *hook.TaggedHook[*RecordAuthWithPasswordEvent]
|
|
|
|
// OnRecordAfterAuthWithPasswordRequest hook is triggered after each
|
|
// successful Record auth with password API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterAuthWithPasswordRequest(tags ...string) *hook.TaggedHook[*RecordAuthWithPasswordEvent]
|
|
|
|
// OnRecordBeforeAuthWithOAuth2Request hook is triggered before each Record
|
|
// OAuth2 sign-in/sign-up API request (after token exchange and before external provider linking).
|
|
//
|
|
// If the [RecordAuthWithOAuth2Event.Record] is not set, then the OAuth2
|
|
// request will try to create a new auth Record.
|
|
//
|
|
// To assign or link a different existing record model you can
|
|
// change the [RecordAuthWithOAuth2Event.Record] field.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeAuthWithOAuth2Request(tags ...string) *hook.TaggedHook[*RecordAuthWithOAuth2Event]
|
|
|
|
// OnRecordAfterAuthWithOAuth2Request hook is triggered after each
|
|
// successful Record OAuth2 API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterAuthWithOAuth2Request(tags ...string) *hook.TaggedHook[*RecordAuthWithOAuth2Event]
|
|
|
|
// OnRecordBeforeAuthRefreshRequest hook is triggered before each Record
|
|
// auth refresh API request (right before generating a new auth token).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different auth refresh behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeAuthRefreshRequest(tags ...string) *hook.TaggedHook[*RecordAuthRefreshEvent]
|
|
|
|
// OnRecordAfterAuthRefreshRequest hook is triggered after each
|
|
// successful auth refresh API request (right after generating a new auth token).
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterAuthRefreshRequest(tags ...string) *hook.TaggedHook[*RecordAuthRefreshEvent]
|
|
|
|
// OnRecordListExternalAuthsRequest hook is triggered on each API record external auths list request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordListExternalAuthsRequest(tags ...string) *hook.TaggedHook[*RecordListExternalAuthsEvent]
|
|
|
|
// OnRecordBeforeUnlinkExternalAuthRequest hook is triggered before each API record
|
|
// external auth unlink request (after models load and before the actual relation deletion).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different delete behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeUnlinkExternalAuthRequest(tags ...string) *hook.TaggedHook[*RecordUnlinkExternalAuthEvent]
|
|
|
|
// OnRecordAfterUnlinkExternalAuthRequest hook is triggered after each
|
|
// successful API record external auth unlink request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterUnlinkExternalAuthRequest(tags ...string) *hook.TaggedHook[*RecordUnlinkExternalAuthEvent]
|
|
|
|
// OnRecordBeforeRequestPasswordResetRequest hook is triggered before each Record
|
|
// request password reset API request (after request data load and before sending the reset email).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different password reset behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeRequestPasswordResetRequest(tags ...string) *hook.TaggedHook[*RecordRequestPasswordResetEvent]
|
|
|
|
// OnRecordAfterRequestPasswordResetRequest hook is triggered after each
|
|
// successful request password reset API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterRequestPasswordResetRequest(tags ...string) *hook.TaggedHook[*RecordRequestPasswordResetEvent]
|
|
|
|
// OnRecordBeforeConfirmPasswordResetRequest hook is triggered before each Record
|
|
// confirm password reset API request (after request data load and before persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeConfirmPasswordResetRequest(tags ...string) *hook.TaggedHook[*RecordConfirmPasswordResetEvent]
|
|
|
|
// OnRecordAfterConfirmPasswordResetRequest hook is triggered after each
|
|
// successful confirm password reset API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterConfirmPasswordResetRequest(tags ...string) *hook.TaggedHook[*RecordConfirmPasswordResetEvent]
|
|
|
|
// OnRecordBeforeRequestVerificationRequest hook is triggered before each Record
|
|
// request verification API request (after request data load and before sending the verification email).
|
|
//
|
|
// Could be used to additionally validate the loaded request data or implement
|
|
// completely different verification behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeRequestVerificationRequest(tags ...string) *hook.TaggedHook[*RecordRequestVerificationEvent]
|
|
|
|
// OnRecordAfterRequestVerificationRequest hook is triggered after each
|
|
// successful request verification API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterRequestVerificationRequest(tags ...string) *hook.TaggedHook[*RecordRequestVerificationEvent]
|
|
|
|
// OnRecordBeforeConfirmVerificationRequest hook is triggered before each Record
|
|
// confirm verification API request (after request data load and before persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeConfirmVerificationRequest(tags ...string) *hook.TaggedHook[*RecordConfirmVerificationEvent]
|
|
|
|
// OnRecordAfterConfirmVerificationRequest hook is triggered after each
|
|
// successful confirm verification API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterConfirmVerificationRequest(tags ...string) *hook.TaggedHook[*RecordConfirmVerificationEvent]
|
|
|
|
// OnRecordBeforeRequestEmailChangeRequest hook is triggered before each Record request email change API request
|
|
// (after request data load and before sending the email link to confirm the change).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different request email change behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeRequestEmailChangeRequest(tags ...string) *hook.TaggedHook[*RecordRequestEmailChangeEvent]
|
|
|
|
// OnRecordAfterRequestEmailChangeRequest hook is triggered after each
|
|
// successful request email change API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterRequestEmailChangeRequest(tags ...string) *hook.TaggedHook[*RecordRequestEmailChangeEvent]
|
|
|
|
// OnRecordBeforeConfirmEmailChangeRequest hook is triggered before each Record
|
|
// confirm email change API request (after request data load and before persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeConfirmEmailChangeRequest(tags ...string) *hook.TaggedHook[*RecordConfirmEmailChangeEvent]
|
|
|
|
// OnRecordAfterConfirmEmailChangeRequest hook is triggered after each
|
|
// successful confirm email change API request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterConfirmEmailChangeRequest(tags ...string) *hook.TaggedHook[*RecordConfirmEmailChangeEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Record CRUD API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnRecordsListRequest hook is triggered on each API Records list request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordsListRequest(tags ...string) *hook.TaggedHook[*RecordsListEvent]
|
|
|
|
// OnRecordViewRequest hook is triggered on each API Record view request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordViewRequest(tags ...string) *hook.TaggedHook[*RecordViewEvent]
|
|
|
|
// OnRecordBeforeCreateRequest hook is triggered before each API Record
|
|
// create request (after request data load and before model persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeCreateRequest(tags ...string) *hook.TaggedHook[*RecordCreateEvent]
|
|
|
|
// OnRecordAfterCreateRequest hook is triggered after each
|
|
// successful API Record create request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterCreateRequest(tags ...string) *hook.TaggedHook[*RecordCreateEvent]
|
|
|
|
// OnRecordBeforeUpdateRequest hook is triggered before each API Record
|
|
// update request (after request data load and before model persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeUpdateRequest(tags ...string) *hook.TaggedHook[*RecordUpdateEvent]
|
|
|
|
// OnRecordAfterUpdateRequest hook is triggered after each
|
|
// successful API Record update request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterUpdateRequest(tags ...string) *hook.TaggedHook[*RecordUpdateEvent]
|
|
|
|
// OnRecordBeforeDeleteRequest hook is triggered before each API Record
|
|
// delete request (after model load and before actual deletion).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different delete behavior.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordBeforeDeleteRequest(tags ...string) *hook.TaggedHook[*RecordDeleteEvent]
|
|
|
|
// OnRecordAfterDeleteRequest hook is triggered after each
|
|
// successful API Record delete request.
|
|
//
|
|
// If the optional "tags" list (Collection ids or names) is specified,
|
|
// then all event handlers registered via the created hook will be
|
|
// triggered and called only if their event data origin matches the tags.
|
|
OnRecordAfterDeleteRequest(tags ...string) *hook.TaggedHook[*RecordDeleteEvent]
|
|
|
|
// ---------------------------------------------------------------
|
|
// Collection API event hooks
|
|
// ---------------------------------------------------------------
|
|
|
|
// OnCollectionsListRequest hook is triggered on each API Collections list request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
OnCollectionsListRequest() *hook.Hook[*CollectionsListEvent]
|
|
|
|
// OnCollectionViewRequest hook is triggered on each API Collection view request.
|
|
//
|
|
// Could be used to validate or modify the response before returning it to the client.
|
|
OnCollectionViewRequest() *hook.Hook[*CollectionViewEvent]
|
|
|
|
// OnCollectionBeforeCreateRequest hook is triggered before each API Collection
|
|
// create request (after request data load and before model persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
OnCollectionBeforeCreateRequest() *hook.Hook[*CollectionCreateEvent]
|
|
|
|
// OnCollectionAfterCreateRequest hook is triggered after each
|
|
// successful API Collection create request.
|
|
OnCollectionAfterCreateRequest() *hook.Hook[*CollectionCreateEvent]
|
|
|
|
// OnCollectionBeforeUpdateRequest hook is triggered before each API Collection
|
|
// update request (after request data load and before model persistence).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different persistence behavior.
|
|
OnCollectionBeforeUpdateRequest() *hook.Hook[*CollectionUpdateEvent]
|
|
|
|
// OnCollectionAfterUpdateRequest hook is triggered after each
|
|
// successful API Collection update request.
|
|
OnCollectionAfterUpdateRequest() *hook.Hook[*CollectionUpdateEvent]
|
|
|
|
// OnCollectionBeforeDeleteRequest hook is triggered before each API
|
|
// Collection delete request (after model load and before actual deletion).
|
|
//
|
|
// Could be used to additionally validate the request data or implement
|
|
// completely different delete behavior.
|
|
OnCollectionBeforeDeleteRequest() *hook.Hook[*CollectionDeleteEvent]
|
|
|
|
// OnCollectionAfterDeleteRequest hook is triggered after each
|
|
// successful API Collection delete request.
|
|
OnCollectionAfterDeleteRequest() *hook.Hook[*CollectionDeleteEvent]
|
|
|
|
// OnCollectionsBeforeImportRequest hook is triggered before each API
|
|
// collections import request (after request data load and before the actual import).
|
|
//
|
|
// Could be used to additionally validate the imported collections or
|
|
// to implement completely different import behavior.
|
|
OnCollectionsBeforeImportRequest() *hook.Hook[*CollectionsImportEvent]
|
|
|
|
// OnCollectionsAfterImportRequest hook is triggered after each
|
|
// successful API collections import request.
|
|
OnCollectionsAfterImportRequest() *hook.Hook[*CollectionsImportEvent]
|
|
}
|