@aooth/arbac-moost 0.1.73 → 0.1.75

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.
@@ -1,4 +1,4 @@
1
- import { r as AoothArbacClaims, t as ArbacUserProvider } from "../user.provider-NMSzynGK.mjs";
1
+ import { r as AoothArbacClaims, t as ArbacUserProvider } from "../user.provider-D0ySI_-A.mjs";
2
2
  import { TAtscriptAnnotatedType, TAtscriptTypeObject, TMetadataMap, TValidatorOptions, Validator } from "@atscript/typescript/utils";
3
3
  import { AoothUserCredentials } from "@aooth/user/atscript-db/model.as";
4
4
  //#region src/atscript/auto-provider.d.ts
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
- import { _ as ProjectionOf, a as conjoinArbacDbScopes, b as TArbacMeta, c as ArbacDbScope, d as extractUsedControlValues, f as applyAllowedFieldsAndSet, g as OwnFieldKey, h as NavTarget, i as ConjoinArbacDbScopesOptions, l as AsArbacDbController, m as NavRelationKey, n as ArbacUserProviderToken, o as RefForeignKey, p as ControlsOf, r as AoothArbacClaims, s as RefTableSource, t as ArbacUserProvider, u as enforceControlsPolicy, v as ARBAC_DELEGATED_AUTH, x as getArbacMate, y as ArbacDelegatedAuth } from "./user.provider-NMSzynGK.mjs";
1
+ import { _ as ProjectionOf, a as conjoinArbacDbScopes, b as TArbacMeta, c as ArbacDbScope, d as extractUsedControlValues, f as applyAllowedFieldsAndSet, g as OwnFieldKey, h as NavTarget, i as ConjoinArbacDbScopesOptions, l as AsArbacDbController, m as NavRelationKey, n as ArbacUserProviderToken, o as RefForeignKey, p as ControlsOf, r as AoothArbacClaims, s as RefTableSource, t as ArbacUserProvider, u as enforceControlsPolicy, v as ARBAC_DELEGATED_AUTH, x as getArbacMate, y as ArbacDelegatedAuth } from "./user.provider-D0ySI_-A.mjs";
2
2
  import { Arbac, Arbac as Arbac$1, TArbacCompiledRule, TArbacEvalResult, TArbacEvalResult as TArbacEvalResult$1, TArbacRole, TArbacRoleForResource, TArbacRule, arbacPatternToRegex } from "@aooth/arbac-core";
3
+ import { ControlGate, TProjection, TScopeFieldRules, TScopeFilter, conjoinScopeFilters } from "@aooth/arbac";
3
4
  import { TAuthGuardDef } from "@moostjs/event-http";
4
5
  import { EventContext } from "@wooksjs/event-core";
5
- import { ControlGate, TProjection, TScopeFieldRules, TScopeFilter } from "@aooth/arbac";
6
- import { FilterExpr, TDbRemoveGuardContext, TDbWriteCheckContext, TDbWriteGuardContext, TDeleteOptions, TMetaResponse, TRowResolveOptions, TWriteOptions } from "@atscript/db";
7
- import { AsDbReadableController, AsJsonValueHelpController, AsValueHelpController, TDbControlsType, TDbIndexFieldPaths, TDbRequestContext, ValueHelpSelect } from "@atscript/moost-db";
8
- import { TAtscriptAnnotatedType, TAtscriptDataType } from "@atscript/typescript/utils";
6
+ import { FilterExpr, TDbRemoveGuardContext, TDbWriteCheckContext, TDbWriteGuardContext, TDeleteOptions, TMetaResponse, TRowResolveOptions, TWriteOptions, UniqueryControls } from "@atscript/db";
7
+ import { AsDbReadableController, AsJsonValueHelpController, AsValueHelpController, TDbActionScopeContext, TDbControlsType, TDbIndexFieldPaths, TDbRequestContext, ValueHelpSelect } from "@atscript/moost-db";
8
+ import { TAtscriptAnnotatedType, TAtscriptDataType, TSerializedAnnotatedType } from "@atscript/typescript/utils";
9
9
  //#region src/db/visibility.d.ts
10
10
  /**
11
11
  * The slice of an atscript-db readable (table / view) the visibility walk
@@ -54,8 +54,6 @@ interface VisibilityTableSource {
54
54
  * @since 0.1.72
55
55
  */
