platform69 ops

API de Platform

Cross-cutting operations that don't fit a single domain.

Consultas

CONSULTA

adminBlogPost

#

Single post by id, any status.

Argumentos

  • tenantIdID
  • idID!
Devuelve
CONSULTA

adminBlogPostRevisions

#

Revision history for a post, newest first.

Argumentos

  • tenantIdID
  • postIdID!
Devuelve[!]!
CONSULTA

adminBlogPosts

#

Admin listing of posts in one tenant with optional filters. All filters AND together. searchQuery matches title and slug case-insensitively (ILIKE).

Argumentos

  • tenantIdID
  • status
  • authorIdID
  • categoryIdID
  • searchQueryString
  • pagination
Devuelve!
CONSULTA

adminBlogTags

#

Tags for the admin picker.

Argumentos

  • tenantIdID
Devuelve[!]!
CONSULTA

canManageChangelog

#

Sanity check that the active session can author entries. Used by the admin drafting screens to render the "Save" button.

DevuelveBoolean!
CONSULTA

changelogEntries

#

All changelog entries (drafts + published + archived). Default order is most-recently-updated first.

Argumentos

  • status
  • pagination
Devuelve!
CONSULTA

changelogEntry

#

Single entry by ID (any status).

Argumentos

  • idID!
Devuelve
CONSULTA

changelogEntryRevisions

#

Revision history for one entry, newest first.

Argumentos

  • entryIdID!
Devuelve[!]!
CONSULTA

dataSyncPlan

#

Build a MigrationPlan for a source — read-only projection of what runDataSyncSource would do given the current config. Surfaced before the "Run sync now" button so the operator can review the per-phase row + blob projections, missing required answers, and warnings.

Argumentos

  • sourceId!
Devuelve!
CONSULTA

dataSyncRun

#

One run by id (with full coverage report when completed).

Argumentos

  • id!
Devuelve
CONSULTA

dataSyncRuns

#

Recent runs for a source. Standard offset pagination via the kernel's PaginationInput; clients send limit + page (or an after cursor); response carries the standard pageInfo.

Argumentos

  • sourceId!
  • pagination
Devuelve!
CONSULTA

dataSyncSource

#

One data-sync source by id (must belong to the calling tenant).

Argumentos

  • id!
Devuelve
CONSULTA

dataSyncSources

#

Data-sync sources configured for the calling tenant. Standard offset pagination via the kernel's PaginationInput. Requires tenant_admin or higher.

Argumentos

  • pagination
Devuelve!
CONSULTA

discoverDataSyncSource

#

Run discovery against a source — returns the open admin questions plus estimated row counts. Read-only on the source DB.

Argumentos

  • sourceId!
Devuelve!
CONSULTA

health

#
DevuelveString!
CONSULTA

publicBlogTags

#

All tags for the system tenant.

Devuelve[!]!
CONSULTA

publishedBlogPostBySlug

#

Single published post by slug. Returns null for missing or non-public posts — drafts must never leak through this resolver.

Argumentos

  • slugString!
Devuelve
CONSULTA

publishedBlogPosts

#

Reverse-chronological feed of published posts. Optional category filter (by slug). The website caches the response via Next.js ISR.

Argumentos

  • categorySlugString
  • pagination
Devuelve!
CONSULTA

publishedChangelogEntries

#

Reverse-chronological feed of published entries. Optional product filter. The website caches the response via Next.js ISR (revalidate = 60).

Argumentos

  • product
  • pagination
Devuelve!
CONSULTA

publishedChangelogEntryBySlug

#

Single published entry by slug. Returns null for missing or non-public entries — drafts must never leak through this resolver.

Argumentos

  • slugString!
Devuelve
CONSULTA

recentGithubReleases

#

Recent releases for one source. Drafting screen calls this once the admin picks a source from the dropdown.

Argumentos

  • sourceIdID!
  • limitInt!

    Por defecto

    20
Devuelve[!]!
CONSULTA

releaseArtifact

#

Single artifact by key. Returns null if no artifact uses that key — UI surfaces "unknown artifact" rather than erroring.

Argumentos

  • keyString!
Devuelve
CONSULTA

releaseArtifactInFlightDispatch

#

The single in-flight dispatch (pending or in_progress) for this artifact, if any. Returns null when the artifact has no active release. The UI uses this to disable the "Cut release" button while a release is queued.

Argumentos

  • artifactKeyString!
Devuelve
CONSULTA

releaseArtifactRecentDispatches

#

Recent dispatches for a single artifact. Used by the per-artifact detail screen to show the last N releases.

Argumentos

  • artifactKeyString!
  • firstInt
Devuelve[!]!
CONSULTA

releaseArtifacts

#

Every artifact known to Release Hub, in the order they appear in release_artifacts.toml. Cards on the dashboard are rendered directly from this list.

Devuelve[!]!
CONSULTA

releaseDispatch

#

