@levrbet/shared 0.1.95 → 0.1.97

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 (78) hide show
  1. package/dist/core/types/auth.types.d.ts +25 -2
  2. package/dist/core/types/auth.types.js +4 -2
  3. package/dist/core/types/auth.types.js.map +1 -1
  4. package/dist/server/config/cloudflare.d.ts +30 -0
  5. package/dist/server/config/cloudflare.js +42 -0
  6. package/dist/server/config/cloudflare.js.map +1 -0
  7. package/dist/server/config/constants.js +2 -2
  8. package/dist/server/config/constants.js.map +1 -1
  9. package/dist/server/config/dotenv.d.ts +3 -7
  10. package/dist/server/config/dotenv.js +5 -14
  11. package/dist/server/config/dotenv.js.map +1 -1
  12. package/dist/server/config/index.d.ts +1 -0
  13. package/dist/server/config/index.js +1 -0
  14. package/dist/server/config/index.js.map +1 -1
  15. package/dist/server/config/urls.js +2 -2
  16. package/dist/server/config/urls.js.map +1 -1
  17. package/dist/server/contracts/instances.d.ts +1 -1
  18. package/dist/server/contracts/instances.js +3 -3
  19. package/dist/server/contracts/instances.js.map +1 -1
  20. package/dist/server/index.d.ts +1 -1
  21. package/dist/server/index.js +1 -1
  22. package/dist/server/index.js.map +1 -1
  23. package/dist/server/middleware/auth/cloudflare.handler.d.ts +7 -0
  24. package/dist/server/middleware/auth/cloudflare.handler.js +31 -0
  25. package/dist/server/middleware/auth/cloudflare.handler.js.map +1 -0
  26. package/dist/server/middleware/auth/hmac.handler.d.ts +19 -0
  27. package/dist/server/middleware/auth/hmac.handler.js +129 -0
  28. package/dist/server/middleware/auth/hmac.handler.js.map +1 -0
  29. package/dist/server/middleware/auth/index.d.ts +3 -0
  30. package/dist/server/middleware/auth/index.js +4 -0
  31. package/dist/server/middleware/auth/index.js.map +1 -0
  32. package/dist/server/middleware/auth/privy.handler.d.ts +8 -0
  33. package/dist/server/middleware/auth/privy.handler.js +29 -0
  34. package/dist/server/middleware/auth/privy.handler.js.map +1 -0
  35. package/dist/server/middleware/index.d.ts +1 -3
  36. package/dist/server/middleware/index.js +1 -3
  37. package/dist/server/middleware/index.js.map +1 -1
  38. package/dist/server/middleware/multiAuth.examples.d.ts +43 -0
  39. package/dist/server/middleware/multiAuth.examples.js +114 -0
  40. package/dist/server/middleware/multiAuth.examples.js.map +1 -0
  41. package/dist/server/middleware/multiAuth.middleware.d.ts +31 -0
  42. package/dist/server/middleware/multiAuth.middleware.js +82 -0
  43. package/dist/server/middleware/multiAuth.middleware.js.map +1 -0
  44. package/dist/server/services/cloudflare.service.d.ts +12 -0
  45. package/dist/server/services/cloudflare.service.js +21 -0
  46. package/dist/server/services/cloudflare.service.js.map +1 -0
  47. package/dist/server/services/index.d.ts +2 -0
  48. package/dist/server/services/index.js +2 -0
  49. package/dist/server/services/index.js.map +1 -1
  50. package/dist/server/services/privy.service.js.map +1 -0
  51. package/dist/server/types/express.types.d.ts +27 -0
  52. package/dist/server/types/express.types.js +2 -0
  53. package/dist/server/types/express.types.js.map +1 -0
  54. package/dist/server/types/index.d.ts +1 -0
  55. package/dist/server/types/index.js +2 -0
  56. package/dist/server/types/index.js.map +1 -0
  57. package/package.json +1 -1
  58. package/dist/server/auth/index.d.ts +0 -2
  59. package/dist/server/auth/index.js +0 -3
  60. package/dist/server/auth/index.js.map +0 -1
  61. package/dist/server/auth/kms.d.ts +0 -34
  62. package/dist/server/auth/kms.js +0 -122
  63. package/dist/server/auth/kms.js.map +0 -1
  64. package/dist/server/auth/middleware/index.d.ts +0 -17
  65. package/dist/server/auth/middleware/index.js +0 -62
  66. package/dist/server/auth/middleware/index.js.map +0 -1
  67. package/dist/server/auth/privy.service.js.map +0 -1
  68. package/dist/server/middleware/apiKey.middleware.d.ts +0 -2
  69. package/dist/server/middleware/apiKey.middleware.js +0 -67
  70. package/dist/server/middleware/apiKey.middleware.js.map +0 -1
  71. package/dist/server/middleware/mutiAuth.middleware.d.ts +0 -1
  72. package/dist/server/middleware/mutiAuth.middleware.js +0 -3
  73. package/dist/server/middleware/mutiAuth.middleware.js.map +0 -1
  74. package/dist/server/middleware/privy.middleware.d.ts +0 -3
  75. package/dist/server/middleware/privy.middleware.js +0 -43
  76. package/dist/server/middleware/privy.middleware.js.map +0 -1
  77. /package/dist/server/{auth → services}/privy.service.d.ts +0 -0
  78. /package/dist/server/{auth → services}/privy.service.js +0 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Multi-Auth Middleware Usage Examples
