@lit-protocol/vincent-app-sdk 0.0.7-mma → 0.0.9-mma
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 +1 -1
- package/dist/README.md +1 -1
- package/dist/package.json +1 -2
- package/dist/src/expressMiddleware/express.js +10 -1
- package/dist/src/expressMiddleware/express.js.map +1 -1
- package/dist/src/expressMiddleware/types.d.ts +2 -2
- package/dist/src/expressMiddleware/types.d.ts.map +1 -1
- package/dist/src/jwt/accessors.d.ts +36 -3
- package/dist/src/jwt/accessors.d.ts.map +1 -1
- package/dist/src/jwt/accessors.js +60 -2
- package/dist/src/jwt/accessors.js.map +1 -1
- package/dist/src/jwt/constants.d.ts +33 -0
- package/dist/src/jwt/constants.d.ts.map +1 -0
- package/dist/src/jwt/constants.js +36 -0
- package/dist/src/jwt/constants.js.map +1 -0
- package/dist/src/jwt/core/create.d.ts +14 -19
- package/dist/src/jwt/core/create.d.ts.map +1 -1
- package/dist/src/jwt/core/create.js +78 -78
- package/dist/src/jwt/core/create.js.map +1 -1
- package/dist/src/jwt/core/decode.d.ts +3 -0
- package/dist/src/jwt/core/decode.d.ts.map +1 -0
- package/dist/src/jwt/core/decode.js +27 -0
- package/dist/src/jwt/core/decode.js.map +1 -0
- package/dist/src/jwt/core/isExpired.d.ts +3 -3
- package/dist/src/jwt/core/isExpired.d.ts.map +1 -1
- package/dist/src/jwt/core/isExpired.js +1 -1
- package/dist/src/jwt/core/isExpired.js.map +1 -1
- package/dist/src/jwt/core/utils/base64.d.ts +1 -0
- package/dist/src/jwt/core/utils/base64.d.ts.map +1 -1
- package/dist/src/jwt/core/utils/base64.js +1 -0
- package/dist/src/jwt/core/utils/base64.js.map +1 -1
- package/dist/src/jwt/core/utils/decodeJWTStr.d.ts +3 -0
- package/dist/src/jwt/core/utils/decodeJWTStr.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/decodeJWTStr.js +21 -0
- package/dist/src/jwt/core/utils/decodeJWTStr.js.map +1 -0
- package/dist/src/jwt/core/utils/index.d.ts +2 -2
- package/dist/src/jwt/core/utils/index.d.ts.map +1 -1
- package/dist/src/jwt/core/utils/index.js +6 -5
- package/dist/src/jwt/core/utils/index.js.map +1 -1
- package/dist/src/jwt/core/utils/validateJWTTime.js +3 -3
- package/dist/src/jwt/core/utils/validateJWTTime.js.map +1 -1
- package/dist/src/jwt/core/utils/verifyES256KSignature.d.ts +5 -0
- package/dist/src/jwt/core/utils/verifyES256KSignature.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/verifyES256KSignature.js +33 -0
- package/dist/src/jwt/core/utils/verifyES256KSignature.js.map +1 -0
- package/dist/src/jwt/core/verify.d.ts +27 -0
- package/dist/src/jwt/core/verify.d.ts.map +1 -0
- package/dist/src/jwt/core/verify.js +84 -0
- package/dist/src/jwt/core/verify.js.map +1 -0
- package/dist/src/jwt/index.d.ts +7 -7
- package/dist/src/jwt/index.d.ts.map +1 -1
- package/dist/src/jwt/index.js +20 -10
- package/dist/src/jwt/index.js.map +1 -1
- package/dist/src/jwt/typeGuards.d.ts +28 -11
- package/dist/src/jwt/typeGuards.d.ts.map +1 -1
- package/dist/src/jwt/typeGuards.js +51 -20
- package/dist/src/jwt/typeGuards.js.map +1 -1
- package/dist/src/jwt/types.d.ts +123 -49
- package/dist/src/jwt/types.d.ts.map +1 -1
- package/dist/src/utils/delegation.js +2 -2
- package/dist/src/utils/delegation.js.map +1 -1
- package/dist/src/utils/types.d.ts +1 -4
- package/dist/src/utils/types.d.ts.map +1 -1
- package/dist/src/webAuthClient/app.js +1 -1
- package/dist/src/webAuthClient/app.js.map +1 -1
- package/dist/src/webAuthClient/internal/uriHelpers.d.ts +3 -3
- package/dist/src/webAuthClient/internal/uriHelpers.d.ts.map +1 -1
- package/dist/src/webAuthClient/internal/uriHelpers.js +6 -4
- package/dist/src/webAuthClient/internal/uriHelpers.js.map +1 -1
- package/dist/src/webAuthClient/types.d.ts +8 -8
- package/dist/src/webAuthClient/types.d.ts.map +1 -1
- package/package.json +3 -4
- package/dist/src/jwt/core/utils/processJWTSignature.d.ts +0 -8
- package/dist/src/jwt/core/utils/processJWTSignature.d.ts.map +0 -1
- package/dist/src/jwt/core/utils/processJWTSignature.js +0 -14
- package/dist/src/jwt/core/utils/processJWTSignature.js.map +0 -1
- package/dist/src/jwt/core/utils/splitJWT.d.ts +0 -11
- package/dist/src/jwt/core/utils/splitJWT.d.ts.map +0 -1
- package/dist/src/jwt/core/utils/splitJWT.js +0 -21
- package/dist/src/jwt/core/utils/splitJWT.js.map +0 -1
- package/dist/src/jwt/core/validate.d.ts +0 -29
- package/dist/src/jwt/core/validate.d.ts.map +0 -1
- package/dist/src/jwt/core/validate.js +0 -143
- package/dist/src/jwt/core/validate.js.map +0 -1
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ const vincentAppClient = getWebAuthClient({ appId: MY_APP_ID });
|
|
|
51
51
|
// ... In your app logic:
|
|
52
52
|
if (vincentAppClient.uriContainsVincentJWT()) {
|
|
53
53
|
// Handle app logic for the user has just logged in
|
|
54
|
-
const { decoded, jwt } = vincentAppClient.
|
|
54
|
+
const { decoded, jwt } = vincentAppClient.decodeVincentJWTFromUri(window.location.origin);
|
|
55
55
|
// Store `jwt` for later usage; the user is now logged in.
|
|
56
56
|
} else {
|
|
57
57
|
// Handle app logic for the user is _already logged in_ (check for stored & unexpired JWT)
|
package/dist/README.md
CHANGED
|
@@ -51,7 +51,7 @@ const vincentAppClient = getWebAuthClient({ appId: MY_APP_ID });
|
|
|
51
51
|
// ... In your app logic:
|
|
52
52
|
if (vincentAppClient.uriContainsVincentJWT()) {
|
|
53
53
|
// Handle app logic for the user has just logged in
|
|
54
|
-
const { decoded, jwt } = vincentAppClient.
|
|
54
|
+
const { decoded, jwt } = vincentAppClient.decodeVincentJWTFromUri(window.location.origin);
|
|
55
55
|
// Store `jwt` for later usage; the user is now logged in.
|
|
56
56
|
} else {
|
|
57
57
|
// Handle app logic for the user is _already logged in_ (check for stored & unexpired JWT)
|
package/dist/package.json
CHANGED
|
@@ -55,10 +55,9 @@
|
|
|
55
55
|
"@lit-protocol/auth-helpers": "^7.0.9",
|
|
56
56
|
"@lit-protocol/constants": "^7.0.8",
|
|
57
57
|
"@lit-protocol/lit-node-client": "^7.0.8",
|
|
58
|
-
"@lit-protocol/vincent-contracts-sdk": "workspace:*",
|
|
59
58
|
"@lit-protocol/vincent-ability-sdk": "workspace:*",
|
|
59
|
+
"@lit-protocol/vincent-contracts-sdk": "workspace:*",
|
|
60
60
|
"@noble/secp256k1": "^2.2.3",
|
|
61
|
-
"did-jwt": "^8.0.8",
|
|
62
61
|
"ethers": "5.8.0",
|
|
63
62
|
"tslib": "^2.8.1",
|
|
64
63
|
"zod": "3.25.64"
|
|
@@ -105,7 +105,16 @@ function getAuthenticateUserExpressHandler({ allowedAudience, requiredAppId, use
|
|
|
105
105
|
return;
|
|
106
106
|
}
|
|
107
107
|
try {
|
|
108
|
-
const decodedJWT =
|
|
108
|
+
const decodedJWT = requiredAppId != null
|
|
109
|
+
? await (0, jwt_1.verifyVincentAppUserJWT)({
|
|
110
|
+
jwt: rawJWT,
|
|
111
|
+
expectedAudience: allowedAudience,
|
|
112
|
+
requiredAppId,
|
|
113
|
+
})
|
|
114
|
+
: await (0, jwt_1.verifyVincentPlatformJWT)({
|
|
115
|
+
jwt: rawJWT,
|
|
116
|
+
expectedAudience: allowedAudience,
|
|
117
|
+
});
|
|
109
118
|
if (!decodedJWT) {
|
|
110
119
|
res.status(401).json({ error: 'Invalid token' });
|
|
111
120
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/expressMiddleware/express.ts"],"names":[],"mappings":";;AA8EA,kEASC;AAnFD,
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/expressMiddleware/express.ts"],"names":[],"mappings":";;AA8EA,kEASC;AAnFD,gCAA2E;AAC3E,6CAAoD;AAEpD,SAAS,0BAA0B,CACjC,GAAY,EACZ,OAAgB;IAEhB,qCAAqC;IACrC,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAA4B,CAAC;IAErD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEpC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAA,uBAAe,EAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,SAAgB,2BAA2B,CAA+B,MAIzE;IACC,OAAO;QACL,UAAU,EAAE,iCAAiC,CAAC,MAAM,CAAC;QACrD,OAAO,EAAE,2BAA2B,CAAC,MAAM,CAAC,OAAO,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAA+B,OAAgB;IACjF,OAAO,UAAU,OAA6C;QAC5D,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YACzD,IAAI,CAAC;gBACH,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACzC,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,WAAM,CAAC;gBACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,qCAAqC;AACrC,SAAS,iCAAiC,CAA+B,EACvE,eAAe,EACf,aAAa,EACb,OAAO,GAKR;IACC,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0DAA0D,EAAE,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,MAAM,GAAG,EAAE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GACd,aAAa,IAAI,IAAI;gBACnB,CAAC,CAAC,MAAM,IAAA,6BAAuB,EAAC;oBAC5B,GAAG,EAAE,MAAM;oBACX,gBAAgB,EAAE,eAAe;oBACjC,aAAa;iBACd,CAAC;gBACJ,CAAC,CAAC,MAAM,IAAA,8BAAwB,EAAC;oBAC7B,GAAG,EAAE,MAAM;oBACX,gBAAgB,EAAE,eAAe;iBAClC,CAAC,CAAC;YAET,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YAEA,GAAiD,CAAC,OAAO,CAAC,GAAG;gBAC5D,UAAU;gBACV,MAAM;aACW,CAAC;YAEpB,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAmB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AACD,wCAAwC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NextFunction, Request, RequestHandler, Response } from 'express';
|
|
2
|
-
import type {
|
|
2
|
+
import type { VincentJWTAppUser, VincentJWTPlatformUser } from '../jwt/types';
|
|
3
3
|
/** Extract the params type from the original Express.js RequestHandler
|
|
4
4
|
*
|
|
5
5
|
* You probably don't need this type; see { @link createVincentUserMiddleware } for details
|
|
@@ -16,7 +16,7 @@ export type ExtractRequestHandlerParams<T> = T extends RequestHandler<infer P, i
|
|
|
16
16
|
* */
|
|
17
17
|
export type AuthenticatedRequestHandler<UserKey extends string, P = ExtractRequestHandlerParams<RequestHandler>[0], ResBody = ExtractRequestHandlerParams<RequestHandler>[1], ReqBody = ExtractRequestHandlerParams<RequestHandler>[2], ReqQuery = ExtractRequestHandlerParams<RequestHandler>[3], Locals extends Record<string, any> = ExtractRequestHandlerParams<RequestHandler>[4]> = (req: AuthenticatedRequest<UserKey, P, ResBody, ReqBody, ReqQuery>, res: Response<ResBody, Locals>, next: NextFunction) => void | Promise<void>;
|
|
18
18
|
export interface VincentJWTData {
|
|
19
|
-
decodedJWT:
|
|
19
|
+
decodedJWT: VincentJWTPlatformUser | VincentJWTAppUser;
|
|
20
20
|
rawJWT: string;
|
|
21
21
|
}
|
|
22
22
|
/** An interface that extends the Express.js Request interface to include authenticated user data
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/expressMiddleware/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/E,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/expressMiddleware/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE9E;;;;;KAKK;AACL,MAAM,MAAM,2BAA2B,CAAC,CAAC,IACvC,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,EAAE,MAAM,OAAO,EAAE,MAAM,QAAQ,EAAE,MAAM,MAAM,CAAC,GACzF,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GACvC,KAAK,CAAC;AAEZ;;;;;;KAMK;AACL,MAAM,MAAM,2BAA2B,CACrC,OAAO,SAAS,MAAM,EACtB,CAAC,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAClD,OAAO,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EACxD,OAAO,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EACxD,QAAQ,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EACzD,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IACjF,CACF,GAAG,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EACjE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,YAAY,KACf,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,sBAAsB,GAAG,iBAAiB,CAAC;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;KAKK;AACL,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,MAAM,EACtB,CAAC,GAAG,GAAG,EACP,OAAO,GAAG,GAAG,EACb,OAAO,GAAG,GAAG,EACb,QAAQ,GAAG,GAAG,IACZ,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG;KAC1C,CAAC,IAAI,OAAO,GAAG,cAAc;CAC/B,CAAC"}
|
|
@@ -1,8 +1,41 @@
|
|
|
1
1
|
import type { IRelayPKP } from '@lit-protocol/types';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { VincentJWTPlatformUser, VincentJWTAppUser, AnyVincentJWT, VincentJWTDelegatee } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @category API > Accessors
|
|
5
|
+
*/
|
|
6
|
+
export declare function getAppInfo(decodedJWT: VincentJWTAppUser): {
|
|
4
7
|
appId: number;
|
|
5
8
|
version: number;
|
|
6
9
|
};
|
|
7
|
-
|
|
10
|
+
/**
|
|
11
|
+
* @category API > Accessors
|
|
12
|
+
*/
|
|
13
|
+
export declare function getPKPInfo(decodedJWT: VincentJWTPlatformUser | VincentJWTAppUser): IRelayPKP;
|
|
14
|
+
/**
|
|
15
|
+
* @category API > Accessors
|
|
16
|
+
*/
|
|
17
|
+
export declare function getRole(decodedJWT: AnyVincentJWT): string;
|
|
18
|
+
/**
|
|
19
|
+
* @category API > Accessors
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAuthentication(decodedJWT: VincentJWTPlatformUser | VincentJWTAppUser): {
|
|
22
|
+
type: string;
|
|
23
|
+
value?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* @category API > Accessors
|
|
27
|
+
*/
|
|
28
|
+
export declare function getPublicKey(decodedJWT: AnyVincentJWT): string;
|
|
29
|
+
/**
|
|
30
|
+
* @category API > Accessors
|
|
31
|
+
*/
|
|
32
|
+
export declare function getIssuerAddress(decodedJWT: AnyVincentJWT): string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* @category API > Accessors
|
|
35
|
+
*/
|
|
36
|
+
export declare function getSubjectAddress(decodedJWT: VincentJWTDelegatee): string;
|
|
37
|
+
/**
|
|
38
|
+
* @category API > Accessors
|
|
39
|
+
*/
|
|
40
|
+
export declare function getAudience(decodedJWT: AnyVincentJWT): string[];
|
|
8
41
|
//# sourceMappingURL=accessors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessors.d.ts","sourceRoot":"","sources":["../../../src/jwt/accessors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"accessors.d.ts","sourceRoot":"","sources":["../../../src/jwt/accessors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAKjB;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,iBAAiB,GAAG;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAMA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,SAAS,CAG5F;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,GAAG,iBAAiB,GAAG;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAGA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAKzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,EAAE,CAQ/D"}
|
|
@@ -2,14 +2,72 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAppInfo = getAppInfo;
|
|
4
4
|
exports.getPKPInfo = getPKPInfo;
|
|
5
|
+
exports.getRole = getRole;
|
|
6
|
+
exports.getAuthentication = getAuthentication;
|
|
7
|
+
exports.getPublicKey = getPublicKey;
|
|
8
|
+
exports.getIssuerAddress = getIssuerAddress;
|
|
9
|
+
exports.getSubjectAddress = getSubjectAddress;
|
|
10
|
+
exports.getAudience = getAudience;
|
|
11
|
+
const constants_1 = require("./constants");
|
|
5
12
|
const typeGuards_1 = require("./typeGuards");
|
|
13
|
+
/**
|
|
14
|
+
* @category API > Accessors
|
|
15
|
+
*/
|
|
6
16
|
function getAppInfo(decodedJWT) {
|
|
7
|
-
if (!(0, typeGuards_1.
|
|
17
|
+
if (!(0, typeGuards_1.isAppUser)(decodedJWT)) {
|
|
8
18
|
throw new Error('JWT is not app specific');
|
|
9
19
|
}
|
|
10
20
|
return { appId: decodedJWT.payload.app.id, version: decodedJWT.payload.app.version };
|
|
11
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* @category API > Accessors
|
|
24
|
+
*/
|
|
12
25
|
function getPKPInfo(decodedJWT) {
|
|
13
|
-
|
|
26
|
+
(0, typeGuards_1.assertIsPKPSignedVincentJWT)(decodedJWT);
|
|
27
|
+
return decodedJWT.payload.pkpInfo;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @category API > Accessors
|
|
31
|
+
*/
|
|
32
|
+
function getRole(decodedJWT) {
|
|
33
|
+
return decodedJWT.payload.role;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @category API > Accessors
|
|
37
|
+
*/
|
|
38
|
+
function getAuthentication(decodedJWT) {
|
|
39
|
+
(0, typeGuards_1.assertIsPKPSignedVincentJWT)(decodedJWT);
|
|
40
|
+
return decodedJWT.payload.authentication;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @category API > Accessors
|
|
44
|
+
*/
|
|
45
|
+
function getPublicKey(decodedJWT) {
|
|
46
|
+
return decodedJWT.payload.publicKey;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @category API > Accessors
|
|
50
|
+
*/
|
|
51
|
+
function getIssuerAddress(decodedJWT) {
|
|
52
|
+
return decodedJWT.payload.iss;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @category API > Accessors
|
|
56
|
+
*/
|
|
57
|
+
function getSubjectAddress(decodedJWT) {
|
|
58
|
+
if (!decodedJWT.payload.sub) {
|
|
59
|
+
throw new Error(constants_1.JWT_ERROR.INVALID_JWT + ' - Missing subject address');
|
|
60
|
+
}
|
|
61
|
+
return decodedJWT.payload.sub;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @category API > Accessors
|
|
65
|
+
*/
|
|
66
|
+
function getAudience(decodedJWT) {
|
|
67
|
+
const aud = decodedJWT.payload.aud;
|
|
68
|
+
if (!aud) {
|
|
69
|
+
throw new Error(constants_1.JWT_ERROR.INVALID_AUDIENCE + ' - Missing audience');
|
|
70
|
+
}
|
|
71
|
+
return Array.isArray(aud) ? aud : [aud];
|
|
14
72
|
}
|
|
15
73
|
//# sourceMappingURL=accessors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessors.js","sourceRoot":"","sources":["../../../src/jwt/accessors.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"accessors.js","sourceRoot":"","sources":["../../../src/jwt/accessors.ts"],"names":[],"mappings":";;AAeA,gCASC;AAKD,gCAGC;AAKD,0BAEC;AAKD,8CAMC;AAKD,oCAEC;AAKD,4CAEC;AAKD,8CAKC;AAKD,kCAQC;AA9ED,2CAAwC;AACxC,6CAAsE;AAEtE;;GAEG;AACH,SAAgB,UAAU,CAAC,UAA6B;IAItD,IAAI,CAAC,IAAA,sBAAS,EAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,UAAsD;IAC/E,IAAA,wCAA2B,EAAC,UAAU,CAAC,CAAC;IACxC,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAC,UAAyB;IAC/C,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,UAAsD;IAItF,IAAA,wCAA2B,EAAC,UAAU,CAAC,CAAC;IACxC,OAAO,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,UAAyB;IACpD,OAAO,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,UAAyB;IACxD,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,UAA+B;IAC/D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qBAAS,CAAC,WAAW,GAAG,4BAA4B,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,UAAyB;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;IAEnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,qBAAS,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const JWT_ERROR: {
|
|
2
|
+
/**
|
|
3
|
+
* Thrown when a JWT payload schema is unexpected or when validity period does not match
|
|
4
|
+
*/
|
|
5
|
+
INVALID_JWT: string;
|
|
6
|
+
/**
|
|
7
|
+
* Thrown when the verifier audience does not match the one set in the JWT payload
|
|
8
|
+
*/
|
|
9
|
+
INVALID_AUDIENCE: string;
|
|
10
|
+
/**
|
|
11
|
+
* Thrown when none of the public keys of the issuer match the signature of the JWT.
|
|
12
|
+
*
|
|
13
|
+
* This is equivalent to `NO_SUITABLE_KEYS` when the `proofPurpose` is NOT specified.
|
|
14
|
+
*/
|
|
15
|
+
INVALID_SIGNATURE: string;
|
|
16
|
+
/**
|
|
17
|
+
* Thrown when the DID document of the issuer does not have any keys that match the signature for the given
|
|
18
|
+
* `proofPurpose`.
|
|
19
|
+
*
|
|
20
|
+
* This is equivalent to `invalid_signature`, when a `proofPurpose` is specified.
|
|
21
|
+
*/
|
|
22
|
+
NO_SUITABLE_KEYS: string;
|
|
23
|
+
/**
|
|
24
|
+
* Thrown when the `alg` of the JWT or the encoding of the key is not supported
|
|
25
|
+
*/
|
|
26
|
+
NOT_SUPPORTED: string;
|
|
27
|
+
/**
|
|
28
|
+
* Thrown when the DID resolver is unable to resolve the issuer DID.
|
|
29
|
+
*/
|
|
30
|
+
RESOLVER_ERROR: string;
|
|
31
|
+
};
|
|
32
|
+
export declare const VINCENT_JWT_API_VERSION = 1;
|
|
33
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/jwt/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;IACpB;;OAEG;;IAEH;;OAEG;;IAEH;;;;OAIG;;IAEH;;;;;OAKG;;IAEH;;OAEG;;IAEH;;OAEG;;CAEJ,CAAC;AAEF,eAAO,MAAM,uBAAuB,IAAI,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VINCENT_JWT_API_VERSION = exports.JWT_ERROR = void 0;
|
|
4
|
+
exports.JWT_ERROR = {
|
|
5
|
+
/**
|
|
6
|
+
* Thrown when a JWT payload schema is unexpected or when validity period does not match
|
|
7
|
+
*/
|
|
8
|
+
INVALID_JWT: 'invalid_jwt',
|
|
9
|
+
/**
|
|
10
|
+
* Thrown when the verifier audience does not match the one set in the JWT payload
|
|
11
|
+
*/
|
|
12
|
+
INVALID_AUDIENCE: 'invalid_config',
|
|
13
|
+
/**
|
|
14
|
+
* Thrown when none of the public keys of the issuer match the signature of the JWT.
|
|
15
|
+
*
|
|
16
|
+
* This is equivalent to `NO_SUITABLE_KEYS` when the `proofPurpose` is NOT specified.
|
|
17
|
+
*/
|
|
18
|
+
INVALID_SIGNATURE: 'invalid_signature',
|
|
19
|
+
/**
|
|
20
|
+
* Thrown when the DID document of the issuer does not have any keys that match the signature for the given
|
|
21
|
+
* `proofPurpose`.
|
|
22
|
+
*
|
|
23
|
+
* This is equivalent to `invalid_signature`, when a `proofPurpose` is specified.
|
|
24
|
+
*/
|
|
25
|
+
NO_SUITABLE_KEYS: 'no_suitable_keys',
|
|
26
|
+
/**
|
|
27
|
+
* Thrown when the `alg` of the JWT or the encoding of the key is not supported
|
|
28
|
+
*/
|
|
29
|
+
NOT_SUPPORTED: 'not_supported',
|
|
30
|
+
/**
|
|
31
|
+
* Thrown when the DID resolver is unable to resolve the issuer DID.
|
|
32
|
+
*/
|
|
33
|
+
RESOLVER_ERROR: 'resolver_error',
|
|
34
|
+
};
|
|
35
|
+
exports.VINCENT_JWT_API_VERSION = 1;
|
|
36
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/jwt/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACvB;;OAEG;IACH,WAAW,EAAE,aAAa;IAC1B;;OAEG;IACH,gBAAgB,EAAE,gBAAgB;IAClC;;;;OAIG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;;;;OAKG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;OAEG;IACH,aAAa,EAAE,eAAe;IAC9B;;OAEG;IACH,cAAc,EAAE,gBAAgB;CACjC,CAAC;AAEW,QAAA,uBAAuB,GAAG,CAAC,CAAC"}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CreateAppUserJWTParams, CreateDelegateeJWTParams, CreatePlatformUserJWTParams } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Create JWT for a platform user
|
|
4
|
+
* @category API > Create
|
|
5
|
+
* */
|
|
6
|
+
export declare function createPlatformUserJWT(config: CreatePlatformUserJWTParams): Promise<string>;
|
|
7
|
+
/** Create JWT for an app-scoped user
|
|
8
|
+
* @category API > Create
|
|
9
|
+
* */
|
|
10
|
+
export declare function createAppUserJWT(config: CreateAppUserJWTParams): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a JWT for an app delegatee (Ethereum account that may act on behalf of a user).
|
|
4
13
|
*
|
|
5
|
-
*
|
|
6
|
-
* like iat (issued at), exp (expiration), and iss (issuer). It also includes the
|
|
7
|
-
* PKP public key in the payload, which is used for verification.
|
|
14
|
+
* You must provide a valid `subjectAddress`, which must be a valid delegator for your Delegatee address.
|
|
8
15
|
*
|
|
9
|
-
* @
|
|
10
|
-
* @returns A promise that resolves to the signed JWT string
|
|
11
|
-
* @hidden
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* const jwt = await createPKPSignedJWT({
|
|
15
|
-
* pkpWallet: pkpWallet,
|
|
16
|
-
* pkp: pkpInfo,
|
|
17
|
-
* payload: { name: "Lit Protocol User", customField: "value" },
|
|
18
|
-
* expiresInMinutes: 30, // expires in 30 minutes
|
|
19
|
-
* audience: "example.com" // audience domain
|
|
20
|
-
* });
|
|
21
|
-
* ```
|
|
16
|
+
* @category API > Create
|
|
22
17
|
*/
|
|
23
|
-
export declare function
|
|
18
|
+
export declare function createDelegateeJWT(config: CreateDelegateeJWTParams): Promise<string>;
|
|
24
19
|
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/jwt/core/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/jwt/core/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAI5B,MAAM,UAAU,CAAC;AAuDlB;;;KAGK;AACL,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhG;AAED;;KAEK;AACL,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBtF;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1F"}
|
|
@@ -1,95 +1,95 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const ethers_1 = require("ethers");
|
|
3
|
+
exports.createPlatformUserJWT = createPlatformUserJWT;
|
|
4
|
+
exports.createAppUserJWT = createAppUserJWT;
|
|
5
|
+
exports.createDelegateeJWT = createDelegateeJWT;
|
|
7
6
|
const utils_1 = require("ethers/lib/utils");
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
8
|
const base64_1 = require("./utils/base64");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
* This function returns a signing function that conforms to the did-jwt library's
|
|
13
|
-
* signer interface. When called, it signs data using the PKP wallet, formatting
|
|
14
|
-
* the signature according to ES256K requirements (without recovery parameter).
|
|
15
|
-
*
|
|
16
|
-
* @param pkpWallet - The PKP Ethers wallet instance that will be used for signing
|
|
17
|
-
* @returns A signing function that takes data and returns a base64url-encoded signature
|
|
18
|
-
* @private
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const pkpWallet = new PKPEthersWallet({ ... });
|
|
22
|
-
* const signer = createPKPSigner(pkpWallet);
|
|
23
|
-
* const signature = await signer('data to sign');
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
function createPKPSigner(pkpWallet) {
|
|
27
|
-
/**
|
|
28
|
-
* The actual signer function conforming to the did-jwt signer interface
|
|
29
|
-
*
|
|
30
|
-
* @param data - The data to sign, either as a string or Uint8Array
|
|
31
|
-
* @returns A promise that resolves to the base64url-encoded signature
|
|
32
|
-
*/
|
|
9
|
+
const ensureHex = (s) => (0, utils_1.hexlify)(s, { allowMissingPrefix: true });
|
|
10
|
+
function createES256KSigner(wallet) {
|
|
33
11
|
return async (data) => {
|
|
34
|
-
const
|
|
35
|
-
const sig = await
|
|
36
|
-
const { r, s } =
|
|
37
|
-
const rBytes = (0, utils_1.arrayify)(r);
|
|
38
|
-
const sBytes = (0, utils_1.arrayify)(s);
|
|
39
|
-
// ES256K signature is r and s concatenated (64 bytes total)
|
|
12
|
+
const messageBytes = typeof data === 'string' ? (0, utils_1.toUtf8Bytes)(data) : data;
|
|
13
|
+
const sig = await wallet.signMessage(messageBytes);
|
|
14
|
+
const { r, s } = (0, utils_1.splitSignature)(sig);
|
|
40
15
|
const sigBytes = new Uint8Array(64);
|
|
41
|
-
sigBytes.set(
|
|
42
|
-
sigBytes.set(
|
|
16
|
+
sigBytes.set((0, utils_1.arrayify)(r), 0);
|
|
17
|
+
sigBytes.set((0, utils_1.arrayify)(s), 32);
|
|
43
18
|
return (0, base64_1.toBase64Url)(sigBytes);
|
|
44
19
|
};
|
|
45
20
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
*
|
|
49
|
-
* This function creates a JWT with the provided payload, adding standard claims
|
|
50
|
-
* like iat (issued at), exp (expiration), and iss (issuer). It also includes the
|
|
51
|
-
* PKP public key in the payload, which is used for verification.
|
|
52
|
-
*
|
|
53
|
-
* @param config - Configuration object containing all parameters for JWT creation
|
|
54
|
-
* @returns A promise that resolves to the signed JWT string
|
|
55
|
-
* @hidden
|
|
56
|
-
* @example
|
|
57
|
-
* ```typescript
|
|
58
|
-
* const jwt = await createPKPSignedJWT({
|
|
59
|
-
* pkpWallet: pkpWallet,
|
|
60
|
-
* pkp: pkpInfo,
|
|
61
|
-
* payload: { name: "Lit Protocol User", customField: "value" },
|
|
62
|
-
* expiresInMinutes: 30, // expires in 30 minutes
|
|
63
|
-
* audience: "example.com" // audience domain
|
|
64
|
-
* });
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
async function create(config) {
|
|
68
|
-
const { app, pkpWallet, pkp, payload, expiresInMinutes, audience, authentication } = config;
|
|
69
|
-
const signer = createPKPSigner(pkpWallet);
|
|
70
|
-
// iat and exp are expressed in seconds https://datatracker.ietf.org/doc/html/rfc7519
|
|
21
|
+
async function createJWS({ payload, wallet, config }) {
|
|
22
|
+
const { expiresInMinutes, audience, subjectAddress, role } = config;
|
|
71
23
|
const iat = Math.floor(Date.now() / 1000);
|
|
72
|
-
const exp =
|
|
73
|
-
const
|
|
74
|
-
const
|
|
24
|
+
const exp = (payload.nbf || Math.floor(Date.now() / 1000) + expiresInMinutes * 60);
|
|
25
|
+
const header = { alg: 'ES256K', typ: 'JWT' };
|
|
26
|
+
const iss = ensureHex(await wallet.getAddress());
|
|
27
|
+
const publicKey = ensureHex(wallet.publicKey);
|
|
28
|
+
const _payload = {
|
|
75
29
|
...payload,
|
|
76
|
-
aud: audience,
|
|
77
30
|
iat,
|
|
78
31
|
exp,
|
|
79
|
-
iss
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
},
|
|
32
|
+
iss,
|
|
33
|
+
publicKey,
|
|
34
|
+
aud: audience,
|
|
35
|
+
role,
|
|
36
|
+
...(subjectAddress ? { sub: subjectAddress } : {}),
|
|
37
|
+
__vincentJWTApiVersion: constants_1.VINCENT_JWT_API_VERSION,
|
|
86
38
|
};
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
39
|
+
const signingInput = [
|
|
40
|
+
(0, base64_1.toBase64Url)((0, utils_1.toUtf8Bytes)(JSON.stringify(header))),
|
|
41
|
+
(0, base64_1.toBase64Url)((0, utils_1.toUtf8Bytes)(JSON.stringify(_payload))),
|
|
42
|
+
].join('.');
|
|
43
|
+
const signature = await createES256KSigner(wallet)(signingInput);
|
|
44
|
+
// JWS Compact Serialization
|
|
45
|
+
// https://www.rfc-editor.org/rfc/rfc7515#section-7.1
|
|
46
|
+
return [signingInput, signature].join('.');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create JWT for a platform user
|
|
50
|
+
* @category API > Create
|
|
51
|
+
* */
|
|
52
|
+
async function createPlatformUserJWT(config) {
|
|
53
|
+
const { pkpWallet, pkpInfo, authentication, audience, expiresInMinutes, payload = {} } = config;
|
|
54
|
+
return createJWS({
|
|
55
|
+
payload: {
|
|
56
|
+
...payload,
|
|
57
|
+
pkpInfo,
|
|
58
|
+
authentication,
|
|
59
|
+
},
|
|
60
|
+
wallet: pkpWallet,
|
|
61
|
+
config: { audience, expiresInMinutes, role: 'platform-user' },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Create JWT for an app-scoped user
|
|
65
|
+
* @category API > Create
|
|
66
|
+
* */
|
|
67
|
+
async function createAppUserJWT(config) {
|
|
68
|
+
const { app, pkpWallet, pkpInfo, authentication, audience, expiresInMinutes, payload = {}, } = config;
|
|
69
|
+
return createJWS({
|
|
70
|
+
payload: {
|
|
71
|
+
...payload,
|
|
72
|
+
pkpInfo,
|
|
73
|
+
app,
|
|
74
|
+
authentication,
|
|
75
|
+
},
|
|
76
|
+
wallet: pkpWallet,
|
|
77
|
+
config: { audience, expiresInMinutes, role: 'app-user' },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a JWT for an app delegatee (Ethereum account that may act on behalf of a user).
|
|
82
|
+
*
|
|
83
|
+
* You must provide a valid `subjectAddress`, which must be a valid delegator for your Delegatee address.
|
|
84
|
+
*
|
|
85
|
+
* @category API > Create
|
|
86
|
+
*/
|
|
87
|
+
async function createDelegateeJWT(config) {
|
|
88
|
+
const { ethersWallet, subjectAddress, audience, expiresInMinutes, payload = {} } = config;
|
|
89
|
+
return createJWS({
|
|
90
|
+
payload,
|
|
91
|
+
wallet: ethersWallet,
|
|
92
|
+
config: { audience, expiresInMinutes, subjectAddress, role: 'app-delegatee' },
|
|
92
93
|
});
|
|
93
|
-
return jwt;
|
|
94
94
|
}
|
|
95
95
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/jwt/core/create.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/jwt/core/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/jwt/core/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EACd,MAAM,UAAU,CAAC;AAMlB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAsB3D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeVincentJWT = decodeVincentJWT;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const typeGuards_1 = require("../typeGuards");
|
|
6
|
+
const decodeJWTStr_1 = require("./utils/decodeJWTStr");
|
|
7
|
+
function decodeVincentJWT(jwt) {
|
|
8
|
+
var _a;
|
|
9
|
+
const decoded = (0, decodeJWTStr_1.decodeJWT)(jwt);
|
|
10
|
+
if (!decoded || typeof decoded !== 'object') {
|
|
11
|
+
throw new Error(`${constants_1.JWT_ERROR.INVALID_JWT}: Could not decode JWT`);
|
|
12
|
+
}
|
|
13
|
+
const role = (_a = decoded.payload) === null || _a === void 0 ? void 0 : _a.role;
|
|
14
|
+
switch (role) {
|
|
15
|
+
case 'platform-user':
|
|
16
|
+
(0, typeGuards_1.assertIsPKPSignedVincentJWT)(decoded);
|
|
17
|
+
return decoded;
|
|
18
|
+
case 'app-user':
|
|
19
|
+
(0, typeGuards_1.assertIsPKPSignedVincentJWT)(decoded);
|
|
20
|
+
return decoded;
|
|
21
|
+
case 'app-delegatee':
|
|
22
|
+
return decoded;
|
|
23
|
+
default:
|
|
24
|
+
throw new Error(`${constants_1.JWT_ERROR.INVALID_JWT}: Unrecognized role: ${role}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../../src/jwt/core/decode.ts"],"names":[],"mappings":";;AAWA,4CAsBC;AA1BD,4CAAyC;AACzC,8CAA4D;AAC5D,uDAAiD;AAEjD,SAAgB,gBAAgB,CAAC,GAAW;;IAC1C,MAAM,OAAO,GAAG,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,qBAAS,CAAC,WAAW,wBAAwB,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,OAAO,0CAAE,IAAI,CAAC;IAEnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe;YAClB,IAAA,wCAA2B,EAAC,OAAO,CAAC,CAAC;YACrC,OAAO,OAAiC,CAAC;QAC3C,KAAK,UAAU;YACb,IAAA,wCAA2B,EAAC,OAAO,CAAC,CAAC;YACrC,OAAO,OAA4B,CAAC;QACtC,KAAK,eAAe;YAClB,OAAO,OAA8B,CAAC;QAExC;YACE,MAAM,IAAI,KAAK,CAAC,GAAG,qBAAS,CAAC,WAAW,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AnyVincentJWT } from '../types';
|
|
2
2
|
/** Checks if a JWT is expired based on its 'exp' claim
|
|
3
3
|
*
|
|
4
4
|
* @returns true if expired, false otherwise
|
|
5
5
|
* @param decodedJWT
|
|
6
|
-
* @category API
|
|
6
|
+
* @category API > Verify
|
|
7
7
|
*/
|
|
8
|
-
export declare function isExpired(decodedJWT:
|
|
8
|
+
export declare function isExpired(decodedJWT: AnyVincentJWT): boolean;
|
|
9
9
|
//# sourceMappingURL=isExpired.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isExpired.d.ts","sourceRoot":"","sources":["../../../../src/jwt/core/isExpired.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"isExpired.d.ts","sourceRoot":"","sources":["../../../../src/jwt/core/isExpired.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAW5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isExpired.js","sourceRoot":"","sources":["../../../../src/jwt/core/isExpired.ts"],"names":[],"mappings":";;AAQA,8BAWC;AAjBD;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"isExpired.js","sourceRoot":"","sources":["../../../../src/jwt/core/isExpired.ts"],"names":[],"mappings":";;AAQA,8BAWC;AAjBD;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,UAAyB;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAE/B,gEAAgE;IAChE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;AACpC,CAAC"}
|
|
@@ -8,6 +8,7 @@ export declare function fromBase64(base64: string): Uint8Array;
|
|
|
8
8
|
/**
|
|
9
9
|
* Converts a Uint8Array to a base64url-encoded string.
|
|
10
10
|
* Works in all JS environments (Node.js, Deno, browser, Web Workers).
|
|
11
|
+
*
|
|
11
12
|
* No Buffer polyfill requirement.
|
|
12
13
|
*/
|
|
13
14
|
export declare function toBase64Url(bytes: Uint8Array): string;
|