@diister/quick-permission 0.9.0-beta.5 → 0.9.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/mod.d.ts CHANGED
@@ -18,8 +18,8 @@ export { defineRule, inputMatch, matchPath, requireSelf } from "./rules.ts";
18
18
  export type { DefineRuleOpts } from "./rules.ts";
19
19
  export { intermediate, permission } from "./permission.ts";
20
20
  export type { IntermediateBuilder, IntermediateConfig, PermissionBuilder, PermissionConfig, } from "./permission.ts";
21
- export { createSystem } from "./system.ts";
22
- export type { CanContext, Provider, ProviderFn, ProviderObject, System, } from "./system.ts";
21
+ export { createSystem, isCapabilityQuery, isWildcardSegment, refType, } from "./system.ts";
22
+ export type { CanContext, PermissionErrorEvent, Provider, ProviderFetchEvent, ProviderFn, ProviderObject, System, SystemHooks, } from "./system.ts";
23
23
  export { applyFilter, pickFields } from "./core/filtering.ts";
24
24
  export type { FilterSpec } from "./core/merging.ts";
25
25
  //# sourceMappingURL=mod.d.ts.map
package/dist/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,YAAY,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,KAAK,EACL,oBAAoB,EACpB,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,cAAc,EACd,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EACV,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,MAAM,GACP,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,YAAY,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,KAAK,EACL,oBAAoB,EACpB,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,cAAc,EACd,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EACV,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,MAAM,EACN,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/mod.js CHANGED
@@ -19,7 +19,7 @@ export { defineRule, inputMatch, matchPath, requireSelf } from "./rules.js";
19
19
  // ─── Permission builders ─────────────────────────────────────────────────
20
20
  export { intermediate, permission } from "./permission.js";
21
21
  // ─── System ──────────────────────────────────────────────────────────────
22
- export { createSystem } from "./system.js";
22
+ export { createSystem, isCapabilityQuery, isWildcardSegment, refType, } from "./system.js";
23
23
  // ─── Field-projection helpers (used outside permission checks too) ───────
24
24
  export { applyFilter, pickFields } from "./core/filtering.js";
25
25
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAgC1C,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,4EAA4E;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO1D,4EAA4E;AAC5E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5E,4EAA4E;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ3D,4EAA4E;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAS3C,4EAA4E;AAC5E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAgC1C,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,4EAA4E;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO1D,4EAA4E;AAC5E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5E,4EAA4E;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ3D,4EAA4E;AAC5E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,OAAO,GACR,MAAM,aAAa,CAAC;AAYrB,4EAA4E;AAC5E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/system.d.ts CHANGED
@@ -1,43 +1,47 @@
1
- /**
2
- * Moteur d'orchestration resource-pipe.
3
- *
4
- * Responsabilités :
5
- * - Maintenir un cache `(resource.id, dedupKey) → Promise<T>` par context()
6
- * - Filtrer les rules actives (activeWhen) avant de fetcher leurs needs
7
- * - Lancer les fetches en parallèle (Promise.all) avec dedup
8
- * - Évaluer les rules d'un grant en série (préserve l'ordre des reasons)
9
- * - OR sémantique entre grants : un grant qui passe = `ok: true`
10
- * - Validation d'arity du target au boot et au check
11
- *
12
- * Cf. RFC §"Sémantique d'exécution".
13
- */
14
1
  import type { CanResult, Grant, IndirectResourceInfo, ListEntry, Permission, Resource, Subject, TreeNode } from "./types.ts";
15
2
  import { type IndirectResource } from "./indirect-resource.ts";
16
3
  export type ProviderFn = (subject: Subject, key: string, target?: readonly unknown[]) => readonly Grant[] | Promise<readonly Grant[]>;
17
- /**
18
- * Provider sous forme objet : permet d'opt-in à la dedup de grants
19
- * (cacheKey) et au filtrage par préfixe de key (keys/matches).
20
- *
21
- * - `keys`/`matches` : le provider est skip si la key demandée ne match pas
22
- * - `cacheKey` : grants memoizés par (subject, key, target) au sein d'un context
23
- */
24
4
  export type ProviderObject = {
5
+ readonly name?: string;
25
6
  readonly keys?: readonly string[];
26
7
  readonly matches?: (key: string) => boolean;
27
- readonly cacheKey?: (subject: Subject, key: string, target?: readonly unknown[]) => string;
8
+ readonly targetType?: string | readonly string[];
9
+ readonly cacheKey?: (subject: Subject, key: string, target?: readonly unknown[]) => string | undefined;
28
10
  readonly fetch: ProviderFn;
29
11
  };
30
12
  export type Provider = ProviderFn | ProviderObject;
13
+ export type ProviderFetchEvent = {
14
+ readonly provider: string;
15
+ readonly subject: Subject;
16
+ readonly key: string;
17
+ readonly target: readonly unknown[] | undefined;
18
+ readonly durationMs: number;
19
+ readonly grantCount: number;
20
+ };
21
+ export type PermissionErrorEvent = {
22
+ readonly source: "provider";
23
+ readonly provider: string;
24
+ readonly subject: Subject;
25
+ readonly key: string;
26
+ readonly target: readonly unknown[] | undefined;
27
+ readonly error: unknown;
28
+ } | {
29
+ readonly source: "rule";
30
+ readonly grantId: string | undefined;
31
+ readonly subject: Subject;
32
+ readonly key: string;
33
+ readonly target: readonly unknown[] | undefined;
34
+ readonly error: unknown;
35
+ };
36
+ export type SystemHooks = {
37
+ readonly onProviderFetch?: (event: ProviderFetchEvent) => void;
38
+ readonly onError?: (event: PermissionErrorEvent) => void;
39
+ };
40
+ export declare function refType(segment: unknown): string | undefined;
31
41
  export type CanContext = {
32
42
  readonly checkDate?: Date;
33
43
  readonly checkIp?: string;
34
- /** True : le target peut contenir des wildcards et matche les grants overlap. */
35
- readonly broadMatch?: boolean;
36
- /**
37
- * Check-time payload exposed to rules as `ctx.input`. Distinct from
38
- * `grant.payload` (static, seed-time). Consumed by `inputMatch()` to
39
- * validate a CREATE body against `grant.with`.
40
- */
44
+ /** Check-time payload read by `inputMatch()`, as opposed to the grant's static `payload`. */
41
45
  readonly input?: unknown;
42
46
  };