3
+ *
4
+ * This file demonstrates how to use the new multiAuth middleware
5
+ * to support multiple authentication methods in your routes.
6
+ */
7
+ declare const router: import("express-serve-static-core").Router;
8
+ /**
9
+ * Client-side usage:
10
+ *
11
+ * Clients MUST include the x-levr-auth-type header to indicate which auth method they're using:
12
+ *
13
+ * For Privy User:
14
+ * ```
15
+ * headers: {
16
+ * 'x-levr-auth-type': 'privyUser',
17
+ * 'privy-access-token': 'token...',
18
+ * 'privy-id-token': 'token...',
19
+ * 'eth-address': '0x...' // optional
20
+ * }
21
+ * ```
22
+ *
23
+ * For HMAC API Key:
24
+ * ```
25
+ * headers: {
26
+ * 'x-levr-auth-type': 'hmac',
27
+ * 'Authorization': 'HMAC <api-key-id>:<signature>',
28
+ * 'x-request-timestamp': '1234567890',
29
+ * 'x-request-nonce': 'random-string' // optional
30
+ * }
31
+ * ```
32
+ *
33
+ * For Service HMAC:
34
+ * ```
35
+ * headers: {
36
+ * 'x-levr-auth-type': 'serviceHmac',
37
+ * 'Authorization': 'HMAC <api-key-id>:<signature>',
38
+ * 'x-request-timestamp': '1234567890',
39
+ * 'x-request-nonce': 'random-string' // optional
40
+ * }
41
+ * ```
42
+ */
43
+ export default router;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Multi-Auth Middleware Usage Examples
3
+ *
4
+ * This file demonstrates how to use the new multiAuth middleware
5
+ * to support multiple authentication methods in your routes.
6
+ */
7
+ import { Router } from "express";
8
+ import { ApiKeyScope, LevrAuth, LevrService } from "../../core";
9
+ import { multiAuth } from "./multiAuth.middleware";
10
+ const router = Router();
11
+ // Example 1: Simple route supporting both Privy user auth and HMAC API keys
12
+ // Auto-enforces Write scope for POST requests
13
+ router.post("/orders", multiAuth({
14
+ methods: [LevrAuth.PRIVY_USER, LevrAuth.HMAC],
15
+ }), (req, res) => {
16
+ // Access authenticated user data
17
+ if (req.privyUser) {
18
+ console.log("Authenticated via Privy:", req.privyUser.id);
19
+ }
20
+ else if (req.apiUser) {
21
+ console.log("Authenticated via API key:", req.apiUser.id);
22
+ }
23
+ console.log("Auth method used:", req.authMethod);
24
+ console.log("ETH address:", req.ethAddress);
25
+ res.json({ success: true });
26
+ });
27
+ // Example 2: Admin-only route
28
+ router.delete("/admin/users/:id", multiAuth({
29
+ methods: [LevrAuth.PRIVY_ADMIN],
30
+ }), (req, res) => {
31
+ // Only Privy admins can access this
32
+ console.log("Admin user:", req.privyUser?.id);
33
+ res.json({ success: true });
34
+ });
35
+ // Example 3: Read-only route supporting multiple auth methods
36
+ // Disable auto-enforcement of Write scope for POST
37
+ router.post("/search", multiAuth({
38
+ methods: [LevrAuth.PRIVY_USER, LevrAuth.HMAC],
39
+ requiredScopes: [ApiKeyScope.Read],
40
+ autoEnforceWriteScope: false, // POST doesn't require Write scope
41
+ }), (req, res) => {
42
+ // This POST route only needs Read scope
43
+ res.json({ results: [] });
44
+ });
45
+ // Example 4: Service-to-service authentication
46
+ // Only Orderbook and OracleCore services can access
47
+ router.post("/internal/sync-markets", multiAuth({
48
+ methods: [LevrAuth.SERVICE_HMAC],
49
+ allowedServices: [LevrService.Orderbook, LevrService.OracleCore],
50
+ }), (req, res) => {
51
+ // Only specific services can access
52
+ console.log("Service:", req.apiUser?.service);
53
+ res.json({ synced: true });
54
+ });
55
+ // Example 5: Mixed service and user auth with explicit scopes
56
+ router.put("/markets/:id", multiAuth({
57
+ methods: [LevrAuth.PRIVY_ADMIN, LevrAuth.SERVICE_HMAC],
58
+ requiredScopes: [ApiKeyScope.Write], // Explicitly require Write
59
+ allowedServices: [LevrService.Orderbook, LevrService.Lab],
60
+ }), (req, res) => {
61
+ // Either admin users or specific services can update
62
+ if (req.privyUser) {
63
+ console.log("Admin updating market:", req.privyUser.id);
64
+ }
65
+ else {
66
+ console.log("Service updating market:", req.apiUser?.service);
67
+ }
68
+ res.json({ updated: true });
69
+ });
70
+ // Example 6: GET route with optional auth
71
+ // Even GET requests can require specific scopes if needed
72
+ router.get("/private-data", multiAuth({
73
+ methods: [LevrAuth.PRIVY_USER, LevrAuth.HMAC],
74
+ requiredScopes: [ApiKeyScope.Read],
75
+ }), (req, res) => {
76
+ res.json({ data: "sensitive information" });
77
+ });
78
+ /**
79
+ * Client-side usage:
80
+ *
81
+ * Clients MUST include the x-levr-auth-type header to indicate which auth method they're using:
82
+ *
83
+ * For Privy User:
84
+ * ```
85
+ * headers: {
86
+ * 'x-levr-auth-type': 'privyUser',
87
+ * 'privy-access-token': 'token...',
88
+ * 'privy-id-token': 'token...',
89
+ * 'eth-address': '0x...' // optional
90
+ * }
91
+ * ```
92
+ *
93
+ * For HMAC API Key:
94
+ * ```
95
+ * headers: {
96
+ * 'x-levr-auth-type': 'hmac',
97
+ * 'Authorization': 'HMAC <api-key-id>:<signature>',
98
+ * 'x-request-timestamp': '1234567890',
99
+ * 'x-request-nonce': 'random-string' // optional
100
+ * }
101
+ * ```
102
+ *
103
+ * For Service HMAC:
104
+ * ```
105
+ * headers: {
106
+ * 'x-levr-auth-type': 'serviceHmac',
107
+ * 'Authorization': 'HMAC <api-key-id>:<signature>',
108
+ * 'x-request-timestamp': '1234567890',
109
+ * 'x-request-nonce': 'random-string' // optional
110
+ * }
111
+ * ```
112
+ */
113
+ export default router;
114
+ //# sourceMappingURL=multiAuth.examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiAuth.examples.js","sourceRoot":"","sources":["../../../src/server/middleware/multiAuth.examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { NextFunction, Request, Response } from "express";
2
+ import { MultiAuthOptions } from "../../core";
3
+ import "../types/express.types";
4
+ /**
5
+ * Multi-auth middleware factory
6
+ *
7
+ * Creates Express middleware that supports multiple authentication methods.
8
+ * The client specifies which method to use via the x-levr-auth-type header.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Support both user and API key auth, require Write scope
13
+ * app.post('/orders',
14
+ * multiAuth({
15
+ * methods: [LevrAuth.PRIVY_USER, LevrAuth.HMAC],
16
+ * requiredScopes: [ApiKeyScope.Write]
17
+ * }),
18
+ * orderController.create
19
+ * )
20
+ *
21
+ * // Service-to-service only, must be from Orderbook or OracleCore service
22
+ * app.post('/internal/sync',
23
+ * multiAuth({
24
+ * methods: [LevrAuth.SERVICE_HMAC],
25
+ * requiredServices: [LevrService.Orderbook, LevrService.OracleCore]
26
+ * }),
27
+ * internalController.sync
28
+ * )
29
+ * ```
30
+ */
31
+ export declare function multiAuth(options: MultiAuthOptions): (req: Request, res: Response, next: NextFunction) => Promise<void>;
@@ -0,0 +1,82 @@
1
+ import { LEVR_AUTH_HEADER, LevrAuth, PrivyRole } from "../../core";
2
+ import "../types/express.types";
3
+ import { handleCloudflareAuth, handleHmacAuth, handlePrivyAuth, handleServiceHmacAuth } from "./auth";
4
+ /**
5
+ * Multi-auth middleware factory
6
+ *
7
+ * Creates Express middleware that supports multiple authentication methods.
8
+ * The client specifies which method to use via the x-levr-auth-type header.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Support both user and API key auth, require Write scope
13
+ * app.post('/orders',
14
+ * multiAuth({
15
+ * methods: [LevrAuth.PRIVY_USER, LevrAuth.HMAC],
16
+ * requiredScopes: [ApiKeyScope.Write]
17
+ * }),
18
+ * orderController.create
19
+ * )
20
+ *
21
+ * // Service-to-service only, must be from Orderbook or OracleCore service
22
+ * app.post('/internal/sync',
23
+ * multiAuth({
24
+ * methods: [LevrAuth.SERVICE_HMAC],
25
+ * requiredServices: [LevrService.Orderbook, LevrService.OracleCore]
26
+ * }),
27
+ * internalController.sync
28
+ * )
29
+ * ```
30
+ */
31
+ export function multiAuth(options) {
32
+ return async (req, res, next) => {
33
+ const requestedAuthType = req.header(LEVR_AUTH_HEADER);
34
+ // If no auth type specified, reject
35
+ if (!requestedAuthType) {
36
+ res.status(400).json({
37
+ error: `Missing ${LEVR_AUTH_HEADER} header`,
38
+ supportedMethods: options.methods,
39
+ });
40
+ return;
41
+ }
42
+ // Check if requested auth method is supported by this route
43
+ if (!options.methods.includes(requestedAuthType)) {
44
+ res.status(400).json({
45
+ error: `Unsupported auth method: ${requestedAuthType}`,
46
+ supportedMethods: options.methods,
47
+ });
48
+ return;
49
+ }
50
+ let result;
51
+ // Route to appropriate auth handler
52
+ switch (requestedAuthType) {
53
+ case LevrAuth.HMAC:
54
+ result = await handleHmacAuth(req, options);
55
+ break;
56
+ case LevrAuth.SERVICE_HMAC:
57
+ result = await handleServiceHmacAuth(req, options);
58
+ break;
59
+ case LevrAuth.PRIVY_USER:
60
+ result = await handlePrivyAuth(req, PrivyRole.User, LevrAuth.PRIVY_USER);
61
+ break;
62
+ case LevrAuth.PRIVY_ADMIN:
63
+ result = await handlePrivyAuth(req, PrivyRole.Admin, LevrAuth.PRIVY_ADMIN);
64
+ break;
65
+ case LevrAuth.CLOUDFLARE:
66
+ result = await handleCloudflareAuth(req);
67
+ break;
68
+ default:
69
+ result = {
70
+ success: false,
71
+ error: `Unknown auth method: ${requestedAuthType}`,
72
+ statusCode: 400,
73
+ };
74
+ }
75
+ if (!result.success) {
76
+ res.status(result.statusCode || 401).json({ error: result.error });
77
+ return;
78
+ }
79
+ next();
80
+ };
81
+ }
82
+ //# sourceMappingURL=multiAuth.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiAuth.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/multiAuth.middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAoB,SAAS,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,wBAAwB,CAAA;AAC/B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAmB,MAAM,QAAQ,CAAA;AAEtH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IAC/C,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QAC5E,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAEtD,oCAAoC;QACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACjB,KAAK,EAAE,WAAW,gBAAgB,SAAS;gBAC3C,gBAAgB,EAAE,OAAO,CAAC,OAAO;aACpC,CAAC,CAAA;YACF,OAAM;QACV,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAA6B,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACjB,KAAK,EAAE,4BAA4B,iBAAiB,EAAE;gBACtD,gBAAgB,EAAE,OAAO,CAAC,OAAO;aACpC,CAAC,CAAA;YACF,OAAM;QACV,CAAC;QAED,IAAI,MAAkB,CAAA;QAEtB,oCAAoC;QACpC,QAAQ,iBAAiB,EAAE,CAAC;YACxB,KAAK,QAAQ,CAAC,IAAI;gBACd,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC3C,MAAK;YAET,KAAK,QAAQ,CAAC,YAAY;gBACtB,MAAM,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAClD,MAAK;YAET,KAAK,QAAQ,CAAC,UAAU;gBACpB,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;gBACxE,MAAK;YAET,KAAK,QAAQ,CAAC,WAAW;gBACrB,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;gBAC1E,MAAK;YAET,KAAK,QAAQ,CAAC,UAAU;gBACpB,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAA;gBACxC,MAAK;YAET;gBACI,MAAM,GAAG;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,wBAAwB,iBAAiB,EAAE;oBAClD,UAAU,EAAE,GAAG;iBAClB,CAAA;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YAClE,OAAM;QACV,CAAC;QAED,IAAI,EAAE,CAAA;IACV,CAAC,CAAA;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type JWTPayload, type JWTVerifyResult } from "jose";
2
+ declare class CloudflareAuthService {
3
+ /**
4
+ * Verify a Cloudflare Access JWT token.
5
+ *
6
+ * @throws Error if CloudflareConfig has not been initialized
7
+ * @throws Error if JWT verification fails
8
+ */
9
+ verifyJwt(jwt: string): Promise<JWTVerifyResult<JWTPayload>>;
10
+ }
11
+ export declare const cloudflareAuthService: CloudflareAuthService;
12
+ export {};
@@ -0,0 +1,21 @@
1
+ import { jwtVerify } from "jose";
2
+ import { cloudflareConfig } from "../config/cloudflare";
3
+ class CloudflareAuthService {
4
+ /**
5
+ * Verify a Cloudflare Access JWT token.
6
+ *
7
+ * @throws Error if CloudflareConfig has not been initialized
8
+ * @throws Error if JWT verification fails
9
+ */
10
+ async verifyJwt(jwt) {
11
+ const { jwks, issuer, audience } = cloudflareConfig.config;
12
+ return jwtVerify(jwt, jwks, {
13
+ issuer,
14
+ audience,
15
+ algorithms: ["RS256"],
16
+ typ: "JWT",
17
+ });
18
+ }
19
+ }
20
+ export const cloudflareAuthService = new CloudflareAuthService();
21
+ //# sourceMappingURL=cloudflare.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.service.js","sourceRoot":"","sources":["../../../src/server/services/cloudflare.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyC,MAAM,MAAM,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,qBAAqB;IACvB;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW;QACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAA;QAE1D,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;YACxB,MAAM;YACN,QAAQ;YACR,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,GAAG,EAAE,KAAK;SACb,CAAC,CAAA;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAA"}
@@ -1 +1,3 @@
1
+ export * from "./cloudflare.service";
1
2
  export * from "./crypto.service";
