@levrbet/shared 0.1.83 → 0.1.85
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/dist/core/config/dotenv.js +5 -9
- package/dist/core/config/dotenv.js.map +1 -1
- package/dist/core/config/index.js +2 -18
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/urls.js +43 -46
- package/dist/core/config/urls.js.map +1 -1
- package/dist/core/contracts/abis/LevrBaseMarket.js +1 -3
- package/dist/core/contracts/abis/LevrBaseMarket.js.map +1 -1
- package/dist/core/contracts/abis/LevrConfigProvider.js +1 -3
- package/dist/core/contracts/abis/LevrConfigProvider.js.map +1 -1
- package/dist/core/contracts/abis/LevrLiquidationEngine.js +1 -3
- package/dist/core/contracts/abis/LevrLiquidationEngine.js.map +1 -1
- package/dist/core/contracts/abis/LevrManager.js +1 -3
- package/dist/core/contracts/abis/LevrManager.js.map +1 -1
- package/dist/core/contracts/abis/LevrMarketFeed.js +1 -3
- package/dist/core/contracts/abis/LevrMarketFeed.js.map +1 -1
- package/dist/core/contracts/abis/LevrMarketRouter.js +1 -3
- package/dist/core/contracts/abis/LevrMarketRouter.js.map +1 -1
- package/dist/core/contracts/abis/LevrMvpRouter.js +1 -3
- package/dist/core/contracts/abis/LevrMvpRouter.js.map +1 -1
- package/dist/core/contracts/abis/LevrOrderbook.js +1 -3
- package/dist/core/contracts/abis/LevrOrderbook.js.map +1 -1
- package/dist/core/contracts/abis/Storage.js +1 -3
- package/dist/core/contracts/abis/Storage.js.map +1 -1
- package/dist/core/contracts/abis/index.js +19 -25
- package/dist/core/contracts/abis/index.js.map +1 -1
- package/dist/core/contracts/addresses.js +36 -39
- package/dist/core/contracts/addresses.js.map +1 -1
- package/dist/core/contracts/chains.js +9 -13
- package/dist/core/contracts/chains.js.map +1 -1
- package/dist/core/contracts/clients/index.js +1 -17
- package/dist/core/contracts/clients/index.js.map +1 -1
- package/dist/core/contracts/clients/publicClients.js +30 -36
- package/dist/core/contracts/clients/publicClients.js.map +1 -1
- package/dist/core/contracts/constants.js +11 -14
- package/dist/core/contracts/constants.js.map +1 -1
- package/dist/core/contracts/index.js +6 -22
- package/dist/core/contracts/index.js.map +1 -1
- package/dist/core/contracts/instances.js +18 -25
- package/dist/core/contracts/instances.js.map +1 -1
- package/dist/core/index.js +8 -24
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexers/envio.test.query.js +3 -7
- package/dist/core/indexers/envio.test.query.js.map +1 -1
- package/dist/core/indexers/index.js +1 -17
- package/dist/core/indexers/index.js.map +1 -1
- package/dist/core/indexers/indexers.service.js +14 -20
- package/dist/core/indexers/indexers.service.js.map +1 -1
- package/dist/core/indexers/subsquid.test.query.js +1 -4
- package/dist/core/indexers/subsquid.test.query.js.map +1 -1
- package/dist/core/prisma/index.js +1 -17
- package/dist/core/prisma/index.js.map +1 -1
- package/dist/core/privy/constants.js +7 -10
- package/dist/core/privy/constants.js.map +1 -1
- package/dist/core/privy/index.js +1 -17
- package/dist/core/privy/index.js.map +1 -1
- package/dist/core/types/blockchain/chains.types.js +2 -5
- package/dist/core/types/blockchain/chains.types.js.map +1 -1
- package/dist/core/types/blockchain/contract.types.js +2 -5
- package/dist/core/types/blockchain/contract.types.js.map +1 -1
- package/dist/core/types/blockchain/index.js +3 -19
- package/dist/core/types/blockchain/index.js.map +1 -1
- package/dist/core/types/blockchain/oz.relayer.types.js +2 -5
- package/dist/core/types/blockchain/oz.relayer.types.js.map +1 -1
- package/dist/core/types/index.js +5 -21
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/indexers.types.js +2 -5
- package/dist/core/types/indexers.types.js.map +1 -1
- package/dist/core/types/misc.types.js +2 -5
- package/dist/core/types/misc.types.js.map +1 -1
- package/dist/core/types/oracle/fixture.types.js +1 -3
- package/dist/core/types/oracle/fixture.types.js.map +1 -1
- package/dist/core/types/oracle/game.types.js +6 -10
- package/dist/core/types/oracle/game.types.js.map +1 -1
- package/dist/core/types/oracle/index.js +3 -19
- package/dist/core/types/oracle/index.js.map +1 -1
- package/dist/core/types/oracle/request_types/game.request.types.d.ts +7 -7
- package/dist/core/types/oracle/request_types/game.request.types.js +103 -106
- package/dist/core/types/oracle/request_types/game.request.types.js.map +1 -1
- package/dist/core/types/oracle/request_types/index.js +2 -18
- package/dist/core/types/oracle/request_types/index.js.map +1 -1
- package/dist/core/types/oracle/request_types/market.request.types.js +34 -37
- package/dist/core/types/oracle/request_types/market.request.types.js.map +1 -1
- package/dist/core/types/privy.types.js +2 -5
- package/dist/core/types/privy.types.js.map +1 -1
- package/dist/core/utils.js +3 -11
- package/dist/core/utils.js.map +1 -1
- package/dist/core/validators/bytes.validators.js +24 -34
- package/dist/core/validators/bytes.validators.js.map +1 -1
- package/dist/core/validators/index.js +2 -18
- package/dist/core/validators/index.js.map +1 -1
- package/dist/core/validators/mongo.validators.js +3 -9
- package/dist/core/validators/mongo.validators.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/react/hooks/auth/index.js +1 -17
- package/dist/react/hooks/auth/index.js.map +1 -1
- package/dist/react/hooks/auth/useAuthHeaders.d.ts +4 -4
- package/dist/react/hooks/auth/useAuthHeaders.js +19 -31
- package/dist/react/hooks/auth/useAuthHeaders.js.map +1 -1
- package/dist/react/hooks/contracts/index.js +2 -18
- package/dist/react/hooks/contracts/index.js.map +1 -1
- package/dist/react/hooks/contracts/useContracts.js +11 -19
- package/dist/react/hooks/contracts/useContracts.js.map +1 -1
- package/dist/react/hooks/contracts/useLevrMarketContractAddresses.js +8 -13
- package/dist/react/hooks/contracts/useLevrMarketContractAddresses.js.map +1 -1
- package/dist/react/hooks/index.js +2 -18
- package/dist/react/hooks/index.js.map +1 -1
- package/dist/react/index.js +4 -20
- package/dist/react/index.js.map +1 -1
- package/dist/react/queryClient.js +5 -8
- package/dist/react/queryClient.js.map +1 -1
- package/dist/react/types/contracts.types.js +1 -2
- package/dist/react/types/index.js +1 -17
- package/dist/react/types/index.js.map +1 -1
- package/dist/server/auth/index.js +2 -18
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/auth/kms.js +26 -35
- package/dist/server/auth/kms.js.map +1 -1
- package/dist/server/auth/middleware/index.js +12 -19
- package/dist/server/auth/middleware/index.js.map +1 -1
- package/dist/server/auth/privy.service.js +25 -31
- package/dist/server/auth/privy.service.js.map +1 -1
- package/dist/server/config/constants.d.ts +1 -1
- package/dist/server/config/constants.js +3 -6
- package/dist/server/config/constants.js.map +1 -1
- package/dist/server/config/dotenv.js +25 -28
- package/dist/server/config/dotenv.js.map +1 -1
- package/dist/server/config/index.js +6 -27
- package/dist/server/config/index.js.map +1 -1
- package/dist/server/config/redis.js +8 -15
- package/dist/server/config/redis.js.map +1 -1
- package/dist/server/config/urls.d.ts +12 -12
- package/dist/server/config/urls.js +3 -6
- package/dist/server/config/urls.js.map +1 -1
- package/dist/server/config/winston.js +5 -10
- package/dist/server/config/winston.js.map +1 -1
- package/dist/server/contracts/clients/index.js +1 -17
- package/dist/server/contracts/clients/index.js.map +1 -1
- package/dist/server/contracts/clients/ozRelayerService.js +30 -35
- package/dist/server/contracts/clients/ozRelayerService.js.map +1 -1
- package/dist/server/contracts/index.js +2 -18
- package/dist/server/contracts/index.js.map +1 -1
- package/dist/server/contracts/instances.js +11 -18
- package/dist/server/contracts/instances.js.map +1 -1
- package/dist/server/index.js +9 -25
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +1 -1
- package/dist/server/instrumentation.js +22 -25
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/liquidation-engine/index.js +3 -19
- package/dist/server/liquidation-engine/index.js.map +1 -1
- package/dist/server/liquidation-engine/redis.cache.manager/cache.keys.util.js +9 -14
- package/dist/server/liquidation-engine/redis.cache.manager/cache.keys.util.js.map +1 -1
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.js +36 -47
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.js.map +1 -1
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js +1 -2
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js.map +1 -1
- package/dist/server/liquidation-engine/types/index.js +1 -2
- package/dist/server/logging/coralogix.logger.js +15 -19
- package/dist/server/logging/coralogix.logger.js.map +1 -1
- package/dist/server/logging/index.js +1 -17
- package/dist/server/logging/index.js.map +1 -1
- package/dist/server/middleware/index.js +2 -18
- package/dist/server/middleware/index.js.map +1 -1
- package/dist/server/middleware/privy.middleware.js +10 -13
- package/dist/server/middleware/privy.middleware.js.map +1 -1
- package/dist/server/middleware/rateLimit.middleware.js +7 -11
- package/dist/server/middleware/rateLimit.middleware.js.map +1 -1
- package/dist/server/oracle/index.js +3 -19
- package/dist/server/oracle/index.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/cache.keys.utils.js +36 -52
- package/dist/server/oracle/redis-cache-manager/cache.keys.utils.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/channels.js +9 -14
- package/dist/server/oracle/redis-cache-manager/channels.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/game.cache.service.js +106 -140
- package/dist/server/oracle/redis-cache-manager/game.cache.service.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/index.js +4 -20
- package/dist/server/oracle/redis-cache-manager/index.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/market.cache.service.js +54 -73
- package/dist/server/oracle/redis-cache-manager/market.cache.service.js.map +1 -1
- package/dist/server/oracle/rmq-manager/base.queue.manager.js +11 -15
- package/dist/server/oracle/rmq-manager/base.queue.manager.js.map +1 -1
- package/dist/server/oracle/rmq-manager/index.js +2 -18
- package/dist/server/oracle/rmq-manager/index.js.map +1 -1
- package/dist/server/oracle/rmq-manager/queue.configs.js +10 -13
- package/dist/server/oracle/rmq-manager/queue.configs.js.map +1 -1
- package/dist/server/oracle/types/game/game.types.js +17 -20
- package/dist/server/oracle/types/game/game.types.js.map +1 -1
- package/dist/server/oracle/types/game/index.js +2 -18
- package/dist/server/oracle/types/game/index.js.map +1 -1
- package/dist/server/oracle/types/game/zod.game.types.js +17 -20
- package/dist/server/oracle/types/game/zod.game.types.js.map +1 -1
- package/dist/server/oracle/types/index.js +4 -20
- package/dist/server/oracle/types/index.js.map +1 -1
- package/dist/server/oracle/types/market/index.js +2 -18
- package/dist/server/oracle/types/market/index.js.map +1 -1
- package/dist/server/oracle/types/market/markets.types.js +11 -14
- package/dist/server/oracle/types/market/markets.types.js.map +1 -1
- package/dist/server/oracle/types/market/odds.types.js +1 -2
- package/dist/server/oracle/types/orderbook/index.js +1 -2
- package/dist/server/oracle/types/providers/index.js +4 -20
- package/dist/server/oracle/types/providers/index.js.map +1 -1
- package/dist/server/oracle/types/providers/lsports.types.js +3 -6
- package/dist/server/oracle/types/providers/lsports.types.js.map +1 -1
- package/dist/server/oracle/types/providers/optic.odds.types.js +111 -114
- package/dist/server/oracle/types/providers/optic.odds.types.js.map +1 -1
- package/dist/server/oracle/types/providers/providers.types.js +2 -5
- package/dist/server/oracle/types/providers/providers.types.js.map +1 -1
- package/dist/server/oracle/types/providers/rundown.types.js +6 -9
- package/dist/server/oracle/types/providers/rundown.types.js.map +1 -1
- package/dist/server/oracle/types/queue/index.js +2 -18
- package/dist/server/oracle/types/queue/index.js.map +1 -1
- package/dist/server/oracle/types/queue/queue.constant.js +5 -8
- package/dist/server/oracle/types/queue/queue.constant.js.map +1 -1
- package/dist/server/oracle/types/queue/queue.types.js +1 -2
- package/dist/server/test-relayers.js +1 -2
- package/dist/server/test-relayers.js.map +1 -1
- package/dist/server/utils/constants.js +1 -4
- package/dist/server/utils/constants.js.map +1 -1
- package/dist/server/utils/converters.js +9 -21
- package/dist/server/utils/converters.js.map +1 -1
- package/dist/server/utils/express.utils.js +1 -4
- package/dist/server/utils/express.utils.js.map +1 -1
- package/dist/server/utils/game.utils.js +9 -16
- package/dist/server/utils/game.utils.js.map +1 -1
- package/dist/server/utils/index.js +6 -22
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/tracing/trace.js +5 -10
- package/dist/server/utils/tracing/trace.js.map +1 -1
- package/dist/server/utils/tracing/wrap.module.with.tracing.js +11 -17
- package/dist/server/utils/tracing/wrap.module.with.tracing.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/hooks/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA"}
|
package/dist/react/index.js
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("../core"), exports);
|
|
18
|
-
__exportStar(require("./hooks"), exports);
|
|
19
|
-
__exportStar(require("./queryClient"), exports);
|
|
20
|
-
__exportStar(require("./types"), exports);
|
|
1
|
+
export * from "../core";
|
|
2
|
+
export * from "./hooks";
|
|
3
|
+
export * from "./queryClient";
|
|
4
|
+
export * from "./types";
|
|
21
5
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
5
|
-
exports.queryClient = new react_query_1.QueryClient({
|
|
6
|
-
mutationCache: new react_query_1.MutationCache({
|
|
1
|
+
import { MutationCache, QueryClient } from "@tanstack/react-query";
|
|
2
|
+
export const queryClient = new QueryClient({
|
|
3
|
+
mutationCache: new MutationCache({
|
|
7
4
|
onSuccess: async (_data, _variables, _context, mutation) => {
|
|
8
5
|
for (const queryKey of mutation.meta?.invalidatesQueries ?? [])
|
|
9
|
-
await
|
|
6
|
+
await queryClient.invalidateQueries({ queryKey });
|
|
10
7
|
},
|
|
11
8
|
}),
|
|
12
9
|
});
|
|
13
10
|
if (typeof window !== "undefined")
|
|
14
|
-
window.__TANSTACK_QUERY_CLIENT__ =
|
|
11
|
+
window.__TANSTACK_QUERY_CLIENT__ = queryClient;
|
|
15
12
|
//# sourceMappingURL=queryClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryClient.js","sourceRoot":"","sources":["../../src/react/queryClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queryClient.js","sourceRoot":"","sources":["../../src/react/queryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAY,MAAM,uBAAuB,CAAA;AAU5E,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;IACvC,aAAa,EAAE,IAAI,aAAa,CAAC;QAC7B,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACvD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE;gBAAE,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QACrH,CAAC;KACJ,CAAC;CACL,CAAC,CAAA;AAQF,IAAI,OAAO,MAAM,KAAK,WAAW;IAAE,MAAM,CAAC,yBAAyB,GAAG,WAAW,CAAA"}
|
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./contracts.types"), exports);
|
|
1
|
+
export * from "./contracts.types";
|
|
18
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./middleware"), exports);
|
|
18
|
-
__exportStar(require("./kms"), exports);
|
|
1
|
+
export * from "./middleware";
|
|
2
|
+
export * from "./kms";
|
|
19
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/auth/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,OAAO,CAAA"}
|
package/dist/server/auth/kms.js
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.verifyHmacSignature = exports.generateHmacSignature = exports.adminRevokeApiKey = exports.revokeKey = exports.validateApiKey = exports.generateApiKey = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* AWS KMS service integration for API key management
|
|
6
3
|
* This module provides functionality for generating and validating API keys using AWS KMS
|
|
7
4
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
import { GenerateMacCommand, KMSClient, VerifyCommand, VerifyMacCommand, } from "@aws-sdk/client-kms";
|
|
6
|
+
import { randomBytes } from "crypto";
|
|
7
|
+
import { kmsEnvConfig } from "../config/dotenv";
|
|
8
|
+
import { getRevokedApiKey } from "../oracle/redis-cache-manager/cache.keys.utils";
|
|
9
|
+
import { STSClient, AssumeRoleCommand } from "@aws-sdk/client-sts";
|
|
13
10
|
// Initialize KMS client with proper region
|
|
14
11
|
async function createKMSClientWithRole() {
|
|
15
|
-
const stsClient = new
|
|
16
|
-
const assumedRole = await stsClient.send(new
|
|
12
|
+
const stsClient = new STSClient({ region: "ap-south-1" });
|
|
13
|
+
const assumedRole = await stsClient.send(new AssumeRoleCommand({
|
|
17
14
|
RoleArn: "arn:aws:iam::905418397427:role/levr-v1-ecs-task-execution-dev",
|
|
18
15
|
RoleSessionName: "kms-session",
|
|
19
16
|
}));
|
|
@@ -25,7 +22,7 @@ async function createKMSClientWithRole() {
|
|
|
25
22
|
!assumedRole.Credentials.SessionToken) {
|
|
26
23
|
throw new Error("Incomplete credentials received from assumed role");
|
|
27
24
|
}
|
|
28
|
-
const client = new
|
|
25
|
+
const client = new KMSClient({
|
|
29
26
|
region: "ap-south-1",
|
|
30
27
|
credentials: {
|
|
31
28
|
accessKeyId: assumedRole.Credentials.AccessKeyId,
|
|
@@ -42,12 +39,12 @@ async function createKMSClientWithRole() {
|
|
|
42
39
|
* - encryptedKey: The encrypted version of the key to be stored in the database
|
|
43
40
|
* - keyId: The AWS KMS key ID used for encryption
|
|
44
41
|
*/
|
|
45
|
-
const generateApiKey = async (userId) => {
|
|
46
|
-
const keyId =
|
|
42
|
+
export const generateApiKey = async (userId) => {
|
|
43
|
+
const keyId = randomBytes(8).toString("hex"); // Unique key identifier
|
|
47
44
|
const payload = `${userId}:${keyId}`;
|
|
48
45
|
const client = await createKMSClientWithRole();
|
|
49
|
-
const { Mac } = await client.send(new
|
|
50
|
-
KeyId:
|
|
46
|
+
const { Mac } = await client.send(new GenerateMacCommand({
|
|
47
|
+
KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
|
|
51
48
|
Message: Buffer.from(payload),
|
|
52
49
|
MacAlgorithm: "HMAC_SHA_384",
|
|
53
50
|
}));
|
|
@@ -59,24 +56,23 @@ const generateApiKey = async (userId) => {
|
|
|
59
56
|
keyId,
|
|
60
57
|
};
|
|
61
58
|
};
|
|
62
|
-
exports.generateApiKey = generateApiKey;
|
|
63
59
|
/**
|
|
64
60
|
* Validates a provided API key by attempting to decrypt it using AWS KMS
|
|
65
61
|
* @param {string} providedKey - The API key to validate
|
|
66
62
|
* @returns {Promise<Object>} Object containing:
|
|
67
63
|
* - isValid: Boolean indicating whether the key is valid
|
|
68
64
|
*/
|
|
69
|
-
const validateApiKey = async (apiKey, redis) => {
|
|
65
|
+
export const validateApiKey = async (apiKey, redis) => {
|
|
70
66
|
const [payload, signature] = apiKey.split(".");
|
|
71
67
|
const [, keyId] = payload.split(":");
|
|
72
68
|
// 1. Check if key is revoked in Redis
|
|
73
|
-
const isRevoked = await redis.get(
|
|
69
|
+
const isRevoked = await redis.get(getRevokedApiKey(keyId)); // possibly save this to prisma too
|
|
74
70
|
if (isRevoked == "1") {
|
|
75
71
|
return { isValid: false, reason: "Key revoked" };
|
|
76
72
|
}
|
|
77
73
|
const client = await createKMSClientWithRole();
|
|
78
|
-
const { MacValid } = await client.send(new
|
|
79
|
-
KeyId:
|
|
74
|
+
const { MacValid } = await client.send(new VerifyMacCommand({
|
|
75
|
+
KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
|
|
80
76
|
Message: Buffer.from(payload),
|
|
81
77
|
Mac: Buffer.from(signature, "base64"),
|
|
82
78
|
MacAlgorithm: "HMAC_SHA_384",
|
|
@@ -89,8 +85,7 @@ const validateApiKey = async (apiKey, redis) => {
|
|
|
89
85
|
keyId,
|
|
90
86
|
};
|
|
91
87
|
};
|
|
92
|
-
|
|
93
|
-
const revokeKey = async (keyId, apiKey) => {
|
|
88
|
+
export const revokeKey = async (keyId, apiKey) => {
|
|
94
89
|
const [payload, signature] = apiKey.split(".");
|
|
95
90
|
const [, providedKeyId] = payload.split(":");
|
|
96
91
|
if (providedKeyId !== keyId) {
|
|
@@ -98,8 +93,8 @@ const revokeKey = async (keyId, apiKey) => {
|
|
|
98
93
|
}
|
|
99
94
|
const client = await createKMSClientWithRole();
|
|
100
95
|
// 2. Verify KMS signature before revocation
|
|
101
|
-
const { SignatureValid } = await client.send(new
|
|
102
|
-
KeyId:
|
|
96
|
+
const { SignatureValid } = await client.send(new VerifyCommand({
|
|
97
|
+
KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
|
|
103
98
|
Message: Buffer.from(payload),
|
|
104
99
|
Signature: Buffer.from(signature, "base64"),
|
|
105
100
|
SigningAlgorithm: "ECDSA_SHA_256",
|
|
@@ -108,19 +103,17 @@ const revokeKey = async (keyId, apiKey) => {
|
|
|
108
103
|
throw new Error("Invalid signature during revocation");
|
|
109
104
|
}
|
|
110
105
|
};
|
|
111
|
-
exports.revokeKey = revokeKey;
|
|
112
106
|
/**
|
|
113
107
|
* Admin function to revoke an API key by keyId.
|
|
114
108
|
* Marks the key as revoked in Redis.
|
|
115
109
|
*/
|
|
116
110
|
//TODO guard under admin permissions
|
|
117
|
-
const adminRevokeApiKey = async (keyId, redis) => {
|
|
111
|
+
export const adminRevokeApiKey = async (keyId, redis) => {
|
|
118
112
|
await redis.set(`revoked:${keyId}`, "1");
|
|
119
113
|
};
|
|
120
|
-
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
KeyId: dotenv_1.kmsEnvConfig.HMAC_KEY_ALIAS,
|
|
114
|
+
export const generateHmacSignature = async (payload) => {
|
|
115
|
+
const command = new GenerateMacCommand({
|
|
116
|
+
KeyId: kmsEnvConfig.HMAC_KEY_ALIAS,
|
|
124
117
|
Message: Buffer.from(payload),
|
|
125
118
|
MacAlgorithm: "HMAC_SHA_384",
|
|
126
119
|
});
|
|
@@ -131,14 +124,13 @@ const generateHmacSignature = async (payload) => {
|
|
|
131
124
|
}
|
|
132
125
|
return Buffer.from(response.Mac).toString("base64");
|
|
133
126
|
};
|
|
134
|
-
exports.generateHmacSignature = generateHmacSignature;
|
|
135
127
|
/**
|
|
136
128
|
* Verifies an HMAC signature
|
|
137
129
|
*/
|
|
138
|
-
const verifyHmacSignature = async (payload, signature) => {
|
|
130
|
+
export const verifyHmacSignature = async (payload, signature) => {
|
|
139
131
|
try {
|
|
140
|
-
const command = new
|
|
141
|
-
KeyId:
|
|
132
|
+
const command = new VerifyMacCommand({
|
|
133
|
+
KeyId: kmsEnvConfig.HMAC_KEY_ALIAS, //TODO: setup multiple signing keys, one for users, one for servers
|
|
142
134
|
Message: Buffer.from(payload),
|
|
143
135
|
Mac: Buffer.from(signature, "base64"),
|
|
144
136
|
MacAlgorithm: "HMAC_SHA_384",
|
|
@@ -152,5 +144,4 @@ const verifyHmacSignature = async (payload, signature) => {
|
|
|
152
144
|
return false;
|
|
153
145
|
}
|
|
154
146
|
};
|
|
155
|
-
exports.verifyHmacSignature = verifyHmacSignature;
|
|
156
147
|
//# sourceMappingURL=kms.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kms.js","sourceRoot":"","sources":["../../../src/server/auth/kms.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kms.js","sourceRoot":"","sources":["../../../src/server/auth/kms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.authMiddleWare = void 0;
|
|
7
|
-
const jose_1 = require("jose");
|
|
8
|
-
const dotenv_1 = require("../../config/dotenv");
|
|
9
|
-
const winston_1 = __importDefault(require("../../config/winston"));
|
|
10
|
-
const kms_1 = require("../kms");
|
|
1
|
+
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
2
|
+
import { kmsEnvConfig } from "../../config/dotenv";
|
|
3
|
+
import logger from "../../config/winston";
|
|
4
|
+
import { validateApiKey, verifyHmacSignature } from "../kms";
|
|
11
5
|
// TODO: instantiate this such that it doesn't break services that do not use kms config
|
|
12
|
-
const JWKS =
|
|
13
|
-
const authMiddleWare = (redis) => {
|
|
6
|
+
const JWKS = createRemoteJWKSet(new URL("https://example.com" /* kmsEnvConfig.CLOUDFLARE_JWK_URL */));
|
|
7
|
+
export const authMiddleWare = (redis) => {
|
|
14
8
|
return async (req, res, next) => {
|
|
15
9
|
const signature = req.headers["x-signature"]; // server to server
|
|
16
10
|
const apiKey = req.headers["x-api-key"]; // api key auth
|
|
@@ -28,22 +22,22 @@ const authMiddleWare = (redis) => {
|
|
|
28
22
|
}
|
|
29
23
|
if (jwt) {
|
|
30
24
|
try {
|
|
31
|
-
await
|
|
32
|
-
issuer:
|
|
33
|
-
audience:
|
|
25
|
+
await jwtVerify(jwt, JWKS, {
|
|
26
|
+
issuer: kmsEnvConfig.CLOUDFLARE_ISSUER,
|
|
27
|
+
audience: kmsEnvConfig.CLOUDFLARE_AUDIENCE,
|
|
34
28
|
algorithms: ["RS256"],
|
|
35
29
|
typ: "JWT",
|
|
36
30
|
});
|
|
37
31
|
next();
|
|
38
32
|
}
|
|
39
33
|
catch (err) {
|
|
40
|
-
|
|
34
|
+
logger.warn(`Invalid CF JWT from ${req.ip || ""}: ${err instanceof Error ? err.message : String(err)}`);
|
|
41
35
|
res.status(401).json({ message: "Invalid CF JWT" });
|
|
42
36
|
}
|
|
43
37
|
}
|
|
44
38
|
else if (signature) {
|
|
45
39
|
const payload = JSON.stringify(req.body);
|
|
46
|
-
const isValid = await
|
|
40
|
+
const isValid = await verifyHmacSignature(payload, signature);
|
|
47
41
|
if (isValid) {
|
|
48
42
|
next();
|
|
49
43
|
}
|
|
@@ -52,7 +46,7 @@ const authMiddleWare = (redis) => {
|
|
|
52
46
|
}
|
|
53
47
|
}
|
|
54
48
|
else if (apiKey) {
|
|
55
|
-
const data = await
|
|
49
|
+
const data = await validateApiKey(apiKey, redis);
|
|
56
50
|
if (data.isValid) {
|
|
57
51
|
next();
|
|
58
52
|
}
|
|
@@ -65,5 +59,4 @@ const authMiddleWare = (redis) => {
|
|
|
65
59
|
}
|
|
66
60
|
};
|
|
67
61
|
};
|
|
68
|
-
exports.authMiddleWare = authMiddleWare;
|
|
69
62
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/auth/middleware/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/auth/middleware/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,MAAM,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAS5D,wFAAwF;AACxF,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,qCAAqC,CAAC,CAAC,CAAA;AAErG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;IAC3C,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAuB,CAAA,CAAC,mBAAmB;QACtF,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAuB,CAAA,CAAC,eAAe;QAC7E,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAuB,CAAA,CAAC,WAAW;QAEpF,+DAA+D;QAC/D,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAA;QAC1E,CAAC;QAED,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC,CAAA;QACrF,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,gDAAgD;YAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,GAAG,EAAE,CAAC;YACN,IAAI,CAAC;gBACD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;oBACvB,MAAM,EAAE,YAAY,CAAC,iBAAiB;oBACtC,QAAQ,EAAE,YAAY,CAAC,mBAAmB;oBAC1C,UAAU,EAAE,CAAC,OAAO,CAAC;oBACrB,GAAG,EAAE,KAAK;iBACb,CAAC,CAAA;gBACF,IAAI,EAAE,CAAA;YACV,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACvG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;YACvD,CAAC;QACL,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YAC7D,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,CAAA;YACV,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA,CAAC,8DAA8D;YAClJ,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAChD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,EAAE,CAAA;YACV,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA,CAAC,2DAA2D;YACjJ,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,EAAE,CAAA;QACV,CAAC;IACL,CAAC,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -1,22 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
6
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const viem_1 = require("viem");
|
|
16
|
-
const zod_1 = __importDefault(require("zod"));
|
|
17
|
-
const core_1 = require("../../core");
|
|
18
|
-
const constants_1 = require("../../core/privy/constants");
|
|
19
|
-
const config_1 = require("../config");
|
|
7
|
+
import { PrivyClient } from "@privy-io/node";
|
|
8
|
+
import { Memoize } from "typescript-memoize";
|
|
9
|
+
import { getAddress } from "viem";
|
|
10
|
+
import z from "zod";
|
|
11
|
+
import { Config, PrivyRole } from "../../core";
|
|
12
|
+
import { PRIVY_ADMIN_APP_ID, PRIVY_ADMIN_VERIFICATION_KEY, PRIVY_APP_ID, PRIVY_VERIFICATION_KEY, } from "../../core/privy/constants";
|
|
13
|
+
import { logger } from "../config";
|
|
20
14
|
class PrivyService {
|
|
21
15
|
constructor() {
|
|
22
16
|
/**
|
|
@@ -32,7 +26,7 @@ class PrivyService {
|
|
|
32
26
|
if (account.wallet_client_type !== "privy")
|
|
33
27
|
break;
|
|
34
28
|
}
|
|
35
|
-
return address ?
|
|
29
|
+
return address ? getAddress(address) : undefined;
|
|
36
30
|
};
|
|
37
31
|
/**
|
|
38
32
|
* Verifies that an Ethereum address belongs to a user by checking their linked accounts.
|
|
@@ -51,40 +45,40 @@ class PrivyService {
|
|
|
51
45
|
await privyClient.utils().auth().verifyAuthToken(privyToken);
|
|
52
46
|
const user = await privyClient.users().get({ id_token: privyIdToken });
|
|
53
47
|
if (ethAddress && !this.verifyUserOwnsAddress(user, ethAddress)) {
|
|
54
|
-
|
|
48
|
+
logger.warn(`User ${user.id} attempted to authenticate with an unlinked address ${ethAddress}.`);
|
|
55
49
|
return undefined;
|
|
56
50
|
}
|
|
57
51
|
return user;
|
|
58
52
|
}
|
|
59
53
|
catch (error) {
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
logger.warn(`Privy authentication failed with error ${error.message}.`);
|
|
55
|
+
logger.error(error);
|
|
62
56
|
}
|
|
63
57
|
}
|
|
64
58
|
getPrivyClients() {
|
|
65
|
-
const schema =
|
|
66
|
-
PRIVY_APP_SECRET:
|
|
67
|
-
PRIVY_ADMIN_APP_SECRET:
|
|
59
|
+
const schema = z.object({
|
|
60
|
+
PRIVY_APP_SECRET: z.string().min(1),
|
|
61
|
+
PRIVY_ADMIN_APP_SECRET: z.string().min(1),
|
|
68
62
|
});
|
|
69
|
-
const { PRIVY_APP_SECRET, PRIVY_ADMIN_APP_SECRET } =
|
|
70
|
-
const privyClient = new
|
|
71
|
-
appId:
|
|
63
|
+
const { PRIVY_APP_SECRET, PRIVY_ADMIN_APP_SECRET } = Config.init(schema);
|
|
64
|
+
const privyClient = new PrivyClient({
|
|
65
|
+
appId: PRIVY_APP_ID,
|
|
72
66
|
appSecret: PRIVY_APP_SECRET,
|
|
73
|
-
jwtVerificationKey:
|
|
67
|
+
jwtVerificationKey: PRIVY_VERIFICATION_KEY,
|
|
74
68
|
});
|
|
75
|
-
const privyAdminClient = new
|
|
76
|
-
appId:
|
|
69
|
+
const privyAdminClient = new PrivyClient({
|
|
70
|
+
appId: PRIVY_ADMIN_APP_ID,
|
|
77
71
|
appSecret: PRIVY_ADMIN_APP_SECRET,
|
|
78
|
-
jwtVerificationKey:
|
|
72
|
+
jwtVerificationKey: PRIVY_ADMIN_VERIFICATION_KEY,
|
|
79
73
|
});
|
|
80
74
|
return {
|
|
81
|
-
[
|
|
82
|
-
[
|
|
75
|
+
[PrivyRole.User]: privyClient,
|
|
76
|
+
[PrivyRole.Admin]: privyAdminClient,
|
|
83
77
|
};
|
|
84
78
|
}
|
|
85
79
|
}
|
|
86
80
|
__decorate([
|
|
87
|
-
|
|
81
|
+
Memoize()
|
|
88
82
|
], PrivyService.prototype, "getPrivyClients", null);
|
|
89
|
-
|
|
83
|
+
export const privyService = new PrivyService();
|
|
90
84
|
//# sourceMappingURL=privy.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"privy.service.js","sourceRoot":"","sources":["../../../src/server/auth/privy.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"privy.service.js","sourceRoot":"","sources":["../../../src/server/auth/privy.service.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAW,UAAU,EAAE,MAAM,MAAM,CAAA;AAC1C,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EACH,kBAAkB,EAClB,4BAA4B,EAC5B,YAAY,EACZ,sBAAsB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AASlC,MAAM,YAAY;IAAlB;QAsBI;;;WAGG;QACH,sBAAiB,GAAG,CAAC,IAAe,EAAuB,EAAE;YACzD,IAAI,OAAO,GAAwB,SAAS,CAAA;YAE5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU;oBAAE,SAAQ;gBAC5E,OAAO,GAAG,OAAO,CAAC,OAAkB,CAAA;gBACpC,IAAI,OAAO,CAAC,kBAAkB,KAAK,OAAO;oBAAE,MAAK;YACrD,CAAC;YAED,OAAO,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACpD,CAAC,CAAA;QAED;;WAEG;QACK,0BAAqB,GAAG,CAAC,IAAe,EAAE,eAAuB,EAAW,EAAE;YAClF,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC5B,CAAC,OAAO,EAAE,EAAE,CACR,OAAO,CAAC,IAAI,KAAK,QAAQ;gBACzB,OAAO,CAAC,UAAU,KAAK,UAAU;gBACjC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CACvE,CAAA;QACL,CAAC,CAAA;IA2BL,CAAC;IA1EG,KAAK,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAe;QAC1E,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAA;QAElD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAA;QAEhD,IAAI,CAAC;YACD,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;YAC5D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAA;YAEtE,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,uDAAuD,UAAU,GAAG,CAAC,CAAA;gBAChG,OAAO,SAAS,CAAA;YACpB,CAAC;YAED,OAAO,IAAI,CAAA;QACf,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,0CAA0C,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;YACvE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;IACL,CAAC;IA+BO,eAAe;QACnB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5C,CAAC,CAAA;QACF,MAAM,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAExE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;YAChC,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,gBAAgB;YAC3B,kBAAkB,EAAE,sBAAsB;SAC7C,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAG,IAAI,WAAW,CAAC;YACrC,KAAK,EAAE,kBAAkB;YACzB,SAAS,EAAE,sBAAsB;YACjC,kBAAkB,EAAE,4BAA4B;SACnD,CAAC,CAAA;QAEF,OAAO;YACH,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,WAAW;YAC7B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,gBAAgB;SACtC,CAAA;IACL,CAAC;CACJ;AAxBW;IADP,OAAO,EAAE;mDAwBT;AAGL,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const supportedChainIds: import("
|
|
1
|
+
export declare const supportedChainIds: import("..").LevrChain[];
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const core_1 = require("../../core");
|
|
5
|
-
const dotenv_1 = require("./dotenv");
|
|
6
|
-
exports.supportedChainIds = (0, core_1.getSupportedChainIds)(dotenv_1.levrSharedConfig.LEVR_ENV);
|
|
1
|
+
import { getSupportedChainIds } from "../../core";
|
|
2
|
+
import { levrSharedConfig } from "./dotenv";
|
|
3
|
+
export const supportedChainIds = getSupportedChainIds(levrSharedConfig.LEVR_ENV);
|
|
7
4
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/server/config/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/server/config/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA"}
|
|
@@ -1,38 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const core_1 = require("../../core");
|
|
5
|
-
require("dotenv/config");
|
|
6
|
-
const zod_1 = require("zod");
|
|
1
|
+
import { commaSeparatedUrlsSchema, Config, LevrEnv } from "../../core";
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { z } from "zod";
|
|
7
4
|
///@dev example of using the Config class
|
|
8
|
-
|
|
9
|
-
OTEL_EXPORTER_OTLP_HEADERS:
|
|
10
|
-
OTEL_EXPORTER_OTLP_ENDPOINT:
|
|
11
|
-
OTEL_SERVICE_NAME:
|
|
12
|
-
OTEL_SERVICE_VERSION:
|
|
13
|
-
LEVR_ENV:
|
|
5
|
+
export const opentelemetrySchema = z.object({
|
|
6
|
+
OTEL_EXPORTER_OTLP_HEADERS: z.string().min(1),
|
|
7
|
+
OTEL_EXPORTER_OTLP_ENDPOINT: z.string().min(1),
|
|
8
|
+
OTEL_SERVICE_NAME: z.string().min(1),
|
|
9
|
+
OTEL_SERVICE_VERSION: z.string().min(1),
|
|
10
|
+
LEVR_ENV: z.enum(LevrEnv),
|
|
14
11
|
});
|
|
15
|
-
const levrSharedSchema =
|
|
16
|
-
LEVR_ENV:
|
|
12
|
+
const levrSharedSchema = z.object({
|
|
13
|
+
LEVR_ENV: z.enum(LevrEnv),
|
|
17
14
|
});
|
|
18
|
-
|
|
19
|
-
HMAC_KEY_ALIAS:
|
|
20
|
-
CLOUDFLARE_JWK_URL:
|
|
21
|
-
CLOUDFLARE_ISSUER:
|
|
22
|
-
CLOUDFLARE_AUDIENCE:
|
|
15
|
+
export const kmsSchema = z.object({
|
|
16
|
+
HMAC_KEY_ALIAS: z.string().min(1),
|
|
17
|
+
CLOUDFLARE_JWK_URL: z.string().min(1),
|
|
18
|
+
CLOUDFLARE_ISSUER: z.string().min(1),
|
|
19
|
+
CLOUDFLARE_AUDIENCE: z.string().min(1),
|
|
23
20
|
});
|
|
24
|
-
|
|
25
|
-
MONGO_URI:
|
|
21
|
+
export const mongoSchema = z.object({
|
|
22
|
+
MONGO_URI: z.url("MONGO_URI must be a valid URI"),
|
|
26
23
|
});
|
|
27
|
-
|
|
28
|
-
REDIS_URL:
|
|
29
|
-
REDIS_REPLICA_ENDPOINTS:
|
|
24
|
+
export const redisSchema = z.object({
|
|
25
|
+
REDIS_URL: z.url("REDIS_URL must be a valid URI"),
|
|
26
|
+
REDIS_REPLICA_ENDPOINTS: commaSeparatedUrlsSchema,
|
|
30
27
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
RELAYER_ACCESS_TOKEN:
|
|
28
|
+
export const levrSharedConfig = Config.init(levrSharedSchema);
|
|
29
|
+
export const relayerSchema = z.object({
|
|
30
|
+
RELAYER_ACCESS_TOKEN: z.uuid(),
|
|
34
31
|
});
|
|
35
32
|
// TODO
|
|
36
33
|
//!@dev calling init here breaks services which do not use kms config. move init call to service.
|
|
37
|
-
|
|
34
|
+
export const kmsEnvConfig = {}; // Config.init(kmsSchema)
|
|
38
35
|
//# sourceMappingURL=dotenv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../../../src/server/config/dotenv.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../../../src/server/config/dotenv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,yCAAyC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;CAC5B,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;CAC5B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,+BAA+B,CAAC;CACpD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,+BAA+B,CAAC;IACjD,uBAAuB,EAAE,wBAAwB;CACpD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,oBAAoB,EAAE,CAAC,CAAC,IAAI,EAAE;CACjC,CAAC,CAAA;AAEF,OAAO;AACP,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,EAA+B,CAAA,CAAC,yBAAyB"}
|