@stonecrop/casl-middleware 0.11.6 → 0.11.8
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/casl-middleware.js.map +1 -1
- package/dist/casl-middleware.tsbuildinfo +1 -1
- package/dist/src/middleware/ability.d.ts +1 -1
- package/dist/src/middleware/ability.d.ts.map +1 -1
- package/dist/{middleware → src/middleware}/ability.js +1 -1
- package/dist/src/middleware/jwt.d.ts +2 -2
- package/dist/src/middleware/jwt.d.ts.map +1 -1
- package/dist/{middleware → src/middleware}/jwt.js +6 -6
- package/dist/src/middleware/yoga.d.ts +1 -1
- package/dist/src/middleware/yoga.d.ts.map +1 -1
- package/dist/{middleware → src/middleware}/yoga.js +3 -3
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +16 -12
- package/src/middleware/ability.ts +1 -1
- package/src/middleware/jwt.ts +6 -6
- package/src/middleware/postgraphile.ts +1 -1
- package/src/middleware/yoga.ts +3 -3
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{middleware → src/middleware}/graphql.js +0 -0
- /package/dist/{middleware → src/middleware}/introspection.js +0 -0
- /package/dist/{middleware → src/middleware}/postgraphile.js +0 -0
- /package/dist/{types → src/types}/index.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"
|
|
1
|
+
{"version":"6.0.3"}
|
|
@@ -20,7 +20,7 @@ export type AbilityBuilderFunction = (user?: Context['user']) => Promise<AppAbil
|
|
|
20
20
|
/**
|
|
21
21
|
* Default ability builder - only provides minimal public access
|
|
22
22
|
*/
|
|
23
|
-
export declare const defaultAbilityBuilder: (
|
|
23
|
+
export declare const defaultAbilityBuilder: (_user?: Context["user"]) => AppAbility;
|
|
24
24
|
/**
|
|
25
25
|
* Create ability using a provided builder function
|
|
26
26
|
* @param user - User information for building the ability
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ability.d.ts","sourceRoot":"","sources":["../../../src/middleware/ability.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,WAAW,EAIX,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,GAAG,KAAG,MAc/C,CAAA;AAwBD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AAExD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAA;AAIjG;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,
|
|
1
|
+
{"version":3,"file":"ability.d.ts","sourceRoot":"","sources":["../../../src/middleware/ability.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,WAAW,EAIX,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,GAAG,KAAG,MAc/C,CAAA;AAwBD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AAExD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAA;AAIjG;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,OAAO,CAAC,MAAM,CAAC,KAAG,UAU/D,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACzB,OAAO,OAAO,CAAC,MAAM,CAAC,EACtB,YAAW,sBAA8C,KACvD,OAAO,CAAC,UAAU,CAEpB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,GACxC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,KAC7C,sBAwBF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,QAAQ;IACvD,KAAK,EAAE,MAAM,CACZ,MAAM,EACN,KAAK,CAAC;QACL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QACzB,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QAC1B,UAAU,CAAC,EAAE,GAAG,CAAA;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;KAClB,CAAC,CACF,CAAA;IACD,YAAY,CAAC,EAAE,KAAK,CAAC;QACpB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QACzB,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QAC1B,UAAU,CAAC,EAAE,GAAG,CAAA;KAChB,CAAC,CAAA;CACF,KAAG,sBA0CH,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,WAAW,EACzD,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KACtC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAEhC,CAAA"}
|
|
@@ -45,7 +45,7 @@ const Ability = PureAbility;
|
|
|
45
45
|
/**
|
|
46
46
|
* Default ability builder - only provides minimal public access
|
|
47
47
|
*/
|
|
48
|
-
export const defaultAbilityBuilder = (
|
|
48
|
+
export const defaultAbilityBuilder = (_user) => {
|
|
49
49
|
const { can, build } = new AbilityBuilder(Ability);
|
|
50
50
|
can('read', 'Query');
|
|
51
51
|
return build({
|
|
@@ -65,7 +65,7 @@ export declare const createJWT: (user: User, config: {
|
|
|
65
65
|
/**
|
|
66
66
|
* Integration with CASL ability builder
|
|
67
67
|
*/
|
|
68
|
-
export declare const createJWTAbilityBuilder: (
|
|
68
|
+
export declare const createJWTAbilityBuilder: (_config?: JWTConfig) => (user?: User) => Promise<import("./ability").AppAbility>;
|
|
69
69
|
/**
|
|
70
70
|
* Postgraphile-specific JWT plugin
|
|
71
71
|
*/
|
|
@@ -74,7 +74,7 @@ export declare const createPostgraphileJWTPlugin: (config: JWTConfig) => {
|
|
|
74
74
|
version: string;
|
|
75
75
|
grafast: {
|
|
76
76
|
hooks: {
|
|
77
|
-
context(ctx: any,
|
|
77
|
+
context(ctx: any, _build: any): Promise<any>;
|
|
78
78
|
};
|
|
79
79
|
};
|
|
80
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/middleware/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAA;AAE9B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAG7C,MAAM,WAAW,SAAS;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,SAAS,CAAA;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAW,SAAQ,GAAG,CAAC,UAAU;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,KAAK,CAAC;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,GAAG,CAAA;KAChB,CAAC,CAAA;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAClB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAQ,SAAc,MAoB3C,SAAS,OAAO,EAAE,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,iBAoExD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GACrB,MAAM,IAAI,EACV,QAAQ;IACP,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACtC,KACC,MAiBF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/middleware/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAA;AAE9B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAG7C,MAAM,WAAW,SAAS;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,SAAS,CAAA;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAW,SAAQ,GAAG,CAAC,UAAU;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,KAAK,CAAC;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,GAAG,CAAA;KAChB,CAAC,CAAA;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAClB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAQ,SAAc,MAoB3C,SAAS,OAAO,EAAE,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,iBAoExD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GACrB,MAAM,IAAI,EACV,QAAQ;IACP,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACtC,KACC,MAiBF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAS,SAAc,MAChD,OAAO,IAAI,4CAsBzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS;;;;;yBAQtC,GAAG,UAAU,GAAG;;;CAwBtC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,SAAS,MAI1C,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,kBA4B3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC7B;;OAEG;4BAEI,IAAI,UACF;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;QACrB,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;KACzB;;;;IAkCF;;OAEG;uCAEY,MAAM,UACZ;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;QACjD,eAAe,CAAC,EAAE,MAAM,CAAA;KACxB;;;;CAyCF,CAAA"}
|
|
@@ -96,13 +96,13 @@ export const createJWTMiddleware = (config = {}) => {
|
|
|
96
96
|
}
|
|
97
97
|
// Re-throw with more specific error messages
|
|
98
98
|
if (error.name === 'TokenExpiredError') {
|
|
99
|
-
throw new Error('Token has expired');
|
|
99
|
+
throw new Error('Token has expired', { cause: error });
|
|
100
100
|
}
|
|
101
101
|
else if (error.name === 'JsonWebTokenError') {
|
|
102
|
-
throw new Error('Invalid token');
|
|
102
|
+
throw new Error('Invalid token', { cause: error });
|
|
103
103
|
}
|
|
104
104
|
else if (error.name === 'NotBeforeError') {
|
|
105
|
-
throw new Error('Token not active yet');
|
|
105
|
+
throw new Error('Token not active yet', { cause: error });
|
|
106
106
|
}
|
|
107
107
|
throw error;
|
|
108
108
|
}
|
|
@@ -131,7 +131,7 @@ export const createJWT = (user, config) => {
|
|
|
131
131
|
/**
|
|
132
132
|
* Integration with CASL ability builder
|
|
133
133
|
*/
|
|
134
|
-
export const createJWTAbilityBuilder = (
|
|
134
|
+
export const createJWTAbilityBuilder = (_config = {}) => {
|
|
135
135
|
return async (user) => {
|
|
136
136
|
// If user has direct permissions in JWT, use those
|
|
137
137
|
const jwtPermissions = user?.permissions;
|
|
@@ -162,7 +162,7 @@ export const createPostgraphileJWTPlugin = (config) => {
|
|
|
162
162
|
// Hook into Postgraphile's context building
|
|
163
163
|
grafast: {
|
|
164
164
|
hooks: {
|
|
165
|
-
async context(ctx,
|
|
165
|
+
async context(ctx, _build) {
|
|
166
166
|
const middleware = createJWTMiddleware(config);
|
|
167
167
|
// Create a simple context object that the middleware can work with
|
|
168
168
|
const context = {
|
|
@@ -283,7 +283,7 @@ export const refreshTokenUtils = {
|
|
|
283
283
|
}
|
|
284
284
|
catch (error) {
|
|
285
285
|
if (error.name === 'TokenExpiredError') {
|
|
286
|
-
throw new Error('Refresh token expired');
|
|
286
|
+
throw new Error('Refresh token expired', { cause: error });
|
|
287
287
|
}
|
|
288
288
|
throw error;
|
|
289
289
|
}
|
|
@@ -10,6 +10,6 @@ export declare const yogaCaslPlugin: Plugin<Context>;
|
|
|
10
10
|
* @public
|
|
11
11
|
*/
|
|
12
12
|
export declare const createYogaPlugin: (options?: MiddlewareOptions) => {
|
|
13
|
-
onExecute: (
|
|
13
|
+
onExecute: (_: any) => Promise<void>;
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=yoga.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yoga.d.ts","sourceRoot":"","sources":["../../../src/middleware/yoga.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAO1D,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAO1C,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAS,iBAAsB;
|
|
1
|
+
{"version":3,"file":"yoga.d.ts","sourceRoot":"","sources":["../../../src/middleware/yoga.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAO1D,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAO1C,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAS,iBAAsB;mBAIzC,GAAG;CAMzB,CAAA"}
|
|
@@ -5,7 +5,7 @@ const getLoggedInUser = () => {
|
|
|
5
5
|
return { id: '1', roles: ['editor'] };
|
|
6
6
|
};
|
|
7
7
|
export const yogaCaslPlugin = {
|
|
8
|
-
onContextBuilding: async ({
|
|
8
|
+
onContextBuilding: async ({ extendContext }) => {
|
|
9
9
|
// Make this async
|
|
10
10
|
const user = getLoggedInUser();
|
|
11
11
|
const ability = await createAbility(user); // Await here
|
|
@@ -21,9 +21,9 @@ export const yogaCaslPlugin = {
|
|
|
21
21
|
* @public
|
|
22
22
|
*/
|
|
23
23
|
export const createYogaPlugin = (options = {}) => {
|
|
24
|
-
const
|
|
24
|
+
const _middleware = createCaslMiddleware(options);
|
|
25
25
|
return {
|
|
26
|
-
onExecute: async (
|
|
26
|
+
onExecute: async (_) => {
|
|
27
27
|
// TODO: Implement Yoga plugin
|
|
28
28
|
// This would integrate with GraphQL Yoga's plugin system
|
|
29
29
|
console.log('Yoga plugin not yet implemented');
|
package/dist/tsdoc-metadata.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stonecrop/casl-middleware",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.8",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"sideEffects": false,
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@casl/ability": "^6.8.0",
|
|
34
|
-
"graphql": "^16.
|
|
34
|
+
"graphql": "^16.13.2",
|
|
35
35
|
"graphql-tag": "^2.12.6",
|
|
36
36
|
"jsonwebtoken": "^9.0.3"
|
|
37
37
|
},
|
|
@@ -39,23 +39,27 @@
|
|
|
39
39
|
"@graphql-tools/merge": "^9.1.7",
|
|
40
40
|
"@graphql-tools/schema": "^10.0.31",
|
|
41
41
|
"@graphql-tools/utils": "^11.0.0",
|
|
42
|
-
"@rushstack/heft": "^1.2.
|
|
43
|
-
"@types/node": "^22.19.
|
|
44
|
-
"@vitest/coverage-istanbul": "^4.
|
|
45
|
-
"eslint": "^
|
|
42
|
+
"@rushstack/heft": "^1.2.17",
|
|
43
|
+
"@types/node": "^22.19.17",
|
|
44
|
+
"@vitest/coverage-istanbul": "^4.1.5",
|
|
45
|
+
"@eslint/js": "^10.0.1",
|
|
46
|
+
"eslint": "^10.3.0",
|
|
47
|
+
"eslint-config-prettier": "^10.1.8",
|
|
48
|
+
"globals": "^17.6.0",
|
|
49
|
+
"typescript-eslint": "^8.59.1",
|
|
46
50
|
"graphql-middleware": "^6.1.35",
|
|
47
51
|
"graphql-yoga": "^5.18.0",
|
|
48
|
-
"jsdom": "^
|
|
49
|
-
"postgraphile": "^5.0.
|
|
50
|
-
"typescript": "^
|
|
51
|
-
"vite": "^7.3.
|
|
52
|
-
"vitest": "^4.
|
|
52
|
+
"jsdom": "^29.1.1",
|
|
53
|
+
"postgraphile": "^5.0.1",
|
|
54
|
+
"typescript": "^6.0.3",
|
|
55
|
+
"vite": "^7.3.2",
|
|
56
|
+
"vitest": "^4.1.5",
|
|
53
57
|
"@types/jsonwebtoken": "~9.0.10",
|
|
54
58
|
"stonecrop-rig": "0.7.0"
|
|
55
59
|
},
|
|
56
60
|
"peerDependencies": {
|
|
57
61
|
"graphql-yoga": "^5.18.0",
|
|
58
|
-
"postgraphile": "^5.0.
|
|
62
|
+
"postgraphile": "^5.0.1"
|
|
59
63
|
},
|
|
60
64
|
"description": "CASL authorization middleware for GraphQL servers",
|
|
61
65
|
"keywords": [
|
|
@@ -69,7 +69,7 @@ const Ability = PureAbility as AbilityClass<AppAbility>
|
|
|
69
69
|
/**
|
|
70
70
|
* Default ability builder - only provides minimal public access
|
|
71
71
|
*/
|
|
72
|
-
export const defaultAbilityBuilder = (
|
|
72
|
+
export const defaultAbilityBuilder = (_user?: Context['user']): AppAbility => {
|
|
73
73
|
const { can, build } = new AbilityBuilder<AppAbility>(Ability)
|
|
74
74
|
|
|
75
75
|
can('read', 'Query')
|
package/src/middleware/jwt.ts
CHANGED
|
@@ -147,11 +147,11 @@ export const createJWTMiddleware = (config: JWTConfig = {}) => {
|
|
|
147
147
|
|
|
148
148
|
// Re-throw with more specific error messages
|
|
149
149
|
if (error.name === 'TokenExpiredError') {
|
|
150
|
-
throw new Error('Token has expired')
|
|
150
|
+
throw new Error('Token has expired', { cause: error })
|
|
151
151
|
} else if (error.name === 'JsonWebTokenError') {
|
|
152
|
-
throw new Error('Invalid token')
|
|
152
|
+
throw new Error('Invalid token', { cause: error })
|
|
153
153
|
} else if (error.name === 'NotBeforeError') {
|
|
154
|
-
throw new Error('Token not active yet')
|
|
154
|
+
throw new Error('Token not active yet', { cause: error })
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
throw error
|
|
@@ -193,7 +193,7 @@ export const createJWT = (
|
|
|
193
193
|
/**
|
|
194
194
|
* Integration with CASL ability builder
|
|
195
195
|
*/
|
|
196
|
-
export const createJWTAbilityBuilder = (
|
|
196
|
+
export const createJWTAbilityBuilder = (_config: JWTConfig = {}) => {
|
|
197
197
|
return async (user?: User) => {
|
|
198
198
|
// If user has direct permissions in JWT, use those
|
|
199
199
|
const jwtPermissions = (user as any)?.permissions
|
|
@@ -229,7 +229,7 @@ export const createPostgraphileJWTPlugin = (config: JWTConfig) => {
|
|
|
229
229
|
// Hook into Postgraphile's context building
|
|
230
230
|
grafast: {
|
|
231
231
|
hooks: {
|
|
232
|
-
async context(ctx: any,
|
|
232
|
+
async context(ctx: any, _build: any) {
|
|
233
233
|
const middleware = createJWTMiddleware(config)
|
|
234
234
|
|
|
235
235
|
// Create a simple context object that the middleware can work with
|
|
@@ -386,7 +386,7 @@ export const refreshTokenUtils = {
|
|
|
386
386
|
return { accessToken, user }
|
|
387
387
|
} catch (error: any) {
|
|
388
388
|
if (error.name === 'TokenExpiredError') {
|
|
389
|
-
throw new Error('Refresh token expired')
|
|
389
|
+
throw new Error('Refresh token expired', { cause: error })
|
|
390
390
|
}
|
|
391
391
|
throw error
|
|
392
392
|
}
|
|
@@ -67,7 +67,7 @@ export const pglCaslPlugin: GraphileConfig.Plugin = extendSchema(build => {
|
|
|
67
67
|
|
|
68
68
|
return sideEffect(
|
|
69
69
|
[$userId as ExecutableStep, $roles as ExecutableStep],
|
|
70
|
-
async ([userId, roles]: [string, string[]]) => {
|
|
70
|
+
async ([userId, roles]: readonly [string, string[]]) => {
|
|
71
71
|
// Make this async
|
|
72
72
|
try {
|
|
73
73
|
const ability = await createAbility({ id: userId, roles }) // Await here
|
package/src/middleware/yoga.ts
CHANGED
|
@@ -10,7 +10,7 @@ const getLoggedInUser = () => {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const yogaCaslPlugin: Plugin<Context> = {
|
|
13
|
-
onContextBuilding: async ({
|
|
13
|
+
onContextBuilding: async ({ extendContext }) => {
|
|
14
14
|
// Make this async
|
|
15
15
|
const user = getLoggedInUser()
|
|
16
16
|
const ability = await createAbility(user) // Await here
|
|
@@ -27,10 +27,10 @@ export const yogaCaslPlugin: Plugin<Context> = {
|
|
|
27
27
|
* @public
|
|
28
28
|
*/
|
|
29
29
|
export const createYogaPlugin = (options: MiddlewareOptions = {}) => {
|
|
30
|
-
const
|
|
30
|
+
const _middleware = createCaslMiddleware(options)
|
|
31
31
|
|
|
32
32
|
return {
|
|
33
|
-
onExecute: async (
|
|
33
|
+
onExecute: async (_: any) => {
|
|
34
34
|
// TODO: Implement Yoga plugin
|
|
35
35
|
// This would integrate with GraphQL Yoga's plugin system
|
|
36
36
|
console.log('Yoga plugin not yet implemented')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|