Skip to main content

Cloud Functions API

All Cloud Functions are deployed at us-central1 in Firebase project yugmastudio-addcd. Callable functions require Firebase Authentication.

Invocation

import { getFunctions, httpsCallable } from 'firebase/functions'

const functions = getFunctions()
const fn = httpsCallable(functions, 'functionName')
const result = await fn({ ...params })

AI Functions

aiCompose

The AI brain. Runs a multi-stage composition pipeline: optional planning pass, then an agentic tool-use loop (up to 8 iterations).

Timeout: 120s | Secrets: Provider config from Firestore

FieldTypeRequiredDescription
messages{role, content}[]YesConversation history
sceneContextobjectNoYSL scene text, objects, environment, styleHint
mode'creative' | 'precise'NoTemperature toggle (0.7 / 0.2)
sessionIdstringNoSession ID for cross-session persistence

Returns:

{
"text": "I've created a sci-fi hangar with...",
"toolCalls": [{ "name": "add_object", "input": {...} }, ...],
"iterations": 3,
"plan": "1. Create floor...\n2. Add walls..."
}

getRecentAISessions

Fetch recent AI sessions for session hydration on mount.

FieldTypeRequiredDescription
limitnumberNoMax sessions (default 5, max 25)
loadLatestMessagesbooleanNoInclude full message list of most recent session

Returns:

{
"sessions": [{ "session_id": "...", "title": "...", "message_count": 5, "updated_at": "..." }],
"latest": { "sessionId": "...", "messages": [...] }
}

generateMaterial

Generate PBR material values from a text description.

FieldTypeRequiredDescription
descriptionstringYese.g. "weathered copper with patina"

Returns: { color, roughness, metalness, emissive, emissiveIntensity }

inspectMaterial

Analyze a material and suggest improvements.

FieldTypeRequiredDescription
materialobjectYesCurrent material properties

Returns: { analysis, suggestions[] }


Generation Functions

generateAsset

Start a Meshy.ai text-to-3D generation job.

FieldTypeRequiredDescription
promptstringYesDescription of the 3D model

Returns: { jobId, status: 'pending' }

checkGenerationStatus

Poll a Meshy generation job for completion.

FieldTypeRequiredDescription
jobIdstringYesMeshy job ID

Returns: { status, progress, glbUrl? }


Project Functions

deleteProject

Delete a project and cascade-remove associated assets.

FieldTypeRequiredDescription
projectIdstringYesProject to delete

Authorization: Owner only.

exportScene

Convert a Yugma scene to glTF 2.0 JSON.

FieldTypeRequiredDescription
sceneobjectYesScene JSON

Storage Functions

generateSignedUploadUrl

FieldTypeRequired
filenamestringYes

Returns: { url, path } — PUT to the URL with appropriate Content-Type.

generateSignedDownloadUrl

FieldTypeRequired
pathstringYes

Returns: { url } — expires after 1 hour.


Phase Stub Functions

These functions are scaffolded but their backends are not yet connected:

startVideoReconstruction (Phase 12)

Creates a videoJobs doc. Returns { jobId }. TODO: dispatch to Cloud Run ML orchestrator.

renderStoryboard (Phase 16)

Creates a renderJobs doc after verifying storyboard ownership. Returns { jobId }. TODO: headless R3F + ffmpeg worker.

octopartProxy (Phase 14)

Returns mock component data (ESP32, BME280, SSD1306). TODO: wire to Nexar GraphQL API with NEXAR_API_KEY.


Auth Triggers

onUserCreate (v1)

Seeds a user profile document in Firestore on signup.

onUserDelete (v1)

Cascade-deletes user profile and projects on account deletion.


Error Codes

CodeMeaning
unauthenticatedNo valid auth token
invalid-argumentMissing or invalid parameters
not-foundResource doesn't exist
permission-deniedUser lacks access
resource-exhaustedRate limit exceeded (30/hr for AI)

Secrets

SecretUsed byStatus
ANTHROPIC_API_KEYaiCompose, generateMaterial, inspectMaterialSet via admin panel
MESHY_API_KEYgenerateAsset, checkGenerationStatusSet in firebase secrets
NEXAR_API_KEYoctopartProxyNot yet set