3
+ export * from "./privy.service";
@@ -1,2 +1,4 @@
1
+ export * from "./cloudflare.service";
1
2
  export * from "./crypto.service";
3
+ export * from "./privy.service";
2
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privy.service.js","sourceRoot":"","sources":["../../../src/server/services/privy.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { User as PrivyUser } from "@privy-io/node";
2
+ import type { Address } from "viem";
3
+ import type { LevrService } from "../../core";
4
+ declare module "express-serve-static-core" {
5
+ interface Request {
6
+ /**
7
+ * Authenticated Privy user (set by PRIVY_USER or PRIVY_ADMIN auth)
8
+ */
9
+ privyUser?: PrivyUser;
10
+ /**
11
+ * Authenticated API key user (set by HMAC or SERVICE_HMAC auth)
12
+ */
13
+ apiUser?: {
14
+ id: string;
15
+ isService: boolean;
16
+ service?: LevrService | null;
17
+ };
18
+ /**
19
+ * Ethereum address associated with the authenticated user
20
+ */
21
+ ethAddress?: Address | null;
22
+ /**
23
+ * The authentication method used for this request
24
+ */
25
+ authMethod?: string;
26
+ }
27
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=express.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.types.js","sourceRoot":"","sources":["../../../src/server/types/express.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export * from "./express.types";
@@ -0,0 +1,2 @@
1
+ export * from "./express.types";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levrbet/shared",
3
- "version": "0.1.95",
3
+ "version": "0.1.97",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -1,2 +0,0 @@
1
- export * from "./middleware";
2
- export * from "./kms";
@@ -1,3 +0,0 @@
1
- export * from "./middleware";
2
- export * from "./kms";
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,OAAO,CAAA"}
@@ -1,34 +0,0 @@
1
- import Redis from "ioredis";
2
- /**
3
- * Generates a new API key using AWS KMS
4
- * @returns {Promise<Object>} Object containing:
5
- * - plaintextKey: The decrypted API key to be provided to the user (shown only once)
6
- * - encryptedKey: The encrypted version of the key to be stored in the database
7
- * - keyId: The AWS KMS key ID used for encryption
8
- */
9
- export declare const generateApiKey: (userId: string) => Promise<{
10
- apiKey: string;
11
- keyId: string;
12
- }>;
13
- /**
14
- * Validates a provided API key by attempting to decrypt it using AWS KMS
15
- * @param {string} providedKey - The API key to validate
16
- * @returns {Promise<Object>} Object containing:
17
- * - isValid: Boolean indicating whether the key is valid
18
- */
19
- export declare const validateApiKey: (apiKey: string, redis: Redis) => Promise<{
20
- isValid: boolean;
21
- reason?: string;
22
- keyId?: string;
23
- }>;
24
- export declare const revokeKey: (keyId: string, apiKey: string) => Promise<void>;
25
- /**
26
- * Admin function to revoke an API key by keyId.
27
- * Marks the key as revoked in Redis.
28
- */
29
- export declare const adminRevokeApiKey: (keyId: string, redis: Redis) => Promise<void>;
30
- export declare const generateHmacSignature: (payload: string) => Promise<string>;
31
- /**
32
- * Verifies an HMAC signature
33
- */
34
- export declare const verifyHmacSignature: (payload: string, signature: string) => Promise<boolean>;
@@ -1,122 +0,0 @@
1
- /**
2
- * AWS KMS service integration for API key management
3
- * This module provides functionality for generating and validating API keys using AWS KMS
4
- */
5
- import { GenerateMacCommand, VerifyCommand, VerifyMacCommand } from "@aws-sdk/client-kms";
6
- import { randomBytes } from "crypto";
7
- import { kmsClientManager, kmsEnvConfig } from "../config";
8
- // import { getRevokedApiKey } from "../oracle/redis-cache-manager/cache.keys.utils"
9
- /**
10
- * Generates a new API key using AWS KMS
11
- * @returns {Promise<Object>} Object containing:
12
- * - plaintextKey: The decrypted API key to be provided to the user (shown only once)
13
- * - encryptedKey: The encrypted version of the key to be stored in the database
14
- * - keyId: The AWS KMS key ID used for encryption
15
- */
16
- export const generateApiKey = async (userId) => {
17
- const keyId = randomBytes(8).toString("hex"); // Unique key identifier
18
- const payload = `${userId}:${keyId}`;
19
- const client = kmsClientManager.client;
20
- const { Mac } = await client.send(new GenerateMacCommand({
21
- KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
22
- Message: Buffer.from(payload),
23
- MacAlgorithm: "HMAC_SHA_384",
24
- }));
25
- if (!Mac) {
26
- throw new Error("Failed to generate HMAC");
27
- }
28
- return {
29
- apiKey: `${payload}.${Buffer.from(Mac).toString("base64")}`, // Format: userId:keyId.signature
30
- keyId,
31
- };
32
- };
33
- /**
34
- * Validates a provided API key by attempting to decrypt it using AWS KMS
35
- * @param {string} providedKey - The API key to validate
36
- * @returns {Promise<Object>} Object containing:
37
- * - isValid: Boolean indicating whether the key is valid
38
- */
39
- export const validateApiKey = async (apiKey, redis) => {
40
- const [payload, signature] = apiKey.split(".");
41
- const [, keyId] = payload.split(":");
42
- // 1. Check if key is revoked in Redis
43
- // const isRevoked = await redis.get(getRevokedApiKey(keyId as string)) // possibly save this to prisma too
44
- let isRevoked = "1";
45
- if (isRevoked == "1") {
46
- return { isValid: false, reason: "Key revoked" };
47
- }
48
- const client = kmsClientManager.client;
49
- const { MacValid } = await client.send(new VerifyMacCommand({
50
- KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
51
- Message: Buffer.from(payload),
52
- Mac: Buffer.from(signature, "base64"),
53
- MacAlgorithm: "HMAC_SHA_384",
54
- }));
55
- if (!MacValid) {
56
- return { isValid: false, reason: "Invalid signature" };
57
- }
58
- return {
59
- isValid: MacValid,
60
- keyId,
61
- };
62
- };
63
- export const revokeKey = async (keyId, apiKey) => {
64
- const [payload, signature] = apiKey.split(".");
65
- const [, providedKeyId] = payload.split(":");
66
- if (providedKeyId !== keyId) {
67
- throw new Error("Key ID mismatch during revocation");
68
- }
69
- const client = kmsClientManager.client;
70
- // 2. Verify KMS signature before revocation
71
- const { SignatureValid } = await client.send(new VerifyCommand({
72
- KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
73
- Message: Buffer.from(payload),
74
- Signature: Buffer.from(signature, "base64"),
75
- SigningAlgorithm: "ECDSA_SHA_256",
76
- }));
77
- if (!SignatureValid) {
78
- throw new Error("Invalid signature during revocation");
79
- }
80
- };
81
- /**
82
- * Admin function to revoke an API key by keyId.
83
- * Marks the key as revoked in Redis.
84
- */
85
- //TODO guard under admin permissions
86
- export const adminRevokeApiKey = async (keyId, redis) => {
87
- await redis.set(`revoked:${keyId}`, "1");
88
- };
89
- export const generateHmacSignature = async (payload) => {
90
- const command = new GenerateMacCommand({
91
- KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
92
- Message: Buffer.from(payload),
93
- MacAlgorithm: "HMAC_SHA_384",
94
- });
95
- const client = kmsClientManager.client;
96
- const response = await client.send(command);
97
- if (!response.Mac) {
98
- throw new Error("Failed to generate HMAC signature");
99
- }
100
- return Buffer.from(response.Mac).toString("base64");
101
- };
102
- /**
103
- * Verifies an HMAC signature
104
- */
105
- export const verifyHmacSignature = async (payload, signature) => {
106
- try {
107
- const command = new VerifyMacCommand({
108
- KeyId: kmsEnvConfig.HMAC_KEY_ALIAS, //TODO: setup multiple signing keys, one for users, one for servers
109
- Message: Buffer.from(payload),
110
- Mac: Buffer.from(signature, "base64"),
111
- MacAlgorithm: "HMAC_SHA_384",
112
- });
113
- const client = kmsClientManager.client;
114
- const response = await client.send(command);
115
- return response.MacValid || false;
116
- }
117
- catch (error) {
118
- console.error("HMAC verification failed:", error);
119
- return false;
120
- }
121
- };
122
- //# sourceMappingURL=kms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kms.js","sourceRoot":"","sources":["../../../src/server/auth/kms.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { User as PrivyUser } from "@privy-io/node";
2
- import type { NextFunction, Request, Response } from "express";
3
- import Redis from "ioredis";
4
- import type { Address } from "viem";
5
- import { LevrService } from "../../../core";
6
- declare module "express-serve-static-core" {
7
- interface Request {
8
- privyUser?: PrivyUser;
9
- ethAddress?: Address | null;
10
- apiUser?: {
11
- id: string;
12
- isService: boolean;
13
- service?: LevrService | null;
14
- };
15
- }
16
- }
17
- export declare const authMiddleWare: (redis: Redis) => (req: Request, res: Response, next: NextFunction) => Promise<void>;