43
47
  export type System<TMeta = unknown> = {
@@ -46,68 +50,39 @@ export type System<TMeta = unknown> = {
46
50
  readonly children: Readonly<Record<string, TreeNode<TMeta>>>;
47
51
  };
48
52
  schema(key: string): Permission<TMeta> | undefined;
49
- /**
50
- * Every distinct indirect resource referenced by the schema's rules,
51
- * deduped by id. Returned in declaration-walk order (first-occurrence
52
- * wins for dedup). Function fields are stripped — see
53
- * `IndirectResourceInfo`. Empty if no permission uses `.match()` on an
54
- * `indirectResource`.
55
- */
53
+ /** Deduplicated by id, in declaration order, without their functions. */
56
54
  indirectResources(): readonly IndirectResourceInfo[];
57
- /**
58
- * Indirect resources referenced by a single permission's rules.
59
- * `[]` if `key` is unknown or has no `indirect-match` rule. Useful so
60
- * matrix UIs only render the indirect-match editor on permissions where
61
- * it has a semantic.
62
- */
63
55
  indirectsUsedBy(key: string): readonly IndirectResourceInfo[];
64
- /** Check direct (sans cache cross-can) — préfère `context()` en HTTP. */
56
+ /** Nothing is cached across calls; prefer `context()` for a request. */
65
57
  can(subject: Subject, key: string, target?: readonly unknown[], context?: CanContext): Promise<CanResult>;
66
- /**
67
- * Crée un context request-scoped avec cache de fetches partagé entre
68
- * tous les `can()` qui en découlent.
69
- */
58
+ /** Resources and provider grants are cached across every `can()` of the context. */
70
59
  context(bound: {
71
60
  readonly subject: Subject;
72
61
  } & CanContext): {
73
- /**
74
- * `perCall` overrides the bound `CanContext` for this single check.
75
- * Canonical use : passing `input` for a CREATE while keeping the
76
- * shared (per-request) context. Other fields stay bound — override
77
- * only when truly per-call.
78
- */
62
+ /** `perCall` overrides the bound context for this check only, typically `input` on a create. */
79
63
  can(key: string, target?: readonly unknown[], perCall?: CanContext): Promise<CanResult>;
80
64
  /**
81
- * Inject pre-loaded docs into the resource cache so subsequent
82
- * `can()` calls skip the fetch. Typical use : after a paginated
83
- * list, the caller has all docs in memory — pre-seed them so the
84
- * per-doc projection check doesn't hit the DB again.
85
- *
86
- * `dedupKey(doc)` MUST return the same target segments the resource's
87
- * `dedupKey` would compute at fetch time — otherwise the cache key
88
- * won't match and the preseed is silently ineffective. For most
89
- * resources whose dedupKey is `target[i]`, just return `[doc._id]`
90
- * (or the relevant segments).
91
- *
92
- * `value(doc)` is optional. Defaults to identity (the doc itself,
93
- * used for direct resources). Provide it for indirect resources
94
- * where the cached value is an array of joined docs nested under
95
- * an alias (e.g. `d => d._memberships_of_participant`).
65
+ * `dedupKey(doc)` must return the segments the resource's own `dedupKey`
66
+ * computes at fetch time, or the seeded value is never found. `value(doc)`
67
+ * defaults to the doc; an indirect resource caches its joined docs instead.
96
68
  */
97
69
  preseed<T, V = T>(resource: Resource<unknown> | IndirectResource | string, docs: ReadonlyArray<T>, opts: {
98
70
  dedupKey: (doc: T) => readonly unknown[];
99
71
  value?: (doc: T) => V;
100
72
  }): void;
101
- /** Compteurs de fetches par resource.id (debug / observabilité). */
102
73
  getFetchCounters(): Readonly<Record<string, number>>;
103
- /** Reset des compteurs (pas du cache). */
74
+ /** Resets the counters, never the cache. */
104
75
  clearCounters(): void;
105
- /** Dump des grants émis dans ce context (debug). */
76
+ /** Only the grants of cached providers already consulted in this context. */
106
77
  dumpGrants(): Promise<readonly Grant[]>;
107
78
  };
108
79
  };
80
+ /** A query with any wildcard segment asks "could this subject, on some target"; rules that need a concrete document pass silently. */
81
+ export declare function isCapabilityQuery(target: readonly unknown[] | undefined): boolean;
82
+ export declare function isWildcardSegment(seg: unknown): boolean;
109
83
  export declare function createSystem<TMeta = unknown>(opts: {
110
84
  readonly schema: Readonly<Record<string, Permission<TMeta>>>;
111
85
  readonly providers?: readonly Provider[];
86
+ readonly hooks?: SystemHooks;
112
87
  }): System<TMeta>;
113
88
  //# sourceMappingURL=system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":"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"}