@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.
- package/dist/core/prisma/generated/edge.js +15 -4
- package/dist/core/prisma/generated/index-browser.js +12 -1
- package/dist/core/prisma/generated/index.d.ts +129 -28
- package/dist/core/prisma/generated/index.js +15 -4
- package/dist/core/prisma/generated/package.json +1 -1
- package/dist/core/prisma/generated/schema.prisma +12 -1
- package/dist/core/prisma/generated/wasm.js +15 -4
- package/dist/server/auth/kms.js +7 -22
- package/dist/server/auth/kms.js.map +1 -1
- package/dist/server/auth/middleware/index.d.ts +7 -1
- package/dist/server/auth/middleware/index.js.map +1 -1
- package/dist/server/config/dotenv.d.ts +6 -3
- package/dist/server/config/dotenv.js +10 -9
- package/dist/server/config/dotenv.js.map +1 -1
- package/dist/server/config/index.d.ts +1 -0
- package/dist/server/config/index.js +1 -0
- package/dist/server/config/index.js.map +1 -1
- package/dist/server/config/kms.d.ts +20 -0
- package/dist/server/config/kms.js +46 -0
- package/dist/server/config/kms.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/apiKey.middleware.d.ts +2 -0
- package/dist/server/middleware/apiKey.middleware.js +67 -0
- package/dist/server/middleware/apiKey.middleware.js.map +1 -0
- package/dist/server/middleware/index.d.ts +2 -0
- package/dist/server/middleware/index.js +2 -0
- package/dist/server/middleware/index.js.map +1 -1
- package/dist/server/middleware/mutiAuth.middleware.d.ts +1 -0
- package/dist/server/middleware/mutiAuth.middleware.js +3 -0
- package/dist/server/middleware/mutiAuth.middleware.js.map +1 -0
- package/dist/server/repositories/apiKey.repository.d.ts +7 -0
- package/dist/server/repositories/apiKey.repository.js +16 -0
- package/dist/server/repositories/apiKey.repository.js.map +1 -0
- package/dist/server/repositories/index.d.ts +1 -0
- package/dist/server/repositories/index.js +2 -0
- package/dist/server/repositories/index.js.map +1 -0
- package/dist/server/services/crypto.service.d.ts +18 -0
- package/dist/server/services/crypto.service.js +40 -0
- package/dist/server/services/crypto.service.js.map +1 -0
- package/dist/server/services/index.d.ts +1 -0
- package/dist/server/services/index.js +2 -0
- package/dist/server/services/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
|