Skip to main content

Client

Struct Client 

Source
pub struct Client { /* private fields */ }
Expand description

Client for Tabularium API

Tabularium — index, submit, and discover plugins.

Version: 1.0.0

Implementations§

Source§

impl Client

Source

pub fn new(baseurl: &str) -> Self

Create a new client.

baseurl is the base URL provided to the internal reqwest::Client, and should include a scheme and hostname, as well as port and a path stem if applicable.

Source

pub fn new_with_client(baseurl: &str, client: Client) -> Self

Construct a new client with an existing reqwest::Client, allowing more control over its configuration.

baseurl is the base URL provided to the internal reqwest::Client, and should include a scheme and hostname, as well as port and a path stem if applicable.

Source

pub fn baseurl(&self) -> &String

Get the base URL to which requests are made.

Source

pub fn client(&self) -> &Client

Get the internal reqwest::Client used to make requests.

Source

pub fn api_version(&self) -> &'static str

Get the version of this API.

This string is pulled directly from the source OpenAPI document and may be in any format the API selects.

Source§

impl Client

Source

pub fn list_audit(&self) -> ListAudit<'_>

List audit log entries

Sends a GET request to /api/admin/audit/

let response = client.list_audit()
    .action(action)
    .actor_id(actor_id)
    .limit(limit)
    .page(page)
    .send()
    .await;
Source

pub fn get_admin_email_recovery(&self) -> GetAdminEmailRecovery<'_>

Read email-recovery state for the current admin

Sends a GET request to /api/admin/auth/email-recovery/

let response = client.get_admin_email_recovery()
    .send()
    .await;
Source

pub fn update_admin_email_recovery(&self) -> UpdateAdminEmailRecovery<'_>

Update email-recovery state

Toggle whether rootCredentials survives the first OAuth link, and/or rotate the bootstrap email + password for the calling admin.

Sends a PUT request to /api/admin/auth/email-recovery/

let response = client.update_admin_email_recovery()
    .body(body)
    .send()
    .await;
Source

pub fn delete_admin_email_recovery(&self) -> DeleteAdminEmailRecovery<'_>

Delete the rootCredentials row for the current admin

Sends a DELETE request to /api/admin/auth/email-recovery/

let response = client.delete_admin_email_recovery()
    .send()
    .await;
Source

pub fn get_admin_branding(&self) -> GetAdminBranding<'_>

Get current + default branding (with translation maps)

Sends a GET request to /api/admin/branding/

let response = client.get_admin_branding()
    .send()
    .await;
Source

pub fn update_branding(&self) -> UpdateBranding<'_>

Update branding (whitelabel)

Partial update. tagline and footerText set the default-locale value; taglineTranslations / footerTextTranslations set per-locale overrides (pass null/empty to clear).

Sends a PUT request to /api/admin/branding/

let response = client.update_branding()
    .body(body)
    .send()
    .await;
Source

pub fn upload_branding_favicon(&self) -> UploadBrandingFavicon<'_>

Upload a branding favicon

Multipart upload. Field name must be file. Accepts png/jpg/webp/svg/ico up to 256 KB. Storage backend is set in /admin/infra/storage. The branding favicon_url setting is updated to reference the new URL (includes a cache-buster query param).

Sends a POST request to /api/admin/branding/favicon/

let response = client.upload_branding_favicon()
    .body(body)
    .send()
    .await;

Upload a branding logo

Multipart upload. Field name must be file. Accepts png/jpg/webp/svg up to 512 KB. Storage backend is set in /admin/infra/storage. The branding logo_url setting is updated to reference the new URL (includes a cache-buster query param).

Sends a POST request to /api/admin/branding/logo/

let response = client.upload_branding_logo()
    .body(body)
    .send()
    .await;
Source

pub fn admin_diagnostics(&self) -> AdminDiagnostics<'_>

System diagnostics

Admin-only deep health/diagnostics. Returns driver names, mode, uptime, and per-check failure detail. The public /healthz returns only { ok } to avoid leaking infrastructure details.

Sends a GET request to /api/admin/diagnostics/

let response = client.admin_diagnostics()
    .send()
    .await;
Source

pub fn admin_get_docs_config(&self) -> AdminGetDocsConfig<'_>

Read docs config (intro/outro/sections)

Sends a GET request to /api/admin/docs/

let response = client.admin_get_docs_config()
    .send()
    .await;
Source

pub fn admin_update_docs_config(&self) -> AdminUpdateDocsConfig<'_>

Update intro / outro markdown

Sends a PUT request to /api/admin/docs/

let response = client.admin_update_docs_config()
    .body(body)
    .send()
    .await;
Source

pub fn admin_list_docs_sections(&self) -> AdminListDocsSections<'_>

List custom docs sections

Sends a GET request to /api/admin/docs/sections/

let response = client.admin_list_docs_sections()
    .send()
    .await;
Source

pub fn admin_create_docs_section(&self) -> AdminCreateDocsSection<'_>

Create a custom docs section

Sends a POST request to /api/admin/docs/sections/

