@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.
Files changed (124) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/CONTRIBUTING.md +115 -0
  3. package/README.md +215 -0
  4. package/dist/CHANGELOG.md +53 -0
  5. package/dist/CONTRIBUTING.md +115 -0
  6. package/dist/README.md +215 -0
  7. package/dist/package.json +54 -0
  8. package/dist/src/app/app.d.ts +9 -0
  9. package/dist/src/app/app.d.ts.map +1 -0
  10. package/dist/src/app/app.js +33 -0
  11. package/dist/src/app/app.js.map +1 -0
  12. package/dist/src/app/constants.d.ts +3 -0
  13. package/dist/src/app/constants.d.ts.map +1 -0
  14. package/dist/src/app/constants.js +6 -0
  15. package/dist/src/app/constants.js.map +1 -0
  16. package/dist/src/app/index.d.ts +3 -0
  17. package/dist/src/app/index.d.ts.map +1 -0
  18. package/dist/src/app/index.js +6 -0
  19. package/dist/src/app/index.js.map +1 -0
  20. package/dist/src/app/internal/index.d.ts +3 -0
  21. package/dist/src/app/internal/index.d.ts.map +1 -0
  22. package/dist/src/app/internal/index.js +7 -0
  23. package/dist/src/app/internal/index.js.map +1 -0
  24. package/dist/src/app/internal/uriHelpers.d.ts +11 -0
  25. package/dist/src/app/internal/uriHelpers.d.ts.map +1 -0
  26. package/dist/src/app/internal/uriHelpers.js +32 -0
  27. package/dist/src/app/internal/uriHelpers.js.map +1 -0
  28. package/dist/src/app/types.d.ts +119 -0
  29. package/dist/src/app/types.d.ts.map +1 -0
  30. package/dist/src/app/types.js +3 -0
  31. package/dist/src/app/types.js.map +1 -0
  32. package/dist/src/express-authentication-middleware/express.d.ts +79 -0
  33. package/dist/src/express-authentication-middleware/express.d.ts.map +1 -0
  34. package/dist/src/express-authentication-middleware/express.js +137 -0
  35. package/dist/src/express-authentication-middleware/express.js.map +1 -0
  36. package/dist/src/express-authentication-middleware/index.d.ts +43 -0
  37. package/dist/src/express-authentication-middleware/index.d.ts.map +1 -0
  38. package/dist/src/express-authentication-middleware/index.js +47 -0
  39. package/dist/src/express-authentication-middleware/index.js.map +1 -0
  40. package/dist/src/express-authentication-middleware/types.d.ts +22 -0
  41. package/dist/src/express-authentication-middleware/types.d.ts.map +1 -0
  42. package/dist/src/express-authentication-middleware/types.js +3 -0
  43. package/dist/src/express-authentication-middleware/types.js.map +1 -0
  44. package/dist/src/index.d.ts +12 -0
  45. package/dist/src/index.d.ts.map +1 -0
  46. package/dist/src/index.js +15 -0
  47. package/dist/src/index.js.map +1 -0
  48. package/dist/src/internal/LitNodeClient/LitNodeClientInstance.d.ts +14 -0
  49. package/dist/src/internal/LitNodeClient/LitNodeClientInstance.d.ts.map +1 -0
  50. package/dist/src/internal/LitNodeClient/LitNodeClientInstance.js +67 -0
  51. package/dist/src/internal/LitNodeClient/LitNodeClientInstance.js.map +1 -0
  52. package/dist/src/internal/LitNodeClient/getLitNodeClient.d.ts +7 -0
  53. package/dist/src/internal/LitNodeClient/getLitNodeClient.d.ts.map +1 -0
  54. package/dist/src/internal/LitNodeClient/getLitNodeClient.js +25 -0
  55. package/dist/src/internal/LitNodeClient/getLitNodeClient.js.map +1 -0
  56. package/dist/src/jwt/core/create.d.ts +41 -0
  57. package/dist/src/jwt/core/create.d.ts.map +1 -0
  58. package/dist/src/jwt/core/create.js +114 -0
  59. package/dist/src/jwt/core/create.js.map +1 -0
  60. package/dist/src/jwt/core/utils/definedObject.d.ts +2 -0
  61. package/dist/src/jwt/core/utils/definedObject.d.ts.map +1 -0
  62. package/dist/src/jwt/core/utils/definedObject.js +7 -0
  63. package/dist/src/jwt/core/utils/definedObject.js.map +1 -0
  64. package/dist/src/jwt/core/utils/index.d.ts +6 -0
  65. package/dist/src/jwt/core/utils/index.d.ts.map +1 -0
  66. package/dist/src/jwt/core/utils/index.js +14 -0
  67. package/dist/src/jwt/core/utils/index.js.map +1 -0
  68. package/dist/src/jwt/core/utils/isJWTExpired.d.ts +8 -0
  69. package/dist/src/jwt/core/utils/isJWTExpired.d.ts.map +1 -0
  70. package/dist/src/jwt/core/utils/isJWTExpired.js +19 -0
  71. package/dist/src/jwt/core/utils/isJWTExpired.js.map +1 -0
  72. package/dist/src/jwt/core/utils/processJWTSignature.d.ts +8 -0
  73. package/dist/src/jwt/core/utils/processJWTSignature.d.ts.map +1 -0
  74. package/dist/src/jwt/core/utils/processJWTSignature.js +21 -0
  75. package/dist/src/jwt/core/utils/processJWTSignature.js.map +1 -0
  76. package/dist/src/jwt/core/utils/splitJWT.d.ts +11 -0
  77. package/dist/src/jwt/core/utils/splitJWT.d.ts.map +1 -0
  78. package/dist/src/jwt/core/utils/splitJWT.js +21 -0
  79. package/dist/src/jwt/core/utils/splitJWT.js.map +1 -0
  80. package/dist/src/jwt/core/utils/validateJWTTime.d.ts +12 -0
  81. package/dist/src/jwt/core/utils/validateJWTTime.d.ts.map +1 -0
  82. package/dist/src/jwt/core/utils/validateJWTTime.js +24 -0
  83. package/dist/src/jwt/core/utils/validateJWTTime.js.map +1 -0
  84. package/dist/src/jwt/core/validate.d.ts +23 -0
  85. package/dist/src/jwt/core/validate.d.ts.map +1 -0
  86. package/dist/src/jwt/core/validate.js +96 -0
  87. package/dist/src/jwt/core/validate.js.map +1 -0
  88. package/dist/src/jwt/index.d.ts +69 -0
  89. package/dist/src/jwt/index.d.ts.map +1 -0
  90. package/dist/src/jwt/index.js +72 -0
  91. package/dist/src/jwt/index.js.map +1 -0
  92. package/dist/src/jwt/types.d.ts +68 -0
  93. package/dist/src/jwt/types.d.ts.map +1 -0
  94. package/dist/src/jwt/types.js +3 -0
  95. package/dist/src/jwt/types.js.map +1 -0
  96. package/dist/src/toolClient/index.d.ts +2 -0
  97. package/dist/src/toolClient/index.d.ts.map +1 -0
  98. package/dist/src/toolClient/index.js +6 -0
  99. package/dist/src/toolClient/index.js.map +1 -0
  100. package/dist/src/toolClient/resultCreators.d.ts +69 -0
  101. package/dist/src/toolClient/resultCreators.d.ts.map +1 -0
  102. package/dist/src/toolClient/resultCreators.js +55 -0
  103. package/dist/src/toolClient/resultCreators.js.map +1 -0
  104. package/dist/src/toolClient/typeGuards.d.ts +19 -0
  105. package/dist/src/toolClient/typeGuards.d.ts.map +1 -0
  106. package/dist/src/toolClient/typeGuards.js +48 -0
  107. package/dist/src/toolClient/typeGuards.js.map +1 -0
  108. package/dist/src/toolClient/types.d.ts +33 -0
  109. package/dist/src/toolClient/types.d.ts.map +1 -0
  110. package/dist/src/toolClient/types.js +3 -0
  111. package/dist/src/toolClient/types.js.map +1 -0
  112. package/dist/src/toolClient/vincentToolClient.d.ts +15 -0
  113. package/dist/src/toolClient/vincentToolClient.d.ts.map +1 -0
  114. package/dist/src/toolClient/vincentToolClient.js +256 -0
  115. package/dist/src/toolClient/vincentToolClient.js.map +1 -0
  116. package/dist/src/type-inference-verification/tool-client-inference.d.ts +3 -0
  117. package/dist/src/type-inference-verification/tool-client-inference.d.ts.map +1 -0
  118. package/dist/src/type-inference-verification/tool-client-inference.js +214 -0
  119. package/dist/src/type-inference-verification/tool-client-inference.js.map +1 -0
  120. package/dist/src/types.d.ts +4 -0
  121. package/dist/src/types.d.ts.map +1 -0
  122. package/dist/src/types.js +3 -0
  123. package/dist/src/types.js.map +1 -0
  124. 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -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,2 @@
1
+ export declare function isDefinedObject(value: unknown): value is object;
2
+ //# sourceMappingURL=definedObject.d.ts.map
@@ -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,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDefinedObject = isDefinedObject;
4
+ function isDefinedObject(value) {
5
+ return typeof value === 'object' && value !== null;
6
+ }
7
+ //# sourceMappingURL=definedObject.js.map
@@ -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"}