Single dispatch by id. The dispatch detail / live status page polls this endpoint while a run is in progress.

Argumentos

  • idID!
Devuelve
CONSULTA

releaseDispatches

#

Cross-artifact dispatch listing. Powers the global "Dispatch activity" tab on the admin shell.

Argumentos

  • status
  • pagination
Devuelve!
CONSULTA

releaseDraftingPromptActive

#

Active drafting prompt revision (prompt_name = release_notes_drafting). Returns null when no admin has saved one yet — the use case falls back to the shipped default.

Devuelve
CONSULTA

releaseDraftingPromptRevisions

#

All revisions for the drafting prompt, newest first. Powers the revision history view in admin settings.

Devuelve[!]!
CONSULTA

releaseSources

#

All configured GitHub sources — populates the drafting picker and the settings list.

Devuelve[!]!
CONSULTA

serverInfo

#
Devuelve!
CONSULTA

tenantExportDestination

#

Single destination by id. Authorization: caller must satisfy resolve_target_tenant against the destination's tenant.

Argumentos

  • id!
Devuelve
CONSULTA

tenantExportDestinations

#

List destinations for the caller's tenant (tenant-owner) or for the supplied tenant_id (PlatformAdmin only).

Argumentos

  • tenantId
Devuelve[!]!
CONSULTA

tenantExportRun

#

Argumentos

  • id!
Devuelve
CONSULTA

tenantExportRuns

#

Argumentos

  • tenantId
  • limitInt!

    Por defecto

    50
Devuelve[!]!

Mutaciones

MUTACIÓN

activateReleaseDraftingPrompt

#

Argumentos

  • idID!
DevuelveBoolean!
MUTACIÓN

archiveBlogPost

#

Argumentos

  • tenantIdID
  • idID!
Devuelve!
MUTACIÓN

archiveChangelogEntry

#

Archive an entry — hidden from the public feed and the default admin list. Revisions stay intact.

Argumentos

  • idID!
Devuelve!
MUTACIÓN

cancelDataSyncRun

#

Mark a queued or running sync run as cancelled. The background task notices the status change between phase commits and bails out at the next checkpoint. Idempotent on already-terminal runs (returns the run as-is).

Argumentos

  • runId!
Devuelve!
MUTACIÓN

createDataSyncSource

#

Provision a new data-sync source for the calling tenant. Requires tenant_owner. Secrets are AES-GCM encrypted at rest; they're never returned over GraphQL afterwards.

Argumentos

  • input!
Devuelve!
MUTACIÓN

createTenantExportDestination

#

Create a destination. tenant_id in the input is honored only when the caller is PlatformAdmin.

Argumentos

  • input!
Devuelve!
MUTACIÓN

deleteDataSyncSource

#

Delete a source. Cascades to its data_sync_runs rows. When purgeMappings = true (default false), also wipes every data_sync_mappings row that this source's provider produced for the tenant — a clean disconnect that lets a re-imported source mint fresh UUIDs without bumping into the old mapping table. The BetterSuite rows themselves stay intact.

Argumentos

  • id!
  • purgeMappingsBoolean!

    Por defecto

    false
DevuelveBoolean!
MUTACIÓN

deleteReleaseSource

#

Argumentos

  • idID!
DevuelveBoolean!
MUTACIÓN

deleteTenantExportDestination

#

Argumentos

  • id!
DevuelveBoolean!
MUTACIÓN

dispatchRelease

#