56
56
  jsonParents?: ReadonlySet<string>;
57
- /** Whether the adapter searches natively (`/meta` search-surface pruning). @since 0.1.72 */
58
- isSearchable?(): boolean;
59
57
  }
60
58
  /** Relation name → the visibility its joined rows obey, or `null` when hidden. */
61
59
  type ArbacRelationResolution = ReadonlyMap<string, MetaVisibility | null>;
@@ -291,6 +289,7 @@ declare const ArbacResource: (name: string) => MethodDecorator & ClassDecorator
291
289
  declare const ArbacAction: (name: string) => MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
292
290
  //#endregion
293
291
  //#region src/db/as-arbac-db-readable-controller.d.ts
292
+ type TSelect = UniqueryControls["$select"];
294
293
  /**
295
294
  * Read-only mirror of {@link AsArbacDbController} for view-style controllers
296
295
  * built on top of `@atscript/moost-db`'s {@link AsDbReadableController}.
@@ -303,17 +302,25 @@ declare class AsArbacDbReadableController<T extends TAtscriptAnnotatedType = TAt
303
302
  /** Same contract as {@link AsArbacDbController.prepareRequest}. */
304
303
  protected prepareRequest(ctx: TDbRequestContext): Promise<void>;
305
304
  /** Same contract as {@link AsArbacDbController.transformFilter}. */
306
- protected transformFilter(filter: Record<string, unknown> | undefined): Record<string, unknown>;
305
+ protected transformFilter(filter: Record<string, unknown> | undefined): FilterExpr | Promise<FilterExpr>;
306
+ /** Same contract as {@link AsArbacDbController.transformRelationFilter}. Since 0.1.74. */
307
+ protected transformRelationFilter(path: string, filter: FilterExpr): FilterExpr | Promise<FilterExpr>;
307
308
  /** Same contract as {@link AsArbacDbController.transformProjection}. */
308
- protected transformProjection(projection?: TProjection): TProjection | undefined;
309
+ protected transformProjection(projection?: TSelect): TSelect | undefined | Promise<TSelect | undefined>;
309
310
  /** Same contract as {@link AsArbacDbController.validateControls}. */
310
311
  protected validateControls(controls: Record<string, unknown>, type: TDbControlsType): string | undefined;
311
312
  /** Same contract as {@link AsArbacDbController.applyMetaOverlay}. */
312
313
  protected applyMetaOverlay(meta: TMetaResponse): Promise<TMetaResponse>;
314
+ /**
315
+ * `GET /meta/form/:name` under the `/meta` overlay's pointer rule: a form
316
+ * prop's `ref` / `ui.valueHelp` binding to a table the caller cannot read
317
+ * (or whose named fields they cannot see) is stripped.
318
+ */
319
+ metaForm(name: string): Promise<TSerializedAnnotatedType>;
313
320
  /** Same contract as {@link AsArbacDbController.authorizeForm}. */
314
321
  protected authorizeForm(_name: string, actionNames: readonly string[]): Promise<boolean>;
315
322
  /** Same contract as {@link AsArbacDbController.actionRowScope}. */
316
- protected actionRowScope(name: string): Promise<Record<string, unknown> | undefined>;
323
+ protected actionRowScope(name: string, _ctx?: TDbActionScopeContext): Promise<Record<string, unknown> | undefined>;
317
324
  /** Same contract as {@link AsArbacDbController.allowedActions}. */
318
325
  protected allowedActions(names: readonly string[]): Promise<string[]>;
319
326
  /** Same contract as {@link AsArbacDbController.[ARBAC_DELEGATED_AUTH]}. */
@@ -358,23 +365,20 @@ declare class AsArbacDbReadableController<T extends TAtscriptAnnotatedType = TAt
358
365
  */
