@lyxa.ai/core 1.0.4 → 1.0.5

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.
@@ -2,12 +2,13 @@ import { SignOptions } from "jsonwebtoken";
2
2
  import { EntityContext } from "../trpc/context";
3
3
  export declare enum AuthEntityType {
4
4
  USER = "USER",
5
- SHOP = "SHOP",
5
+ SELLER = "SELLER",
6
6
  DELIVERY_BOY = "DELIVERY_BOY",
7
7
  CRM = "CRM"
8
8
  }
9
9
  export declare function signToken(entity: {
10
10
  id: string;
11
11
  type: AuthEntityType;
12
+ parameters: Record<string, unknown>;
12
13
  }, options?: SignOptions): Promise<string>;
13
14
  export declare function verifyToken(entityTypes: AuthEntityType[], token: string): Promise<EntityContext | undefined>;
@@ -11,7 +11,7 @@ const index_1 = require("../../index");
11
11
  var AuthEntityType;
12
12
  (function (AuthEntityType) {
13
13
  AuthEntityType["USER"] = "USER";
14
- AuthEntityType["SHOP"] = "SHOP";
14
+ AuthEntityType["SELLER"] = "SELLER";
15
15
  AuthEntityType["DELIVERY_BOY"] = "DELIVERY_BOY";
16
16
  AuthEntityType["CRM"] = "CRM";
17
17
  })(AuthEntityType || (exports.AuthEntityType = AuthEntityType = {}));
@@ -28,6 +28,7 @@ async function signToken(entity, options) {
28
28
  const payload = {
29
29
  id: entity.id,
30
30
  type: entity.type,
31
+ parameters: entity.parameters,
31
32
  };
32
33
  return jsonwebtoken_1.default.sign(payload, secret, options);
33
34
  }
@@ -1 +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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/auth/index.ts"],"names":[],"mappings":";;;;;;AAeA,8BAuBC;AAED,kCASC;AAjDD,gEAA8C;AAC9C,uCAAyC;AAGzC,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,+BAAa,CAAA;IACb,mCAAiB,CAAA;IACjB,+CAA6B,CAAA;IAC7B,6BAAW,CAAA;AACf,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAMM,KAAK,UAAU,SAAS,CAC3B,MAAiF,EACjF,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;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;KAChC,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 SELLER = \"SELLER\",\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, parameters: Record<string, unknown> },\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 parameters: entity.parameters,\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"]}
@@ -4,6 +4,7 @@ import jwt from "jsonwebtoken";
4
4
  export interface EntityContext extends jwt.JwtPayload {
5
5
  id: string;
6
6
  type: AuthEntityType;
7
+ parameters: Record<string, unknown>;
7
8
  }
8
9
  export interface LyxaContextParams {
9
10
  entity?: EntityContext;
@@ -1 +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"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"/","sources":["libraries/trpc/context.ts"],"names":[],"mappings":";;;AAeO,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 parameters: Record<string, unknown>\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"]}
@@ -1 +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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/trpc/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AAG3B,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,CAAC","sourcesContent":["import { initTRPC } 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"]}
@@ -1,5 +1,5 @@
1
1
  import { AuthEntityType } from "../../auth";
2
- export declare function createAuthenticatedProcedure<T>(entityTypes: AuthEntityType[]): import("@trpc/server").ProcedureBuilder<{
2
+ export declare function createAuthenticatedProcedure(entityTypes: AuthEntityType[]): import("@trpc/server").ProcedureBuilder<{
3
3
  _config: import("@trpc/server").RootConfig<{
4
4
  ctx: import("@trpc/server/dist/adapters/standalone").CreateHTTPContextOptions & import("../context").LyxaContextParams;
5
5
  meta: object;
@@ -1 +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"]}
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,CAAC,WAA6B;IACtE,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(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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/core",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "The Core system of the Lyxa services.",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",