let response = client.admin_create_docs_section()
    .body(body)
    .send()
    .await;
Source

pub fn admin_update_docs_section(&self) -> AdminUpdateDocsSection<'_>

Update a custom docs section

Sends a PUT request to /api/admin/docs/sections/{id}/

let response = client.admin_update_docs_section()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn admin_delete_docs_section(&self) -> AdminDeleteDocsSection<'_>

Delete a custom docs section

Sends a DELETE request to /api/admin/docs/sections/{id}/

let response = client.admin_delete_docs_section()
    .id(id)
    .send()
    .await;
Source

pub fn admin_get_features(&self) -> AdminGetFeatures<'_>

Get feature flags

Sends a GET request to /api/admin/features/

let response = client.admin_get_features()
    .send()
    .await;
Source

pub fn admin_update_features(&self) -> AdminUpdateFeatures<'_>

Toggle feature flags

Sends a PATCH request to /api/admin/features/

let response = client.admin_update_features()
    .body(body)
    .send()
    .await;
Source

pub fn admin_get_home_copy(&self) -> AdminGetHomeCopy<'_>

Get home-page copy overrides (admin view)

Sends a GET request to /api/admin/home-copy/

let response = client.admin_get_home_copy()
    .send()
    .await;
Source

pub fn admin_update_home_copy(&self) -> AdminUpdateHomeCopy<'_>

Update home-page copy overrides

Replaces the entire home_copy blob. Empty strings clear the override for that locale.

Sends a PUT request to /api/admin/home-copy/

let response = client.admin_update_home_copy()
    .body(body)
    .send()
    .await;
Source

pub fn admin_get_i18n(&self) -> AdminGetI18n<'_>

Get i18n config

Sends a GET request to /api/admin/i18n/

let response = client.admin_get_i18n()
    .send()
    .await;
Source

pub fn admin_update_i18n(&self) -> AdminUpdateI18n<'_>

Update i18n config

Sends a PATCH request to /api/admin/i18n/

let response = client.admin_update_i18n()
    .body(body)
    .send()
    .await;
Source

pub fn get_infra_cache(&self) -> GetInfraCache<'_>

Get current cache driver state

Sends a GET request to /api/admin/infra/cache/

let response = client.get_infra_cache()
    .send()
    .await;
Source

pub fn update_infra_cache(&self) -> UpdateInfraCache<'_>

Update cache driver (hot-swap, no restart)

Persists the driver choice (and optional redisUrl) and immediately reconfigures the running cache. redisUrl is stored encrypted. Pass empty string to clear the override.

Sends a PUT request to /api/admin/infra/cache/

let response = client.update_infra_cache()
    .body(body)
    .send()
    .await;
Source

pub fn get_infra_storage(&self) -> GetInfraStorage<'_>

Get storage driver state

Sends a GET request to /api/admin/infra/storage/

let response = client.get_infra_storage()
    .send()
    .await;
Source

pub fn update_infra_storage(&self) -> UpdateInfraStorage<'_>

Update storage driver (hot-swap)

Pass an empty string for any s3 field to clear it. Access / secret keys are stored encrypted. disk writes under data/uploads/ and serves via /uploads/. s3 uses Bun.S3Client (compatible with AWS, MinIO, R2).

Sends a PUT request to /api/admin/infra/storage/

let response = client.update_infra_storage()
    .body(body)
    .send()
    .await;
Source

pub fn get_instance_settings(&self) -> GetInstanceSettings<'_>

Get instance-wide settings

Sends a GET request to /api/admin/instance/

let response = client.get_instance_settings()
    .send()
    .await;
Source

pub fn update_instance_settings(&self) -> UpdateInstanceSettings<'_>

Update instance-wide settings

Toggle approval mode, adjust per-bucket rate limits, and configure the manifest filename + schema URL. Pass reset: true to clear a rate-limit override; pass null or an empty string for the manifest fields to revert to defaults.

Sends a PUT request to /api/admin/instance/

let response = client.update_instance_settings()
    .body(body)
    .send()
    .await;
Source

pub fn list_app_url_schemes(&self) -> ListAppUrlSchemes<'_>

List configured app URL schemes

Sends a GET request to /api/admin/instance/app-schemes/

let response = client.list_app_url_schemes()
    .send()
    .await;
Source

pub fn replace_app_url_schemes(&self) -> ReplaceAppUrlSchemes<'_>

Replace the full list of app URL schemes

Overwrites the stored app_url_schemes setting with the provided list. Each scheme needs a name + URL scheme (lowercase, starts with a letter). Optional kinds filter restricts the scheme to specific plugin kinds.

Sends a PUT request to /api/admin/instance/app-schemes/

let response = client.replace_app_url_schemes()
    .body(body)
    .send()
    .await;
Source

pub fn get_instance_security(&self) -> GetInstanceSecurity<'_>

Get current + previous registry signing keys

Sends a GET request to /api/admin/instance/security/

let response = client.get_instance_security()
    .send()
    .await;
Source