359
366
  declare abstract class AsArbacValueHelpController<T extends TAtscriptAnnotatedType = TAtscriptAnnotatedType, DataType = TAtscriptDataType<T>> extends AsValueHelpController<T, DataType> {
360
367
  private _arbacHost?;
368
+ /** Makes this controller the binding / `ref` policy source for its bound type's ARBAC resource. */
369
+ protected readonly _arbacValueHelpTarget: true;
361
370
  private get arbacHost();
362
371
  protected prepareRequest(_ctx: TDbRequestContext): Promise<void>;
363
- protected transformFilter(filter: FilterExpr): FilterExpr;
364
- protected transformProjection(select: ValueHelpSelect<DataType> | undefined): ValueHelpSelect<DataType> | undefined;
372
+ /** Same contract as {@link AsArbacDbController.transformFilter}. */
373
+ protected transformFilter(filter: FilterExpr): FilterExpr | Promise<FilterExpr>;
374
+ protected transformProjection(select: ValueHelpSelect<DataType> | undefined): ValueHelpSelect<DataType> | undefined | Promise<ValueHelpSelect<DataType> | undefined>;
365
375
  protected hasField(path: string): boolean;
366
376
  protected validateControls(controls: Record<string, unknown>, type: TDbControlsType): string | undefined;
367
377
  protected applyMetaOverlay(meta: TMetaResponse): Promise<TMetaResponse>;
368
- runQuery(url: string): Promise<import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody> | DataType[]>;
369
- runPages(url: string): Promise<import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody> | {
370
- data: DataType[];
371
- page: number;
372
- itemsPerPage: number;
373
- pages: number;
374
- count: number;
375
- }>;
376
- runGetOne(id: string): Promise<DataType | import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody>>;
377
- runGetOneComposite(query: Record<string, string>): Promise<DataType | import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody>>;
378
+ runQuery(url: string): ReturnType<AsValueHelpController<T, DataType>["runQuery"]>;
379
+ runPages(url: string): ReturnType<AsValueHelpController<T, DataType>["runPages"]>;
380
+ runGetOne(id: string): ReturnType<AsValueHelpController<T, DataType>["runGetOne"]>;
381
+ runGetOneComposite(query: Record<string, string>): ReturnType<AsValueHelpController<T, DataType>["runGetOneComposite"]>;
378
382
  }
379
383
  /**
380
384
  * ARBAC-scoped mirror of `@atscript/moost-db`'s
@@ -396,23 +400,20 @@ declare abstract class AsArbacValueHelpController<T extends TAtscriptAnnotatedTy
396
400
  */
397
401
  declare class AsArbacJsonValueHelpController<T extends TAtscriptAnnotatedType = TAtscriptAnnotatedType, DataType = TAtscriptDataType<T>> extends AsJsonValueHelpController<T, DataType> {
398
402
  private _arbacHost?;
403
+ /** Makes this controller the binding / `ref` policy source for its bound type's ARBAC resource. */
404
+ protected readonly _arbacValueHelpTarget: true;
399
405
  private get arbacHost();
400
406
  protected prepareRequest(_ctx: TDbRequestContext): Promise<void>;
401
- protected transformFilter(filter: FilterExpr): FilterExpr;
402
- protected transformProjection(select: ValueHelpSelect<DataType> | undefined): ValueHelpSelect<DataType> | undefined;
407
+ /** Same contract as {@link AsArbacDbController.transformFilter}. */
408
+ protected transformFilter(filter: FilterExpr): FilterExpr | Promise<FilterExpr>;
409
+ protected transformProjection(select: ValueHelpSelect<DataType> | undefined): ValueHelpSelect<DataType> | undefined | Promise<ValueHelpSelect<DataType> | undefined>;
403
410
  protected hasField(path: string): boolean;
404
411
  protected validateControls(controls: Record<string, unknown>, type: TDbControlsType): string | undefined;
405
412
  protected applyMetaOverlay(meta: TMetaResponse): Promise<TMetaResponse>;
406
- runQuery(url: string): Promise<import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody> | DataType[]>;
407
- runPages(url: string): Promise<import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody> | {
408
- data: DataType[];
409
- page: number;
410
- itemsPerPage: number;
411
- pages: number;
412
- count: number;
413
- }>;
414
- runGetOne(id: string): Promise<import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody> | DataType>;
415
- runGetOneComposite(query: Record<string, string>): Promise<import("@wooksjs/event-http").HttpError<import("@wooksjs/event-http").TWooksErrorBody> | DataType>;
413
+ runQuery(url: string): ReturnType<AsJsonValueHelpController<T, DataType>["runQuery"]>;
414
+ runPages(url: string): ReturnType<AsJsonValueHelpController<T, DataType>["runPages"]>;
415
+ runGetOne(id: string): ReturnType<AsJsonValueHelpController<T, DataType>["runGetOne"]>;
416
+ runGetOneComposite(query: Record<string, string>): ReturnType<AsJsonValueHelpController<T, DataType>["runGetOneComposite"]>;
416
417
  }
