Nodaro ドキュメント
ドキュメントノードリファレンスモデルAI エージェント(MCP)開発者向けセルフホスティングリサーチ
TypeScript SDK

アプリとテンプレート

TypeScript から、公開された Nodaro のアプリを閲覧して実行し、実行履歴を読み取り、ワークフローのテンプレートをプロジェクトに複製し、チュートリアルを一覧表示します。

client.apps は、公開されたアプリ(入力と出力のシンプルなフォームで包んだワークフロー)を閲覧し、実行します。client.templates はテンプレートマーケットプレイスを閲覧し、テンプレートをあなたのプロジェクトの 1 つに複製します。client.tutorials は、チュートリアル動画とチュートリアルワークフローを一覧表示します。概念については、アプリとチュートリアルとテンプレートを参照してください。

メソッド

メソッド内容
apps.list(params?)公開されたアプリを閲覧します
apps.get(slug)アプリを、その入力と出力とともに読み取ります
apps.run(slug, inputs?, opts?)アプリを実行します
apps.listRuns(slug, params?)アプリの自分の実行を一覧表示します
apps.getRun(slug, runId)1 件の実行を読み取ります
apps.deleteRun(slug, runId)実行をアーカイブします
templates.browse(params?)テンプレートマーケットプレイスを閲覧します
templates.get(slug)テンプレートを、そのワークフローとともに読み取ります
templates.clone(slug, params)テンプレートをプロジェクトに複製します
tutorials.list()チュートリアルをカテゴリー別に一覧表示します

client.apps

list() と get() は公開されています。run() と実行履歴は、ログイン中の呼び出し元として動作します。

apps.list(params?)

公開されたアプリを、ページ単位で閲覧します。

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 })

PublishedApp は、id、slug、name、description、creatorId、creatorName、thumbnailUrl、category、isFeatured、runCount、createdAt、updatedAt を持ちます。

apps.get(slug)

1 つのアプリを、エンドユーザーが入力するフィールドである inputSchema と、返す内容である outputs とともに読み取ります。

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?)

アプリを実行し、{ executionId, status, runId? } ですぐに返ります。結果は client.executions.get(executionId) をポーリングして取得します。

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 は高度なオプションです。たとえば、ノードのプロンプトの前後のテキスト(promptPrefix と promptSuffix)を設定できます。Webhook 出力(Webhook Output)の URL や、公開先のアカウント、スクレイパーの対象など、出力ノードの送信先は設定できません。そのようなオーバーライドは、400 locked_field で拒否されます。

apps.listRuns(slug, params?)

アプリの自分の実行を、ページ単位で一覧表示します。

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)

AppRun は、id、appSlug、executionId、status(pending、running、completed、failed、cancelled のいずれか)、inputs、outputs(それぞれ { nodeId, type, url?, text? })、startedAt、finishedAt を持ちます。

apps.getRun(slug, runId)

アプリの 1 件の実行を読み取ります。

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

Prop

Type

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

apps.deleteRun(slug, runId)

実行をアーカイブします。実行の復元と完全な削除は、Nodaro アプリでしかできないため、スクリプトがデータを破壊することはありません。

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

Prop

Type

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

client.templates

テンプレートマーケットプレイスは、設計上、公開されています。閲覧したり、ワークフロー全体を含むテンプレートを読み取ったり、無料で自分のプロジェクトに複製したりできます。

templates.browse(params?)

マーケットプレイスを、ページ単位で閲覧します(GET /v1/templates/browse)。ログインは不要です。

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

Prop

Type

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

templates.get(slug)

1 つの公開テンプレートを、そのワークフローのスナップショット全体(snapshotNodes、snapshotEdges、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)

スラッグが不明、非掲載、無効のいずれかの場合、NotFoundError をスローします。

templates.clone(slug, params)

テンプレートを、新しいワークフローとしてあなたのプロジェクトの 1 つに複製します(POST /v1/templates/:slug/clone)。クレジットはかかりません。

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()

すべてのチュートリアルのカテゴリーを、そのチュートリアル動画とチュートリアルワークフローとともに一覧表示します(GET /v1/tutorials)。公開されていて、読み取り専用です。

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)
}

各カテゴリーは、id、name、slug、sortOrder、videos、flows を持ちます。動画は title、videoUrl、thumbnailUrl を持ちます。フローは、チュートリアルとしてマークされたテンプレートです。title、complexity、estimatedCredits、使用するノードタイプとモデル、そして templates.get() と templates.clone() に渡せる slug を持ちます。

よくある質問

最終更新

目次