@homeflare/alchemy 0.51.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/linux/container-env-quote.d.ts +39 -0
- package/dist/linux/container-env-quote.d.ts.map +1 -0
- package/dist/linux/container-form.d.ts +14 -13
- package/dist/linux/container-form.d.ts.map +1 -1
- package/dist/linux/container-paths.d.ts +17 -0
- package/dist/linux/container-paths.d.ts.map +1 -0
- package/dist/linux/index.js +41 -8
- package/dist/linux/index.js.map +6 -4
- package/dist/unifi/index.js.map +2 -2
- package/dist/unifi/network.d.ts +2 -1
- package/dist/unifi/network.d.ts.map +1 -1
- package/docs/unifi.md +11 -10
- package/package.json +1 -1
- package/src/linux/container-env-chain.test.ts +135 -0
- package/src/linux/container-env-live.test.ts +115 -0
- package/src/linux/container-env-oracle.ts +109 -0
- package/src/linux/container-env-quadlet-oracle.ts +174 -0
- package/src/linux/container-env-quote.test.ts +131 -0
- package/src/linux/container-env-quote.ts +126 -0
- package/src/linux/container-fixture.test.ts +3 -1
- package/src/linux/container-form.ts +32 -28
- package/src/linux/container-paths.ts +21 -0
- package/src/unifi/network-scope.test.ts +21 -0
- package/src/unifi/network.ts +2 -1
- package/src/unifi/write-op-reference.test.ts +3 -2
package/dist/unifi/index.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * The one refusal every refused `Unifi.*` write returns. The family makes exactly one SDK write\n * call — `networks.updateNetwork`, through `network-update.ts` — and that is the only write that\n * never sees this error.\n *\n * ⛔ TIM'S RULE, 2026-09-24: UniFi (and OPNsense) are READ-ONLY. LIFTED FOR EXACTLY ONE CASE on\n * 2026-10-10 (Tim): `Unifi.Network` update, through `update-reconcile.ts` + `network-update.ts`.\n * Every other write — create, delete, any other family's update — still fails with this typed\n * error, and `resource.test.ts`/`wire-guard.test.ts` prove it with a fake `HttpClient` that\n * records every request. Widening the policy again is a kit change (a new PR, reviewed as one),\n * not a flag a stack can pass.\n *\n * ★ A TYPED TAG, NOT A THROWN STRING (S21). `Effect.catchTag('UnifiWriteRefused', …)` lets a\n * caller (a future import script, a test) branch on the refusal without parsing a message.\n */\nimport * as Data from 'effect/Data';\nimport * as Effect from 'effect/Effect';\n\nexport const UNIFI_WRITE_POLICY =\n 'UniFi is adopt-only except Unifi.Network update: one whole-object PUT built from the live ' +\n 'object plus the declared field changes, only on a row with prior Alchemy state, only through ' +\n 'deploy-approve; create/delete and every other family stay refused -- widening is a kit change ' +\n '(Tim 2026-10-10 lifts the 2026-09-24 rule for this one case)';\n\n/** @deprecated renamed `UNIFI_WRITE_POLICY`; kept so existing consumer imports do not break. */\nexport const UNIFI_READ_ONLY_POLICY = UNIFI_WRITE_POLICY;\n\n/** What kind of write was asked for and refused — for the message only, never acted on. */\nexport type UnifiWriteAction = 'create' | 'update' | 'delete';\n\nexport class UnifiWriteRefused extends Data.TaggedError('UnifiWriteRefused')<{\n /** The vendor type string, e.g. `Unifi.Network`. */\n readonly type: string;\n /** `spec.describe(props)` — the object the write would have touched. */\n readonly identity: string;\n readonly action: UnifiWriteAction;\n}> {\n override get message(): string {\n return `${this.type} ${this.identity}: refusing to ${this.action} -- ${UNIFI_WRITE_POLICY}.`;\n }\n}\n\n/** The only thing `reconcile`/`delete` ever return for a write this family cannot make. */\nexport const refuseWrite = (type: string, identity: string, action: UnifiWriteAction) =>\n Effect.fail(new UnifiWriteRefused({ type, identity, action }));\n\n// ⛔ THE THREE ERRORS BELOW CARRY FIELD NAMES ONLY, NEVER VALUES: a network row holds addressing\n// detail, and an error message reaches logs, CI bodies and pasted reports.\nconst fieldList = (fields: ReadonlyArray<string>) => `[${fields.join(', ')}]`;\n\n/** Live no longer equals what the last deploy wrote: a hand edit is never overwritten. */\nexport class UnifiLiveDriftedSinceDeploy extends Data.TaggedError('UnifiLiveDriftedSinceDeploy')<{\n readonly type: string;\n readonly identity: string;\n readonly fields: ReadonlyArray<string>;\n}> {\n override get message(): string {\n return (\n `${this.type} ${this.identity}: live differs from the last deployed state on ` +\n `${fieldList(this.fields)}; refusing to PUT over it. Two causes look identical from here: a ` +\n 'hand edit on the console, or an earlier PUT that landed but did not converge ' +\n '(UnifiUpdateDidNotConverge). Re-import the live object first.'\n );\n }\n}\n\n/** The merged body equals live: a PUT would change nothing (keeps a re-PUT loop impossible). */\nexport class UnifiUpdateWouldBeNoop extends Data.TaggedError('UnifiUpdateWouldBeNoop')<{\n readonly type: string;\n readonly identity: string;\n}> {\n override get message(): string {\n return `${this.type} ${this.identity}: the merged update body equals live; refusing a no-op PUT.`;\n }\n}\n\n/** The PUT answered, yet the response still differs from the declaration. */\nexport class UnifiUpdateDidNotConverge extends Data.TaggedError('UnifiUpdateDidNotConverge')<{\n readonly type: string;\n readonly identity: string;\n readonly fields: ReadonlyArray<string>;\n}> {\n override get message(): string {\n return (\n `${this.type} ${this.identity}: the PUT LANDED, but live now differs from the declaration on ` +\n `${fieldList(this.fields)}. The change is on the console and is not rolled back; the next ` +\n 'deploy will see this as drift. Recovery is a re-import of the live object.'\n );\n }\n}\n\n// ⛔ THE FIVE ERRORS BELOW BOUND THE WRITE SCOPE (`network-scope.ts`, `update-reconcile.ts`): the\n// one intended consumer is a single VLAN's `ipv6Configuration`. Field names only, as above.\n\n/** A patch would remove a key outside the removable allowlist (an omitted block is turned off). */\nexport class UnifiFieldNotRemovable extends Data.TaggedError('UnifiFieldNotRemovable')<{\n readonly type: string;\n readonly identity: string;\n readonly fields: ReadonlyArray<string>;\n}> {\n override get message(): string {\n return (\n `${this.type} ${this.identity}: refusing to remove ${fieldList(this.fields)}; a whole-object ` +\n 'PUT turns an omitted block off, and only the removable allowlist may be dropped.'\n );\n }\n}\n\n/** A patch would SET a key outside the settable allowlist (only `ipv6Configuration` may be written). */\nexport class UnifiFieldNotSettable extends Data.TaggedError('UnifiFieldNotSettable')<{\n readonly type: string;\n readonly identity: string;\n readonly fields: ReadonlyArray<string>;\n}> {\n override get message(): string {\n return (\n `${this.type} ${this.identity}: refusing to set ${fieldList(this.fields)}; this write path ` +\n 'only sets the settable allowlist (ipv6Configuration).'\n );\n }\n}\n\n/** The live object is the site's default (management) network: never written. */\nexport class UnifiManagementNetworkRefused extends Data.TaggedError(\n 'UnifiManagementNetworkRefused',\n)<{\n readonly type: string;\n readonly identity: string;\n}> {\n override get message(): string {\n return `${this.type} ${this.identity}: live is the default (management) network; refusing any write to it.`;\n }\n}\n\n/** A patch changes a field that decides where the network lives or what serves it. */\nexport class UnifiImmutableFieldChanged extends Data.TaggedError('UnifiImmutableFieldChanged')<{\n readonly type: string;\n readonly identity: string;\n readonly fields: ReadonlyArray<string>;\n}> {\n override get message(): string {\n return `${this.type} ${this.identity}: refusing to change ${fieldList(this.fields)}; those fields are never written.`;\n }\n}\n\n/** `olds` and `news` name different objects: the prior state is no baseline for this write. */\nexport class UnifiIdentityChanged extends Data.TaggedError('UnifiIdentityChanged')<{\n readonly type: string;\n readonly identity: string;\n readonly previous: string;\n}> {\n override get message(): string {\n return `${this.type} ${this.identity}: the last deploy named ${this.previous}; refusing to PUT against another object.`;\n }\n}\n",
|
|
6
6
|
"/**\n * B0a / T12 DEFENSE IN DEPTH, AT THE WIRE. `policy.ts`'s `UnifiWriteRefused` stops write INTENT at\n * `reconcile`/`destroy`; this guard stops the same thing one layer lower. It wraps whatever\n * `HttpClient` the caller already provides (the stack's `FetchHttpClient.layer` in production,\n * `fakeUnifiLayer` in tests — `openbao/bao-http.ts`'s header names this same \"wrap, don't\n * replace\" seam), so an SDK write operation called by mistake, bypassing `unifiOperations`, still\n * never reaches the vendor API. `write-op-reference.test.ts` proves no such call exists outside\n * `network-update.ts`; this is what stops one from ever taking effect.\n *\n * ★ A GET ALWAYS PASSES THE REQUEST GUARD; ANY OTHER METHOD PASSES ONLY WHEN `(method, pathname)`\n * MATCHES AN ENTRY OF THE `allow` LIST. `unifiHandlers` builds that list PER ROW\n * (`spec.update.allowedWrite(news)`): the one PUT that can pass is to this row's own\n * `/v1/sites/<siteId>/networks/<networkId>` under the CONFIGURED base URL (local and\n * cloud-connector base paths differ, so the base is passed in and compared exactly, `isAllowed`).\n * A PUT to another network id, the list route, or another family dies here.\n *\n * ⚠️ `Effect.die`, NOT A TYPED FAILURE — every generated SDK operation declares its OWN closed\n * error union from the pinned OpenAPI spec and generated files are never hand-edited, so a typed\n * `Effect.fail` here would be a failure absent from every op's declared type. A defect is the\n * sound way to add a \"structurally impossible\" failure underneath types this package does not\n * own, like `openbao`'s `refuse()` helpers.\n *\n * ⛔ REDIRECTS (LOW-7), REFUSED FOR EVERY METHOD — GETs included, 2026-10-10. The layer sets fetch\n * `redirect: 'manual'` on EVERY guarded request and the guard dies on any 3xx answer. Default\n * fetch follows a redirect and re-sends the request to a `Location` this guard never saw — a PUT\n * with its body on 307/308, a GET still carrying the API-key header — so following is never\n * safe. Scoping `manual` to a non-empty allow list (the pre-2026-10-10 shape) also made the two\n * postures DIVERGE by accident: reconcile's own GETs ran manual, so a 3xx surfaced raw and failed\n * the SDK decode, while read/diff under `GetOnlyHttpClient` followed the redirect silently. One\n * rule for both postures now: a redirect is refused everywhere, fail closed.\n */\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as FetchHttpClient from 'effect/http/FetchHttpClient';\nimport * as HttpClient from 'effect/http/HttpClient';\nimport * as HttpClientRequest from 'effect/http/HttpClientRequest';\nimport type * as HttpClientResponse from 'effect/http/HttpClientResponse';\nimport { UNIFI_WRITE_POLICY } from './policy.ts';\n\n/**\n * One non-GET request the guard may let through. `tail` is the exact route below the configured\n * base URL (`/v1/sites/<site>/networks/<id>`): the guard compares the request's origin and path to\n * `baseUrl + tail` and requires an empty query and fragment (`isAllowed`).\n */\nexport type AllowedWrite = { readonly method: 'PUT'; readonly tail: string };\n\nexport class UnifiRefusedRequest extends Error {\n constructor(\n readonly method: string,\n /** PATH ONLY, never the full URL — see `requestPath` below. */\n readonly path: string,\n detail = \"not on this row's allow list\",\n ) {\n super(\n `UniFi HttpClient guard: refused ${method} ${path} (${detail}) -- ${UNIFI_WRITE_POLICY}. ` +\n 'This is a defect, not a recoverable condition: something under src/unifi sent a request ' +\n \"policy.ts's per-operation refusal should already have made impossible. Fix the kit \" +\n 'code that produced this request.',\n );\n this.name = 'UnifiRefusedRequest';\n }\n}\n\n/** @deprecated renamed `UnifiRefusedRequest`; kept so existing consumer imports do not break. */\nexport const UnifiNonGetRequest = UnifiRefusedRequest;\nexport type UnifiNonGetRequest = UnifiRefusedRequest;\n\n/**\n * ⛔ PATH ONLY, NEVER THE HOST. A cloud connector's base URL embeds the account's Console ID\n * (`docs/unifi.md`'s Credentials section, T3) — a defect message can still reach a log or a CI\n * failure body. Falls back to a fixed placeholder on a parse failure so a malformed URL can\n * never leak through unredacted.\n */\nconst requestPath = (url: string): string => {\n try {\n // ⛔ The cloud connector path is `/v1/connector/consoles/<consoleId>/...`: the id is dropped too.\n return new URL(url).pathname.replace(/(\\/consoles\\/)[^/]*/g, '$1<redacted>');\n } catch {\n return '<unparseable request url>';\n }\n};\n\n/**\n * ⛔ ANCHORED TO THE CONFIGURED BASE URL, NOT A SUFFIX. The request must share the base's origin,\n * its path must be exactly `<base path><tail>` (so `//v1/...`, another base path or a nested\n * `/v1/sites/X/v1/sites/s/...` all miss), and it must carry no query or fragment (`?force=true`).\n * Without a base URL nothing is allowed: fail closed.\n */\nconst isAllowed = (\n allow: ReadonlyArray<AllowedWrite>,\n baseUrl: string | undefined,\n method: string,\n request: HttpClientRequest.HttpClientRequest,\n) => {\n if (baseUrl === undefined) return false;\n try {\n const base = new URL(baseUrl);\n // ⛔ `toUrl`, NOT `request.url`: `setUrlParam` keeps its parameters OUTSIDE `request.url`, so\n // the bare string looked query-free while the wire request carried `?force=true` (round 2, F5).\n const resolved = HttpClientRequest.toUrl(request);\n if (Option.isNone(resolved)) return false;\n const target = resolved.value;\n if (target.origin !== base.origin || target.search !== '' || target.hash !== '') return false;\n const basePath = base.pathname.replace(/\\/+$/, '');\n return allow.some(\n (entry) => entry.method === method && target.pathname === `${basePath}${entry.tail}`,\n );\n } catch {\n return false;\n }\n};\n\n/** True when the response says it came from a different URL than the request named. */\nconst followedElsewhere = (res: HttpClientResponse.HttpClientResponse): boolean => {\n const sent = HttpClientRequest.toUrl(res.request);\n return res.url !== '' && Option.isSome(sent) && res.url !== sent.value.href.split('#')[0];\n};\n\nconst guard = (\n client: HttpClient.HttpClient,\n allow: ReadonlyArray<AllowedWrite>,\n baseUrl: string | undefined,\n) =>\n client.pipe(\n HttpClient.mapRequestEffect((request) =>\n request.method === 'GET' || isAllowed(allow, baseUrl, request.method, request)\n ? Effect.succeed(request)\n : Effect.die(new UnifiRefusedRequest(request.method, requestPath(request.url))),\n ),\n HttpClient.transformResponse((response) =>\n Effect.flatMap(response, (res) =>\n // ⛔ ANY METHOD: a GET's 3xx is refused exactly like a PUT's — see REDIRECTS in the header.\n res.status >= 300 && res.status < 400\n ? Effect.die(\n new UnifiRefusedRequest(\n res.request.method,\n requestPath(res.request.url),\n `answered a ${res.status} redirect`,\n ),\n )\n : // ⛔ BACKSTOP (round 2, F3): if a consumer's own transform replaced `manual` and fetch\n // followed a redirect, the response URL is no longer the request's. Die on that.\n followedElsewhere(res)\n ? Effect.die(\n new UnifiRefusedRequest(\n res.request.method,\n requestPath(res.request.url),\n 'the response URL differs from the request URL (a redirect was followed)',\n ),\n )\n : Effect.succeed(res),\n ),\n ),\n );\n\n/**\n * A `Layer` that reads whatever `HttpClient` is already in the calling context and replaces it,\n * for everything downstream, with the guarded version. Exported so `wire-guard.test.ts` can prove\n * the mechanism against a bare `HttpClient`, without `CredentialsFromEnv` or any env var.\n */\nexport const guardedHttpClient = (allow: ReadonlyArray<AllowedWrite>, baseUrl?: string) => {\n return HttpClient.layerMergedContext(\n Effect.map(HttpClient.HttpClient, (client) =>\n // ⛔ MANUAL REDIRECT ON BOTH POSTURES, not just an allow list: the response guard refuses a\n // 3xx for GETs too, and under the default 'follow' a GET redirect is silently followed —\n // the guard would never see it, and read/diff would diverge from reconcile again.\n HttpClient.transform(guard(client, allow, baseUrl), manualRedirect),\n ),\n );\n};\n\n/**\n * ⛔ `redirect: 'manual'` IS SET PER REQUEST, ON THE CALLING FIBER'S `RequestInit`. A layer-provided\n * `RequestInit` is silently REPLACED by an outer one (Effect 4.0.1 `layerMergedContext` merges the\n * caller's context over the layer's), which would turn redirects back on. Same read-merge-provide\n * pattern as `openbao/bao-http.ts`'s `overSocket`; outer fetch options are kept.\n */\nconst manualRedirect = <E, R>(\n effect: Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>,\n): Effect.Effect<HttpClientResponse.HttpClientResponse, E, R> =>\n Effect.flatMap(Effect.serviceOption(FetchHttpClient.RequestInit), (existing) =>\n Effect.provideService(effect, FetchHttpClient.RequestInit, {\n ...Option.getOrElse(existing, () => ({})),\n redirect: 'manual',\n }),\n );\n\n/**\n * No write may pass; the posture of `read`/`diff`/`delete` and of every non-updatable family. A 3xx\n * answer to a GET is refused here exactly as under the allow-list posture — see REDIRECTS above.\n */\nexport const GetOnlyHttpClient = guardedHttpClient([]);\n",
|
|
7
|
-
"/**\n * `Unifi.Network` — one network on a UniFi Network site,
|
|
7
|
+
"/**\n * `Unifi.Network` — one network on a UniFi Network site, the ONE family with a write path\n * (`policy.ts` lifts Tim's read-only rule for exactly this update; see `network-update.ts`).\n *\n * ★ WHY NETWORK IS IN THE FIRST IMPORT SET. `getNetworkDetails`/`getNetworksOverviewPage`\n * (`../../distilled-unifi-network/src/services/networks.ts`) is a list+get pair over\n * genuine configuration — VLAN, DHCP guarding, IPv4/IPv6 addressing, isolation — not runtime\n * state like a connected client, a device statistic or a hotspot voucher. It is also the SDK\n * package's own README recommendation for a first read/adopt-only resource, alongside `Site`\n * (skipped here — no `getSite`, only the list operation, so it fails this task's own \"both a\n * list and a get\" bar) and `FirewallZone`/`FirewallPolicy` (`firewall-zone.ts` ships\n * `FirewallZone`; `FirewallPolicy`'s several discriminated filter variants and its\n * list-replacing ordering endpoint are a bigger, separate PR).\n *\n * ⛔ THE WHOLE-OBJECT-PUT TRAP (packages/distilled-unifi-network/README.md) FIRES HERE, THROUGH `network-update.ts`;\n * see its header. `updateNetwork` is a `PUT` that disables `dhcpGuarding`/`ipv4Configuration`/\n * `ipv6Configuration` outright when the caller omits them, so the body is the raw live object\n * plus only the fields the declaration changed since the last deploy — never props alone.\n * This is the ONE family with a write path (Tim 2026-10-10, `policy.ts`); create/delete refuse.\n */\nimport { Resource } from 'alchemy';\nimport { adopt } from 'alchemy/AdoptPolicy';\nimport * as Provider from 'alchemy/Provider';\nimport * as networks from '@distilled.cloud/unifi-network/networks';\nimport * as Effect from 'effect/Effect';\nimport { type NetworkAttributes, type NetworkProps, attributesOf } from './network-form.ts';\nimport { driftOf, matches } from './network-drift.ts';\nimport { type ScopeError, checkNetworkWriteScope } from './network-scope.ts';\nimport { writeNetwork } from './network-update.ts';\nimport type { UnifiUpdateWouldBeNoop } from './policy.ts';\nimport type { UnifiRequirements, UnifiSpec } from './resource.ts';\nimport { unifiHandlers } from './resource.ts';\nimport type { AllowedWrite } from './wire-guard.ts';\n\ntype UpdateError = networks.UpdateNetworkError | UnifiUpdateWouldBeNoop | ScopeError;\n\nexport type { NetworkAttributes, NetworkProps } from './network-form.ts';\nexport { declareNetwork } from './network-form.ts';\n// MEDIUM-4: `matches` moved here from `network-form.ts` — see network-drift.ts's own header. Not\n// re-exported from this barrel file either, same as before the move: `spec.matches` below is the\n// only consumer a provider needs.\nexport { driftOf } from './network-drift.ts';\n\nexport interface UnifiNetwork extends Resource<\n 'Unifi.Network',\n NetworkProps,\n NetworkAttributes,\n never,\n UnifiRequirements\n> {}\n\nexport const UnifiNetwork = Resource<UnifiNetwork>('Unifi.Network', {\n defaultRemovalPolicy: 'retain',\n});\n\n/**\n * `network('lan', props)` — `adopt(true)` piped on by default (H5). A cold first deploy against an\n * existing network can still only bind to it or refuse `OwnedBySomeoneElse` — the update path\n * needs prior Alchemy state (`update-reconcile.ts`), so it cannot fire on adoption. Piping\n * `adopt(true)` here picks the bind without a stack having to remember `--adopt`, mirroring\n * `discord/application-command.ts`'s `applicationCommand`.\n */\nexport const network = (id: string, props: NetworkProps) =>\n UnifiNetwork(id, props).pipe(adopt(true));\n\n/**\n * ★ EXPORTED for direct testing against a fake `Credentials` layer (`fake-unifi.ts`), the same\n * seam `netbox/prefix.ts`'s `spec` and `discord/application-command.ts`'s `spec` use — `handlers`\n * bakes in `CredentialsFromEnv`, which resolves environment variables a test cannot repoint.\n */\n/**\n * Every declarable key: `NetworkProps` minus the two identity ids. A test pins this against a\n * fully-populated `NetworkProps` literal so a new prop cannot be silently unpatchable.\n */\nexport const NETWORK_PATCH_KEYS: ReadonlyArray<keyof NetworkProps> = [\n 'name',\n 'enabled',\n 'management',\n 'vlanId',\n 'dhcpGuarding',\n 'cellularBackupEnabled',\n 'internetAccessEnabled',\n 'ipv4Configuration',\n 'ipv6Configuration',\n 'isolationEnabled',\n 'mdnsForwardingEnabled',\n 'zoneId',\n 'deviceId',\n];\n\n/**\n * The only PUT that may pass for this row: its own `/v1/sites/<siteId>/networks/<networkId>` under\n * the configured base URL. ⛔ Built from the row's NEW props (the ids the write is about to use) and\n * compared by exact string against the request path, so no id can act as a pattern.\n */\nexport const networkAllowedWrite = (props: NetworkProps): AllowedWrite => ({\n method: 'PUT',\n tail: `/v1/sites/${props.siteId}/networks/${props.networkId}`,\n});\n\nexport const spec: UnifiSpec<\n NetworkProps,\n networks.NetworkDetails,\n NetworkAttributes,\n networks.GetNetworkDetailsError,\n UpdateError\n> = {\n type: 'Unifi.Network',\n describe: (props) => `sites/${props.siteId}/networks/${props.networkId}`,\n fetchLive: (props) =>\n networks\n .getNetworkDetails({ siteId: props.siteId, networkId: props.networkId })\n .pipe(Effect.catchTag('NotFound', () => Effect.succeed(undefined))),\n attributes: attributesOf,\n matches,\n update: {\n allowedWrite: networkAllowedWrite,\n patchKeys: NETWORK_PATCH_KEYS,\n driftOf,\n checkScope: checkNetworkWriteScope,\n write: writeNetwork,\n },\n};\n\nexport const handlers = unifiHandlers(spec);\n\nexport const UnifiNetworkProvider = () =>\n Provider.effect(UnifiNetwork, Effect.succeed(UnifiNetwork.Provider.of(handlers)));\n",
|
|
8
8
|
"/**\n * `Unifi.Network`'s wire shape: the declarable subset of `NetworkDetails`, and how a live read\n * becomes both plan attributes and a rendered declaration.\n *\n * ⚠️ PROPS MIRROR `UpdateNetworkRequest`, NOT `NetworkDetails`. `default` and `metadata` are\n * server-derived — no writable endpoint in `networks.ts` accepts either — so they are\n * attributes-only, reported but never compared or declared. Everything else in `NetworkProps`\n * is exactly what `updateNetwork`/`createNetwork` would accept, even though this family never\n * calls either: the shape is what a future write path would need, and what today's read-only\n * `matches` compares against.\n *\n * ⛔ `ipv4Configuration` STAYS `unknown`, ON THE SDK'S OWN AUTHORITY. `networks.ts`'s own comment\n * (\"Shape varies by variant — widened by scripts/convert.ts; see README\") says the OpenAPI\n * discriminator this field varies over was flattened at generation time, not decoded per\n * variant. Comparing it as an opaque JSON value (below) is honest about that; guessing a\n * narrower shape here would silently stop matching the day a new variant's key order differs.\n * ⚠️ It may ALSO hide an unordered array the way `dhcpGuarding` and `ipv6Configuration` do\n * below — this family just can't know, because the shape is never decoded. If a future variant\n * plans spurious `update`s, suspect this field first and widen it into a typed, order-normalized\n * shape rather than adding another opaque comparison.\n *\n * ⛔ THREE FIELDS ARE SETS, NOT SEQUENCES: `dhcpGuarding.trustedDhcpServerIpAddresses`,\n * `ipv6Configuration.additionalHostIpSubnets`, and `ipv6Configuration.dnsServerIpAddressesOverride`.\n * The vendor document gives no indication any of the three is ordered — same reasoning\n * `firewall-zone-form.ts` gives for `networkIds`, and `proxmox/user-wire.ts`'s `groupSet` gives\n * for PVE's `groups` — but `matches` compares via alchemy's `deepEqual`, which sorts object KEYS\n * but NOT ARRAY ELEMENTS (`node_modules/alchemy/lib/Diff.js`). Left alone, a console that\n * returns the same set in a different order between calls plans a spurious `update`, and the\n * read-only reconcile then refuses every deploy. `sortedSet` (dedupe + sort) neutralizes that\n * before any of the three is attributed, declared, or compared. Every OTHER array field in this\n * family (there are none today besides these three) would stay declaration-order as written.\n */\nimport type * as networks from '@distilled.cloud/unifi-network/networks';\n\nconst sortedSet = (values: readonly string[]): string[] => [...new Set(values)].sort();\n\n// ⚠️ `value == null` (NOT `=== undefined`) ON PURPOSE, IN BOTH NORMALIZERS BELOW. The SDK types\n// `dhcpGuarding`/`ipv6Configuration` `T | undefined`, but `matches`'s own header says UniFi's\n// JSON answers `null` for an unset optional field — a reality `deepEqual`'s `stripNullish`\n// already treats as equivalent to `undefined` (`value == null` in alchemy's `Diff.js`), which\n// this family's props/attributes types don't model at the TS level. Destructuring a `null` with\n// `=== undefined`'s false branch (`{ ...value, field: value.field }`) would throw\n// `TypeError: Cannot read properties of null` the first time a console omits either field —\n// `== null` catches both and returns the value through untouched, matching what the rest of\n// this file already does for every other optional field.\n// ★ EXPORTED (not just used below): `network-drift.ts`'s `driftOf` reuses these exact two\n// normalizers so it can never quietly disagree with `matches` about what counts as a change —\n// see that file's own header.\nexport const normalizeDhcpGuarding = (\n value: networks.NetworkDHCPGuarding | undefined,\n): networks.NetworkDHCPGuarding | undefined =>\n value == null\n ? value\n : { ...value, trustedDhcpServerIpAddresses: sortedSet(value.trustedDhcpServerIpAddresses) };\n\n// ⚠️ `exactOptionalPropertyTypes` (see the props header) means these two subfields must be\n// OMITTED, not set to an explicit `undefined`, when the live/declared value has no override —\n// `NetworkIPv6Configuration` types them `field?: T`, not `field?: T | undefined`. Conditional\n// spread (rather than `field: value.field === undefined ? undefined : sortedSet(...)`) is what\n// keeps an absent key absent.\nexport const normalizeIpv6Configuration = (\n value: networks.NetworkIPv6Configuration | undefined,\n): networks.NetworkIPv6Configuration | undefined =>\n value == null\n ? value\n : {\n ...value,\n ...(value.additionalHostIpSubnets !== undefined\n ? { additionalHostIpSubnets: sortedSet(value.additionalHostIpSubnets) }\n : {}),\n ...(value.dnsServerIpAddressesOverride !== undefined\n ? { dnsServerIpAddressesOverride: sortedSet(value.dnsServerIpAddressesOverride) }\n : {}),\n };\n\n/**\n * ⚠️ EVERY OPTIONAL FIELD SPELLS OUT `| undefined` ON PURPOSE. `tsconfig.json` sets\n * `exactOptionalPropertyTypes`, which treats `field?: T` (absent-or-T) and\n * `field?: T | undefined` (absent-or-explicitly-undefined) as different types. `declareNetwork`\n * below assigns `live.dhcpGuarding` (typed `T | undefined`) straight through — the whole point\n * of a renderer that echoes a live optional field structurally rather than defaulting it — so\n * the target has to admit an explicit `undefined`, not just omission.\n */\nexport interface NetworkProps {\n siteId: string;\n networkId: string;\n name: string;\n enabled: boolean;\n management: string;\n /** VLAN ID. Must be 1 for the default network and >= 2 for additional networks. */\n vlanId: number;\n dhcpGuarding?: networks.NetworkDHCPGuarding | undefined;\n cellularBackupEnabled?: boolean | undefined;\n internetAccessEnabled?: boolean | undefined;\n /** Opaque — see the header. */\n ipv4Configuration?: unknown;\n ipv6Configuration?: networks.NetworkIPv6Configuration | undefined;\n isolationEnabled?: boolean | undefined;\n mdnsForwardingEnabled?: boolean | undefined;\n zoneId?: string | undefined;\n deviceId?: string | undefined;\n}\n\nexport interface NetworkAttributes {\n siteId: string;\n networkId: string;\n /** Whether this is the site's undeletable default network — server-derived, never declared. */\n default: boolean;\n name: string;\n enabled: boolean;\n management: string;\n vlanId: number;\n dhcpGuarding: networks.NetworkDHCPGuarding | undefined;\n cellularBackupEnabled: boolean | undefined;\n internetAccessEnabled: boolean | undefined;\n ipv4Configuration: unknown;\n ipv6Configuration: networks.NetworkIPv6Configuration | undefined;\n isolationEnabled: boolean | undefined;\n mdnsForwardingEnabled: boolean | undefined;\n zoneId: string | undefined;\n deviceId: string | undefined;\n}\n\nexport const attributesOf = (\n live: networks.NetworkDetails,\n props: NetworkProps,\n): NetworkAttributes => ({\n siteId: props.siteId,\n networkId: live.id,\n default: live.default,\n name: live.name,\n enabled: live.enabled,\n management: live.management,\n vlanId: live.vlanId,\n dhcpGuarding: normalizeDhcpGuarding(live.dhcpGuarding),\n cellularBackupEnabled: live.cellularBackupEnabled,\n internetAccessEnabled: live.internetAccessEnabled,\n ipv4Configuration: live.ipv4Configuration,\n ipv6Configuration: normalizeIpv6Configuration(live.ipv6Configuration),\n isolationEnabled: live.isolationEnabled,\n mdnsForwardingEnabled: live.mdnsForwardingEnabled,\n zoneId: live.zoneId,\n deviceId: live.deviceId,\n});\n\n/**\n * MEDIUM-4 (red team, 2026-09-26): `matches` used to be a hand-written boolean expression here,\n * kept in sync BY HAND with `network-drift.ts`'s separately-maintained field list — two comparisons\n * that could (and, per a red-team mutant, silently did) drift apart. `matches` now lives in\n * `network-drift.ts`, defined as `fieldDrift(...).length === 0` — the SAME comparison `driftOf`\n * runs, not a second one. See that file's own header for the `stripNullish`/normalizer reasoning\n * this expression used to carry.\n */\n\n/**\n * The declaration renderer (task spec: \"given one live object, return the props a declaration\n * needs so its plan is noop\"). A later import script feeds `getNetworkDetails`'s own response\n * straight in and writes the result into `alchemy.run.ts` as `network('<id>', declareNetwork(live,\n * siteId))` — no field is invented or defaulted here beyond what `attributesOf` already reports,\n * so `matches(attributesOf(live, props), declareNetwork(live, siteId))` is `true` by construction\n * (`network.test.ts` proves it) for any live object this SDK can decode.\n */\nexport const declareNetwork = (live: networks.NetworkDetails, siteId: string): NetworkProps => ({\n siteId,\n networkId: live.id,\n name: live.name,\n enabled: live.enabled,\n management: live.management,\n vlanId: live.vlanId,\n dhcpGuarding: normalizeDhcpGuarding(live.dhcpGuarding),\n cellularBackupEnabled: live.cellularBackupEnabled,\n internetAccessEnabled: live.internetAccessEnabled,\n ipv4Configuration: live.ipv4Configuration,\n ipv6Configuration: normalizeIpv6Configuration(live.ipv6Configuration),\n isolationEnabled: live.isolationEnabled,\n mdnsForwardingEnabled: live.mdnsForwardingEnabled,\n zoneId: live.zoneId,\n deviceId: live.deviceId,\n});\n",
|
|
9
9
|
"/**\n * B6: the field-level drift framework every family's own `driftOf(live, props)` is built on\n * (`network-form.ts`, `firewall-zone-form.ts`, and whatever family follows). Consumed by\n * `homeflare-network`'s pre-import drift check (its own C4, not built here) to show WHICH fields\n * a live object and a committed declaration disagree on, before that script overwrites the\n * committed module — never by a `Unifi.*` provider itself, which only ever needs `matches`'s\n * boolean.\n *\n * ★ BUILT ON `matches`, NOT A SEPARATE COMPARISON. Each family's `driftOf` reuses the SAME\n * normalizers (`sortedSet`, the `dhcpGuarding`/`ipv6Configuration` null-vs-undefined handling)\n * its own `matches` already applies — so this reports NOTHING `matches` would call a noop, and\n * everything `matches` would call `update`, broken down by field instead of collapsed to one\n * boolean. Two comparisons drifting apart would be its own bug class; there is exactly one.\n */\nimport { deepEqual } from 'alchemy/Diff';\n\n/** One field whose live and declared values differ, as `makeDriftOf` reports it. */\nexport interface FieldDrift {\n readonly field: string;\n readonly live: unknown;\n readonly declared: unknown;\n}\n\n/** One field's comparison recipe for `makeDriftOf`. */\nexport interface DriftField<Attributes, Props> {\n readonly field: string;\n readonly live: (attributes: Attributes) => unknown;\n readonly declared: (props: Props) => unknown;\n /**\n * Defaults to `alchemy/Diff`'s `deepEqual` with `stripNullish: true` — the same tolerance\n * every `matches` in this directory already gives UniFi's `null`-for-unset optionals (see\n * `network-form.ts`'s header). Pass one explicitly for a field `matches` compares as a\n * normalized SET (`firewall-zone-form.ts`'s `networkIds`), where plain `deepEqual` would\n * report order as drift `matches` never would.\n */\n readonly equal?: (live: unknown, declared: unknown) => boolean;\n}\n\nconst defaultEqual = (live: unknown, declared: unknown) =>\n deepEqual(live, declared, { stripNullish: true });\n\n/**\n * Builds a `(attributes, props) => FieldDrift[]` from a field list — the framework a family's own\n * `*-form.ts` calls once, then wraps as `driftOf(live, props)` by feeding it `attributesOf(live,\n * props)` (the task's own API: callers have a live SDK object, not `Attributes`, on hand).\n */\nexport const makeDriftOf =\n <Attributes, Props>(fields: readonly DriftField<Attributes, Props>[]) =>\n (attributes: Attributes, props: Props): FieldDrift[] =>\n fields.flatMap(({ field, live, declared, equal = defaultEqual }) => {\n const liveValue = live(attributes);\n const declaredValue = declared(props);\n return equal(liveValue, declaredValue)\n ? []\n : [{ field, live: liveValue, declared: declaredValue }];\n });\n",
|
|
10
10
|
"/**\n * `Unifi.Network`'s `matches` AND `driftOf` (B6) — both built on the ONE field list below, not two\n * hand-kept-in-sync comparisons. `matches` used to be a separate boolean expression in\n * `network-form.ts`; MEDIUM-4 (red team, 2026-09-26) found that a `fieldDrift` entry could be\n * deleted entirely and every test still passed, because `matches` never consulted `fieldDrift` at\n * all. `matches(attrs, props) === (driftOf(live, props).length === 0)` is now true BY\n * CONSTRUCTION — there is exactly one comparison — and every `fieldDrift` entry names ONE field\n * plus its own live/declared value instead of collapsing straight to a boolean.\n *\n * ⚠️ `stripNullish: true` ON EVERY FIELD BY DEFAULT (`drift.ts`'s `defaultEqual`). UniFi's JSON\n * answers `null` for an unset optional field; a declaration that omits the same prop carries\n * `undefined`. Without this, every plan against an object with one unset optional field would\n * report `update` forever — the exact \"read and write are different shapes\" trap\n * `netbox/values.ts` and `proxmox/user-wire.ts` both work around, here solved once by\n * `makeDriftOf`'s own default instead of a per-field coercion.\n */\nimport type * as networks from '@distilled.cloud/unifi-network/networks';\nimport { makeDriftOf } from './drift.ts';\nimport {\n type NetworkAttributes,\n type NetworkProps,\n attributesOf,\n normalizeDhcpGuarding,\n normalizeIpv6Configuration,\n} from './network-form.ts';\n\nconst fieldDrift = makeDriftOf<NetworkAttributes, NetworkProps>([\n { field: 'name', live: (a) => a.name, declared: (p) => p.name },\n { field: 'enabled', live: (a) => a.enabled, declared: (p) => p.enabled },\n { field: 'management', live: (a) => a.management, declared: (p) => p.management },\n { field: 'vlanId', live: (a) => a.vlanId, declared: (p) => p.vlanId },\n {\n field: 'dhcpGuarding',\n live: (a) => normalizeDhcpGuarding(a.dhcpGuarding),\n declared: (p) => normalizeDhcpGuarding(p.dhcpGuarding),\n },\n {\n field: 'cellularBackupEnabled',\n live: (a) => a.cellularBackupEnabled,\n declared: (p) => p.cellularBackupEnabled,\n },\n {\n field: 'internetAccessEnabled',\n live: (a) => a.internetAccessEnabled,\n declared: (p) => p.internetAccessEnabled,\n },\n {\n field: 'ipv4Configuration',\n live: (a) => a.ipv4Configuration,\n declared: (p) => p.ipv4Configuration,\n },\n {\n field: 'ipv6Configuration',\n live: (a) => normalizeIpv6Configuration(a.ipv6Configuration),\n declared: (p) => normalizeIpv6Configuration(p.ipv6Configuration),\n },\n {\n field: 'isolationEnabled',\n live: (a) => a.isolationEnabled,\n declared: (p) => p.isolationEnabled,\n },\n {\n field: 'mdnsForwardingEnabled',\n live: (a) => a.mdnsForwardingEnabled,\n declared: (p) => p.mdnsForwardingEnabled,\n },\n { field: 'zoneId', live: (a) => a.zoneId, declared: (p) => p.zoneId },\n { field: 'deviceId', live: (a) => a.deviceId, declared: (p) => p.deviceId },\n]);\n\nexport const matches = (attributes: NetworkAttributes, props: NetworkProps): boolean =>\n fieldDrift(attributes, props).length === 0;\n\n/**\n * Per-field live-vs-declared drift straight from one live read — the task's own API\n * (`driftOf(live, props)`), so `homeflare-network`'s pre-import drift check never has to derive\n * `attributesOf` itself just to call this.\n */\nexport const driftOf = (live: networks.NetworkDetails, props: NetworkProps) =>\n fieldDrift(attributesOf(live, props), props);\n",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"/**\n * `Unifi.TrafficMatchingList`'s `matches` AND `driftOf` (B6) — both built on the ONE field list\n * below, the same `fieldDrift`-is-the-only-comparison shape `network-drift.ts`'s header explains\n * (MEDIUM-4, red team, 2026-09-26): `matches(attrs, props) === (driftOf(live, props).length === 0)`\n * is true BY CONSTRUCTION, never two hand-kept-in-sync comparisons.\n *\n * ⚠️ `stripNullish: true` ON EVERY FIELD BY DEFAULT (`drift.ts`'s `defaultEqual`) — same \"UniFi's\n * JSON answers `null`, a declaration omits\" tolerance every other family here relies on.\n * ★ `items` compares with the plain default `equal` (whole-value `deepEqual`) — see\n * `traffic-matching-list-form.ts`'s header for the accepted known gap this leaves for a\n * membership-preserving reorder.\n */\nimport type * as trafficMatchingLists from '@distilled.cloud/unifi-network/traffic_matching_lists';\nimport { makeDriftOf } from './drift.ts';\nimport {\n type TrafficMatchingListAttributes,\n type TrafficMatchingListProps,\n attributesOf,\n} from './traffic-matching-list-form.ts';\n\nconst fieldDrift = makeDriftOf<TrafficMatchingListAttributes, TrafficMatchingListProps>([\n { field: 'name', live: (a) => a.name, declared: (p) => p.name },\n { field: 'type', live: (a) => a.type, declared: (p) => p.type },\n { field: 'items', live: (a) => a.items, declared: (p) => p.items },\n]);\n\nexport const matches = (\n attributes: TrafficMatchingListAttributes,\n props: TrafficMatchingListProps,\n): boolean => fieldDrift(attributes, props).length === 0;\n\n/**\n * Per-field live-vs-declared drift straight from one live read — the task's own API\n * (`driftOf(live, props)`), so `homeflare-network`'s pre-import drift check never has to derive\n * `attributesOf` itself just to call this.\n */\nexport const driftOf = (\n live: trafficMatchingLists.TrafficMatchingList,\n props: TrafficMatchingListProps,\n) => fieldDrift(attributesOf(live, props), props);\n",
|
|
37
37
|
"/**\n * Every `Unifi.*` provider as one layer for a stack.\n *\n * Layer.mergeAll(unifiProviders(), …the stack's other providers)\n * .pipe(Layer.provide(FetchHttpClient.layer))\n *\n * S16: a subpath's `providers()` plays the role upstream's own `Providers.ts` does — one minimal\n * insertion per family. `FetchHttpClient.layer` is the stack's own responsibility to provide,\n * mirroring `../discord/providers.ts`.\n */\nimport * as Layer from 'effect/Layer';\nimport { UnifiAclRuleProvider } from './acl-rule.ts';\nimport { UnifiAclRuleOrderingProvider } from './acl-rule-ordering.ts';\nimport { UnifiDnsPolicyProvider } from './dns-policy.ts';\nimport { UnifiFirewallPolicyProvider } from './firewall-policy.ts';\nimport { UnifiFirewallPolicyOrderingProvider } from './firewall-policy-ordering.ts';\nimport { UnifiFirewallZoneProvider } from './firewall-zone.ts';\nimport { UnifiNetworkProvider } from './network.ts';\nimport { UnifiTrafficMatchingListProvider } from './traffic-matching-list.ts';\nimport { UnifiWifiBroadcastProvider } from './wifi-broadcast.ts';\n\nexport const providers = () =>\n Layer.mergeAll(\n UnifiNetworkProvider(),\n UnifiFirewallZoneProvider(),\n UnifiDnsPolicyProvider(),\n UnifiAclRuleProvider(),\n UnifiAclRuleOrderingProvider(),\n UnifiWifiBroadcastProvider(),\n UnifiFirewallPolicyProvider(),\n UnifiFirewallPolicyOrderingProvider(),\n UnifiTrafficMatchingListProvider(),\n );\n"
|
|
38
38
|
],
|
|
39
|
-
"mappings": "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",
|
|
39
|
+
"mappings": "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",
|
|
40
40
|
"debugId": "04975D29327C722564756E2164756E21",
|
|
41
41
|
"names": []
|
|
42
42
|
}
|
package/dist/unifi/network.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `Unifi.Network` — one network on a UniFi Network site,
|
|
2
|
+
* `Unifi.Network` — one network on a UniFi Network site, the ONE family with a write path
|
|
3
|
+
* (`policy.ts` lifts Tim's read-only rule for exactly this update; see `network-update.ts`).
|
|
3
4
|
*
|
|
4
5
|
* ★ WHY NETWORK IS IN THE FIRST IMPORT SET. `getNetworkDetails`/`getNetworksOverviewPage`
|
|
5
6
|
* (`../../distilled-unifi-network/src/services/networks.ts`) is a list+get pair over
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/unifi/network.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/unifi/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAE5F,OAAO,EAAE,KAAK,UAAU,EAA0B,MAAM,oBAAoB,CAAC;AAE7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,KAAK,WAAW,GAAG,QAAQ,CAAC,kBAAkB,GAAG,sBAAsB,GAAG,UAAU,CAAC;AAErF,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,QAAQ,CAC5C,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,KAAK,EACL,iBAAiB,CAClB;CAAG;AAEJ,eAAO,MAAM,YAAY,+CAEvB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,OAAQ,MAAM,SAAS,YAAY,oFACZ,CAAC;AAE5C;;;;GAIG;AACH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,YAAY,CAchE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,UAAW,YAAY,KAAG,YAGxD,CAAC;AAEH,eAAO,MAAM,IAAI,EAAE,SAAS,CAC1B,YAAY,EACZ,QAAQ,CAAC,cAAc,EACvB,iBAAiB,EACjB,QAAQ,CAAC,sBAAsB,EAC/B,WAAW,CAiBZ,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;CAAsB,CAAC;AAE5C,eAAO,MAAM,oBAAoB,yHACkD,CAAC"}
|
package/docs/unifi.md
CHANGED
|
@@ -140,10 +140,10 @@ here performs that write; these two functions are what the script would call.
|
|
|
140
140
|
|
|
141
141
|
UniFi Network Integration API **10.4.57** (OpenAPI 3.1.0, 44 paths), via
|
|
142
142
|
`@distilled.cloud/unifi-network` aliased onto `@homeflare/distilled-unifi-network@0.2.0`
|
|
143
|
-
(`docs/distilled-interim.md`). Traps in the
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
(`docs/distilled-interim.md`). Traps recorded in the distilled package's own `README.md`
|
|
144
|
+
(`packages/distilled-unifi-network`): the whole-object `PUT` is the one trap reachable today, only
|
|
145
|
+
through `Unifi.Network`'s update; the list-replacing ordering endpoints and `removeDevice` (unadopt
|
|
146
|
+
plus factory reset) are reachable from no family — but any future widened write must respect all three.
|
|
147
147
|
|
|
148
148
|
## Spec-version check against the live-measured console (2026-09-24)
|
|
149
149
|
|
|
@@ -191,9 +191,10 @@ attributed, declared or compared. Both declaration renderers and both `matches`
|
|
|
191
191
|
own header. No departure found — nothing in this family needed changing.
|
|
192
192
|
|
|
193
193
|
⚠️ **Correction (2026-09-26, recounted 2026-10-10):** the line above is no longer true as written.
|
|
194
|
-
The family has exactly
|
|
195
|
-
in depth" above): the request-side refusal of a non-GET off the row's allow list,
|
|
196
|
-
response-side refusal of a 3xx answer
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
194
|
+
The family has exactly THREE `Effect.die` call sites, all in `wire-guard.ts`'s guard (see "Defense
|
|
195
|
+
in depth" above): the request-side refusal of a non-GET off the row's allow list, the
|
|
196
|
+
response-side refusal of a 3xx answer, and the redirect backstop that dies when the response URL
|
|
197
|
+
differs from the request URL (a redirect followed despite `manual`). Each raises a NEW defect for
|
|
198
|
+
a failure mode outside every generated SDK operation's declared error union, per
|
|
199
|
+
distilled-doctrine's "classify every die/orDie" — none of the three converts an existing typed
|
|
200
|
+
failure the way `orDie` would. Still no `Effect.orDie` anywhere.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@homeflare/alchemy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"description": "Custom Alchemy providers for Cloudflare, Proxmox, OpenBao, Forgejo, Talos, launchd and Caddy, and a verifier that proves adoptions are no-ops.",
|
|
5
5
|
"homepage": "https://github.com/taslabs-net/homeflare-kit/tree/main/packages/alchemy#readme",
|
|
6
6
|
"bugs": "https://github.com/taslabs-net/homeflare-kit/issues",
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `Environment=` quoting contract, proven against a port of the three parsers a value crosses —
|
|
3
|
+
* container-env-oracle.ts, whose every rule was reproduced with the LIVE podman 5.4.2 system
|
|
4
|
+
* generator and a live systemd 257 unit (2026-10-11/12, `QUADLET_UNIT_DIRS=<dir>
|
|
5
|
+
* /usr/lib/systemd/system-generators/podman-system-generator --dryrun`; artifacts in
|
|
6
|
+
* /tmp/opencode/quadlet-quote/) — not inferred. The port's own header cites each measurement.
|
|
7
|
+
*
|
|
8
|
+
* The TEXT-level contract of the renderer itself (what we emit) is container-env-quote.test.ts;
|
|
9
|
+
* this file is the parser-level proof that what we emit SURVIVES, and that what shipped before
|
|
10
|
+
* did not. container-env-live.test.ts re-validates the port against the real generator wherever
|
|
11
|
+
* one is installed.
|
|
12
|
+
*/
|
|
13
|
+
import { describe, expect, test } from 'bun:test';
|
|
14
|
+
import { environmentLines } from './container-env-quote.ts';
|
|
15
|
+
import { renderContainerFile } from './container-form.ts';
|
|
16
|
+
import { deployed } from './container-env-oracle.ts';
|
|
17
|
+
|
|
18
|
+
// ── The real values this row exists for (homeflare-ct100 commit 53b84c1, grafana.container) ──
|
|
19
|
+
|
|
20
|
+
const VAR = 'GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH';
|
|
21
|
+
const ROLE_PATH =
|
|
22
|
+
"(contains(groups[*], 'Admin') || contains(email, 'tim@schenanigans.com')) && 'GrafanaAdmin'";
|
|
23
|
+
const oracleLines = (value: string): string[] => [
|
|
24
|
+
'Environment=SCOPES=openid',
|
|
25
|
+
`Environment=${VAR}=${value}`,
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
describe('the unquoted renderer (what shipped before) corrupts values through the real chain', () => {
|
|
29
|
+
test('the deployed Grafana expression is truncated at its first space', () => {
|
|
30
|
+
const { env } = deployed(oracleLines(ROLE_PATH));
|
|
31
|
+
expect(env[VAR]).toBe('(contains(groups[*],');
|
|
32
|
+
// Everything after the first space produced no variable of its own here — it is simply gone.
|
|
33
|
+
expect(Object.keys(env).sort()).toEqual([VAR, 'SCOPES']);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('a quoted fragment holding `=` becomes a bogus second variable (measured oracle output)', () => {
|
|
37
|
+
const { env } = deployed(
|
|
38
|
+
oracleLines("contains(groups[*], 'cn=admins,ou=people') && is_member('')"),
|
|
39
|
+
);
|
|
40
|
+
expect(env).toEqual({
|
|
41
|
+
[VAR]: 'contains(groups[*],',
|
|
42
|
+
cn: 'admins,ou=people)',
|
|
43
|
+
SCOPES: 'openid',
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('an unknown escape drops every assignment of its line, silently', () => {
|
|
48
|
+
const { env } = deployed(oracleLines('A=1 B=2\\d C=3'));
|
|
49
|
+
expect(env).toEqual({ SCOPES: 'openid' });
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('a bare % is consumed as a specifier, never literal data', () => {
|
|
53
|
+
const { env, consumed } = deployed(oracleLines('PCT=50%off'));
|
|
54
|
+
expect(consumed).toContain('%o');
|
|
55
|
+
// ⛔ Assert the VALUE the chain produced, not what it is not: `oracleLines` puts the text
|
|
56
|
+
// under VAR, so an `env.PCT` assertion compares `undefined` and can never fail.
|
|
57
|
+
expect(env[VAR]).toBe('PCT=50ff');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('systemd halves $$: the shipped renderer lets `pa$$word` arrive as `pa$word`', () => {
|
|
61
|
+
// Measured 2026-10-12, live systemd 257 unit: the ExecStart word `pa$$word` (no `:` prefix,
|
|
62
|
+
// so variables ARE substituted) folds to `pa$word` — systemd.service(5) §Command lines.
|
|
63
|
+
const { env, consumed } = deployed(oracleLines('pa$$word'));
|
|
64
|
+
expect(env[VAR]).toBe('pa$word');
|
|
65
|
+
expect(consumed).toEqual([]);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('systemd erases braced variables: the shipped renderer lets a braced HOME ref arrive as `ab`', () => {
|
|
69
|
+
// oxlint-disable-next-line no-template-curly-in-string -- `${HOME}` is the measured test data, not a placeholder
|
|
70
|
+
const { env, consumed } = deployed(oracleLines('a${HOME}b'));
|
|
71
|
+
expect(env[VAR]).toBe('ab');
|
|
72
|
+
// oxlint-disable-next-line no-template-curly-in-string -- the consumed record is the literal reference systemd erased
|
|
73
|
+
expect(consumed).toEqual(['${HOME}']);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe('the quoted renderer survives the same chain intact', () => {
|
|
78
|
+
test('the deployed Grafana expression round-trips exactly', () => {
|
|
79
|
+
const lines = environmentLines({
|
|
80
|
+
[VAR]: ROLE_PATH,
|
|
81
|
+
GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_STRICT: 'true',
|
|
82
|
+
}).map(([key, value]) => `${key}=${value}`);
|
|
83
|
+
const { env, consumed } = deployed(lines);
|
|
84
|
+
expect(env).toEqual({
|
|
85
|
+
[VAR]: ROLE_PATH,
|
|
86
|
+
GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_STRICT: 'true',
|
|
87
|
+
});
|
|
88
|
+
expect(consumed).toEqual([]);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('escapes, quotes and percent signs each round-trip to the measured generator output', () => {
|
|
92
|
+
const lines = environmentLines({
|
|
93
|
+
BACKSLASH: 'C:\\path',
|
|
94
|
+
PCT: '50%off',
|
|
95
|
+
QUOTED: 'say "hi"',
|
|
96
|
+
}).map(([key, value]) => `${key}=${value}`);
|
|
97
|
+
const { env, consumed } = deployed(lines);
|
|
98
|
+
expect(env).toEqual({ BACKSLASH: 'C:\\path', PCT: '50%off', QUOTED: 'say "hi"' });
|
|
99
|
+
expect(consumed).toEqual([]);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test('dollars round-trip exactly: bcrypt hashes, braced references and $$ stay data', () => {
|
|
103
|
+
// The live-systemd counterparts of these three arrived corrupted under the shipped renderer
|
|
104
|
+
// (the two tests above); each `$` doubled to `$$` — systemd's literal-dollar escape — makes
|
|
105
|
+
// the fold restore exactly the declared bytes. `$2y$10$abc` is a bcrypt hash prefix: the
|
|
106
|
+
// common real-world `$` value this round trip must hold.
|
|
107
|
+
// oxlint-disable-next-line no-template-curly-in-string -- `${HOME}` is the measured test data, not a placeholder
|
|
108
|
+
const declared = { B: 'a${HOME}b', C: '$2y$10$abc', D: 'pa$$word' };
|
|
109
|
+
const lines = environmentLines(declared).map(([key, value]) => `${key}=${value}`);
|
|
110
|
+
const { env, consumed } = deployed(lines);
|
|
111
|
+
expect(env).toEqual(declared);
|
|
112
|
+
expect(consumed).toEqual([]);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe('renderContainerFile wires the quoting in — end to end through the chain', () => {
|
|
117
|
+
const props = {
|
|
118
|
+
name: 'grafana-primary',
|
|
119
|
+
container: {
|
|
120
|
+
environmentFile: ['/etc/grafana-primary/env'],
|
|
121
|
+
environment: { [VAR]: ROLE_PATH, GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_STRICT: 'true' },
|
|
122
|
+
image: 'docker.io/grafana/grafana:12.2.1',
|
|
123
|
+
network: 'host',
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
test('what the container would receive equals what was declared', () => {
|
|
128
|
+
const envLines = renderContainerFile(props)
|
|
129
|
+
.split('\n')
|
|
130
|
+
.filter((line) => line.startsWith('Environment='));
|
|
131
|
+
const { env, consumed } = deployed(envLines);
|
|
132
|
+
expect(env).toEqual(props.container.environment);
|
|
133
|
+
expect(consumed).toEqual([]);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The LIVE cross-check: the oracle port (container-env-oracle.ts) against the REAL
|
|
3
|
+
* `podman-system-generator`, wherever one is installed — the same dry run that produced every
|
|
4
|
+
* measured `--env` quote in this family's headers (podman 5.4.2, `QUADLET_UNIT_DIRS=<tmpdir>
|
|
5
|
+
* /usr/lib/systemd/system-generators/podman-system-generator --dryrun`, 2026-10-11/12).
|
|
6
|
+
*
|
|
7
|
+
* ★ WHY A TEST AND NOT A ONE-OFF: the pinned bytes in container-env-chain.test.ts hold the
|
|
8
|
+
* contract between re-measurements; this test RE-MEASURES it, on every `bun test`, on any
|
|
9
|
+
* machine with podman's generator. A podman update that changes what the generator emits for
|
|
10
|
+
* these lines fails here first — and the oracle and its pins get re-measured together, not
|
|
11
|
+
* silently left describing an old generator.
|
|
12
|
+
* ⚠️ SKIPS WHERE THE GENERATOR IS ABSENT (CI, macOS): the pinned tests still hold the contract
|
|
13
|
+
* there; a skip is honest about what was not re-measured on that machine, rather than green
|
|
14
|
+
* by assumption.
|
|
15
|
+
* ⛔ NOTHING AT STAKE: `--dryrun` prints the generated unit to stderr and writes nothing — no
|
|
16
|
+
* daemon-reload, no unit start, no image pull, nothing touches a live host.
|
|
17
|
+
*/
|
|
18
|
+
import { describe, expect, test } from 'bun:test';
|
|
19
|
+
import { existsSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
20
|
+
import { tmpdir } from 'node:os';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { renderContainerFile } from './container-form.ts';
|
|
23
|
+
import { quadletEnvArgs } from './container-env-quadlet-oracle.ts';
|
|
24
|
+
|
|
25
|
+
const GENERATOR = '/usr/lib/systemd/system-generators/podman-system-generator';
|
|
26
|
+
|
|
27
|
+
/** Every character class this row measured: `$`, `%`, `"`, `\`, a space, and Grafana's own text. */
|
|
28
|
+
const ENVIRONMENT = {
|
|
29
|
+
// oxlint-disable-next-line no-template-curly-in-string -- `${HOME}` is the measured test data, not a placeholder
|
|
30
|
+
B: 'a${HOME}b',
|
|
31
|
+
BACKSLASH: 'C:\\path',
|
|
32
|
+
C: '$2y$10$abc',
|
|
33
|
+
D: 'pa$$word',
|
|
34
|
+
PCT: '50%off',
|
|
35
|
+
QUOTED: 'say "hi"',
|
|
36
|
+
SPACED: 'a b',
|
|
37
|
+
} as const;
|
|
38
|
+
|
|
39
|
+
/** The dry run's printed unit text (both streams — the generator logs to stderr). */
|
|
40
|
+
const generatedExecStart = async (dir: string, unitDirs: string): Promise<string> => {
|
|
41
|
+
const proc = Bun.spawn([GENERATOR, '--dryrun'], {
|
|
42
|
+
cwd: dir,
|
|
43
|
+
env: { ...process.env, QUADLET_UNIT_DIRS: unitDirs },
|
|
44
|
+
stdout: 'pipe',
|
|
45
|
+
stderr: 'pipe',
|
|
46
|
+
});
|
|
47
|
+
const [out, err] = await Promise.all([
|
|
48
|
+
new Response(proc.stdout).text(),
|
|
49
|
+
new Response(proc.stderr).text(),
|
|
50
|
+
]);
|
|
51
|
+
if ((await proc.exited) !== 0) throw new Error(`generator exited non-zero:\n${out}${err}`);
|
|
52
|
+
const line = [...err.split('\n'), ...out.split('\n')].find((l) => l.startsWith('ExecStart='));
|
|
53
|
+
if (line === undefined) throw new Error(`no ExecStart= in generator output:\n${out}${err}`);
|
|
54
|
+
return line.slice('ExecStart='.length);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
describe('the oracle replays against the live podman generator (when installed)', () => {
|
|
58
|
+
// Quadlet emits the `--env` arguments contiguously, in the .container file's key order, just
|
|
59
|
+
// before the trailing image word (measured, artifacts gen.service / old-gen/gen.out) — so the
|
|
60
|
+
// whole segment is compared at once: content AND order, byte for byte.
|
|
61
|
+
test.skipIf(!existsSync(GENERATOR))(
|
|
62
|
+
'quadlet emits exactly the --env args the oracle models, quoted renderer',
|
|
63
|
+
async () => {
|
|
64
|
+
const image = 'docker.io/library/alpine:3';
|
|
65
|
+
const file = renderContainerFile({
|
|
66
|
+
name: 'dollar',
|
|
67
|
+
container: { image, environment: ENVIRONMENT },
|
|
68
|
+
});
|
|
69
|
+
const envLines = file.split('\n').filter((line) => line.startsWith('Environment='));
|
|
70
|
+
const dir = mkdtempSync(join(tmpdir(), 'hf-quadlet-live-'));
|
|
71
|
+
try {
|
|
72
|
+
writeFileSync(join(dir, 'dollar.container'), file);
|
|
73
|
+
const args = await generatedExecStart(dir, dir);
|
|
74
|
+
const segment = args.slice(args.indexOf('--env '), args.lastIndexOf(' '));
|
|
75
|
+
expect(segment).toBe(
|
|
76
|
+
quadletEnvArgs(envLines)
|
|
77
|
+
.map((arg) => `--env ${arg}`)
|
|
78
|
+
.join(' '),
|
|
79
|
+
);
|
|
80
|
+
} finally {
|
|
81
|
+
rmSync(dir, { recursive: true, force: true });
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// The shipped (unquoted) renderer, through the same live run: parser 1's split and skip must
|
|
87
|
+
// reproduce the corruption the chain tests pin — `TRUNC=a b c` yields one variable, not three.
|
|
88
|
+
test.skipIf(!existsSync(GENERATOR))(
|
|
89
|
+
'quadlet emits exactly the --env args the oracle models, unquoted renderer',
|
|
90
|
+
async () => {
|
|
91
|
+
const lines = [
|
|
92
|
+
'Environment=DOLLAR2=pa$$word',
|
|
93
|
+
'Environment=TRUNC=a b c',
|
|
94
|
+
// oxlint-disable-next-line no-template-curly-in-string -- the measured old-renderer line, not a placeholder
|
|
95
|
+
'Environment=DOLLARBRACE=a${HOME}b',
|
|
96
|
+
];
|
|
97
|
+
const dir = mkdtempSync(join(tmpdir(), 'hf-quadlet-live-'));
|
|
98
|
+
try {
|
|
99
|
+
writeFileSync(
|
|
100
|
+
join(dir, 'old.container'),
|
|
101
|
+
['[Container]', 'Image=docker.io/library/alpine:3', ...lines, ''].join('\n'),
|
|
102
|
+
);
|
|
103
|
+
const args = await generatedExecStart(dir, dir);
|
|
104
|
+
const segment = args.slice(args.indexOf('--env '), args.lastIndexOf(' '));
|
|
105
|
+
expect(segment).toBe(
|
|
106
|
+
quadletEnvArgs(lines)
|
|
107
|
+
.map((arg) => `--env ${arg}`)
|
|
108
|
+
.join(' '),
|
|
109
|
+
);
|
|
110
|
+
} finally {
|
|
111
|
+
rmSync(dir, { recursive: true, force: true });
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
});
|