@authup/access 1.0.0-beta.68 → 1.0.0-beta.70
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 +230 -0
- package/dist/index.d.mts +140 -55
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +134 -8
- package/dist/index.mjs.map +1 -1
- package/dist/permission/authorization/module.d.ts.map +1 -1
- package/dist/permission/index.d.ts +1 -0
- package/dist/permission/index.d.ts.map +1 -1
- package/dist/permission/record/index.d.ts +3 -0
- package/dist/permission/record/index.d.ts.map +1 -0
- package/dist/permission/record/module.d.ts +36 -0
- package/dist/permission/record/module.d.ts.map +1 -0
- package/dist/permission/record/types.d.ts +41 -0
- package/dist/permission/record/types.d.ts.map +1 -0
- package/dist/policy/built-in/identity/data/validator.d.ts.map +1 -1
- package/dist/policy/built-in/identity/types.d.ts +9 -0
- package/dist/policy/built-in/identity/types.d.ts.map +1 -1
- package/dist/policy/built-in/permission-binding/identity-evaluator.d.ts +7 -7
- package/dist/policy/built-in/permission-binding/identity-evaluator.d.ts.map +1 -1
- package/package.json +7 -7
package/README.md
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/authup/authup/master/.github/assets/logo.svg" alt="Authup logo" width="96" height="96" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">@authup/access</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>Evaluate Authup permissions and policies in your own process, with the same engine the server uses.</b><br>
|
|
9
|
+
Your API decides "may this token update this row?" locally, instead of asking Authup on every request.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="https://www.npmjs.com/package/@authup/access"><img src="https://img.shields.io/npm/v/@authup/access" alt="npm version" /></a>
|
|
14
|
+
<a href="https://github.com/authup/authup/actions/workflows/main.yml"><img src="https://github.com/authup/authup/actions/workflows/main.yml/badge.svg" alt="CI" /></a>
|
|
15
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="License: Apache-2.0" /></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="#installation"><b>Installation</b></a> · <a href="#usage">Usage</a> · <a href="#api">API</a> · <a href="https://authup.org">Documentation</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Why @authup/access?
|
|
25
|
+
|
|
26
|
+
In Authup a grant is more than a permission name. Each grant carries a realm reach (`own`, `ownOrNull`, `any`) and optional policies (attributes, identity, time, date, realm match, composites), and a permission can carry policies of its own. Re-implementing that model in every API that receives an Authup token is how the API and the server end up disagreeing. This package is the model itself: the server-core service evaluates every management API request with it, and so can you.
|
|
27
|
+
|
|
28
|
+
| Concern | Without it | With it |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| **Permission checks** | `if (token.permissions.includes('user_update'))`, which ignores realm reach and policies | `evaluateRecord(evaluator, { name: 'user_update', realm })` answers the way the server would |
|
|
31
|
+
| **Realm reach** | Hand-written tenant comparisons per route | `own`, `ownOrNull` and `any` are evaluated per grant against the record's realm |
|
|
32
|
+
| **Policies** | A second, partial implementation of attribute, time and identity rules | The built-in policy evaluators, plus your own types through `PolicyEngine` |
|
|
33
|
+
| **Stale data** | Silent denials after a permission is added on the server | `AuthorizationCatalogStaleError` says the copy is old, so you refetch |
|
|
34
|
+
| **List queries** | Fetch everything, then filter in memory | `compile()` lowers a decision to a rapiq condition you can push into the query |
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
```shell
|
|
39
|
+
npm install @authup/access
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
ESM only. Node.js `^22.13.0 || ^23.5.0 || >=24.0.0`. No peer dependencies; the policy engine runs in a browser as well.
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
### Evaluate permissions you define
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import {
|
|
50
|
+
BuiltInPolicyType,
|
|
51
|
+
PermissionEvaluator,
|
|
52
|
+
PermissionMemoryProvider,
|
|
53
|
+
defineAttributesPolicy,
|
|
54
|
+
definePolicyData,
|
|
55
|
+
} from '@authup/access';
|
|
56
|
+
|
|
57
|
+
const evaluator = new PermissionEvaluator({
|
|
58
|
+
provider: new PermissionMemoryProvider([
|
|
59
|
+
{ permission: { name: 'report_read' } },
|
|
60
|
+
{
|
|
61
|
+
permission: { name: 'report_update' },
|
|
62
|
+
policies: [defineAttributesPolicy({ type: BuiltInPolicyType.ATTRIBUTES, query: { ownerId: 'u1' } })],
|
|
63
|
+
},
|
|
64
|
+
]),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
await evaluator.evaluate({ name: 'report_read' });
|
|
68
|
+
|
|
69
|
+
await evaluator.evaluate({
|
|
70
|
+
name: 'report_update',
|
|
71
|
+
data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: { ownerId: 'u1' } }),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
await evaluator.preEvaluate({ name: 'report_update' }); // passes: the row is not known yet
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- `evaluate` resolves or throws a `PermissionError` (`isPermissionError`). With several names it needs all of them; `evaluateOneOf` needs one.
|
|
78
|
+
- `preEvaluate` is the gate before the data exists: a policy whose data key is missing counts as passed, and only a policy that already fails denies. `evaluate` with the same missing key denies.
|
|
79
|
+
- A permission the provider does not know denies.
|
|
80
|
+
- An `attributes` policy's `query` is a MongoDB-style filter (`{ ownerId: 'u1' }`, `{ age: { $gte: 18 } }`) matched against the `attributes` data key.
|
|
81
|
+
|
|
82
|
+
### Decide from Authup's catalog
|
|
83
|
+
|
|
84
|
+
A resource server reads the identity-free catalog once (`GET /authorization`, with its own client credentials and `permission_read`), and takes the grants and the identity from the introspection of the token it received (`POST /token/introspect`: `permissions`, `sub`, `sub_kind`, `realm_id`, `realm_name`):
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import {
|
|
88
|
+
createAuthorizationEvaluator,
|
|
89
|
+
evaluateRecord,
|
|
90
|
+
isAuthorizationCatalogStaleError,
|
|
91
|
+
reachesRecord,
|
|
92
|
+
} from '@authup/access';
|
|
93
|
+
|
|
94
|
+
declare const catalog: unknown;
|
|
95
|
+
declare const grants: unknown;
|
|
96
|
+
declare function refetchCatalog(): Promise<unknown>;
|
|
97
|
+
|
|
98
|
+
const identity = {
|
|
99
|
+
type: 'user',
|
|
100
|
+
id: '7c9e6679-7425-40de-944b-e07fc1f099d6',
|
|
101
|
+
realmId: '4c8e0f9e-6c0a-4b1e-9d31-2a6f0b1c7e11',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
let evaluator;
|
|
105
|
+
try {
|
|
106
|
+
evaluator = await createAuthorizationEvaluator({ catalog, grants, identity });
|
|
107
|
+
} catch (error) {
|
|
108
|
+
if (!isAuthorizationCatalogStaleError(error)) {
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
evaluator = await createAuthorizationEvaluator({ catalog: await refetchCatalog(), grants, identity });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
await evaluateRecord(evaluator, {
|
|
116
|
+
name: 'user_update',
|
|
117
|
+
realm: '4c8e0f9e-6c0a-4b1e-9d31-2a6f0b1c7e11',
|
|
118
|
+
data: { attributes: { name: 'alice' } },
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const canDelete = await reachesRecord(evaluator, { name: 'user_delete', realm: null });
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
- `catalog` and `grants` are validated, so you can pass the parsed response bodies as they are. A malformed document throws.
|
|
125
|
+
- A grant naming a permission or a policy the catalog lacks throws `AuthorizationCatalogStaleError`: your catalog is older than the grant. Refetch and build again.
|
|
126
|
+
- A definition the server could not project arrives with `policies: null`, and a policy tree your copy cannot project (an unknown type, a configuration its validator refuses) denies the permissions that use it. Neither throws, and other permissions are unaffected.
|
|
127
|
+
- Without an `identity` only definitions whose policies need no identity can pass. Grants without an identity are refused.
|
|
128
|
+
- Custom policy types need both halves: `createAuthorizationEvaluator(input, { validators, evaluators })`, each replacing the built-in registry (spread `PolicyDefaultValidators` / `PolicyDefaultEvaluators` to extend it).
|
|
129
|
+
|
|
130
|
+
### Check one record
|
|
131
|
+
|
|
132
|
+
`evaluateRecord`, `evaluateRecordOneOf`, `reachesRecord`, `reachesRecordOneOf` and `evaluateRecordUpdate` take the record's realm explicitly:
|
|
133
|
+
|
|
134
|
+
| `realm` | Means |
|
|
135
|
+
|---|---|
|
|
136
|
+
| `'<realm id>'` | A row of that realm |
|
|
137
|
+
| `null` | A global row |
|
|
138
|
+
| `['<id>', null]` | A row spanning several realms; every one must be reached |
|
|
139
|
+
| `undefined` | Throws: a missing realm is a bug, never "global" |
|
|
140
|
+
|
|
141
|
+
- `data` is a `PolicyData` or a plain record and must not carry `realmMatch` itself; the helper sets it from `realm`. It is cloned, never written to.
|
|
142
|
+
- `reachesRecord*` returns `false` for a `PermissionError` and rethrows anything else.
|
|
143
|
+
- `evaluateRecordUpdate(evaluator, { name, current, next })` evaluates the stored row and the updated row, so an update can neither move a row into reach nor out of it.
|
|
144
|
+
- `hasUnboundedReach(evaluator, name)` is true when `compile` answers `allow`: an `any` grant with no narrowing policy.
|
|
145
|
+
|
|
146
|
+
### Use the batch check answer
|
|
147
|
+
|
|
148
|
+
A public client (a browser app) holds no secret, so it cannot read the catalog. It asks `POST /authorization/check` for its own verdicts instead and gates its UI with them:
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
import { createAuthorizationCheckEvaluator, reachesRecord } from '@authup/access';
|
|
152
|
+
|
|
153
|
+
declare const permissions: unknown; // the response body
|
|
154
|
+
|
|
155
|
+
const evaluator = await createAuthorizationCheckEvaluator({
|
|
156
|
+
permissions,
|
|
157
|
+
identity: {
|
|
158
|
+
type: 'user',
|
|
159
|
+
id: '7c9e6679-7425-40de-944b-e07fc1f099d6',
|
|
160
|
+
realmId: '4c8e0f9e-6c0a-4b1e-9d31-2a6f0b1c7e11',
|
|
161
|
+
realmName: 'acme',
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
const canEdit = await reachesRecord(evaluator, { name: 'user_update', realm: 'acme' });
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The answer lists each permission with the realms it holds in; a missing entry is a denial. A record realm matches its own entry, or the identity's own realm by id or by name. A realm the request did not ask about denies. The result is an upper bound: the server still decides each row.
|
|
169
|
+
|
|
170
|
+
## Realm reach
|
|
171
|
+
|
|
172
|
+
| `realmScope` | Reaches |
|
|
173
|
+
|---|---|
|
|
174
|
+
| `none` | Nothing |
|
|
175
|
+
| `own` (default) | Rows of the identity's own realm |
|
|
176
|
+
| `ownOrNull` | Own realm and global rows (`realm: null`) |
|
|
177
|
+
| `any` | Every realm and global rows |
|
|
178
|
+
|
|
179
|
+
A grant without a `realmScope` is `own`. An identity without a realm reaches nothing below `any`.
|
|
180
|
+
|
|
181
|
+
## Policy types
|
|
182
|
+
|
|
183
|
+
| `BuiltInPolicyType` | Value | Decides on |
|
|
184
|
+
|---|---|---|
|
|
185
|
+
| `ATTRIBUTES` | `attributes` | A MongoDB-style `query` over the `attributes` data |
|
|
186
|
+
| `ATTRIBUTE_NAMES` | `attributeNames` | Which field `names` the data may carry (with `invert`, a denylist) |
|
|
187
|
+
| `IDENTITY` | `identity` | The identity's `types` (`user`, `client`) |
|
|
188
|
+
| `REALM_MATCH` | `realmMatch` | The record realm against the identity's realm |
|
|
189
|
+
| `DATE` | `date` | A `start` / `end` date window |
|
|
190
|
+
| `TIME` | `time` | A `start` / `end` time of day (`HH:MM`), optionally limited by `interval` with `dayOfWeek`, `dayOfMonth` or `dayOfYear` |
|
|
191
|
+
| `COMPOSITE` | `composite` | Its `children`, combined `unanimous`, `affirmative` or `consensus` |
|
|
192
|
+
| `PERMISSION_BINDING` | `permissionBinding` | Whether the identity holds a grant that reaches the record |
|
|
193
|
+
|
|
194
|
+
Every policy accepts `invert`. Policy data is a `PolicyData` bag keyed by the type names (`attributes`, `identity`, `realmMatch`, ...); `definePolicyData` builds one with the well-known keys type-checked.
|
|
195
|
+
|
|
196
|
+
## API
|
|
197
|
+
|
|
198
|
+
| Export | Kind | Purpose |
|
|
199
|
+
|---|---|---|
|
|
200
|
+
| `PermissionEvaluator`, `IPermissionEvaluator` | class, interface | `evaluate`, `evaluateOneOf`, `preEvaluate`, `preEvaluateOneOf`, `compile` |
|
|
201
|
+
| `PermissionMemoryProvider`, `IPermissionProvider` | class, interface | Where an evaluator looks permission definitions up |
|
|
202
|
+
| `evaluateRecord`, `evaluateRecordOneOf`, `reachesRecord`, `reachesRecordOneOf`, `evaluateRecordUpdate`, `hasUnboundedReach` | function | Single-record checks with an explicit realm |
|
|
203
|
+
| `createAuthorizationEvaluator` | function | An evaluator over the catalog, the introspected grants and the identity |
|
|
204
|
+
| `createAuthorizationCheckEvaluator` | function | An evaluator over the batch check answer |
|
|
205
|
+
| `AuthorizationCatalogStaleError`, `isAuthorizationCatalogStaleError` | class, function | The refetch signal |
|
|
206
|
+
| `projectAuthorizationPolicy`, `AUTHORIZATION_POLICY_WITHHELD_TYPE` | function, const | The wire projection of a policy tree, and the node type the server sends in place of a tree the caller may not read |
|
|
207
|
+
| `AuthorizationCatalog`, `AuthorizationGrant`, `AuthorizationCheckPermissions`, `authorizationCatalogSchema`, ... | type, schema | Wire types and their zod schemas |
|
|
208
|
+
| `PolicyEngine`, `IPolicyEngine`, `IPolicyEvaluator` | class, interface | Evaluate a policy tree; `registerEvaluator(type, evaluator)` adds a type |
|
|
209
|
+
| `PolicyDefaultEvaluators`, `PolicyDefaultValidators` | const | The built-in registries |
|
|
210
|
+
| `BuiltInPolicyType`, `SystemPolicyName` | enum, const | Policy type names; the names of the provisioned system policies (`system.default`, ...) |
|
|
211
|
+
| `<Type>Policy`, `<Type>PolicyEvaluator`, `<Type>PolicyValidator` | type, class | One trio per built-in policy type |
|
|
212
|
+
| `IdentityPermissionBindingPolicyEvaluator` | class | Decides `permissionBinding` from the grants carried on the identity data |
|
|
213
|
+
| `PolicyData`, `definePolicyData`, `PolicyInput`, `IdentityPolicyData` | class, function, type | The evaluation data bag |
|
|
214
|
+
| `RealmScope`, `realmScopeMatches`, `normalizeRealmScope`, `compareRealmScope`, `minRealmScope`, `maxRealmScope` | enum, function | Realm reach |
|
|
215
|
+
| `aggregatePermissionPolicyBindings`, `grantDominates`, `buildPermissionKey` | function | Grant aggregation and comparison |
|
|
216
|
+
| `PermissionError`, `PolicyError`, `isPermissionError`, `isPolicyError` | class, function | Errors (both extend `AuthupError` from `@authup/errors`) |
|
|
217
|
+
| `createPolicyTransitionCollector`, `PolicyTransitionSink` | function, type | Collect the instant at which a `date` or `time` verdict could change |
|
|
218
|
+
|
|
219
|
+
## Notes
|
|
220
|
+
|
|
221
|
+
- **Realm reach is enforced by the `permissionBinding` policy.** A `PermissionEvaluator` over `PermissionMemoryProvider` ignores a binding's `realmScope`, and its default `permissionBinding` evaluator always passes. `createAuthorizationEvaluator` wires `IdentityPermissionBindingPolicyEvaluator`, and Authup binds `system.default` (which contains a `permissionBinding` policy) to every permission it creates, so that is where reach is checked. Build from the catalog when reach matters.
|
|
222
|
+
- **Identity data uses UUIDs.** The identity data validator checks `id`, `clientId` and `realmId` as UUIDs; any other value makes every `identity` policy fail.
|
|
223
|
+
- **`compile` can answer `post`.** That means the decision cannot be expressed as a query condition; evaluate every candidate row before you page, or the page and its total are wrong.
|
|
224
|
+
- **Each `PolicyEngine` owns its evaluator map.** The constructor copies the map, so `registerEvaluator` on one engine never reaches another.
|
|
225
|
+
|
|
226
|
+
## License
|
|
227
|
+
|
|
228
|
+
Made with 💚
|
|
229
|
+
|
|
230
|
+
Published under the [Apache 2.0 License](./LICENSE).
|
package/dist/index.d.mts
CHANGED
|
@@ -319,56 +319,6 @@ export declare class DatePolicyEvaluator implements IPolicyEvaluator {
|
|
|
319
319
|
evaluate(value: Record<string, any>, ctx: PolicyEvaluationContext): Promise<PolicyEvaluationResult>;
|
|
320
320
|
}
|
|
321
321
|
//#endregion
|
|
322
|
-
//#region src/policy/built-in/identity/types.d.ts
|
|
323
|
-
export interface IdentityPolicy extends BasePolicy {
|
|
324
|
-
/**
|
|
325
|
-
* Set of allowed identity types.
|
|
326
|
-
*/
|
|
327
|
-
types?: string[];
|
|
328
|
-
}
|
|
329
|
-
export type IdentityPolicyData = {
|
|
330
|
-
/**
|
|
331
|
-
* user, client
|
|
332
|
-
*/
|
|
333
|
-
type: string;
|
|
334
|
-
/**
|
|
335
|
-
* UUID
|
|
336
|
-
*/
|
|
337
|
-
id: string;
|
|
338
|
-
/**
|
|
339
|
-
* Client associated with identity.
|
|
340
|
-
*/
|
|
341
|
-
clientId?: string | null;
|
|
342
|
-
/**
|
|
343
|
-
* Realm id associated with identity.
|
|
344
|
-
*/
|
|
345
|
-
realmId?: string | null;
|
|
346
|
-
/**
|
|
347
|
-
* Realm name associated with identity.
|
|
348
|
-
*/
|
|
349
|
-
realmName?: string | null;
|
|
350
|
-
};
|
|
351
|
-
//#endregion
|
|
352
|
-
//#region src/policy/built-in/identity/data/validator.d.ts
|
|
353
|
-
declare class PolicyIdentityDataValidator extends Container<IdentityPolicyData> {
|
|
354
|
-
initialize(): void;
|
|
355
|
-
}
|
|
356
|
-
//#endregion
|
|
357
|
-
//#region src/policy/built-in/identity/validator.d.ts
|
|
358
|
-
export declare class IdentityPolicyValidator extends Container<IdentityPolicy> {
|
|
359
|
-
initialize(): void;
|
|
360
|
-
}
|
|
361
|
-
//#endregion
|
|
362
|
-
//#region src/policy/built-in/identity/evaluator.d.ts
|
|
363
|
-
export declare class IdentityPolicyEvaluator implements IPolicyEvaluator {
|
|
364
|
-
protected validator: IdentityPolicyValidator;
|
|
365
|
-
protected dataValidator: PolicyIdentityDataValidator;
|
|
366
|
-
constructor();
|
|
367
|
-
requires(): string[];
|
|
368
|
-
accessData(ctx: PolicyEvaluationContext): Promise<IdentityPolicyData | null>;
|
|
369
|
-
evaluate(value: Record<string, any>, ctx: PolicyEvaluationContext): Promise<PolicyEvaluationResult>;
|
|
370
|
-
}
|
|
371
|
-
//#endregion
|
|
372
322
|
//#region src/permission/realm-scope/constants.d.ts
|
|
373
323
|
/**
|
|
374
324
|
* Actor-relative realm reach of a permission grant.
|
|
@@ -461,6 +411,64 @@ export type PermissionPolicyBindingAggregated = {
|
|
|
461
411
|
grants: PermissionGrant[];
|
|
462
412
|
};
|
|
463
413
|
//#endregion
|
|
414
|
+
//#region src/policy/built-in/identity/types.d.ts
|
|
415
|
+
export interface IdentityPolicy extends BasePolicy {
|
|
416
|
+
/**
|
|
417
|
+
* Set of allowed identity types.
|
|
418
|
+
*/
|
|
419
|
+
types?: string[];
|
|
420
|
+
}
|
|
421
|
+
export type IdentityPolicyData = {
|
|
422
|
+
/**
|
|
423
|
+
* user, client
|
|
424
|
+
*/
|
|
425
|
+
type: string;
|
|
426
|
+
/**
|
|
427
|
+
* UUID
|
|
428
|
+
*/
|
|
429
|
+
id: string;
|
|
430
|
+
/**
|
|
431
|
+
* Client associated with identity.
|
|
432
|
+
*/
|
|
433
|
+
clientId?: string | null;
|
|
434
|
+
/**
|
|
435
|
+
* Realm id associated with identity.
|
|
436
|
+
*/
|
|
437
|
+
realmId?: string | null;
|
|
438
|
+
/**
|
|
439
|
+
* Realm name associated with identity.
|
|
440
|
+
*/
|
|
441
|
+
realmName?: string | null;
|
|
442
|
+
/**
|
|
443
|
+
* The grants the identity holds. The permission binding evaluator reads
|
|
444
|
+
* them from here rather than loading them, so evaluation is a function of
|
|
445
|
+
* the data alone. Whoever places an identity in the policy data places
|
|
446
|
+
* its grants with it, and an identity without them holds none we could
|
|
447
|
+
* prove.
|
|
448
|
+
*/
|
|
449
|
+
grants?: PermissionPolicyBinding[];
|
|
450
|
+
};
|
|
451
|
+
//#endregion
|
|
452
|
+
//#region src/policy/built-in/identity/data/validator.d.ts
|
|
453
|
+
declare class PolicyIdentityDataValidator extends Container<IdentityPolicyData> {
|
|
454
|
+
initialize(): void;
|
|
455
|
+
}
|
|
456
|
+
//#endregion
|
|
457
|
+
//#region src/policy/built-in/identity/validator.d.ts
|
|
458
|
+
export declare class IdentityPolicyValidator extends Container<IdentityPolicy> {
|
|
459
|
+
initialize(): void;
|
|
460
|
+
}
|
|
461
|
+
//#endregion
|
|
462
|
+
//#region src/policy/built-in/identity/evaluator.d.ts
|
|
463
|
+
export declare class IdentityPolicyEvaluator implements IPolicyEvaluator {
|
|
464
|
+
protected validator: IdentityPolicyValidator;
|
|
465
|
+
protected dataValidator: PolicyIdentityDataValidator;
|
|
466
|
+
constructor();
|
|
467
|
+
requires(): string[];
|
|
468
|
+
accessData(ctx: PolicyEvaluationContext): Promise<IdentityPolicyData | null>;
|
|
469
|
+
evaluate(value: Record<string, any>, ctx: PolicyEvaluationContext): Promise<PolicyEvaluationResult>;
|
|
470
|
+
}
|
|
471
|
+
//#endregion
|
|
464
472
|
//#region src/policy/built-in/realm-match/types.d.ts
|
|
465
473
|
export interface RealmMatchPolicy extends BasePolicy {
|
|
466
474
|
/**
|
|
@@ -526,17 +534,18 @@ export declare class PermissionBindingPolicyValidator extends Container<Permissi
|
|
|
526
534
|
}
|
|
527
535
|
//#endregion
|
|
528
536
|
//#region src/policy/built-in/permission-binding/identity-evaluator.d.ts
|
|
529
|
-
type IdentityPermissionProvider = {
|
|
530
|
-
getFor(identity: IdentityPolicyData): Promise<PermissionPolicyBinding[]>;
|
|
531
|
-
};
|
|
532
537
|
export declare class IdentityPermissionBindingPolicyEvaluator implements IPolicyEvaluator {
|
|
533
538
|
protected validator: PermissionBindingPolicyValidator;
|
|
534
539
|
protected identityEvaluator: IdentityPolicyEvaluator;
|
|
535
540
|
protected realmMatchEvaluator: RealmMatchPolicyEvaluator;
|
|
536
|
-
|
|
537
|
-
constructor(identityPermissionProvider: IdentityPermissionProvider);
|
|
541
|
+
constructor();
|
|
538
542
|
requires(): string[];
|
|
539
543
|
accessData(ctx: PolicyEvaluationContext): Promise<PermissionPolicyBindingAggregated | null>;
|
|
544
|
+
/**
|
|
545
|
+
* The grants the identity holds. An identity carrying none is missing
|
|
546
|
+
* data, which throws a PolicyError carrying the refusing issue.
|
|
547
|
+
*/
|
|
548
|
+
accessGrants(ctx: PolicyEvaluationContext, identity: IdentityPolicyData): PermissionPolicyBinding[];
|
|
540
549
|
evaluate(value: Record<string, any>, ctx: PolicyEvaluationContext): Promise<PolicyEvaluationResult>;
|
|
541
550
|
}
|
|
542
551
|
//#endregion
|
|
@@ -886,6 +895,81 @@ export declare class PermissionEvaluator implements IPermissionEvaluator {
|
|
|
886
895
|
compile(ctx: PermissionCompileContext): Promise<PermissionCompileResult>;
|
|
887
896
|
}
|
|
888
897
|
//#endregion
|
|
898
|
+
//#region src/permission/record/types.d.ts
|
|
899
|
+
/**
|
|
900
|
+
* The realm of the record a check is evaluated against: a realm id, `null`
|
|
901
|
+
* for a global row, or a list of either when every listed realm must be
|
|
902
|
+
* reached.
|
|
903
|
+
*/
|
|
904
|
+
export type RecordRealm = string | null | (string | null)[];
|
|
905
|
+
/** One record a single-record check is evaluated against. */
|
|
906
|
+
export type RecordTarget = {
|
|
907
|
+
/**
|
|
908
|
+
* The RECORD's realm (`null` = global row), or the target realm on
|
|
909
|
+
* create. This is what each grant's `realm_scope` is matched against.
|
|
910
|
+
* It is distinct from `PermissionEvaluationContext.realmId`, which is the
|
|
911
|
+
* realm the PERMISSION is bound to. Required: `undefined` throws, so a
|
|
912
|
+
* caller cannot drop the realm by omission and neutral-pass every grant's
|
|
913
|
+
* `realm_scope`.
|
|
914
|
+
*/
|
|
915
|
+
realm: RecordRealm;
|
|
916
|
+
/**
|
|
917
|
+
* The policy data the record is evaluated with: the row under
|
|
918
|
+
* `attributes` (for attribute policies on the grant; never synthesized,
|
|
919
|
+
* so without it an attribute policy stays pending), an identity, a custom
|
|
920
|
+
* key. Never mutated; must not carry `realmMatch`, which is set from
|
|
921
|
+
* `realm`.
|
|
922
|
+
*/
|
|
923
|
+
data?: PolicyData | PolicyInput;
|
|
924
|
+
};
|
|
925
|
+
export type RecordEvaluationContext = RecordTarget & {
|
|
926
|
+
name: string | string[];
|
|
927
|
+
options?: PermissionEvaluationOptions;
|
|
928
|
+
};
|
|
929
|
+
export type RecordUpdateEvaluationContext = {
|
|
930
|
+
name: string | string[];
|
|
931
|
+
options?: PermissionEvaluationOptions;
|
|
932
|
+
/** The stored row: the actor must reach it to change it at all. */
|
|
933
|
+
current: RecordTarget;
|
|
934
|
+
/** The updated row: it must stay in reach afterwards. */
|
|
935
|
+
next: RecordTarget;
|
|
936
|
+
};
|
|
937
|
+
//#endregion
|
|
938
|
+
//#region src/permission/record/module.d.ts
|
|
939
|
+
/**
|
|
940
|
+
* Throws a permission error unless `name` passes for the record: each grant's
|
|
941
|
+
* `realm_scope` is matched against the record's realm and its policies are
|
|
942
|
+
* evaluated against the record. An array of names must ALL pass, like
|
|
943
|
+
* `evaluate()`.
|
|
944
|
+
*/
|
|
945
|
+
export declare function evaluateRecord(evaluator: IPermissionEvaluator, ctx: RecordEvaluationContext): Promise<void>;
|
|
946
|
+
/** {@link evaluateRecord} where ANY of the names suffices, like `evaluateOneOf()`. */
|
|
947
|
+
export declare function evaluateRecordOneOf(evaluator: IPermissionEvaluator, ctx: RecordEvaluationContext): Promise<void>;
|
|
948
|
+
/**
|
|
949
|
+
* {@link evaluateRecord} as a predicate. Only a permission error reads as
|
|
950
|
+
* `false`; anything else propagates, so a failure on the authorization path
|
|
951
|
+
* never turns into a quiet "not authorized".
|
|
952
|
+
*/
|
|
953
|
+
export declare function reachesRecord(evaluator: IPermissionEvaluator, ctx: RecordEvaluationContext): Promise<boolean>;
|
|
954
|
+
/** {@link evaluateRecordOneOf} as a predicate, like {@link reachesRecord}. */
|
|
955
|
+
export declare function reachesRecordOneOf(evaluator: IPermissionEvaluator, ctx: RecordEvaluationContext): Promise<boolean>;
|
|
956
|
+
/**
|
|
957
|
+
* An update passes only when `name` passes for BOTH the stored row (the actor
|
|
958
|
+
* may only change a row it can already reach) and the updated row (the row
|
|
959
|
+
* must stay in reach afterwards). Evaluating the updated row alone lets an
|
|
960
|
+
* update move a row INTO reach.
|
|
961
|
+
*/
|
|
962
|
+
export declare function evaluateRecordUpdate(evaluator: IPermissionEvaluator, ctx: RecordUpdateEvaluationContext): Promise<void>;
|
|
963
|
+
/**
|
|
964
|
+
* Whether a grant of `name` (any of, for an array) reaches every realm with
|
|
965
|
+
* no narrowing policy, i.e. `realm_scope: any`. Reads the `compile()`
|
|
966
|
+
* verdict, so it relies on the binding policy (`system.default`) being bound
|
|
967
|
+
* to the permission: without it a grant's reach is never evaluated and any
|
|
968
|
+
* grant compiles to `allow`. Fail-closed: a policy-bearing `any` grant
|
|
969
|
+
* compiles to `conditional` and reads as `false`.
|
|
970
|
+
*/
|
|
971
|
+
export declare function hasUnboundedReach(evaluator: IPermissionEvaluator, name: string | string[]): Promise<boolean>;
|
|
972
|
+
//#endregion
|
|
889
973
|
//#region src/permission/authorization/error.d.ts
|
|
890
974
|
export declare const AUTHORIZATION_CATALOG_STALE_ERROR_INSTANCE: unique symbol;
|
|
891
975
|
/**
|
|
@@ -1291,4 +1375,5 @@ export declare const authorizationCheckPermissionsSchema: z.ZodArray<z.ZodObject
|
|
|
1291
1375
|
realms: z.ZodArray<z.ZodNullable<z.ZodString>>;
|
|
1292
1376
|
}, z.core.$strip>>;
|
|
1293
1377
|
//#endregion
|
|
1378
|
+
export {};
|
|
1294
1379
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/policy/data.ts","../src/policy/evaluation/context/types.ts","../src/policy/evaluation/context/define.ts","../src/policy/evaluation/context/transition.ts","../src/policy/evaluation/types.ts","../src/policy/types.ts","../src/policy/engine/types.ts","../src/policy/engine/module.ts","../src/policy/issue/constants.ts","../src/policy/issue/types.ts","../src/policy/issue/define.ts","../src/policy/error/module.ts","../src/policy/error/check.ts","../src/policy/helpers/invert.ts","../src/policy/built-in/attribute-names/types.ts","../src/policy/built-in/attribute-names/validator.ts","../src/policy/built-in/attributes/types.ts","../src/policy/built-in/attributes/define.ts","../src/policy/built-in/attributes/validator.ts","../src/policy/built-in/attributes/evaluator.ts","../src/policy/built-in/attribute-names/evaluator.ts","../src/policy/built-in/composite/types.ts","../src/policy/built-in/composite/validator.ts","../src/policy/built-in/composite/evaluator.ts","../src/policy/built-in/composite/helper.ts","../src/policy/built-in/date/types.ts","../src/policy/built-in/date/validator.ts","../src/policy/built-in/date/evaluator.ts","../src/policy/built-in/identity/types.ts","../src/policy/built-in/identity/data/validator.ts","../src/policy/built-in/identity/validator.ts","../src/policy/built-in/identity/evaluator.ts","../src/permission/realm-scope/constants.ts","../src/permission/realm-scope/helpers.ts","../src/permission/types.ts","../src/policy/built-in/realm-match/types.ts","../src/policy/built-in/realm-match/validator.ts","../src/policy/built-in/realm-match/evaluator.ts","../src/policy/built-in/permission-binding/types.ts","../src/policy/built-in/permission-binding/validator.ts","../src/policy/built-in/permission-binding/identity-evaluator.ts","../src/policy/built-in/permission-binding/module.ts","../src/policy/built-in/time/constants.ts","../src/policy/built-in/time/types.ts","../src/policy/built-in/time/validator.ts","../src/policy/built-in/time/evaluator.ts","../src/policy/built-in/time/helpers.ts","../src/policy/built-in/constants.ts","../src/policy/built-in/types.ts","../src/policy/built-in/define.ts","../src/policy/constants.ts","../src/policy/input.ts","../src/permission/error/module.ts","../src/permission/error/check.ts","../src/permission/helpers/aggregate.ts","../src/permission/helpers/equal.ts","../src/permission/helpers/grant.ts","../src/permission/helpers/key.ts","../src/permission/provider/types.ts","../src/permission/provider/memory.ts","../src/permission/evaluator/types.ts","../src/permission/evaluator/module.ts","../src/permission/authorization/error.ts","../src/permission/authorization/check.ts","../src/permission/authorization/types.ts","../src/permission/authorization/check-schema.ts","../src/permission/authorization/constants.ts","../src/permission/authorization/module.ts","../src/permission/authorization/policy.ts","../src/permission/authorization/schema.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/policy/data.ts","../src/policy/evaluation/context/types.ts","../src/policy/evaluation/context/define.ts","../src/policy/evaluation/context/transition.ts","../src/policy/evaluation/types.ts","../src/policy/types.ts","../src/policy/engine/types.ts","../src/policy/engine/module.ts","../src/policy/issue/constants.ts","../src/policy/issue/types.ts","../src/policy/issue/define.ts","../src/policy/error/module.ts","../src/policy/error/check.ts","../src/policy/helpers/invert.ts","../src/policy/built-in/attribute-names/types.ts","../src/policy/built-in/attribute-names/validator.ts","../src/policy/built-in/attributes/types.ts","../src/policy/built-in/attributes/define.ts","../src/policy/built-in/attributes/validator.ts","../src/policy/built-in/attributes/evaluator.ts","../src/policy/built-in/attribute-names/evaluator.ts","../src/policy/built-in/composite/types.ts","../src/policy/built-in/composite/validator.ts","../src/policy/built-in/composite/evaluator.ts","../src/policy/built-in/composite/helper.ts","../src/policy/built-in/date/types.ts","../src/policy/built-in/date/validator.ts","../src/policy/built-in/date/evaluator.ts","../src/permission/realm-scope/constants.ts","../src/permission/realm-scope/helpers.ts","../src/permission/types.ts","../src/policy/built-in/identity/types.ts","../src/policy/built-in/identity/data/validator.ts","../src/policy/built-in/identity/validator.ts","../src/policy/built-in/identity/evaluator.ts","../src/policy/built-in/realm-match/types.ts","../src/policy/built-in/realm-match/validator.ts","../src/policy/built-in/realm-match/evaluator.ts","../src/policy/built-in/permission-binding/types.ts","../src/policy/built-in/permission-binding/validator.ts","../src/policy/built-in/permission-binding/identity-evaluator.ts","../src/policy/built-in/permission-binding/module.ts","../src/policy/built-in/time/constants.ts","../src/policy/built-in/time/types.ts","../src/policy/built-in/time/validator.ts","../src/policy/built-in/time/evaluator.ts","../src/policy/built-in/time/helpers.ts","../src/policy/built-in/constants.ts","../src/policy/built-in/types.ts","../src/policy/built-in/define.ts","../src/policy/constants.ts","../src/policy/input.ts","../src/permission/error/module.ts","../src/permission/error/check.ts","../src/permission/helpers/aggregate.ts","../src/permission/helpers/equal.ts","../src/permission/helpers/grant.ts","../src/permission/helpers/key.ts","../src/permission/provider/types.ts","../src/permission/provider/memory.ts","../src/permission/evaluator/types.ts","../src/permission/evaluator/module.ts","../src/permission/record/types.ts","../src/permission/record/module.ts","../src/permission/authorization/error.ts","../src/permission/authorization/check.ts","../src/permission/authorization/types.ts","../src/permission/authorization/check-schema.ts","../src/permission/authorization/constants.ts","../src/permission/authorization/module.ts","../src/permission/authorization/policy.ts","../src/permission/authorization/schema.ts"],"mappings":";;;;;;;;iBAOiB;EACb,IAAI,aAAa;EACjB,IAAI;EACJ,IAAI,aAAa,cAAe;EAChC,OAAO;EAEP,YAAY;EACZ,aAAa;EAEb,SAAU;;qBAGD,sBAAsB;YACrB,MAAM;YAEN,WAAY;EAGlB,YAAA,OAAM,qBACN,YAAW;EAMf,IAAI,aAAa,aAAa,OAAO;EAKrC,IAAI,aAAa,cAAe;EAQhC,IAAI;EAIJ,OAAO;EAKP,aAAa;EAIb,YAAY;EAIZ,SAAK;;;;;;;;;;;;;YC5CG;EACR,OAAO,IAAI;;YAGH;WACC,YAAY,eAAe;WAC3B;WACA;WACA;WACA,MAAM;;;;;;;WAON;;;;;;;;;WASA;;;;;;WAMA,cAAc;;YAGf,+BAA+B,QAAQ;;;wBC1CnC,8BACZ,QAAO,+BACP;;;YCHQ,4BAA4B;;;;WAI3B,MAAM;;;;;;wBAOH,mCAAoC;;;YCTxC,mBAAmB,eAAe;YAElC;EACR;;;;;;;;;EASA;;;;;;;;;;EAUA,YAAY;EACZ,SAAS;;iBAGI;;;;;;;;;;EAUb,UAAU,OAAO;;;;;;;;;;;;EAajB,aAAa,OAAO,qBAAqB,SAAS,0BAA0B,QAAQ;;;;EAKpF,SAAS,OAAO,qBAAqB,SAAS,0BAA0B,QAAQ;;;;;;;YCrDxE,mBAAmB,eAAe,UAAU;YAE5C,WAAW;;;;EAInB,OAAO;;;;EAKP;;YAGQ,eACR,UAAU,sBAAsB,qBAChC,6BACA,IAAI,WAAW;;;iBCnBF;EACb,SAAS,QAAQ,YAAY,SAAS,0BAA2B,QAAQ;EAEzE,eAAe,QAAQ,YAAY,SAAS,0BAA2B;;;;;;;;qBC2B9D,wBAAwB;YACvB,YAAa,eAAe;EAE1B,YAAA,aAAY;EAWjB,kBACH,cACA,WAAW;EAKR,mBAAmB,YAAY;;;;;EAWhC,SAAS,QAAQ,YAAY,KAAK,0BAA2B,QAAQ;EAoHrE,eAAe,QAAQ,YAAY,KAAK,0BAA2B;;;;oBCrLjE;EACR;EACA;;oBAGQ;EAER;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EAGA;;;;YC5BQ,kBAAkB;YAClB,mBAAmB;YAEnB,cAAc,kBAAkB;;;wBCF5B,sBAAsB,OAAO,KAAK,2BAA4B;wBAI9D,uBAAuB,OAAO,KAAK,4BAA6B;;;qBCJnE;qBAEA,oBAAoB;EACjB,YAAA,kBAAkB,sBAAsB,SAAS;SAStD,kBAAkB,eAAY;SAO9B,2BAAuB;SAOvB,2BAAuB;;;;wBC1BlB,cAAc,iBAAiB,SAAS;;;KCHnD,YAAY;wBAED,yBACZ,kBACA,mBAAmB;;;iBCFN,6BAA6B;EAC1C;;;;qBCES,sCAAsC,UAAU;EAChD;;;;YCHD,sBACR,UAAU,sBAAsB,uBAChC,wBAAwB;iBAEX,iBACb,UAAU,sBAAsB,6BAC1B;EACN,OAAO,sBAAsB;;;;wBCRjB,uBACZ,UAAU,sBAAsB,qBAEhC,MAAM,iBAAiB,KACvB,iBAAiB;;;qBCDR,0BACT,UAAU,sBAAsB,6BAC1B,UAAU,iBAAiB;EACxB;;;;qBCKA,0BACT,UAAU,sBAAsB,gCACvB;YACC,WAAY,0BAA0B;YAEtC,QAAS;;EAOnB;EAIM,YAAY,OAAO,sBAAuB,QAAQ;EAiBlD,WAAW,KAAK,0BAA2B,QAAQ;EAkBnD,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;YA6CxE,SACN;;;;qBCtGK,yCAAyC;YACxC,WAAY;YAEZ,qBAAsB;;EAO1B,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;iBCfrE,wBAAwB;;;;EAIrC,sBAAsB;;;;EAItB,UAAU;;;;qBCLD,iCAAiC,UAAU;EAC3C;;;;qBCIA,oCAAoC;YACnC,WAAY;;EAMhB,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;wBCdtE,kBACZ,OAAO,iBACP,SAAS,eAAe;;;iBCJX,mBAAmB;EAChC,iBAAiB;EAEjB,eAAe;;;;qBCAN,4BAA4B,UAAU;EACtC;;;;qBCwCA,+BAA+B;YAC9B,WAAY;;EAMhB,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;;;;;;;;oBC9C1E;;EAER;;EAEA;;EAEA;;EAEA;;;qBAIS,mBAAmB,UAAU;;;;;;;wBCb1B,oBAAoB,WAAW,yBAAyB;;;;;wBAYxD,kBACZ,OAAO,qBACP,OAAO;;wBAMK,cAAc,QAAQ,SAAS,sCAAsC;;wBAerE,cAAc,QAAQ,SAAS,sCAAsC;;;;;;;wBAyCrE,kBACZ,UAAU,iCACV,0BAA0B,yCAC1B,4CACA;;;YClFQ;EACR;EACA;EACA;EACA,sBAAsB;;;;;;;YAQd;EACR,YAAY;EACZ,WAAW;;;;;;EAMX,gBAAgB;;;;;;;YAQR;;EAER,eAAe;;;;;;EAMf,SAAS;;;;;;;;YASD;EACR,YAAY;EACZ,QAAQ;;;;iBChDK,uBAAuB;;;;EAIpC;;YAGQ;;;;EAIR;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;;;;EAQA,SAAS;;;;cCnBA,oCAAoC,UAAU;EAC9C;;;;qBCfA,gCAAgC,UAAU;EAC1C;;;;qBCEA,mCAAmC;YAClC,WAAY;YAEZ,eAAgB;;EAO1B;EAIM,WAAW,KAAK,0BAA2B,QAAQ;EAiBnD,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;iBCnCrE,yBAAyB;;;;EAItC,sBAAsB;;;;;EAMtB;;;;EAKA;;;;;EAMA;;;;;;;EAQA,WAAW;;;;qBC1BF,kCAAkC,UAAU;EAC5C;;;;qBCUA,qCAAqC;YACpC,WAAY;YAEZ,mBAAmB;YAEnB,qBAAsB;;EAQhC,SAAS,OAAO;;;;;;;;;;;;EAsBV,YAAY,OAAO,qBAAqB,KAAK,0BAA2B,QAAQ;EAuFhF,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;iBC1IrE,gCAAgC;;;qBCGpC,yCAAyC,UAAU;EACnD;;;;qBC6BA,oDAAoD;YACnD,WAAY;YAEZ,mBAAmB;YAEnB,qBAAsB;;EAQhC;EASM,WAAW,KAAK,0BAA2B,QAAQ;;;;;EAqBzD,aACI,KAAK,yBACL,UAAU,qBACV;EAcE,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;qBC1FzE,4CAA4C;YAC3C,WAAW;;EAMrB;EAMM,SAAS,OAAO,sBAAsB,QAAQ;;;;oBClB5C;EACR;EACA;EACA;EACA;;;;iBCDa,mBAAmB;;;;EAIhC,0BAA0B;;;;EAK1B,wBAAwB;;;;EAKxB,cAAc;;;;EAKd;;;;EAKA;;;;EAKA;;;;qBC1BS,4BAA4B,UAAU;EACtC;;;;qBCgGA,+BAA+B;YAC9B,WAAY;;EAMhB,SAAS,OAAO,qBAAqB,KAAK,0BAA0B,QAAQ;;;;wBC5GtE,uBACZ,mBAAgB,YAAA,mBAAA,SAAA,mBAAA,UAAA,mBAAA;wBAOJ,wBACZ,mBAAgB,YAAA,mBAAA,UAAA,mBAAA;wBAMJ,uBACZ,mBAAgB,YAAA,mBAAA;;;oBClBR;;;;EAIR;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAKA;;;;EAKA;;qBAMS;;;;;;;;;;KC9BR,wBAAwB,UAAU,sBAAsB;GACxD,kBAAkB,aAAa,iBAAiB;GAChD,kBAAkB,kBAAkB;GACpC,kBAAkB,OAAO;GACzB,kBAAkB,YAAY;GAC9B,kBAAkB,OAAO;GACzB,kBAAkB,WAAW;GAC7B,kBAAkB,qBAAqB;GACvC,kBAAkB,cAAc;;YAGzB,qBAAqB,UAAU,sBAAsB,0BAC5D,WAAW,wBAAwB,SAAS,MAAM,wBAAwB,GAAG;YAGtE,gBAAgB,UAAU,sBAAsB,0BACvD,WAAW,qBAAqB,KAAK,qBAAqB,GAAG;EAC1D,MAAM;WAEN;;;wBC1BQ,qBACZ,gBAAgB,sBAChB,UAAU,0BAA0B,IAEpC,MAAM,GACN,MAAM,IACN,eAAe,GAAG;;;qBCYT;;;;;;;;;;;;;;;;;;;qBAoBA,yBAA0B,SAAS;;;;;;;;;;;iBC7B/B;GACZ,kBAAkB,YAAY;GAC9B,kBAAkB,cAAc;GAChC,kBAAkB;GAClB;;;;;;;;;wBAUW,iBAAiB,QAAO,cAAmB;;;qBCtB9C;qBAEA,wBAAwB;EACrB,YAAA,UAAS;SASd,SAAS,eAAY;SAOrB,OAAO,eAAY;SAOnB,UAAU,kBAAe;SAOzB,iBAAiB,yBAAyB,SAAS,gBAAa;;;;wBClC3D,kBAAkB,iBAAiB,SAAS;;;;;;;;;;wBC4C5C,kCACZ,OAAO,4BACR;;;wBC/Ca,+BACZ;EAAK,YAAY;GACjB;EAAK,YAAY;;;;;;;;;;wBC+GL,eAAe,QAAQ,iBAAiB,OAAO;;;wBC5G/C,mBACZ,OAAO;;;YCNC;EACR;EACA;EACA;;iBAGa;EACb,QAAQ,UAAU,uBAAwB,QAAQ;;;;qBCLzC,oCAAoC;YACnC,OAAQ,eAAe;EAErB,YAAA,QAAO;EAIb,QACF,SAAS,uBACV,QAAQ;EAeX,QAAQ,OAAO;;;;iBCvBF;EACb,SAAS,KAAK,8BAA8B;EAE5C,cAAc,KAAK,8BAA8B;EAEjD,YAAY,KAAK,8BAA8B;EAE/C,iBAAiB,KAAK,8BAA8B;EAEpD,QAAQ,KAAK,2BAA2B,QAAQ;;YAGxC;EACR,UAAU;EACV,eAAe;EACf;EACA;;YAGQ;EACR,sBAAsB;EACtB;EACA;;;;;;;;;;EAUA;;;;;;;EAOA,cAAc;;YAGN;EACR;EACA;EACA;EACA,OAAO;EACP,UAAU;;YAGF;;;;;EAKR;EACA;EACA;;;;;;EAMA,OAAO;;;;;;;;EAQP;;;;;;;;;;;;;YAcQ;EAA4B;;EAClC;;EACA;EAAwB,WAAW;;EACnC;;;;qBClEO,+BAA+B;YAC9B,UAAW;YAEX,cAAe;YAEf;YAEA;EAIE,YAAA,SAAS;YAeL,QACZ,eACA;IACI;IACA;MAEJ,QAAQ;EAUN,SAAS,KAAK,8BAA+B;EAsH7C,cAAc,KAAK,8BAA+B;EAYlD,YAAY,KAAK,8BAA+B;EAehD,iBAAiB,KAAK,8BAA+B;;;;;;;;;;;EAsBrD,QAAQ,KAAK,2BAA4B,QAAQ;;;;;;;;;YCpO/C;;YAGA;;;;;;;;;EASR,OAAO;;;;;;;;EAQP,OAAO,aAAa;;YAGZ,0BAA0B;EAClC;EACA,UAAU;;YAGF;EACR;EACA,UAAU;;EAEV,SAAS;;EAET,MAAM;;;;;;;;;;wBC2BY,eAClB,WAAW,sBACX,KAAK,0BACN;;wBAKmB,oBAClB,WAAW,sBACX,KAAK,0BACN;;;;;;wBAsBmB,cAClB,WAAW,sBACX,KAAK,0BACN;;wBAKmB,mBAClB,WAAW,sBACX,KAAK,0BACN;;;;;;;wBAUmB,qBAClB,WAAW,sBACX,KAAK,gCACN;;;;;;;;;wBAuBmB,kBAClB,WAAW,sBACX,0BACD;;;qBCtJU;;;;;;;;;;;;;qBAcA,uCAAuC;EACpC,YAAA;;;;;;;;wBCTA,iCAAiC,iBAAkB,SAAS;;;;;;;YCAhE;EACR;EACA;EACA,WAAW;GACV;;YAGO;EACR;EACA;EACA;EACA,sBAAsB;;;;;;;;;EAStB;;;;;YAMQ;;;;;EAKR,UAAU,eAAe;EACzB,aAAa;;;;;;;;YASL;EACR;EACA;EACA;;;;EAIA,iBAAiB;;;;EAIjB;;YAGQ;;;;EAIR;;;;;EAKA;;;;;;EAMA,WAAW;;YAGH;;;;;EAKR,aAAa;;;;;;;EAOb,aAAa;;;;;;;;;;;;;;;YAgBL,8BAA8B,WAAW,WAClD,WAAW,gBACd;;;;;;YAOY;EACR;EACA,QAAQ;;;;;;;;;;;YAYA,gCAAgC;YAEhC;;;;EAIR;;;;;;;EAOA,WAAW;;;;;;;;;;qBCrIF,kDAAkD,UAAU;EAC5D;;YAUD;EACR,aAAa;EACb,UAAU;;;;;;;;wBASQ,sCAClB,OAAO,mCACP,QAAQ;;;;;;;;;;;;;;;qBCxBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBC8GS,6BAClB,OAAO,6BACP,UAAS,gCACT,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6NU,kCAClB,OAAO,mCACP,QAAQ;;;;;;;;;;;;;;;;;;;;;wBC9SU,2BAClB,gBACA,aAAY,mBACZ,QAAQ;;;;;;;;;wBAyDI,qBAAqB,QAAQ;;;;;;;;;;qBCpFhC,2BAAyB,EAAA;;GAA6C,EAAA,KAAA;;;;;qBAMtE,+BAA6B,EAAA;;;;;;GAMxC,EAAA,KAAA;qBAEW,4BAA0B,EAAA;;;;;;;;;;;GAGrC,EAAA,KAAA;;;;;;qBAOW,0BAAwB,EAAA;;;;;;GAMnC,EAAA,KAAA;qBAEW,6BAA2B,EAAA;;;;;;;;;GAMtC,EAAA,KAAA;;;;;;;;qBASW,6CAA6C,UAAU;EACvD;;YAWD;EACR,SAAS;EACT,QAAQ;EACR,UAAU;;;;;;;;;;;;;;;;;;;wBAoBQ,iCAClB,OAAO,8BACP,QAAQ;;;;;;qBA4DC,oCAAkC,EAAA;;;GAG7C,EAAA,KAAA;qBAEW,qCAAmC,EAAA,SAAA,EAAA;;;GAA8C,EAAA,KAAA"}
|