@homeflare/distilled-unifi-network 0.2.0 → 0.4.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 +43 -14
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +9 -7
- package/dist/credentials.js.map +1 -1
- package/dist/errors.d.ts +33 -9
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +33 -9
- package/dist/errors.js.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +52 -10
- package/dist/protocol.js.map +1 -1
- package/dist/services/access_control_acl_rules.d.ts +70 -16
- package/dist/services/access_control_acl_rules.d.ts.map +1 -1
- package/dist/services/access_control_acl_rules.js +35 -8
- package/dist/services/access_control_acl_rules.js.map +1 -1
- package/dist/services/firewall.d.ts +93 -4
- package/dist/services/firewall.d.ts.map +1 -1
- package/dist/services/firewall.js +67 -2
- package/dist/services/firewall.js.map +1 -1
- package/dist/services/hotspot.d.ts +2 -1
- package/dist/services/hotspot.d.ts.map +1 -1
- package/dist/services/hotspot.js +2 -1
- package/dist/services/hotspot.js.map +1 -1
- package/dist/services/traffic_matching_lists.d.ts +59 -6
- package/dist/services/traffic_matching_lists.d.ts.map +1 -1
- package/dist/services/traffic_matching_lists.js +37 -3
- package/dist/services/traffic_matching_lists.js.map +1 -1
- package/dist/services/wifi_broadcasts.d.ts +3 -2
- package/dist/services/wifi_broadcasts.d.ts.map +1 -1
- package/dist/services/wifi_broadcasts.js +3 -2
- package/dist/services/wifi_broadcasts.js.map +1 -1
- package/package.json +1 -1
- package/src/credentials.ts +9 -7
- package/src/errors.ts +33 -9
- package/src/protocol.ts +59 -11
- package/src/services/access_control_acl_rules.ts +135 -24
- package/src/services/firewall.ts +419 -6
- package/src/services/hotspot.ts +3 -2
- package/src/services/traffic_matching_lists.ts +138 -9
- package/src/services/wifi_broadcasts.ts +5 -4
package/README.md
CHANGED
|
@@ -30,9 +30,21 @@ and relicensing a copy would misstate what it is. See `LICENSE`.
|
|
|
30
30
|
`trafficMatchingLists`, `supportingResources`, plus the single-endpoint
|
|
31
31
|
`applicationInfo` — an Effect-typed operation per API endpoint (73 total
|
|
32
32
|
across 44 paths), with `catchTag`-able errors for every HTTP status the
|
|
33
|
-
protocol layer dispatches on
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
protocol layer dispatches on. No OPERATION documents an error response, but
|
|
34
|
+
the spec's own `components.schemas["Error Message"]` — `{code, message,
|
|
35
|
+
requestId, requestPath, statusCode, statusName, timestamp}`, unreferenced
|
|
36
|
+
by any operation — is decoded by `src/protocol.ts`'s `errorEnvelope`: a
|
|
37
|
+
mapped status (e.g. `NotFound`) gets the vendor's own `message` text
|
|
38
|
+
instead of a bare `HTTP <status>`, but NOT `code`/`requestId`/`statusName`/
|
|
39
|
+
`timestamp` — core's shared `HTTP_STATUS_MAP` dispatch keeps only
|
|
40
|
+
`message` for a mapped class. Those extra fields survive only on
|
|
41
|
+
`UnknownUnifiNetworkError`, the fallback for any status the map doesn't
|
|
42
|
+
cover. `requestPath` is not modeled as its own field anywhere and never
|
|
43
|
+
reaches a `message` (see `src/errors.ts`'s doc comment) — it does still
|
|
44
|
+
sit, un-plucked, inside `UnknownUnifiNetworkError.body` for anyone who
|
|
45
|
+
reads that raw value on purpose. See the distilled clone's
|
|
46
|
+
`packages/unifi-network/docs/codegen-notes.md#typed-errors` (not shipped in
|
|
47
|
+
this package — `src/` is the only thing copied here) for the full account.
|
|
36
48
|
|
|
37
49
|
```ts
|
|
38
50
|
import * as UnifiNetwork from '@distilled.cloud/unifi-network'; // aliased onto this package — see docs/distilled-interim.md
|
|
@@ -57,20 +69,25 @@ always `@distilled.cloud/unifi-network`, aliased in the consuming package's
|
|
|
57
69
|
so the eventual cutover to the real published package is a one-line alias
|
|
58
70
|
swap with no import changes anywhere in the kit.
|
|
59
71
|
|
|
60
|
-
### Authentication is NOT documented in the spec
|
|
72
|
+
### Authentication is NOT documented in the spec, but is measured for reads
|
|
61
73
|
|
|
62
74
|
`components.securitySchemes` is absent and no operation carries a
|
|
63
75
|
`security` requirement. The `X-API-KEY` header this SDK sends comes from
|
|
64
76
|
[Ubiquiti's own Integration API guide](https://developer.ui.com/unifi-integration-api-guide/),
|
|
65
|
-
not the machine-readable description
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
not the machine-readable description. The auth-probe handoff this package
|
|
78
|
+
shipped alongside was **run live, read-only, on 2026-09-24**: `X-API-KEY`
|
|
79
|
+
against a local console returned HTTP 200 on `GET /v1/info` and
|
|
80
|
+
`GET /v1/sites`; the same key against the cloud-connector shape returned
|
|
81
|
+
401 (the wrong door for a key minted on a local console, not evidence the
|
|
82
|
+
cloud shape rejects `X-API-KEY` outright). Only reads were probed —
|
|
83
|
+
re-verify before depending on this header for anything that writes.
|
|
69
84
|
|
|
70
85
|
## Resource-level traps a future provider must not ignore
|
|
71
86
|
|
|
72
|
-
These are NOT solved in this SDK. Full detail in `src/credentials.ts`'s
|
|
73
|
-
|
|
87
|
+
These are NOT solved in this SDK. Full detail in `src/credentials.ts`'s own
|
|
88
|
+
doc comment and the distilled clone's
|
|
89
|
+
`packages/unifi-network/docs/codegen-notes.md` (not shipped here — see
|
|
90
|
+
"What's in it" above); the headlines:
|
|
74
91
|
|
|
75
92
|
- **Whole-object PUT.** Nine endpoints (`updateNetwork`,
|
|
76
93
|
`updateFirewallPolicy`, `updateAclRule`, …) silently _disable_ any field
|
|
@@ -86,10 +103,22 @@ own doc comment and `docs/codegen-notes.md`; the headlines:
|
|
|
86
103
|
- **Writes that power-cycle or reboot hardware** hide behind ordinary
|
|
87
104
|
verbs (`executeAdoptedDeviceAction`'s `RESTART`, `executePortAction`'s
|
|
88
105
|
`POWER_CYCLE`) — treat as gated commands, never declared props.
|
|
89
|
-
- **Secrets never become attributes.** The controller API key
|
|
90
|
-
pre-shared key (`passphrase`
|
|
91
|
-
|
|
92
|
-
|
|
106
|
+
- **Secrets never become attributes.** The controller API key is one. The
|
|
107
|
+
WLAN pre-shared key (`passphrase`) is **not write-only** — the WiFi
|
|
108
|
+
details GET returns it in the clear, so this SDK now decodes it as
|
|
109
|
+
`Redacted.Redacted<string>` (its name doesn't match core's generic
|
|
110
|
+
`SENSITIVE_FIELD_PATTERNS`, so `sensitivePatterns` is extended
|
|
111
|
+
per-package — see the distilled clone's `scripts/convert.ts`). Both must
|
|
112
|
+
still be sourced from OpenBao at call time and never read back as plan
|
|
113
|
+
attributes — `Redacted` only guards against an accidental log/print, not
|
|
114
|
+
against a provider persisting the unwrapped value into state. A
|
|
115
|
+
`DISTILLED_DEBUG_HTTP=1` session bypasses the guard entirely — core
|
|
116
|
+
prints the raw response body to stderr before any decode runs — never
|
|
117
|
+
set that flag against a real console. A Hotspot voucher's `code` is the
|
|
118
|
+
same shape (`components.schemas["Hotspot voucher details"].properties.code`,
|
|
119
|
+
"Secret code to active the voucher") and now decodes `Redacted` too, via
|
|
120
|
+
a targeted spec patch rather than a name pattern (`code` also names two
|
|
121
|
+
harmless schemas) — no kit provider reads this family yet.
|
|
93
122
|
|
|
94
123
|
## Scope and next steps
|
|
95
124
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;;AAaD,qBAAa,WAAY,SAAQ,gBAGH;CAAG;AAOjC,eAAO,MAAM,kBAAkB,wCAgB9B,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,WAAW,WAAY;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAUxB,CAAC"}
|
package/dist/credentials.js
CHANGED
|
@@ -18,13 +18,15 @@
|
|
|
18
18
|
* persist an `apiBaseUrl` that contains one outside of the caller's own
|
|
19
19
|
* runtime configuration.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
* declares no `components.securitySchemes` and no operation
|
|
23
|
-
* `security` requirement — the `X-API-KEY` header below comes from
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
21
|
+
* ⚠️ AUTHENTICATION IS NOT DOCUMENTED IN THE SPEC, BUT IS MEASURED FOR READS (2026-09-24):
|
|
22
|
+
* `network_v10.4.57_openapi.json` declares no `components.securitySchemes` and no operation
|
|
23
|
+
* carries a `security` requirement — the `X-API-KEY` header below comes from Ubiquiti's own
|
|
24
|
+
* Integration API guide (https://developer.ui.com/unifi-integration-api-guide/), not from the
|
|
25
|
+
* machine-readable description. A hand-run, read-only probe against a live local console
|
|
26
|
+
* confirmed it: `X-API-KEY` on the local shape above returns HTTP 200 on `GET /v1/info` and
|
|
27
|
+
* `GET /v1/sites`. The SAME key returned 401 against the cloud-connector shape — the wrong door
|
|
28
|
+
* for a key minted on a local console, not evidence the cloud shape rejects `X-API-KEY` outright.
|
|
29
|
+
* Only reads were probed: re-verify before depending on this header in anything that writes.
|
|
28
30
|
*
|
|
29
31
|
* The key itself is an Integrations → API Key created in the console's own
|
|
30
32
|
* UI (Settings → Control Plane → Integrations on a local console). It is a
|
package/dist/credentials.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAY3D;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE;IACnD,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,OAAO,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,CAAC;IAC5D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAG7C,CAAC,yBAAyB,CAAC;CAAG;AAEjC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC;IACjC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,uBAAuB,CAAC;IACpD,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,4BAA4B,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAC7C,WAAW,EACX,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,QAAQ,CACb,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;IACd,OAAO,EACL,yFAAyF;CAC5F,CAAC,CACL,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC;CACzC,CAAC,CAAC,EACH,MAAM,CAAC,KAAK,CACb,CACF,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAG3B,EAA4B,EAAE,CAC7B,KAAK,CAAC,OAAO,CACX,WAAW,EACX,MAAM,CAAC,OAAO,CAAC;IACb,MAAM,EACJ,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAC/B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,MAAM;IACnB,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;CAChD,CAAC,CACH,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* UniFi Network-specific error types.
|
|
3
3
|
*
|
|
4
|
-
* ⛔
|
|
4
|
+
* ⛔ NO OPERATION DOCUMENTS AN ERROR RESPONSE. Every one of the 73 operations
|
|
5
5
|
* in `network_v10.4.57_openapi.json` declares only its success status (65
|
|
6
6
|
* carry `200`, 8 carry `201`) — there is no per-operation 4xx/5xx, and
|
|
7
7
|
* unlike Hetzner's spec there isn't even a blanket `4xx`/`5xx` wildcard to
|
|
@@ -13,14 +13,27 @@
|
|
|
13
13
|
* exactly the situation core's shared map exists for, just with less
|
|
14
14
|
* upstream signal than usual to say which statuses are actually reachable.
|
|
15
15
|
*
|
|
16
|
+
* The FAILURE BODY *is* documented, though, just never `$ref`'d from an
|
|
17
|
+
* operation: `components.schemas["Error Message"]` (`{code, message,
|
|
18
|
+
* requestId, requestPath, statusCode, statusName, timestamp}`, T8) sits in
|
|
19
|
+
* the pinned spec with zero references. `src/protocol.ts`'s `errorEnvelope`
|
|
20
|
+
* decodes it, so `message` below is the vendor's own text instead of a bare
|
|
21
|
+
* `HTTP <status>`. `UnknownUnifiNetworkError` carries the matching
|
|
22
|
+
* `requestId`/`statusCode`/`statusName` alongside the raw `body` — every
|
|
23
|
+
* field from that schema EXCEPT `requestPath`, which is dropped rather than
|
|
24
|
+
* surfaced as a first-class field (T3: like the console id/endpoint in
|
|
25
|
+
* `src/credentials.ts`, a request path is caller/console-shaped and must
|
|
26
|
+
* never end up somewhere it gets logged as if it were plain diagnostic
|
|
27
|
+
* text; it is still present, un-plucked, inside `body` for anyone who reads
|
|
28
|
+
* that raw value on purpose).
|
|
29
|
+
*
|
|
16
30
|
* Re-exports the common HTTP errors from core (nothing UniFi-specific to
|
|
17
|
-
* add to the status→class mapping
|
|
18
|
-
*
|
|
19
|
-
* than any parsed `code`/`message` pair) plus the unknown-error and
|
|
20
|
-
* parse-error wrappers every package needs.
|
|
31
|
+
* add to the status→class mapping) plus the unknown-error and parse-error
|
|
32
|
+
* wrappers every package needs.
|
|
21
33
|
*
|
|
22
34
|
* Known unknowns — confirm against a live console before hardening on them:
|
|
23
|
-
* -
|
|
35
|
+
* - The `Error Message` schema itself, UNCONFIRMED by any real capture yet
|
|
36
|
+
* (no live call has been made against a console for this work — T8/T16).
|
|
24
37
|
* - Whether 429 carries `Retry-After` (assume not; see `src/retry.ts`).
|
|
25
38
|
* - Whether a bad/missing `X-API-KEY` answers 401 or 403 (both are wired
|
|
26
39
|
* through `HTTP_STATUS_MAP`; only one will actually fire).
|
|
@@ -31,6 +44,10 @@ import * as Schema from "effect/Schema";
|
|
|
31
44
|
declare const UnknownUnifiNetworkError_base: Schema.Class<UnknownUnifiNetworkError, Schema.TaggedStruct<"UnknownUnifiNetworkError", {
|
|
32
45
|
readonly code: Schema.optional<Schema.String>;
|
|
33
46
|
readonly message: Schema.optional<Schema.String>;
|
|
47
|
+
readonly requestId: Schema.optional<Schema.String>;
|
|
48
|
+
readonly statusCode: Schema.optional<Schema.Number>;
|
|
49
|
+
readonly statusName: Schema.optional<Schema.String>;
|
|
50
|
+
readonly timestamp: Schema.optional<Schema.String>;
|
|
34
51
|
readonly body: Schema.Unknown;
|
|
35
52
|
}>, import("effect/Cause").YieldableError> & (new (...args: any[]) => {
|
|
36
53
|
"@distilled.cloud/error/categories": {
|
|
@@ -39,9 +56,16 @@ declare const UnknownUnifiNetworkError_base: Schema.Class<UnknownUnifiNetworkErr
|
|
|
39
56
|
});
|
|
40
57
|
/**
|
|
41
58
|
* Unknown UniFi Network error — returned when a failed response's HTTP
|
|
42
|
-
* status has no mapped error class
|
|
43
|
-
*
|
|
44
|
-
*
|
|
59
|
+
* status has no mapped error class (every status `HTTP_STATUS_MAP` does
|
|
60
|
+
* cover surfaces as that mapped class instead, e.g. `NotFound`, and only
|
|
61
|
+
* carries `message` — core's classes are shared across every provider and
|
|
62
|
+
* are never given UniFi-specific fields). `code`/`requestId`/`statusCode`/
|
|
63
|
+
* `statusName`/`timestamp` come from the vendor's own `Error Message` envelope
|
|
64
|
+
* (`src/protocol.ts`'s `errorEnvelope`, T8) when the failure body parsed as
|
|
65
|
+
* JSON in that shape; `requestPath` is deliberately NOT modeled as a field
|
|
66
|
+
* here (T3) — see the module doc comment. `body` carries the raw parsed
|
|
67
|
+
* JSON (or raw text) for later cataloging regardless of whether it matched
|
|
68
|
+
* the envelope shape.
|
|
45
69
|
*/
|
|
46
70
|
export declare class UnknownUnifiNetworkError extends UnknownUnifiNetworkError_base {
|
|
47
71
|
}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,UAAU,IAAI,cAAc,EAC5B,QAAQ,IAAI,YAAY,EACxB,aAAa,IAAI,iBAAiB,EAClC,SAAS,IAAI,aAAa,EAC1B,QAAQ,IAAI,YAAY,EACxB,mBAAmB,IAAI,uBAAuB,EAC/C,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;;;;;;;;;;;AAGxC;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,SAAQ,6BAWd;CAAG;;;;;;;;;AAEnC,kCAAkC;AAClC,qBAAa,sBAAuB,SAAQ,2BAMb;CAAG;AAElC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,wBAAwB,GAAG,sBAAsB,CAAC;AAE7E;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,uBAAuB,GACvB,YAAY,CAAC"}
|
package/dist/errors.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* UniFi Network-specific error types.
|
|
3
3
|
*
|
|
4
|
-
* ⛔
|
|
4
|
+
* ⛔ NO OPERATION DOCUMENTS AN ERROR RESPONSE. Every one of the 73 operations
|
|
5
5
|
* in `network_v10.4.57_openapi.json` declares only its success status (65
|
|
6
6
|
* carry `200`, 8 carry `201`) — there is no per-operation 4xx/5xx, and
|
|
7
7
|
* unlike Hetzner's spec there isn't even a blanket `4xx`/`5xx` wildcard to
|
|
@@ -13,14 +13,27 @@
|
|
|
13
13
|
* exactly the situation core's shared map exists for, just with less
|
|
14
14
|
* upstream signal than usual to say which statuses are actually reachable.
|
|
15
15
|
*
|
|
16
|
+
* The FAILURE BODY *is* documented, though, just never `$ref`'d from an
|
|
17
|
+
* operation: `components.schemas["Error Message"]` (`{code, message,
|
|
18
|
+
* requestId, requestPath, statusCode, statusName, timestamp}`, T8) sits in
|
|
19
|
+
* the pinned spec with zero references. `src/protocol.ts`'s `errorEnvelope`
|
|
20
|
+
* decodes it, so `message` below is the vendor's own text instead of a bare
|
|
21
|
+
* `HTTP <status>`. `UnknownUnifiNetworkError` carries the matching
|
|
22
|
+
* `requestId`/`statusCode`/`statusName` alongside the raw `body` — every
|
|
23
|
+
* field from that schema EXCEPT `requestPath`, which is dropped rather than
|
|
24
|
+
* surfaced as a first-class field (T3: like the console id/endpoint in
|
|
25
|
+
* `src/credentials.ts`, a request path is caller/console-shaped and must
|
|
26
|
+
* never end up somewhere it gets logged as if it were plain diagnostic
|
|
27
|
+
* text; it is still present, un-plucked, inside `body` for anyone who reads
|
|
28
|
+
* that raw value on purpose).
|
|
29
|
+
*
|
|
16
30
|
* Re-exports the common HTTP errors from core (nothing UniFi-specific to
|
|
17
|
-
* add to the status→class mapping
|
|
18
|
-
*
|
|
19
|
-
* than any parsed `code`/`message` pair) plus the unknown-error and
|
|
20
|
-
* parse-error wrappers every package needs.
|
|
31
|
+
* add to the status→class mapping) plus the unknown-error and parse-error
|
|
32
|
+
* wrappers every package needs.
|
|
21
33
|
*
|
|
22
34
|
* Known unknowns — confirm against a live console before hardening on them:
|
|
23
|
-
* -
|
|
35
|
+
* - The `Error Message` schema itself, UNCONFIRMED by any real capture yet
|
|
36
|
+
* (no live call has been made against a console for this work — T8/T16).
|
|
24
37
|
* - Whether 429 carries `Retry-After` (assume not; see `src/retry.ts`).
|
|
25
38
|
* - Whether a bad/missing `X-API-KEY` answers 401 or 403 (both are wired
|
|
26
39
|
* through `HTTP_STATUS_MAP`; only one will actually fire).
|
|
@@ -30,13 +43,24 @@ import * as Schema from "effect/Schema";
|
|
|
30
43
|
import * as Category from "@distilled.cloud/core/category";
|
|
31
44
|
/**
|
|
32
45
|
* Unknown UniFi Network error — returned when a failed response's HTTP
|
|
33
|
-
* status has no mapped error class
|
|
34
|
-
*
|
|
35
|
-
*
|
|
46
|
+
* status has no mapped error class (every status `HTTP_STATUS_MAP` does
|
|
47
|
+
* cover surfaces as that mapped class instead, e.g. `NotFound`, and only
|
|
48
|
+
* carries `message` — core's classes are shared across every provider and
|
|
49
|
+
* are never given UniFi-specific fields). `code`/`requestId`/`statusCode`/
|
|
50
|
+
* `statusName`/`timestamp` come from the vendor's own `Error Message` envelope
|
|
51
|
+
* (`src/protocol.ts`'s `errorEnvelope`, T8) when the failure body parsed as
|
|
52
|
+
* JSON in that shape; `requestPath` is deliberately NOT modeled as a field
|
|
53
|
+
* here (T3) — see the module doc comment. `body` carries the raw parsed
|
|
54
|
+
* JSON (or raw text) for later cataloging regardless of whether it matched
|
|
55
|
+
* the envelope shape.
|
|
36
56
|
*/
|
|
37
57
|
export class UnknownUnifiNetworkError extends Schema.TaggedError()("UnknownUnifiNetworkError", {
|
|
38
58
|
code: Schema.optional(Schema.String),
|
|
39
59
|
message: Schema.optional(Schema.String),
|
|
60
|
+
requestId: Schema.optional(Schema.String),
|
|
61
|
+
statusCode: Schema.optional(Schema.Number),
|
|
62
|
+
statusName: Schema.optional(Schema.String),
|
|
63
|
+
timestamp: Schema.optional(Schema.String),
|
|
40
64
|
body: Schema.Unknown,
|
|
41
65
|
}).pipe(Category.withServerError) {
|
|
42
66
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;AAUtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,gCAAgC,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,WAAW,EAA4B,CAC1F,0BAA0B,EAC1B;IACE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC,OAAO;CACrB,CACF,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;CAAG;AAEnC,kCAAkC;AAClC,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,IAAI,EAAE,MAAM,CAAC,OAAO;IACpB,KAAK,EAAE,MAAM,CAAC,OAAO;CACtB,CACF,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;CAAG"}
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,KAAK,eAAe,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,KAAK,GAAG,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE,OAAO,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAC3B,aAAa,GACb,WAAW,GACX,eAAe,CAAC,eAAe,CAAC;AAEpC,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC;AAgDxE,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CA2BvD,CAAC"}
|
package/dist/protocol.js
CHANGED
|
@@ -14,12 +14,21 @@
|
|
|
14
14
|
* return the object directly; mutations return the created/updated object
|
|
15
15
|
* (`200`/`201`), never `204`.
|
|
16
16
|
*
|
|
17
|
-
* FAILURE ENVELOPE
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
17
|
+
* FAILURE ENVELOPE (T8): no OPERATION documents an error response, but the
|
|
18
|
+
* pinned spec's own `components.schemas["Error Message"]` — `{code,
|
|
19
|
+
* message, requestId, requestPath, statusCode, statusName, timestamp}`,
|
|
20
|
+
* referenced by zero operations — is the vendor's real failure shape.
|
|
21
|
+
* `errorEnvelope` below decodes `code`/`message` from it, which the shared
|
|
22
|
+
* REST protocol folds into every status-mapped error's `message` (so a
|
|
23
|
+
* `NotFound`, say, carries the vendor's own text instead of a bare `HTTP
|
|
24
|
+
* 404`); `unknownError` additionally reads `requestId`/`statusCode`/
|
|
25
|
+
* `statusName`/`timestamp` straight off the parsed body for the fallback
|
|
26
|
+
* `UnknownUnifiNetworkError`. `requestPath` is READ NOWHERE below — it is
|
|
27
|
+
* deliberately excluded from both the envelope and the error's fields (T3;
|
|
28
|
+
* see `src/errors.ts`'s doc comment) — never let it reach a `message`. This
|
|
29
|
+
* is derived from the spec, not yet confirmed against a real captured
|
|
30
|
+
* failure (no live call has been made for this work); the shape may need a
|
|
31
|
+
* correction once one is.
|
|
23
32
|
*/
|
|
24
33
|
import * as Effect from "effect/Effect";
|
|
25
34
|
import * as Redacted from "effect/Redacted";
|
|
@@ -27,11 +36,43 @@ import { makeRestProtocol, } from "@distilled.cloud/core/protocol-rest";
|
|
|
27
36
|
import { Credentials } from "./credentials.js";
|
|
28
37
|
import { UnknownUnifiNetworkError } from "./errors.js";
|
|
29
38
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* {@link
|
|
39
|
+
* Decode the spec's `Error Message` schema (see module docs, T8): `code` is
|
|
40
|
+
* a dotted string (e.g. `"api.authentication.missing-credentials"`, never
|
|
41
|
+
* numeric in this spec — {@link RestErrorEnvelope}'s `code` allows both
|
|
42
|
+
* because other providers' envelopes use numeric codes), `message` a plain
|
|
43
|
+
* string. Anything else — a non-JSON body, or JSON that isn't this shape —
|
|
44
|
+
* returns `undefined` and the shared protocol falls back to its own
|
|
45
|
+
* `HTTP <status>` default. `requestPath` is READ HERE ON PURPOSE ONLY TO
|
|
46
|
+
* SKIP IT: it is never assigned to `code`/`message`, so it can never reach
|
|
47
|
+
* the `message` string every status-mapped error surfaces (T3).
|
|
33
48
|
*/
|
|
34
|
-
const errorEnvelope = (
|
|
49
|
+
const errorEnvelope = (body) => {
|
|
50
|
+
if (body === null || typeof body !== "object")
|
|
51
|
+
return undefined;
|
|
52
|
+
const b = body;
|
|
53
|
+
const code = typeof b.code === "string" ? b.code : undefined;
|
|
54
|
+
const message = typeof b.message === "string" ? b.message : undefined;
|
|
55
|
+
if (code === undefined && message === undefined)
|
|
56
|
+
return undefined;
|
|
57
|
+
return { code, message };
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* The rest of the `Error Message` envelope beyond `code`/`message` —
|
|
61
|
+
* {@link RestErrorEnvelope} has no room for it, so `unknownError` below
|
|
62
|
+
* reads it straight off the parsed body it already receives. Never reads
|
|
63
|
+
* `requestPath` (T3).
|
|
64
|
+
*/
|
|
65
|
+
const restEnvelopeFields = (body) => {
|
|
66
|
+
const b = body !== null && typeof body === "object"
|
|
67
|
+
? body
|
|
68
|
+
: undefined;
|
|
69
|
+
return {
|
|
70
|
+
requestId: typeof b?.requestId === "string" ? b.requestId : undefined,
|
|
71
|
+
statusCode: typeof b?.statusCode === "number" ? b.statusCode : undefined,
|
|
72
|
+
statusName: typeof b?.statusName === "string" ? b.statusName : undefined,
|
|
73
|
+
timestamp: typeof b?.timestamp === "string" ? b.timestamp : undefined,
|
|
74
|
+
};
|
|
75
|
+
};
|
|
35
76
|
export const UnifiNetworkProtocol = makeRestProtocol({
|
|
36
77
|
// Resolved on the CALLING fiber per request (the layer is memoized per
|
|
37
78
|
// process); the Credentials service holds an effect, so a key rotated
|
|
@@ -53,6 +94,7 @@ export const UnifiNetworkProtocol = makeRestProtocol({
|
|
|
53
94
|
? String(code)
|
|
54
95
|
: undefined,
|
|
55
96
|
message,
|
|
97
|
+
...restEnvelopeFields(body),
|
|
56
98
|
body,
|
|
57
99
|
}),
|
|
58
100
|
});
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,39 @@ export type { UnifiNetworkOpError, UnifiNetworkOpContext };
|
|
|
5
5
|
/** ACL rule action */
|
|
6
6
|
export type CreateAclRuleRequestAction = "ALLOW" | "BLOCK";
|
|
7
7
|
export declare const CreateAclRuleRequestAction: any;
|
|
8
|
+
/** IP addresses or subnets */
|
|
9
|
+
export type IPACLRuleEndpointIpAddressesOrSubnetsList = Array<string>;
|
|
10
|
+
export declare const IPACLRuleEndpointIpAddressesOrSubnetsList: S.Schema<IPACLRuleEndpointIpAddressesOrSubnetsList>;
|
|
11
|
+
/** Ports this ACL rule will be applied to. If null, all the rule will be applied to all ports. */
|
|
12
|
+
export type IPACLRuleEndpointPortFilterList = Array<number>;
|
|
13
|
+
export declare const IPACLRuleEndpointPortFilterList: S.Schema<IPACLRuleEndpointPortFilterList>;
|
|
14
|
+
/** Network IDs */
|
|
15
|
+
export type IPACLRuleEndpointNetworkIdsList = Array<string>;
|
|
16
|
+
export declare const IPACLRuleEndpointNetworkIdsList: S.Schema<IPACLRuleEndpointNetworkIdsList>;
|
|
17
|
+
export interface IPACLRuleEndpoint {
|
|
18
|
+
type: string;
|
|
19
|
+
/** IP addresses or subnets */
|
|
20
|
+
ipAddressesOrSubnets?: IPACLRuleEndpointIpAddressesOrSubnetsList;
|
|
21
|
+
/** Ports this ACL rule will be applied to. If null, all the rule will be applied to all ports. */
|
|
22
|
+
portFilter?: IPACLRuleEndpointPortFilterList;
|
|
23
|
+
/** Network IDs */
|
|
24
|
+
networkIds?: IPACLRuleEndpointNetworkIdsList;
|
|
25
|
+
}
|
|
26
|
+
export declare const IPACLRuleEndpoint: S.Schema<IPACLRuleEndpoint>;
|
|
27
|
+
/** Source/destination MAC addresses this ACL rule will apply to. */
|
|
28
|
+
export type MACACLRuleEndpointMacAddressesList = Array<string>;
|
|
29
|
+
export declare const MACACLRuleEndpointMacAddressesList: S.Schema<MACACLRuleEndpointMacAddressesList>;
|
|
30
|
+
export interface MACACLRuleEndpoint {
|
|
31
|
+
type: string;
|
|
32
|
+
/** Source/destination MAC addresses this ACL rule will apply to. */
|
|
33
|
+
macAddresses?: MACACLRuleEndpointMacAddressesList;
|
|
34
|
+
/** MAC address prefix length. When null, full MAC address(-es) will be used. */
|
|
35
|
+
prefixLength?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare const MACACLRuleEndpoint: S.Schema<MACACLRuleEndpoint>;
|
|
38
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
39
|
+
export type CreateAclRuleRequestDestinationFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
40
|
+
export declare const CreateAclRuleRequestDestinationFilter: S.Schema<CreateAclRuleRequestDestinationFilter>;
|
|
8
41
|
/** List of Switch capable device IDs to which the ACL rule will be provisioned. */
|
|
9
42
|
export type ACLRuleDeviceFilterDeviceIdsList = Array<string>;
|
|
10
43
|
export declare const ACLRuleDeviceFilterDeviceIdsList: S.Schema<ACLRuleDeviceFilterDeviceIdsList>;
|
|
@@ -14,6 +47,9 @@ export interface ACLRuleDeviceFilter {
|
|
|
14
47
|
deviceIds?: ACLRuleDeviceFilterDeviceIdsList;
|
|
15
48
|
}
|
|
16
49
|
export declare const ACLRuleDeviceFilter: S.Schema<ACLRuleDeviceFilter>;
|
|
50
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
51
|
+
export type CreateAclRuleRequestSourceFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
52
|
+
export declare const CreateAclRuleRequestSourceFilter: S.Schema<CreateAclRuleRequestSourceFilter>;
|
|
17
53
|
export type CreateAclRuleRequestProtocolFilterItem = "TCP" | "UDP";
|
|
18
54
|
export declare const CreateAclRuleRequestProtocolFilterItem: any;
|
|
19
55
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
@@ -25,8 +61,8 @@ export interface CreateAclRuleRequest {
|
|
|
25
61
|
action: CreateAclRuleRequestAction | (string & {});
|
|
26
62
|
/** ACL rule description */
|
|
27
63
|
description?: string;
|
|
28
|
-
/** Shape
|
|
29
|
-
destinationFilter?:
|
|
64
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
65
|
+
destinationFilter?: CreateAclRuleRequestDestinationFilter;
|
|
30
66
|
enabled: boolean;
|
|
31
67
|
/** IDs of the Switch-capable devices used to enforce the ACL rule. When null, the rule will be provisioned to all switches on the site. */
|
|
32
68
|
enforcingDeviceFilter?: ACLRuleDeviceFilter;
|
|
@@ -34,8 +70,8 @@ export interface CreateAclRuleRequest {
|
|
|
34
70
|
index?: number;
|
|
35
71
|
/** ACL rule name */
|
|
36
72
|
name: string;
|
|
37
|
-
/** Shape
|
|
38
|
-
sourceFilter?:
|
|
73
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
74
|
+
sourceFilter?: CreateAclRuleRequestSourceFilter;
|
|
39
75
|
type: string;
|
|
40
76
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
41
77
|
protocolFilter?: CreateAclRuleRequestProtocolFilterList;
|
|
@@ -46,6 +82,9 @@ export declare const CreateAclRuleRequest: S.Schema<CreateAclRuleRequest>;
|
|
|
46
82
|
/** ACL rule action */
|
|
47
83
|
export type ACLRuleAction = "ALLOW" | "BLOCK";
|
|
48
84
|
export declare const ACLRuleAction: any;
|
|
85
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
86
|
+
export type ACLRuleDestinationFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
87
|
+
export declare const ACLRuleDestinationFilter: S.Schema<ACLRuleDestinationFilter>;
|
|
49
88
|
export type UserDefinedOrDerivedEntityMetadataSource = "SDWAN";
|
|
50
89
|
export declare const UserDefinedOrDerivedEntityMetadataSource: any;
|
|
51
90
|
export interface UserDefinedOrDerivedEntityMetadata {
|
|
@@ -53,6 +92,9 @@ export interface UserDefinedOrDerivedEntityMetadata {
|
|
|
53
92
|
source?: UserDefinedOrDerivedEntityMetadataSource;
|
|
54
93
|
}
|
|
55
94
|
export declare const UserDefinedOrDerivedEntityMetadata: S.Schema<UserDefinedOrDerivedEntityMetadata>;
|
|
95
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
96
|
+
export type ACLRuleSourceFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
97
|
+
export declare const ACLRuleSourceFilter: S.Schema<ACLRuleSourceFilter>;
|
|
56
98
|
export type ACLRuleProtocolFilterItem = "TCP" | "UDP";
|
|
57
99
|
export declare const ACLRuleProtocolFilterItem: any;
|
|
58
100
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
@@ -63,8 +105,8 @@ export interface ACLRule {
|
|
|
63
105
|
action: ACLRuleAction;
|
|
64
106
|
/** ACL rule description */
|
|
65
107
|
description?: string;
|
|
66
|
-
/**
|
|
67
|
-
destinationFilter?:
|
|
108
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
109
|
+
destinationFilter?: ACLRuleDestinationFilter;
|
|
68
110
|
enabled: boolean;
|
|
69
111
|
/** IDs of the Switch-capable devices used to enforce the ACL rule. When null, the rule will be provisioned to all switches on the site. */
|
|
70
112
|
enforcingDeviceFilter?: ACLRuleDeviceFilter;
|
|
@@ -75,8 +117,8 @@ export interface ACLRule {
|
|
|
75
117
|
metadata: UserDefinedOrDerivedEntityMetadata;
|
|
76
118
|
/** ACL rule name */
|
|
77
119
|
name: string;
|
|
78
|
-
/**
|
|
79
|
-
sourceFilter?:
|
|
120
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
121
|
+
sourceFilter?: ACLRuleSourceFilter;
|
|
80
122
|
type: string;
|
|
81
123
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
82
124
|
protocolFilter?: ACLRuleProtocolFilterList;
|
|
@@ -117,6 +159,12 @@ export declare const GetAclRulePageRequest: S.Schema<GetAclRulePageRequest>;
|
|
|
117
159
|
/** ACL rule action */
|
|
118
160
|
export type ACLRuleObjectAction = "ALLOW" | "BLOCK";
|
|
119
161
|
export declare const ACLRuleObjectAction: any;
|
|
162
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
163
|
+
export type ACLRuleObjectDestinationFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
164
|
+
export declare const ACLRuleObjectDestinationFilter: S.Schema<ACLRuleObjectDestinationFilter>;
|
|
165
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
166
|
+
export type ACLRuleObjectSourceFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
167
|
+
export declare const ACLRuleObjectSourceFilter: S.Schema<ACLRuleObjectSourceFilter>;
|
|
120
168
|
export type ACLRuleObjectProtocolFilterItem = "TCP" | "UDP";
|
|
121
169
|
export declare const ACLRuleObjectProtocolFilterItem: any;
|
|
122
170
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
@@ -127,8 +175,8 @@ export interface ACLRuleObject {
|
|
|
127
175
|
action: ACLRuleObjectAction;
|
|
128
176
|
/** ACL rule description */
|
|
129
177
|
description?: string;
|
|
130
|
-
/**
|
|
131
|
-
destinationFilter?:
|
|
178
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
179
|
+
destinationFilter?: ACLRuleObjectDestinationFilter;
|
|
132
180
|
enabled: boolean;
|
|
133
181
|
/** IDs of the Switch-capable devices used to enforce the ACL rule. When null, the rule will be provisioned to all switches on the site. */
|
|
134
182
|
enforcingDeviceFilter?: ACLRuleDeviceFilter;
|
|
@@ -139,8 +187,8 @@ export interface ACLRuleObject {
|
|
|
139
187
|
metadata: UserDefinedOrDerivedEntityMetadata;
|
|
140
188
|
/** ACL rule name */
|
|
141
189
|
name: string;
|
|
142
|
-
/**
|
|
143
|
-
sourceFilter?:
|
|
190
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
191
|
+
sourceFilter?: ACLRuleObjectSourceFilter;
|
|
144
192
|
type: string;
|
|
145
193
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
146
194
|
protocolFilter?: ACLRuleObjectProtocolFilterList;
|
|
@@ -161,6 +209,12 @@ export declare const IntegrationAclRulePageDto: S.Schema<IntegrationAclRulePageD
|
|
|
161
209
|
/** ACL rule action */
|
|
162
210
|
export type UpdateAclRuleRequestAction = "ALLOW" | "BLOCK";
|
|
163
211
|
export declare const UpdateAclRuleRequestAction: any;
|
|
212
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
213
|
+
export type UpdateAclRuleRequestDestinationFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
214
|
+
export declare const UpdateAclRuleRequestDestinationFilter: S.Schema<UpdateAclRuleRequestDestinationFilter>;
|
|
215
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
216
|
+
export type UpdateAclRuleRequestSourceFilter = IPACLRuleEndpoint | MACACLRuleEndpoint;
|
|
217
|
+
export declare const UpdateAclRuleRequestSourceFilter: S.Schema<UpdateAclRuleRequestSourceFilter>;
|
|
164
218
|
export type UpdateAclRuleRequestProtocolFilterItem = "TCP" | "UDP";
|
|
165
219
|
export declare const UpdateAclRuleRequestProtocolFilterItem: any;
|
|
166
220
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
@@ -173,8 +227,8 @@ export interface UpdateAclRuleRequest {
|
|
|
173
227
|
action: UpdateAclRuleRequestAction | (string & {});
|
|
174
228
|
/** ACL rule description */
|
|
175
229
|
description?: string;
|
|
176
|
-
/** Shape
|
|
177
|
-
destinationFilter?:
|
|
230
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
231
|
+
destinationFilter?: UpdateAclRuleRequestDestinationFilter;
|
|
178
232
|
enabled: boolean;
|
|
179
233
|
/** IDs of the Switch-capable devices used to enforce the ACL rule. When null, the rule will be provisioned to all switches on the site. */
|
|
180
234
|
enforcingDeviceFilter?: ACLRuleDeviceFilter;
|
|
@@ -182,8 +236,8 @@ export interface UpdateAclRuleRequest {
|
|
|
182
236
|
index?: number;
|
|
183
237
|
/** ACL rule name */
|
|
184
238
|
name: string;
|
|
185
|
-
/** Shape
|
|
186
|
-
sourceFilter?:
|
|
239
|
+
/** Shape depends on the sibling discriminator value — see docs/codegen-notes.md. */
|
|
240
|
+
sourceFilter?: UpdateAclRuleRequestSourceFilter;
|
|
187
241
|
type: string;
|
|
188
242
|
/** Protocols this ACL rule will be applied to. When null, the rule will be applied to all protocols. */
|
|
189
243
|
protocolFilter?: UpdateAclRuleRequestProtocolFilterList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access_control_acl_rules.d.ts","sourceRoot":"","sources":["../../src/services/access_control_acl_rules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,8BAA8B,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,2BAA2B,CAAC;AAEjD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAIxB,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,CAAC;AAE3D,sBAAsB;AACtB,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,OAAO,CAAC;AAC3D,eAAO,MAAM,0BAA0B,KAAW,CAAC;AAEnD,mFAAmF;AACnF,MAAM,MAAM,gCAAgC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7D,eAAO,MAAM,gCAAgC,EAEjC,CAAC,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,CAAC,EAAE,gCAAgC,CAAC;CAC9C;AACD,eAAO,MAAM,mBAAmB,EAOnB,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE3C,MAAM,MAAM,sCAAsC,GAAG,KAAK,GAAG,KAAK,CAAC;AACnE,eAAO,MAAM,sCAAsC,KAAW,CAAC;AAE/D,wGAAwG;AACxG,MAAM,MAAM,sCAAsC,GAAG,KAAK,CACxD,sCAAsC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CACvD,CAAC;AACF,eAAO,MAAM,sCAAsC,EAEvC,CAAC,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,MAAM,EAAE,0BAA0B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACnD,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"access_control_acl_rules.d.ts","sourceRoot":"","sources":["../../src/services/access_control_acl_rules.ts"],"names":[],"mappings":"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"}
|