# `connectionsBasis`

> 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.

Function · `import { connectionsBasis } from '@holostep-configurators/runtime-client';` · stable · since 2.0.0 · section 22. Pure helpers (root of the package; run in Node and the fake)

The basis fingerprint to store beside `connections`, as [`IConfigurator.connectionsBasis`](IConfigurator.connectionsBasis.md): sha256
(hex) of the canonical JSON (RFC 8785) of `nodeId`, `glbUrl` (as written, before `assetBaseUrl`
resolves it), `position`, `rotation` and `scale` (missing ones as identity) of every ModelNode the
model places (spec section 6.9, ID10: enabled, and selected in every group above it), in
depth-first document order, then
`connections` as given. An added, removed, moved, reordered or swapped element changes it. A node
with no or empty `glbUrl` is skipped (it places no asset); its children are not. Sync,
pure. See
[`IConfigurator.connectionsBasis`](IConfigurator.connectionsBasis.md) for what a mismatch does, and [`getSceneModel`](Writer.getSceneModel.md) for a save.

## Declaration

```ts
export declare function connectionsBasis(model: DeepReadonly<SceneModel>, connections: readonly Connection[]): string;
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `connectionsBasis` names no product |
| 2. A precedent | pass: a correctness rule (rows `G16`, `G46`, `X5`) |
| 3. Two apps, or labs | pass: 3 apps (ledger: app-04c2774145, app-4762caacdc, app-f9a32142f1) |
| 4. The cheaper fix first | decided per need in Appendix B: rows `G16`, `G46`, `X5` at tier stable (a member only where no rule, data, asset or app code serves the need) |