pub fn rotate_instance_signing_key(&self) -> RotateInstanceSigningKey<'_>

Rotate the registry signing key

Generates a new Ed25519 keypair, demotes the current key to .previous (overwriting any earlier previous), and records an audit entry.

Sends a POST request to /api/admin/instance/security/rotate

let response = client.rotate_instance_signing_key()
    .send()
    .await;
Source

pub fn admin_list_kinds(&self) -> AdminListKinds<'_>

List all plugin kinds

Sends a GET request to /api/admin/kinds/

let response = client.admin_list_kinds()
    .send()
    .await;
Source

pub fn admin_create_kind(&self) -> AdminCreateKind<'_>

Create a plugin kind

Sends a POST request to /api/admin/kinds/

let response = client.admin_create_kind()
    .body(body)
    .send()
    .await;
Source

pub fn admin_get_kind(&self) -> AdminGetKind<'_>

Read one plugin kind

Sends a GET request to /api/admin/kinds/{key}/

let response = client.admin_get_kind()
    .key(key)
    .send()
    .await;
Source

pub fn admin_update_kind(&self) -> AdminUpdateKind<'_>

Replace one plugin kind

Sends a PUT request to /api/admin/kinds/{key}/

let response = client.admin_update_kind()
    .key(key)
    .body(body)
    .send()
    .await;
Source

pub fn admin_delete_kind(&self) -> AdminDeleteKind<'_>

Delete one plugin kind

Sends a DELETE request to /api/admin/kinds/{key}/

let response = client.admin_delete_kind()
    .key(key)
    .send()
    .await;
Source

pub fn get_manifest_extensions(&self) -> GetManifestExtensions<'_>

Read the current manifest extensions delta + merged schema

Sends a GET request to /api/admin/manifest/extensions/

let response = client.get_manifest_extensions()
    .send()
    .await;
Source

pub fn update_manifest_extensions(&self) -> UpdateManifestExtensions<'_>

Replace the manifest extensions delta

The delta is a flat record of { propertyName: JSONSchemaNode }. The registry wraps it into an object schema and merges it with the locked core. Pass null or {} to clear.

Sends a PUT request to /api/admin/manifest/extensions/

let response = client.update_manifest_extensions()
    .body(body)
    .send()
    .await;
Source

pub fn admin_list_pages(&self) -> AdminListPages<'_>

List all markdown pages (grouped by slug)

Sends a GET request to /api/admin/pages/

let response = client.admin_list_pages()
    .send()
    .await;
Source

pub fn create_page(&self) -> CreatePage<'_>

Create a markdown page

Creates the default-locale row unless locale is given. Pass path to mount at any non-reserved URL.

Sends a POST request to /api/admin/pages/

let response = client.create_page()
    .body(body)
    .send()
    .await;
Source

pub fn preview_page(&self) -> PreviewPage<'_>

Render markdown to sanitized HTML (admin live preview)

Sends a POST request to /api/admin/pages/preview/

let response = client.preview_page()
    .body(body)
    .send()
    .await;
Source

pub fn admin_get_page(&self) -> AdminGetPage<'_>

Get a markdown page (raw)

Sends a GET request to /api/admin/pages/{slug}/

let response = client.admin_get_page()
    .slug(slug)
    .locale(locale)
    .send()
    .await;
Source

pub fn delete_page(&self) -> DeletePage<'_>

Delete a markdown page (all locales) or one translation when locale is given

Sends a DELETE request to /api/admin/pages/{slug}/

let response = client.delete_page()
    .slug(slug)
    .locale(locale)
    .send()
    .await;
Source

pub fn update_page(&self) -> UpdatePage<'_>

Update a markdown page (creates the translation row if absent)

Sends a PATCH request to /api/admin/pages/{slug}/

let response = client.update_page()
    .slug(slug)
    .locale(locale)
    .body(body)
    .send()
    .await;
Source

pub fn admin_list_page_translations(&self) -> AdminListPageTranslations<'_>

List existing translations for a page

Sends a GET request to /api/admin/pages/{slug}/translations

let response = client.admin_list_page_translations()
    .slug(slug)
    .send()
    .await;
Source

pub fn admin_list_plugins(&self) -> AdminListPlugins<'_>

List plugins (incl. non-approved)

Sends a GET request to /api/admin/plugins/

let response = client.admin_list_plugins()
    .status(status)
    .send()
    .await;
Source

pub fn bulk_plugin_action(&self) -> BulkPluginAction<'_>

Bulk-approve / reject / delete plugins

Apply the same action to up to 100 plugins in one round-trip. delete cascades to releases. reject accepts an optional reason. Single audit-log entry per call.

Sends a POST request to /api/admin/plugins/bulk/

let response = client.bulk_plugin_action()
    .body(body)
    .send()
    .await;
Source

pub fn admin_delete_plugin(&self) -> AdminDeletePlugin<'_>

Force-delete a plugin (admin override)

Sends a DELETE request to /api/admin/plugins/{id}/

let response = client.admin_delete_plugin()
    .id(id)
    .send()
    .await;