417
418
  //#endregion
418
419
  //#region src/db/relation-policy.d.ts
@@ -488,18 +489,17 @@ declare function pruneMetaByVisibility(meta: TMetaResponse, vis: MetaVisibility,
488
489
  * `crud` already advertises no read surface, and write-only principals
489
490
  * still need `type` for their insert/update forms. PK + `preferredId` are
490
491
  * never pruned.
491
- * 3. The search surface: `searchIndexes` reading a hidden field are dropped,
492
- * `searchable` / `vectorSearchable` / `geoSearchable` recomputed, and the
493
- * `query` / `pages` control lists lose the controls that became unusable
494
- * (`crud.geo` goes when no geo index is left).
492
+ *
493
+ * The search surface (`searchIndexes`, `searchable`, `vectorSearchable`,
494
+ * `geoSearchable`) is narrowed by moost-db itself (≥ 0.1.147, under the
495
+ * overridden `hasField`), after this overlay.
495
496
  *
496
497
  * @param source - the controller's `this.readable` (identifiers, relations
497
498
  * and schema rules are derived from it); an identifier set (the 0.1.67
498
499
  * signature) still works, without them
499
- * @param indexes - the controller's `indexFieldPaths()`; defaults to calling
500
- * it on the current controller when it has one
500
+ * @param _indexes - @deprecated ignored since 0.1.74 (moost-db prunes the search surface)
501
501
  */
502
- declare function applyArbacMetaOverlay(meta: TMetaResponse, source: VisibilityTableSource | ReadonlySet<string>, indexes?: readonly TDbIndexFieldPaths[]): Promise<TMetaResponse>;
502
+ declare function applyArbacMetaOverlay(meta: TMetaResponse, source: VisibilityTableSource | ReadonlySet<string>, _indexes?: readonly TDbIndexFieldPaths[]): Promise<TMetaResponse>;
503
503
  /**
504
504
  * Test-friendly internal helper — exported for unit tests and helper
505
505
  * composition; regular consumers should not call this directly.
@@ -566,7 +566,18 @@ declare function isScopedFieldVisible(scopes: ArbacDbScope[], path: string, sour
566
566
  * action id / row is read): resolve the request's scopes
567
567
  * ({@link resolveRequestScopes} — 403 on denial, `arbacPublic` does not
568
568
  * bypass) and, on read endpoints, the `$with` relation policy for the
569
- * requested relations.
569
+ * requested relations — the `$with` entries and, since 0.1.74, the
570
+ * relations the client filter's relational predicates name (`ctx.filter`):
571
+ * a predicate on a relation is allowed exactly when `$with` of it is (same
572
+ * visibility, same `controls.$with` gates).
573
+ *
574
+ * Delegated endpoints (no grant of their own): `"availableActions"`
575
+ * (`GET /meta/actions…`) — some row-level action grant (or, on a
576
+ * `@DbActionsFrom` controller, none: its own part lists nothing);
577
+ * `"delegatedAction"` (`POST /delegated-actions/:name`, since 0.1.74) — the
578
+ * controller's READ grant, since the route only resolves which of the
579
+ * caller's readable rows match the query; the action itself is authorized
580
+ * by its source controller on every batch.
570
581
  *
571
582
  * @since 0.1.72
572
583
  */
@@ -593,12 +604,17 @@ declare function arbacAllowedActions(names: readonly string[]): Promise<string[]
593
604
  * `@DbAction` `name` may run on — the filter of the caller's grant on the
