@lit-protocol/vincent-app-sdk 1.0.0-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/CHANGELOG.md +53 -0
- package/CONTRIBUTING.md +115 -0
- package/README.md +215 -0
- package/dist/CHANGELOG.md +53 -0
- package/dist/CONTRIBUTING.md +115 -0
- package/dist/README.md +215 -0
- package/dist/package.json +54 -0
- package/dist/src/app/app.d.ts +9 -0
- package/dist/src/app/app.d.ts.map +1 -0
- package/dist/src/app/app.js +33 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/constants.d.ts +3 -0
- package/dist/src/app/constants.d.ts.map +1 -0
- package/dist/src/app/constants.js +6 -0
- package/dist/src/app/constants.js.map +1 -0
- package/dist/src/app/index.d.ts +3 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/index.js +6 -0
- package/dist/src/app/index.js.map +1 -0
- package/dist/src/app/internal/index.d.ts +3 -0
- package/dist/src/app/internal/index.d.ts.map +1 -0
- package/dist/src/app/internal/index.js +7 -0
- package/dist/src/app/internal/index.js.map +1 -0
- package/dist/src/app/internal/uriHelpers.d.ts +11 -0
- package/dist/src/app/internal/uriHelpers.d.ts.map +1 -0
- package/dist/src/app/internal/uriHelpers.js +32 -0
- package/dist/src/app/internal/uriHelpers.js.map +1 -0
- package/dist/src/app/types.d.ts +119 -0
- package/dist/src/app/types.d.ts.map +1 -0
- package/dist/src/app/types.js +3 -0
- package/dist/src/app/types.js.map +1 -0
- package/dist/src/express-authentication-middleware/express.d.ts +79 -0
- package/dist/src/express-authentication-middleware/express.d.ts.map +1 -0
- package/dist/src/express-authentication-middleware/express.js +137 -0
- package/dist/src/express-authentication-middleware/express.js.map +1 -0
- package/dist/src/express-authentication-middleware/index.d.ts +43 -0
- package/dist/src/express-authentication-middleware/index.d.ts.map +1 -0
- package/dist/src/express-authentication-middleware/index.js +47 -0
- package/dist/src/express-authentication-middleware/index.js.map +1 -0
- package/dist/src/express-authentication-middleware/types.d.ts +22 -0
- package/dist/src/express-authentication-middleware/types.d.ts.map +1 -0
- package/dist/src/express-authentication-middleware/types.js +3 -0
- package/dist/src/express-authentication-middleware/types.js.map +1 -0
- package/dist/src/index.d.ts +12 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/internal/LitNodeClient/LitNodeClientInstance.d.ts +14 -0
- package/dist/src/internal/LitNodeClient/LitNodeClientInstance.d.ts.map +1 -0
- package/dist/src/internal/LitNodeClient/LitNodeClientInstance.js +67 -0
- package/dist/src/internal/LitNodeClient/LitNodeClientInstance.js.map +1 -0
- package/dist/src/internal/LitNodeClient/getLitNodeClient.d.ts +7 -0
- package/dist/src/internal/LitNodeClient/getLitNodeClient.d.ts.map +1 -0
- package/dist/src/internal/LitNodeClient/getLitNodeClient.js +25 -0
- package/dist/src/internal/LitNodeClient/getLitNodeClient.js.map +1 -0
- package/dist/src/jwt/core/create.d.ts +41 -0
- package/dist/src/jwt/core/create.d.ts.map +1 -0
- package/dist/src/jwt/core/create.js +114 -0
- package/dist/src/jwt/core/create.js.map +1 -0
- package/dist/src/jwt/core/utils/definedObject.d.ts +2 -0
- package/dist/src/jwt/core/utils/definedObject.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/definedObject.js +7 -0
- package/dist/src/jwt/core/utils/definedObject.js.map +1 -0
- package/dist/src/jwt/core/utils/index.d.ts +6 -0
- package/dist/src/jwt/core/utils/index.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/index.js +14 -0
- package/dist/src/jwt/core/utils/index.js.map +1 -0
- package/dist/src/jwt/core/utils/isJWTExpired.d.ts +8 -0
- package/dist/src/jwt/core/utils/isJWTExpired.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/isJWTExpired.js +19 -0
- package/dist/src/jwt/core/utils/isJWTExpired.js.map +1 -0
- package/dist/src/jwt/core/utils/processJWTSignature.d.ts +8 -0
- package/dist/src/jwt/core/utils/processJWTSignature.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/processJWTSignature.js +21 -0
- package/dist/src/jwt/core/utils/processJWTSignature.js.map +1 -0
- package/dist/src/jwt/core/utils/splitJWT.d.ts +11 -0
- package/dist/src/jwt/core/utils/splitJWT.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/splitJWT.js +21 -0
- package/dist/src/jwt/core/utils/splitJWT.js.map +1 -0
- package/dist/src/jwt/core/utils/validateJWTTime.d.ts +12 -0
- package/dist/src/jwt/core/utils/validateJWTTime.d.ts.map +1 -0
- package/dist/src/jwt/core/utils/validateJWTTime.js +24 -0
- package/dist/src/jwt/core/utils/validateJWTTime.js.map +1 -0
- package/dist/src/jwt/core/validate.d.ts +23 -0
- package/dist/src/jwt/core/validate.d.ts.map +1 -0
- package/dist/src/jwt/core/validate.js +96 -0
- package/dist/src/jwt/core/validate.js.map +1 -0
- package/dist/src/jwt/index.d.ts +69 -0
- package/dist/src/jwt/index.d.ts.map +1 -0
- package/dist/src/jwt/index.js +72 -0
- package/dist/src/jwt/index.js.map +1 -0
- package/dist/src/jwt/types.d.ts +68 -0
- package/dist/src/jwt/types.d.ts.map +1 -0
- package/dist/src/jwt/types.js +3 -0
- package/dist/src/jwt/types.js.map +1 -0
- package/dist/src/toolClient/index.d.ts +2 -0
- package/dist/src/toolClient/index.d.ts.map +1 -0
- package/dist/src/toolClient/index.js +6 -0
- package/dist/src/toolClient/index.js.map +1 -0
- package/dist/src/toolClient/resultCreators.d.ts +69 -0
- package/dist/src/toolClient/resultCreators.d.ts.map +1 -0
- package/dist/src/toolClient/resultCreators.js +55 -0
- package/dist/src/toolClient/resultCreators.js.map +1 -0
- package/dist/src/toolClient/typeGuards.d.ts +19 -0
- package/dist/src/toolClient/typeGuards.d.ts.map +1 -0
- package/dist/src/toolClient/typeGuards.js +48 -0
- package/dist/src/toolClient/typeGuards.js.map +1 -0
- package/dist/src/toolClient/types.d.ts +33 -0
- package/dist/src/toolClient/types.d.ts.map +1 -0
- package/dist/src/toolClient/types.js +3 -0
- package/dist/src/toolClient/types.js.map +1 -0
- package/dist/src/toolClient/vincentToolClient.d.ts +15 -0
- package/dist/src/toolClient/vincentToolClient.d.ts.map +1 -0
- package/dist/src/toolClient/vincentToolClient.js +256 -0
- package/dist/src/toolClient/vincentToolClient.js.map +1 -0
- package/dist/src/type-inference-verification/tool-client-inference.d.ts +3 -0
- package/dist/src/type-inference-verification/tool-client-inference.d.ts.map +1 -0
- package/dist/src/type-inference-verification/tool-client-inference.js +214 -0
- package/dist/src/type-inference-verification/tool-client-inference.js.map +1 -0
- package/dist/src/types.d.ts +4 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAuthenticateUserExpressHandler = exports.authenticatedRequestHandler = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const utils_1 = require("../jwt/core/utils");
|
|
6
|
+
const { verify } = __1.jwt;
|
|
7
|
+
function assertAuthenticatedRequest(req) {
|
|
8
|
+
if (!('user' in req) || typeof req.user !== 'object' || !req.user) {
|
|
9
|
+
throw new Error('Request is not an AuthenticatedRequest: Missing or invalid "user" property');
|
|
10
|
+
}
|
|
11
|
+
// Cast with a type assertion
|
|
12
|
+
const user = req.user;
|
|
13
|
+
const { decodedJWT, rawJWT } = user;
|
|
14
|
+
if (typeof rawJWT !== 'string' || !(0, utils_1.isDefinedObject)(decodedJWT)) {
|
|
15
|
+
throw new Error('Request is not an AuthenticatedRequest: Invalid "user" properties');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Higher-order helper function to enforce authentication on a request handler and assert the type of `Request` that is
|
|
20
|
+
* passed into your authenticated Express routes.
|
|
21
|
+
*
|
|
22
|
+
* This function takes an `AuthenticatedRequestHandler` and returns a new request handler
|
|
23
|
+
* that verifies that the request has a 'user' property with the correct shape on it before calling the original handler.
|
|
24
|
+
* If the `req.user` property isn't the correct shape, it sends a `401 Unauthorized` response to the client.
|
|
25
|
+
*
|
|
26
|
+
* NOTE: This does not verify signatures or any other content -- use `getAuthenticateUserExpressHandler` to create a
|
|
27
|
+
* middleware that does those things and ensure that your routes use it.
|
|
28
|
+
*
|
|
29
|
+
* See [express.js documentation](https://expressjs.com/en/guide/writing-middleware.html) for details on writing your route handler
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import { expressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
33
|
+
* const { authenticatedRequestHandler, getAuthenticateUserExpressHandler } = expressAuthHelpers;
|
|
34
|
+
*
|
|
35
|
+
* import type { ExpressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
36
|
+
*
|
|
37
|
+
* // Define an authenticated route handler
|
|
38
|
+
* const getUserProfile = async (req: ExpressAuthHelpers['AuthenticatedRequest'], res: Response) => {
|
|
39
|
+
* // Access authenticated user information
|
|
40
|
+
* const { pkpAddress } = req.user;
|
|
41
|
+
*
|
|
42
|
+
* // Fetch and return user data
|
|
43
|
+
* const userData = await userRepository.findByAddress(pkpAddress);
|
|
44
|
+
* res.json(userData);
|
|
45
|
+
* };
|
|
46
|
+
*
|
|
47
|
+
* // Use in Express route with authentication
|
|
48
|
+
* app.get('/profile', authenticateUser, authenticatedRequestHandler(getUserProfile));
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
const authenticatedRequestHandler = (handler) => (req, res, next) => {
|
|
52
|
+
try {
|
|
53
|
+
assertAuthenticatedRequest(req);
|
|
54
|
+
return handler(req, res, next);
|
|
55
|
+
}
|
|
56
|
+
catch (_a) {
|
|
57
|
+
res.status(401).json({ error: 'Not authenticated' });
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.authenticatedRequestHandler = authenticatedRequestHandler;
|
|
61
|
+
/**
|
|
62
|
+
* Creates an Express middleware function to authenticate a user using a JWT token.
|
|
63
|
+
*
|
|
64
|
+
* This middleware checks the `Authorization` header for a Bearer token, verifies the token, and checks its audience.
|
|
65
|
+
* If the token is valid, it attaches the user information (decoded JWT, raw token, and PKP address) to the request object as `req.user`.
|
|
66
|
+
* If the token is missing or invalid, it returns a 401 Unauthorized response with an error message.
|
|
67
|
+
*
|
|
68
|
+
* NOTE: Wrap your route handler functions with `authenticatedRequestHandler()` to assert the type of `Request` and to
|
|
69
|
+
* ensure that `req.user` was correctly set before your route handler is run.
|
|
70
|
+
*
|
|
71
|
+
* See [express.js documentation](https://expressjs.com/en/guide/writing-middleware.html) for details on writing your route handler
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* import { expressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
76
|
+
* const { authenticatedRequestHandler, getAuthenticateUserExpressHandler } = expressAuthHelpers;
|
|
77
|
+
*
|
|
78
|
+
* import type { ExpressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
79
|
+
*
|
|
80
|
+
* // In your environment configuration
|
|
81
|
+
* const ALLOWED_AUDIENCE = 'https://yourapp.example.com';
|
|
82
|
+
*
|
|
83
|
+
* // Create the authentication middleware
|
|
84
|
+
* const authenticateUser = getAuthenticateUserExpressHandler(ALLOWED_AUDIENCE);
|
|
85
|
+
*
|
|
86
|
+
* // Define a handler that requires authentication
|
|
87
|
+
* const getProtectedResource = (req: ExpressAuthHelpers['AuthenticatedRequest'], res: Response) => {
|
|
88
|
+
* // The request is now authenticated
|
|
89
|
+
* // No need for type casting as the handler is properly typed
|
|
90
|
+
* const { pkpAddress } = req.user;
|
|
91
|
+
* res.json({ message: `Hello, user with PKP address ${pkpAddress}` });
|
|
92
|
+
* };
|
|
93
|
+
*
|
|
94
|
+
* // Apply to routes that require authentication by using authenticatedRequestHandler
|
|
95
|
+
* app.get('/protected-resource', authenticateUser, authenticatedRequestHandler(getProtectedResource));
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* You can see the source for `getAuthenticateUserExpressHandler()` below; use this as a reference to implement
|
|
99
|
+
* your own midddleware/authentication for other frameworks! Pull requests are welcome.
|
|
100
|
+
* {@includeCode ./express.ts#expressHandlerTSDocExample}
|
|
101
|
+
*/
|
|
102
|
+
// #region expressHandlerTSDocExample
|
|
103
|
+
const getAuthenticateUserExpressHandler = (allowedAudience) => async (req, res, next) => {
|
|
104
|
+
const authHeader = req.headers.authorization;
|
|
105
|
+
if (!authHeader) {
|
|
106
|
+
res.status(401).json({ error: 'No token provided' });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const parts = authHeader.split(' ');
|
|
110
|
+
if (parts.length !== 2) {
|
|
111
|
+
res.status(401).json({ error: `Invalid authorization header - expected "Bearer <token>"` });
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const [scheme, rawJWT] = parts;
|
|
115
|
+
if (!/^Bearer$/i.test(scheme)) {
|
|
116
|
+
res.status(401).json({ error: `Expected "Bearer" scheme, got "${scheme}"` });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const decodedJWT = verify(rawJWT, allowedAudience);
|
|
121
|
+
if (!decodedJWT) {
|
|
122
|
+
res.status(401).json({ error: 'Invalid token' });
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
req.user = {
|
|
126
|
+
decodedJWT,
|
|
127
|
+
rawJWT,
|
|
128
|
+
};
|
|
129
|
+
next();
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
res.status(401).json({ error: `Invalid token: ${e.message}` });
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
exports.getAuthenticateUserExpressHandler = getAuthenticateUserExpressHandler;
|
|
136
|
+
// #endregion expressHandlerTSDocExample
|
|
137
|
+
//# sourceMappingURL=express.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/express-authentication-middleware/express.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** expressAuthHelpers are used to add a VincentJWT-specific authentication to your Express.js server routes
|
|
2
|
+
*
|
|
3
|
+
* - Create an express middleware using {@link getAuthenticateUserExpressHandler}
|
|
4
|
+
* - Once you have added the middleware to your route, use {@link authenticatedRequestHandler} to provide
|
|
5
|
+
* type-safe access to `req.user` in your downstream RequestHandler functions.
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { expressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
9
|
+
* const { authenticatedRequestHandler, getAuthenticateUserExpressHandler } = expressAuthHelpers;
|
|
10
|
+
*
|
|
11
|
+
* import type { ExpressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
12
|
+
*
|
|
13
|
+
* const { ALLOWED_AUDIENCE } = process.env;
|
|
14
|
+
*
|
|
15
|
+
*
|
|
16
|
+
* const authenticateUserMiddleware = getAuthenticateUserExpressHandler(ALLOWED_AUDIENCE);
|
|
17
|
+
*
|
|
18
|
+
*
|
|
19
|
+
* // Define an authenticated route handler
|
|
20
|
+
* const getUserProfile = async (req: ExpressAuthHelpers['AuthenticatedRequest'], res: Response) => {
|
|
21
|
+
* // Access authenticated user information
|
|
22
|
+
* const { pkpAddress } = req.user;
|
|
23
|
+
*
|
|
24
|
+
* // Fetch and return user data
|
|
25
|
+
* const userData = await userRepository.findByAddress(pkpAddress);
|
|
26
|
+
* res.json(userData);
|
|
27
|
+
* };
|
|
28
|
+
*
|
|
29
|
+
* // Use in Express route with authentication
|
|
30
|
+
* app.get('/profile', authenticateUser, authenticatedRequestHandler(getUserProfile));
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* You can see the source for `getAuthenticateUserExpressHandler()` below; use this as a reference to implement
|
|
34
|
+
* your own midddleware/authentication for other frameworks! Pull requests are welcome.
|
|
35
|
+
*
|
|
36
|
+
* {@includeCode ./express.ts#expressHandlerTSDocExample}
|
|
37
|
+
*
|
|
38
|
+
* @module expressAuthHelpers
|
|
39
|
+
* @category Vincent SDK API
|
|
40
|
+
* */
|
|
41
|
+
import { authenticatedRequestHandler, getAuthenticateUserExpressHandler } from './express';
|
|
42
|
+
export { authenticatedRequestHandler, getAuthenticateUserExpressHandler };
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/express-authentication-middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCK;AAEL,OAAO,EAAE,2BAA2B,EAAE,iCAAiC,EAAE,MAAM,WAAW,CAAC;AAE3F,OAAO,EAAE,2BAA2B,EAAE,iCAAiC,EAAE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** expressAuthHelpers are used to add a VincentJWT-specific authentication to your Express.js server routes
|
|
3
|
+
*
|
|
4
|
+
* - Create an express middleware using {@link getAuthenticateUserExpressHandler}
|
|
5
|
+
* - Once you have added the middleware to your route, use {@link authenticatedRequestHandler} to provide
|
|
6
|
+
* type-safe access to `req.user` in your downstream RequestHandler functions.
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { expressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
10
|
+
* const { authenticatedRequestHandler, getAuthenticateUserExpressHandler } = expressAuthHelpers;
|
|
11
|
+
*
|
|
12
|
+
* import type { ExpressAuthHelpers } from '@lit-protocol/vincent-app-sdk';
|
|
13
|
+
*
|
|
14
|
+
* const { ALLOWED_AUDIENCE } = process.env;
|
|
15
|
+
*
|
|
16
|
+
*
|
|
17
|
+
* const authenticateUserMiddleware = getAuthenticateUserExpressHandler(ALLOWED_AUDIENCE);
|
|
18
|
+
*
|
|
19
|
+
*
|
|
20
|
+
* // Define an authenticated route handler
|
|
21
|
+
* const getUserProfile = async (req: ExpressAuthHelpers['AuthenticatedRequest'], res: Response) => {
|
|
22
|
+
* // Access authenticated user information
|
|
23
|
+
* const { pkpAddress } = req.user;
|
|
24
|
+
*
|
|
25
|
+
* // Fetch and return user data
|
|
26
|
+
* const userData = await userRepository.findByAddress(pkpAddress);
|
|
27
|
+
* res.json(userData);
|
|
28
|
+
* };
|
|
29
|
+
*
|
|
30
|
+
* // Use in Express route with authentication
|
|
31
|
+
* app.get('/profile', authenticateUser, authenticatedRequestHandler(getUserProfile));
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* You can see the source for `getAuthenticateUserExpressHandler()` below; use this as a reference to implement
|
|
35
|
+
* your own midddleware/authentication for other frameworks! Pull requests are welcome.
|
|
36
|
+
*
|
|
37
|
+
* {@includeCode ./express.ts#expressHandlerTSDocExample}
|
|
38
|
+
*
|
|
39
|
+
* @module expressAuthHelpers
|
|
40
|
+
* @category Vincent SDK API
|
|
41
|
+
* */
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.getAuthenticateUserExpressHandler = exports.authenticatedRequestHandler = void 0;
|
|
44
|
+
const express_1 = require("./express");
|
|
45
|
+
Object.defineProperty(exports, "authenticatedRequestHandler", { enumerable: true, get: function () { return express_1.authenticatedRequestHandler; } });
|
|
46
|
+
Object.defineProperty(exports, "getAuthenticateUserExpressHandler", { enumerable: true, get: function () { return express_1.getAuthenticateUserExpressHandler; } });
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/express-authentication-middleware/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCK;;;AAEL,uCAA2F;AAElF,4GAFA,qCAA2B,OAEA;AAAE,kHAFA,2CAAiC,OAEA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NextFunction, Request, RequestHandler, Response } from 'express';
|
|
2
|
+
import { VincentJWT } from '../jwt/types';
|
|
3
|
+
/** Extract the parameters type from the original RequestHandler */
|
|
4
|
+
type ExtractRequestHandlerParams<T> = T extends RequestHandler<infer P, infer ResBody, infer ReqBody, infer ReqQuery, infer Locals> ? [P, ResBody, ReqBody, ReqQuery, Locals] : never;
|
|
5
|
+
/**
|
|
6
|
+
* A RequestHandler that guarantees the request is authenticated with a PKP address
|
|
7
|
+
* */
|
|
8
|
+
export type AuthenticatedRequestHandler<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<P, ResBody, ReqBody, ReqQuery>, res: Response<ResBody, Locals>, next: NextFunction) => void | Promise<void>;
|
|
9
|
+
/** Interface that extends Express Request to include authenticated user data
|
|
10
|
+
* */
|
|
11
|
+
export interface AuthenticatedRequest<P = any, ResBody = any, ReqBody = any, ReqQuery = any> extends Request<P, ResBody, ReqBody, ReqQuery> {
|
|
12
|
+
user: {
|
|
13
|
+
decodedJWT: VincentJWT;
|
|
14
|
+
rawJWT: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ExpressAuthHelpers {
|
|
18
|
+
AuthenticatedRequestHandler: AuthenticatedRequestHandler;
|
|
19
|
+
AuthenticatedRequest: AuthenticatedRequest;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/express-authentication-middleware/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,mEAAmE;AACnE,KAAK,2BAA2B,CAAC,CAAC,IAChC,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;;KAEK;AACL,MAAM,MAAM,2BAA2B,CACrC,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,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EACxD,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,YAAY,KACf,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;KACK;AACL,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,CACzF,SAAQ,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC9C,IAAI,EAAE;QACJ,UAAU,EAAE,UAAU,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/express-authentication-middleware/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as jwt from './jwt';
|
|
2
|
+
export { jwt };
|
|
3
|
+
export type { JWTConfig, VincentJWT, VincentJWTPayload } from './jwt/types';
|
|
4
|
+
import { disconnectLitNodeClientInstance as disconnectVincentToolClients } from './internal/LitNodeClient/getLitNodeClient';
|
|
5
|
+
export { disconnectVincentToolClients };
|
|
6
|
+
export { getVincentToolClient } from './toolClient';
|
|
7
|
+
export { getVincentWebAppClient } from './app';
|
|
8
|
+
export type { VincentWebAppClient, VincentAppClientConfig, RedirectToVincentConsentPageParams, } from './types';
|
|
9
|
+
import * as expressAuthHelpers from './express-authentication-middleware';
|
|
10
|
+
export { expressAuthHelpers };
|
|
11
|
+
export type { ExpressAuthHelpers } from './express-authentication-middleware/types';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,CAAC;AACf,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,+BAA+B,IAAI,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAE5H,OAAO,EAAE,4BAA4B,EAAE,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC/C,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,kBAAkB,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expressAuthHelpers = exports.getVincentWebAppClient = exports.getVincentToolClient = exports.disconnectVincentToolClients = exports.jwt = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jwt = tslib_1.__importStar(require("./jwt"));
|
|
6
|
+
exports.jwt = jwt;
|
|
7
|
+
const getLitNodeClient_1 = require("./internal/LitNodeClient/getLitNodeClient");
|
|
8
|
+
Object.defineProperty(exports, "disconnectVincentToolClients", { enumerable: true, get: function () { return getLitNodeClient_1.disconnectLitNodeClientInstance; } });
|
|
9
|
+
var toolClient_1 = require("./toolClient");
|
|
10
|
+
Object.defineProperty(exports, "getVincentToolClient", { enumerable: true, get: function () { return toolClient_1.getVincentToolClient; } });
|
|
11
|
+
var app_1 = require("./app");
|
|
12
|
+
Object.defineProperty(exports, "getVincentWebAppClient", { enumerable: true, get: function () { return app_1.getVincentWebAppClient; } });
|
|
13
|
+
const expressAuthHelpers = tslib_1.__importStar(require("./express-authentication-middleware"));
|
|
14
|
+
exports.expressAuthHelpers = expressAuthHelpers;
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,mDAA6B;AACpB,kBAAG;AAGZ,gFAA4H;AAEnH,6GAFmC,kDAA4B,OAEnC;AAErC,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA;AAE7B,6BAA+C;AAAtC,6GAAA,sBAAsB,OAAA;AAO/B,gGAA0E;AACjE,gDAAkB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LitNodeClient } from '@lit-protocol/lit-node-client';
|
|
2
|
+
import { LIT_NETWORKS_KEYS } from '@lit-protocol/types';
|
|
3
|
+
export declare class LitNodeClientInstance {
|
|
4
|
+
private readonly litNodeClientInstance;
|
|
5
|
+
private isConnected;
|
|
6
|
+
private connectHandle;
|
|
7
|
+
constructor({ network }: {
|
|
8
|
+
network: LIT_NETWORKS_KEYS;
|
|
9
|
+
});
|
|
10
|
+
connect(): Promise<boolean>;
|
|
11
|
+
disconnect(): Promise<void>;
|
|
12
|
+
get litNodeClient(): LitNodeClient;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=LitNodeClientInstance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LitNodeClientInstance.d.ts","sourceRoot":"","sources":["../../../../src/internal/LitNodeClient/LitNodeClientInstance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;IAEtD,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,aAAa,CAAiC;gBAE1C,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE;IAOjD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IA4B3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC,IAAI,aAAa,IAAI,aAAa,CAEjC;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LitNodeClientInstance = void 0;
|
|
4
|
+
const lit_node_client_1 = require("@lit-protocol/lit-node-client");
|
|
5
|
+
class LitNodeClientInstance {
|
|
6
|
+
constructor({ network }) {
|
|
7
|
+
this.isConnected = false;
|
|
8
|
+
this.connectHandle = null;
|
|
9
|
+
this.litNodeClientInstance = new lit_node_client_1.LitNodeClient({
|
|
10
|
+
debug: true,
|
|
11
|
+
litNetwork: network,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async connect() {
|
|
15
|
+
if (!this.isConnected) {
|
|
16
|
+
// Coalesce concurrent calls
|
|
17
|
+
if (this.connectHandle) {
|
|
18
|
+
return this.connectHandle;
|
|
19
|
+
}
|
|
20
|
+
// Stash a handle so concurrent calls to connect are coaelesced into 1
|
|
21
|
+
this.connectHandle = this.litNodeClientInstance.connect().then(() => true);
|
|
22
|
+
try {
|
|
23
|
+
// Don't return until we know the result of pending connect attempt
|
|
24
|
+
await this.connectHandle;
|
|
25
|
+
this.isConnected = true;
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
// We allow multiple calls to (retries!) to `connect()` even in case where one succeeded
|
|
29
|
+
// if `isConnected` is false (e.g. a prior attempt failed)
|
|
30
|
+
this.isConnected = false;
|
|
31
|
+
throw e;
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
this.connectHandle = null;
|
|
35
|
+
}
|
|
36
|
+
return this.isConnected;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
async disconnect() {
|
|
41
|
+
if (!this.isConnected && this.connectHandle) {
|
|
42
|
+
// Wait for connect attempt to finish so we don't end up just re-adding the listener when it finishes.
|
|
43
|
+
try {
|
|
44
|
+
await this.connectHandle;
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
/* Ignore errors on connect; we're disconnecting! */
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
await this.litNodeClientInstance.disconnect();
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
/* We did our best */
|
|
56
|
+
console.log('Failed to disconnect from LitNodeClientInstance.', e.message);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
this.isConnected = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
get litNodeClient() {
|
|
63
|
+
return this.litNodeClientInstance;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.LitNodeClientInstance = LitNodeClientInstance;
|
|
67
|
+
//# sourceMappingURL=LitNodeClientInstance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LitNodeClientInstance.js","sourceRoot":"","sources":["../../../../src/internal/LitNodeClient/LitNodeClientInstance.ts"],"names":[],"mappings":";;;AAAA,mEAA8D;AAG9D,MAAa,qBAAqB;IAOhC,YAAY,EAAE,OAAO,EAAkC;QAJ/C,gBAAW,GAAG,KAAK,CAAC;QAEpB,kBAAa,GAA4B,IAAI,CAAC;QAGpD,IAAI,CAAC,qBAAqB,GAAG,IAAI,+BAAa,CAAC;YAC7C,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,4BAA4B;YAC5B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC;YAED,sEAAsE;YACtE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAE3E,IAAI,CAAC;gBACH,mEAAmE;gBACnE,MAAM,IAAI,CAAC,aAAa,CAAC;gBACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,wFAAwF;gBACxF,0DAA0D;gBAC1D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,MAAM,CAAC,CAAC;YACV,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5C,sGAAsG;YACtG,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC;gBACzB,6DAA6D;YAC/D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,oDAAoD;YACtD,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qBAAqB;YACrB,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;CACF;AAlED,sDAkEC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LitNodeClient } from '@lit-protocol/lit-node-client';
|
|
2
|
+
import { LIT_NETWORKS_KEYS } from '@lit-protocol/types';
|
|
3
|
+
export declare function getLitNodeClientInstance({ network, }: {
|
|
4
|
+
network: LIT_NETWORKS_KEYS;
|
|
5
|
+
}): Promise<LitNodeClient>;
|
|
6
|
+
export declare function disconnectLitNodeClientInstance(): Promise<boolean>;
|
|
7
|
+
//# sourceMappingURL=getLitNodeClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLitNodeClient.d.ts","sourceRoot":"","sources":["../../../../src/internal/LitNodeClient/getLitNodeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAMxD,wBAAsB,wBAAwB,CAAC,EAC7C,OAAO,GACR,EAAE;IACD,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GAAG,OAAO,CAAC,aAAa,CAAC,CAYzB;AAED,wBAAsB,+BAA+B,qBAMpD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLitNodeClientInstance = getLitNodeClientInstance;
|
|
4
|
+
exports.disconnectLitNodeClientInstance = disconnectLitNodeClientInstance;
|
|
5
|
+
const LitNodeClientInstance_1 = require("./LitNodeClientInstance");
|
|
6
|
+
let instance = null;
|
|
7
|
+
async function getLitNodeClientInstance({ network, }) {
|
|
8
|
+
if (instance) {
|
|
9
|
+
// connect() is idempotent; if we're retrying from outside, attempt to connect again
|
|
10
|
+
// This is a no-op if already connected 🎉 but if a prior attempt fails, it'll try again.
|
|
11
|
+
await instance.connect();
|
|
12
|
+
return instance.litNodeClient;
|
|
13
|
+
}
|
|
14
|
+
instance = new LitNodeClientInstance_1.LitNodeClientInstance({ network });
|
|
15
|
+
await instance.connect();
|
|
16
|
+
return instance.litNodeClient;
|
|
17
|
+
}
|
|
18
|
+
async function disconnectLitNodeClientInstance() {
|
|
19
|
+
if (instance) {
|
|
20
|
+
await instance.disconnect();
|
|
21
|
+
instance = null;
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=getLitNodeClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLitNodeClient.js","sourceRoot":"","sources":["../../../../src/internal/LitNodeClient/getLitNodeClient.ts"],"names":[],"mappings":";;AAOA,4DAgBC;AAED,0EAMC;AA5BD,mEAAgE;AAEhE,IAAI,QAAQ,GAAiC,IAAI,CAAC;AAE3C,KAAK,UAAU,wBAAwB,CAAC,EAC7C,OAAO,GAGR;IACC,IAAI,QAAQ,EAAE,CAAC;QACb,oFAAoF;QACpF,yFAAyF;QACzF,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC,aAAa,CAAC;IAChC,CAAC;IAED,QAAQ,GAAG,IAAI,6CAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAEzB,OAAO,QAAQ,CAAC,aAAa,CAAC;AAChC,CAAC;AAEM,KAAK,UAAU,+BAA+B;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { PKPEthersWallet } from '@lit-protocol/pkp-ethers';
|
|
2
|
+
import type { JWTConfig } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a signer function compatible with did-jwt that uses a PKP wallet for signing
|
|
5
|
+
*
|
|
6
|
+
* This function returns a signing function that conforms to the did-jwt library's
|
|
7
|
+
* signer interface. When called, it signs data using the PKP wallet, formatting
|
|
8
|
+
* the signature according to ES256K requirements (without recovery parameter).
|
|
9
|
+
*
|
|
10
|
+
* @param pkpWallet - The PKP Ethers wallet instance that will be used for signing
|
|
11
|
+
* @returns A signing function that takes data and returns a base64url-encoded signature
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const pkpWallet = new PKPEthersWallet({ ... });
|
|
15
|
+
* const signer = createPKPSigner(pkpWallet);
|
|
16
|
+
* const signature = await signer('data to sign');
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function createPKPSigner(pkpWallet: PKPEthersWallet): (data: string | Uint8Array) => Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a JWT signed by a PKP wallet using the ES256K algorithm
|
|
22
|
+
*
|
|
23
|
+
* This function creates a JWT with the provided payload, adding standard claims
|
|
24
|
+
* like iat (issued at), exp (expiration), and iss (issuer). It also includes the
|
|
25
|
+
* PKP public key in the payload, which is used for verification.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Configuration object containing all parameters for JWT creation
|
|
28
|
+
* @returns A promise that resolves to the signed JWT string
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const jwt = await createPKPSignedJWT({
|
|
32
|
+
* pkpWallet: pkpWallet,
|
|
33
|
+
* pkp: pkpInfo,
|
|
34
|
+
* payload: { name: "Lit Protocol User", customField: "value" },
|
|
35
|
+
* expiresInMinutes: 30, // expires in 30 minutes
|
|
36
|
+
* audience: "example.com" // audience domain
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function createPKPSignedJWT(config: JWTConfig): Promise<string>;
|
|
41
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/jwt/core/create.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAqB,MAAM,UAAU,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,eAAe,IAwB1C,MAAM,MAAM,GAAG,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,CAuB1D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC3E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPKPSigner = createPKPSigner;
|
|
4
|
+
exports.createPKPSignedJWT = createPKPSignedJWT;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const didJWT = tslib_1.__importStar(require("did-jwt"));
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
8
|
+
/**
|
|
9
|
+
* Creates a signer function compatible with did-jwt that uses a PKP wallet for signing
|
|
10
|
+
*
|
|
11
|
+
* This function returns a signing function that conforms to the did-jwt library's
|
|
12
|
+
* signer interface. When called, it signs data using the PKP wallet, formatting
|
|
13
|
+
* the signature according to ES256K requirements (without recovery parameter).
|
|
14
|
+
*
|
|
15
|
+
* @param pkpWallet - The PKP Ethers wallet instance that will be used for signing
|
|
16
|
+
* @returns A signing function that takes data and returns a base64url-encoded signature
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const pkpWallet = new PKPEthersWallet({ ... });
|
|
20
|
+
* const signer = createPKPSigner(pkpWallet);
|
|
21
|
+
* const signature = await signer('data to sign');
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
function createPKPSigner(pkpWallet) {
|
|
25
|
+
/**
|
|
26
|
+
* Converts a hex string to a Uint8Array
|
|
27
|
+
*
|
|
28
|
+
* @param hex - The hex string to convert (with or without 0x prefix)
|
|
29
|
+
* @returns A Uint8Array representation of the hex string
|
|
30
|
+
*/
|
|
31
|
+
const hexToUint8Array = (hex) => {
|
|
32
|
+
if (hex.startsWith('0x')) {
|
|
33
|
+
hex = hex.slice(2);
|
|
34
|
+
}
|
|
35
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
36
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
37
|
+
bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
38
|
+
}
|
|
39
|
+
return bytes;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* The actual signer function conforming to the did-jwt signer interface
|
|
43
|
+
*
|
|
44
|
+
* @param data - The data to sign, either as a string or Uint8Array
|
|
45
|
+
* @returns A promise that resolves to the base64url-encoded signature
|
|
46
|
+
*/
|
|
47
|
+
return async (data) => {
|
|
48
|
+
const dataBytes = typeof data === 'string' ? Uint8Array.from(Buffer.from(data, 'utf8')) : data;
|
|
49
|
+
const sig = await pkpWallet.signMessage(dataBytes);
|
|
50
|
+
const { r, s } = ethers_1.ethers.utils.splitSignature(sig);
|
|
51
|
+
const rBytes = hexToUint8Array(r.slice(2));
|
|
52
|
+
const sBytes = hexToUint8Array(s.slice(2));
|
|
53
|
+
// ES256K signature is r and s concatenated (64 bytes total)
|
|
54
|
+
const sigBytes = new Uint8Array(64);
|
|
55
|
+
sigBytes.set(rBytes, 0);
|
|
56
|
+
sigBytes.set(sBytes, 32);
|
|
57
|
+
// Convert to base64url encoding
|
|
58
|
+
const base64Sig = Buffer.from(sigBytes)
|
|
59
|
+
.toString('base64')
|
|
60
|
+
.replace(/\+/g, '-')
|
|
61
|
+
.replace(/\//g, '_')
|
|
62
|
+
.replace(/=/g, '');
|
|
63
|
+
return base64Sig;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Creates a JWT signed by a PKP wallet using the ES256K algorithm
|
|
68
|
+
*
|
|
69
|
+
* This function creates a JWT with the provided payload, adding standard claims
|
|
70
|
+
* like iat (issued at), exp (expiration), and iss (issuer). It also includes the
|
|
71
|
+
* PKP public key in the payload, which is used for verification.
|
|
72
|
+
*
|
|
73
|
+
* @param config - Configuration object containing all parameters for JWT creation
|
|
74
|
+
* @returns A promise that resolves to the signed JWT string
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const jwt = await createPKPSignedJWT({
|
|
78
|
+
* pkpWallet: pkpWallet,
|
|
79
|
+
* pkp: pkpInfo,
|
|
80
|
+
* payload: { name: "Lit Protocol User", customField: "value" },
|
|
81
|
+
* expiresInMinutes: 30, // expires in 30 minutes
|
|
82
|
+
* audience: "example.com" // audience domain
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
async function createPKPSignedJWT(config) {
|
|
87
|
+
const { app, pkpWallet, pkp, payload, expiresInMinutes, audience, authentication } = config;
|
|
88
|
+
const signer = createPKPSigner(pkpWallet);
|
|
89
|
+
// iat and exp are expressed in seconds https://datatracker.ietf.org/doc/html/rfc7519
|
|
90
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
91
|
+
const exp = iat + expiresInMinutes * 60;
|
|
92
|
+
const walletAddress = await pkpWallet.getAddress();
|
|
93
|
+
const fullPayload = {
|
|
94
|
+
...payload,
|
|
95
|
+
aud: audience,
|
|
96
|
+
iat,
|
|
97
|
+
exp,
|
|
98
|
+
iss: `did:ethr:${walletAddress}`,
|
|
99
|
+
pkp,
|
|
100
|
+
app,
|
|
101
|
+
authentication: {
|
|
102
|
+
type: authentication.type,
|
|
103
|
+
...(authentication.value ? { value: authentication.value } : {}),
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
const jwt = await didJWT.createJWT(fullPayload, {
|
|
107
|
+
issuer: `did:ethr:${walletAddress}`,
|
|
108
|
+
signer,
|
|
109
|
+
}, {
|
|
110
|
+
alg: 'ES256K',
|
|
111
|
+
});
|
|
112
|
+
return jwt;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":"definedObject.d.ts","sourceRoot":"","sources":["../../../../../src/jwt/core/utils/definedObject.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definedObject.js","sourceRoot":"","sources":["../../../../../src/jwt/core/utils/definedObject.ts"],"names":[],"mappings":";;AAAA,0CAEC;AAFD,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC"}
|