Source

pub fn update_plugin(&self) -> UpdatePlugin<'_>

Update plugin (status / moderation / pin / categorize)

Partial update. status toggles approval. featured: true pins to the landing grid (use featuredOrder to set position). category/tags are normally driven by the .tabularium manifest but can be overridden here.

Sends a PATCH request to /api/admin/plugins/{id}/

let response = client.update_plugin()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn refresh_plugin_manifest(&self) -> RefreshPluginManifest<'_>

Re-fetch the .tabularium manifest from the repo

Pulls .tabularium (and the README) from the repo at the given ref (defaults to the latest released tag or HEAD).

Sends a POST request to /api/admin/plugins/{id}/refresh-manifest/

let response = client.refresh_plugin_manifest()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn rehash_release(&self) -> RehashRelease<'_>

Re-hash release assets

Re-fetches every asset of the given (or latest) release and updates sha256 + size. Useful when the original webhook fetch failed. Set force: true to re-hash assets that already have a sha256.

Sends a POST request to /api/admin/plugins/{id}/rehash/

let response = client.rehash_release()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn replay_webhook(&self) -> ReplayWebhook<'_>

Manually replay the latest release ingest

Re-fetches the upstream latest release via the owner’s stored OAuth token and runs the same ingest path the webhook uses. Useful when the webhook never fired (initial setup) or upstream timed out. Skips signature verification.

Sends a POST request to /api/admin/plugins/{id}/replay-webhook/

let response = client.replay_webhook()
    .id(id)
    .send()
    .await;
Source

pub fn list_provider_instances(&self) -> ListProviderInstances<'_>

List all provider instances (secrets redacted)

Sends a GET request to /api/admin/provider-instances/

let response = client.list_provider_instances()
    .send()
    .await;
Source

pub fn create_provider_instance(&self) -> CreateProviderInstance<'_>

Create a new provider instance

Sends a POST request to /api/admin/provider-instances/

let response = client.create_provider_instance()
    .body(body)
    .send()
    .await;
Source

pub fn bulk_provider_instance_action(&self) -> BulkProviderInstanceAction<'_>

Bulk enable / disable provider instances

Flip enabled on up to 100 provider instances in one round-trip. Unknown ids are returned in missing and silently skipped. Single audit-log entry per call.

Sends a POST request to /api/admin/provider-instances/bulk/

let response = client.bulk_provider_instance_action()
    .body(body)
    .send()
    .await;
Source

pub fn get_provider_instance(&self) -> GetProviderInstance<'_>

Get a single provider instance

Sends a GET request to /api/admin/provider-instances/{id}/

let response = client.get_provider_instance()
    .id(id)
    .send()
    .await;
Source

pub fn delete_provider_instance(&self) -> DeleteProviderInstance<'_>

Delete a provider instance

Sends a DELETE request to /api/admin/provider-instances/{id}/

let response = client.delete_provider_instance()
    .id(id)
    .send()
    .await;
Source

pub fn patch_provider_instance(&self) -> PatchProviderInstance<'_>

Partially update a provider instance

Sends a PATCH request to /api/admin/provider-instances/{id}/

let response = client.patch_provider_instance()
    .id(id)
    .body(body)
    .send()
    .await;

Upload a logo for a provider instance

Multipart upload. Field name must be file. Accepts png/jpg/webp/svg up to 512 KB. Storage backend is set in /admin/infra/storage. The instance row is updated to reference the new URL (includes a cache-buster query param).

Sends a POST request to /api/admin/provider-instances/{id}/logo/

let response = client.upload_provider_logo()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn test_provider_o_auth(&self) -> TestProviderOAuth<'_>

Probe the OAuth authorize endpoint for a provider instance

Issues a GET (manual redirect, 5s timeout) against the provider-kind specific authorize URL. A 302/400 typically means “configured correctly”. 5xx or fetch errors are reported as not-ok. Records an audit entry with the outcome.

Sends a POST request to /api/admin/provider-instances/{id}/test-oauth/

let response = client.test_provider_o_auth()
    .id(id)
    .send()
    .await;
Source

pub fn admin_delete_request(&self) -> AdminDeleteRequest<'_>

Delete a plugin request

Sends a DELETE request to /api/admin/requests/{id}/

let response = client.admin_delete_request()
    .id(id)
    .send()
    .await;
Source

pub fn list_settings(&self) -> ListSettings<'_>

List all settings (encrypted values masked)

Sends a GET request to /api/admin/settings/

let response = client.list_settings()
    .send()
    .await;
Source

pub fn get_setting(&self) -> GetSetting<'_>

Get a single setting (secrets redacted)

Sends a GET request to /api/admin/settings/{key}/

let response = client.get_setting()
    .key(key)
    .send()
    .await;
Source

pub fn put_setting(&self) -> PutSetting<'_>

Create or update a setting

Keys ending in .client_secret, .password, or .token are stored encrypted automatically.

Sends a PUT request to /api/admin/settings/{key}/

let response = client.put_setting()
    .key(key)
    .body(body)
    .send()
    .await;