Cut a release for the given artifact. Persists a dispatch row (which acquires the artifact's in-flight slot via a DB unique index), POSTs workflow_dispatch to GitHub Actions, writes a ReleaseDispatched audit row. The returned ReleaseDispatch starts in status pending; the reconciler worker updates it to in_progress once GitHub surfaces the run id, then to a terminal status. Errors: * ArtifactNotFound — unknown artifactKey * InvalidDispatchInputs — typed-confirm mismatch, unknown input name, missing required input, invalid choice * DispatchInFlight — another dispatch for this artifact is still pending or in_progress * RateLimited — recent successful dispatch is inside the cooldown window (5 min by default) * GithubApiworkflow_dispatch POST failed upstream

Argumentos

  • input!
Devuelve!
MUTACIÓN

draftChangelogEntry

#

Argumentos

  • input!
Devuelve!
MUTACIÓN

fetchDataSyncSourceRemoteEnvFile

#

Read a .env-shaped file from the legacy backend host via the source's already-saved SSH tunnel credentials. The raw contents are returned to the client, which parses them with the same routine the "paste .env" textarea uses. Requires connection_mode = ssh_tunnel and saved SSH secrets.

Argumentos

  • sourceId!
  • remotePathString!
DevuelveString!
MUTACIÓN

publishBlogPost

#

Argumentos

  • tenantIdID
  • idID!
Devuelve!
MUTACIÓN

publishChangelogEntry

#

Promote a draft to published (or republish an archived entry). Idempotent.

Argumentos

  • idID!
Devuelve!
MUTACIÓN

queueTenantExportRun

#

Queue an export run. v1 only the planning phase (dry_run = true) produces real output; non-dry runs land on the run row as failed with a "not implemented yet" message until the COPY+SSH pipeline is wired.

Argumentos

  • input!
Devuelve!
MUTACIÓN

refineChangelogEntry

#

Argumentos

  • input!
Devuelve!
MUTACIÓN

retryDataSyncRun

#

Re-trigger a sync against the source of a previous (typically failed) run. Mints a fresh run row — the original is left intact for audit. Convenience over runDataSyncSource(sourceId) so the UI's Retry button doesn't have to look up the source id client-side.

Argumentos

  • runId!
Devuelve!
MUTACIÓN

runDataSyncSource

#

Trigger a sync run. Mutation returns immediately with a SyncRun in queued status; the worker picks it up and transitions through runningcompleted / failed. Clients poll (or subscribe via the realtime service) for progress.

Argumentos

  • sourceId!
  • dryRunBoolean!

    Por defecto

    false
Devuelve!
MUTACIÓN

saveBlogPost

#

Argumentos

  • input!
Devuelve!
MUTACIÓN

saveBlogTag

#

Argumentos

  • input!
Devuelve!
MUTACIÓN

saveChangelogEntry

#

Create-or-update a changelog entry. New entries are inserted as drafts; promote with publishChangelogEntry. Every call appends a new revision row.

Argumentos

  • input!
Devuelve!
MUTACIÓN

saveReleaseDraftingPrompt

#

Argumentos

  • input!
Devuelve!
MUTACIÓN

scheduleBlogPost

#

Argumentos

  • tenantIdID
  • idID!
  • publishAt!
Devuelve!
MUTACIÓN

setDataSyncSourceLegacyEnv

#

Persist the parsed .env of the legacy app on the source row. Server parses the raw blob (so the canonical key set stays defined in Rust), stores it under data_sync_sources.legacy_env_import. The provider config resolves layered against this — operator answers win, otherwise env-derived defaults flow through, otherwise compiled defaults. Re-importing replaces the column without touching config, so explicit operator overrides survive.

Argumentos

  • sourceId!
  • envContentsString!
Devuelve!
MUTACIÓN

tenantExportRunDownloadUrl

#

Mint a short-lived download URL for a successful tarball-mode run's artifact. The URL points at the platform's /api/tenant-export/runs/:id/artifact route, which validates the embedded token and streams the .tar.gz. Re-minting rotates the token; any previous URL stops working. ttl_seconds is bounded between 60s and 7 days; default is download_token_default_ttl from AppState (24h out of the box).

Argumentos

  • runId!
  • ttlSecondsInt
Devuelve!
MUTACIÓN

testDataSyncSourceConnection

#

Validate a source's connection without saving anything. The admin can hit this from the Configure page before committing credentials. Read-only on the source DB; nothing is written to the target.

Argumentos

  • input!
Devuelve!
MUTACIÓN

testDataSyncSourceSshTunnel

#

Validate just the SSH layer — open the bastion session, capture the host-key fingerprint, disconnect. No MySQL connection is attempted. Returns success + the discovered fingerprint so the operator can sanity-check the bastion auth before saving credentials or running a full discovery.

Argumentos

  • input!
Devuelve!
MUTACIÓN

testTenantExportDestination

#

Dial the destination without queueing a run. Returns { ok, message, capturedSshFingerprint? }. For database destinations we open the SSH bastion tunnel (if configured) and run SELECT 1 against the target. For tarball destinations we touch the exports directory to confirm it's writable. When the SSH bastion's host key is captured for the first time, the fingerprint is BOTH persisted into the destination's config (so subsequent runs validate it) AND returned in the response so the UI can show it to the operator for explicit confirmation.

Argumentos

  • id!
Devuelve!
MUTACIÓN

unpublishBlogPost

#

Argumentos

  • tenantIdID
  • idID!
Devuelve!
MUTACIÓN

unpublishChangelogEntry

#

Flip a published entry back to draft. The original published_at is preserved so republishing keeps the same feed position.

Argumentos

  • idID!
Devuelve!
MUTACIÓN

updateDataSyncSource

#

Update a source's config and (optionally) its stored secrets. Requires tenant_owner.

Argumentos

  • input!
Devuelve!
MUTACIÓN

updateTenantExportDestination

#

Sparse update. The destination's tenant_id is fixed and not editable; transferring ownership isn't supported.

Argumentos

  • input!
Devuelve!
MUTACIÓN

upsertReleaseSource

#

Argumentos

  • input!
Devuelve!

Suscripciones

SUSCRIPCIÓN

adminEvents

#

Subscribe to admin events Receive ALL real-time events across the platform for monitoring purposes. **Requirements:** - Must be authenticated - Must have admin role (PlatformAdmin, TenantAdmin, or PartnerAdmin)

Devuelve!