@levrbet/shared 0.1.94 → 0.1.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/core/prisma/generated/edge.js +15 -4
  2. package/dist/core/prisma/generated/index-browser.js +12 -1
  3. package/dist/core/prisma/generated/index.d.ts +129 -28
  4. package/dist/core/prisma/generated/index.js +15 -4
  5. package/dist/core/prisma/generated/package.json +1 -1
  6. package/dist/core/prisma/generated/schema.prisma +12 -1
  7. package/dist/core/prisma/generated/wasm.js +15 -4
  8. package/dist/server/auth/kms.js +7 -22
  9. package/dist/server/auth/kms.js.map +1 -1
  10. package/dist/server/auth/middleware/index.d.ts +7 -1
  11. package/dist/server/auth/middleware/index.js.map +1 -1
  12. package/dist/server/config/dotenv.d.ts +6 -3
  13. package/dist/server/config/dotenv.js +10 -9
  14. package/dist/server/config/dotenv.js.map +1 -1
  15. package/dist/server/config/index.d.ts +1 -0
  16. package/dist/server/config/index.js +1 -0
  17. package/dist/server/config/index.js.map +1 -1
  18. package/dist/server/config/kms.d.ts +20 -0
  19. package/dist/server/config/kms.js +46 -0
  20. package/dist/server/config/kms.js.map +1 -0
  21. package/dist/server/index.d.ts +2 -0
  22. package/dist/server/index.js +2 -0
  23. package/dist/server/index.js.map +1 -1
  24. package/dist/server/middleware/apiKey.middleware.d.ts +2 -0
  25. package/dist/server/middleware/apiKey.middleware.js +67 -0
  26. package/dist/server/middleware/apiKey.middleware.js.map +1 -0
  27. package/dist/server/middleware/index.d.ts +2 -0
  28. package/dist/server/middleware/index.js +2 -0
  29. package/dist/server/middleware/index.js.map +1 -1
  30. package/dist/server/middleware/mutiAuth.middleware.d.ts +1 -0
  31. package/dist/server/middleware/mutiAuth.middleware.js +3 -0
  32. package/dist/server/middleware/mutiAuth.middleware.js.map +1 -0
  33. package/dist/server/repositories/apiKey.repository.d.ts +7 -0
  34. package/dist/server/repositories/apiKey.repository.js +16 -0
  35. package/dist/server/repositories/apiKey.repository.js.map +1 -0
  36. package/dist/server/repositories/index.d.ts +1 -0
  37. package/dist/server/repositories/index.js +2 -0
  38. package/dist/server/repositories/index.js.map +1 -0
  39. package/dist/server/services/crypto.service.d.ts +18 -0
  40. package/dist/server/services/crypto.service.js +40 -0
  41. package/dist/server/services/crypto.service.js.map +1 -0
  42. package/dist/server/services/index.d.ts +1 -0
  43. package/dist/server/services/index.js +2 -0
  44. package/dist/server/services/index.js.map +1 -0
  45. package/package.json +1 -1
@@ -1,3 +1,5 @@
1
+ export * from "./apiKey.middleware";
2
+ export * from "./mutiAuth.middleware";
1
3
  export * from "./privy.middleware";