Source

pub fn delete_setting(&self) -> DeleteSetting<'_>

Delete a setting

Sends a DELETE request to /api/admin/settings/{key}/

let response = client.delete_setting()
    .key(key)
    .send()
    .await;
Source

pub fn complete_setup(&self) -> CompleteSetup<'_>

Mark the setup wizard as completed

Sets setup.completed_at in settings. Frontend stops redirecting to /welcome after this.

Sends a POST request to /api/admin/setup/complete/

let response = client.complete_setup()
    .send()
    .await;
Source

pub fn list_admin_tokens(&self) -> ListAdminTokens<'_>

List the caller’s admin API tokens

Sends a GET request to /api/admin/tokens/

let response = client.list_admin_tokens()
    .send()
    .await;
Source

pub fn create_admin_token(&self) -> CreateAdminToken<'_>

Create a long-lived admin API token (M2M)

Returns the plaintext token once. Store it immediately — the registry only persists a sha256 hash and cannot show the token again. Use it as Authorization: Bearer <token> against any /api/admin/* endpoint.

Sends a POST request to /api/admin/tokens/

let response = client.create_admin_token()
    .body(body)
    .send()
    .await;
Source

pub fn revoke_admin_token(&self) -> RevokeAdminToken<'_>

Revoke an admin API token

Sends a DELETE request to /api/admin/tokens/{id}/

let response = client.revoke_admin_token()
    .id(id)
    .send()
    .await;
Source

pub fn list_users(&self) -> ListUsers<'_>

List users (most recent first)

Sends a GET request to /api/admin/users/

let response = client.list_users()
    .limit(limit)
    .send()
    .await;
Source

pub fn get_user(&self) -> GetUser<'_>

Get a single user

Sends a GET request to /api/admin/users/{id}/

let response = client.get_user()
    .id(id)
    .send()
    .await;
Source

pub fn patch_user(&self) -> PatchUser<'_>

Update a user (role or displayName)

Sends a PATCH request to /api/admin/users/{id}/

let response = client.patch_user()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn list_my_publisher_tokens(&self) -> ListMyPublisherTokens<'_>

List the caller’s publisher tokens

Sends a GET request to /api/auth/me/tokens/

let response = client.list_my_publisher_tokens()
    .send()
    .await;
Source

pub fn create_my_publisher_token(&self) -> CreateMyPublisherToken<'_>

Create a publisher API token

Returns the plaintext token once. Store it immediately — the registry only persists a sha256 hash and cannot show the token again. Use it as Authorization: Bearer <token> against POST /api/publish/:slug.

Sends a POST request to /api/auth/me/tokens/

let response = client.create_my_publisher_token()
    .body(body)
    .send()
    .await;
Source

pub fn revoke_my_publisher_token(&self) -> RevokeMyPublisherToken<'_>

Revoke a publisher token

Sends a DELETE request to /api/auth/me/tokens/{id}/

let response = client.revoke_my_publisher_token()
    .id(id)
    .send()
    .await;
Source

pub fn get_branding(&self) -> GetBranding<'_>

Get instance branding (whitelabel)

Public read-only endpoint. Pass ?locale= to fetch the tagline/footer in a specific language (falls back to default locale).

Sends a GET request to /api/branding/

let response = client.get_branding()
    .locale(locale)
    .send()
    .await;
Source

pub fn get_plugin_docs(&self) -> GetPluginDocs<'_>

Plugin developer docs (live, localized)

Returns a structured PluginDocs document with the current core schema, global extensions, per-kind extensions, examples (YAML + JSON), and links to the OpenAPI spec. Generated on every request from the live registry state. Pass ?format=md for a single flat markdown blob (LLM-friendly).

Sends a GET request to /api/docs/plugin-development/

let response = client.get_plugin_docs()
    .format(format)
    .locale(locale)
    .send()
    .await;
Source

pub fn get_features(&self) -> GetFeatures<'_>

Get public feature flags (submissions/requests on/off)

Sends a GET request to /api/features/

let response = client.get_features()
    .send()
    .await;
Source

pub fn get_home_copy(&self) -> GetHomeCopy<'_>

Get home-page copy overrides

Public read-only endpoint. Returns the admin-configured eyebrow + feature-section overrides. Empty translation maps mean “fall back to the built-in copy”.

Sends a GET request to /api/home-copy/

let response = client.get_home_copy()
    .send()
    .await;
Source

pub fn get_i18n_config(&self) -> GetI18nConfig<'_>

Get i18n config (default + enabled locales)

Sends a GET request to /api/i18n/

let response = client.get_i18n_config()
    .send()
    .await;
Source

pub fn init_complete(&self) -> InitComplete<'_>

Finalize install: connect DB, migrate, promote bootstrap admin, exit

Sends a POST request to /api/init/complete/

let response = client.init_complete()
    .body(body)
    .send()
    .await;
Source

pub fn init_defaults(&self) -> InitDefaults<'_>

Env values to prefill the install wizard

Sends a GET request to /api/init/defaults/

let response = client.init_defaults()
    .send()
    .await;
Source

pub fn init_login(&self) -> InitLogin<'_>

Bootstrap sign-in for the install wizard

Sends a POST request to /api/init/login/

let response = client.init_login()
    .body(body)
    .send()
    .await;
Source

pub fn init_status(&self) -> InitStatus<'_>

Check whether the registry needs first-time setup

Sends a GET request to /api/init/status/

let response = client.init_status()
    .send()
    .await;
Source

pub fn init_test_db(&self) -> InitTestDb<'_>

Probe a database URL during install

Tries to connect to the given URL and run SELECT 1. Reports the detected dialect either way. Bootstrap-only.

Sends a POST request to /api/init/test-db/

let response = client.init_test_db()
    .body(body)
    .send()
    .await;
Source

pub fn get_instance_info(&self) -> GetInstanceInfo<'_>

Public instance info (app URL schemes, etc)

Public read-only endpoint. Clients (frontend, third-party browsers) consume this on boot to learn which desktop apps can handle “Open in App” deep-links for plugin installation.

Sends a GET request to /api/instance/info/

let response = client.get_instance_info()
    .send()
    .await;
Source

pub fn list_kinds(&self) -> ListKinds<'_>

List active plugin kinds

Returns the registry-wide list of plugin kinds defined by the admin. Plugin authors mark a plugin’s kind by adding the matching value to their tags field. Public — no auth required. A kind may opt in to a dedicated public catalogue page at /c/:key via publicPageEnabled; consumers treat the field as falsy when absent.

Sends a GET request to /api/kinds/

let response = client.list_kinds()
    .send()
    .await;
Source

pub fn get_manifest_spec(&self) -> GetManifestSpec<'_>

Discoverable plugin manifest spec

Public reference for plugin authors. Returns the TypeBox JSON Schema, an example, and the registry’s active kind keys.

Sends a GET request to /api/manifest/

let response = client.get_manifest_spec()
    .send()
    .await;
Source

pub fn validate_manifest(&self) -> ValidateManifest<'_>

Validate a manifest body against the registry schema

Public validator for authoring tools / CI. Returns 200 + ok:false on validation failure so HTTP-status-branching tools always reach the body. 4xx is reserved for malformed requests and oversized bodies.

Sends a POST request to /api/manifest/validate/

let response = client.validate_manifest()
    .body(body)
    .send()
    .await;
Source

pub fn list_pages(&self) -> ListPages<'_>

List published markdown pages

Sends a GET request to /api/pages/

let response = client.list_pages()
    .locale(locale)
    .send()
    .await;
Source

pub fn get_page_by_path(&self) -> GetPageByPath<'_>

Resolve a published page by its public path

Returns sanitized HTML in the requested locale, with fallback to the default locale.

Sends a GET request to /api/pages/by-path

let response = client.get_page_by_path()
    .locale(locale)
    .path(path)
    .send()
    .await;
Source

pub fn get_page(&self) -> GetPage<'_>

Render a published markdown page

Returns sanitized HTML for a page in the requested locale, falling back to the default locale if missing.

Sends a GET request to /api/pages/{slug}/

let response = client.get_page()
    .slug(slug)
    .locale(locale)
    .send()
    .await;
Source

pub fn list_plugins(&self) -> ListPlugins<'_>

List plugins

Paginated catalog. Supports search (name/description/slug), category (exact), tag (exact), featured=1, and sort=updated|new|name|featured. Returns facets so the UI can render filter chips without an extra request. Public — no auth required.

Sends a GET request to /api/plugins/

let response = client.list_plugins()
    .category(category)
    .featured(featured)
    .kind(kind)
    .limit(limit)
    .page(page)
    .search(search)
    .sort(sort)
    .tag(tag)
    .verified(verified)
    .send()
    .await;
Source

pub fn get_plugin(&self) -> GetPlugin<'_>

Get plugin detail

Full plugin record including release history and the rendered README HTML (sanitized via DOMPurify, cached 10 min). Public — no auth required. Pass ?locale= to request a localized README; falls back to base language, then en, then the first available.

Sends a GET request to /api/plugins/{slug}/

let response = client.get_plugin()
    .slug(slug)
    .locale(locale)
    .send()
    .await;
Source

pub fn delete_plugin(&self) -> DeletePlugin<'_>

Delete plugin

Removes the plugin and all of its releases from the registry. Requires auth and only the owner can perform it. The upstream repo and the webhook on the repo are left untouched.

Sends a DELETE request to /api/plugins/{slug}/

let response = client.delete_plugin()
    .slug(slug)
    .send()
    .await;
Source

pub fn get_plugin_download_stats(&self) -> GetPluginDownloadStats<'_>

Aggregated download counts per version + platform

Sends a GET request to /api/plugins/{slug}/downloads/

let response = client.get_plugin_download_stats()
    .slug(slug)
    .send()
    .await;
Source

pub fn get_latest_asset(&self) -> GetLatestAsset<'_>

Resolve latest release for a platform

Returns the matching asset for the requested platform. os and arch are optional — if missing, the User-Agent is inspected; if still unknown, falls back to universal. The full per-platform map is always included so clients can present alternatives.

Sends a GET request to /api/plugins/{slug}/latest/

let response = client.get_latest_asset()
    .slug(slug)
    .arch(arch)
    .os(os)
    .redirect(redirect)
    .send()
    .await;
Source

pub fn author_refresh_plugin_manifest(&self) -> AuthorRefreshPluginManifest<'_>

Re-fetch the .tabularium manifest (plugin owner)

Pulls .tabularium (and the README) from the repo at the given ref (defaults to the latest released tag or HEAD). Authenticated plugin owners only; rate-limited to 1/min per plugin.

Sends a POST request to /api/plugins/{slug}/refresh-manifest/

let response = client.author_refresh_plugin_manifest()
    .slug(slug)
    .body(body)
    .send()
    .await;
Source

pub fn author_rehash_release(&self) -> AuthorRehashRelease<'_>

Re-hash release assets (plugin owner)

Re-fetches every asset of the given (or latest) release and updates sha256 + size. Useful when the original webhook fetch raced asset upload. Set force: true to re-hash assets that already have a sha256. Authenticated plugin owners only; rate-limited to 1/min per plugin.

Sends a POST request to /api/plugins/{slug}/rehash/

let response = client.author_rehash_release()
    .slug(slug)
    .body(body)
    .send()
    .await;
Source

pub fn get_release_integrity(&self) -> GetReleaseIntegrity<'_>

Asset integrity (sha256 + size) for a specific release

Lookup endpoint for sum.<host>-style verifiers. When release_assets rows are present (post-ingest) the response includes the signed jws plus per-asset metadata (name, sha256, size, attestation_bundle). For legacy releases without per-asset rows yet, falls back to the platform-keyed JSON blob with url/size/sha256.

Sends a GET request to /api/plugins/{slug}/releases/{version}/integrity/

let response = client.get_release_integrity()
    .slug(slug)
    .version(version)
    .send()
    .await;
Source

pub fn get_plugin_stats(&self) -> GetPluginStats<'_>

Provider stats (stars / forks / last push) for a plugin

Lazily fetched from the upstream provider and cached for 10 minutes. Returns null fields when the provider is unreachable or the repo is private.

Sends a GET request to /api/plugins/{slug}/stats/

let response = client.get_plugin_stats()
    .slug(slug)
    .send()
    .await;
Source

pub fn initiate_transfer(&self) -> InitiateTransfer<'_>

Initiate a plugin ownership transfer

Owner-only. Creates a pending transfer the recipient must accept (or reject) within 7 days. Cancel anytime via DELETE /auth/me/transfers/:id. Only one pending transfer per plugin at a time.

Sends a POST request to /api/plugins/{slug}/transfer/

let response = client.initiate_transfer()
    .slug(slug)
    .body(body)
    .send()
    .await;
Source

pub fn publish_release(&self) -> PublishRelease<'_>

Publish a release from a CI / CLI using a publisher token

Token-authenticated counterpart to the webhook ingest path. First push of an unknown slug auto-claims it (requires publish:* scope and a repoUrl). Subsequent pushes update the plugin’s latest release. Manifest is validated; asset URLs are hashed in the background.

Sends a POST request to /api/publish/{slug}/

let response = client.publish_release()
    .slug(slug)
    .body(body)
    .send()
    .await;
Source

pub fn list_requests(&self) -> ListRequests<'_>

List plugin requests

Browse the community wishlist of plugins users would like to see. Sorted by upvotes by default. Public — no auth required.

Sends a GET request to /api/requests/

let response = client.list_requests()
    .limit(limit)
    .page(page)
    .sort(sort)
    .send()
    .await;
Source

pub fn create_request(&self) -> CreateRequest<'_>

Create plugin request

Add a new entry to the community wishlist. Requires auth. Slug must be unique across requests.

Sends a POST request to /api/requests/

let response = client.create_request()
    .body(body)
    .send()
    .await;
Source

pub fn toggle_request_claim(&self) -> ToggleRequestClaim<'_>

Toggle a claim on a plugin request

Adds or removes the current user’s claim on the request. Claims are non-exclusive — multiple users can claim the same request. They do not block plugin submission.

Sends a POST request to /api/requests/{id}/claim/

let response = client.toggle_request_claim()
    .id(id)
    .send()
    .await;
Source

pub fn toggle_upvote(&self) -> ToggleUpvote<'_>

Toggle upvote on a request

Toggles the current user’s vote on the request: if not yet voted, adds a vote; if already voted, removes it. Returns the new total and the user’s new vote state. Requires auth.

Sends a POST request to /api/requests/{id}/upvote/

let response = client.toggle_upvote()
    .id(id)
    .send()
    .await;
Source

pub fn submit_o_auth(&self) -> SubmitOAuth<'_>

Submit plugin via OAuth-verified ownership

Sends a POST request to /api/submit/oauth/

let response = client.submit_o_auth()
    .body(body)
    .send()
    .await;
Source

pub fn submit_preview(&self) -> SubmitPreview<'_>

Dry-run a submission: fetch + validate the manifest, no writes

Resolves the latest release + .tabularium for the given repo and returns a preview the frontend can render before the user confirms. No database writes. Useful so the submit page can show name/description/kind/screenshots from the manifest instead of asking the user to type them again.

Sends a POST request to /api/submit/preview/

let response = client.submit_preview()
    .body(body)
    .send()
    .await;
Source

pub fn list_submittable_repos(&self) -> ListSubmittableRepos<'_>

List submittable repos across linked identities

Sends a GET request to /api/submit/repos/

let response = client.list_submittable_repos()
    .send()
    .await;
Source

pub fn release_webhook(&self) -> ReleaseWebhook<'_>

Release event ingestion

GitHub / GitLab / Gitea (and Forgejo) post releases here. Signature scheme is picked per plugin’s linked provider instance kind.

Sends a POST request to /api/webhooks/release/

let response = client.release_webhook()
    .send()
    .await;
Source

pub fn email_login(&self) -> EmailLogin<'_>

Bootstrap admin email + password sign-in

Recovery path for the initial admin. Closes permanently once the admin links any OAuth identity.

Sends a POST request to /auth/email/login/

let response = client.email_login()
    .body(body)
    .send()
    .await;
Source

pub fn register_bootstrap_admin(&self) -> RegisterBootstrapAdmin<'_>

Register the bootstrap admin account

Allowed only while no admin exists. The first registered account becomes admin. Credentials are stored in root_credentials and deleted automatically the first time the admin links an OAuth identity.

Sends a POST request to /auth/email/register/

let response = client.register_bootstrap_admin()
    .body(body)
    .send()
    .await;
Source

pub fn logout(&self) -> Logout<'_>

Revoke session + clear cookie

Idempotent — flips the server-side session record to revoked and clears the auth cookie. Returns { ok: true } regardless of prior auth state.

Sends a POST request to /auth/logout/

let response = client.logout()
    .send()
    .await;
Source

pub fn get_me(&self) -> GetMe<'_>

Get current user with linked identities

Sends a GET request to /auth/me/

let response = client.get_me()
    .send()
    .await;
Source

pub fn delete_me(&self) -> DeleteMe<'_>

Delete your account

Cascade-deletes identities + root credentials and clears the session cookie. Refuses with 409 if you still own plugins — transfer or delete them first.

Sends a DELETE request to /auth/me/

let response = client.delete_me()
    .send()
    .await;

Unlink an identity

Sends a DELETE request to /auth/me/identities/{id}

let response = client.unlink_identity()
    .id(id)
    .send()
    .await;
Source

pub fn list_transfers(&self) -> ListTransfers<'_>

List plugin transfers involving the current user

Returns both incoming (you are the recipient) and outgoing (you initiated) transfers. Each row carries plugin + actor names already joined in.

Sends a GET request to /auth/me/transfers/

let response = client.list_transfers()
    .send()
    .await;
Source

pub fn respond_transfer(&self) -> RespondTransfer<'_>

Respond to a transfer (accept / reject / cancel)

Recipient: action=accept (moves ownership) or action=reject. Sender: action=cancel. Idempotent — once terminal, returns 409.

Sends a POST request to /auth/me/transfers/{id}/

let response = client.respond_transfer()
    .id(id)
    .body(body)
    .send()
    .await;
Source

pub fn list_providers(&self) -> ListProviders<'_>

List enabled OAuth provider instances

Sends a GET request to /auth/providers/

let response = client.list_providers()
    .send()
    .await;
Source

pub fn start_o_auth(&self) -> StartOAuth<'_>

Start OAuth flow for a provider instance

Redirects to the provider instance’s authorize page. Instance IDs are configured by the admin (e.g. github, gitlab, forgejo-acme). Set link=1 to attach this identity to the currently signed-in user.

Sends a GET request to /auth/{instance}/

let response = client.start_o_auth()
    .instance(instance)
    .link(link)
    .return_to(return_to)
    .send()
    .await;
Source

pub fn oauth_callback(&self) -> OauthCallback<'_>

OAuth callback for a provider instance

Sends a GET request to /auth/{instance}/callback/

let response = client.oauth_callback()
    .instance(instance)
    .code(code)
    .state(state)
    .send()
    .await;
Source

pub fn healthz(&self) -> Healthz<'_>

Health check

Liveness/readiness probe. Returns { ok: true } (200) when DB + cache + storage are reachable, { ok: false } (503) otherwise. Intentionally terse to avoid leaking driver / setup-mode details to unauthenticated callers — admins should hit /api/admin/diagnostics for the full breakdown.

Sends a GET request to /healthz/

let response = client.healthz()
    .send()
    .await;
Source

pub fn get_uploads(&self) -> GetUploads<'_>

Sends a GET request to /uploads/*

let response = client.get_uploads()
    .send()
    .await;

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Client

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Client

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more