# Tipos

> Todos os tipos TypeScript, funções auxiliares e constantes que o @nodaro/sdk exporta, agrupados por recurso, com a página que documenta cada um.

Source: https://nodaro.ai/pt-BR/docs/developers/sdk/types

**`@nodaro/sdk`** exporta um tipo TypeScript para as entradas e as saídas da maioria dos métodos, além de algumas funções auxiliares e constantes. Importe os tipos com `import type`, para que eles não acrescentem nada ao seu bundle:

```ts

const { data }: { data: Workflow } = await client.workflows.get(id)
```

Os tipos seguem o formato de transmissão da API. Um `Job` usa campos em snake_case, como `output_data` e `created_at`, porque a API os envia assim. Um `Workflow` e um `WorkflowExecution` usam camelCase. `Object`, o tipo de objeto, tem o mesmo nome do objeto global do JavaScript, então importe-o com outro nome quando precisar dos dois: `import type { Object as NodaroObject } from "@nodaro/sdk"`.

Alguns tipos que os métodos usam não são exportados. Um tipo definido em `@nodaro/shared`, como `PipelineInput` ou `CommunityFullDetail`, é importado de lá. Adicione `@nodaro/shared` às suas próprias dependências, na faixa de versões que o SDK usa, para que só uma cópia seja instalada. Derive qualquer outro tipo, como `PipelineRecord`, do método que o retorna:

```ts

type PipelineRecord = Awaited<ReturnType<NodaroClient["pipelines"]["get"]>>
```

## Cliente, autenticação e erros
| Exportação | Tipo | Documentado em |
| --- | --- | --- |
| `createClient`, `NodaroClient` | Função, classe | [Cliente](https://nodaro.ai/docs/developers/sdk/client) |
| `ClientOptions`, `UserIdentity`, `MeOrganizations` | Tipos | [Cliente](https://nodaro.ai/docs/developers/sdk/client) |
| `Auth`, `StaticTokenAuth`, `CallbackAuth`, `supabaseAuth` | Tipo, classes, função | [Autenticação](https://nodaro.ai/docs/developers/sdk/auth) |
| `createSharedSupabaseClient` | Função, de `@nodaro/sdk/supabase` | [Autenticação](https://nodaro.ai/docs/developers/sdk/auth#createsharedsupabaseclientoptions) |
| `NodaroError`, `UnauthorizedError`, `ForbiddenError`, `NotFoundError`, `RateLimitedError`, `InsufficientCreditsError`, `StorageExceededError`, `WorkflowConflictError`, `JobBlockedError`, `JobFailedError`, `JobTimeoutError`, `JobAbortedError`, `JobHeldError`, `StudioOpError`, `StudioPreviewUnavailable`, `StudioPreviewAppliedError` | Classes | [Erros](https://nodaro.ai/docs/developers/sdk/errors) |
| `WorkflowConflictCode`, `throwFromResponse` | Tipo, função | [Erros](https://nodaro.ai/docs/developers/sdk/errors) |

## Workflows, execuções e nós
| Exportação | Documentado em |
| --- | --- |
| `Workflow`, `ListWorkflowsParams`, `CreateWorkflowInput`, `UpdateWorkflowInput`, `RunWorkflowParams`, `RunWorkflowResult` | [Workflows e projetos](https://nodaro.ai/docs/developers/sdk/workflows) |
| `Project`, `CreateProjectInput`, `UpdateProjectInput` | [Workflows e projetos](https://nodaro.ai/docs/developers/sdk/workflows) |
| `GenericNode`, `GenericEdge`, `WorkflowExport`, `WorkflowExportCharacter`, `WorkflowExportObject`, `WorkflowExportLocation` | [Workflows e projetos](https://nodaro.ai/docs/developers/sdk/workflows) |
| `Job`, `JobStatus`, `JobStatusResult`, `JobErrorHint`, `SafetyBlockHint`, `PolicyBlockHint`, `CreditStatus`, `CancelJobResult`, `DeleteJobResult`, `ListJobsParams`, `ListJobsPage` | [Jobs e execuções](https://nodaro.ai/docs/developers/sdk/jobs-and-executions) |
| `WorkflowExecution`, `WorkflowExecutionSummary`, `NodeExecutionState`, `NodeExecutionStatus`, `ExecutionStatus`, `ExecutionTriggerType`, `ListExecutionsForWorkflowParams`, `ListExecutionsPage`, `CancelExecutionParams` | [Jobs e execuções](https://nodaro.ai/docs/developers/sdk/jobs-and-executions) |
| `StopVideoProResult`, `ContinueVideoProResult` | [Jobs e execuções](https://nodaro.ai/docs/developers/sdk/jobs-and-executions#clientvideopro) |
| `NodeDescriptor`, `NodeCategory`, `OutputType`, `NodeInputField`, `NodeInputSchema` | [Executar nós](https://nodaro.ai/docs/developers/sdk/nodes) |
| `RunNodeResult`, `RunNodeAdjustment`, `NodeJobOutput`, `RunAndWaitOptions`, `RunManyResult` | [Executar nós](https://nodaro.ai/docs/developers/sdk/nodes) |
| `GenerateImageParams`, `GenerateVideoParams`, `TextToVideoParams`, `StructuredReferenceParams`, `ConnectedReference`, `DescribedReference` | [Executar nós](https://nodaro.ai/docs/developers/sdk/nodes#typed-parameters) |
| `PromptAffixFields` | Os campos de dados do nó para o [texto antes e depois do prompt](https://nodaro.ai/docs/concepts/prompt-pre-post-text): `promptPrefix` e `promptSuffix` |
| `PublishedApp`, `PublishedAppDetail`, `ListAppsParams`, `ListAppsResult`, `AppRunResult`, `RunAppOptions`, `AppRun`, `ListAppRunsParams`, `DeleteAppRunResult` | [Apps e templates](https://nodaro.ai/docs/developers/sdk/apps-and-templates) |
| `Template`, `TemplateBrowseCard`, `TemplateSort`, `BrowseTemplatesParams`, `BrowseTemplatesResult`, `CloneTemplateParams`, `CloneTemplateResult` | [Apps e templates](https://nodaro.ai/docs/developers/sdk/apps-and-templates) |
| `TutorialCategory`, `TutorialVideoItem`, `TutorialFlowItem` | [Apps e templates](https://nodaro.ai/docs/developers/sdk/apps-and-templates#clienttutorials) |
| `LlmStructuredInput`, `LlmStructuredResult`, `LlmStructuredJobInput`, `LlmStructuredJobOutput` | [LLM e Reduce](https://nodaro.ai/docs/developers/sdk/llm-and-reduce) |
| `ReduceStrategyId`, `ReduceMeta`, `ReduceInput`, `ReduceResult` | [LLM e Reduce](https://nodaro.ai/docs/developers/sdk/llm-and-reduce) |

## Mídia, vozes e edição
| Exportação | Documentado em |
| --- | --- |
| `UploadResult`, `LibraryAsset`, `ListLibraryParams`, `ListLibraryResult` | [Mídia e uploads](https://nodaro.ai/docs/developers/sdk/media-and-uploads) |
| `VideoMetadata`, `DownloadVideoProgress`, `MediaProcessInput`, `MediaProcessResult`, `OverlayPlacement` | [Mídia e uploads](https://nodaro.ai/docs/developers/sdk/media-and-uploads) |
| `AddCaptionsInput`, `CaptionLookInput`, `CaptionSegmentInput`, `CaptionEntry` | [Mídia e uploads](https://nodaro.ai/docs/developers/sdk/media-and-uploads#mediaaddcaptionsinput) |
| `Voice`, `SharedVoice`, `VoiceClone`, `VoiceLibraryParams`, `VoiceLibraryResponse` | [Vozes e áudio](https://nodaro.ai/docs/developers/sdk/voices-and-audio) |
| `VoiceChangerProInput`, `VoiceChangerProVoice`, `VcpAnalyzeInput`, `VcpAnalysis`, `VcpAnalysisSpeaker`, `VcpExportInput`, `VcpExportTrack` | [Vozes e áudio](https://nodaro.ai/docs/developers/sdk/voices-and-audio#voicesrecastinput) |
| `VoiceDesignInput`, `VoiceRemixInput`, `DubbingInput`, `AudioFxPreset` | [Vozes e áudio](https://nodaro.ai/docs/developers/sdk/voices-and-audio) |
| `TranscribeWord`, `TranscribeJobOutput`, `TranscribeProvider`, `TranscribeLane` | [Vozes e áudio](https://nodaro.ai/docs/developers/sdk/voices-and-audio#audiotranscribeinput) |
| `EditJobResult`, `SilenceDetectInput`, `SilenceRanges`, `AudioSyncInput`, `AudioSyncSource`, `AudioSyncOffset`, `AudioSyncResult`, `ApplyEdlInput`, `EditPlanInput`, `EditPlanSource`, `EditPlanMode`, `EditPlanTier`, `Edl`, `EdlClipSet`, `ChapterSet`, `Transcript` | [Edição](https://nodaro.ai/docs/developers/sdk/editing) |
| `GenerateScene3DParams`, `EditScene3DParams`, `RenderScene3DParams`, `Scene3DJobOutput`, `Scene3DCapabilities`, `Scene3DAuthoringEngine`, `RetainedScene3DEditParams`, `RetainedScene3DEditResult`, `Scene3DDelivery`, `Scene3DDeliveryAsset`, `Scene3DDeliveryAssetKind` | [Cenas 3D](https://nodaro.ai/docs/developers/sdk/scenes-3d) |

## Entidades
| Exportação | Documentado em |
| --- | --- |
| `Character`, `CharacterDetail`, `CharacterUsage`, `ReferencePhoto`, `ReferencePhotoKind`, `UpsertCharacterInput`, `UpsertCharacterResult`, `ListCharactersParams`, `ListCharactersResult`, `DuplicateCharacterInput`, `GenerateCharacterInput`, `GenerateCharacterResult`, `GenerateAssetInput`, `GenerateMotionInput`, `ApprovePortraitResult`, `RecaptionResult`, `CharacterAspectRatio`, `EntityStyle` | [Personagens](https://nodaro.ai/docs/developers/sdk/characters) |
| `Location`, `LocationDetail`, `LocationReferencePhoto`, `LocationReferencePhotoKind`, `CreateLocationInput`, `UpdateLocationInput`, `UpdateLocationResult`, `ListLocationsParams`, `GenerateLocationInput`, `GenerateLocationResult`, `GenerateLocationAssetInput`, `GenerateSurroundContinuationInput`, `ApproveMainImageResult`, `RecaptionLocationResult`, `LocationAssetType`, `LocationAttachColumn`, `SurroundDirection` | [Locais](https://nodaro.ai/docs/developers/sdk/locations) |
| `Object`, `ObjectDetail`, `ObjectCategory`, `ObjectReferencePhoto`, `ObjectReferencePhotoKind`, `CreateObjectInput`, `UpdateObjectInput`, `UpdateObjectResult`, `UpsertObjectInput`, `UpsertObjectResult`, `ListObjectsParams`, `GenerateObjectInput`, `GenerateObjectResult`, `GenerateObjectAssetInput`, `GenerateObjectAssetResult`, `GenerateObjectMotionInput`, `GenerateObjectMotionResult`, `ApproveObjectMainImageResult`, `RecaptionObjectResult`, `ObjectAssetType`, `ObjectAttachColumn`, `ObjectAspectRatio` | [Objetos e criaturas](https://nodaro.ai/docs/developers/sdk/objects-and-creatures) |
| `Creature`, `CreatureDetail`, `CreatureReferencePhoto`, `CreatureReferencePhotoKind`, `CreateCreatureInput`, `UpdateCreatureInput`, `UpdateCreatureResult`, `UpsertCreatureInput`, `UpsertCreatureResult`, `ListCreaturesParams`, `GenerateCreatureInput`, `GenerateCreatureResult`, `GenerateCreatureAssetInput`, `GenerateCreatureAssetResult`, `GenerateCreatureMotionInput`, `GenerateCreatureMotionResult`, `ApproveCreatureMainImageResult`, `RecaptionCreatureResult`, `CreatureAssetType`, `CreatureAttachColumn`, `CreatureAspectRatio` | [Objetos e criaturas](https://nodaro.ai/docs/developers/sdk/objects-and-creatures#clientcreatures) |
| `CommunityCard`, `CommunityEntityType`, `CommunitySort`, `CommunityReportReason`, `BrowseCommunityParams`, `BrowseCommunityResult`, `CloneListingResult`, `FavoriteListingResult`, `ReportListingResult` | [Biblioteca da comunidade](https://nodaro.ai/docs/developers/sdk/community) |

## Produções
| Exportação | Documentado em |
| --- | --- |
| `StudioProduction`, `StudioProductionDetail`, `StudioSkillResponse`, `StudioValidatePlanResponse`, `StudioPlanIssue`, `StudioListProductionsResponse`, `ListStudioProductionsOptions`, `GetProductionOptions`, `StudioExportPlanOptions`, `StudioExportPlanResponse`, `StudioExportStep` | [Produções do Studio](https://nodaro.ai/docs/developers/sdk/studio) |
| `StudioCreateProductionRequest`, `StudioProductionResponse`, `StudioImportSummary`, `StudioClientRequestId`, `StudioOpsRequest`, `StudioOpsResponse`, `StudioOpsReceipt`, `StudioOpsImpact`, `StudioOpClass`, `StudioOpsDryRunReceipt`, `StudioOpsDryRunResponse`, `StudioReconcileResponse` | [Produções do Studio](https://nodaro.ai/docs/developers/sdk/studio#productionsopsproductionid-input) |
| `StudioGenerateRequest`, `StudioGenerateOptions`, `StudioGenerateResult`, `StudioGenerateEstimate`, `StudioGenerateResponse`, `StudioVideoLane`, `StudioDescribeRequest`, `StudioFrameRequest`, `StudioVoiceRequest`, `StudioRevoiceRequest`, `StudioMusicRequest`, `StudioMediaResponse`, `StudioJobStartedResponse`, `StudioCloneRequest` | [Produções do Studio](https://nodaro.ai/docs/developers/sdk/studio#generate-stills-and-clips) |
| `StudioProductionCapabilities`, `StudioKeyframeRecord`, `StudioProductionRecord`, `StudioProductionReply`, `StudioEditInput`, `StudioKeyframeGenerationInput`, `StudioKeyframeAcceptanceInput`, `StudioShotGenerationInput`, `StudioGenerationReply`, `StudioDocumentJson` | [Produções do Studio](https://nodaro.ai/docs/developers/sdk/studio#clientstudio-planned-frames) |
| `Shot`, `ShotMode`, `ShotEntityRef`, `CreateShotInput`, `UpdateShotInput` | [Produções do Studio](https://nodaro.ai/docs/developers/sdk/studio#clientshots) |
| `CreateRecastInput`, `EstimateRecastInput`, `RecastEstimate`, `RecastRunSnapshot`, `ResolveRecastGateInput`, `RecastScriptValidation`, `RecastScriptValidationError`, `RecastScriptImportResult` | [Recast](https://nodaro.ai/docs/developers/sdk/recast) |
| `RecastAudioManifestV1`, `RecastAudioLayerName`, `RecastAudioMix`, `RecastAudioMixControl`, `RecastAudioSectionReplacement`, `RecastRescoreReplacement`, `RecastRescoreOperation`, `EstimateRecastRescoreInput`, `RecastRescoreRequestV2`, `RecastRescoreQuote`, `RecastRescoreResponse` | [Recast](https://nodaro.ai/docs/developers/sdk/recast#change-the-music-mix) |
| `PipelineStageName`, `BranchPipelineInput`, `BranchPipelineResult`, `ChatTurn`, `ChatStageResult`, `ApplyChatProposalResult` | [Pipelines](https://nodaro.ai/docs/developers/sdk/pipelines) |
| `CopilotThread`, `CopilotThreadWorkflow`, `CopilotSurface`, `CopilotRunMode`, `CopilotModelTier`, `CopilotMessage`, `CopilotMessagePart`, `CreateCopilotThreadInput`, `CopilotStreamOptions`, `CopilotStreamFrame` e os tipos de dados dos frames | [Copilot](https://nodaro.ai/docs/developers/sdk/copilot) |

## Conta e catálogos
| Exportação | Documentado em |
| --- | --- |
| `ModelSummary`, `ModelsListResult`, `ListModelsOptions`, `UserBalance`, `ModelCostsResult` | [Modelos e créditos](https://nodaro.ai/docs/developers/sdk/models-and-credits) |
| `PickerCatalog`, `PickerCatalogSummary`, `PickerOption`, `PickerDimension`, `PickerCatalogSection`, `GetPickerCatalogOptions` | [Seletores, predefinições e prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts) |
| `CatalogsListResponse`, `ProjectedCatalog`, `ProjectedCatalogOption`, `ProjectedCatalogDimension`, `ProjectedCatalogSection` | [Seletores, predefinições e prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts#clientcatalogs) |
| `NodePreset`, `NodePresetGroup`, `FactoryPresetsResult` | [Seletores, predefinições e prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts#clientpresets) |
| `AnalyzeInput`, `AnalyzeResult`, `GenerateInput`, `EnhanceInput`, `PromptResult`, `WizardQuestion`, `WizardOption`, `WizardSelection`, `RecommendedModel`, `WizardNodeContext` | [Seletores, predefinições e prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts#clientprompthelper) |
| `OrganizationView`, `OrganizationSummary`, `OrgMemberView`, `OrgKind`, `OrgRole`, `OrgStatus`, `OrgSettings`, `OrgAuditEntry`, `OrgPage`, `OrgErrorCode`, `MemberStatus`, `CreateOrgInput`, `InviteInput`, `ListInvitationsOptions` | [Organizações e espaços de trabalho](https://nodaro.ai/docs/developers/sdk/organizations) |
| `InvitationView`, `InvitationDelivery`, `InvitationPreview`, `InvitationState`, `JoinCodeView` | [Organizações e espaços de trabalho](https://nodaro.ai/docs/developers/sdk/organizations) |
| `WorkspaceView`, `WorkspaceSummary`, `WorkspaceMemberView`, `WorkspaceRole`, `WorkspaceSettings`, `CreateWorkspaceInput` | [Organizações e espaços de trabalho](https://nodaro.ai/docs/developers/sdk/organizations#clientworkspaces) |
| `UsageQuery`, `UsageGroupBy`, `UsageReport`, `UsageReportRow`, `UsageReportTotals`, `UsageVarianceRow`, `UsageLogEntry` | [Organizações e espaços de trabalho](https://nodaro.ai/docs/developers/sdk/organizations#organization-usage) |
| `DeveloperApp`, `DeveloperAppScope`, `DeveloperAppStatus`, `DeveloperAppKind`, `CreateDeveloperAppInput`, `UpdateDeveloperAppInput`, `CreateDeveloperAppResult`, `RotateSecretResult` | [OAuth e apps de desenvolvedor](https://nodaro.ai/docs/developers/sdk/developer-apps) |
| `ExchangeCodeInput`, `AccessTokenResponse`, `OAuthAppInfo` | [OAuth e apps de desenvolvedor](https://nodaro.ai/docs/developers/sdk/developer-apps#clientoauth) |

## Funções auxiliares e constantes
Estes são valores, não tipos, então importe-os sem `type`.

| Exportação | O que é |
| --- | --- |
| `nodeStateMayCarryOutput(status)`, `OUTPUT_BEARING_NODE_STATUSES` | Se o estado de um nó pode trazer `output`: `completed` e `failed`. Veja [Jobs e execuções](https://nodaro.ai/docs/developers/sdk/jobs-and-executions#executionsgetid). |
| `isStudioGenerateEstimate(result)` | Distingue uma cotação de geração de uma execução iniciada. Veja [Produções do Studio](https://nodaro.ai/docs/developers/sdk/studio#generate-stills-and-clips). |
| `unwrapEditPlanOutput(outputData)` | Lê a saída de um job de plano de edição como uma EDL, uma lista de EDLs ou capítulos. Veja [Edição](https://nodaro.ai/docs/developers/sdk/editing#editeditplaninput). |
| `throwFromResponse(status, body)` | Lança a classe de erro que corresponde a uma resposta da API. Veja [Erros](https://nodaro.ai/docs/developers/sdk/errors#throwfromresponsestatus-body). |
| `PROMPT_PREFIX_KEY`, `PROMPT_SUFFIX_KEY` | As chaves de dados do nó do texto antes e depois do prompt. |
| `WORKSPACE_HEADER` | O nome do cabeçalho de espaço de trabalho, `X-Nodaro-Workspace`. |
| `USAGE_GROUP_BYS` | Os agrupamentos que um relatório de uso aceita. |
| `LOCATION_ASSET_TYPES`, `LOCATION_ATTACH_COLUMNS`, `SURROUND_DIRECTIONS` | Os tipos de variação, as coleções e as direções das vistas em 360 graus permitidos para locais. |
| `OBJECT_ASSET_TYPES`, `OBJECT_ATTACH_COLUMNS`, `OBJECT_ASPECT_OPTIONS`, `OBJECT_ASPECT_DEFAULTS` | Os tipos de variação, as coleções e as proporções permitidos para objetos. |
| `CREATURE_ASSET_TYPES`, `CREATURE_ATTACH_COLUMNS`, `CREATURE_ASPECT_OPTIONS`, `CREATURE_ASPECT_DEFAULTS` | As mesmas listas para criaturas. |
| `CHARACTER_STYLES`, `CHARACTER_ASPECT_OPTIONS`, `CHARACTER_ASPECT_DEFAULTS` | Os estilos e as proporções de personagens. |
| `SCENE3D_DELIVERY_ASSET_USAGE` | Os pares permitidos de tipo de arquivo de entrega e uso. |

Toda classe de recurso, como `WorkflowsResource` ou `NodesResource`, também é exportada, para tipagem avançada. Você raramente precisa delas: `createClient` monta todos os recursos para você.

## Frequently asked questions

### Como importo um tipo do SDK do Nodaro?

Use import type com o nome do tipo, por exemplo import type { Workflow, Job } from @nodaro/sdk. Alguns tipos que os métodos usam não são exportados: importe-os de @nodaro/shared ou derive-os do método.

### Por que alguns campos usam snake_case e outros camelCase?

Os tipos seguem o formato de transmissão da API. Um Job usa snake_case, como output_data e created_at, porque a API o envia assim. Um Workflow e um WorkflowExecution usam camelCase.

### Também preciso do @nodaro/shared?

Normalmente, não. O SDK reexporta a maioria dos tipos compartilhados que os métodos dele usam, como os tipos de organização e de edição. Alguns helpers, como os helpers de revisão 3D e toConnectedReference, e alguns tipos, como PipelineInput e CommunityFullDetail, são importados diretamente de @nodaro/shared.
