Docs do Nodaro
DocumentaçãoReferência de nósModelosAgentes de IA (MCP)DesenvolvedoresSelf-hostingPesquisa
SDK para TypeScript

Apps e templates

Explore e execute apps publicados do Nodaro em TypeScript, leia o histórico de execuções, clone templates de workflow em um projeto e liste os tutoriais.

client.apps explora e executa apps publicados: workflows envolvidos em um formulário simples de entradas e saídas. client.templates explora o marketplace de templates e clona um template em um dos seus projetos, e client.tutorials lista os vídeos e os workflows de tutorial. Veja Apps e Tutoriais e templates para os conceitos.

Métodos

MétodoO que faz
apps.list(params?)Explora os apps publicados
apps.get(slug)Lê um app, com as entradas e saídas dele
apps.run(slug, inputs?, opts?)Executa um app
apps.listRuns(slug, params?)Lista as suas execuções de um app
apps.getRun(slug, runId)Lê uma execução
apps.deleteRun(slug, runId)Arquiva uma execução
templates.browse(params?)Explora o marketplace de templates
templates.get(slug)Lê um template, com o workflow dele
templates.clone(slug, params)Copia um template para um projeto
tutorials.list()Lista os tutoriais por categoria

client.apps

list() e get() são públicos. run() e o histórico de execuções agem como o usuário conectado que faz a chamada.

apps.list(params?)

Explora os apps publicados, uma página por vez.

list(params?: { search?: string; category?: string; limit?: number; cursor?: string }): Promise<{
  data: PublishedApp[]
  nextCursor?: string | null
}>

Prop

Type

const { data: apps, nextCursor } = await client.apps.list({ search: "headshot", limit: 20 })

Um PublishedApp tem id, slug, name, description, creatorId, creatorName, thumbnailUrl, category, isFeatured, runCount, createdAt e updatedAt.

apps.get(slug)

Lê um app, com o inputSchema, os campos que os usuários finais preenchem, e outputs, o que o app retorna.

get(slug: string): Promise<{ data: PublishedAppDetail }>

Prop

Type

const { data: app } = await client.apps.get("pro-headshot")
console.log(app.inputSchema, app.outputs) // outputs: [{ nodeId, label, type }]

apps.run(slug, inputs?, opts?)

Executa um app e retorna na hora com { executionId, status, runId? }. Consulte periodicamente client.executions.get(executionId) para obter o resultado.

run(slug: string, inputs?: Record<string, unknown>, opts?: {
  inputOverrides?: Record<string, Record<string, unknown>>
}): Promise<{ executionId: string; status: "pending" | "running"; runId?: string }>

Prop

Type

const { executionId } = await client.apps.run("pro-headshot", { photo: photoUrl })

// Add hidden text before the app's prompt, for this run only
await client.apps.run(
  "pro-headshot",
  { photo: photoUrl },
  { inputOverrides: { n1: { promptPrefix: "Studio portrait of" } } },
)

inputOverrides é uma opção avançada. Ela pode definir, por exemplo, o texto antes e depois de um nó (promptPrefix e promptSuffix). Ela não pode definir o destino de um nó de saída, como a URL de um nó Saída de webhook (Webhook Output), uma conta de publicação ou o alvo de um scraper. Uma substituição assim é recusada com 400 locked_field.

apps.listRuns(slug, params?)

Lista as suas execuções de um app, uma página por vez.

listRuns(slug: string, params?: { limit?: number; cursor?: string }): Promise<{ data: AppRun[]; nextCursor?: string | null }>

Prop

Type

const { data: runs } = await client.apps.listRuns("pro-headshot", { limit: 10 })
for (const run of runs) console.log(run.status, run.outputs)

Um AppRun tem id, appSlug, executionId, status (pending, running, completed, failed ou cancelled), inputs, outputs (cada um no formato { nodeId, type, url?, text? }), startedAt e finishedAt.

apps.getRun(slug, runId)

Lê uma execução de um app.

getRun(slug: string, runId: string): Promise<{ data: AppRun }>

Prop

Type

const { data: run } = await client.apps.getRun("pro-headshot", runId)

apps.deleteRun(slug, runId)

Arquiva uma execução. Restaurar uma execução e excluí-la de forma permanente só é possível no app do Nodaro, então um script não consegue destruir dados.

deleteRun(slug: string, runId: string): Promise<{ success: true; archived: true }>

Prop

Type

await client.apps.deleteRun("pro-headshot", runId)

client.templates

O marketplace de templates, público de propósito: explore-o, leia um template com o workflow inteiro e clone-o no seu projeto sem custo.

templates.browse(params?)

Explora o marketplace, uma página por vez (GET /v1/templates/browse). Não é preciso entrar na conta.

browse(params?: BrowseTemplatesParams): Promise<{ data: TemplateBrowseCard[]; nextCursor: string | null }>

Prop

Type

const page = await client.templates.browse({ sort: "popular", search: "trailer" })

templates.get(slug)

Lê um template público com o snapshot completo do workflow: snapshotNodes, snapshotEdges e snapshotSettings (GET /v1/templates/:slug).

get(slug: string): Promise<Template>

Prop

Type

const template = await client.templates.get("noir-trailer")
console.log(template.snapshotNodes.length)

Lança NotFoundError quando o slug é desconhecido ou quando o template não está listado ou está inativo.

templates.clone(slug, params)

Copia um template para um dos seus projetos como um novo workflow (POST /v1/templates/:slug/clone). Não custa créditos.

clone(slug: string, params: { projectId: string; name?: string }): Promise<{ workflowId: string; projectId: string }>

Prop

Type

const { workflowId } = await client.templates.clone("noir-trailer", { projectId })
await client.workflows.run(workflowId)

client.tutorials

tutorials.list()

Lista todas as categorias de tutorial, com os vídeos e os workflows de tutorial de cada uma (GET /v1/tutorials). É público e somente leitura.

list(): Promise<{ categories: TutorialCategory[] }>
const { categories } = await client.tutorials.list()
for (const category of categories) {
  console.log(category.name, category.videos.length, category.flows.length)
}

Cada categoria tem id, name, slug, sortOrder, videos e flows. Um vídeo tem um title, uma videoUrl e uma thumbnailUrl. Um flow é um template marcado como tutorial: tem um title, uma complexity, estimatedCredits, os tipos de nó e os modelos que usa, e um slug que você pode passar para templates.get() e templates.clone().

Perguntas frequentes

Última atualização

Nesta página