feat(smartjwt): Add nested JWT functionality
This commit is contained in:
parent
59ae8ae466
commit
8097ca059f
@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2024-09-05 - 2.2.0 - feat(smartjwt)
|
||||||
|
Add nested JWT functionality
|
||||||
|
|
||||||
|
- Introduce `isNestedJwt` method to check if an object contains a nested JWT
|
||||||
|
- Implement `verifyNestedJwt` method to validate nested JWTs
|
||||||
|
- Add `createNestedJwt` method to create nested JWTs with given payload
|
||||||
|
- Include `nestedJwtGuard` for guarding nested JWT objects
|
||||||
|
|
||||||
## 2024-08-26 - 2.1.0 - feat(core)
|
## 2024-08-26 - 2.1.0 - feat(core)
|
||||||
Enhanced JWT handling and key management
|
Enhanced JWT handling and key management
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@push.rocks/smartcrypto": "^2.0.4",
|
"@push.rocks/smartcrypto": "^2.0.4",
|
||||||
"@push.rocks/smartguard": "^3.1.0",
|
"@push.rocks/smartguard": "^3.1.0",
|
||||||
|
"@push.rocks/smartjson": "^5.0.20",
|
||||||
"@tsclass/tsclass": "^4.1.2",
|
"@tsclass/tsclass": "^4.1.2",
|
||||||
"@types/jsonwebtoken": "^9.0.6",
|
"@types/jsonwebtoken": "^9.0.6",
|
||||||
"jsonwebtoken": "^9.0.2"
|
"jsonwebtoken": "^9.0.2"
|
||||||
|
3
pnpm-lock.yaml
generated
3
pnpm-lock.yaml
generated
@ -14,6 +14,9 @@ importers:
|
|||||||
'@push.rocks/smartguard':
|
'@push.rocks/smartguard':
|
||||||
specifier: ^3.1.0
|
specifier: ^3.1.0
|
||||||
version: 3.1.0
|
version: 3.1.0
|
||||||
|
'@push.rocks/smartjson':
|
||||||
|
specifier: ^5.0.20
|
||||||
|
version: 5.0.20
|
||||||
'@tsclass/tsclass':
|
'@tsclass/tsclass':
|
||||||
specifier: ^4.1.2
|
specifier: ^4.1.2
|
||||||
version: 4.1.2
|
version: 4.1.2
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/smartjwt',
|
name: '@push.rocks/smartjwt',
|
||||||
version: '2.1.0',
|
version: '2.2.0',
|
||||||
description: 'A JavaScript package for creating and verifying JWTs with strong typing support.'
|
description: 'A JavaScript package for creating and verifying JWTs with strong typing support.'
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ export class SmartJwt<T extends object = any> {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public isObjectWithJwt<T extends object>(
|
public isNestedJwt<T extends object>(
|
||||||
object: unknown,
|
object: unknown,
|
||||||
): object is IObjectWithJwt<T> {
|
): object is IObjectWithJwt<T> {
|
||||||
return (
|
return (
|
||||||
@ -98,17 +98,22 @@ export class SmartJwt<T extends object = any> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public jwtObjectGuard = new plugins.smartguard.Guard(async (dataArg: IObjectWithJwt<any>) => {
|
public async verifyNestedJwt<T extends object>(object: IObjectWithJwt<T>) {
|
||||||
const jwtData = this.verifyJWTAndGetData(dataArg.jwt);
|
const jwtData = await this.verifyJWTAndGetData(object.jwt);
|
||||||
// check all other properties wether they match with jwtData
|
(jwtData as any).jwt = object.jwt;
|
||||||
for (const key in dataArg) {
|
return plugins.smartjson.deepEqualObjects(object, jwtData);
|
||||||
if (key !== 'jwt') {
|
}
|
||||||
if (jwtData[key] !== dataArg[key]) {
|
|
||||||
return false;
|
public async createNestedJwt<T extends object>(payloadArg: T): Promise<IObjectWithJwt<T>> {
|
||||||
|
const jwt = await this.createJWT(payloadArg as any);
|
||||||
|
return {
|
||||||
|
...payloadArg,
|
||||||
|
jwt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return true;
|
public nestedJwtGuard = new plugins.smartguard.Guard(async (dataArg: IObjectWithJwt<any>) => {
|
||||||
|
return this.verifyNestedJwt(dataArg);
|
||||||
}, {
|
}, {
|
||||||
name: 'jwtObjectGuard',
|
name: 'jwtObjectGuard',
|
||||||
failedHint: 'is not a valid jwt object',
|
failedHint: 'is not a valid jwt object',
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// @pushrocks scope
|
// @pushrocks scope
|
||||||
import * as smartcrypto from '@push.rocks/smartcrypto';
|
import * as smartcrypto from '@push.rocks/smartcrypto';
|
||||||
import * as smartguard from '@push.rocks/smartguard';
|
import * as smartguard from '@push.rocks/smartguard';
|
||||||
|
import * as smartjson from '@push.rocks/smartjson';
|
||||||
|
|
||||||
export { smartcrypto, smartguard };
|
export { smartcrypto, smartguard, smartjson };
|
||||||
|
|
||||||
// thirdparty scope
|
// thirdparty scope
|
||||||
import jsonwebtoken from 'jsonwebtoken';
|
import jsonwebtoken from 'jsonwebtoken';
|
||||||
|
Loading…
Reference in New Issue
Block a user