@homeflare/alchemy 0.38.0 → 0.40.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/README.md +32 -8
- package/dist/ceph/auth-entity.d.ts +34 -0
- package/dist/ceph/auth-entity.d.ts.map +1 -0
- package/dist/ceph/ceph-argv-config.d.ts +10 -0
- package/dist/ceph/ceph-argv-config.d.ts.map +1 -0
- package/dist/ceph/ceph-argv.d.ts +19 -0
- package/dist/ceph/ceph-argv.d.ts.map +1 -0
- package/dist/ceph/ceph-auth-form.d.ts +54 -0
- package/dist/ceph/ceph-auth-form.d.ts.map +1 -0
- package/dist/ceph/ceph-auth-parse.d.ts +56 -0
- package/dist/ceph/ceph-auth-parse.d.ts.map +1 -0
- package/dist/ceph/ceph-auth-reconcile.d.ts +35 -0
- package/dist/ceph/ceph-auth-reconcile.d.ts.map +1 -0
- package/dist/ceph/ceph-config-options.d.ts +23 -0
- package/dist/ceph/ceph-config-options.d.ts.map +1 -0
- package/dist/ceph/ceph-key-leak-assert.d.ts +25 -0
- package/dist/ceph/ceph-key-leak-assert.d.ts.map +1 -0
- package/dist/ceph/ceph-transport.d.ts +37 -0
- package/dist/ceph/ceph-transport.d.ts.map +1 -0
- package/dist/ceph/fake-ceph-dial.d.ts +35 -0
- package/dist/ceph/fake-ceph-dial.d.ts.map +1 -0
- package/dist/ceph/index.d.ts +13 -0
- package/dist/ceph/index.d.ts.map +1 -0
- package/dist/ceph/index.js +1609 -0
- package/dist/ceph/index.js.map +38 -0
- package/dist/forgejo/index.js +4 -2
- package/dist/forgejo/index.js.map +3 -3
- package/dist/forgejo/team-member.d.ts +25 -0
- package/dist/forgejo/team-member.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/index.d.ts +1 -1
- package/dist/proxmox/generated/constraints/index.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/pve-access.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-backup.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-ceph.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-firewall.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-ha.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-metrics.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-notifications.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-replication.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-sdn.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-nodes-ceph.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-nodes-disks.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-nodes-lxc.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-nodes-network.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-nodes-qemu.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-nodes-storage.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-nodes-storage.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-pools.d.ts +1 -1
- package/dist/proxmox/generated/constraints/pve-storage.d.ts +1 -1
- package/dist/proxmox/index.d.ts +14 -3
- package/dist/proxmox/index.d.ts.map +1 -1
- package/dist/proxmox/index.js +574 -133
- package/dist/proxmox/index.js.map +33 -23
- package/dist/proxmox/qemu-form.d.ts +27 -18
- package/dist/proxmox/qemu-form.d.ts.map +1 -1
- package/dist/proxmox/qemu-judge.d.ts +30 -0
- package/dist/proxmox/qemu-judge.d.ts.map +1 -0
- package/dist/proxmox/qemu-lifecycle.d.ts +16 -2
- package/dist/proxmox/qemu-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/qemu-net.d.ts +9 -0
- package/dist/proxmox/qemu-net.d.ts.map +1 -0
- package/dist/proxmox/qemu-props.d.ts +112 -0
- package/dist/proxmox/qemu-props.d.ts.map +1 -0
- package/dist/proxmox/qemu-volume.d.ts +27 -0
- package/dist/proxmox/qemu-volume.d.ts.map +1 -0
- package/dist/proxmox/qemu.d.ts +14 -27
- package/dist/proxmox/qemu.d.ts.map +1 -1
- package/dist/proxmox/storage-download-errors.d.ts +5 -0
- package/dist/proxmox/storage-download-errors.d.ts.map +1 -0
- package/dist/proxmox/storage-download-identity.d.ts +27 -0
- package/dist/proxmox/storage-download-identity.d.ts.map +1 -0
- package/dist/proxmox/storage-download-lifecycle.d.ts +97 -0
- package/dist/proxmox/storage-download-lifecycle.d.ts.map +1 -0
- package/dist/proxmox/storage-download-props.d.ts +36 -0
- package/dist/proxmox/storage-download-props.d.ts.map +1 -0
- package/dist/proxmox/storage-download-task.d.ts +17 -0
- package/dist/proxmox/storage-download-task.d.ts.map +1 -0
- package/dist/proxmox/storage-download.d.ts +44 -0
- package/dist/proxmox/storage-download.d.ts.map +1 -0
- package/dist/talos/credentials-write.d.ts +46 -0
- package/dist/talos/credentials-write.d.ts.map +1 -0
- package/dist/talos/credentials.d.ts +51 -9
- package/dist/talos/credentials.d.ts.map +1 -1
- package/dist/talos/fake-process.d.ts +56 -0
- package/dist/talos/fake-process.d.ts.map +1 -0
- package/dist/talos/index.d.ts +19 -4
- package/dist/talos/index.d.ts.map +1 -1
- package/dist/talos/index.js +357 -173
- package/dist/talos/index.js.map +16 -10
- package/dist/talos/kubeconfig-attrs.d.ts +4 -0
- package/dist/talos/kubeconfig-attrs.d.ts.map +1 -0
- package/dist/talos/kubeconfig.d.ts +41 -23
- package/dist/talos/kubeconfig.d.ts.map +1 -1
- package/dist/talos/machine-config-fixtures.d.ts +60 -0
- package/dist/talos/machine-config-fixtures.d.ts.map +1 -0
- package/dist/talos/machine-config-poll.d.ts +43 -0
- package/dist/talos/machine-config-poll.d.ts.map +1 -0
- package/dist/talos/machine-config-read.d.ts +49 -0
- package/dist/talos/machine-config-read.d.ts.map +1 -0
- package/dist/talos/resource.d.ts +18 -0
- package/dist/talos/resource.d.ts.map +1 -1
- package/dist/talos/talos-bootstrap-etcd.d.ts +38 -0
- package/dist/talos/talos-bootstrap-etcd.d.ts.map +1 -0
- package/dist/talos/talos-bootstrap.d.ts +87 -0
- package/dist/talos/talos-bootstrap.d.ts.map +1 -1
- package/dist/talos/talos-cluster-health.d.ts +43 -1
- package/dist/talos/talos-cluster-health.d.ts.map +1 -1
- package/dist/talos/talos-errors.d.ts +68 -0
- package/dist/talos/talos-errors.d.ts.map +1 -0
- package/dist/talos/talos-machine-config.d.ts +51 -15
- package/dist/talos/talos-machine-config.d.ts.map +1 -1
- package/dist/talos/talosctl.d.ts +7 -0
- package/dist/talos/talosctl.d.ts.map +1 -1
- package/dist/talos/values.d.ts +23 -3
- package/dist/talos/values.d.ts.map +1 -1
- package/dist/telemetry/fake-collector.d.ts +36 -0
- package/dist/telemetry/fake-collector.d.ts.map +1 -0
- package/dist/telemetry/index.d.ts +11 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +223 -0
- package/dist/telemetry/index.js.map +12 -0
- package/dist/telemetry/layer.d.ts +86 -0
- package/dist/telemetry/layer.d.ts.map +1 -0
- package/dist/telemetry/redact-serialization.d.ts +21 -0
- package/dist/telemetry/redact-serialization.d.ts.map +1 -0
- package/dist/telemetry/redact.d.ts +46 -0
- package/dist/telemetry/redact.d.ts.map +1 -0
- package/dist/unifi/acl-rule-drift.d.ts +22 -0
- package/dist/unifi/acl-rule-drift.d.ts.map +1 -0
- package/dist/unifi/acl-rule-form.d.ts +90 -0
- package/dist/unifi/acl-rule-form.d.ts.map +1 -0
- package/dist/unifi/acl-rule-ordering-form.d.ts +49 -0
- package/dist/unifi/acl-rule-ordering-form.d.ts.map +1 -0
- package/dist/unifi/acl-rule-ordering.d.ts +54 -0
- package/dist/unifi/acl-rule-ordering.d.ts.map +1 -0
- package/dist/unifi/acl-rule.d.ts +49 -0
- package/dist/unifi/acl-rule.d.ts.map +1 -0
- package/dist/unifi/dns-policy-drift.d.ts +21 -0
- package/dist/unifi/dns-policy-drift.d.ts.map +1 -0
- package/dist/unifi/dns-policy-form.d.ts +97 -0
- package/dist/unifi/dns-policy-form.d.ts.map +1 -0
- package/dist/unifi/dns-policy.d.ts +55 -0
- package/dist/unifi/dns-policy.d.ts.map +1 -0
- package/dist/unifi/drift.d.ts +27 -0
- package/dist/unifi/drift.d.ts.map +1 -0
- package/dist/unifi/fake-unifi.d.ts +5 -1
- package/dist/unifi/fake-unifi.d.ts.map +1 -1
- package/dist/unifi/firewall-policy-drift.d.ts +26 -0
- package/dist/unifi/firewall-policy-drift.d.ts.map +1 -0
- package/dist/unifi/firewall-policy-form.d.ts +102 -0
- package/dist/unifi/firewall-policy-form.d.ts.map +1 -0
- package/dist/unifi/firewall-policy-ordering-form.d.ts +66 -0
- package/dist/unifi/firewall-policy-ordering-form.d.ts.map +1 -0
- package/dist/unifi/firewall-policy-ordering.d.ts +57 -0
- package/dist/unifi/firewall-policy-ordering.d.ts.map +1 -0
- package/dist/unifi/firewall-policy.d.ts +57 -0
- package/dist/unifi/firewall-policy.d.ts.map +1 -0
- package/dist/unifi/firewall-zone-form.d.ts +6 -0
- package/dist/unifi/firewall-zone-form.d.ts.map +1 -1
- package/dist/unifi/firewall-zone.d.ts +1 -1
- package/dist/unifi/firewall-zone.d.ts.map +1 -1
- package/dist/unifi/index.d.ts +11 -3
- package/dist/unifi/index.d.ts.map +1 -1
- package/dist/unifi/index.js +725 -60
- package/dist/unifi/index.js.map +31 -9
- package/dist/unifi/network-drift.d.ts +26 -0
- package/dist/unifi/network-drift.d.ts.map +1 -0
- package/dist/unifi/network-form.d.ts +40 -7
- package/dist/unifi/network-form.d.ts.map +1 -1
- package/dist/unifi/network.d.ts +1 -0
- package/dist/unifi/network.d.ts.map +1 -1
- package/dist/unifi/paginate.d.ts +24 -0
- package/dist/unifi/paginate.d.ts.map +1 -0
- package/dist/unifi/providers.d.ts +1 -1
- package/dist/unifi/providers.d.ts.map +1 -1
- package/dist/unifi/resource.d.ts +36 -1
- package/dist/unifi/resource.d.ts.map +1 -1
- package/dist/unifi/scan-source.d.ts +11 -0
- package/dist/unifi/scan-source.d.ts.map +1 -0
- package/dist/unifi/traffic-matching-list-drift.d.ts +22 -0
- package/dist/unifi/traffic-matching-list-drift.d.ts.map +1 -0
- package/dist/unifi/traffic-matching-list-form.d.ts +56 -0
- package/dist/unifi/traffic-matching-list-form.d.ts.map +1 -0
- package/dist/unifi/traffic-matching-list.d.ts +51 -0
- package/dist/unifi/traffic-matching-list.d.ts.map +1 -0
- package/dist/unifi/wifi-broadcast-drift.d.ts +22 -0
- package/dist/unifi/wifi-broadcast-drift.d.ts.map +1 -0
- package/dist/unifi/wifi-broadcast-form.d.ts +127 -0
- package/dist/unifi/wifi-broadcast-form.d.ts.map +1 -0
- package/dist/unifi/wifi-broadcast.d.ts +73 -0
- package/dist/unifi/wifi-broadcast.d.ts.map +1 -0
- package/docs/telemetry-spike.md +94 -0
- package/docs/telemetry.md +109 -0
- package/docs/unifi-acl-rule.md +122 -0
- package/docs/unifi-dns-policy.md +75 -0
- package/docs/unifi-firewall-policy.md +109 -0
- package/docs/unifi-traffic-matching-list.md +82 -0
- package/docs/unifi-wifi.md +120 -0
- package/docs/unifi.md +64 -3
- package/package.json +10 -2
- package/src/ceph/auth-entity.ts +74 -0
- package/src/ceph/ceph-argv-config.ts +78 -0
- package/src/ceph/ceph-argv.test.ts +226 -0
- package/src/ceph/ceph-argv.ts +189 -0
- package/src/ceph/ceph-auth-form.test.ts +103 -0
- package/src/ceph/ceph-auth-form.ts +107 -0
- package/src/ceph/ceph-auth-parse.test.ts +155 -0
- package/src/ceph/ceph-auth-parse.ts +121 -0
- package/src/ceph/ceph-auth-reconcile-secrecy.test.ts +82 -0
- package/src/ceph/ceph-auth-reconcile.test.ts +233 -0
- package/src/ceph/ceph-auth-reconcile.ts +119 -0
- package/src/ceph/ceph-config-options.test.ts +44 -0
- package/src/ceph/ceph-config-options.ts +36 -0
- package/src/ceph/ceph-key-leak-assert.ts +35 -0
- package/src/ceph/ceph-no-output-logging.test.ts +52 -0
- package/src/ceph/ceph-transport.test.ts +125 -0
- package/src/ceph/ceph-transport.ts +117 -0
- package/src/ceph/fake-ceph-dial.ts +55 -0
- package/src/ceph/index.ts +12 -0
- package/src/forgejo/team-member.test.ts +14 -0
- package/src/forgejo/team-member.ts +28 -1
- package/src/index.ts +1 -0
- package/src/proxmox/constraints-required.test.ts +1 -0
- package/src/proxmox/generated/constraints/index.ts +3 -1
- package/src/proxmox/generated/constraints/pve-access.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-backup.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-ceph.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-firewall.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-ha.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-metrics.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-notifications.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-replication.ts +1 -1
- package/src/proxmox/generated/constraints/pve-cluster-sdn.ts +1 -1
- package/src/proxmox/generated/constraints/pve-nodes-ceph.ts +1 -1
- package/src/proxmox/generated/constraints/pve-nodes-disks.ts +1 -1
- package/src/proxmox/generated/constraints/pve-nodes-lxc.ts +1 -1
- package/src/proxmox/generated/constraints/pve-nodes-network.ts +1 -1
- package/src/proxmox/generated/constraints/pve-nodes-qemu.ts +1 -1
- package/src/proxmox/generated/constraints/pve-nodes-storage.ts +30 -0
- package/src/proxmox/generated/constraints/pve-pools.ts +1 -1
- package/src/proxmox/generated/constraints/pve-storage.ts +1 -1
- package/src/proxmox/index.test.ts +11 -6
- package/src/proxmox/index.ts +19 -3
- package/src/proxmox/qemu-form.ts +49 -13
- package/src/proxmox/qemu-identity.test.ts +30 -0
- package/src/proxmox/qemu-judge.test.ts +65 -0
- package/src/proxmox/qemu-judge.ts +84 -0
- package/src/proxmox/qemu-lifecycle.test.ts +78 -19
- package/src/proxmox/qemu-lifecycle.ts +131 -32
- package/src/proxmox/qemu-net.test.ts +48 -0
- package/src/proxmox/qemu-net.ts +78 -0
- package/src/proxmox/qemu-ownership.test.ts +44 -0
- package/src/proxmox/qemu-props.test.ts +87 -0
- package/src/proxmox/qemu-props.ts +157 -0
- package/src/proxmox/qemu-volume.test.ts +229 -0
- package/src/proxmox/qemu-volume.ts +178 -0
- package/src/proxmox/qemu.ts +15 -29
- package/src/proxmox/storage-download-errors.ts +7 -0
- package/src/proxmox/storage-download-identity.test.ts +54 -0
- package/src/proxmox/storage-download-identity.ts +50 -0
- package/src/proxmox/storage-download-lifecycle.ts +226 -0
- package/src/proxmox/storage-download-ownership.test.ts +50 -0
- package/src/proxmox/storage-download-props.ts +38 -0
- package/src/proxmox/storage-download-task.ts +72 -0
- package/src/proxmox/storage-download.test.ts +216 -0
- package/src/proxmox/storage-download.ts +58 -0
- package/src/talos/credentials-write.test.ts +81 -0
- package/src/talos/credentials-write.ts +95 -0
- package/src/talos/credentials.test.ts +157 -0
- package/src/talos/credentials.ts +160 -90
- package/src/talos/fake-process.ts +94 -0
- package/src/talos/index.ts +39 -4
- package/src/talos/kubeconfig-attrs.ts +55 -0
- package/src/talos/kubeconfig.test.ts +256 -0
- package/src/talos/kubeconfig.ts +170 -90
- package/src/talos/machine-config-fixtures.ts +86 -0
- package/src/talos/machine-config-poll.test.ts +57 -0
- package/src/talos/machine-config-poll.ts +82 -0
- package/src/talos/machine-config-read.ts +118 -0
- package/src/talos/resource.ts +19 -0
- package/src/talos/secrets-gate.test.ts +63 -0
- package/src/talos/talos-bootstrap-etcd.ts +71 -0
- package/src/talos/talos-bootstrap.test.ts +218 -0
- package/src/talos/talos-bootstrap.ts +151 -45
- package/src/talos/talos-cluster-health.test.ts +143 -0
- package/src/talos/talos-cluster-health.ts +91 -28
- package/src/talos/talos-errors.ts +85 -0
- package/src/talos/talos-machine-config.test.ts +189 -0
- package/src/talos/talos-machine-config.ts +102 -88
- package/src/talos/talosctl.ts +8 -0
- package/src/talos/values.test.ts +34 -6
- package/src/talos/values.ts +41 -7
- package/src/telemetry/fake-collector.ts +59 -0
- package/src/telemetry/http-client-sealing.test.ts +82 -0
- package/src/telemetry/index.ts +10 -0
- package/src/telemetry/layer.test.ts +204 -0
- package/src/telemetry/layer.ts +152 -0
- package/src/telemetry/redact-serialization.ts +178 -0
- package/src/telemetry/redact.test.ts +124 -0
- package/src/telemetry/redact.ts +147 -0
- package/src/unifi/acl-rule-drift.ts +57 -0
- package/src/unifi/acl-rule-form.ts +135 -0
- package/src/unifi/acl-rule-ordering-form.ts +79 -0
- package/src/unifi/acl-rule-ordering.test.ts +141 -0
- package/src/unifi/acl-rule-ordering.ts +70 -0
- package/src/unifi/acl-rule.test.ts +183 -0
- package/src/unifi/acl-rule.ts +61 -0
- package/src/unifi/discriminated-filter-decode.test.ts +134 -0
- package/src/unifi/dns-policy-drift.ts +48 -0
- package/src/unifi/dns-policy-form.ts +142 -0
- package/src/unifi/dns-policy.test.ts +154 -0
- package/src/unifi/dns-policy.ts +67 -0
- package/src/unifi/drift.test.ts +78 -0
- package/src/unifi/drift.ts +56 -0
- package/src/unifi/errors-and-secrets.test.ts +127 -0
- package/src/unifi/fake-unifi.ts +5 -1
- package/src/unifi/firewall-policy-drift.test.ts +151 -0
- package/src/unifi/firewall-policy-drift.ts +55 -0
- package/src/unifi/firewall-policy-filter-roundtrip.test.ts +143 -0
- package/src/unifi/firewall-policy-form.ts +146 -0
- package/src/unifi/firewall-policy-ordering-form.ts +111 -0
- package/src/unifi/firewall-policy-ordering.test.ts +185 -0
- package/src/unifi/firewall-policy-ordering.ts +87 -0
- package/src/unifi/firewall-policy.test.ts +183 -0
- package/src/unifi/firewall-policy.ts +73 -0
- package/src/unifi/firewall-zone-form.ts +31 -2
- package/src/unifi/firewall-zone.test.ts +21 -1
- package/src/unifi/firewall-zone.ts +1 -1
- package/src/unifi/get-only-guard.test.ts +165 -0
- package/src/unifi/index.ts +78 -1
- package/src/unifi/network-drift.test.ts +207 -0
- package/src/unifi/network-drift.ts +80 -0
- package/src/unifi/network-form.ts +11 -39
- package/src/unifi/network.test.ts +7 -82
- package/src/unifi/network.ts +6 -6
- package/src/unifi/paginate.test.ts +252 -0
- package/src/unifi/paginate.ts +141 -0
- package/src/unifi/providers.ts +19 -1
- package/src/unifi/resource.ts +73 -3
- package/src/unifi/scan-source.ts +64 -0
- package/src/unifi/traffic-matching-list-drift.ts +40 -0
- package/src/unifi/traffic-matching-list-form.ts +77 -0
- package/src/unifi/traffic-matching-list.test.ts +202 -0
- package/src/unifi/traffic-matching-list.ts +78 -0
- package/src/unifi/wifi-broadcast-details-call.test.ts +92 -0
- package/src/unifi/wifi-broadcast-drift.ts +69 -0
- package/src/unifi/wifi-broadcast-form.ts +211 -0
- package/src/unifi/wifi-broadcast-secrets.test.ts +145 -0
- package/src/unifi/wifi-broadcast.test.ts +155 -0
- package/src/unifi/wifi-broadcast.ts +90 -0
- package/src/unifi/write-op-reference.test.ts +190 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Unifi.FirewallPolicy`'s wire shape — the declarable subset of `FirewallPolicy` (`getFirewallPolicy`'s
|
|
3
|
+
* own decode target), and how a live read becomes both plan attributes and a rendered declaration.
|
|
4
|
+
* Rule ORDER is a separate resource (`firewall-policy-ordering.ts`, T5) — this file is one policy's
|
|
5
|
+
* own fields only.
|
|
6
|
+
*
|
|
7
|
+
* ★ `source`/`destination`/`ipProtocolScope`/`action`/`schedule` STAY COMPOUND, COMPARED WHOLESALE —
|
|
8
|
+
* post-A3 (`8ee11f1`, "type FirewallPolicy/ACL/TrafficMatchingList filters per discriminator"),
|
|
9
|
+
* these decode as real per-discriminator TS unions instead of `unknown`
|
|
10
|
+
* (`discriminated-filter-decode.test.ts` proves the wire path keeps every key, including one this
|
|
11
|
+
* pinned spec doesn't yet declare), so this file is honest about their real shape rather than
|
|
12
|
+
* casting to `unknown` the way `acl-rule-form.ts` still does for its own opaque filters. It does
|
|
13
|
+
* NOT follow that up with a leaf-by-leaf declarable schema for all 12 filter variants, though:
|
|
14
|
+
* that is new modelling work this PR does not attempt, so each field is compared with plain
|
|
15
|
+
* `deepEqual` (`stripNullish`) as ONE value, same proportion `acl-rule-form.ts`'s
|
|
16
|
+
* `enforcingDeviceFilter` gets (one level of structure, not exploded into scalars).
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ KNOWN GAP (T15, same shape as `acl-rule-form.ts`'s own — accepted, not fixed, here either):
|
|
19
|
+
* several of the vendor's filter variants nested inside `source`/`destination`/`ipProtocolScope`
|
|
20
|
+
* are themselves SET-LIKE arrays with no documented order —
|
|
21
|
+
* `FirewallPolicyMACAddressFilter.macAddresses`, `FirewallPolicyNetworkFilter.networkIds`,
|
|
22
|
+
* `FirewallPolicyApplicationFilter.applicationIds`, `FirewallPolicyIPAddressFilter.items`,
|
|
23
|
+
* `FirewallPolicyRegionFilter.regions`, `FirewallPolicyVPNServerFilter.vpnServerIds`,
|
|
24
|
+
* `FirewallSchedule.repeatOnDays` — `deepEqual` compares every one of them order-sensitively, so a
|
|
25
|
+
* console-side reorder with no membership change would report a spurious drift this read-only
|
|
26
|
+
* family's `reconcile` then refuses forever. Not fixed here for the same reason ACL's own gap
|
|
27
|
+
* isn't: normalizing 12 filter variants' own nested arrays is a bigger, separate change, not a
|
|
28
|
+
* proportional extension of typing per-discriminator (A3) into set-aware comparison too.
|
|
29
|
+
*
|
|
30
|
+
* ⛔ `connectionStateFilter` IS THE ONE TOP-LEVEL PROPS ARRAY, AND IS A SET — "Match on firewall
|
|
31
|
+
* connection state. If null, matches all connection states" describes membership, not a sequence
|
|
32
|
+
* (unlike `firewall-policy-ordering-form.ts`'s own `beforeSystemDefined`/`afterSystemDefined`,
|
|
33
|
+
* where position IS the value). Normalized with the same `sortedSet` every other family in this
|
|
34
|
+
* directory uses for a set-shaped array (`firewall-zone-form.ts`'s `networkIds`,
|
|
35
|
+
* `acl-rule-form.ts`'s `protocolFilter`).
|
|
36
|
+
*
|
|
37
|
+
* ⛔ `index` IS ATTRIBUTES-ONLY, NEVER DECLARED. `CreateFirewallPolicyRequest` has no `index`
|
|
38
|
+
* field at all — the live object's current position among ALL policies on the site is reported,
|
|
39
|
+
* but a policy's PRIORITY relative to its own zone pair is `firewall-policy-ordering.ts`'s concern
|
|
40
|
+
* (`OrderedFirewallPolicyIDs`), same split `acl-rule-form.ts`'s own `index` documents.
|
|
41
|
+
*
|
|
42
|
+
* ⛔ `metadata.origin` IS ATTRIBUTES-ONLY, same split every other family here uses
|
|
43
|
+
* (`firewall-zone-form.ts`'s `metadataOrigin`) — `UserOrSystemDefinedOrDerivedEntityMetadata` is
|
|
44
|
+
* server-derived, no writable field accepts it.
|
|
45
|
+
*/
|
|
46
|
+
import type * as firewall from '@distilled.cloud/unifi-network/firewall';
|
|
47
|
+
/** ★ EXPORTED so `firewall-policy-drift.ts` normalizes both live and declared sides identically —
|
|
48
|
+
* see `acl-rule-form.ts`'s own header for why a normalizer applied to only one side is a bug
|
|
49
|
+
* class (MEDIUM-4). */
|
|
50
|
+
export declare const normalizeConnectionStateFilter: (value: readonly string[] | undefined) => string[] | undefined;
|
|
51
|
+
/** ⚠️ EVERY OPTIONAL FIELD SPELLS OUT `| undefined` — `exactOptionalPropertyTypes`; see
|
|
52
|
+
* `network-form.ts`'s own header. */
|
|
53
|
+
export interface FirewallPolicyProps {
|
|
54
|
+
siteId: string;
|
|
55
|
+
firewallPolicyId: string;
|
|
56
|
+
action: firewall.FirewallPolicyAction;
|
|
57
|
+
/** Connection states this policy matches — compared as a SET, see the header. */
|
|
58
|
+
connectionStateFilter?: string[] | undefined;
|
|
59
|
+
description?: string | undefined;
|
|
60
|
+
/** Traffic destination — compound, compared wholesale; see the header's known gap. */
|
|
61
|
+
destination: firewall.FirewallPolicyDestination;
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
/** IP version + protocol scope — compound, compared wholesale; see the header's known gap. */
|
|
64
|
+
ipProtocolScope: firewall.FirewallPolicyIPProtocolScope;
|
|
65
|
+
ipsecFilter?: string | undefined;
|
|
66
|
+
loggingEnabled: boolean;
|
|
67
|
+
name: string;
|
|
68
|
+
/** Schedule this policy is active on — compound, compared wholesale; see the header's known gap. */
|
|
69
|
+
schedule?: firewall.FirewallSchedule | undefined;
|
|
70
|
+
/** Traffic source — compound, compared wholesale; see the header's known gap. */
|
|
71
|
+
source: firewall.FirewallPolicySource;
|
|
72
|
+
}
|
|
73
|
+
export interface FirewallPolicyAttributes {
|
|
74
|
+
siteId: string;
|
|
75
|
+
firewallPolicyId: string;
|
|
76
|
+
action: firewall.FirewallPolicyAction;
|
|
77
|
+
connectionStateFilter: string[] | undefined;
|
|
78
|
+
description: string | undefined;
|
|
79
|
+
destination: firewall.FirewallPolicyDestination;
|
|
80
|
+
enabled: boolean;
|
|
81
|
+
/** Current position among ALL policies on the site — server-derived, never declared; see header. */
|
|
82
|
+
index: number;
|
|
83
|
+
ipProtocolScope: firewall.FirewallPolicyIPProtocolScope;
|
|
84
|
+
ipsecFilter: string | undefined;
|
|
85
|
+
loggingEnabled: boolean;
|
|
86
|
+
name: string;
|
|
87
|
+
schedule: firewall.FirewallSchedule | undefined;
|
|
88
|
+
source: firewall.FirewallPolicySource;
|
|
89
|
+
/** `metadata.origin` — server-derived, never declared; see `firewall-zone-form.ts`'s own. */
|
|
90
|
+
metadataOrigin: string;
|
|
91
|
+
}
|
|
92
|
+
export declare const attributesOf: (live: firewall.FirewallPolicy, props: FirewallPolicyProps) => FirewallPolicyAttributes;
|
|
93
|
+
/**
|
|
94
|
+
* The declaration renderer (task spec: "given one live object, return the props a declaration
|
|
95
|
+
* needs so its plan is noop"). A later import script feeds `getFirewallPolicy`'s own response
|
|
96
|
+
* straight in and writes the result as `firewallPolicy('<id>', declareFirewallPolicy(live, siteId))`
|
|
97
|
+
* — no field is invented or defaulted beyond what `attributesOf` already reports, so
|
|
98
|
+
* `matches(attributesOf(live, props), declareFirewallPolicy(live, siteId))` is `true` by
|
|
99
|
+
* construction (`firewall-policy.test.ts` proves it).
|
|
100
|
+
*/
|
|
101
|
+
export declare const declareFirewallPolicy: (live: firewall.FirewallPolicy, siteId: string) => FirewallPolicyProps;
|
|
102
|
+
//# sourceMappingURL=firewall-policy-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firewall-policy-form.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-policy-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AAIzE;;wBAEwB;AACxB,eAAO,MAAM,8BAA8B,UAClC,SAAS,MAAM,EAAE,GAAG,SAAS,KACnC,MAAM,EAAE,GAAG,SAA2D,CAAC;AAE1E;sCACsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACtC,iFAAiF;IACjF,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,sFAAsF;IACtF,WAAW,EAAE,QAAQ,CAAC,yBAAyB,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,8FAA8F;IAC9F,eAAe,EAAE,QAAQ,CAAC,6BAA6B,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,oGAAoG;IACpG,QAAQ,CAAC,EAAE,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACjD,iFAAiF;IACjF,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACtC,qBAAqB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,QAAQ,CAAC,yBAAyB,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,oGAAoG;IACpG,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,QAAQ,CAAC,6BAA6B,CAAC;IACxD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACtC,6FAA6F;IAC7F,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,SACjB,QAAQ,CAAC,cAAc,SACtB,mBAAmB,KACzB,wBAgBD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,SAC1B,QAAQ,CAAC,cAAc,UACrB,MAAM,KACb,mBAcD,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Unifi.FirewallPolicyOrdering`'s wire shape — ONE resource per `(sourceFirewallZoneId,
|
|
3
|
+
* destinationFirewallZoneId)` ZONE PAIR (`getFirewallPolicyOrdering`'s own scope, `GET
|
|
4
|
+
* /v1/sites/{siteId}/firewall/policies/ordering?sourceFirewallZoneId=…&destinationFirewallZoneId=…`),
|
|
5
|
+
* not per policy and not site-wide. Compare with `acl-rule-ordering-form.ts`'s own header: ACL rule
|
|
6
|
+
* order is ONE list for the whole site because ACL rules have no zone concept; firewall policies are
|
|
7
|
+
* scoped to a zone pair (`firewall-zone.ts`'s own `Unifi.FirewallZone`), so the vendor keys ordering
|
|
8
|
+
* the same way — a console can have as many `Unifi.FirewallPolicyOrdering` resources as it has
|
|
9
|
+
* zone pairs with at least one user-defined policy between them.
|
|
10
|
+
*
|
|
11
|
+
* ⛔ T5 — `beforeSystemDefined`/`afterSystemDefined` ARE EACH A SEQUENCE, NEVER RUN THROUGH
|
|
12
|
+
* `sortedSet`. `OrderedFirewallPolicyIDs`' own shape splits a zone pair's user-defined policies
|
|
13
|
+
* into the ones ordered BEFORE the system-defined policies and the ones ordered AFTER them —
|
|
14
|
+
* within each half, position is priority, the same "lower index/earlier position wins" reasoning
|
|
15
|
+
* `acl-rule-ordering-form.ts` gives for `orderedAclRuleIds`. `drift.ts`'s `defaultEqual`
|
|
16
|
+
* (`deepEqual`) already compares arrays element-by-element without sorting them, so leaving both
|
|
17
|
+
* fields un-normalized is what makes the comparison order-sensitive, not an oversight.
|
|
18
|
+
*
|
|
19
|
+
* ★ TWO SEQUENCES, NOT ONE — the one real difference from `acl-rule-ordering-form.ts`'s single
|
|
20
|
+
* `orderedAclRuleIds`. A policy ordered "before system-defined" and one ordered "after" can never
|
|
21
|
+
* swap sides through this endpoint (there is no single combined list position that would let one
|
|
22
|
+
* policy move from one half to the other) — `matches`/`driftOf` below compare each half
|
|
23
|
+
* independently, so a policy moving from `beforeSystemDefined` to `afterSystemDefined` reports as
|
|
24
|
+
* drift on BOTH fields, not a single reordering of one array.
|
|
25
|
+
*
|
|
26
|
+
* ★ `makeDriftOf`, NO CUSTOM `equal` — same framework every other family's `matches`/`driftOf`
|
|
27
|
+
* share (MEDIUM-4). Its default `deepEqual` is already order-sensitive for arrays, so the absence
|
|
28
|
+
* of a custom `equal` here is itself the "never sortedSet" rule in force, exactly as
|
|
29
|
+
* `acl-rule-ordering-form.ts`'s own header explains for its one field.
|
|
30
|
+
*/
|
|
31
|
+
import type * as firewall from '@distilled.cloud/unifi-network/firewall';
|
|
32
|
+
export interface FirewallPolicyOrderingProps {
|
|
33
|
+
siteId: string;
|
|
34
|
+
sourceFirewallZoneId: string;
|
|
35
|
+
destinationFirewallZoneId: string;
|
|
36
|
+
/** Policy IDs ordered before the zone pair's system-defined policies, highest priority first —
|
|
37
|
+
* never compared as a set (see header). */
|
|
38
|
+
beforeSystemDefined: string[];
|
|
39
|
+
/** Policy IDs ordered after the zone pair's system-defined policies, highest priority first —
|
|
40
|
+
* never compared as a set (see header). */
|
|
41
|
+
afterSystemDefined: string[];
|
|
42
|
+
}
|
|
43
|
+
export interface FirewallPolicyOrderingAttributes {
|
|
44
|
+
siteId: string;
|
|
45
|
+
sourceFirewallZoneId: string;
|
|
46
|
+
destinationFirewallZoneId: string;
|
|
47
|
+
beforeSystemDefined: string[];
|
|
48
|
+
afterSystemDefined: string[];
|
|
49
|
+
}
|
|
50
|
+
export declare const attributesOf: (live: firewall.IntegrationFirewallPolicyOrderingDto, props: FirewallPolicyOrderingProps) => FirewallPolicyOrderingAttributes;
|
|
51
|
+
/**
|
|
52
|
+
* The declaration renderer (task spec: "given one live object, return the props a declaration
|
|
53
|
+
* needs so its plan is noop"). A later import script feeds `getFirewallPolicyOrdering`'s own
|
|
54
|
+
* response straight in and writes the result as `firewallPolicyOrdering('<id>',
|
|
55
|
+
* declareFirewallPolicyOrdering(live, siteId, sourceZoneId, destZoneId))` —
|
|
56
|
+
* `matches(attributesOf(live, props), declareFirewallPolicyOrdering(live, …))` is `true` by
|
|
57
|
+
* construction (`firewall-policy-ordering.test.ts` proves it).
|
|
58
|
+
*/
|
|
59
|
+
export declare const declareFirewallPolicyOrdering: (live: firewall.IntegrationFirewallPolicyOrderingDto, siteId: string, sourceFirewallZoneId: string, destinationFirewallZoneId: string) => FirewallPolicyOrderingProps;
|
|
60
|
+
export declare const matches: (attributes: FirewallPolicyOrderingAttributes, props: FirewallPolicyOrderingProps) => boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Per-field live-vs-declared drift straight from one live read — the task's own API
|
|
63
|
+
* (`driftOf(live, props)`).
|
|
64
|
+
*/
|
|
65
|
+
export declare const driftOf: (live: firewall.IntegrationFirewallPolicyOrderingDto, props: FirewallPolicyOrderingProps) => import("./drift.ts").FieldDrift[];
|
|
66
|
+
//# sourceMappingURL=firewall-policy-ordering-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firewall-policy-ordering-form.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-policy-ordering-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AAGzE,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC;gDAC4C;IAC5C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;gDAC4C;IAC5C,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,SACjB,QAAQ,CAAC,oCAAoC,SAC5C,2BAA2B,KACjC,gCAMD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,SAClC,QAAQ,CAAC,oCAAoC,UAC3C,MAAM,wBACQ,MAAM,6BACD,MAAM,KAChC,2BAMD,CAAC;AAeH,eAAO,MAAM,OAAO,eACN,gCAAgC,SACrC,2BAA2B,KACjC,OAAqD,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,OAAO,SACZ,QAAQ,CAAC,oCAAoC,SAC5C,2BAA2B,sCACa,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Unifi.FirewallPolicyOrdering` — the ordered `before`/`afterSystemDefined` policy-id lists for
|
|
3
|
+
* ONE `(sourceFirewallZoneId, destinationFirewallZoneId)` zone pair (`getFirewallPolicyOrdering`,
|
|
4
|
+
* `GET /v1/sites/{siteId}/firewall/policies/ordering`), READ-ONLY (`policy.ts`). T5/I4's per-family
|
|
5
|
+
* variant: `docs/unifi.md`'s own header named this "a future `Unifi.FirewallPolicyOrdering`" as a
|
|
6
|
+
* separate, bigger PR (see `acl-rule-ordering.ts`'s header for the same forward reference, now
|
|
7
|
+
* resolved) — this is that resource.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ NOT ONE OBJECT PER SITE, UNLIKE `acl-rule-ordering.ts` — the identity is the TRIPLE
|
|
10
|
+
* `(siteId, sourceFirewallZoneId, destinationFirewallZoneId)`, both zone ids passed as QUERY
|
|
11
|
+
* parameters on the same path every time (`firewall.ts`'s `GetFirewallPolicyOrderingRequest`).
|
|
12
|
+
* There is no "list every zone pair with an ordering" endpoint — a caller (a future Lane C import)
|
|
13
|
+
* has to already know which pairs exist, typically by walking `firewall.getFirewallPolicies`
|
|
14
|
+
* (T9's own 424-live-policy scale — B0b's `pageAll`, see `firewall-policy.test.ts`'s own decode
|
|
15
|
+
* proof) and grouping by each policy's `source.zoneId`/`destination.zoneId`. Nothing here performs
|
|
16
|
+
* that discovery — this resource is one already-known pair's ordering, same as
|
|
17
|
+
* `firewall-policy.ts`/`acl-rule.ts` are one already-known object's own fields.
|
|
18
|
+
*/
|
|
19
|
+
import { Resource } from 'alchemy';
|
|
20
|
+
import * as Provider from 'alchemy/Provider';
|
|
21
|
+
import * as firewall from '@distilled.cloud/unifi-network/firewall';
|
|
22
|
+
import * as Effect from 'effect/Effect';
|
|
23
|
+
import { type FirewallPolicyOrderingAttributes, type FirewallPolicyOrderingProps } from './firewall-policy-ordering-form.ts';
|
|
24
|
+
import type { UnifiRequirements, UnifiSpec } from './resource.ts';
|
|
25
|
+
export type { FirewallPolicyOrderingAttributes, FirewallPolicyOrderingProps, } from './firewall-policy-ordering-form.ts';
|
|
26
|
+
export { declareFirewallPolicyOrdering, driftOf } from './firewall-policy-ordering-form.ts';
|
|
27
|
+
export interface UnifiFirewallPolicyOrdering extends Resource<'Unifi.FirewallPolicyOrdering', FirewallPolicyOrderingProps, FirewallPolicyOrderingAttributes, never, UnifiRequirements> {
|
|
28
|
+
}
|
|
29
|
+
export declare const UnifiFirewallPolicyOrdering: import("alchemy").ResourceClass<UnifiFirewallPolicyOrdering>;
|
|
30
|
+
/** `firewallPolicyOrdering('iot-to-external', props)` — `adopt(true)` piped on by default (H5); see
|
|
31
|
+
* `network.ts`. */
|
|
32
|
+
export declare const firewallPolicyOrdering: (id: string, props: FirewallPolicyOrderingProps) => Effect.Effect<UnifiFirewallPolicyOrdering, never, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
33
|
+
/** ★ EXPORTED for direct testing against a fake `Credentials` layer — see `network.ts`'s own. */
|
|
34
|
+
export declare const spec: UnifiSpec<FirewallPolicyOrderingProps, firewall.IntegrationFirewallPolicyOrderingDto, FirewallPolicyOrderingAttributes, firewall.GetFirewallPolicyOrderingError>;
|
|
35
|
+
export declare const handlers: {
|
|
36
|
+
list: () => Effect.Effect<never[], never, never>;
|
|
37
|
+
read: (args: {
|
|
38
|
+
olds: FirewallPolicyOrderingProps;
|
|
39
|
+
output: FirewallPolicyOrderingAttributes | undefined;
|
|
40
|
+
}) => Effect.Effect<FirewallPolicyOrderingAttributes | undefined, firewall.UnifiNetworkOpError, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
41
|
+
diff: (args: {
|
|
42
|
+
news: import("alchemy").Input<FirewallPolicyOrderingProps>;
|
|
43
|
+
output: FirewallPolicyOrderingAttributes | undefined;
|
|
44
|
+
}) => Effect.Effect<{
|
|
45
|
+
readonly action: 'update';
|
|
46
|
+
} | {
|
|
47
|
+
readonly action: 'noop';
|
|
48
|
+
} | undefined, firewall.UnifiNetworkOpError, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
49
|
+
reconcile: (args: {
|
|
50
|
+
news: FirewallPolicyOrderingProps;
|
|
51
|
+
}) => Effect.Effect<FirewallPolicyOrderingAttributes, import("./policy.ts").UnifiWriteRefused | firewall.UnifiNetworkOpError, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
52
|
+
delete: (args: {
|
|
53
|
+
olds: FirewallPolicyOrderingProps;
|
|
54
|
+
}) => Effect.Effect<never, import("./policy.ts").UnifiWriteRefused, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
55
|
+
};
|
|
56
|
+
export declare const UnifiFirewallPolicyOrderingProvider: () => import("effect/Layer").Layer<Provider.Provider<UnifiFirewallPolicyOrdering>, never, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
57
|
+
//# sourceMappingURL=firewall-policy-ordering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firewall-policy-ordering.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-policy-ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;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,EACL,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAGjC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGlE,YAAY,EACV,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,6BAA6B,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAE5F,MAAM,WAAW,2BAA4B,SAAQ,QAAQ,CAC3D,8BAA8B,EAC9B,2BAA2B,EAC3B,gCAAgC,EAChC,KAAK,EACL,iBAAiB,CAClB;CAAG;AAEJ,eAAO,MAAM,2BAA2B,8DAGvC,CAAC;AAEF;oBACoB;AACpB,eAAO,MAAM,sBAAsB,OAAQ,MAAM,SAAS,2BAA2B,4GAC3B,CAAC;AAE3D,iGAAiG;AACjG,eAAO,MAAM,IAAI,EAAE,SAAS,CAC1B,2BAA2B,EAC3B,QAAQ,CAAC,oCAAoC,EAC7C,gCAAgC,EAChC,QAAQ,CAAC,8BAA8B,CAiBxC,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;CAAsB,CAAC;AAE5C,eAAO,MAAM,mCAAmC,iJAI7C,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Unifi.FirewallPolicy` — one firewall policy on a UniFi Network site, READ-ONLY (`policy.ts`).
|
|
3
|
+
* `Unifi.FirewallPolicyOrdering` (`firewall-policy-ordering.ts`) is the sibling resource for policy
|
|
4
|
+
* ORDER within a zone pair (T5) — one per `(sourceFirewallZoneId, destinationFirewallZoneId)`, never
|
|
5
|
+
* this file's concern. `docs/unifi.md`'s own header names this pair as "a bigger, separate PR";
|
|
6
|
+
* this is that PR — see `docs/unifi-firewall-policy.md` for the full breakdown.
|
|
7
|
+
*
|
|
8
|
+
* ★ T11 GATE, CHECKED 2026-09-26: the `Firewall` tag's 13 operations (5 already covered for
|
|
9
|
+
* `Unifi.FirewallZone` in `docs/unifi.md`, 8 new here for `FirewallPolicy` — `getFirewallPolicies`,
|
|
10
|
+
* `createFirewallPolicy`, `getFirewallPolicyOrdering`, `updateFirewallPolicyOrdering`,
|
|
11
|
+
* `deleteFirewallPolicy`, `getFirewallPolicy`, `patchFirewallPolicy`, `updateFirewallPolicy`) are
|
|
12
|
+
* byte-identical between 10.4.57 and 10.6.97, full raw operation objects; the 106-schema closure
|
|
13
|
+
* reachable from all 13 (`$ref` + `discriminator.mapping`) shares zero names with the 14 schemas
|
|
14
|
+
* that DID change elsewhere in the document. Corroborated independently by the A3 changeset's own
|
|
15
|
+
* broader 25-operation/139-schema re-check (`.changeset/unifi-network-a3-typed-discriminator-filters.md`).
|
|
16
|
+
* Full breakdown: `docs/unifi-firewall-policy.md`.
|
|
17
|
+
*/
|
|
18
|
+
import { Resource } from 'alchemy';
|
|
19
|
+
import * as Provider from 'alchemy/Provider';
|
|
20
|
+
import * as firewall from '@distilled.cloud/unifi-network/firewall';
|
|
21
|
+
import * as Effect from 'effect/Effect';
|
|
22
|
+
import { type FirewallPolicyAttributes, type FirewallPolicyProps } from './firewall-policy-form.ts';
|
|
23
|
+
import type { UnifiRequirements, UnifiSpec } from './resource.ts';
|
|
24
|
+
export type { FirewallPolicyAttributes, FirewallPolicyProps } from './firewall-policy-form.ts';
|
|
25
|
+
export { declareFirewallPolicy } from './firewall-policy-form.ts';
|
|
26
|
+
export { driftOf } from './firewall-policy-drift.ts';
|
|
27
|
+
export interface UnifiFirewallPolicy extends Resource<'Unifi.FirewallPolicy', FirewallPolicyProps, FirewallPolicyAttributes, never, UnifiRequirements> {
|
|
28
|
+
}
|
|
29
|
+
export declare const UnifiFirewallPolicy: import("alchemy").ResourceClass<UnifiFirewallPolicy>;
|
|
30
|
+
/** `firewallPolicy('block-iot-wan', props)` — `adopt(true)` piped on by default (H5); see
|
|
31
|
+
* `network.ts`. */
|
|
32
|
+
export declare const firewallPolicy: (id: string, props: FirewallPolicyProps) => Effect.Effect<UnifiFirewallPolicy, never, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
33
|
+
/** ★ EXPORTED for direct testing against a fake `Credentials` layer — see `network.ts`'s own. */
|
|
34
|
+
export declare const spec: UnifiSpec<FirewallPolicyProps, firewall.FirewallPolicy, FirewallPolicyAttributes, firewall.GetFirewallPolicyError>;
|
|
35
|
+
export declare const handlers: {
|
|
36
|
+
list: () => Effect.Effect<never[], never, never>;
|
|
37
|
+
read: (args: {
|
|
38
|
+
olds: FirewallPolicyProps;
|
|
39
|
+
output: FirewallPolicyAttributes | undefined;
|
|
40
|
+
}) => Effect.Effect<FirewallPolicyAttributes | undefined, firewall.UnifiNetworkOpError, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
41
|
+
diff: (args: {
|
|
42
|
+
news: import("alchemy").Input<FirewallPolicyProps>;
|
|
43
|
+
output: FirewallPolicyAttributes | undefined;
|
|
44
|
+
}) => Effect.Effect<{
|
|
45
|
+
readonly action: 'update';
|
|
46
|
+
} | {
|
|
47
|
+
readonly action: 'noop';
|
|
48
|
+
} | undefined, firewall.UnifiNetworkOpError, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
49
|
+
reconcile: (args: {
|
|
50
|
+
news: FirewallPolicyProps;
|
|
51
|
+
}) => Effect.Effect<FirewallPolicyAttributes, import("./policy.ts").UnifiWriteRefused | firewall.UnifiNetworkOpError, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
52
|
+
delete: (args: {
|
|
53
|
+
olds: FirewallPolicyProps;
|
|
54
|
+
}) => Effect.Effect<never, import("./policy.ts").UnifiWriteRefused, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
55
|
+
};
|
|
56
|
+
export declare const UnifiFirewallPolicyProvider: () => import("effect/Layer").Layer<Provider.Provider<UnifiFirewallPolicy>, never, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
57
|
+
//# sourceMappingURL=firewall-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firewall-policy.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;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,EACL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGlE,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,MAAM,WAAW,mBAAoB,SAAQ,QAAQ,CACnD,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,EACL,iBAAiB,CAClB;CAAG;AAEJ,eAAO,MAAM,mBAAmB,sDAE9B,CAAC;AAEH;oBACoB;AACpB,eAAO,MAAM,cAAc,OAAQ,MAAM,SAAS,mBAAmB,oGACnB,CAAC;AAEnD,iGAAiG;AACjG,eAAO,MAAM,IAAI,EAAE,SAAS,CAC1B,mBAAmB,EACnB,QAAQ,CAAC,cAAc,EACvB,wBAAwB,EACxB,QAAQ,CAAC,sBAAsB,CAUhC,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;CAAsB,CAAC;AAE5C,eAAO,MAAM,2BAA2B,yIACyD,CAAC"}
|
|
@@ -31,6 +31,12 @@ export interface FirewallZoneAttributes {
|
|
|
31
31
|
}
|
|
32
32
|
export declare const attributesOf: (live: firewall.FirewallZone, props: FirewallZoneProps) => FirewallZoneAttributes;
|
|
33
33
|
export declare const matches: (attributes: FirewallZoneAttributes, props: FirewallZoneProps) => boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Per-field live-vs-declared drift straight from one live read — the task's own API
|
|
36
|
+
* (`driftOf(live, props)`), so `homeflare-network`'s pre-import drift check never has to derive
|
|
37
|
+
* `attributesOf` itself just to call this.
|
|
38
|
+
*/
|
|
39
|
+
export declare const driftOf: (live: firewall.FirewallZone, props: FirewallZoneProps) => import("./drift.ts").FieldDrift[];
|
|
34
40
|
/**
|
|
35
41
|
* The declaration renderer (task spec: "given one live object, return the props a declaration
|
|
36
42
|
* needs so its plan is noop"). `matches(attributesOf(live, props), declareFirewallZone(live,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firewall-zone-form.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-zone-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"firewall-zone-form.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-zone-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB;AAID,eAAO,MAAM,YAAY,SACjB,QAAQ,CAAC,YAAY,SACpB,iBAAiB,KACvB,sBAMD,CAAC;AAuBH,eAAO,MAAM,OAAO,eAAgB,sBAAsB,SAAS,iBAAiB,KAAG,OAC3C,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,OAAO,SAAU,QAAQ,CAAC,YAAY,SAAS,iBAAiB,sCAC/B,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,SACxB,QAAQ,CAAC,YAAY,UACnB,MAAM,KACb,iBAKD,CAAC"}
|
|
@@ -17,7 +17,7 @@ import * as Effect from 'effect/Effect';
|
|
|
17
17
|
import { type FirewallZoneAttributes, type FirewallZoneProps } from './firewall-zone-form.ts';
|
|
18
18
|
import type { UnifiRequirements, UnifiSpec } from './resource.ts';
|
|
19
19
|
export type { FirewallZoneAttributes, FirewallZoneProps } from './firewall-zone-form.ts';
|
|
20
|
-
export { declareFirewallZone } from './firewall-zone-form.ts';
|
|
20
|
+
export { declareFirewallZone, driftOf } from './firewall-zone-form.ts';
|
|
21
21
|
export interface UnifiFirewallZone extends Resource<'Unifi.FirewallZone', FirewallZoneProps, FirewallZoneAttributes, never, UnifiRequirements> {
|
|
22
22
|
}
|
|
23
23
|
export declare const UnifiFirewallZone: import("alchemy").ResourceClass<UnifiFirewallZone>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firewall-zone.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-zone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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,EACL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EAGvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGlE,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"firewall-zone.d.ts","sourceRoot":"","sources":["../../src/unifi/firewall-zone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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,EACL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EAGvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGlE,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvE,MAAM,WAAW,iBAAkB,SAAQ,QAAQ,CACjD,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,EACL,iBAAiB,CAClB;CAAG;AAEJ,eAAO,MAAM,iBAAiB,oDAE5B,CAAC;AAEH,+FAA+F;AAC/F,eAAO,MAAM,YAAY,OAAQ,MAAM,SAAS,iBAAiB,kGACjB,CAAC;AAEjD,iGAAiG;AACjG,eAAO,MAAM,IAAI,EAAE,SAAS,CAC1B,iBAAiB,EACjB,QAAQ,CAAC,YAAY,EACrB,sBAAsB,EACtB,QAAQ,CAAC,oBAAoB,CAU9B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;CAAsB,CAAC;AAE5C,eAAO,MAAM,yBAAyB,uIACuD,CAAC"}
|
package/dist/unifi/index.d.ts
CHANGED
|
@@ -6,8 +6,16 @@
|
|
|
6
6
|
* not depend on — mirrors `../netbox/index.ts`.
|
|
7
7
|
*/
|
|
8
8
|
export { UNIFI_READ_ONLY_POLICY, UnifiWriteRefused, type UnifiWriteAction } from './policy.ts';
|
|
9
|
-
export type
|
|
10
|
-
export
|
|
11
|
-
export {
|
|
9
|
+
export { GetOnlyHttpClient, UnifiNonGetRequest, type UnifiRequirements, type UnifiSpec, } from './resource.ts';
|
|
10
|
+
export type { FieldDrift } from './drift.ts';
|
|
11
|
+
export { UnifiNetwork, UnifiNetworkProvider, declareNetwork, network, type NetworkAttributes, type NetworkProps, driftOf as networkDriftOf, } from './network.ts';
|
|
12
|
+
export { UnifiFirewallZone, UnifiFirewallZoneProvider, declareFirewallZone, firewallZone, type FirewallZoneAttributes, type FirewallZoneProps, driftOf as firewallZoneDriftOf, } from './firewall-zone.ts';
|
|
13
|
+
export { UnifiDnsPolicy, UnifiDnsPolicyProvider, declareDnsPolicy, dnsPolicy, type DnsPolicyAttributes, type DnsPolicyProps, driftOf as dnsPolicyDriftOf, } from './dns-policy.ts';
|
|
14
|
+
export { UnifiAclRule, UnifiAclRuleProvider, aclRule, declareAclRule, type AclRuleAttributes, type AclRuleProps, driftOf as aclRuleDriftOf, } from './acl-rule.ts';
|
|
15
|
+
export { UnifiAclRuleOrdering, UnifiAclRuleOrderingProvider, aclRuleOrdering, declareAclRuleOrdering, type AclRuleOrderingAttributes, type AclRuleOrderingProps, driftOf as aclRuleOrderingDriftOf, } from './acl-rule-ordering.ts';
|
|
16
|
+
export { UnifiWifiBroadcast, UnifiWifiBroadcastProvider, declareWifiBroadcast, wifiBroadcast, type WifiBroadcastAttributes, type WifiBroadcastProps, driftOf as wifiBroadcastDriftOf, } from './wifi-broadcast.ts';
|
|
17
|
+
export { UnifiFirewallPolicy, UnifiFirewallPolicyProvider, declareFirewallPolicy, firewallPolicy, type FirewallPolicyAttributes, type FirewallPolicyProps, driftOf as firewallPolicyDriftOf, } from './firewall-policy.ts';
|
|
18
|
+
export { UnifiFirewallPolicyOrdering, UnifiFirewallPolicyOrderingProvider, declareFirewallPolicyOrdering, firewallPolicyOrdering, type FirewallPolicyOrderingAttributes, type FirewallPolicyOrderingProps, driftOf as firewallPolicyOrderingDriftOf, } from './firewall-policy-ordering.ts';
|
|
19
|
+
export { UnifiTrafficMatchingList, UnifiTrafficMatchingListProvider, declareTrafficMatchingList, trafficMatchingList, type TrafficMatchingListAttributes, type TrafficMatchingListProps, driftOf as trafficMatchingListDriftOf, } from './traffic-matching-list.ts';
|
|
12
20
|
export { providers } from './providers.ts';
|
|
13
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/unifi/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/F,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/unifi/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAIL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,SAAS,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAIjB,OAAO,IAAI,cAAc,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,YAAY,EACZ,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,OAAO,IAAI,mBAAmB,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,SAAS,EACT,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,OAAO,IAAI,gBAAgB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,OAAO,EACP,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,OAAO,IAAI,cAAc,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,eAAe,EACf,sBAAsB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,OAAO,IAAI,sBAAsB,GAClC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,EACb,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,OAAO,IAAI,oBAAoB,GAChC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,cAAc,EACd,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,OAAO,IAAI,qBAAqB,GACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,2BAA2B,EAC3B,mCAAmC,EACnC,6BAA6B,EAC7B,sBAAsB,EACtB,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAChC,OAAO,IAAI,6BAA6B,GACzC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAChC,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,OAAO,IAAI,0BAA0B,GACtC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|