594
605
  * action ({@link actionArbacIds}: every handler method of the action, or a
595
606
  * class-level entry's fallback ids), including custom-field row filters and
596
- * credential attenuation. No grant → a match-nothing filter (fail closed);
597
- * an unrestricted grant → `undefined`. When the current request IS that
598
- * action (its resolved scopes are the same evaluation), the row overlay
607
+ * credential attenuation. Several grants union (`$or`); attenuation is
608
+ * already intersected into each. No grant → a match-nothing filter (fail
609
+ * closed); an unrestricted grant → `undefined`. When the current request IS
610
+ * that action (its resolved scopes are the same evaluation), the row overlay
599
611
  * already applies it → `undefined`. Equal filters are returned as ONE
600
612
  * object per request.
601
613
  *
614
+ * Candidate-free on purpose (evaluated once per action per event) — see
615
+ * `AsArbacDbController.actionRowScope` to bound an action by its candidate
616
+ * rows.
617
+ *
602
618
  * @since 0.1.72
603
619
  */
604
620
  declare function arbacActionRowScope(name: string): Promise<Record<string, unknown> | undefined>;
@@ -610,6 +626,20 @@ declare function arbacActionRowScope(name: string): Promise<Record<string, unkno
610
626
  * @since 0.1.72
611
627
  */
612
628
  declare function arbacRowFilter(filter: Record<string, unknown> | undefined): Record<string, unknown>;
629
+ /**
630
+ * Body of the ARBAC DB controllers' `transformRelationFilter` (since 0.1.74):
631
+ * the operand of a CLIENT relational predicate at `path` (`ticket`,
632
+ * `ticket.team`, `tickets.issues` inside `$with=tickets(…)`) CONJOINED
633
+ * with the row filter of the related rows the caller may see there — the
634
+ * same policy `$with` of that relation applies: a declared `with.<rel>`
635
+ * sub-scope, else the caller's own read grant on the related table. So
636
+ * `$some` matches, and `$none` excludes, only on rows the caller could
637
+ * load. A relation the request did not resolve answers like an unknown
638
+ * field (400 — the request gate rejects it first).
639
+ *
640
+ * @since 0.1.74
641
+ */
642
+ declare function arbacRelationFilter(path: string, filter: FilterExpr, readable: VisibilityTableSource): FilterExpr;
613
643
  //#endregion
614
644
  //#region src/db/shared-read-helpers.d.ts
615
645
  /**
@@ -683,9 +713,14 @@ interface ArbacWriteTable {
683
713
  * - `checkRefs` — every enforced FK the write sets must reference rows the
684
714
  * caller can read on the target table (→ 403);
685
715
  * - WITH CHECK when the adapter cannot roll back — validated here, before
686
- * the write (see {@link checkArbacWrite} for the transactional path).
716
+ * the write (see {@link checkArbacWrite} for the transactional path);
717
+ * - WITH CHECK of an insert, even on a transactional adapter, evaluated on
718
+ * the submitted rows before the write when the in-memory evaluator can
719
+ * model it (a forbidden row → 403, never a duplicate-key 409; since
720
+ * 0.1.75) — and, with `ignoreConflicts` (`?$onConflict=ignore`), refused
721
+ * whenever it cannot, since the post-write check never sees skipped rows.
687
722
  */
688
- declare function guardArbacWrite(ctx: TDbWriteGuardContext, scopes: readonly ArbacDbScope[], table: ArbacWriteTable, refs: RefTableSource): Promise<void>;
723
+ declare function guardArbacWrite(ctx: TDbWriteGuardContext, scopes: readonly ArbacDbScope[], table: ArbacWriteTable, refs: RefTableSource, ignoreConflicts?: boolean): Promise<void>;
689
724
  /**
690
725
  * WITH CHECK after the write, inside its transaction: every written row must
691
726
  * match the scopes' `check` (default `filter`) — else 403 and the write rolls
@@ -753,11 +788,16 @@ interface ArbacDbScopeHelpers<T = unknown> {
753
788
  * enforcement the ARBAC DB controllers' CRUD writes get — nested writes
754
789
  * (`nestedWrites`, 403), USING (pre-image in scope, 404), `checkRefs` (403)
755
790
  * and WITH CHECK (403, rolled back). `allowedFields` / `set` are not applied
756
- * — overlay {@link set} yourself.
791
+ * — overlay {@link set} yourself. For `insertMany(rows, { onConflict: "ignore" })`
792
+ * pass the same `{ onConflict: "ignore" }`: conflicting rows are skipped, so
793
+ * a check that cannot be evaluated before the write refuses the batch
794
+ * (since 0.1.75).
757
795
  *
758
796
  * @since 0.1.72
759
797
  */
760
- writeOptions<Row extends object = Record<string, unknown>>(table: ArbacGuardedTable): TWriteOptions<Row>;
798
+ writeOptions<Row extends object = Record<string, unknown>>(table: ArbacGuardedTable, opts?: {
799
+ onConflict?: "ignore";
800
+ }): TWriteOptions<Row>;
761
801
  /**
762
802
  * `TDeleteOptions` for `table.deleteOne` in a handler: the id is pinned
763
803
  * among in-scope rows and the row must match the scope filter (else 404) —
@@ -848,4 +888,4 @@ declare class MoostArbac<TUserAttrs extends object, TScope extends object> exten
848
888
  getScopeFields(): TScopeFieldRules<TScope>;
849
889
  }
850
890
  //#endregion
851
- export { ARBAC_DELEGATED_AUTH, type AoothArbacClaims, Arbac, ArbacAction, ArbacAuthorize, ArbacDbScope, type ArbacDbScopeHelpers, ArbacDelegatedAuth, ArbacEvaluateOptions, type ArbacGuardedTable, type ArbacRelationResolution, ArbacResource, type ArbacScopedTable, ArbacUserProvider, ArbacUserProviderToken, type ArbacWriteTable, AsArbacDbController, AsArbacDbReadableController, AsArbacJsonValueHelpController, AsArbacValueHelpController, type ConjoinArbacDbScopesOptions, type ControlGate, type ControlsOf, type MetaVisibility, MoostArbac, type NavRelationKey, type NavTarget, type OwnFieldKey, type ProjectionOf, type RefForeignKey, type RefTableSource, type ScopeVisibilityOptions, type TArbacCompiledRule, type TArbacEvalResult, TArbacMeta, type TArbacRole, type TArbacRoleForResource, type TArbacRule, type VisibilityTableSource, applyAllowedFieldsAndSet, applyArbacControls, applyArbacMetaOverlay, applyArbacProjection, applyArbacRelationScopes, arbacActionRowScope, arbacAllowedActions, arbacAuthorizeInterceptor, arbacPatternToRegex, arbacRowFilter, authorizeArbacForm, buildScopeVisibility, cachedRequestScopes, checkArbacWrite, collectMethodNames, collectWithGrantNames, collectWritableFields, conjoinArbacDbScopes, enforceControlsPolicy, extractUsedControlValues, getArbacMate, getArbacScopes, guardArbacRemove, guardArbacWrite, isMetaFieldVisible, isScopedFieldVisible, metaAlwaysVisibleFields, prepareArbacRequest, pruneMetaByVisibility, registerArbacDbTarget, requestFieldVisible, requireRequestScopes, resolveHandlerArbacIds, resolveRequestScopes, unionScopeProjection, useArbac, useArbacDbScope };
891
+ export { ARBAC_DELEGATED_AUTH, type AoothArbacClaims, Arbac, ArbacAction, ArbacAuthorize, ArbacDbScope, type ArbacDbScopeHelpers, ArbacDelegatedAuth, ArbacEvaluateOptions, type ArbacGuardedTable, type ArbacRelationResolution, ArbacResource, type ArbacScopedTable, ArbacUserProvider, ArbacUserProviderToken, type ArbacWriteTable, AsArbacDbController, AsArbacDbReadableController, AsArbacJsonValueHelpController, AsArbacValueHelpController, type ConjoinArbacDbScopesOptions, type ControlGate, type ControlsOf, type MetaVisibility, MoostArbac, type NavRelationKey, type NavTarget, type OwnFieldKey, type ProjectionOf, type RefForeignKey, type RefTableSource, type ScopeVisibilityOptions, type TArbacCompiledRule, type TArbacEvalResult, TArbacMeta, type TArbacRole, type TArbacRoleForResource, type TArbacRule, type VisibilityTableSource, applyAllowedFieldsAndSet, applyArbacControls, applyArbacMetaOverlay, applyArbacProjection, applyArbacRelationScopes, arbacActionRowScope, arbacAllowedActions, arbacAuthorizeInterceptor, arbacPatternToRegex, arbacRelationFilter, arbacRowFilter, authorizeArbacForm, buildScopeVisibility, cachedRequestScopes, checkArbacWrite, collectMethodNames, collectWithGrantNames, collectWritableFields, conjoinArbacDbScopes, conjoinScopeFilters, enforceControlsPolicy, extractUsedControlValues, getArbacMate, getArbacScopes, guardArbacRemove, guardArbacWrite, isMetaFieldVisible, isScopedFieldVisible, metaAlwaysVisibleFields, prepareArbacRequest, pruneMetaByVisibility, registerArbacDbTarget, requestFieldVisible, requireRequestScopes, resolveHandlerArbacIds, resolveRequestScopes, unionScopeProjection, useArbac, useArbacDbScope };