2
4
  export * from "./rateLimit.middleware";
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // I wanna be able to use multiple auths in one middleware
3
+ //# sourceMappingURL=mutiAuth.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutiAuth.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/mutiAuth.middleware.ts"],"names":[],"mappings":";AAAA,0DAA0D"}
@@ -0,0 +1,7 @@
1
+ import { ApiKey, Prisma } from "../../core";
2
+ export declare const apiKeyRepository: {
3
+ storeApiKey(apiKey: Prisma.ApiKeyCreateInput): Promise<ApiKey>;
4
+ getApiKey(filter: Prisma.ApiKeyWhereUniqueInput): Promise<ApiKey | null>;
5
+ getApiKeys(filter: Prisma.ApiKeyWhereInput): Promise<ApiKey[]>;
6
+ updateApiKey(filter: Prisma.ApiKeyWhereUniqueInput, data: Prisma.ApiKeyUpdateInput): Promise<ApiKey>;
7
+ };
@@ -0,0 +1,16 @@
1
+ import { prismaClientManager } from "../config/prisma";
2
+ export const apiKeyRepository = {
3
+ storeApiKey(apiKey) {
4
+ return prismaClientManager.client.apiKey.create({ data: apiKey });
5
+ },
6
+ getApiKey(filter) {
7
+ return prismaClientManager.client.apiKey.findUnique({ where: { ...filter, isActive: true } });
8
+ },
9
+ getApiKeys(filter) {
10
+ return prismaClientManager.client.apiKey.findMany({ where: { ...filter, isActive: true } });
11
+ },
12
+ updateApiKey(filter, data) {
13
+ return prismaClientManager.client.apiKey.update({ where: { ...filter, isActive: true }, data });
14
+ },
15
+ };
16
+ //# sourceMappingURL=apiKey.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.repository.js","sourceRoot":"","sources":["../../../src/server/repositories/apiKey.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,WAAW,CAAC,MAAgC;QACxC,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IACrE,CAAC;IACD,SAAS,CAAC,MAAqC;QAC3C,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IACjG,CAAC;IACD,UAAU,CAAC,MAA+B;QACtC,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IAC/F,CAAC;IACD,YAAY,CAAC,MAAqC,EAAE,IAA8B;QAC9E,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACnG,CAAC;CACJ,CAAA"}
@@ -0,0 +1 @@
1
+ export * from "./apiKey.repository";
@@ -0,0 +1,2 @@
1
+ export * from "./apiKey.repository";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/repositories/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,18 @@
1
+ interface SignRequestParams {
2
+ method: string;
3
+ path?: string;
4
+ ts: number;
5
+ body: any;
6
+ nonce: string;
7
+ plaintext: Buffer;
8
+ }
9
+ export declare const cryptoService: {
10
+ CMK_ID: string;
11
+ generateDataKey(): Promise<{
12
+ ciphertext: string;
13
+ plaintext: string;
14
+ }>;
15
+ signRequest({ method, path, ts, body, nonce, plaintext }: SignRequestParams): string;
16
+ getPlaintextKey(apiKeyId: string, ciphertextBase64: string): Promise<Buffer>;
17
+ };
18
+ export {};
@@ -0,0 +1,40 @@
1
+ import { DecryptCommand, GenerateDataKeyCommand } from "@aws-sdk/client-kms";
2
+ import crypto from "crypto";
3
+ import _ from "lodash";
4
+ import { kmsClientManager } from "../config";
5
+ // TODO: cache with redis instead
6
+ const keyCache = new Map();
7
+ export const cryptoService = {
8
+ CMK_ID: "b6050d0f-be5b-418c-9056-c53c1d982dec", // TODO: make per env
9
+ async generateDataKey() {
10
+ const CMK_ID = "b6050d0f-be5b-418c-9056-c53c1d982dec";
11
+ const gdk = await kmsClientManager.client.send(new GenerateDataKeyCommand({ KeyId: CMK_ID, KeySpec: "AES_256" }));
12
+ if (_.isNil(gdk.Plaintext) || _.isNil(gdk.CiphertextBlob))
13
+ throw new Error("Failed to generate data key");
14
+ const plaintext = Buffer.from(gdk.Plaintext).toString("base64");
15
+ const ciphertext = Buffer.from(gdk.CiphertextBlob).toString("base64");
16
+ return { ciphertext, plaintext };
17
+ },
18
+ signRequest({ method, path, ts, body, nonce, plaintext }) {
19
+ const bodyString = body && Object.keys((body ?? {})).length > 0 ? JSON.stringify(body) : "";
20
+ const bodyHash = crypto.createHash("sha256").update(bodyString).digest("hex");
21
+ const toSign = `${method}\n${path ?? ""}\n${ts.toString()}\n${bodyHash}\n${nonce}`;
22
+ const h = crypto.createHmac("sha256", plaintext);
23
+ h.update(toSign);
24
+ return h.digest("base64");
25
+ },
26
+ async getPlaintextKey(apiKeyId, ciphertextBase64) {
27
+ const cache = keyCache.get(apiKeyId);
28
+ if (cache && cache.expiresAt > Date.now())
29
+ return cache.plaintext;
30
+ const ciphertext = Buffer.from(ciphertextBase64, "base64");
31
+ const resp = await kmsClientManager.client.send(new DecryptCommand({ CiphertextBlob: ciphertext }));
32
+ if (!resp.Plaintext)
33
+ throw new Error("KMS Decrypt failed: No plaintext returned");
34
+ const plaintext = Buffer.from(resp.Plaintext);
35
+ // Cache for 5 minutes
36
+ keyCache.set(apiKeyId, { plaintext, expiresAt: Date.now() + 5 * 60 * 1000 });
37
+ return plaintext;
38
+ },
39
+ };
40
+ //# sourceMappingURL=crypto.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.service.js","sourceRoot":"","sources":["../../../src/server/services/crypto.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./crypto.service";
@@ -0,0 +1,2 @@
1
+ export * from "./crypto.service";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levrbet/shared",
3
- "version": "0.1.94",
3
+ "version": "0.1.95",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {