# `IConfiguratorNode`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Interface · `import type { IConfiguratorNode } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 21. Stored data (vendored; replaces @holo/interfaces)

The fields every stored node has. Fields not declared, and [`attributes`](IConfiguratorNode.attributes.md) values of any JSON type,
pass through: the runtime checks a stored node only for [`nodeId`](IConfiguratorNode.nodeId.md) and the fields it reads, and
every output carries the rest unchanged (key material excepted, section 8.5). An [`applyPatch`](Writer.applyPatch.md)
field path writes an undeclared field only when the node already carries it ('unknown-field'
otherwise; section 8.1).

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="_id"></a>[`_id?`](IConfiguratorNode._id.md) | property | The backend's id; the runtime ignores it. |
| <a id="type"></a>[`type`](IConfiguratorNode.type.md) | property | Which node type. |
| <a id="nodeid"></a>[`nodeId`](IConfiguratorNode.nodeId.md) | property | The placed-node id. |
| <a id="label"></a>[`label?`](IConfiguratorNode.label.md) | property | A name for editors and shoppers. |
| <a id="order"></a>[`order?`](IConfiguratorNode.order.md) | property | Sort order among siblings in editors. |
| <a id="enabled"></a>[`enabled`](IConfiguratorNode.enabled.md) | property | Recorded and priced: false takes the node (and its connections) out of the scene. |
| <a id="expanded"></a>[`expanded?`](IConfiguratorNode.expanded.md) | property | Editor state only. |
| <a id="createdat"></a>[`createdAt?`](IConfiguratorNode.createdAt.md) | property |  |
| <a id="updatedat"></a>[`updatedAt?`](IConfiguratorNode.updatedAt.md) | property |  |
| <a id="children"></a>[`children?`](IConfiguratorNode.children.md) | property |  |
| <a id="thumbnailurl"></a>[`thumbnailUrl?`](IConfiguratorNode.thumbnailUrl.md) | property |  |
| <a id="attributes"></a>[`attributes?`](IConfiguratorNode.attributes.md) | property | Your own key-value data. |

## Declaration

```ts
export interface IConfiguratorNode {
  _id?: string;
  type: 'ModelNode' | 'MaterialNode' | 'GroupNode';
  nodeId: string;
  label?: string;
  order?: number;
  enabled: boolean;
  expanded?: boolean;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  children?: ConfiguratorNode[];
  thumbnailUrl?: string;
  attributes?: Record<string, string>;
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `IConfiguratorNode` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | not recorded: no ledger row names this member or its owner |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
