@lyxa.ai/core 1.0.2 → 1.0.4

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/index.js CHANGED
@@ -15,6 +15,9 @@ const EnvironmentConfigurationType_1 = require("./libraries/configuration/types/
15
15
  const logger_1 = require("./libraries/logger");
16
16
  const redis_1 = require("./libraries/redis");
17
17
  const mongo_1 = require("./libraries/mongo");
18
+ const secrets_1 = require("./libraries/secrets");
19
+ const dispatcher_1 = require("./libraries/dispatcher");
20
+ const twilio_1 = require("./libraries/twilio");
18
21
  var EnvironmentConfigurationType_2 = require("./libraries/configuration/types/EnvironmentConfigurationType");
19
22
  Object.defineProperty(exports, "EnvironmentConfigurationType", { enumerable: true, get: function () { return EnvironmentConfigurationType_2.EnvironmentConfigurationType; } });
20
23
  var mongo_2 = require("./libraries/mongo");
@@ -24,6 +27,7 @@ Object.defineProperty(exports, "createGlobalDiscriminatorModel", { enumerable: t
24
27
  async function bootstrapCore(options) {
25
28
  try {
26
29
  await registerLibraries(options);
30
+ getLibraries().getLogger().logger.info("Successfully bootstrapped lyxa-core.");
27
31
  const gracefulShutdown = async () => {
28
32
  getLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');
29
33
  };
@@ -33,6 +37,7 @@ async function bootstrapCore(options) {
33
37
  getLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);
34
38
  gracefulShutdown();
35
39
  });
40
+ console.log("Created hooks.");
36
41
  }
37
42
  catch (e) {
38
43
  console.error(e);
@@ -43,6 +48,8 @@ async function registerLibraries(options) {
43
48
  typedi_1.Container.set(configuration_1.ConfigurationService, configurationInstance);
44
49
  const redisInstance = new redis_1.RedisService(configurationInstance.options.redisURL);
45
50
  typedi_1.Container.set(redis_1.RedisService, redisInstance);
51
+ const secretInstance = new secrets_1.SecretManagerService(configurationInstance, redisInstance);
52
+ typedi_1.Container.set(secrets_1.SecretManagerService, secretInstance);
46
53
  const mongoUrl = await getLibraries().getSecretsService()
47
54
  .getKey("MONGO_URL");
48
55
  await mongoose_1.default.connect(mongoUrl, { dbName: `lyxa-${options.environment}-${options.tenet}` });
@@ -50,8 +57,18 @@ async function registerLibraries(options) {
50
57
  await (0, mongo_1.initGlobalConnection)(mongoUrl, options.environment);
51
58
  const loggerInstance = new logger_1.LyxaLogger(options.instanceType, mongoUrl);
52
59
  typedi_1.Container.set(logger_1.LyxaLogger, loggerInstance);
60
+ const microserviceDispatcherInstance = new dispatcher_1.MicroServiceDispatcher(secretInstance);
61
+ typedi_1.Container.set(dispatcher_1.MicroServiceDispatcher, microserviceDispatcherInstance);
62
+ const twilioServiceInstance = new twilio_1.TwilioService();
63
+ typedi_1.Container.set(twilio_1.TwilioService, twilioServiceInstance);
64
+ console.log("Initialized everything");
53
65
  }
54
66
  function getLibraries() {
55
67
  return typedi_1.Container.get(libraries_1.LibraryManager);
56
68
  }
69
+ bootstrapCore({
70
+ environment: EnvironmentConfigurationType_1.EnvironmentConfigurationType.DEV,
71
+ instanceType: "catalogue",
72
+ tenet: "lb"
73
+ });
57
74
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;;;;;AAiBA,sCAiBC;AAED,8CAsCC;AAED,oCAEC;AA9ED,2CAA2C;AAC3C,mCAAiC;AACjC,wDAAgC;AAChC,6DAAqF;AACrF,+GAA0G;AAC1G,+CAA8C;AAC9C,6CAA+C;AAC/C,6CAAuD;AAGvD,6GAA4G;AAAnG,4IAAA,4BAA4B,OAAA;AACrC,2CAI2B;AAHvB,6GAAA,oBAAoB,OAAA;AACpB,0GAAA,iBAAiB,OAAA;AACjB,uHAAA,8BAA8B,OAAA;AAG3B,KAAK,UAAU,aAAa,CAAC,OAA8B;IAC9D,IAAI,CAAC;QACD,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAChC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpG,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACvC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;YACpC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YACrF,gBAAgB,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,OAA8B;IAElE,MAAM,qBAAqB,GAAG,IAAI,oCAAoB,CAAC,OAAO,CAAC,CAAC;IAChE,kBAAS,CAAC,GAAG,CAAC,oCAAoB,EAAE,qBAAqB,CAAC,CAAC;IAG3D,MAAM,aAAa,GAAG,IAAI,oBAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;IAChF,kBAAS,CAAC,GAAG,CAAC,oBAAY,EAAE,aAAa,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC,iBAAiB,EAAE;SACpD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEzB,MAAM,kBAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,OAAQ,CAAC,WAAW,IAAI,OAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChG,kBAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,2DAA4B,CAAC,GAAG,CAAC,CAAC;IAExH,MAAM,IAAA,4BAAoB,EAAC,QAAS,EAAE,OAAQ,CAAC,WAAW,CAAC,CAAC;IAE5D,MAAM,cAAc,GAAG,IAAI,mBAAU,CAAC,OAAQ,CAAC,YAAa,EAAE,QAAS,CAAC,CAAC;IACzE,kBAAS,CAAC,GAAG,CAAC,mBAAU,EAAE,cAAc,CAAC,CAAC;AAoB9C,CAAC;AAED,SAAgB,YAAY;IACxB,OAAO,kBAAS,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAA;AACxC,CAAC","sourcesContent":["import {LibraryManager} from \"./libraries\";\r\nimport {Container} from \"typedi\";\r\nimport mongoose from \"mongoose\";\r\nimport {ConfigurationOptions, ConfigurationService} from \"./libraries/configuration\";\r\nimport {EnvironmentConfigurationType} from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nimport {LyxaLogger} from \"./libraries/logger\";\r\nimport {RedisService} from \"./libraries/redis\";\r\nimport {initGlobalConnection} from \"./libraries/mongo\";\r\n\r\nexport { ConfigurationOptions } from \"./libraries/configuration\";\r\nexport { EnvironmentConfigurationType } from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nexport {\r\n initGlobalConnection,\r\n createGlobalModel,\r\n createGlobalDiscriminatorModel\r\n} from './libraries/mongo';\r\n\r\nexport async function bootstrapCore(options?: ConfigurationOptions) {\r\n try {\r\n await registerLibraries(options);\r\n\r\n const gracefulShutdown = async () => {\r\n getLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\r\n };\r\n\r\n process.on('SIGTERM', gracefulShutdown);\r\n process.on('SIGINT', gracefulShutdown);\r\n process.on('uncaughtException', (err) => {\r\n getLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\r\n gracefulShutdown();\r\n });\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport async function registerLibraries(options?: ConfigurationOptions) {\r\n // Setup configuration.\r\n const configurationInstance = new ConfigurationService(options);\r\n Container.set(ConfigurationService, configurationInstance);\r\n\r\n // Setup redis.\r\n const redisInstance = new RedisService(configurationInstance.options.redisURL!);\r\n Container.set(RedisService, redisInstance);\r\n\r\n const mongoUrl = await getLibraries().getSecretsService()\r\n .getKey(\"MONGO_URL\");\r\n\r\n await mongoose.connect(mongoUrl!, { dbName: `lyxa-${options!.environment}-${options!.tenet}` });\r\n mongoose.set('debug', getLibraries().getConfigurationService().options.environment == EnvironmentConfigurationType.DEV);\r\n\r\n await initGlobalConnection(mongoUrl!, options!.environment);\r\n\r\n const loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\r\n Container.set(LyxaLogger, loggerInstance);\r\n\r\n /*\r\n await initEventBus(\"amqp://localhost\");\r\n const allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\r\n\r\n const instantiatedServices = new Map<Function, any>();\r\n\r\n for (const { eventId, targetConstructor, methodName } of allSubscriptions) {\r\n let instance = instantiatedServices.get(targetConstructor);\r\n if (!instance) {\r\n instance = Container.get(targetConstructor as any);\r\n instantiatedServices.set(targetConstructor, instance);\r\n }\r\n\r\n await subscribeToEvent(eventId, async (payload) => {\r\n return instance[methodName](payload);\r\n });\r\n }\r\n */\r\n}\r\n\r\nexport function getLibraries(): LibraryManager {\r\n return Container.get(LibraryManager)\r\n}\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;;;;;AAoBA,sCAqBC;AAED,8CAiDC;AAED,oCAEC;AAhGD,2CAA2C;AAC3C,mCAAiC;AACjC,wDAAgC;AAChC,6DAAqF;AACrF,+GAA0G;AAC1G,+CAA8C;AAC9C,6CAA+C;AAC/C,6CAAuD;AACvD,iDAAyD;AACzD,uDAA8D;AAC9D,+CAAiD;AAGjD,6GAA4G;AAAnG,4IAAA,4BAA4B,OAAA;AACrC,2CAI2B;AAHvB,6GAAA,oBAAoB,OAAA;AACpB,0GAAA,iBAAiB,OAAA;AACjB,uHAAA,8BAA8B,OAAA;AAG3B,KAAK,UAAU,aAAa,CAAC,OAA8B;IAC9D,IAAI,CAAC;QACD,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEjC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAE/E,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAChC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpG,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACvC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;YACpC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YACrF,gBAAgB,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,OAA8B;IAElE,MAAM,qBAAqB,GAAG,IAAI,oCAAoB,CAAC,OAAO,CAAC,CAAC;IAChE,kBAAS,CAAC,GAAG,CAAC,oCAAoB,EAAE,qBAAqB,CAAC,CAAC;IAG3D,MAAM,aAAa,GAAG,IAAI,oBAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;IAChF,kBAAS,CAAC,GAAG,CAAC,oBAAY,EAAE,aAAa,CAAC,CAAC;IAE3C,MAAM,cAAc,GAAG,IAAI,8BAAoB,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;IACtF,kBAAS,CAAC,GAAG,CAAC,8BAAoB,EAAE,cAAc,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC,iBAAiB,EAAE;SACpD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEzB,MAAM,kBAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,OAAQ,CAAC,WAAW,IAAI,OAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChG,kBAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,2DAA4B,CAAC,GAAG,CAAC,CAAC;IAExH,MAAM,IAAA,4BAAoB,EAAC,QAAS,EAAE,OAAQ,CAAC,WAAW,CAAC,CAAC;IAE5D,MAAM,cAAc,GAAG,IAAI,mBAAU,CAAC,OAAQ,CAAC,YAAa,EAAE,QAAS,CAAC,CAAC;IACzE,kBAAS,CAAC,GAAG,CAAC,mBAAU,EAAE,cAAc,CAAC,CAAC;IAE1C,MAAM,8BAA8B,GAAG,IAAI,mCAAsB,CAAC,cAAc,CAAC,CAAC;IAClF,kBAAS,CAAC,GAAG,CAAC,mCAAsB,EAAE,8BAA8B,CAAC,CAAC;IAEtE,MAAM,qBAAqB,GAAG,IAAI,sBAAa,EAAE,CAAC;IAClD,kBAAS,CAAC,GAAG,CAAC,sBAAa,EAAE,qBAAqB,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAoB1C,CAAC;AAED,SAAgB,YAAY;IACxB,OAAO,kBAAS,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAA;AACxC,CAAC;AAED,aAAa,CAAC;IACV,WAAW,EAAE,2DAA4B,CAAC,GAAG;IAC7C,YAAY,EAAE,WAAW;IACzB,KAAK,EAAE,IAAI;CACd,CAAC,CAAA","sourcesContent":["import {LibraryManager} from \"./libraries\";\r\nimport {Container} from \"typedi\";\r\nimport mongoose from \"mongoose\";\r\nimport {ConfigurationOptions, ConfigurationService} from \"./libraries/configuration\";\r\nimport {EnvironmentConfigurationType} from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nimport {LyxaLogger} from \"./libraries/logger\";\r\nimport {RedisService} from \"./libraries/redis\";\r\nimport {initGlobalConnection} from \"./libraries/mongo\";\r\nimport {SecretManagerService} from \"./libraries/secrets\";\r\nimport {MicroServiceDispatcher} from \"./libraries/dispatcher\";\r\nimport {TwilioService} from \"./libraries/twilio\";\r\n\r\nexport { ConfigurationOptions } from \"./libraries/configuration\";\r\nexport { EnvironmentConfigurationType } from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nexport {\r\n initGlobalConnection,\r\n createGlobalModel,\r\n createGlobalDiscriminatorModel\r\n} from './libraries/mongo';\r\n\r\nexport async function bootstrapCore(options?: ConfigurationOptions) {\r\n try {\r\n await registerLibraries(options);\r\n\r\n getLibraries().getLogger().logger.info(\"Successfully bootstrapped lyxa-core.\");\r\n\r\n const gracefulShutdown = async () => {\r\n getLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\r\n };\r\n\r\n process.on('SIGTERM', gracefulShutdown);\r\n process.on('SIGINT', gracefulShutdown);\r\n process.on('uncaughtException', (err) => {\r\n getLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\r\n gracefulShutdown();\r\n });\r\n\r\n console.log(\"Created hooks.\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport async function registerLibraries(options?: ConfigurationOptions) {\r\n // Setup configuration.\r\n const configurationInstance = new ConfigurationService(options);\r\n Container.set(ConfigurationService, configurationInstance);\r\n\r\n // Setup redis.\r\n const redisInstance = new RedisService(configurationInstance.options.redisURL!);\r\n Container.set(RedisService, redisInstance);\r\n\r\n const secretInstance = new SecretManagerService(configurationInstance, redisInstance);\r\n Container.set(SecretManagerService, secretInstance);\r\n\r\n const mongoUrl = await getLibraries().getSecretsService()\r\n .getKey(\"MONGO_URL\");\r\n\r\n await mongoose.connect(mongoUrl!, { dbName: `lyxa-${options!.environment}-${options!.tenet}` });\r\n mongoose.set('debug', getLibraries().getConfigurationService().options.environment == EnvironmentConfigurationType.DEV);\r\n\r\n await initGlobalConnection(mongoUrl!, options!.environment);\r\n\r\n const loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\r\n Container.set(LyxaLogger, loggerInstance);\r\n\r\n const microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\r\n Container.set(MicroServiceDispatcher, microserviceDispatcherInstance);\r\n\r\n const twilioServiceInstance = new TwilioService();\r\n Container.set(TwilioService, twilioServiceInstance);\r\n\r\n console.log(\"Initialized everything\");\r\n\r\n /*\r\n await initEventBus(\"amqp://localhost\");\r\n const allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\r\n\r\n const instantiatedServices = new Map<Function, any>();\r\n\r\n for (const { eventId, targetConstructor, methodName } of allSubscriptions) {\r\n let instance = instantiatedServices.get(targetConstructor);\r\n if (!instance) {\r\n instance = Container.get(targetConstructor as any);\r\n instantiatedServices.set(targetConstructor, instance);\r\n }\r\n\r\n await subscribeToEvent(eventId, async (payload) => {\r\n return instance[methodName](payload);\r\n });\r\n }\r\n */\r\n}\r\n\r\nexport function getLibraries(): LibraryManager {\r\n return Container.get(LibraryManager)\r\n}\r\n\r\nbootstrapCore({\r\n environment: EnvironmentConfigurationType.DEV,\r\n instanceType: \"catalogue\",\r\n tenet: \"lb\"\r\n})\r\n"]}
@@ -0,0 +1,13 @@
1
+ import { SignOptions } from "jsonwebtoken";
2
+ import { EntityContext } from "../trpc/context";
3
+ export declare enum AuthEntityType {
4
+ USER = "USER",
5
+ SHOP = "SHOP",
6
+ DELIVERY_BOY = "DELIVERY_BOY",
7
+ CRM = "CRM"
8
+ }
9
+ export declare function signToken(entity: {
10
+ id: string;
11
+ type: AuthEntityType;
12
+ }, options?: SignOptions): Promise<string>;
13
+ export declare function verifyToken(entityTypes: AuthEntityType[], token: string): Promise<EntityContext | undefined>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AuthEntityType = void 0;
7
+ exports.signToken = signToken;
8
+ exports.verifyToken = verifyToken;
9
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
10
+ const index_1 = require("../../index");
11
+ var AuthEntityType;
12
+ (function (AuthEntityType) {
13
+ AuthEntityType["USER"] = "USER";
14
+ AuthEntityType["SHOP"] = "SHOP";
15
+ AuthEntityType["DELIVERY_BOY"] = "DELIVERY_BOY";
16
+ AuthEntityType["CRM"] = "CRM";
17
+ })(AuthEntityType || (exports.AuthEntityType = AuthEntityType = {}));
18
+ async function signToken(entity, options) {
19
+ if (!entity?.type) {
20
+ throw new Error('Entity type is required to sign token');
21
+ }
22
+ const secret = await (0, index_1.getLibraries)()
23
+ .getSecretsService()
24
+ .getKey(`${entity.type.toUpperCase()}_JWT_TOKEN`);
25
+ if (!secret) {
26
+ throw new Error(`No secret found for entity type: ${entity.type}`);
27
+ }
28
+ const payload = {
29
+ id: entity.id,
30
+ type: entity.type,
31
+ };
32
+ return jsonwebtoken_1.default.sign(payload, secret, options);
33
+ }
34
+ async function verifyToken(entityTypes, token) {
35
+ for (const entityType of entityTypes) {
36
+ const secret = await (0, index_1.getLibraries)().getSecretsService().getKey(entityType.toUpperCase() + "_JWT_TOKEN");
37
+ try {
38
+ return jsonwebtoken_1.default.verify(token, secret);
39
+ }
40
+ catch (err) {
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/auth/index.ts"],"names":[],"mappings":";;;;;;AAeA,8BAsBC;AAED,kCASC;AAhDD,gEAA8C;AAC9C,uCAAyC;AAGzC,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,+BAAa,CAAA;IACb,+BAAa,CAAA;IACb,+CAA6B,CAAA;IAC7B,6BAAW,CAAA;AACf,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAMM,KAAK,UAAU,SAAS,CAC3B,MAA4C,EAC5C,OAAqB;IAErB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAY,GAAE;SAC9B,iBAAiB,EAAE;SACnB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG;QACZ,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;KACpB,CAAC;IAEF,OAAO,sBAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,WAA6B,EAAE,KAAa;IAC1E,KAAI,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAY,GAAE,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;QAExG,IAAI,CAAC;YACD,OAAO,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAO,CAAkB,CAAC;QACvD,CAAC;QAAC,OAAM,GAAG,EAAE,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC","sourcesContent":["import jwt, {SignOptions} from \"jsonwebtoken\";\r\nimport {getLibraries} from \"../../index\";\r\nimport {EntityContext} from \"../trpc/context\";\r\n\r\nexport enum AuthEntityType {\r\n USER = \"USER\",\r\n SHOP = \"SHOP\",\r\n DELIVERY_BOY = \"DELIVERY_BOY\",\r\n CRM = \"CRM\"\r\n}\r\n\r\n/**\r\n * Sign a JWT for the given entity (id + type).\r\n * It will fetch the secret for that entity type and create a token.\r\n */\r\nexport async function signToken(\r\n entity: { id: string; type: AuthEntityType },\r\n options?: SignOptions\r\n): Promise<string> {\r\n if (!entity?.type) {\r\n throw new Error('Entity type is required to sign token');\r\n }\r\n\r\n const secret = await getLibraries()\r\n .getSecretsService()\r\n .getKey(`${entity.type.toUpperCase()}_JWT_TOKEN`);\r\n\r\n if (!secret) {\r\n throw new Error(`No secret found for entity type: ${entity.type}`);\r\n }\r\n\r\n const payload = {\r\n id: entity.id,\r\n type: entity.type,\r\n };\r\n\r\n return jwt.sign(payload, secret, options);\r\n}\r\n\r\nexport async function verifyToken(entityTypes: AuthEntityType[], token: string): Promise<EntityContext | undefined> {\r\n for(const entityType of entityTypes) {\r\n const secret = await getLibraries().getSecretsService().getKey(entityType.toUpperCase() + \"_JWT_TOKEN\");\r\n\r\n try {\r\n return jwt.verify(token, secret!) as EntityContext;\r\n } catch(err) {\r\n }\r\n }\r\n}\r\n"]}
@@ -2,6 +2,6 @@ import { AnyRouter } from "@trpc/server";
2
2
  import { SecretManagerService } from "../secrets";
3
3
  export declare class MicroServiceDispatcher {
4
4
  private _secretService;
5
- MicroServiceDispatcher(secretService: SecretManagerService): void;
5
+ constructor(secretService: SecretManagerService);
6
6
  getMicroService<T extends AnyRouter>(serviceName: string): Promise<import("@trpc/client").CreateTRPCProxyClient<T>>;
7
7
  }
@@ -5,13 +5,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
12
  exports.MicroServiceDispatcher = void 0;
10
13
  const typedi_1 = require("typedi");
11
14
  const client_1 = require("@trpc/client");
15
+ const secrets_1 = require("../secrets");
12
16
  let MicroServiceDispatcher = class MicroServiceDispatcher {
13
17
  _secretService;
14
- MicroServiceDispatcher(secretService) {
18
+ constructor(secretService) {
15
19
  this._secretService = secretService;
16
20
  }
17
21
  async getMicroService(serviceName) {
@@ -30,6 +34,7 @@ let MicroServiceDispatcher = class MicroServiceDispatcher {
30
34
  };
31
35
  exports.MicroServiceDispatcher = MicroServiceDispatcher;
32
36
  exports.MicroServiceDispatcher = MicroServiceDispatcher = __decorate([
33
- (0, typedi_1.Service)()
37
+ (0, typedi_1.Service)(),
38
+ __metadata("design:paramtypes", [secrets_1.SecretManagerService])
34
39
  ], MicroServiceDispatcher);
35
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/dispatcher/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mCAA+B;AAC/B,yCAAkE;AAK3D,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACvB,cAAc,CAAwB;IAEvC,sBAAsB,CAAC,aAAmC;QAC7D,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAsB,WAAmB;QACjE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,2BAA2B,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC;QAE9H,IAAG,CAAC,aAAa,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAChF,CAAC;QAGD,OAAO,IAAA,8BAAqB,EAAI;YAC5B,KAAK,EAAE;gBACH,IAAA,sBAAa,EAAC;oBACV,GAAG,EAAE,aAAa;iBACrB,CAAC;aACL;SACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAvBY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,gBAAO,GAAE;GACG,sBAAsB,CAuBlC","sourcesContent":["import {Service} from \"typedi\";\r\nimport {createTRPCProxyClient, httpBatchLink} from \"@trpc/client\";\r\nimport {AnyRouter} from \"@trpc/server\";\r\nimport {SecretManagerService} from \"../secrets\";\r\n\r\n@Service()\r\nexport class MicroServiceDispatcher {\r\n private _secretService!: SecretManagerService;\r\n\r\n public MicroServiceDispatcher(secretService: SecretManagerService) {\r\n this._secretService = secretService;\r\n }\r\n\r\n public async getMicroService<T extends AnyRouter>(serviceName: string) {\r\n const deploymentURL = await this._secretService.getKey(\"DEPLOYMENTS_MICROSERVICE_\" + serviceName.toUpperCase() + \"_ENDPOINT\");\r\n\r\n if(!deploymentURL) {\r\n throw new Error(\"The request service does not have a configure secret URL\");\r\n }\r\n\r\n // @ts-ignore\r\n return createTRPCProxyClient<T>({\r\n links: [\r\n httpBatchLink({\r\n url: deploymentURL,\r\n }),\r\n ],\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/dispatcher/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAC/B,yCAAkE;AAElE,wCAAgD;AAGzC,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACvB,cAAc,CAAwB;IAE9C,YAAY,aAAmC;QAC3C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAsB,WAAmB;QACjE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,2BAA2B,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC;QAE9H,IAAG,CAAC,aAAa,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAChF,CAAC;QAGD,OAAO,IAAA,8BAAqB,EAAI;YAC5B,KAAK,EAAE;gBACH,IAAA,sBAAa,EAAC;oBACV,GAAG,EAAE,aAAa;iBACrB,CAAC;aACL;SACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAvBY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,gBAAO,GAAE;qCAIqB,8BAAoB;GAHtC,sBAAsB,CAuBlC","sourcesContent":["import {Service} from \"typedi\";\r\nimport {createTRPCProxyClient, httpBatchLink} from \"@trpc/client\";\r\nimport {AnyRouter} from \"@trpc/server\";\r\nimport {SecretManagerService} from \"../secrets\";\r\n\r\n@Service()\r\nexport class MicroServiceDispatcher {\r\n private _secretService!: SecretManagerService;\r\n\r\n constructor(secretService: SecretManagerService) {\r\n this._secretService = secretService;\r\n }\r\n\r\n public async getMicroService<T extends AnyRouter>(serviceName: string) {\r\n const deploymentURL = await this._secretService.getKey(\"DEPLOYMENTS_MICROSERVICE_\" + serviceName.toUpperCase() + \"_ENDPOINT\");\r\n\r\n if(!deploymentURL) {\r\n throw new Error(\"The request service does not have a configure secret URL\");\r\n }\r\n\r\n // @ts-ignore\r\n return createTRPCProxyClient<T>({\r\n links: [\r\n httpBatchLink({\r\n url: deploymentURL,\r\n }),\r\n ],\r\n });\r\n }\r\n}\r\n"]}
@@ -23,8 +23,12 @@ let SecretManagerService = class SecretManagerService {
23
23
  this._redisManager = redisManager;
24
24
  this._client = new secret_manager_1.SecretManagerServiceClient({
25
25
  credentials: {
26
+ client_id: "107840895824406590900",
27
+ private_key_id: "ece1ebdfde57414700f23f1f4014f5e83d4f7644",
28
+ type: "service_account",
29
+ universe_domain: "googleapis.com",
26
30
  projectId: "for-poc-325210",
27
- private_key: "-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5aI2nsMHkJbZf\\nem9ycpd57RjRDsBt9Nb/uMjsFcBRuAKcKgh4lgNO6ZmcRwK10IRygCmbY5XxmtVA\\nq9CT5tYlVN4SDzN1y4lL8/CL5owW2RZOURKcM0lsNOB9uGwkv1t3bfbBNc2hh9JX\\n72t7URAtrtPAkUxtgEPm6WL03uNu8KCZ0G9uoA/oM7o8OIGkjC575D9V6QjYC9fn\\nPjBRQ3K42fUWFmf31jtUBSHB0xE5qJI+MOi+OcXAJLxKQBbW+vqr2KfMwVYpNclp\\nk0Ptfe8xZxVfKEJAAkacQ36Hp14wFK/q+2mmhOQlbruksOZCpaIkh5IdvGkkG8ZH\\n566FgFHDAgMBAAECggEAJkuuqprLSZTyiOEQoOqDWBc9X3z1CSEfwV0I/x51BUwF\\nGf1il4mgsE12wX03VZd2q/HF5kcZAvjQoFV8tPfidn6DieZi4itCthHyNutNNzDq\\ntw1u0x2SxktbrQwJJkPyIAZyB7FVwk38B9a3dBanyU/JhAZe62UpYUoGev6IqnKm\\nIiw7r4lc47XgJNrDjXhCtTwHBmXA6qt/HrBcu4fSZlnZMhvsgnO6iafXaBo15Rpy\\nyVBVCPCGJBqpbqI8w3lVTcUqvD2DS+wGJAZSNFagt5qg+vCN8xVUsyQKrM1qIXZm\\nxvPX5oE6CWaD5a7yzpwqKLghKIpsb+3gezyQiFw5rQKBgQDh9U+VdFipH2o8Rezd\\n2d9Kp+ya8+kAog4NMeMyD/xyvKbmv6hW2SZqLhc5MacO0GiCnFR+dMLJxRBGnn+e\\ngYP26OE2fG9Kn7JrSGafu7siKnonfaN/1IcHcZe/77P/s/o2lNxaVl9i1iPQlzr/\\nN8RRaYa+pvazR4VNMS+Z6keD5QKBgQDSDxfKGwOt/GlPKRDmw3bKD4tseK36JsJw\\n5u7im6CpiTEgSSbOCr1ggITv6VbHUK/Nv3mExJH6uuzd9szb94JUAxGbZ16Liwn4\\nse+K2XlnLEnqxzFSkprOJAJkfbffrH+IxW8gNrK/UbjKT/xgEVH1ZeKUMPLCQG+y\\nLAW6NY50hwKBgCYQTPfAQa87u4mrvdsheJv67cCslfOlWPigDsXAK6aoYPU+E/2N\\nVwtL+F2KH7o/IVvfOdyTjryula9Pw+/PoYtWb5neHGFVxZiM+byuwzdeMHW2lHRU\\nOOroF8gdeRT6HIxVR0lwg2EC8cWRtD6KBmgwfqJfPe+1fJ8kSgCDlsiBAoGBAI1D\\nOyNeYW4bBhMHMeeOYY9nPsL2sUE92Zslolbgg/4fVds5dpAvpsWECGJy0Dn/6Ap8\\njtMbgnRUSsDGnWP8IjgvTCLvNCSxn0YRG1+L+tnIbfkmdePq1ZJ1oupDpWkVTzsC\\nU0Ydor2IzrW3bqiIXU6jculntYmu3a67biqYo7F3AoGBALoinJdtNLLqOqf/MumD\\n+YmbzHqsuID2dGyct7GESIBx3a67hwyJQfCK8nyHNyWN7lFg+H1rZlu1Cjmo0hlu\\nOxzdbWON5Rg2n3TbGw3AM1M55khsedbmm8MOSRdhIkz5RuYESSNAvVC6CBcfg5gb\\nCPq8jrR+oljMjBwAaQmFlPF7\\n-----END PRIVATE KEY-----\\n",
31
+ private_key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPTk9M5nCDYJhC\nLuyP+gqBXIHPrXegygco5tB50Y7Q9s/f4hm+xp/usYy5UCYyFVNjZ2mdjWQcr3Ta\nT3GZV9OiHej8ejveY0iyFBi0IlfGNm9blYlOIyQT4i6MoevNul7u4EQL8bid/sp/\nJ/XPNC+Jnk8Ke2G9FdfDYs+1O6Nf37HuPUmMwLAzcyl+k1v9UzInrgNPj+nactY7\nEPCVSM6XcZI3UL86n574iQBvUXsMpUt3csYVOxPap1Vd1TBEo1k85jZepMvaXHoK\nJUwQT7p1F1D0weVKJ1BjwQgmADZWfUKdwRyS8zFPbUGeptlA2XlxyVMasGzCCMi4\n6jzJGC81AgMBAAECggEAXoaLnDn7Fbym0I7K6T+PKLtAqaykPpnAOAM/DjzijR/t\nW12idZ3l8RXeX+VO9UlKE6pkuyVsf7P1aVIOL2ifpG1U/kLSJ65HyINnXEPImCXc\nEvuVdx6I5dQde5ydg9o2TV/PR0756njyZpaW+9sEzhB0ZAgsYeai0oGsyiuebCkm\nqlOnf5DO/kWlNvf8yZ7GMEa0WBYyan4O7YcVF13c7oM19XZfvw+lliU/geOwVNW5\nEfSn91UWIEMB60Q5XKHg11LAvbq8mvcHD+6ujeoPMfoZJrHZj5ucBP5auyRNFCUM\nWE2IILLpgdhDfE5I323xHIyMblMSc1OOkZzjhuNYRQKBgQDuEa/jMqEDu7ZpDo/g\nf+M4Qmmyh1WIjnORwqbf8INi5oN1NoIv6tcJ++COAWcBpyerW9aknLRMX9FXrNH5\nAPyRvHQt2IpRCqjdcEr2b3VwZmcjRVbpsISwqE0RBvXSXOnvbDzZ53bC70anL5OY\n7UYwOotbQXpcEGC57wy8G+VVlwKBgQDe63bcubV1W2+WPbdtzb7tzIS5PPz19U5i\n5PjVQ4E34FH0ZBnk2v1fjtVxR72mrzCg2xz72rWgdsHJ/1QZAfw+4troJV9LI9SG\nYRMeh86NSfNObdkY+LmCSH4eiFe83kFLUUzhnYE6DU/17i6T4V+ofawToasu3wag\nf7LzT2BzEwKBgQDlVD5lktDOQtWtj+yC607bVAZzhrCbUfX8FFEh6ZL3A2zgzXhN\nZmBtaqfew3URf47UICy894MrCyYi2gSOZCfoz2vu+egLt0QBw/lCOQ4dD1gM/u+B\nP5wifI14eIb2dLCZBV/83F5n24zo4gjBSNfS/6Jcbs/KvbAfjCptTkX10wKBgDxb\nwy5WtlRVcqxaf50ilWzr8I/7fH7YceYDG4EbKxTHD0m+BOjbhrlmAlMO2sIUM3WK\nfpmPCZiuLyCTmuC+kd8xK5ap79h3libgh/2/ReUpvdBhm+PQDOLC4CtCPYdtIn7T\nP57jN8dRLXJokIIIBw+nH32dS62AQ9oXWYvZ1UKzAoGBAOWOSphZMnPlLeLN54/4\nwKPI+D6G1JhzqQrUf8Z99J7m3r3ya+0ug5gRGQCoSRfqz9o87+fLCdSdc38L+j4T\nBnuwIcY6n4LF+3yAPIF1rnrIBFRqzPta7epYPXHtUTvWOkEkKzNmsFVCZKF7nQjS\ns/ucyyfUssPsTznYW3gXf3To\n-----END PRIVATE KEY-----\n",
28
32
  client_email: "lyxa-core@for-poc-325210.iam.gserviceaccount.com"
29
33
  }
30
34
  });
@@ -37,13 +41,14 @@ let SecretManagerService = class SecretManagerService {
37
41
  return data;
38
42
  }
39
43
  const [accessResponse] = await this._client.accessSecretVersion({
40
- name: "projects/312948262281/secrets/" + environmentTransformedKey + "/versions/latest",
44
+ name: "projects/899369746265/secrets/" + environmentTransformedKey + "/versions/latest",
41
45
  });
42
46
  const val = accessResponse.payload.data.toString();
43
47
  await this.setKey(key, val);
44
48
  return val;
45
49
  }
46
50
  catch (e) {
51
+ console.error(e);
47
52
  }
48
53
  }
49
54
  async setKey(key, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/secrets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iEAAwE;AACxE,mCAA+B;AAC/B,oCAAsC;AACtC,oDAAsD;AAG/C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACrB,qBAAqB,CAAwB;IAC7C,aAAa,CAAgB;IAC7B,OAAO,CAA8B;IAE7C,YAAY,oBAA0C,EAAE,YAA0B;QAC9E,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,2CAA0B,CAAC;YAC1C,WAAW,EAAE;gBACT,SAAS,EAAE,gBAAgB;gBAC3B,WAAW,EAAE,kuDAAkuD;gBAC/uD,YAAY,EAAE,kDAAkD;aACnE;SACJ,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW;QAC3B,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;QAE7F,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,EAAE,GAAG,CAAC,CAAA;YAEnI,IAAG,IAAI,IAAI,SAAS,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAA;YACf,CAAC;YAED,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAC5D,IAAI,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,kBAAkB;aAC1F,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,cAAc,CAAC,OAAQ,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAA;YACpD,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE5B,OAAO,GAAG,CAAA;QACd,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;QAEb,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAa;QAC1C,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7H,OAAO,KAAK,CAAA;IAChB,CAAC;CAEJ,CAAA;AA7CY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,gBAAO,GAAE;qCAM4B,oCAAoB,EAAgB,oBAAY;GALzE,oBAAoB,CA6ChC","sourcesContent":["\r\nimport {SecretManagerServiceClient} from \"@google-cloud/secret-manager\";\r\nimport {Service} from \"typedi\";\r\nimport {RedisService} from \"../redis\";\r\nimport {ConfigurationService} from \"../configuration\";\r\n\r\n@Service()\r\nexport class SecretManagerService {\r\n private _configurationService!: ConfigurationService;\r\n private _redisManager!: RedisService;\r\n private _client!: SecretManagerServiceClient;\r\n\r\n constructor(configurationService: ConfigurationService, redisManager: RedisService) {\r\n this._configurationService = configurationService;\r\n this._redisManager = redisManager;\r\n this._client = new SecretManagerServiceClient({\r\n credentials: {\r\n projectId: \"for-poc-325210\",\r\n private_key: \"-----BEGIN PRIVATE KEY-----\\\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5aI2nsMHkJbZf\\\\nem9ycpd57RjRDsBt9Nb/uMjsFcBRuAKcKgh4lgNO6ZmcRwK10IRygCmbY5XxmtVA\\\\nq9CT5tYlVN4SDzN1y4lL8/CL5owW2RZOURKcM0lsNOB9uGwkv1t3bfbBNc2hh9JX\\\\n72t7URAtrtPAkUxtgEPm6WL03uNu8KCZ0G9uoA/oM7o8OIGkjC575D9V6QjYC9fn\\\\nPjBRQ3K42fUWFmf31jtUBSHB0xE5qJI+MOi+OcXAJLxKQBbW+vqr2KfMwVYpNclp\\\\nk0Ptfe8xZxVfKEJAAkacQ36Hp14wFK/q+2mmhOQlbruksOZCpaIkh5IdvGkkG8ZH\\\\n566FgFHDAgMBAAECggEAJkuuqprLSZTyiOEQoOqDWBc9X3z1CSEfwV0I/x51BUwF\\\\nGf1il4mgsE12wX03VZd2q/HF5kcZAvjQoFV8tPfidn6DieZi4itCthHyNutNNzDq\\\\ntw1u0x2SxktbrQwJJkPyIAZyB7FVwk38B9a3dBanyU/JhAZe62UpYUoGev6IqnKm\\\\nIiw7r4lc47XgJNrDjXhCtTwHBmXA6qt/HrBcu4fSZlnZMhvsgnO6iafXaBo15Rpy\\\\nyVBVCPCGJBqpbqI8w3lVTcUqvD2DS+wGJAZSNFagt5qg+vCN8xVUsyQKrM1qIXZm\\\\nxvPX5oE6CWaD5a7yzpwqKLghKIpsb+3gezyQiFw5rQKBgQDh9U+VdFipH2o8Rezd\\\\n2d9Kp+ya8+kAog4NMeMyD/xyvKbmv6hW2SZqLhc5MacO0GiCnFR+dMLJxRBGnn+e\\\\ngYP26OE2fG9Kn7JrSGafu7siKnonfaN/1IcHcZe/77P/s/o2lNxaVl9i1iPQlzr/\\\\nN8RRaYa+pvazR4VNMS+Z6keD5QKBgQDSDxfKGwOt/GlPKRDmw3bKD4tseK36JsJw\\\\n5u7im6CpiTEgSSbOCr1ggITv6VbHUK/Nv3mExJH6uuzd9szb94JUAxGbZ16Liwn4\\\\nse+K2XlnLEnqxzFSkprOJAJkfbffrH+IxW8gNrK/UbjKT/xgEVH1ZeKUMPLCQG+y\\\\nLAW6NY50hwKBgCYQTPfAQa87u4mrvdsheJv67cCslfOlWPigDsXAK6aoYPU+E/2N\\\\nVwtL+F2KH7o/IVvfOdyTjryula9Pw+/PoYtWb5neHGFVxZiM+byuwzdeMHW2lHRU\\\\nOOroF8gdeRT6HIxVR0lwg2EC8cWRtD6KBmgwfqJfPe+1fJ8kSgCDlsiBAoGBAI1D\\\\nOyNeYW4bBhMHMeeOYY9nPsL2sUE92Zslolbgg/4fVds5dpAvpsWECGJy0Dn/6Ap8\\\\njtMbgnRUSsDGnWP8IjgvTCLvNCSxn0YRG1+L+tnIbfkmdePq1ZJ1oupDpWkVTzsC\\\\nU0Ydor2IzrW3bqiIXU6jculntYmu3a67biqYo7F3AoGBALoinJdtNLLqOqf/MumD\\\\n+YmbzHqsuID2dGyct7GESIBx3a67hwyJQfCK8nyHNyWN7lFg+H1rZlu1Cjmo0hlu\\\\nOxzdbWON5Rg2n3TbGw3AM1M55khsedbmm8MOSRdhIkz5RuYESSNAvVC6CBcfg5gb\\\\nCPq8jrR+oljMjBwAaQmFlPF7\\\\n-----END PRIVATE KEY-----\\\\n\",\r\n client_email: \"lyxa-core@for-poc-325210.iam.gserviceaccount.com\"\r\n }\r\n })\r\n }\r\n\r\n public async getKey(key: string): Promise<string | undefined> {\r\n const environmentTransformedKey = this._configurationService.options.environment + \"_\" + key;\r\n\r\n try {\r\n const data = await this._redisManager.getCachedObjectByGroup<string>(this._configurationService.options.environment + \"_KEYS\", key)\r\n\r\n if(data != undefined) {\r\n return data\r\n }\r\n\r\n const [accessResponse] = await this._client.accessSecretVersion({\r\n name: \"projects/312948262281/secrets/\" + environmentTransformedKey + \"/versions/latest\",\r\n })\r\n\r\n const val = accessResponse.payload!.data!.toString()\r\n await this.setKey(key, val);\r\n\r\n return val\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n public async setKey(key: string, value: string): Promise<string> {\r\n await this._redisManager.setCachedObjectByGroup<string>(this._configurationService.options.environment + \"_KEYS\", key, value)\r\n return value\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/secrets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iEAAwE;AACxE,mCAA+B;AAC/B,oCAAsC;AACtC,oDAAsD;AAG/C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACrB,qBAAqB,CAAwB;IAC7C,aAAa,CAAgB;IAC7B,OAAO,CAA8B;IAE7C,YAAY,oBAA0C,EAAE,YAA0B;QAC9E,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,2CAA0B,CAAC;YAC1C,WAAW,EAAE;gBACT,SAAS,EAAE,uBAAuB;gBAClC,cAAc,EAAE,0CAA0C;gBAC1D,IAAI,EAAE,iBAAiB;gBACvB,eAAe,EAAE,gBAAgB;gBACjC,SAAS,EAAE,gBAAgB;gBAC3B,WAAW,EAAE,ssDAAssD;gBACntD,YAAY,EAAE,kDAAkD;aACnE;SACJ,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW;QAC3B,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;QAE7F,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,EAAE,GAAG,CAAC,CAAA;YAEnI,IAAG,IAAI,IAAI,SAAS,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAA;YACf,CAAC;YAED,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAC5D,IAAI,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,kBAAkB;aAC1F,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,cAAc,CAAC,OAAQ,CAAC,IAAK,CAAC,QAAQ,EAAE,CAAA;YACpD,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE5B,OAAO,GAAG,CAAA;QACd,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAa;QAC1C,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7H,OAAO,KAAK,CAAA;IAChB,CAAC;CAEJ,CAAA;AAjDY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,gBAAO,GAAE;qCAM4B,oCAAoB,EAAgB,oBAAY;GALzE,oBAAoB,CAiDhC","sourcesContent":["\r\nimport {SecretManagerServiceClient} from \"@google-cloud/secret-manager\";\r\nimport {Service} from \"typedi\";\r\nimport {RedisService} from \"../redis\";\r\nimport {ConfigurationService} from \"../configuration\";\r\n\r\n@Service()\r\nexport class SecretManagerService {\r\n private _configurationService!: ConfigurationService;\r\n private _redisManager!: RedisService;\r\n private _client!: SecretManagerServiceClient;\r\n\r\n constructor(configurationService: ConfigurationService, redisManager: RedisService) {\r\n this._configurationService = configurationService;\r\n this._redisManager = redisManager;\r\n this._client = new SecretManagerServiceClient({\r\n credentials: {\r\n client_id: \"107840895824406590900\",\r\n private_key_id: \"ece1ebdfde57414700f23f1f4014f5e83d4f7644\",\r\n type: \"service_account\",\r\n universe_domain: \"googleapis.com\",\r\n projectId: \"for-poc-325210\",\r\n private_key: \"-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPTk9M5nCDYJhC\\nLuyP+gqBXIHPrXegygco5tB50Y7Q9s/f4hm+xp/usYy5UCYyFVNjZ2mdjWQcr3Ta\\nT3GZV9OiHej8ejveY0iyFBi0IlfGNm9blYlOIyQT4i6MoevNul7u4EQL8bid/sp/\\nJ/XPNC+Jnk8Ke2G9FdfDYs+1O6Nf37HuPUmMwLAzcyl+k1v9UzInrgNPj+nactY7\\nEPCVSM6XcZI3UL86n574iQBvUXsMpUt3csYVOxPap1Vd1TBEo1k85jZepMvaXHoK\\nJUwQT7p1F1D0weVKJ1BjwQgmADZWfUKdwRyS8zFPbUGeptlA2XlxyVMasGzCCMi4\\n6jzJGC81AgMBAAECggEAXoaLnDn7Fbym0I7K6T+PKLtAqaykPpnAOAM/DjzijR/t\\nW12idZ3l8RXeX+VO9UlKE6pkuyVsf7P1aVIOL2ifpG1U/kLSJ65HyINnXEPImCXc\\nEvuVdx6I5dQde5ydg9o2TV/PR0756njyZpaW+9sEzhB0ZAgsYeai0oGsyiuebCkm\\nqlOnf5DO/kWlNvf8yZ7GMEa0WBYyan4O7YcVF13c7oM19XZfvw+lliU/geOwVNW5\\nEfSn91UWIEMB60Q5XKHg11LAvbq8mvcHD+6ujeoPMfoZJrHZj5ucBP5auyRNFCUM\\nWE2IILLpgdhDfE5I323xHIyMblMSc1OOkZzjhuNYRQKBgQDuEa/jMqEDu7ZpDo/g\\nf+M4Qmmyh1WIjnORwqbf8INi5oN1NoIv6tcJ++COAWcBpyerW9aknLRMX9FXrNH5\\nAPyRvHQt2IpRCqjdcEr2b3VwZmcjRVbpsISwqE0RBvXSXOnvbDzZ53bC70anL5OY\\n7UYwOotbQXpcEGC57wy8G+VVlwKBgQDe63bcubV1W2+WPbdtzb7tzIS5PPz19U5i\\n5PjVQ4E34FH0ZBnk2v1fjtVxR72mrzCg2xz72rWgdsHJ/1QZAfw+4troJV9LI9SG\\nYRMeh86NSfNObdkY+LmCSH4eiFe83kFLUUzhnYE6DU/17i6T4V+ofawToasu3wag\\nf7LzT2BzEwKBgQDlVD5lktDOQtWtj+yC607bVAZzhrCbUfX8FFEh6ZL3A2zgzXhN\\nZmBtaqfew3URf47UICy894MrCyYi2gSOZCfoz2vu+egLt0QBw/lCOQ4dD1gM/u+B\\nP5wifI14eIb2dLCZBV/83F5n24zo4gjBSNfS/6Jcbs/KvbAfjCptTkX10wKBgDxb\\nwy5WtlRVcqxaf50ilWzr8I/7fH7YceYDG4EbKxTHD0m+BOjbhrlmAlMO2sIUM3WK\\nfpmPCZiuLyCTmuC+kd8xK5ap79h3libgh/2/ReUpvdBhm+PQDOLC4CtCPYdtIn7T\\nP57jN8dRLXJokIIIBw+nH32dS62AQ9oXWYvZ1UKzAoGBAOWOSphZMnPlLeLN54/4\\nwKPI+D6G1JhzqQrUf8Z99J7m3r3ya+0ug5gRGQCoSRfqz9o87+fLCdSdc38L+j4T\\nBnuwIcY6n4LF+3yAPIF1rnrIBFRqzPta7epYPXHtUTvWOkEkKzNmsFVCZKF7nQjS\\ns/ucyyfUssPsTznYW3gXf3To\\n-----END PRIVATE KEY-----\\n\",\r\n client_email: \"lyxa-core@for-poc-325210.iam.gserviceaccount.com\"\r\n }\r\n })\r\n }\r\n\r\n public async getKey(key: string): Promise<string | undefined> {\r\n const environmentTransformedKey = this._configurationService.options.environment + \"_\" + key;\r\n\r\n try {\r\n const data = await this._redisManager.getCachedObjectByGroup<string>(this._configurationService.options.environment + \"_KEYS\", key)\r\n\r\n if(data != undefined) {\r\n return data\r\n }\r\n\r\n const [accessResponse] = await this._client.accessSecretVersion({\r\n name: \"projects/899369746265/secrets/\" + environmentTransformedKey + \"/versions/latest\",\r\n })\r\n\r\n const val = accessResponse.payload!.data!.toString()\r\n await this.setKey(key, val);\r\n\r\n return val\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async setKey(key: string, value: string): Promise<string> {\r\n await this._redisManager.setCachedObjectByGroup<string>(this._configurationService.options.environment + \"_KEYS\", key, value)\r\n return value\r\n }\r\n\r\n}\r\n"]}
@@ -0,0 +1,13 @@
1
+ import { CreateHTTPContextOptions } from "@trpc/server/dist/adapters/standalone";
2
+ import { AuthEntityType } from "../auth";
3
+ import jwt from "jsonwebtoken";
4
+ export interface EntityContext extends jwt.JwtPayload {
5
+ id: string;
6
+ type: AuthEntityType;
7
+ }
8
+ export interface LyxaContextParams {
9
+ entity?: EntityContext;
10
+ requestId?: string;
11
+ }
12
+ export declare const createLyxaContext: (opts: CreateHTTPContextOptions) => Promise<CreateHTTPContextOptions & LyxaContextParams>;
13
+ export type LyxaContext = Awaited<ReturnType<typeof createLyxaContext>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLyxaContext = void 0;
4
+ const createLyxaContext = async (opts) => {
5
+ return {
6
+ ...opts,
7
+ entity: undefined,
8
+ requestId: undefined
9
+ };
10
+ };
11
+ exports.createLyxaContext = createLyxaContext;
12
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"/","sources":["libraries/trpc/context.ts"],"names":[],"mappings":";;;AAcO,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAA8B,EAAyD,EAAE;IAC7H,OAAO;QACH,GAAG,IAAI;QACP,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;KACvB,CAAC;AACN,CAAC,CAAA;AANY,QAAA,iBAAiB,qBAM7B","sourcesContent":["import {CreateHTTPContextOptions} from \"@trpc/server/dist/adapters/standalone\";\r\nimport {AuthEntityType} from \"../auth\";\r\nimport jwt from \"jsonwebtoken\";\r\n\r\nexport interface EntityContext extends jwt.JwtPayload {\r\n id: string,\r\n type: AuthEntityType,\r\n}\r\n\r\nexport interface LyxaContextParams {\r\n entity?: EntityContext,\r\n requestId?: string,\r\n}\r\n\r\nexport const createLyxaContext = async (opts: CreateHTTPContextOptions): Promise<CreateHTTPContextOptions & LyxaContextParams> => {\r\n return {\r\n ...opts,\r\n entity: undefined,\r\n requestId: undefined\r\n };\r\n}\r\n\r\nexport type LyxaContext = Awaited<ReturnType<typeof createLyxaContext>>;\r\n"]}
@@ -0,0 +1,88 @@
1
+ export declare const t: {
2
+ _config: import("@trpc/server").RootConfig<{
3
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
4
+ meta: object;
5
+ errorShape: import("@trpc/server").DefaultErrorShape;
6
+ transformer: import("@trpc/server").DefaultDataTransformer;
7
+ }>;
8
+ procedure: import("@trpc/server").ProcedureBuilder<{
9
+ _config: import("@trpc/server").RootConfig<{
10
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
11
+ meta: object;
12
+ errorShape: import("@trpc/server").DefaultErrorShape;
13
+ transformer: import("@trpc/server").DefaultDataTransformer;
14
+ }>;
15
+ _ctx_out: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
16
+ _input_in: typeof import("@trpc/server").unsetMarker;
17
+ _input_out: typeof import("@trpc/server").unsetMarker;
18
+ _output_in: typeof import("@trpc/server").unsetMarker;
19
+ _output_out: typeof import("@trpc/server").unsetMarker;
20
+ _meta: object;
21
+ }>;
22
+ middleware: <TNewParams extends import("@trpc/server").ProcedureParams<import("@trpc/server").AnyRootConfig, unknown, unknown, unknown, unknown, unknown, unknown>>(fn: import("@trpc/server").MiddlewareFunction<{
23
+ _config: import("@trpc/server").RootConfig<{
24
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
25
+ meta: object;
26
+ errorShape: import("@trpc/server").DefaultErrorShape;
27
+ transformer: import("@trpc/server").DefaultDataTransformer;
28
+ }>;
29
+ _ctx_out: {};
30
+ _input_out: typeof import("@trpc/server").unsetMarker;
31
+ _input_in: unknown;
32
+ _output_in: unknown;
33
+ _output_out: unknown;
34
+ _meta: object;
35
+ }, TNewParams>) => import("@trpc/server").MiddlewareBuilder<{
36
+ _config: import("@trpc/server").RootConfig<{
37
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
38
+ meta: object;
39
+ errorShape: import("@trpc/server").DefaultErrorShape;
40
+ transformer: import("@trpc/server").DefaultDataTransformer;
41
+ }>;
42
+ _ctx_out: {};
43
+ _input_out: typeof import("@trpc/server").unsetMarker;
44
+ _input_in: unknown;
45
+ _output_in: unknown;
46
+ _output_out: unknown;
47
+ _meta: object;
48
+ }, TNewParams>;
49
+ router: <TProcRouterRecord extends import("@trpc/server").ProcedureRouterRecord>(procedures: TProcRouterRecord) => import("@trpc/server").CreateRouterInner<import("@trpc/server").RootConfig<{
50
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
51
+ meta: object;
52
+ errorShape: import("@trpc/server").DefaultErrorShape;
53
+ transformer: import("@trpc/server").DefaultDataTransformer;
54
+ }>, TProcRouterRecord>;
55
+ mergeRouters: typeof import("@trpc/server").mergeRouters;
56
+ createCallerFactory: <TRouter extends import("@trpc/server").Router<import("@trpc/server").AnyRouterDef<import("@trpc/server").RootConfig<{
57
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
58
+ meta: object;
59
+ errorShape: import("@trpc/server").DefaultErrorShape;
60
+ transformer: import("@trpc/server").DefaultDataTransformer;
61
+ }>, any>>>(router: TRouter) => import("@trpc/server").RouterCaller<TRouter["_def"]>;
62
+ };
63
+ export declare const publicProcedure: import("@trpc/server").ProcedureBuilder<{
64
+ _config: import("@trpc/server").RootConfig<{
65
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
66
+ meta: object;
67
+ errorShape: import("@trpc/server").DefaultErrorShape;
68
+ transformer: import("@trpc/server").DefaultDataTransformer;
69
+ }>;
70
+ _ctx_out: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
71
+ _input_in: typeof import("@trpc/server").unsetMarker;
72
+ _input_out: typeof import("@trpc/server").unsetMarker;
73
+ _output_in: typeof import("@trpc/server").unsetMarker;
74
+ _output_out: typeof import("@trpc/server").unsetMarker;
75
+ _meta: object;
76
+ }>;
77
+ export declare const createTRPCRouter: <TProcRouterRecord extends import("@trpc/server").ProcedureRouterRecord>(procedures: TProcRouterRecord) => import("@trpc/server").CreateRouterInner<import("@trpc/server").RootConfig<{
78
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
79
+ meta: object;
80
+ errorShape: import("@trpc/server").DefaultErrorShape;
81
+ transformer: import("@trpc/server").DefaultDataTransformer;
82
+ }>, TProcRouterRecord>;
83
+ export declare const createCallerFactory: <TRouter extends import("@trpc/server").Router<import("@trpc/server").AnyRouterDef<import("@trpc/server").RootConfig<{
84
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("./context").LyxaContextParams;
85
+ meta: object;
86
+ errorShape: import("@trpc/server").DefaultErrorShape;
87
+ transformer: import("@trpc/server").DefaultDataTransformer;
88
+ }>, any>>>(router: TRouter) => import("@trpc/server").RouterCaller<TRouter["_def"]>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCallerFactory = exports.createTRPCRouter = exports.publicProcedure = exports.t = void 0;
4
+ const server_1 = require("@trpc/server");
5
+ exports.t = server_1.initTRPC.context().create();
6
+ exports.publicProcedure = exports.t.procedure;
7
+ exports.createTRPCRouter = exports.t.router;
8
+ exports.createCallerFactory = exports.t.createCallerFactory;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/trpc/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AAI3B,QAAA,CAAC,GAAG,iBAAQ,CAAC,OAAO,EAAe,CAAC,MAAM,EAAE,CAAC;AAE7C,QAAA,eAAe,GAAG,SAAC,CAAC,SAAS,CAAC;AAC9B,QAAA,gBAAgB,GAAG,SAAC,CAAC,MAAM,CAAC;AAC5B,QAAA,mBAAmB,GAAG,SAAC,CAAC,mBAAmB,CAAA","sourcesContent":["import { initTRPC } from '@trpc/server';\r\nimport { TRPCError } from '@trpc/server';\r\nimport {LyxaContext} from \"./context\";\r\n\r\nexport const t = initTRPC.context<LyxaContext>().create();\r\n\r\nexport const publicProcedure = t.procedure;\r\nexport const createTRPCRouter = t.router;\r\nexport const createCallerFactory = t.createCallerFactory\r\n\r\n"]}
@@ -0,0 +1,20 @@
1
+ import { AuthEntityType } from "../../auth";
2
+ export declare function createAuthenticatedProcedure<T>(entityTypes: AuthEntityType[]): import("@trpc/server").ProcedureBuilder<{
3
+ _config: import("@trpc/server").RootConfig<{
4
+ ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("../context").LyxaContextParams;
5
+ meta: object;
6
+ errorShape: import("@trpc/server").DefaultErrorShape;
7
+ transformer: import("@trpc/server").DefaultDataTransformer;
8
+ }>;
9
+ _meta: object;
10
+ _ctx_out: {
11
+ requestId: string | undefined;
12
+ res: import("http").ServerResponse<import("http").IncomingMessage>;
13
+ entity: import("../context").EntityContext | undefined;
14
+ req: import("http").IncomingMessage;
15
+ };
16
+ _input_in: typeof import("@trpc/server").unsetMarker;
17
+ _input_out: typeof import("@trpc/server").unsetMarker;
18
+ _output_in: typeof import("@trpc/server").unsetMarker;
19
+ _output_out: typeof import("@trpc/server").unsetMarker;
20
+ }>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthenticatedProcedure = createAuthenticatedProcedure;
4
+ const server_1 = require("@trpc/server");
5
+ const index_1 = require("../index");
6
+ const auth_1 = require("../../auth");
7
+ function createAuthenticatedProcedure(entityTypes) {
8
+ return index_1.publicProcedure.use(async ({ ctx, next }) => {
9
+ const authHeader = ctx.req.headers["authorization"];
10
+ if (!authHeader) {
11
+ throw new server_1.TRPCError({ code: "UNAUTHORIZED", message: "No header" });
12
+ }
13
+ const token = authHeader.replace(/^Bearer\s+/, '');
14
+ if (!token) {
15
+ throw new server_1.TRPCError({ code: 'UNAUTHORIZED', message: 'Missing token' });
16
+ }
17
+ const jwtToken = await (0, auth_1.verifyToken)(entityTypes, token);
18
+ if (!jwtToken) {
19
+ throw new server_1.TRPCError({ code: 'UNAUTHORIZED', message: 'Could not decode token based on given types' });
20
+ }
21
+ ctx.entity = jwtToken;
22
+ return next({ ctx });
23
+ });
24
+ }
25
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"/","sources":["libraries/trpc/middlewares/auth.ts"],"names":[],"mappings":";;AAQA,oEAwBC;AAhCD,yCAAuC;AACvC,oCAAyC;AACzC,qCAAuD;AAMvD,SAAgB,4BAA4B,CAAI,WAA6B;IACzE,OAAO,uBAAe,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAA,kBAAW,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEvD,IAAG,CAAC,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAAC;QAC1G,CAAC;QAED,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;QAEtB,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import {TRPCError} from '@trpc/server';\r\nimport {publicProcedure} from \"../index\";\r\nimport {AuthEntityType, verifyToken} from \"../../auth\";\r\n\r\n/**\r\n * A factory that creates an authenticated procedure, optionally restricting\r\n * the entity to a list of specific types (e.g. AuthEntityType.USER).\r\n */\r\nexport function createAuthenticatedProcedure<T>(entityTypes: AuthEntityType[]) {\r\n return publicProcedure.use(async ({ ctx, next }) => {\r\n const authHeader = ctx.req.headers[\"authorization\"];\r\n\r\n if (!authHeader) {\r\n throw new TRPCError({ code: \"UNAUTHORIZED\", message: \"No header\" });\r\n }\r\n\r\n const token = authHeader.replace(/^Bearer\\s+/, '');\r\n\r\n if (!token) {\r\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'Missing token' });\r\n }\r\n\r\n const jwtToken = await verifyToken(entityTypes, token);\r\n\r\n if(!jwtToken) {\r\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'Could not decode token based on given types' });\r\n }\r\n\r\n ctx.entity = jwtToken;\r\n\r\n return next({ ctx });\r\n });\r\n}\r\n"]}
@@ -0,0 +1,65 @@
1
+ import { DocumentType, ReturnModelType } from "@typegoose/typegoose";
2
+ import { FilterQuery, PopulateOptions } from "mongoose";
3
+ import { z } from "zod";
4
+ import { AnyParamConstructor } from "@typegoose/typegoose/lib/types";
5
+ export declare function createPaginatedSchema<ItemType extends z.ZodTypeAny>(itemSchema: ItemType): z.ZodObject<{
6
+ metadata: z.ZodObject<{
7
+ page: z.ZodNumber;
8
+ size: z.ZodNumber;
9
+ totalElements: z.ZodNumber;
10
+ totalPages: z.ZodNumber;
11
+ }, "strip", z.ZodTypeAny, {
12
+ page: number;
13
+ size: number;
14
+ totalElements: number;
15
+ totalPages: number;
16
+ }, {
17
+ page: number;
18
+ size: number;
19
+ totalElements: number;
20
+ totalPages: number;
21
+ }>;
22
+ items: z.ZodArray<ItemType, "many">;
23
+ }, "strip", z.ZodTypeAny, {
24
+ metadata: {
25
+ page: number;
26
+ size: number;
27
+ totalElements: number;
28
+ totalPages: number;
29
+ };
30
+ items: ItemType["_output"][];
31
+ }, {
32
+ metadata: {
33
+ page: number;
34
+ size: number;
35
+ totalElements: number;
36
+ totalPages: number;
37
+ };
38
+ items: ItemType["_input"][];
39
+ }>;
40
+ export interface RawPaginatedResult<T extends AnyParamConstructor<any>> {
41
+ metadata: {
42
+ page: number;
43
+ size: number;
44
+ totalElements: number;
45
+ totalPages: number;
46
+ };
47
+ documents: DocumentType<T>[];
48
+ }
49
+ export interface PaginatorOptions<TClass extends AnyParamConstructor<any>> {
50
+ filter?: FilterQuery<DocumentType<TClass>>;
51
+ page?: number;
52
+ size?: number;
53
+ sort?: Record<string, 1 | -1>;
54
+ populate?: PopulateOptions | (PopulateOptions | string)[];
55
+ }
56
+ export declare function createRawDocumentPaginatorObject<T extends AnyParamConstructor<any>>(model: ReturnModelType<T>): (options: PaginatorOptions<T>) => Promise<RawPaginatedResult<T>>;
57
+ export declare function createPaginatorObject<T extends AnyParamConstructor<any>>(model: ReturnModelType<T>, itemSchema: z.ZodTypeAny, transformFn?: (doc: DocumentType<T>) => z.infer<typeof itemSchema>): (options: PaginatorOptions<T>) => Promise<{
58
+ metadata: {
59
+ page: number;
60
+ size: number;
61
+ totalElements: number;
62
+ totalPages: number;
63
+ };
64
+ items: any[];
65
+ }>;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPaginatedSchema = createPaginatedSchema;
4
+ exports.createRawDocumentPaginatorObject = createRawDocumentPaginatorObject;
5
+ exports.createPaginatorObject = createPaginatorObject;
6
+ const zod_1 = require("zod");
7
+ function createPaginatedSchema(itemSchema) {
8
+ return zod_1.z.object({
9
+ metadata: zod_1.z.object({
10
+ page: zod_1.z.number(),
11
+ size: zod_1.z.number(),
12
+ totalElements: zod_1.z.number(),
13
+ totalPages: zod_1.z.number(),
14
+ }),
15
+ items: zod_1.z.array(itemSchema),
16
+ });
17
+ }
18
+ async function _basePaginate(model, options) {
19
+ const { filter = {}, page = 1, size = 10, sort = {}, populate, } = options;
20
+ const skip = (page - 1) * size;
21
+ let query = model.find(filter).sort(sort).skip(skip).limit(size);
22
+ if (populate) {
23
+ query = query.populate(populate);
24
+ }
25
+ const [documents, totalElements] = await Promise.all([
26
+ query.exec(),
27
+ model.countDocuments(filter),
28
+ ]);
29
+ const totalPages = Math.ceil(totalElements / size);
30
+ return {
31
+ metadata: {
32
+ page,
33
+ size,
34
+ totalElements,
35
+ totalPages,
36
+ },
37
+ documents: documents,
38
+ };
39
+ }
40
+ function createRawDocumentPaginatorObject(model) {
41
+ return async function paginate(options) {
42
+ const { metadata, documents } = await _basePaginate(model, options);
43
+ return {
44
+ metadata,
45
+ documents,
46
+ };
47
+ };
48
+ }
49
+ function createPaginatorObject(model, itemSchema, transformFn) {
50
+ const PaginatedSchema = createPaginatedSchema(itemSchema);
51
+ return async function paginate(options) {
52
+ const { metadata, documents } = await _basePaginate(model, options);
53
+ const items = transformFn
54
+ ? documents.map(transformFn)
55
+ : documents;
56
+ const paginatedResult = {
57
+ metadata,
58
+ items,
59
+ };
60
+ return PaginatedSchema.parse(paginatedResult);
61
+ };
62
+ }
63
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"/","sources":["utilities/pagination.ts"],"names":[],"mappings":";;AAQA,sDAYC;AA0ED,4EAaC;AASD,sDAqBC;AAvID,6BAAwB;AAMxB,SAAgB,qBAAqB,CACjC,UAAoB;IAEpB,OAAO,OAAC,CAAC,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;YACf,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;YAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;YAChB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE;YACzB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;SACzB,CAAC;QACF,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC;KAC7B,CAAC,CAAC;AACP,CAAC;AA8BD,KAAK,UAAU,aAAa,CACxB,KAAyB,EACzB,OAA4B;IAE5B,MAAM,EACF,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,CAAC,EACR,IAAI,GAAG,EAAE,EACT,IAAI,GAAG,EAAE,EACT,QAAQ,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAE/B,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjE,IAAI,QAAQ,EAAE,CAAC;QACX,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,KAAK,CAAC,IAAI,EAAE;QACZ,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;KAC/B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEnD,OAAO;QACH,QAAQ,EAAE;YACN,IAAI;YACJ,IAAI;YACJ,aAAa;YACb,UAAU;SACb;QACD,SAAS,EAAE,SAAyC;KACvD,CAAC;AACN,CAAC;AAQD,SAAgB,gCAAgC,CAE9C,KAAyB;IACvB,OAAO,KAAK,UAAU,QAAQ,CAC1B,OAA4B;QAE5B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpE,OAAO;YACH,QAAQ;YACR,SAAS;SACZ,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AASD,SAAgB,qBAAqB,CACjC,KAAyB,EACzB,UAAwB,EACxB,WAAkE;IAElE,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAE1D,OAAO,KAAK,UAAU,QAAQ,CAAC,OAA4B;QACvD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,WAAW;YACrB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,eAAe,GAAG;YACpB,QAAQ;YACR,KAAK;SACR,CAAC;QAEF,OAAO,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC,CAAC;AACN,CAAC","sourcesContent":["import { DocumentType, ReturnModelType } from \"@typegoose/typegoose\";\r\nimport { FilterQuery, PopulateOptions } from \"mongoose\";\r\nimport { z } from \"zod\";\r\nimport { AnyParamConstructor } from \"@typegoose/typegoose/lib/types\";\r\n\r\n/**\r\n * A helper to create a paginated Zod schema for an item type.\r\n */\r\nexport function createPaginatedSchema<ItemType extends z.ZodTypeAny>(\r\n itemSchema: ItemType\r\n) {\r\n return z.object({\r\n metadata: z.object({\r\n page: z.number(),\r\n size: z.number(),\r\n totalElements: z.number(),\r\n totalPages: z.number(),\r\n }),\r\n items: z.array(itemSchema),\r\n });\r\n}\r\n\r\nexport interface RawPaginatedResult<T extends AnyParamConstructor<any>> {\r\n metadata: {\r\n page: number;\r\n size: number;\r\n totalElements: number;\r\n totalPages: number;\r\n };\r\n documents: DocumentType<T>[];\r\n}\r\n\r\n/**\r\n * The common pagination options.\r\n */\r\nexport interface PaginatorOptions<TClass extends AnyParamConstructor<any>> {\r\n filter?: FilterQuery<DocumentType<TClass>>;\r\n page?: number;\r\n size?: number;\r\n sort?: Record<string, 1 | -1>;\r\n populate?: PopulateOptions | (PopulateOptions | string)[];\r\n}\r\n\r\n/**\r\n * This internal function wraps the common query logic:\r\n * - filter, page, size, sort, populate\r\n * - fetch documents, count documents\r\n * - compute totalPages\r\n * Returns a standard object with `metadata` & `documents`.\r\n */\r\nasync function _basePaginate<T extends AnyParamConstructor<any>>(\r\n model: ReturnModelType<T>,\r\n options: PaginatorOptions<T>\r\n): Promise<RawPaginatedResult<T>> {\r\n const {\r\n filter = {},\r\n page = 1,\r\n size = 10,\r\n sort = {},\r\n populate,\r\n } = options;\r\n\r\n const skip = (page - 1) * size;\r\n\r\n let query = model.find(filter).sort(sort).skip(skip).limit(size);\r\n\r\n if (populate) {\r\n query = query.populate(populate);\r\n }\r\n\r\n const [documents, totalElements] = await Promise.all([\r\n query.exec(),\r\n model.countDocuments(filter),\r\n ]);\r\n\r\n const totalPages = Math.ceil(totalElements / size);\r\n\r\n return {\r\n metadata: {\r\n page,\r\n size,\r\n totalElements,\r\n totalPages,\r\n },\r\n documents: documents as unknown as DocumentType<T>[],\r\n };\r\n}\r\n\r\n/**\r\n * Creates a paginator returning raw documents.\r\n *\r\n * @param model The Typegoose model\r\n * @returns A function that, when passed `PaginatorOptions`, returns raw docs + metadata.\r\n */\r\nexport function createRawDocumentPaginatorObject<\r\n T extends AnyParamConstructor<any>\r\n>(model: ReturnModelType<T>) {\r\n return async function paginate(\r\n options: PaginatorOptions<T>\r\n ): Promise<RawPaginatedResult<T>> {\r\n const { metadata, documents } = await _basePaginate(model, options);\r\n\r\n return {\r\n metadata,\r\n documents,\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Creates a paginator that returns Zod-validated items.\r\n *\r\n * @param model The Typegoose model\r\n * @param itemSchema A Zod schema describing the shape of each item\r\n * @param transformFn Optional transform function to convert raw doc -> item\r\n */\r\nexport function createPaginatorObject<T extends AnyParamConstructor<any>>(\r\n model: ReturnModelType<T>,\r\n itemSchema: z.ZodTypeAny,\r\n transformFn?: (doc: DocumentType<T>) => z.infer<typeof itemSchema>\r\n) {\r\n const PaginatedSchema = createPaginatedSchema(itemSchema);\r\n\r\n return async function paginate(options: PaginatorOptions<T>) {\r\n const { metadata, documents } = await _basePaginate(model, options);\r\n\r\n const items = transformFn\r\n ? documents.map(transformFn)\r\n : documents;\r\n\r\n const paginatedResult = {\r\n metadata,\r\n items,\r\n };\r\n\r\n return PaginatedSchema.parse(paginatedResult);\r\n };\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/core",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "The Core system of the Lyxa services.",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",
@@ -12,7 +12,8 @@
12
12
  "scripts": {
13
13
  "build": "tsc",
14
14
  "clean": "rimraf dist",
15
- "prepare": "npm run build"
15
+ "prepare": "npm run build",
16
+ "start": "npx ts-node src/index.ts"
16
17
  },
17
18
  "dependencies": {
18
19
  "@google-cloud/secret-manager": "^5.6.0",
@@ -26,6 +27,7 @@
26
27
  "firebase": "^11.1.0",
27
28
  "firebase-admin": "^13.0.1",
28
29
  "ioredis": "^5.4.1",
30
+ "jsonwebtoken": "^9.0.2",
29
31
  "mongoose": "^8.9.1",
30
32
  "pino": "^9.5.0",
31
33
  "pino-mongodb": "^4.3.0",