@nwire/rbac 0.9.2 → 0.10.1
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 +15 -17
- package/dist/errors.d.ts +0 -1
- package/dist/errors.js +0 -1
- package/dist/filters.d.ts +0 -1
- package/dist/filters.js +0 -1
- package/dist/rbac.d.ts +2 -2
- package/dist/rbac.js +11 -19
- package/dist/resolvers.d.ts +0 -1
- package/dist/resolvers.js +0 -1
- package/dist/typed.d.ts +0 -1
- package/dist/typed.js +0 -1
- package/package.json +4 -4
- package/dist/__tests__/polish.test.d.ts +0 -9
- package/dist/__tests__/polish.test.d.ts.map +0 -1
- package/dist/__tests__/polish.test.js +0 -130
- package/dist/__tests__/polish.test.js.map +0 -1
- package/dist/__tests__/rbac.test.d.ts +0 -15
- package/dist/__tests__/rbac.test.d.ts.map +0 -1
- package/dist/__tests__/rbac.test.js +0 -139
- package/dist/__tests__/rbac.test.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/filters.d.ts.map +0 -1
- package/dist/filters.js.map +0 -1
- package/dist/rbac.d.ts.map +0 -1
- package/dist/rbac.js.map +0 -1
- package/dist/resolvers.d.ts.map +0 -1
- package/dist/resolvers.js.map +0 -1
- package/dist/typed.d.ts.map +0 -1
- package/dist/typed.js.map +0 -1
package/README.md
CHANGED
|
@@ -17,8 +17,10 @@ pnpm add @nwire/rbac @nwire/auth
|
|
|
17
17
|
```ts
|
|
18
18
|
import { defineAbility, rbacPlugin, can } from "@nwire/rbac";
|
|
19
19
|
import { identityPlugin } from "@nwire/auth";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { createApp } from "@nwire/app";
|
|
21
|
+
import { defineAction } from "@nwire/forge";
|
|
22
|
+
import { post } from "@nwire/wires/http";
|
|
23
|
+
import { httpKoa } from "@nwire/koa";
|
|
22
24
|
|
|
23
25
|
export const buildAbility = defineAbility((user, { allow, deny }) => {
|
|
24
26
|
if (!user) return;
|
|
@@ -32,15 +34,19 @@ export const buildAbility = defineAbility((user, { allow, deny }) => {
|
|
|
32
34
|
allow("delete", "Post", { authorId: user.id });
|
|
33
35
|
});
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
const app = createApp({
|
|
38
|
+
appName: "my-app",
|
|
36
39
|
plugins: [identityPlugin({ adapter }), rbacPlugin({ buildAbility })],
|
|
37
40
|
});
|
|
38
41
|
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
app.wire(
|
|
43
|
+
post("/posts/:id", { policy: ["update", "Post"] }),
|
|
44
|
+
async (input, ctx) => {
|
|
41
45
|
/* ... */
|
|
42
|
-
}
|
|
43
|
-
|
|
46
|
+
},
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
// Boot under @nwire/koa — see its README for the endpoint+adopter shape.
|
|
44
50
|
```
|
|
45
51
|
|
|
46
52
|
## API surface
|
|
@@ -57,13 +63,5 @@ Any app that needs per-role authorization beyond `action.policy` strings. Pair w
|
|
|
57
63
|
|
|
58
64
|
## Within nwire-app
|
|
59
65
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
```ts
|
|
63
|
-
import { createApp } from "@nwire/forge";
|
|
64
|
-
|
|
65
|
-
const app = createApp({
|
|
66
|
-
/* ...config... */
|
|
67
|
-
});
|
|
68
|
-
// Adapter/plugin wiring happens here when applicable.
|
|
69
|
-
```
|
|
66
|
+
Register via `createApp({ plugins: [rbacPlugin({...})] })` and pair with
|
|
67
|
+
`@nwire/auth`'s `identityPlugin` so `envelope.user` is the policy input.
|
package/dist/errors.d.ts
CHANGED
|
@@ -79,4 +79,3 @@ export declare class RoleMissingError extends ActionDeniedError {
|
|
|
79
79
|
export declare const isOwnershipMismatchError: (x: unknown) => x is OwnershipMismatchError;
|
|
80
80
|
export declare const isScopeMissingError: (x: unknown) => x is ScopeMissingError;
|
|
81
81
|
export declare const isRoleMissingError: (x: unknown) => x is RoleMissingError;
|
|
82
|
-
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.js
CHANGED
|
@@ -84,4 +84,3 @@ export class RoleMissingError extends ActionDeniedError {
|
|
|
84
84
|
export const isOwnershipMismatchError = (x) => x instanceof OwnershipMismatchError;
|
|
85
85
|
export const isScopeMissingError = (x) => x instanceof ScopeMissingError;
|
|
86
86
|
export const isRoleMissingError = (x) => x instanceof RoleMissingError;
|
|
87
|
-
//# sourceMappingURL=errors.js.map
|
package/dist/filters.d.ts
CHANGED
package/dist/filters.js
CHANGED
package/dist/rbac.d.ts
CHANGED
|
@@ -41,7 +41,8 @@
|
|
|
41
41
|
*/
|
|
42
42
|
import { type MongoAbility, type MongoQuery, subject as caslSubject } from "@casl/ability";
|
|
43
43
|
import { type User } from "@nwire/auth";
|
|
44
|
-
import { type
|
|
44
|
+
import { type PluginDefinition } from "@nwire/app";
|
|
45
|
+
import type { HandlerContext } from "@nwire/forge";
|
|
45
46
|
/**
|
|
46
47
|
* The Ability type — what `buildAbility(user)` returns and what
|
|
47
48
|
* `ctx.ability()` exposes. We use CASL's `MongoAbility` so MongoDB-style
|
|
@@ -113,4 +114,3 @@ export { permission, parsePermission, type Permission } from "./typed.js";
|
|
|
113
114
|
export { resolver, ownedBy, sameTenant, authorize, type Resolver, type ResolverFn, } from "./resolvers.js";
|
|
114
115
|
export { conditionsFor, type DrizzleFilterBuilder } from "./filters.js";
|
|
115
116
|
export { ActionDeniedError, OwnershipMismatchError, ScopeMissingError, RoleMissingError, isOwnershipMismatchError, isScopeMissingError, isRoleMissingError, } from "./errors.js";
|
|
116
|
-
//# sourceMappingURL=rbac.d.ts.map
|
package/dist/rbac.js
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
*/
|
|
42
42
|
import { AbilityBuilder, createMongoAbility, subject as caslSubject, } from "@casl/ability";
|
|
43
43
|
import { ForbiddenError } from "@nwire/auth";
|
|
44
|
-
import { definePlugin, } from "@nwire/
|
|
44
|
+
import { definePlugin, } from "@nwire/app";
|
|
45
45
|
/** Re-export CASL's subject() helper — tag a plain object with its type. */
|
|
46
46
|
export const subject = caslSubject;
|
|
47
47
|
/**
|
|
@@ -90,12 +90,12 @@ function setAbility(ctx, ability) {
|
|
|
90
90
|
*/
|
|
91
91
|
export function rbacPlugin(options) {
|
|
92
92
|
const containerKey = options.name ?? "buildAbility";
|
|
93
|
-
const middleware = async (next,
|
|
93
|
+
const middleware = async (next, actionRaw, _input, ctxRaw) => {
|
|
94
|
+
const action = actionRaw;
|
|
95
|
+
const ctx = ctxRaw;
|
|
94
96
|
const user = (ctx.envelope?.user ?? null);
|
|
95
97
|
const ability = options.buildAbility(user);
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
98
|
setAbility(ctx, ability);
|
|
98
|
-
// Tuple-form policy on actions: `policy: ["update", "Post"]`.
|
|
99
99
|
if (Array.isArray(action.policy) && action.policy.length === 2) {
|
|
100
100
|
const [verb, subj] = action.policy;
|
|
101
101
|
if (ability.cannot(verb, subj)) {
|
|
@@ -104,14 +104,10 @@ export function rbacPlugin(options) {
|
|
|
104
104
|
}
|
|
105
105
|
return next();
|
|
106
106
|
};
|
|
107
|
-
return definePlugin("rbac", {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
container.register(containerKey, () => options.buildAbility);
|
|
112
|
-
container.register(ABILITY_BUILDER_KEY.toString(), () => options.buildAbility);
|
|
113
|
-
},
|
|
114
|
-
middleware: [middleware],
|
|
107
|
+
return definePlugin("rbac", ({ bind, runtime }) => {
|
|
108
|
+
bind(containerKey, () => options.buildAbility);
|
|
109
|
+
bind(ABILITY_BUILDER_KEY.toString(), () => options.buildAbility);
|
|
110
|
+
runtime.use(middleware);
|
|
115
111
|
});
|
|
116
112
|
}
|
|
117
113
|
/**
|
|
@@ -137,12 +133,9 @@ export function abilityFor(buildAbility, user) {
|
|
|
137
133
|
*/
|
|
138
134
|
export function canKoa(verb, subj) {
|
|
139
135
|
return async (koaCtx, next) => {
|
|
140
|
-
// The container reaches Koa through `ctx.state._container
|
|
141
|
-
// `@nwire/
|
|
142
|
-
//
|
|
143
|
-
// We don't want a hard dep on those internals — the builder
|
|
144
|
-
// exposes the container indirectly on the request scope. Read it
|
|
145
|
-
// via the documented Koa `state` channel.
|
|
136
|
+
// The container reaches Koa through `ctx.state._container`, set by
|
|
137
|
+
// `@nwire/koa` per-request when an app is mounted. Read it via the
|
|
138
|
+
// documented Koa `state` channel.
|
|
146
139
|
const state = koaCtx.state;
|
|
147
140
|
const container = state._container;
|
|
148
141
|
if (!container) {
|
|
@@ -174,4 +167,3 @@ export { permission, parsePermission } from "./typed.js";
|
|
|
174
167
|
export { resolver, ownedBy, sameTenant, authorize, } from "./resolvers.js";
|
|
175
168
|
export { conditionsFor } from "./filters.js";
|
|
176
169
|
export { ActionDeniedError, OwnershipMismatchError, ScopeMissingError, RoleMissingError, isOwnershipMismatchError, isScopeMissingError, isRoleMissingError, } from "./errors.js";
|
|
177
|
-
//# sourceMappingURL=rbac.js.map
|
package/dist/resolvers.d.ts
CHANGED
|
@@ -58,4 +58,3 @@ export declare function sameTenant<TSubject extends {
|
|
|
58
58
|
export declare function authorize<TSubject>(user: User | null | undefined, action: string, subject: TSubject, rule: Resolver<TSubject> | ResolverFn<TSubject>, opts?: {
|
|
59
59
|
readonly subjectName?: string;
|
|
60
60
|
}): Promise<void>;
|
|
61
|
-
//# sourceMappingURL=resolvers.d.ts.map
|
package/dist/resolvers.js
CHANGED
package/dist/typed.d.ts
CHANGED
|
@@ -34,4 +34,3 @@ export type Permission<TVerb extends string = string, TSubject extends string =
|
|
|
34
34
|
export declare function permission<TVerb extends string, TSubject extends string>(verb: TVerb, subject: TSubject): Permission<TVerb, TSubject>;
|
|
35
35
|
/** Split a `resource:action` permission string into a tuple. */
|
|
36
36
|
export declare function parsePermission<P extends Permission>(p: P): readonly [string, string];
|
|
37
|
-
//# sourceMappingURL=typed.d.ts.map
|
package/dist/typed.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nwire/rbac",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Nwire — RBAC + permissions wrapped around CASL. defineAbility(user => ...) declares what each user can do; rbacPlugin enforces it on every dispatch.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authorization",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@casl/ability": "^6.8.1",
|
|
32
32
|
"koa": "^2.16.4",
|
|
33
|
-
"@nwire/
|
|
34
|
-
"@nwire/forge": "0.
|
|
35
|
-
"@nwire/auth": "0.
|
|
33
|
+
"@nwire/app": "0.10.1",
|
|
34
|
+
"@nwire/forge": "0.10.1",
|
|
35
|
+
"@nwire/auth": "0.10.1"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^22.19.9",
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for the Phase 62.5 polish layer:
|
|
3
|
-
* - typed permission strings (autocomplete-friendly)
|
|
4
|
-
* - composable resolvers (.or, .and, .not, ownedBy, sameTenant)
|
|
5
|
-
* - structured errors (OwnershipMismatchError, ScopeMissingError, ...)
|
|
6
|
-
* - conditionsFor (CASL rulesToQuery surface)
|
|
7
|
-
*/
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=polish.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polish.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/polish.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for the Phase 62.5 polish layer:
|
|
3
|
-
* - typed permission strings (autocomplete-friendly)
|
|
4
|
-
* - composable resolvers (.or, .and, .not, ownedBy, sameTenant)
|
|
5
|
-
* - structured errors (OwnershipMismatchError, ScopeMissingError, ...)
|
|
6
|
-
* - conditionsFor (CASL rulesToQuery surface)
|
|
7
|
-
*/
|
|
8
|
-
import { describe, it, expect } from "vitest";
|
|
9
|
-
import { permission, parsePermission, resolver, ownedBy, sameTenant, authorize, conditionsFor, defineAbility, ActionDeniedError, OwnershipMismatchError, RoleMissingError, isOwnershipMismatchError, } from "../rbac.js";
|
|
10
|
-
describe("permission() — typed strings", () => {
|
|
11
|
-
it("produces resource:action format", () => {
|
|
12
|
-
expect(permission("update", "Post")).toBe("update:Post");
|
|
13
|
-
});
|
|
14
|
-
it("parses back to a tuple", () => {
|
|
15
|
-
expect(parsePermission("update:Post")).toEqual(["update", "Post"]);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
describe("resolver — composable predicates", () => {
|
|
19
|
-
const alice = { id: "u-a", email: "a@x" };
|
|
20
|
-
const bob = { id: "u-b", email: "b@x" };
|
|
21
|
-
it("base predicate works", async () => {
|
|
22
|
-
const isOwner = resolver((u, p) => u.id === p.authorId);
|
|
23
|
-
expect(await isOwner(alice, { id: "1", authorId: alice.id })).toBe(true);
|
|
24
|
-
expect(await isOwner(alice, { id: "1", authorId: bob.id })).toBe(false);
|
|
25
|
-
});
|
|
26
|
-
it(".or combines with disjunction", async () => {
|
|
27
|
-
const isOwner = resolver((u, p) => u.id === p.authorId);
|
|
28
|
-
const isAdmin = resolver((u) => u.roles?.includes("admin") ?? false);
|
|
29
|
-
const canEdit = isOwner.or(isAdmin);
|
|
30
|
-
const admin = { id: "u-x", email: "x@x", roles: ["admin"] };
|
|
31
|
-
expect(await canEdit(alice, { id: "1", authorId: bob.id })).toBe(false);
|
|
32
|
-
expect(await canEdit(admin, { id: "1", authorId: bob.id })).toBe(true);
|
|
33
|
-
});
|
|
34
|
-
it(".and combines with conjunction", async () => {
|
|
35
|
-
const isOwner = resolver((u, p) => u.id === p.authorId);
|
|
36
|
-
const inTeam = resolver((u, p) => Boolean(p.teamId) && u.tenant === p.teamId);
|
|
37
|
-
const both = isOwner.and(inTeam);
|
|
38
|
-
const alice2 = { ...alice, tenant: "t-1" };
|
|
39
|
-
expect(await both(alice2, { id: "1", authorId: alice.id, teamId: "t-1" })).toBe(true);
|
|
40
|
-
expect(await both(alice2, { id: "1", authorId: alice.id, teamId: "t-2" })).toBe(false);
|
|
41
|
-
expect(await both(alice2, { id: "1", authorId: bob.id, teamId: "t-1" })).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
it(".not negates the predicate", async () => {
|
|
44
|
-
const isOwner = resolver((u, p) => u.id === p.authorId);
|
|
45
|
-
const isNotOwner = isOwner.not();
|
|
46
|
-
expect(await isNotOwner(alice, { id: "1", authorId: bob.id })).toBe(true);
|
|
47
|
-
expect(await isNotOwner(alice, { id: "1", authorId: alice.id })).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it("ownedBy shorthand reads from configurable field", async () => {
|
|
50
|
-
const own = ownedBy("authorId");
|
|
51
|
-
expect(await own(alice, { id: "1", authorId: alice.id })).toBe(true);
|
|
52
|
-
expect(await own(alice, { id: "1", authorId: bob.id })).toBe(false);
|
|
53
|
-
});
|
|
54
|
-
it("sameTenant shorthand reads tenant/tenantId", async () => {
|
|
55
|
-
const same = sameTenant();
|
|
56
|
-
const u = { id: "u", email: "u@x", tenant: "t-1" };
|
|
57
|
-
expect(await same(u, { tenantId: "t-1" })).toBe(true);
|
|
58
|
-
expect(await same(u, { tenantId: "t-2" })).toBe(false);
|
|
59
|
-
});
|
|
60
|
-
it("authorize() throws OwnershipMismatchError when rule denies", async () => {
|
|
61
|
-
const own = ownedBy();
|
|
62
|
-
await expect(authorize(alice, "update", { authorId: bob.id }, own, { subjectName: "Post" })).rejects.toBeInstanceOf(OwnershipMismatchError);
|
|
63
|
-
});
|
|
64
|
-
it("authorize() throws for null user", async () => {
|
|
65
|
-
const own = ownedBy();
|
|
66
|
-
await expect(authorize(null, "update", { authorId: "x" }, own)).rejects.toBeInstanceOf(OwnershipMismatchError);
|
|
67
|
-
});
|
|
68
|
-
it("authorize() resolves when rule allows", async () => {
|
|
69
|
-
const own = ownedBy();
|
|
70
|
-
await expect(authorize(alice, "update", { authorId: alice.id }, own)).resolves.toBeUndefined();
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
describe("structured errors", () => {
|
|
74
|
-
it("ActionDeniedError carries action + subject + reason", () => {
|
|
75
|
-
const e = new ActionDeniedError({ action: "delete", subject: "Post", userId: "u" });
|
|
76
|
-
expect(e.action).toBe("delete");
|
|
77
|
-
expect(e.subject).toBe("Post");
|
|
78
|
-
expect(e.denialReason).toBe("denied");
|
|
79
|
-
expect(e.message).toMatch(/delete Post/);
|
|
80
|
-
});
|
|
81
|
-
it("OwnershipMismatchError narrows denialReason", () => {
|
|
82
|
-
const e = new OwnershipMismatchError({ action: "edit", subject: "Post" });
|
|
83
|
-
expect(e.denialReason).toBe("ownership-mismatch");
|
|
84
|
-
expect(isOwnershipMismatchError(e)).toBe(true);
|
|
85
|
-
});
|
|
86
|
-
it("RoleMissingError carries the required role", () => {
|
|
87
|
-
const e = new RoleMissingError({ action: "view", subject: "Admin", requiredRole: "admin" });
|
|
88
|
-
expect(e.requiredRole).toBe("admin");
|
|
89
|
-
expect(e.denialReason).toBe("role-missing");
|
|
90
|
-
});
|
|
91
|
-
it("all subclasses are catchable as ActionDeniedError", () => {
|
|
92
|
-
const e = new OwnershipMismatchError({ action: "x", subject: "Y" });
|
|
93
|
-
expect(e instanceof ActionDeniedError).toBe(true);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
describe("conditionsFor — CASL rulesToQuery surface", () => {
|
|
97
|
-
const buildAbility = defineAbility((user, { allow }) => {
|
|
98
|
-
if (!user)
|
|
99
|
-
return;
|
|
100
|
-
if (user.roles?.includes("admin")) {
|
|
101
|
-
allow("manage", "all");
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
allow("read", "Post");
|
|
105
|
-
allow("update", "Post", { authorId: user.id });
|
|
106
|
-
});
|
|
107
|
-
it("returns an empty object when an unrestricted rule allows", () => {
|
|
108
|
-
// CASL's rulesToQuery returns `{}` (no conditions) when ANY rule
|
|
109
|
-
// is unrestricted — i.e. the user may read every row.
|
|
110
|
-
const ability = buildAbility({ id: "alice", email: "a@x" });
|
|
111
|
-
const q = conditionsFor(ability, "read", "Post");
|
|
112
|
-
expect(q).toEqual({});
|
|
113
|
-
});
|
|
114
|
-
it("returns conditional query when only some rows allowed", () => {
|
|
115
|
-
const ability = buildAbility({ id: "alice", email: "a@x" });
|
|
116
|
-
const q = conditionsFor(ability, "update", "Post");
|
|
117
|
-
expect(q).toEqual({ $or: [{ authorId: "alice" }] });
|
|
118
|
-
});
|
|
119
|
-
it("returns null when no rules allow", () => {
|
|
120
|
-
const ability = buildAbility(null);
|
|
121
|
-
const q = conditionsFor(ability, "read", "Post");
|
|
122
|
-
expect(q).toBeNull();
|
|
123
|
-
});
|
|
124
|
-
it("admin gets unrestricted query via manage:all", () => {
|
|
125
|
-
const ability = buildAbility({ id: "x", email: "x@x", roles: ["admin"] });
|
|
126
|
-
const q = conditionsFor(ability, "delete", "Post");
|
|
127
|
-
expect(q).toEqual({});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
//# sourceMappingURL=polish.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polish.test.js","sourceRoot":"","sources":["../../src/__tests__/polish.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RBAC integration — proves CASL is wired correctly through the framework:
|
|
3
|
-
*
|
|
4
|
-
* - `defineAbility` builds an Ability factory.
|
|
5
|
-
* - `rbacPlugin` registers it + installs dispatch middleware.
|
|
6
|
-
* - Actions with tuple `policy: [verb, subject]` get auto-enforced.
|
|
7
|
-
* - Programmatic `abilityFromCtx(ctx)` works inside handlers.
|
|
8
|
-
* - `subject(name, instance)` lets us check instance-level conditions.
|
|
9
|
-
*
|
|
10
|
-
* The Koa per-route gate (`canKoa`) has its own end-to-end coverage in
|
|
11
|
-
* @nwire/auth's `routes.test.ts` — the http builder lifts the container
|
|
12
|
-
* onto `ctx.state._container` so `canKoa` can resolve `buildAbility`.
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=rbac.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rbac.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RBAC integration — proves CASL is wired correctly through the framework:
|
|
3
|
-
*
|
|
4
|
-
* - `defineAbility` builds an Ability factory.
|
|
5
|
-
* - `rbacPlugin` registers it + installs dispatch middleware.
|
|
6
|
-
* - Actions with tuple `policy: [verb, subject]` get auto-enforced.
|
|
7
|
-
* - Programmatic `abilityFromCtx(ctx)` works inside handlers.
|
|
8
|
-
* - `subject(name, instance)` lets us check instance-level conditions.
|
|
9
|
-
*
|
|
10
|
-
* The Koa per-route gate (`canKoa`) has its own end-to-end coverage in
|
|
11
|
-
* @nwire/auth's `routes.test.ts` — the http builder lifts the container
|
|
12
|
-
* onto `ctx.state._container` so `canKoa` can resolve `buildAbility`.
|
|
13
|
-
*/
|
|
14
|
-
import { describe, it, expect } from "vitest";
|
|
15
|
-
import { z } from "zod";
|
|
16
|
-
import { createApp, defineAction, defineHandler, defineModule, seedEnvelope } from "@nwire/forge";
|
|
17
|
-
import { ForbiddenError } from "@nwire/auth";
|
|
18
|
-
import { defineAbility, rbacPlugin, abilityFor, abilityFromCtx, subject } from "../rbac.js";
|
|
19
|
-
// ─── Shared fixtures ─────────────────────────────────────────────
|
|
20
|
-
const buildAbility = defineAbility((user, { allow }) => {
|
|
21
|
-
if (!user)
|
|
22
|
-
return; // anonymous: nothing allowed
|
|
23
|
-
if (user.roles?.includes("admin")) {
|
|
24
|
-
allow("manage", "all");
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
allow("read", "Post");
|
|
28
|
-
allow("create", "Post");
|
|
29
|
-
allow("update", "Post", { authorId: user.id });
|
|
30
|
-
allow("delete", "Post", { authorId: user.id });
|
|
31
|
-
});
|
|
32
|
-
const admin = { id: "u-admin", email: "a@x", roles: ["admin"] };
|
|
33
|
-
const alice = { id: "u-alice", email: "alice@x" };
|
|
34
|
-
const bob = { id: "u-bob", email: "bob@x" };
|
|
35
|
-
describe("@nwire/rbac — pure ability layer", () => {
|
|
36
|
-
it("anonymous user gets no permissions", () => {
|
|
37
|
-
const a = abilityFor(buildAbility, null);
|
|
38
|
-
expect(a.can("read", "Post")).toBe(false);
|
|
39
|
-
});
|
|
40
|
-
it("admin can manage all subjects", () => {
|
|
41
|
-
const a = abilityFor(buildAbility, admin);
|
|
42
|
-
expect(a.can("delete", "Post")).toBe(true);
|
|
43
|
-
expect(a.can("manage", "Anything")).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
it("author can update their own posts but not someone else's", () => {
|
|
46
|
-
const a = abilityFor(buildAbility, alice);
|
|
47
|
-
expect(a.can("create", "Post")).toBe(true);
|
|
48
|
-
const alicesPost = subject("Post", { id: "p1", authorId: alice.id });
|
|
49
|
-
const bobsPost = subject("Post", { id: "p2", authorId: bob.id });
|
|
50
|
-
expect(a.can("update", alicesPost)).toBe(true);
|
|
51
|
-
expect(a.can("update", bobsPost)).toBe(false);
|
|
52
|
-
expect(a.cannot("delete", bobsPost)).toBe(true);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
// ─── Plugin integration ──────────────────────────────────────────
|
|
56
|
-
const empty = defineModule("empty", {});
|
|
57
|
-
describe("@nwire/rbac — rbacPlugin enforces action.policy", () => {
|
|
58
|
-
it("allows action when user has the ability", async () => {
|
|
59
|
-
const created = defineAction({
|
|
60
|
-
name: "posts.create",
|
|
61
|
-
schema: z.object({ title: z.string() }),
|
|
62
|
-
policy: ["create", "Post"],
|
|
63
|
-
});
|
|
64
|
-
const createdHandler = defineHandler(created, async () => undefined);
|
|
65
|
-
const m = defineModule("posts", { actions: [created], handlers: [createdHandler] });
|
|
66
|
-
const app = createApp({
|
|
67
|
-
modules: [m],
|
|
68
|
-
plugins: [rbacPlugin({ buildAbility })],
|
|
69
|
-
});
|
|
70
|
-
await app.start();
|
|
71
|
-
// alice has create-Post permission → resolves
|
|
72
|
-
await expect(app.runtime.dispatch(created, { title: "hello" }, seedEnvelope({ user: alice, userId: alice.id }))).resolves.not.toThrow();
|
|
73
|
-
await app.stop();
|
|
74
|
-
});
|
|
75
|
-
it("denies action when user lacks the ability", async () => {
|
|
76
|
-
const deleted = defineAction({
|
|
77
|
-
name: "posts.delete",
|
|
78
|
-
schema: z.object({ id: z.string() }),
|
|
79
|
-
policy: ["delete", "Post"],
|
|
80
|
-
});
|
|
81
|
-
const deletedHandler = defineHandler(deleted, async () => undefined);
|
|
82
|
-
const m = defineModule("posts", { actions: [deleted], handlers: [deletedHandler] });
|
|
83
|
-
const app = createApp({
|
|
84
|
-
modules: [m],
|
|
85
|
-
plugins: [rbacPlugin({ buildAbility })],
|
|
86
|
-
});
|
|
87
|
-
await app.start();
|
|
88
|
-
// anonymous has no permissions → throws ForbiddenError
|
|
89
|
-
await expect(app.runtime.dispatch(deleted, { id: "p1" })).rejects.toThrow(ForbiddenError);
|
|
90
|
-
await app.stop();
|
|
91
|
-
});
|
|
92
|
-
it("allows action when policy is omitted entirely", async () => {
|
|
93
|
-
const open = defineAction({
|
|
94
|
-
name: "posts.list",
|
|
95
|
-
schema: z.object({}),
|
|
96
|
-
});
|
|
97
|
-
const openHandler = defineHandler(open, async () => undefined);
|
|
98
|
-
const m = defineModule("posts", { actions: [open], handlers: [openHandler] });
|
|
99
|
-
const app = createApp({
|
|
100
|
-
modules: [m],
|
|
101
|
-
plugins: [rbacPlugin({ buildAbility })],
|
|
102
|
-
});
|
|
103
|
-
await app.start();
|
|
104
|
-
// anonymous + no policy → allowed
|
|
105
|
-
await expect(app.runtime.dispatch(open, {})).resolves.not.toThrow();
|
|
106
|
-
await app.stop();
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
// ─── Programmatic ctx.ability access ─────────────────────────────
|
|
110
|
-
describe("@nwire/rbac — abilityFromCtx for programmatic checks", () => {
|
|
111
|
-
it("handler can call abilityFromCtx and check an instance with subject()", async () => {
|
|
112
|
-
let observed = {};
|
|
113
|
-
const inspect = defineAction({
|
|
114
|
-
name: "posts.inspect",
|
|
115
|
-
schema: z.object({ postId: z.string() }),
|
|
116
|
-
});
|
|
117
|
-
const inspectHandler = defineHandler(inspect, async (_input, ctx) => {
|
|
118
|
-
const ability = abilityFromCtx(ctx);
|
|
119
|
-
const alicesPost = subject("Post", { id: "p1", authorId: alice.id });
|
|
120
|
-
const bobsPost = subject("Post", { id: "p2", authorId: bob.id });
|
|
121
|
-
observed = {
|
|
122
|
-
canUpdateAlices: ability.can("update", alicesPost),
|
|
123
|
-
canUpdateBobs: ability.can("update", bobsPost),
|
|
124
|
-
};
|
|
125
|
-
return undefined;
|
|
126
|
-
});
|
|
127
|
-
const m = defineModule("posts", { actions: [inspect], handlers: [inspectHandler] });
|
|
128
|
-
const app = createApp({
|
|
129
|
-
modules: [m],
|
|
130
|
-
plugins: [rbacPlugin({ buildAbility })],
|
|
131
|
-
});
|
|
132
|
-
await app.start();
|
|
133
|
-
await app.runtime.dispatch(inspect, { postId: "p1" }, seedEnvelope({ user: alice, userId: alice.id }));
|
|
134
|
-
expect(observed.canUpdateAlices).toBe(true);
|
|
135
|
-
expect(observed.canUpdateBobs).toBe(false);
|
|
136
|
-
await app.stop();
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
//# sourceMappingURL=rbac.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.test.js","sourceRoot":"","sources":["../../src/__tests__/rbac.test.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,oBAAoB,GAAG,eAAe,GAAG,cAAc,CAAC;AAE9F;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAY;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,EAAE,kBAAkB;CAQvC;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,SAAkB,YAAY,EAAG,oBAAoB,CAAU;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;gBACtB,MAAM,EAAE,kBAAkB,GAAG;QAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;CAK/E;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,SAAkB,YAAY,EAAG,eAAe,CAAU;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBACnB,MAAM,EAAE,kBAAkB,GAAG;QAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;KAAE;CAK5E;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;IACrD,SAAkB,YAAY,EAAG,cAAc,CAAU;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAClB,MAAM,EAAE,kBAAkB,GAAG;QAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;KAAE;CAK3E;AAED,eAAO,MAAM,wBAAwB,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,sBACtB,CAAC;AACtC,eAAO,MAAM,mBAAmB,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,iBACtB,CAAC;AACjC,eAAO,MAAM,kBAAkB,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,gBACtB,CAAC"}
|
package/dist/errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAY7C;;;;;;GAMG;AACH,MAAM,OAAO,iBAAkB,SAAQ,cAAc;IAC1C,YAAY,GAAiB,QAAQ,CAAC;IACtC,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,MAAM,CAAU;IAChB,MAAM,CAAU;IAEzB,YAAY,MAA0B;QACpC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,kBAAkB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IACzC,YAAY,GAAG,oBAA6B,CAAC;IACtD,eAAe,CAAU;IAClC,YAAY,MAAkE;QAC5E,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,gCAAgC,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAChD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,iBAAiB;IACpC,YAAY,GAAG,eAAwB,CAAC;IACjD,aAAa,CAAS;IAC/B,YAAY,MAA+D;QACzE,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,kBAAkB,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACnC,YAAY,GAAG,cAAuB,CAAC;IAChD,YAAY,CAAS;IAC9B,YAAY,MAA8D;QACxE,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,iBAAiB,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAU,EAA+B,EAAE,CAClF,CAAC,YAAY,sBAAsB,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAU,EAA0B,EAAE,CACxE,CAAC,YAAY,iBAAiB,CAAC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAU,EAAyB,EAAE,CACtE,CAAC,YAAY,gBAAgB,CAAC"}
|
package/dist/filters.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB;IAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAE5C;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,+FAA+F;IAC/F,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC7C"}
|
package/dist/filters.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,MAAc,EACd,WAAmB;IAEnB,OAAO,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC"}
|
package/dist/rbac.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../src/rbac.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,OAAO,IAAI,WAAW,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAEhC,KAAK,EAAE,CACL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,OAAO,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KACvB,IAAI,CAAC;IAEV,IAAI,EAAE,CACJ,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,OAAO,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KACvB,IAAI,CAAC;CACX;AAED,4EAA4E;AAC5E,eAAO,MAAM,OAAO,oBAAc,CAAC;AAEnC;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAC3D,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAShC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAsBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CA4BvE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,EAC5C,IAAI,EAAE,IAAI,GAAG,IAAI,GAChB,OAAO,CAET;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,KAAK,EAAE,UAAU,CAyB3E;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,GAAG,IAAI,CAGlE;AAWD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvE,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
|
package/dist/rbac.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.js","sourceRoot":"","sources":["../src/rbac.ts"],"names":[],"mappings":"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"}
|
package/dist/resolvers.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEjG,MAAM,WAAW,QAAQ,CAAC,QAAQ;IAChC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzE,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;CAC3B;AAQD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAgB/E;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,KAAK,GAAE,MAAmB,GACzB,QAAQ,CAAC,QAAQ,CAAC,CAEpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,QAAQ,SAAS;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KACpD,QAAQ,CAAC,QAAQ,CAAC,CAKtB;AAYD,wBAAsB,SAAS,CAAC,QAAQ,EACtC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAC/C,IAAI,GAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3C,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
package/dist/resolvers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"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"}
|
package/dist/typed.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../src/typed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;GAIG;AACH,MAAM,MAAM,UAAU,CACpB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,QAAQ,SAAS,MAAM,GAAG,MAAM,IAC9B,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,EACtE,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,QAAQ,GAChB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAE7B;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAIrF"}
|
package/dist/typed.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typed.js","sourceRoot":"","sources":["../src/typed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAYH;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,IAAW,EACX,OAAiB;IAEjB,OAAO,GAAG,IAAI,IAAI,OAAO,EAAiC,CAAC;AAC7D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAAuB,CAAI;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|